From bd90ba8fc56ca08cff9a1ceea043cae32a457f2a Mon Sep 17 00:00:00 2001 From: eldadfux Date: Tue, 10 Sep 2019 21:13:19 +0300 Subject: [PATCH] Fixed copy button --- public/dist/scripts/app-all.js | 10 ++++++---- public/dist/scripts/app.js | 10 ++++++---- public/scripts/views/forms/code.js | 27 ++++++++++++++------------- public/scripts/views/forms/copy.js | 27 ++++++++++++++------------- 4 files changed, 40 insertions(+), 34 deletions(-) diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js index 830f5bca4..90e45eb48 100644 --- a/public/dist/scripts/app-all.js +++ b/public/dist/scripts/app-all.js @@ -2404,16 +2404,18 @@ if(target){target=document.getElementById(target);} button.addEventListener('click',function(){var clone=document.createElement(element.tagName);if(element.name){clone.name=element.name;} clone.innerHTML=template;clone.className=element.className;view.render(clone);if(target){target.appendChild(clone);} else{button.parentNode.insertBefore(clone,button);} -clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-code',controller:function(element,alerts){let lang=element.dataset['formsCode']||'json';let div=document.createElement('div');let pre=document.createElement('pre');let code=document.createElement('code');let copy=document.createElement('i');div.appendChild(pre);div.appendChild(copy);pre.appendChild(code);element.parentNode.appendChild(div);div.className='ide';pre.className='line-numbers';code.className='prism language-'+lang;copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);} -window.getSelection().removeAllRanges();});let check=function(){if(!element.value){return;} +clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-code',controller:function(element,alerts){let lang=element.dataset['formsCode']||'json';let div=document.createElement('div');let pre=document.createElement('pre');let code=document.createElement('code');let copy=document.createElement('i');div.appendChild(pre);div.appendChild(copy);pre.appendChild(code);element.parentNode.appendChild(div);div.className='ide';pre.className='line-numbers';code.className='prism language-'+lang;copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){element.disabled=false;element.focus();element.select();document.execCommand('Copy');if(document.selection){document.selection.empty();} +else if(window.getSelection){window.getSelection().removeAllRanges();} +element.disabled=true;alerts.add({text:'Copied to clipboard',class:''},3000);});let check=function(){if(!element.value){return;} let value=null;try{value=JSON.stringify(JSON.parse(element.value),null,4);} catch(error){value=element.value;} code.innerHTML=value;Prism.highlightElement(code);div.scrollTop=0;} element.addEventListener('change',check);check();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}} function syncA(){element.value=picker.value;update();} function syncB(){picker.value=element.value;} -element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){window.getSelection().removeAllRanges();var range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);} -window.getSelection().removeAllRanges();};button.addEventListener('click',copy);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-forms-filter',controller:function(document,container,expression,element,form,di){let name=element.dataset['formsFilter']||'';let events=element.dataset['event']||'';let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===''){continue;} +element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){element.disabled=false;element.focus();element.select();document.execCommand('Copy');if(document.selection){document.selection.empty();} +else if(window.getSelection){window.getSelection().removeAllRanges();} +element.disabled=true;alerts.add({text:'Copied to clipboard',class:''},3000);};button.addEventListener('click',copy);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-forms-filter',controller:function(document,container,expression,element,form,di){let name=element.dataset['formsFilter']||'';let events=element.dataset['event']||'';let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===''){continue;} str.push((v!==null&&typeof v==="object")?serialize(v,k):encodeURIComponent(k)+"="+encodeURIComponent(v));}} return str.join("&");};let parse=function(filter){if(filter===''){return null;} let operatorsMap=["!=",">=","<=","=",">","<"];let operator=null;for(let key=0;key-1){operator=operatorsMap[key];}} diff --git a/public/dist/scripts/app.js b/public/dist/scripts/app.js index 6e1114cda..2e1a36c8a 100644 --- a/public/dist/scripts/app.js +++ b/public/dist/scripts/app.js @@ -318,16 +318,18 @@ if(target){target=document.getElementById(target);} button.addEventListener('click',function(){var clone=document.createElement(element.tagName);if(element.name){clone.name=element.name;} clone.innerHTML=template;clone.className=element.className;view.render(clone);if(target){target.appendChild(clone);} else{button.parentNode.insertBefore(clone,button);} -clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-code',controller:function(element,alerts){let lang=element.dataset['formsCode']||'json';let div=document.createElement('div');let pre=document.createElement('pre');let code=document.createElement('code');let copy=document.createElement('i');div.appendChild(pre);div.appendChild(copy);pre.appendChild(code);element.parentNode.appendChild(div);div.className='ide';pre.className='line-numbers';code.className='prism language-'+lang;copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);} -window.getSelection().removeAllRanges();});let check=function(){if(!element.value){return;} +clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-code',controller:function(element,alerts){let lang=element.dataset['formsCode']||'json';let div=document.createElement('div');let pre=document.createElement('pre');let code=document.createElement('code');let copy=document.createElement('i');div.appendChild(pre);div.appendChild(copy);pre.appendChild(code);element.parentNode.appendChild(div);div.className='ide';pre.className='line-numbers';code.className='prism language-'+lang;copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){element.disabled=false;element.focus();element.select();document.execCommand('Copy');if(document.selection){document.selection.empty();} +else if(window.getSelection){window.getSelection().removeAllRanges();} +element.disabled=true;alerts.add({text:'Copied to clipboard',class:''},3000);});let check=function(){if(!element.value){return;} let value=null;try{value=JSON.stringify(JSON.parse(element.value),null,4);} catch(error){value=element.value;} code.innerHTML=value;Prism.highlightElement(code);div.scrollTop=0;} element.addEventListener('change',check);check();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}} function syncA(){element.value=picker.value;update();} function syncB(){picker.value=element.value;} -element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){window.getSelection().removeAllRanges();var range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.add({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:'error'},3000);} -window.getSelection().removeAllRanges();};button.addEventListener('click',copy);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-forms-filter',controller:function(document,container,expression,element,form,di){let name=element.dataset['formsFilter']||'';let events=element.dataset['event']||'';let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===''){continue;} +element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){element.disabled=false;element.focus();element.select();document.execCommand('Copy');if(document.selection){document.selection.empty();} +else if(window.getSelection){window.getSelection().removeAllRanges();} +element.disabled=true;alerts.add({text:'Copied to clipboard',class:''},3000);};button.addEventListener('click',copy);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-forms-filter',controller:function(document,container,expression,element,form,di){let name=element.dataset['formsFilter']||'';let events=element.dataset['event']||'';let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===''){continue;} str.push((v!==null&&typeof v==="object")?serialize(v,k):encodeURIComponent(k)+"="+encodeURIComponent(v));}} return str.join("&");};let parse=function(filter){if(filter===''){return null;} let operatorsMap=["!=",">=","<=","=",">","<"];let operator=null;for(let key=0;key-1){operator=operatorsMap[key];}} diff --git a/public/scripts/views/forms/code.js b/public/scripts/views/forms/code.js index 021991802..03f164ac1 100644 --- a/public/scripts/views/forms/code.js +++ b/public/scripts/views/forms/code.js @@ -25,22 +25,23 @@ copy.title = 'Copy to Clipboard'; copy.addEventListener('click', function () { - window.getSelection().removeAllRanges(); + element.disabled = false; + + element.focus(); + element.select(); + + document.execCommand('Copy'); - let range = document.createRange(); - - range.selectNode(element); - - window.getSelection().addRange(range); - - try { - document.execCommand('copy'); - alerts.add({text: 'Copied to clipboard', class: ''}, 3000); - } catch (err) { - alerts.add({text: "Failed to copy text ", class: 'error'}, 3000); + if (document.selection) { + document.selection.empty(); + } + else if (window.getSelection) { + window.getSelection().removeAllRanges(); } - window.getSelection().removeAllRanges(); + element.disabled = true; + + alerts.add({text: 'Copied to clipboard', class: ''}, 3000); }); let check = function() { diff --git a/public/scripts/views/forms/copy.js b/public/scripts/views/forms/copy.js index 22192c059..d1c6d0d3f 100644 --- a/public/scripts/views/forms/copy.js +++ b/public/scripts/views/forms/copy.js @@ -14,22 +14,23 @@ element.parentNode.insertBefore(button, element.nextSibling); var copy = function(event) { - window.getSelection().removeAllRanges(); + element.disabled = false; + + element.focus(); + element.select(); + + document.execCommand('Copy'); - var range = document.createRange(); - - range.selectNode(element); - - window.getSelection().addRange(range); - - try { - document.execCommand('copy'); - alerts.add({text: 'Copied to clipboard', class: ''}, 3000); - } catch (err) { - alerts.add({text: "Failed to copy text ", class: 'error'}, 3000); + if (document.selection) { + document.selection.empty(); + } + else if (window.getSelection) { + window.getSelection().removeAllRanges(); } - window.getSelection().removeAllRanges(); + element.disabled = true; + + alerts.add({text: 'Copied to clipboard', class: ''}, 3000); }; button.addEventListener('click', copy);