2015-08-17 17:00:26 -07:00
/ * *
2018-11-23 12:29:20 +00:00
* DO NOT EDIT THIS FILE .
* See the following change record for more information ,
* https : //www.drupal.org/node/2815083
* @ preserve
* * /
2015-08-17 17:00:26 -07:00
( function ( $ , Drupal , drupalSettings ) {
Drupal . behaviors . machineName = {
2018-11-23 12:29:20 +00:00
attach : function attach ( context , settings ) {
2015-08-17 17:00:26 -07:00
var self = this ;
var $context = $ ( context ) ;
var timeout = null ;
var xhr = null ;
function clickEditHandler ( e ) {
var data = e . data ;
data . $wrapper . removeClass ( 'visually-hidden' ) ;
data . $target . trigger ( 'focus' ) ;
data . $suffix . hide ( ) ;
data . $source . off ( '.machineName' ) ;
}
function machineNameHandler ( e ) {
var data = e . data ;
var options = data . options ;
var baseValue = $ ( e . target ) . val ( ) ;
var rx = new RegExp ( options . replace _pattern , 'g' ) ;
var expected = baseValue . toLowerCase ( ) . replace ( rx , options . replace ) . substr ( 0 , options . maxlength ) ;
if ( xhr && xhr . readystate !== 4 ) {
xhr . abort ( ) ;
xhr = null ;
}
if ( timeout ) {
clearTimeout ( timeout ) ;
timeout = null ;
}
2017-04-13 15:53:35 +01:00
if ( baseValue . toLowerCase ( ) !== expected ) {
timeout = setTimeout ( function ( ) {
2015-08-17 17:00:26 -07:00
xhr = self . transliterate ( baseValue , options ) . done ( function ( machine ) {
self . showMachineName ( machine . substr ( 0 , options . maxlength ) , data ) ;
} ) ;
2017-04-13 15:53:35 +01:00
} , 300 ) ;
2018-11-23 12:29:20 +00:00
} else {
2017-04-13 15:53:35 +01:00
self . showMachineName ( expected , data ) ;
}
2015-08-17 17:00:26 -07:00
}
2018-11-23 12:29:20 +00:00
Object . keys ( settings . machineName ) . forEach ( function ( sourceId ) {
2015-08-17 17:00:26 -07:00
var machine = '' ;
2018-11-23 12:29:20 +00:00
var options = settings . machineName [ sourceId ] ;
2015-08-17 17:00:26 -07:00
2018-11-23 12:29:20 +00:00
var $source = $context . find ( sourceId ) . addClass ( 'machine-name-source' ) . once ( 'machine-name' ) ;
2015-08-17 17:00:26 -07:00
var $target = $context . find ( options . target ) . addClass ( 'machine-name-target' ) ;
var $suffix = $context . find ( options . suffix ) ;
2015-10-08 11:40:12 -07:00
var $wrapper = $target . closest ( '.js-form-item' ) ;
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
if ( ! $source . length || ! $target . length || ! $suffix . length || ! $wrapper . length ) {
return ;
}
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
if ( $target . hasClass ( 'error' ) ) {
return ;
}
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
options . maxlength = $target . attr ( 'maxlength' ) ;
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
$wrapper . addClass ( 'visually-hidden' ) ;
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
if ( $target . is ( ':disabled' ) || $target . val ( ) !== '' ) {
machine = $target . val ( ) ;
2018-11-23 12:29:20 +00:00
} else if ( $source . val ( ) !== '' ) {
2015-08-17 17:00:26 -07:00
machine = self . transliterate ( $source . val ( ) , options ) ;
}
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
var $preview = $ ( '<span class="machine-name-value">' + options . field _prefix + Drupal . checkPlain ( machine ) + options . field _suffix + '</span>' ) ;
$suffix . empty ( ) ;
if ( options . label ) {
$suffix . append ( '<span class="machine-name-label">' + options . label + ': </span>' ) ;
}
$suffix . append ( $preview ) ;
if ( $target . is ( ':disabled' ) ) {
return ;
}
2018-11-23 12:29:20 +00:00
var eventData = {
2015-08-17 17:00:26 -07:00
$source : $source ,
$target : $target ,
$suffix : $suffix ,
$wrapper : $wrapper ,
$preview : $preview ,
options : options
} ;
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
var $link = $ ( '<span class="admin-link"><button type="button" class="link">' + Drupal . t ( 'Edit' ) + '</button></span>' ) . on ( 'click' , eventData , clickEditHandler ) ;
$suffix . append ( $link ) ;
if ( $target . val ( ) === '' ) {
2018-11-23 12:29:20 +00:00
$source . on ( 'formUpdated.machineName' , eventData , machineNameHandler ) . trigger ( 'formUpdated.machineName' ) ;
2015-08-17 17:00:26 -07:00
}
$target . on ( 'invalid' , eventData , clickEditHandler ) ;
} ) ;
} ,
2018-11-23 12:29:20 +00:00
showMachineName : function showMachineName ( machine , data ) {
2015-08-17 17:00:26 -07:00
var settings = data . options ;
2018-11-23 12:29:20 +00:00
2015-08-17 17:00:26 -07:00
if ( machine !== '' ) {
if ( machine !== settings . replace ) {
data . $target . val ( machine ) ;
data . $preview . html ( settings . field _prefix + Drupal . checkPlain ( machine ) + settings . field _suffix ) ;
}
data . $suffix . show ( ) ;
2018-11-23 12:29:20 +00:00
} else {
2015-08-17 17:00:26 -07:00
data . $suffix . hide ( ) ;
data . $target . val ( machine ) ;
data . $preview . empty ( ) ;
}
} ,
2018-11-23 12:29:20 +00:00
transliterate : function transliterate ( source , settings ) {
2015-08-17 17:00:26 -07:00
return $ . get ( Drupal . url ( 'machine_name/transliterate' ) , {
text : source ,
langcode : drupalSettings . langcode ,
replace _pattern : settings . replace _pattern ,
2016-11-16 12:26:40 -08:00
replace _token : settings . replace _token ,
2015-08-17 17:00:26 -07:00
replace : settings . replace ,
lowercase : true
} ) ;
}
} ;
2018-11-23 12:29:20 +00:00
} ) ( jQuery , Drupal , drupalSettings ) ;