embed-8.x-1.x-dev/js/embed.js
js/embed.js
/**
* @file
* Drupal Embed module.
*/
(function ($, Drupal) {
'use strict';
/**
* Attaches or detaches behaviors, except the ones we do not want.
*
* @param {string} action
* Either 'attach' or 'detach'.
* @param {HTMLDocument|HTMLElement} context
* The context argument for Drupal.attachBehaviors()/detachBehaviors().
* @param {object} settings
* The settings argument for Drupal.attachBehaviors()/detachBehaviors().
*/
Drupal.runEmbedBehaviors = function (action, context, settings) {
// Do not run the excluded behaviors.
var stashed = {};
$.each(Drupal.embed.excludedBehaviors, function (i, behavior) {
stashed[behavior] = Drupal.behaviors[behavior];
delete Drupal.behaviors[behavior];
});
// Run the remaining behaviors.
(action === 'attach' ? Drupal.attachBehaviors : Drupal.detachBehaviors)(context, settings);
// Put the stashed behaviors back in.
$.extend(Drupal.behaviors, stashed);
};
/**
* Ajax 'embed_insert' command: insert the rendered embedded item.
*
* The regular Drupal.ajax.commands.insert() command cannot target elements
* within iframes. This is a skimmed down equivalent that works no matter
* whether the CKEditor is in iframe or div area mode.
*
* @param {Drupal.Ajax} ajax
* An Ajax object.
* @param {object} response
* The Ajax response.
* @param {string} response.data
* The Ajax response's content.
* @param {number} [status]
* The HTTP status code.
*/
Drupal.AjaxCommands.prototype.embed_insert = function (ajax, response, status) {
var $target = $(ajax.element);
// No need to detach behaviors here, the widget is created fresh each time.
$target.html(response.data);
Drupal.runEmbedBehaviors('attach', $target.get(0), response.settings || ajax.settings);
};
/**
* Stores settings specific to Embed module.
*/
Drupal.embed = {
/**
* A list of behaviors which are to be excluded while attaching/detaching.
*
* - Drupal.behaviors.editor, to avoid editor inception.
* - Drupal.behaviors.contextual, to keep contextual links hidden.
*/
excludedBehaviors: ['editor', 'contextual']
};
})(jQuery, Drupal);
