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