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);
|