Add workaround for "share grid link" on insecure sites

This commit is contained in:
Lance Edgar 2023-05-18 13:48:22 -05:00
parent c18367739f
commit 8d880fc9dd

View file

@ -315,6 +315,12 @@
</template> </template>
</b-table> </b-table>
## dummy input field needed for sharing links on *insecure* sites
% if request.scheme == 'http':
<b-input v-model="shareLink" ref="shareLink" v-show="shareLink"></b-input>
% endif
</div> </div>
</script> </script>
@ -349,6 +355,11 @@
filters: ${json.dumps(filters_data if grid.filterable else None)|n}, filters: ${json.dumps(filters_data if grid.filterable else None)|n},
filtersSequence: ${json.dumps(filters_sequence if grid.filterable else None)|n}, filtersSequence: ${json.dumps(filters_sequence if grid.filterable else None)|n},
selectedFilter: null, selectedFilter: null,
## dummy input value needed for sharing links on *insecure* sites
% if request.scheme == 'http':
shareLink: null,
% endif
} }
let ${grid.component_studly} = { let ${grid.component_studly} = {
@ -382,7 +393,27 @@
methods: { methods: {
copyDirectLink() { copyDirectLink() {
navigator.clipboard.writeText(this.directLink)
if (navigator.clipboard) {
// this is the way forward, but requires HTTPS
navigator.clipboard.writeText(this.directLink)
} else {
// use deprecated 'copy' command, but this just
// tells the browser to copy currently-selected
// text..which means we first must "add" some text
// to screen, and auto-select that, before copying
// to clipboard
this.shareLink = this.directLink
this.$nextTick(() => {
let input = this.$refs.shareLink.$el.firstChild
input.select()
document.execCommand('copy')
// re-hide the dummy input
this.shareLink = null
})
}
this.$buefy.toast.open({ this.$buefy.toast.open({
message: "Link was copied to clipboard", message: "Link was copied to clipboard",
type: 'is-info', type: 'is-info',