1
0
Fork 0
mirror of synced 2024-07-06 23:21:05 +12:00
appwrite/public/scripts/views/forms/code.js

74 lines
2.3 KiB
JavaScript
Raw Normal View History

2019-08-21 23:00:32 +12:00
(function (window) {
"use strict";
window.ls.container.get('view').add(
{
selector: 'data-forms-code',
2019-09-03 03:08:13 +12:00
controller: function(element, alerts) {
2019-09-03 02:22:16 +12:00
let lang = element.dataset['formsCode'] || 'json';
2019-08-21 23:00:32 +12:00
let div = document.createElement('div');
let pre = document.createElement('pre');
let code = document.createElement('code');
let copy = document.createElement('i');
div.appendChild(pre);
2019-09-03 03:08:13 +12:00
div.appendChild(copy);
2019-08-21 23:00:32 +12:00
pre.appendChild(code);
element.parentNode.appendChild(div);
div.className = 'ide';
pre.className = 'line-numbers';
2019-09-03 02:22:16 +12:00
code.className = 'prism language-' + lang;
2019-08-21 23:00:32 +12:00
copy.className = 'icon-docs copy';
copy.title = 'Copy to Clipboard';
copy.addEventListener('click', function () {
2019-09-11 06:13:19 +12:00
element.disabled = false;
element.focus();
element.select();
document.execCommand('Copy');
if (document.selection) {
document.selection.empty();
}
else if (window.getSelection) {
window.getSelection().removeAllRanges();
2019-08-21 23:00:32 +12:00
}
2019-09-11 06:13:19 +12:00
element.disabled = true;
alerts.add({text: 'Copied to clipboard', class: ''}, 3000);
2019-08-21 23:00:32 +12:00
});
let check = function() {
if(!element.value) {
return;
}
2019-09-03 02:22:16 +12:00
let value = null;
try {
value = JSON.stringify(JSON.parse(element.value), null, 4);
}
catch(error) {
value = element.value;
}
2019-08-21 23:00:32 +12:00
code.innerHTML = value;
Prism.highlightElement(code);
div.scrollTop = 0;
}
element.addEventListener('change', check);
check();
}
}
);
})(window);