new static files.
Signed-off-by: rscnt <rascnt@gmail.com>
This commit is contained in:
parent
83e792bcaa
commit
fe4f6c97d5
778 changed files with 71557 additions and 0 deletions
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
|
|
@ -0,0 +1,287 @@
|
|||
(function($) {
|
||||
// CMS.$ will be passed for $
|
||||
$(document).ready(function () {
|
||||
|
||||
CKEDITOR.plugins.add('cmsplugins', {
|
||||
|
||||
// Register the icons. They must match command names.
|
||||
icons: 'cmsplugins',
|
||||
|
||||
// The plugin initialization logic goes inside this method.
|
||||
init: function(editor) {
|
||||
var that = this;
|
||||
|
||||
this.options = CMS.CKEditor.options.settings;
|
||||
this.editor = editor;
|
||||
|
||||
// don't do anything if there are no plugins defined
|
||||
if(this.options === undefined || this.options.plugins === undefined) return false;
|
||||
|
||||
this.setupDialog();
|
||||
|
||||
// add the button
|
||||
this.editor.ui.add('cmsplugins', CKEDITOR.UI_PANELBUTTON, {
|
||||
'toolbar': 'cms,0',
|
||||
'label': this.options.lang.toolbar,
|
||||
'title': this.options.lang.toolbar,
|
||||
'className' : 'cke_panelbutton__cmsplugins',
|
||||
'modes': { wysiwyg:1 },
|
||||
'editorFocus': 1,
|
||||
|
||||
'panel': {
|
||||
'css': [CKEDITOR.skin.getPath('editor')].concat(that.editor.config.contentsCss),
|
||||
'attributes': { role: 'cmsplugins', 'aria-label': this.options.lang.aria }
|
||||
},
|
||||
|
||||
// this is called when creating the dropdown list
|
||||
'onBlock': function (panel, block) {
|
||||
block.element.setHtml(that.editor.plugins.cmsplugins.setupDropdown());
|
||||
|
||||
var anchors = $(block.element.$).find('.cke_panel_listItem a');
|
||||
anchors.bind('click', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
that.addPlugin($(this), panel);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// handle edit event via context menu
|
||||
if(this.editor.contextMenu) {
|
||||
this.setupContextMenu();
|
||||
this.editor.addCommand('cmspluginsEdit', {
|
||||
exec: function () {
|
||||
var selection = that.editor.getSelection();
|
||||
var element = selection.getSelectedElement() || selection.getCommonAncestor().getAscendant('a', true);
|
||||
that.editPlugin(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// hande event via doubleclick
|
||||
// handle edit event on double click
|
||||
this.editor.on('doubleclick', function(event) {
|
||||
var selection = that.editor.getSelection();
|
||||
var element = selection.getSelectedElement() || selection.getCommonAncestor().getAscendant('a', true);
|
||||
if(element && element.getAttribute('id').indexOf('plugin_obj_') === 0 && !element.isReadOnly()) {
|
||||
event.data.dialog = '';
|
||||
that.editPlugin(element);
|
||||
}
|
||||
});
|
||||
|
||||
// setup CKEDITOR.htmlDataProcessor
|
||||
this.setupDataProcessor();
|
||||
},
|
||||
|
||||
setupDialog: function () {
|
||||
var that = this;
|
||||
var definition = function () { return {
|
||||
'title': '',
|
||||
'minWidth': 600,
|
||||
'minHeight': 200,
|
||||
'contents': [{
|
||||
'elements': [{ type: 'html', html: '<iframe style="position:absolute; left:0; top:0; width:100%; height:100%; border:none;" />' }]
|
||||
}],
|
||||
'onOk': function () {
|
||||
var iframe = $(CKEDITOR.dialog.getCurrent().parts.contents.$).find('iframe').contents();
|
||||
iframe.find('form').submit();
|
||||
|
||||
// catch the reload event and reattach
|
||||
var reload = CMS.API.Helpers.reloadBrowser;
|
||||
|
||||
CMS.API.Helpers.reloadBrowser = function() {
|
||||
CKEDITOR.dialog.getCurrent().hide();
|
||||
|
||||
that.insertPlugin(CMS.API.Helpers.dataBridge);
|
||||
|
||||
CMS.API.Helpers.reloadBrowser = reload;
|
||||
return false;
|
||||
};
|
||||
return false;
|
||||
}
|
||||
}};
|
||||
|
||||
// set default definition and open dialog
|
||||
CKEDITOR.dialog.add('cmspluginsDialog', definition);
|
||||
},
|
||||
|
||||
setupDropdown: function () {
|
||||
var tpl = '<div class="cke_panel_block">';
|
||||
|
||||
// loop through the groups
|
||||
$.each(this.options.plugins, function (i, group) {
|
||||
// add template
|
||||
tpl += '<h1 class="cke_panel_grouptitle">' + group.group + '</h1>';
|
||||
tpl += '<ul role="presentation" class="cke_panel_list">';
|
||||
// loop through the plugins
|
||||
$.each(group.items, function (ii, item) {
|
||||
tpl += '<li class="cke_panel_listItem"><a href="#" rel="' + item.type + '">' + item.title + '</a></li>';
|
||||
});
|
||||
tpl += '</ul>';
|
||||
});
|
||||
|
||||
tpl += '</div>';
|
||||
|
||||
return tpl;
|
||||
},
|
||||
|
||||
setupContextMenu: function () {
|
||||
this.editor.addMenuGroup('cmspluginsGroup');
|
||||
this.editor.addMenuItem('cmspluginsItem', {
|
||||
label: this.options.lang.edit,
|
||||
icon: this.path + 'icons/cmsplugins.png',
|
||||
command: 'cmspluginsEdit',
|
||||
group: 'cmspluginsGroup'
|
||||
});
|
||||
|
||||
this.editor.removeMenuItem('image');
|
||||
|
||||
this.editor.contextMenu.addListener(function(element) {
|
||||
if (element.$.id.indexOf('plugin_obj_') === 0) {
|
||||
return { cmspluginsItem: CKEDITOR.TRISTATE_OFF };
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
editPlugin: function (element) {
|
||||
var id = element.getAttribute('id').replace('plugin_obj_', '');
|
||||
this.editor.openDialog('cmspluginsDialog');
|
||||
|
||||
// now tweak in dynamic stuff
|
||||
var dialog = CKEDITOR.dialog.getCurrent();
|
||||
$(dialog.parts.title.$).text(this.options.lang.edit);
|
||||
$(dialog.parts.contents.$).find('iframe').attr('src', '../' + id + '/?_popup=1&no_preview')
|
||||
.bind('load', function () {
|
||||
$(this).contents().find('.submit-row').hide().end()
|
||||
.find('#container').css('min-width', 0).css('padding', 0);
|
||||
});
|
||||
},
|
||||
|
||||
addPlugin: function (item, panel) {
|
||||
var that = this;
|
||||
|
||||
// hide the panel
|
||||
panel.hide();
|
||||
|
||||
// lets figure out how to write something to the editor
|
||||
this.editor.focus();
|
||||
this.editor.fire('saveSnapshot');
|
||||
|
||||
// gather data
|
||||
var data = {
|
||||
'placeholder_id': this.options.placeholder_id,
|
||||
'plugin_type': item.attr('rel'),
|
||||
'plugin_parent': this.options.plugin_id,
|
||||
'plugin_language': this.options.plugin_language
|
||||
};
|
||||
|
||||
// lets do some ajax
|
||||
$.ajax({
|
||||
'type': 'POST',
|
||||
'url': this.options.add_plugin_url,
|
||||
'data': data,
|
||||
'success': function (data) {
|
||||
// cancel if error is returned
|
||||
if(data === 'error') return false;
|
||||
|
||||
// trigger dialog
|
||||
that.addPluginDialog(item, data);
|
||||
},
|
||||
'error': function (error) {
|
||||
alert('There was an error creating the plugin.');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
addPluginDialog: function (item, data) {
|
||||
// open the dialog
|
||||
var selected_text = this.editor.getSelection().getSelectedText();
|
||||
this.editor.openDialog('cmspluginsDialog');
|
||||
|
||||
// now tweak in dynamic stuff
|
||||
var dialog = CKEDITOR.dialog.getCurrent();
|
||||
$(dialog.parts.title.$).text(this.options.lang.add);
|
||||
$(dialog.parts.contents.$).find('iframe').attr('src', data.url)
|
||||
.bind('load', function () {
|
||||
$(this).contents().find('.submit-row').hide().end()
|
||||
.find('#container').css('min-width', 0).css('padding', 0)
|
||||
.find('#id_name').val(selected_text);
|
||||
});
|
||||
},
|
||||
|
||||
// on ajax receivement from server, build <a> or <img> tag dependig in the plugin type
|
||||
insertPlugin: function (data) {
|
||||
var element, attrs = { id: 'plugin_obj_' + data.plugin_id };
|
||||
if (data.plugin_type === this.options.lang.link) {
|
||||
element = new CKEDITOR.dom.element('a', this.editor.document);
|
||||
$.extend(attrs, {
|
||||
'href': '#',
|
||||
'data-cmsplugin_title': data.plugin_desc,
|
||||
'data-cmsplugin_alt': data.plugin_type,
|
||||
'data-cmsplugin_src': data.plugin_icon
|
||||
});
|
||||
element.setText(data.plugin_name);
|
||||
} else {
|
||||
element = new CKEDITOR.dom.element('img', this.editor.document);
|
||||
$.extend(attrs, {
|
||||
'title': data.plugin_desc,
|
||||
'alt': data.plugin_type,
|
||||
'src': data.plugin_icon
|
||||
});
|
||||
}
|
||||
element.setAttributes(attrs);
|
||||
this.editor.insertElement(element);
|
||||
},
|
||||
|
||||
setupDataProcessor: function () {
|
||||
var link_name = this.options.lang.link;
|
||||
var link_pattern = new RegExp("^"+ link_name +"\\s-\\s(.+)$");
|
||||
|
||||
this.editor.dataProcessor.dataFilter.addRules({
|
||||
elements: {
|
||||
// on load from server replace <img> tag by <a> in order to display a real link
|
||||
img: function(element) {
|
||||
var new_element, matches;
|
||||
if (element.attributes.id && element.attributes.alt
|
||||
&& element.attributes.alt === link_name
|
||||
&& element.attributes.id.indexOf('plugin_obj_') === 0) {
|
||||
matches = link_pattern.exec(element.attributes.title);
|
||||
new_element = new CKEDITOR.htmlParser.element('a', {
|
||||
'href': '#',
|
||||
'id': element.attributes.id,
|
||||
'data-cmsplugin_title': element.attributes.title,
|
||||
'data-cmsplugin_src': element.attributes.src,
|
||||
'data-cmsplugin_alt': element.attributes.alt
|
||||
});
|
||||
if (matches) {
|
||||
new_element.add(new CKEDITOR.htmlParser.text(matches[1]));
|
||||
}
|
||||
return new_element;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.editor.dataProcessor.htmlFilter.addRules({
|
||||
elements: {
|
||||
// on post to server replace <a> tag by <img> in order keep plugin format consistent
|
||||
a: function(element) {
|
||||
var new_element;
|
||||
if (element.attributes.id && element.attributes.id.indexOf('plugin_obj_') === 0) {
|
||||
new_element = new CKEDITOR.htmlParser.element('img', {
|
||||
id: element.attributes.id,
|
||||
src: element.attributes['data-cmsplugin_src'],
|
||||
title: element.attributes['data-cmsplugin_title'],
|
||||
alt: element.attributes['data-cmsplugin_alt']
|
||||
});
|
||||
return new_element;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
})(CMS.$);
|
||||
Loading…
Add table
Add a link
Reference in a new issue