diff sites/all/modules/wysiwyg/wysiwyg.api.js @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sites/all/modules/wysiwyg/wysiwyg.api.js	Wed Aug 21 18:51:11 2013 +0100
@@ -0,0 +1,97 @@
+
+/**
+ * Wysiwyg plugin button implementation for Awesome plugin.
+ */
+Drupal.wysiwyg.plugins.awesome = {
+  /**
+   * Return whether the passed node belongs to this plugin.
+   *
+   * @param node
+   *   The currently focused DOM element in the editor content.
+   */
+  isNode: function(node) {
+    return ($(node).is('img.mymodule-awesome'));
+  },
+
+  /**
+   * Execute the button.
+   *
+   * @param data
+   *   An object containing data about the current selection:
+   *   - format: 'html' when the passed data is HTML content, 'text' when the
+   *     passed data is plain-text content.
+   *   - node: When 'format' is 'html', the focused DOM element in the editor.
+   *   - content: The textual representation of the focused/selected editor
+   *     content.
+   * @param settings
+   *   The plugin settings, as provided in the plugin's PHP include file.
+   * @param instanceId
+   *   The ID of the current editor instance.
+   */
+  invoke: function(data, settings, instanceId) {
+    // Generate HTML markup.
+    if (data.format == 'html') {
+      // Prevent duplicating a teaser break.
+      if ($(data.node).is('img.mymodule-awesome')) {
+        return;
+      }
+      var content = this._getPlaceholder(settings);
+    }
+    // Generate plain text.
+    else {
+      var content = '<!--break-->';
+    }
+    // Insert new content into the editor.
+    if (typeof content != 'undefined') {
+      Drupal.wysiwyg.instances[instanceId].insert(content);
+    }
+  },
+
+  /**
+   * Prepare all plain-text contents of this plugin with HTML representations.
+   *
+   * Optional; only required for "inline macro tag-processing" plugins.
+   *
+   * @param content
+   *   The plain-text contents of a textarea.
+   * @param settings
+   *   The plugin settings, as provided in the plugin's PHP include file.
+   * @param instanceId
+   *   The ID of the current editor instance.
+   */
+  attach: function(content, settings, instanceId) {
+    content = content.replace(/<!--break-->/g, this._getPlaceholder(settings));
+    return content;
+  },
+
+  /**
+   * Process all HTML placeholders of this plugin with plain-text contents.
+   *
+   * Optional; only required for "inline macro tag-processing" plugins.
+   *
+   * @param content
+   *   The HTML content string of the editor.
+   * @param settings
+   *   The plugin settings, as provided in the plugin's PHP include file.
+   * @param instanceId
+   *   The ID of the current editor instance.
+   */
+  detach: function(content, settings, instanceId) {
+    var $content = $('<div>' + content + '</div>');
+    $.each($('img.mymodule-awesome', $content), function (i, elem) {
+      //...
+    });
+    return $content.html();
+  },
+
+  /**
+   * Helper function to return a HTML placeholder.
+   *
+   * The 'drupal-content' CSS class is required for HTML elements in the editor
+   * content that shall not trigger any editor's native buttons (such as the
+   * image button for this example placeholder markup).
+   */
+  _getPlaceholder: function (settings) {
+    return '<img src="' + settings.path + '/images/spacer.gif" alt="&lt;--break-&gt;" title="&lt;--break--&gt;" class="wysiwyg-break drupal-content" />';
+  }
+};