diff options
Diffstat (limited to 'sites/all/modules/wysiwyg/editors/js/nicedit.js')
-rw-r--r-- | sites/all/modules/wysiwyg/editors/js/nicedit.js | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/sites/all/modules/wysiwyg/editors/js/nicedit.js b/sites/all/modules/wysiwyg/editors/js/nicedit.js new file mode 100644 index 000000000..10b7809c5 --- /dev/null +++ b/sites/all/modules/wysiwyg/editors/js/nicedit.js @@ -0,0 +1,115 @@ +(function($) { + +/** + * Attach this editor to a target element. + */ +Drupal.wysiwyg.editor.attach.nicedit = function(context, params, settings) { + // Intercept and ignore submit handlers or they will revert changes made + // since the instance was removed. The handlers are anonymous and hidden out + // of scope in a closure so we can't unbind them. The same operations are + // performed when the instance is detached anyway. + var oldAddEvent = bkLib.addEvent; + bkLib.addEvent = function(obj, type, fn) { + if (type != 'submit') { + oldAddEvent(obj, type, fn); + } + } + // Attach editor. + var editor = new nicEditor(settings); + editor.panelInstance(params.field); + // The old addEvent() must be restored after creating a new instance, as + // plugins with dialogs use it to bind submit handlers to their forms. + bkLib.addEvent = oldAddEvent; + editor.addEvent('focus', function () { + Drupal.wysiwyg.activeId = params.field; + }); +}; + +/** + * Detach a single or all editors. + * + * See Drupal.wysiwyg.editor.detach.none() for a full description of this hook. + */ +Drupal.wysiwyg.editor.detach.nicedit = function (context, params, trigger) { + if (typeof params != 'undefined') { + var instance = nicEditors.findEditor(params.field); + if (instance) { + if (trigger == 'serialize') { + instance.saveContent(); + } + else { + instance.ne.removeInstance(params.field); + instance.ne.removePanel(); + } + } + } + else { + for (var e in nicEditors.editors) { + // Save contents of all editors back into textareas. + var instances = nicEditors.editors[e].nicInstances; + for (var i = 0; i < instances.length; i++) { + if (trigger == 'serialize') { + instances[i].saveContent(); + } + else { + instances[i].remove(); + } + } + // Remove all editor instances. + if (trigger != 'serialize') { + nicEditors.editors[e].nicInstances = []; + } + } + } +}; + +/** + * Instance methods for nicEdit. + */ +Drupal.wysiwyg.editor.instance.nicedit = { + insert: function (content) { + var instance = nicEditors.findEditor(this.field); + var editingArea = instance.getElm(); + var sel = instance.getSel(); + // IE. + if (document.selection) { + editingArea.focus(); + sel.createRange().pasteHTML(content); + } + else { + // Convert selection to a range. + var range; + // W3C compatible. + if (sel.getRangeAt) { + range = sel.getRangeAt(0); + } + // Safari. + else { + range = editingArea.ownerDocument.createRange(); + range.setStart(sel.anchorNode, sel.anchorOffset); + range.setEnd(sel.focusNode, userSeletion.focusOffset); + } + // The code below doesn't work in IE, but it never gets here. + var fragment = editingArea.ownerDocument.createDocumentFragment(); + // Fragments don't support innerHTML. + var wrapper = editingArea.ownerDocument.createElement('div'); + wrapper.innerHTML = content; + while (wrapper.firstChild) { + fragment.appendChild(wrapper.firstChild); + } + range.deleteContents(); + // Only fragment children are inserted. + range.insertNode(fragment); + } + }, + + setContent: function (content) { + nicEditors.findEditor(this.field).setContent(content); + }, + + getContent: function () { + return nicEditors.findEditor(this.field).getContent(); + } +}; + +})(jQuery); |