diff options
author | Ctibor Brančík <ctibor@brancik.cz> | 2016-03-20 19:27:01 +0100 |
---|---|---|
committer | Ctibor Brančík <ctibor@brancik.cz> | 2016-03-20 19:27:01 +0100 |
commit | 29a6913890a675ddf1a9239b4407f105e02dc95d (patch) | |
tree | dd9ba21b73e9e704952b49d5153616a9dfa9b98f /sites/all/modules/ckeditor_link/plugins | |
parent | 5ddacae6306ce071d4f7e4d438960d6d3a4c6bd8 (diff) | |
download | brdo-29a6913890a675ddf1a9239b4407f105e02dc95d.tar.gz brdo-29a6913890a675ddf1a9239b4407f105e02dc95d.tar.bz2 |
Added drupal modules for site
Diffstat (limited to 'sites/all/modules/ckeditor_link/plugins')
-rw-r--r-- | sites/all/modules/ckeditor_link/plugins/link/plugin.js | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/sites/all/modules/ckeditor_link/plugins/link/plugin.js b/sites/all/modules/ckeditor_link/plugins/link/plugin.js new file mode 100644 index 000000000..c9071a57c --- /dev/null +++ b/sites/all/modules/ckeditor_link/plugins/link/plugin.js @@ -0,0 +1,213 @@ +/** + * @file + * Written by Henri MEDOT <henri.medot[AT]absyx[DOT]fr> + * http://www.absyx.fr + * + * Portions of code: + * Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +(function($) { + + // Get a CKEDITOR.dialog.contentDefinition object by its ID. + var getById = function(array, id, recurse) { + for (var i = 0, item; (item = array[i]); i++) { + if (item.id == id) return item; + if (recurse && item[recurse]) { + var retval = getById(item[recurse], id, recurse); + if (retval) return retval; + } + } + return null; + }; + + var resetInitValues = function(dialog) { + dialog.foreach(function(contentObj) { + contentObj.setInitValue && contentObj.setInitValue(); + }); + }; + + var initAutocomplete = function(input, uri) { + input.setAttribute('autocomplete', 'OFF'); + var jsAC = new Drupal.jsAC($(input), new Drupal.ACDB(uri)); + + // Override Drupal.jsAC.prototype.onkeydown(). + // @see https://drupal.org/node/1991076 + var _onkeydown = jsAC.onkeydown; + jsAC.onkeydown = function(input, e) { + if (!e) { + e = window.event; + } + switch (e.keyCode) { + case 13: // Enter. + this.hidePopup(e.keyCode); + return true; + default: // All other keys. + return _onkeydown.call(this, input, e); + } + }; + }; + + var extractPath = function(value) { + value = CKEDITOR.tools.trim(value); + var match; + match = /\(([^\(]*?)\)$/i.exec(value); + if (match && match[1]) { + value = match[1]; + } + var basePath = Drupal.settings.basePath; + if (value.indexOf(basePath) == 0) { + value = value.substr(basePath.length); + } + if (/^[a-z][\w\/\.-]*$/i.test(value)) { + return value; + } + return false; + }; + + var cache = {}, revertPath = function(value, callback) { + var path = extractPath(value); + if (!path) { + return false; + } + if (cache[path] !== undefined) { + return cache[path]; + } + $.getJSON(Drupal.settings.ckeditor_link.revert_path + '/' + Drupal.encodePath(path), function(data) { + cache[path] = data; + callback(); + }); + }; + + CKEDITOR.plugins.add('drupal_path', { + + init: function(editor, pluginPath) { + CKEDITOR.on('dialogDefinition', function(e) { + if ((e.editor != editor) || (e.data.name != 'link') || !Drupal.settings.ckeditor_link) return; + + // Overrides definition. + var definition = e.data.definition; + definition.onFocus = CKEDITOR.tools.override(definition.onFocus, function(original) { + return function() { + original.call(this); + if (this.getValueOf('info', 'linkType') == 'drupal') { + this.getContentElement('info', 'drupal_path').select(); + } + }; + }); + definition.onOk = CKEDITOR.tools.override(definition.onOk, function(original) { + return function() { + var process = false; + if ((this.getValueOf('info', 'linkType') == 'drupal') && !this._.selectedElement) { + var ranges = editor.getSelection().getRanges(true); + if ((ranges.length == 1) && ranges[0].collapsed) { + process = true; + } + } + original.call(this); + if (process) { + var value = this.getValueOf('info', 'drupal_path'); + var index = value.lastIndexOf('('); + if (index != -1) { + var text = CKEDITOR.tools.trim(value.substr(0, index)); + if (text) { + CKEDITOR.plugins.link.getSelectedLink(editor).setText(text); + } + } + } + }; + }); + + // Overrides linkType definition. + var infoTab = definition.getContents('info'); + var content = getById(infoTab.elements, 'linkType'); + content.items.unshift([Drupal.settings.ckeditor_link.type_name, 'drupal']); + infoTab.elements.push({ + type: 'vbox', + id: 'drupalOptions', + children: [{ + type: 'text', + id: 'drupal_path', + label: editor.lang.link.title, + required: true, + onLoad: function() { + this.getInputElement().addClass('form-autocomplete'); + initAutocomplete(this.getInputElement().$, Drupal.settings.ckeditor_link.autocomplete_path); + }, + setup: function(data) { + this.setValue(data.drupal_path || ''); + }, + validate: function() { + var dialog = this.getDialog(); + if (dialog.getValueOf('info', 'linkType') != 'drupal') { + return true; + } + var func = CKEDITOR.dialog.validate.notEmpty(editor.lang.link.noUrl); + if (!func.apply(this)) { + return false; + } + if (!extractPath(this.getValue())) { + alert(Drupal.settings.ckeditor_link.msg_invalid_path); + this.focus(); + return false; + } + return true; + } + }] + }); + content.onChange = CKEDITOR.tools.override(content.onChange, function(original) { + return function() { + original.call(this); + var dialog = this.getDialog(); + var element = dialog.getContentElement('info', 'drupalOptions').getElement().getParent().getParent(); + if (this.getValue() == 'drupal') { + element.show(); + if (editor.config.linkShowTargetTab) { + dialog.showPage('target'); + } + var uploadTab = dialog.definition.getContents('upload'); + if (uploadTab && !uploadTab.hidden) { + dialog.hidePage('upload'); + } + } + else { + element.hide(); + } + }; + }); + content.setup = function(data) { + if (!data.type || (data.type == 'url') && !data.url) { + if (Drupal.settings.ckeditor_link.type_selected) { + data.type = 'drupal'; + } + } + else if (data.url && !data.url.protocol && data.url.url) { + var dialog = this.getDialog(); + var path = revertPath(data.url.url, function() { + dialog.setupContent(data); + resetInitValues(dialog); + }); + if (path) { + data.type = 'drupal'; + data.drupal_path = path; + delete data.url; + } + } + this.setValue(data.type || 'url'); + }; + content.commit = CKEDITOR.tools.override(content.commit, function(original) { + return function(data) { + original.call(this, data); + if (data.type == 'drupal') { + data.type = 'url'; + var dialog = this.getDialog(); + dialog.setValueOf('info', 'protocol', ''); + dialog.setValueOf('info', 'url', Drupal.settings.basePath + extractPath(dialog.getValueOf('info', 'drupal_path'))); + } + }; + }); + }); + } + }); +})(jQuery);
\ No newline at end of file |