/* --------------------------------------------------------------------
Chevereto Popup Upload Plugin (PUP)
@website http://chevereto.com/
@version 1.0.3
@author Rodolfo Berrios A.
--------------------------------------------------------------------- */
(function() {
({
defaultSettings: {
url: 'https://demo.chevereto.com/upload',
vendor: 'auto',
mode: 'auto',
lang: 'auto',
autoInsert: 'bbcode-embed-medium',
palette: 'default',
init: 'onload',
containerClass: 1,
buttonClass: 1,
sibling: 0,
siblingPos: 'after',
fitEditor: 0,
observe: 0,
observeCache: 1,
html: '
',
css: '.%cClass{display:inline-block;margin-top:5px;margin-bottom:5px}.%bClass{line-height:normal;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s;outline:0;color:%2;border:none;cursor:pointer;border:1px solid rgba(0,0,0,.15);background:%1;border-radius:.2em;padding:.5em 1em;font-size:12px;font-weight:700;text-shadow:none}.%bClass:hover{background:%3;color:%4;border-color:rgba(0,0,0,.1)}.%iClass,.%tClass{display:inline-block;vertical-align:middle}.%iClass svg{display:block;width:1em;height:1em;fill:currentColor}.%tClass{margin-left:.25em}',
},
ns: {
plugin: 'chevereto-pup'
},
palettes: {
default: ['#ececec','#333','#2980b9','#fff'],
clear: ['inherit','inherit','inherit','#2980b9'],
turquoise: ['#16a085','#fff','#1abc9c','#fff'],
green: ['#27ae60','#fff','#2ecc71','#fff'],
blue: ['#2980b9','#fff','#3498db','#fff'],
purple: ['#8e44ad','#fff','#9b59b6','#fff'],
darkblue: ['#2c3e50','#fff','#34495e','#fff'],
yellow: ['#f39c12','#fff','#f1c40f','#fff'],
orange: ['#d35400','#fff','#e67e22','#fff'],
red: ['#c0392b','#fff','#e74c3c','#fff'],
grey: ['#ececec','#000','#e0e0e0','#000'],
black: ['#333','#fff','#666','#fff']
},
classProps: ['button', 'container'],
iconSvg: '',
l10n: {
"ar":"\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631",
"cs":"Nahr\u00e1t obr\u00e1zky",
"de":"Bilder hochalden",
"es":"Subir im\u00e1genes",
"fi":"Lataa kuvia",
"fr":"Importer des images",
"id":"Unggah gambar",
"it":"Carica immagini",
"ja":"\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9",
"nl":"Upload afbeeldingen",
"pt_BR":"Enviar imagens",
"ru":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
"zh_CN":"\u4e0a\u4f20\u56fe\u7247",
"zh_TW":"\u4e0a\u50b3\u5716\u7247"
},
vendors: {
default: {
check: function() {
return 1;
},
getEditor: function() {
var skip = {
textarea: {
name: ['recaptcha', 'search', 'recipients', 'coppa', '^comment_list', 'username_list', 'add']
},
ce: {
dataset: ['gramm']
}
};
var mods = ['~', '|', '^', '$', '*'];
var not = {};
for(var k in skip) {
not[k] = '';
var el = skip[k];
for(var attr in el) {
for (var i=0; i -1) {
mod = f;
value = value.substring(1);
}
not[k] += ':not([' + (attr == 'dataset' ? ('data-' + value) : (attr + mod + '="' + value + '"')) + '])';
}
}
}
return document.querySelectorAll('[contenteditable=""]' + not.ce + ',[contenteditable="true"]' + not.ce + ',textarea:not([readonly])' + not.textarea);
}
},
bbpress: {
settings: {
autoInsert: 'html-embed-medium',
html: '',
sibling: '#qt_bbp_reply_content_img',
siblingPos: 'before'
},
check: 'bbpEngagementJS',
},
discourse: {
settings: {
autoInsert: 'markdown-embed-medium',
html: '',
sibling: '.upload.btn',
siblingPos: 'before',
observe: '.create,#create-topic,.usercard-controls button',
observeCache: 0,
onDemand: 1
},
check: 'Discourse'
},
discuz: {
settings: {
buttonClass: 1,
html: '%iconSvg',
sibling: '.fclr,#e_attach',
css: 'a.%bClass,.bar a.%bClass{box-sizing:border-box;cursor:pointer;background:%1;color:%2;text-indent:unset;position:relative}.b1r a.%bClass:hover,a.%bClass:hover{background:%3;color:%4}a.%bClass{font-size:14px}.b1r a.%bClass{border:1px solid rgba(0,0,0,.15)!important;font-size:20px;padding:0;height:44px}.%bClass svg{font-size:1em;width:1em;height:1em;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;left:50%;top:50%;fill:currentColor}',
palette: 'purple',
},
palettes: {
default: ['transparent','#333','#2980b9','#fff'],
},
check: 'DISCUZCODE',
getEditor: function() {
return document.querySelector('.area textarea[name="message"]');
}
},
ipb: {
settings: {
autoInsert: 'html-embed-medium',
html: '%iconSvg%text',
sibling: '.cke_button__ipslink',
siblingPos: 'before',
css: '.cke_button.%bClass{background:%1;position:relative}.cke_button.%bClass:hover{background:%3;border-color:%5}.cke_button.%bClass svg{font-size:15px;width:1em;height:1em;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;left:50%;top:50%;fill:%2}.cke_button.%bClass:hover svg{fill:%4}'
},
palettes: {
default: ['inherit', '#444', '', 'inherit']
},
check: 'ips',
getEditorFn: function() {
var id = this.getEditor().dataset.ipseditorName;
return CKEDITOR.instances[id];
},
getEditor: function() {
return document.querySelector('[data-ipseditor-name]');
},
editorValue: function(str) {
var element = CKEDITOR.dom.element.createFromHtml('' + str + '
');
this.getEditorFn().insertElement(element);
},
useCustomEditor: function() {
return 1;
}
},
mybb: {
settings: {
sibling: '#quickreply_e > tr > td > *:last-child, .sceditor-container',
fitEditor: 0,
extracss: '.trow2 .%cClass{margin-bottom:0}'
},
check: 'MyBB',
getEditor: function() {
if(MyBBEditor) {
return MyBBEditor.getContentAreaContainer()[0].parentElement;
}
return document.querySelector('#quickreply_e textarea');
},
editorValue: function(str) {
if(MyBBEditor) {
var fn = MyBBEditor.inSourceMode() ? 'insert' : 'wysiwygEditorInsertHtml';
MyBBEditor[fn](fn == 'insert' ? str : MyBBEditor.fromBBCode(str));
} else {
this.getEditor().value += str;
}
},
useCustomEditor: function() {
return !!MyBBEditor;
}
},
nodebb: {
settings: {
autoInsert: 'markdown-embed-medium',
html: '',
sibling: '[data-format="picture-o"]',
siblingPos: 'before',
observe: '[component="category/post"],[component="topic/reply"],[component="topic/reply-as-topic"],[component="post/reply"],[component="post/quote"]',
observeCache: 0,
onDemand: 1
},
check: '__nodebbSpamBeGoneCreateCaptcha__',
callback: function() {
var els = document.querySelectorAll('.btn-toolbar .img-upload-btn');
for(var i=0; i ' : ' ',
sibling: '.bbcode-img',
siblingPos: 'before'
},
check: 'phpbb',
getEditor: function() {
if(typeof form_name == typeof undefined || typeof text_name == typeof undefined) {
return;
}
return document.forms[form_name].elements[text_name];
},
},
smf: {
settings: {
html: ' ',
css: '%defaultCSS #bbcBox_message .%bClass{margin-right:1px;transition:none;color:%2;padding:0;width:23px;height:21px;border-radius:5px;background-color:%1}#bbcBox_message .%bClass:hover{background-color:%3}#bbcBox_message .%tClass{display:none}',
sibling: '#BBCBox_message_button_1_1,.quickReplyContent + div',
siblingPos: 'before',
fitEditor: 1,
},
palettes: {
default: ['#E7E7E7', '#333', '#B0C4D6', '#333'],
},
check: 'smf_scripturl',
getEditor: function() {
return smf_editorArray.length > 0 ? smf_editorArray[0].oTextHandle : document.querySelector('.quickReplyContent textarea');
}
},
vanilla: {
settings: {
autoInsert: 'markdown-embed-medium',
html: '',
sibling: '.editor-dropdown-upload'
},
check: 'Vanilla',
getEditor: function() {
return document.getElementById('Form_Body');
}
},
vbulletin: {
settings: {
autoInsert: 'html-embed-medium',
html: '%iconSvg',
sibling: '.b-toolbar__item--secondary:first-child',
siblingPos: 'before',
css: '.%bClass{background:%1;color:%2;position:relative}.%bClass:hover{background:%3;color:%4;border-color:%5}.%bClass svg{font-size:15px;width:1em;height:1em;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;left:50%;top:50%;fill:currentColor}'
},
palettes: {
default: ['', '#4B6977', '', '#007EB8']
},
check: 'vBulletin',
getEditorFn: function() {
var id = this.getEditor().getAttribute('ck-editorid');
return CKEDITOR.instances[id];
},
getEditor: function() {
return document.querySelector('[data-message-type]');
},
editorValue: function(str) {
var element = CKEDITOR.dom.element.createFromHtml('' + str + '
');
this.getEditorFn().insertElement(element);
},
useCustomEditor: function() {
return 1;
}
},
xenforo: {
settings: {
autoInsert: 'html-embed-medium',
containerClass: 1,
buttonClass: 1,
html: '%iconSvg',
sibling: '.redactor_btn_container_image',
siblingPos: 'before',
css: 'li.%cClass .%bClass{background:%1;color:%2;text-indent:unset;border-radius:3px;position:relative}li.%cClass a.%bClass:hover{background:%3;color:%4;border-color:%5}.%cClass .%bClass svg{font-size:15px;width:1em;height:1em;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;left:50%;top:50%;fill:currentColor}',
observe: '.edit.OverlayTrigger',
observeCache: 1
},
palettes: {
default: ['none', 'inherit', 'none', 'inherit', '']
},
check: 'XenForo',
getEditorFn: function() {
var form = (document.querySelector('#exposeMask') && document.querySelector('#exposeMask').offsetParent) ? '.xenOverlay form' : 'form';
if(form !== 'form') {
var forms = document.querySelectorAll(form);
for(var i=0; i';
this.getEditorFn().insertHtml(this.editorValue() !== '' ? (nl + insert) : insert);
} else {
this.getEditorEl()[property] = str;
}
return;
}
var value = this.getEditorEl()[property];
if(this.useCustomEditor() && value == '
') {
return '';
}
return this.getEditorEl()[property];
},
useCustomEditor: function() {
return !(this.getEditorFn() instanceof jQuery);
}
}
},
generateGuid: function() {
var d = new Date().getTime();
if (typeof performance !== 'undefined' && typeof performance.now === 'function'){
d += performance.now();
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
},
getNewValue: function(el, msg) {
var prop = typeof el.getAttribute('contenteditable') !== 'string' ? 'value' : 'innerHTML';
var newline = prop == 'value' ? '\n' : '
';
var value = el[prop];
var fixed = msg;
var escape = false;
if(escape) {
fixed = String(msg).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
}
if(value.length == 0) {
return fixed;
}
var ret = '';
var match = value.match(/\n+$/g);
var newlines = match ? match[0].split("\n").length : 0;
if(newlines <= 2) {
var repeats = newlines == 0 ? 2 : 1;
ret += newline.repeat(repeats);
}
return ret + fixed;
},
insertTrigger: function() {
var vendor = this.vendors[this.settings.vendor];
var sibling = !this.settings.sibling ? 0 : document.querySelectorAll(this.settings.sibling + ':not([' + this.ns.dataPlugin + '])')[0];
var areas;
if(this.settings.mode == 'auto') {
areas = this.vendors[vendor.hasOwnProperty('getEditor') ? this.settings.vendor : 'default'].getEditor();
} else {
var targets = document.querySelectorAll('[' + this.ns.dataPluginTrigger + '][data-target]:not([' + this.ns.dataPluginId + '])');
var targetsSel = [];
for(var i=0; i 0) {
areas = document.querySelectorAll(targetsSel.join(','));
}
}
if(!areas) {
return;
}
if(!document.getElementById(this.ns.pluginStyle) && this.settings.css) {
var style = document.createElement('style');
var rules = this.settings.css;
rules = this.appyTemplate(rules);
style.type = 'text/css';
style.innerHTML = rules.replace(/%p/g, '.' + this.ns.plugin);
style.setAttribute('id', this.ns.pluginStyle);
document.body.appendChild(style);
}
if(!(areas instanceof NodeList)) {
areas = [areas];
}
var count = 0;
for (var i=0; i tolerance[key]) {
size[key] = client[key] * tolerance[key];
}
}
var pos = {
l: Math.trunc(((client.w / 2) - (size.w / 2)) + client.l),
t: Math.trunc(((client.h / 2) - (size.h / 2)) + client.t)
};
this.popups[id].window = window.open(this.settings.url, id, 'width=' + size.w + ',height=' + size.h + ',top=' + pos.t + ',left=' + pos.l);
this.popups[id].timer = window.setInterval(function() {
if (!self.popups[id].window || self.popups[id].window.closed !== false) {
window.clearInterval(self.popups[id].timer);
self.popups[id] = undefined;
}
}, 200);
},
postSettings: function(id) {
this.popups[id].window.postMessage({id: id, settings: this.settings}, this.settings.url);
},
liveBind: function(qs, et, c) {
document.addEventListener(et, function(e) {
var caller = document.querySelectorAll(qs);
if(!caller) {
return;
}
var el = e.target;
var index = -1;
while (el && ((index = Array.prototype.indexOf.call(caller, el)) === -1)) {
el = el.parentElement;
}
if (index > -1) {
e.preventDefault();
c.call(e, el);
}
}, true);
},
prepare: function() {
var self = this;
this.ns.dataPlugin = 'data-' + this.ns.plugin;
this.ns.dataPluginId = this.ns.dataPlugin + '-id';
this.ns.dataPluginTrigger = this.ns.dataPlugin + '-trigger';
this.ns.dataPluginTarget = this.ns.dataPlugin + '-target';
this.ns.pluginStyle = this.ns.plugin + '-style';
this.ns.selDataPluginTrigger = '[' + this.ns.dataPluginTrigger + ']';
var srcEl = document.currentScript || document.getElementById(this.ns.plugin + '-src');
if(!srcEl) {
srcEl = {dataset: {}};
} else if(srcEl.dataset['buttonTemplate']) {
srcEl.dataset['html'] = srcEl.dataset['buttonTemplate'];
}
var nocss = 0;
this.settings = {};
settings = this.settings;
for(var key in this.defaultSettings) {
var value = (srcEl && srcEl.dataset[key]) ? srcEl.dataset[key] : this.defaultSettings[key];
if(value === '1' || value === '0') {
value = (value == 'true');
}
if(typeof value == 'string' && this.classProps.indexOf(key.replace(/Class$/, '')) > -1) {
nocss = 1;
}
settings[key] = value;
}
if(settings.vendor == 'auto') {
settings.vendor = 'default';
settings.fitEditor = 0;
for(var key in this.vendors) {
if(key == 'default') continue;
if(typeof window[this.vendors[key].check] !== typeof undefined) {
settings.vendor = key;
break;
}
}
}
if(settings.vendor == 'default') {
this.vendors.default.settings = {};
var skip = ['lang','url','vendor','target'];
for(var key in this.defaultSettings) {
if(skip.indexOf(key) == -1) {
this.vendors.default.settings[key] = this.defaultSettings[key];
}
}
}
var vendor = this.vendors[settings.vendor];
if(vendor.settings) {
for(var key in vendor.settings) {
if(!srcEl || !srcEl.dataset.hasOwnProperty(key)) {
settings[key] = vendor.settings[key];
}
}
}
if(settings.vendor !== 'default') {
if(!vendor.settings.hasOwnProperty('fitEditor') && !srcEl.dataset.hasOwnProperty('fitEditor')) {
settings.fitEditor = 1;
}
if(settings.fitEditor) {
nocss = !vendor.settings.css;
} else {
var skip = ['autoInsert', 'observe', 'observeCache'];
for(var key in vendor.settings) {
if(skip.indexOf(key) == -1 && !srcEl.dataset.hasOwnProperty(key)) {
settings[key] = this.defaultSettings[key];
}
}
}
}
if(nocss) {
settings.css = '';
} else {
settings.css = settings.css.replace('%defaultCSS', this.defaultSettings.css);
if(vendor.settings.extracss && settings.css) {
settings.css += vendor.settings.extracss;
}
var palette = settings.palette.split(',');
if(palette.length > 1) {
this.palette = palette;
} else if(!this.palettes.hasOwnProperty(palette)) {
settings.palette = 'default';
}
if(!this.palette) {
this.palette = (settings.fitEditor && vendor.palettes && vendor.palettes[settings.palette] ? vendor : this).palettes[settings.palette];
}
}
var props = this.classProps;
for(var i=0; i 0) {
for (var i=0; i