diff --git a/modules/node/node.pages.inc b/modules/node/node.pages.inc index 75ed0dd..e762e8c 100644 --- a/modules/node/node.pages.inc +++ b/modules/node/node.pages.inc @@ -425,6 +425,7 @@ function theme_node_preview($variables) { $preview_trimmed_version = FALSE; $elements = node_view(clone $node, 'teaser'); + $elements['#attached']['js'][] = drupal_get_path('module', 'node') . '/node.preview.js'; $trimmed = drupal_render($elements); $elements = node_view($node, 'full'); $full = drupal_render($elements); diff --git a/modules/node/node.preview.js b/modules/node/node.preview.js new file mode 100644 index 0000000..893f650 --- /dev/null +++ b/modules/node/node.preview.js @@ -0,0 +1,28 @@ +(function ($, Drupal) { + +"use strict"; + +/** + * Disabling all links (except local fragment identifiers such as href="#frag") + * in node previews to prevent users from leaving the page. + */ +Drupal.behaviors.nodePreviewDestroyLinks = { + attach: function (context) { + var $preview = $(context).find('.node').once('node-preview'); + if ($preview.length) { + $preview.delegate('a:not([href^=#])', 'click.preview', function (e) { + e.preventDefault(); + }); + } + }, + detach: function (context, settings, trigger) { + if (trigger === 'unload') { + var $preview = $(context).find('.node').removeOnce('node-preview'); + if ($preview.length) { + $preview.undelegate('click.preview'); + } + } + } +}; + +})(jQuery, Drupal);