#594322 by TwoD: Added insert method for NicEdit.
authorsun
Sun, 7 Feb 2010 14:36:00 +0000 (14:36 +0000)
committersun
Sun, 7 Feb 2010 14:36:00 +0000 (14:36 +0000)
CHANGELOG.txt
editors/js/nicedit.js

index 1d77399..308b465 100644 (file)
@@ -15,6 +15,7 @@ Wysiwyg 7.x-3.x, xxxx-xx-xx
 
 Wysiwyg 6.x-3.x, xxxx-xx-xx
 ---------------------------
+#594322 by TwoD: Added insert method for NicEdit.
 #659200 by TwoD: Fixed YUI Editor content lost in IE.
 #594928 by ericbellot, TwoD, sun: Fixed 'attribs' button missing in TinyMCE.
 #557090 by TwoD: Fixed Whizzywig 56 instance not removed on detach().
index f62ddb1..369c88e 100644 (file)
@@ -8,12 +8,15 @@ Drupal.wysiwyg.editor.attach.nicedit = function(context, params, settings) {
   // Attach editor.
   var editor = new nicEditor(settings);
   editor.panelInstance(params.field);
+  editor.addEvent('focus', function () {
+    Drupal.wysiwyg.activeId = params.field;
+  });
 };
 
 /**
  * Detach a single or all editors.
  *
- * See Drupal.wysiwyg.editor.detach.none() for a full desciption of this hook.
+ * See Drupal.wysiwyg.editor.detach.none() for a full description of this hook.
  */
 Drupal.wysiwyg.editor.detach.nicedit = function(context, params) {
   if (typeof params != 'undefined') {
@@ -27,7 +30,7 @@ Drupal.wysiwyg.editor.detach.nicedit = function(context, params) {
     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++) {     
+      for (var i = 0; i < instances.length; i++) {
         instances[i].remove();
       }
       // Remove all editor instances.
@@ -36,4 +39,45 @@ Drupal.wysiwyg.editor.detach.nicedit = function(context, params) {
   }
 };
 
+/**
+ * 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().text = 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);
+    }
+  }
+};
+
 })(jQuery);