summaryrefslogtreecommitdiff
path: root/sites/all/modules/wysiwyg/editors/js/nicedit.js
diff options
context:
space:
mode:
Diffstat (limited to 'sites/all/modules/wysiwyg/editors/js/nicedit.js')
-rw-r--r--sites/all/modules/wysiwyg/editors/js/nicedit.js115
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);