annotate sites/all/modules/wysiwyg/editors/js/nicedit.js @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 (function($) {
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * Attach this editor to a target element.
danielebarchiesi@0 5 */
danielebarchiesi@0 6 Drupal.wysiwyg.editor.attach.nicedit = function(context, params, settings) {
danielebarchiesi@0 7 // Intercept and ignore submit handlers or they will revert changes made
danielebarchiesi@0 8 // since the instance was removed. The handlers are anonymous and hidden out
danielebarchiesi@0 9 // of scope in a closure so we can't unbind them. The same operations are
danielebarchiesi@0 10 // performed when the instance is detached anyway.
danielebarchiesi@0 11 var oldAddEvent = bkLib.addEvent;
danielebarchiesi@0 12 bkLib.addEvent = function(obj, type, fn) {
danielebarchiesi@0 13 if (type != 'submit') {
danielebarchiesi@0 14 oldAddEvent(obj, type, fn);
danielebarchiesi@0 15 }
danielebarchiesi@0 16 }
danielebarchiesi@0 17 // Attach editor.
danielebarchiesi@0 18 var editor = new nicEditor(settings);
danielebarchiesi@0 19 editor.panelInstance(params.field);
danielebarchiesi@0 20 // The old addEvent() must be restored after creating a new instance, as
danielebarchiesi@0 21 // plugins with dialogs use it to bind submit handlers to their forms.
danielebarchiesi@0 22 bkLib.addEvent = oldAddEvent;
danielebarchiesi@0 23 editor.addEvent('focus', function () {
danielebarchiesi@0 24 Drupal.wysiwyg.activeId = params.field;
danielebarchiesi@0 25 });
danielebarchiesi@0 26 };
danielebarchiesi@0 27
danielebarchiesi@0 28 /**
danielebarchiesi@0 29 * Detach a single or all editors.
danielebarchiesi@0 30 *
danielebarchiesi@0 31 * See Drupal.wysiwyg.editor.detach.none() for a full description of this hook.
danielebarchiesi@0 32 */
danielebarchiesi@0 33 Drupal.wysiwyg.editor.detach.nicedit = function (context, params, trigger) {
danielebarchiesi@0 34 if (typeof params != 'undefined') {
danielebarchiesi@0 35 var instance = nicEditors.findEditor(params.field);
danielebarchiesi@0 36 if (instance) {
danielebarchiesi@0 37 if (trigger == 'serialize') {
danielebarchiesi@0 38 instance.saveContent();
danielebarchiesi@0 39 }
danielebarchiesi@0 40 else {
danielebarchiesi@0 41 instance.ne.removeInstance(params.field);
danielebarchiesi@0 42 instance.ne.removePanel();
danielebarchiesi@0 43 }
danielebarchiesi@0 44 }
danielebarchiesi@0 45 }
danielebarchiesi@0 46 else {
danielebarchiesi@0 47 for (var e in nicEditors.editors) {
danielebarchiesi@0 48 // Save contents of all editors back into textareas.
danielebarchiesi@0 49 var instances = nicEditors.editors[e].nicInstances;
danielebarchiesi@0 50 for (var i = 0; i < instances.length; i++) {
danielebarchiesi@0 51 if (trigger == 'serialize') {
danielebarchiesi@0 52 instances[i].saveContent();
danielebarchiesi@0 53 }
danielebarchiesi@0 54 else {
danielebarchiesi@0 55 instances[i].remove();
danielebarchiesi@0 56 }
danielebarchiesi@0 57 }
danielebarchiesi@0 58 // Remove all editor instances.
danielebarchiesi@0 59 if (trigger != 'serialize') {
danielebarchiesi@0 60 nicEditors.editors[e].nicInstances = [];
danielebarchiesi@0 61 }
danielebarchiesi@0 62 }
danielebarchiesi@0 63 }
danielebarchiesi@0 64 };
danielebarchiesi@0 65
danielebarchiesi@0 66 /**
danielebarchiesi@0 67 * Instance methods for nicEdit.
danielebarchiesi@0 68 */
danielebarchiesi@0 69 Drupal.wysiwyg.editor.instance.nicedit = {
danielebarchiesi@0 70 insert: function (content) {
danielebarchiesi@0 71 var instance = nicEditors.findEditor(this.field);
danielebarchiesi@0 72 var editingArea = instance.getElm();
danielebarchiesi@0 73 var sel = instance.getSel();
danielebarchiesi@0 74 // IE.
danielebarchiesi@0 75 if (document.selection) {
danielebarchiesi@0 76 editingArea.focus();
danielebarchiesi@0 77 sel.createRange().pasteHTML(content);
danielebarchiesi@0 78 }
danielebarchiesi@0 79 else {
danielebarchiesi@0 80 // Convert selection to a range.
danielebarchiesi@0 81 var range;
danielebarchiesi@0 82 // W3C compatible.
danielebarchiesi@0 83 if (sel.getRangeAt) {
danielebarchiesi@0 84 range = sel.getRangeAt(0);
danielebarchiesi@0 85 }
danielebarchiesi@0 86 // Safari.
danielebarchiesi@0 87 else {
danielebarchiesi@0 88 range = editingArea.ownerDocument.createRange();
danielebarchiesi@0 89 range.setStart(sel.anchorNode, sel.anchorOffset);
danielebarchiesi@0 90 range.setEnd(sel.focusNode, userSeletion.focusOffset);
danielebarchiesi@0 91 }
danielebarchiesi@0 92 // The code below doesn't work in IE, but it never gets here.
danielebarchiesi@0 93 var fragment = editingArea.ownerDocument.createDocumentFragment();
danielebarchiesi@0 94 // Fragments don't support innerHTML.
danielebarchiesi@0 95 var wrapper = editingArea.ownerDocument.createElement('div');
danielebarchiesi@0 96 wrapper.innerHTML = content;
danielebarchiesi@0 97 while (wrapper.firstChild) {
danielebarchiesi@0 98 fragment.appendChild(wrapper.firstChild);
danielebarchiesi@0 99 }
danielebarchiesi@0 100 range.deleteContents();
danielebarchiesi@0 101 // Only fragment children are inserted.
danielebarchiesi@0 102 range.insertNode(fragment);
danielebarchiesi@0 103 }
danielebarchiesi@0 104 },
danielebarchiesi@0 105
danielebarchiesi@0 106 setContent: function (content) {
danielebarchiesi@0 107 nicEditors.findEditor(this.field).setContent(content);
danielebarchiesi@0 108 },
danielebarchiesi@0 109
danielebarchiesi@0 110 getContent: function () {
danielebarchiesi@0 111 return nicEditors.findEditor(this.field).getContent();
danielebarchiesi@0 112 }
danielebarchiesi@0 113 };
danielebarchiesi@0 114
danielebarchiesi@0 115 })(jQuery);