2015-08-17 17:00:26 -07:00
/ * *
* @ file
* Preview behaviors .
* /
( function ( $ , Drupal ) {
2015-10-21 21:44:50 -07:00
'use strict' ;
2015-08-17 17:00:26 -07:00
/ * *
2015-09-04 13:20:09 -07:00
* Disables all non - relevant links in node previews .
*
* Destroys links ( except local fragment identifiers such as href = "#frag" ) in
* node previews to prevent users from leaving the page .
2015-08-17 17:00:26 -07:00
*
* @ type { Drupal ~ behavior }
2015-09-04 13:20:09 -07:00
*
* @ prop { Drupal ~ behaviorAttach } attach
* Attaches confirmation prompt for clicking links in node preview mode .
* @ prop { Drupal ~ behaviorDetach } detach
* Detaches confirmation prompt for clicking links in node preview mode .
2015-08-17 17:00:26 -07:00
* /
Drupal . behaviors . nodePreviewDestroyLinks = {
attach : function ( context ) {
function clickPreviewModal ( event ) {
// Only confirm leaving previews when left-clicking and user is not
// pressing the ALT, CTRL, META (Command key on the Macintosh keyboard)
// or SHIFT key.
if ( event . button === 0 && ! event . altKey && ! event . ctrlKey && ! event . metaKey && ! event . shiftKey ) {
event . preventDefault ( ) ;
var $previewDialog = $ ( '<div>' + Drupal . theme ( 'nodePreviewModal' ) + '</div>' ) . appendTo ( 'body' ) ;
Drupal . dialog ( $previewDialog , {
title : Drupal . t ( 'Leave preview?' ) ,
buttons : [
{
text : Drupal . t ( 'Cancel' ) ,
click : function ( ) {
$ ( this ) . dialog ( 'close' ) ;
}
} , {
text : Drupal . t ( 'Leave preview' ) ,
click : function ( ) {
window . top . location . href = event . target . href ;
}
}
]
} ) . showModal ( ) ;
}
}
var $preview = $ ( context ) . find ( '.content' ) . once ( 'node-preview' ) ;
if ( $ ( context ) . find ( '.node-preview-container' ) . length ) {
$preview . on ( 'click.preview' , 'a:not([href^=#], #edit-backlink, #toolbar-administration a)' , clickPreviewModal ) ;
}
} ,
detach : function ( context , settings , trigger ) {
if ( trigger === 'unload' ) {
var $preview = $ ( context ) . find ( '.content' ) . removeOnce ( 'node-preview' ) ;
if ( $preview . length ) {
$preview . off ( 'click.preview' ) ;
}
}
}
} ;
/ * *
* Switch view mode .
*
* @ type { Drupal ~ behavior }
2015-09-04 13:20:09 -07:00
*
* @ prop { Drupal ~ behaviorAttach } attach
* Attaches automatic submit on ` formUpdated.preview ` events .
2015-08-17 17:00:26 -07:00
* /
Drupal . behaviors . nodePreviewSwitchViewMode = {
attach : function ( context ) {
var $autosubmit = $ ( context ) . find ( '[data-drupal-autosubmit]' ) . once ( 'autosubmit' ) ;
if ( $autosubmit . length ) {
$autosubmit . on ( 'formUpdated.preview' , function ( ) {
$ ( this . form ) . trigger ( 'submit' ) ;
} ) ;
}
}
} ;
/ * *
2015-09-04 13:20:09 -07:00
* Theme function for node preview modal .
2015-08-17 17:00:26 -07:00
*
* @ return { string }
2015-09-04 13:20:09 -07:00
* Markup for the node preview modal .
2015-08-17 17:00:26 -07:00
* /
Drupal . theme . nodePreviewModal = function ( ) {
return '<p>' +
Drupal . t ( 'Leaving the preview will cause unsaved changes to be lost. Are you sure you want to leave the preview?' ) +
'</p><small class="description">' +
Drupal . t ( 'CTRL+Left click will prevent this dialog from showing and proceed to the clicked link.' ) + '</small>' ;
} ;
} ) ( jQuery , Drupal ) ;