all contrib module security updates done
This commit is contained in:
@@ -36,9 +36,11 @@ Drupal.behaviors.CToolsAutoSubmit = {
|
||||
attach: function(context) {
|
||||
// 'this' references the form element
|
||||
function triggerSubmit (e) {
|
||||
var $this = $(this);
|
||||
if (!$this.hasClass('ctools-ajaxing')) {
|
||||
$this.find('.ctools-auto-submit-click').click();
|
||||
if ($.contains(document.body, this)) {
|
||||
var $this = $(this);
|
||||
if (!$this.hasClass('ctools-ajaxing')) {
|
||||
$this.find('.ctools-auto-submit-click').click();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -212,6 +212,7 @@
|
||||
content.slideToggle(100, afterToggle);
|
||||
}
|
||||
|
||||
$container.toggleClass('ctools-collapsed');
|
||||
toggle.toggleClass('ctools-toggle-collapsed');
|
||||
|
||||
// If we're supposed to remember the state of this class, do so.
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
Drupal.CTools.dependent.autoAttach = function() {
|
||||
// Clear active bindings and triggers.
|
||||
for (i in Drupal.CTools.dependent.activeTriggers) {
|
||||
$(Drupal.CTools.dependent.activeTriggers[i]).unbind('change');
|
||||
$(Drupal.CTools.dependent.activeTriggers[i]).unbind('change.ctools-dependent');
|
||||
}
|
||||
Drupal.CTools.dependent.activeTriggers = [];
|
||||
Drupal.CTools.dependent.activeBindings = {};
|
||||
@@ -97,7 +97,13 @@
|
||||
else {
|
||||
switch ($(trigger).attr('type')) {
|
||||
case 'checkbox':
|
||||
var val = $(trigger).attr('checked') ? true : false;
|
||||
// **This check determines if using a jQuery version 1.7 or newer which requires the use of the prop function instead of the attr function when not called on an attribute
|
||||
if ($().prop) {
|
||||
var val = $(trigger).prop('checked') ? true : false;
|
||||
}
|
||||
else {
|
||||
var val = $(trigger).attr('checked') ? true : false;
|
||||
}
|
||||
|
||||
if (val) {
|
||||
$(trigger).siblings('label').removeClass('hidden-options').addClass('expanded-options');
|
||||
@@ -148,34 +154,41 @@
|
||||
len++;
|
||||
}
|
||||
|
||||
var object = $('#' + id + '-wrapper');
|
||||
if (!object.size()) {
|
||||
// Some elements can't use the parent() method or they can
|
||||
// damage things. They are guaranteed to have wrappers but
|
||||
// only if dependent.inc provided them. This check prevents
|
||||
// problems when multiple AJAX calls cause settings to build
|
||||
// up.
|
||||
var $original = $('#' + id);
|
||||
if ($original.is('fieldset') || $original.is('textarea')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
object = $('#' + id).parent();
|
||||
var $original = $('#' + id);
|
||||
if ($original.is('fieldset') || $original.is('textarea')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var object = $original.parent();
|
||||
|
||||
if (Drupal.settings.CTools.dependent[id].type == 'disable') {
|
||||
if (Drupal.settings.CTools.dependent[id].num <= len) {
|
||||
// Show if the element if criteria is matched
|
||||
object.attr('disabled', false);
|
||||
object.addClass('dependent-options');
|
||||
object.children().attr('disabled', false);
|
||||
// **This check determines if using a jQuery version 1.7 or newer which requires the use of the prop function instead of the attr function when not called on an attribute
|
||||
if (typeof $().prop == 'function') {
|
||||
object.prop('disabled', false);
|
||||
object.addClass('dependent-options');
|
||||
object.children().prop('disabled', false);
|
||||
}
|
||||
else {
|
||||
object.attr('disabled', false);
|
||||
object.addClass('dependent-options');
|
||||
object.children().attr('disabled', false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Otherwise hide. Use css rather than hide() because hide()
|
||||
// does not work if the item is already hidden, for example,
|
||||
// in a collapsed fieldset.
|
||||
object.attr('disabled', true);
|
||||
object.children().attr('disabled', true);
|
||||
// **This check determines if using a jQuery version 1.7 or newer which requires the use of the prop function instead of the attr function when not called on an attribute
|
||||
if (typeof $().prop == 'function') {
|
||||
object.prop('disabled', true);
|
||||
object.children().prop('disabled', true);
|
||||
}
|
||||
else {
|
||||
object.attr('disabled', true);
|
||||
object.children().attr('disabled', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -194,7 +207,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
$(trigger_id).change(function() {
|
||||
$(trigger_id).bind('change.ctools-dependent', function() {
|
||||
// Trigger the internal change function
|
||||
// the attr('id') is used because closures are more confusing
|
||||
changeTrigger(trigger_id, bind_id);
|
||||
@@ -215,7 +228,7 @@
|
||||
// is a sort of hacked one that's faster but much less flexible.
|
||||
$("select.ctools-master-dependent")
|
||||
.once('ctools-dependent')
|
||||
.change(function() {
|
||||
.bind('change.ctools-dependent', function() {
|
||||
var val = $(this).val();
|
||||
if (val == 'all') {
|
||||
$('.ctools-dependent-all').show(0);
|
||||
@@ -225,7 +238,7 @@
|
||||
$('.ctools-dependent-' + val).show(0);
|
||||
}
|
||||
})
|
||||
.trigger('change');
|
||||
.trigger('change.ctools-dependent');
|
||||
}
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
@@ -48,7 +48,8 @@
|
||||
modalOptions: {
|
||||
opacity: .55,
|
||||
background: '#fff'
|
||||
}
|
||||
},
|
||||
modalClass: 'default'
|
||||
};
|
||||
|
||||
var settings = {};
|
||||
@@ -97,8 +98,13 @@
|
||||
resize();
|
||||
|
||||
$('span.modal-title', Drupal.CTools.Modal.modal).html(Drupal.CTools.Modal.currentSettings.loadingText);
|
||||
Drupal.CTools.Modal.modalContent(Drupal.CTools.Modal.modal, settings.modalOptions, settings.animation, settings.animationSpeed);
|
||||
$('#modalContent .modal-content').html(Drupal.theme(settings.throbberTheme));
|
||||
Drupal.CTools.Modal.modalContent(Drupal.CTools.Modal.modal, settings.modalOptions, settings.animation, settings.animationSpeed, settings.modalClass);
|
||||
$('#modalContent .modal-content').html(Drupal.theme(settings.throbberTheme)).addClass('ctools-modal-loading');
|
||||
|
||||
// Position autocomplete results based on the scroll position of the modal.
|
||||
$('#modalContent .modal-content').delegate('input.form-autocomplete', 'keyup', function() {
|
||||
$('#autocomplete').css('top', $(this).position().top + $(this).outerHeight() + $(this).offsetParent().filter('#modal-content').scrollTop());
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -115,18 +121,18 @@
|
||||
*/
|
||||
Drupal.theme.prototype.CToolsModalDialog = function () {
|
||||
var html = ''
|
||||
html += ' <div id="ctools-modal">'
|
||||
html += ' <div class="ctools-modal-content">' // panels-modal-content
|
||||
html += ' <div class="modal-header">';
|
||||
html += ' <a class="close" href="#">';
|
||||
html += Drupal.CTools.Modal.currentSettings.closeText + Drupal.CTools.Modal.currentSettings.closeImage;
|
||||
html += ' </a>';
|
||||
html += ' <span id="modal-title" class="modal-title"> </span>';
|
||||
html += ' </div>';
|
||||
html += ' <div id="modal-content" class="modal-content">';
|
||||
html += ' </div>';
|
||||
html += '<div id="ctools-modal">'
|
||||
html += ' <div class="ctools-modal-content">' // panels-modal-content
|
||||
html += ' <div class="modal-header">';
|
||||
html += ' <a class="close" href="#">';
|
||||
html += Drupal.CTools.Modal.currentSettings.closeText + Drupal.CTools.Modal.currentSettings.closeImage;
|
||||
html += ' </a>';
|
||||
html += ' <span id="modal-title" class="modal-title"> </span>';
|
||||
html += ' </div>';
|
||||
html += ' <div id="modal-content" class="modal-content">';
|
||||
html += ' </div>';
|
||||
html += ' </div>';
|
||||
html += '</div>';
|
||||
|
||||
return html;
|
||||
}
|
||||
@@ -136,11 +142,11 @@
|
||||
*/
|
||||
Drupal.theme.prototype.CToolsModalThrobber = function () {
|
||||
var html = '';
|
||||
html += ' <div id="modal-throbber">';
|
||||
html += ' <div class="modal-throbber-wrapper">';
|
||||
html += Drupal.CTools.Modal.currentSettings.throbber;
|
||||
html += ' </div>';
|
||||
html += '<div id="modal-throbber">';
|
||||
html += ' <div class="modal-throbber-wrapper">';
|
||||
html += Drupal.CTools.Modal.currentSettings.throbber;
|
||||
html += ' </div>';
|
||||
html += '</div>';
|
||||
|
||||
return html;
|
||||
};
|
||||
@@ -222,7 +228,11 @@
|
||||
// AJAX submits specified in this manner automatically submit to the
|
||||
// normal form action.
|
||||
element_settings.url = Drupal.CTools.Modal.findURL(this);
|
||||
if (element_settings.url == '') {
|
||||
element_settings.url = $(this).closest('form').attr('action');
|
||||
}
|
||||
element_settings.event = 'click';
|
||||
element_settings.setClick = true;
|
||||
|
||||
var base = $this.attr('id');
|
||||
Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
|
||||
@@ -249,9 +259,16 @@
|
||||
$('input[type=submit], button', this).click(function(event) {
|
||||
Drupal.ajax[base].element = this;
|
||||
this.form.clk = this;
|
||||
// Stop autocomplete from submitting.
|
||||
if (Drupal.autocompleteSubmit && !Drupal.autocompleteSubmit()) {
|
||||
return false;
|
||||
}
|
||||
// An empty event means we were triggered via .click() and
|
||||
// in jquery 1.4 this won't trigger a submit.
|
||||
if (event.bubbles == undefined) {
|
||||
// We also have to check jQuery version to prevent
|
||||
// IE8 + jQuery 1.4.4 to break on other events
|
||||
// bound to the submit button.
|
||||
if (jQuery.fn.jquery.substr(0, 3) === '1.4' && typeof event.bubbles === "undefined") {
|
||||
$(this.form).trigger('submit');
|
||||
return false;
|
||||
}
|
||||
@@ -282,7 +299,21 @@
|
||||
// content. This is helpful for allowing users to see error messages at the
|
||||
// top of a form, etc.
|
||||
$('#modal-content').html(response.output).scrollTop(0);
|
||||
Drupal.attachBehaviors();
|
||||
|
||||
// Attach behaviors within a modal dialog.
|
||||
var settings = response.settings || ajax.settings || Drupal.settings;
|
||||
Drupal.attachBehaviors($('#modalContent'), settings);
|
||||
|
||||
if ($('#modal-content').hasClass('ctools-modal-loading')) {
|
||||
$('#modal-content').removeClass('ctools-modal-loading');
|
||||
}
|
||||
else {
|
||||
// If the modal was already shown, and we are simply replacing its
|
||||
// content, then focus on the first focusable element in the modal.
|
||||
// (When first showing the modal, focus will be placed on the close
|
||||
// button by the show() function called above.)
|
||||
$('#modal-content :focusable:first').focus();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -333,8 +364,9 @@
|
||||
* @param css obj of css attributes
|
||||
* @param animation (fadeIn, slideDown, show)
|
||||
* @param speed (valid animation speeds slow, medium, fast or # in ms)
|
||||
* @param modalClass class added to div#modalContent
|
||||
*/
|
||||
Drupal.CTools.Modal.modalContent = function(content, css, animation, speed) {
|
||||
Drupal.CTools.Modal.modalContent = function(content, css, animation, speed, modalClass) {
|
||||
// If our animation isn't set, make it just show/pop
|
||||
if (!animation) {
|
||||
animation = 'show';
|
||||
@@ -346,7 +378,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
if (!speed) {
|
||||
if (!speed && 0 !== speed) {
|
||||
speed = 'fast';
|
||||
}
|
||||
|
||||
@@ -363,9 +395,9 @@
|
||||
css.filter = 'alpha(opacity=' + (100 * css.opacity) + ')';
|
||||
content.hide();
|
||||
|
||||
// if we already ahve a modalContent, remove it
|
||||
if ( $('#modalBackdrop')) $('#modalBackdrop').remove();
|
||||
if ( $('#modalContent')) $('#modalContent').remove();
|
||||
// If we already have modalContent, remove it.
|
||||
if ($('#modalBackdrop').length) $('#modalBackdrop').remove();
|
||||
if ($('#modalContent').length) $('#modalContent').remove();
|
||||
|
||||
// position code lifted from http://www.quirksmode.org/viewport/compatibility.html
|
||||
if (self.pageYOffset) { // all except Explorer
|
||||
@@ -386,9 +418,56 @@
|
||||
if( docHeight < winHeight ) docHeight = winHeight;
|
||||
|
||||
// Create our divs
|
||||
$('body').append('<div id="modalBackdrop" style="z-index: 1000; display: none;"></div><div id="modalContent" style="z-index: 1001; position: absolute;">' + $(content).html() + '</div>');
|
||||
$('body').append('<div id="modalBackdrop" class="backdrop-' + modalClass + '" style="z-index: 1000; display: none;"></div><div id="modalContent" class="modal-' + modalClass + '" style="z-index: 1001; position: absolute;">' + $(content).html() + '</div>');
|
||||
|
||||
// Keyboard and focus event handler ensures focus stays on modal elements only
|
||||
// Get a list of the tabbable elements in the modal content.
|
||||
var getTabbableElements = function () {
|
||||
var tabbableElements = $('#modalContent :tabbable'),
|
||||
radioButtons = tabbableElements.filter('input[type="radio"]');
|
||||
|
||||
// The list of tabbable elements from jQuery is *almost* right. The
|
||||
// exception is with groups of radio buttons. The list from jQuery will
|
||||
// include all radio buttons, when in fact, only the selected radio button
|
||||
// is tabbable, and if no radio buttons in a group are selected, then only
|
||||
// the first is tabbable.
|
||||
if (radioButtons.length > 0) {
|
||||
// First, build up an index of which groups have an item selected or not.
|
||||
var anySelected = {};
|
||||
radioButtons.each(function () {
|
||||
var name = this.name;
|
||||
|
||||
if (typeof anySelected[name] === 'undefined') {
|
||||
anySelected[name] = radioButtons.filter('input[name="' + name + '"]:checked').length !== 0;
|
||||
}
|
||||
});
|
||||
|
||||
// Next filter out the radio buttons that aren't really tabbable.
|
||||
var found = {};
|
||||
tabbableElements = tabbableElements.filter(function () {
|
||||
var keep = true;
|
||||
|
||||
if (this.type == 'radio') {
|
||||
if (anySelected[this.name]) {
|
||||
// Only keep the selected one.
|
||||
keep = this.checked;
|
||||
}
|
||||
else {
|
||||
// Only keep the first one.
|
||||
if (found[this.name]) {
|
||||
keep = false;
|
||||
}
|
||||
found[this.name] = true;
|
||||
}
|
||||
}
|
||||
|
||||
return keep;
|
||||
});
|
||||
}
|
||||
|
||||
return tabbableElements.get();
|
||||
};
|
||||
|
||||
// Keyboard and focus event handler ensures only modal elements gain focus.
|
||||
modalEventHandler = function( event ) {
|
||||
target = null;
|
||||
if ( event ) { //Mozilla
|
||||
@@ -405,26 +484,85 @@
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if( $(target).filter('*:visible').parents('#modalContent').size()) {
|
||||
// allow the event only if target is a visible child node of #modalContent
|
||||
|
||||
if ($(target).is('#modalContent, body') || $(target).filter('*:visible').parents('#modalContent').length) {
|
||||
// Allow the event only if target is a visible child node
|
||||
// of #modalContent.
|
||||
return true;
|
||||
}
|
||||
if ( $('#modalContent')) $('#modalContent').get(0).focus();
|
||||
return false;
|
||||
else {
|
||||
getTabbableElements()[0].focus();
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
};
|
||||
$('body').bind( 'focus', modalEventHandler );
|
||||
$('body').bind( 'keypress', modalEventHandler );
|
||||
|
||||
// Keypress handler Ensures you can only TAB to elements within the modal.
|
||||
// Based on the psuedo-code from WAI-ARIA 1.0 Authoring Practices section
|
||||
// 3.3.1 "Trapping Focus".
|
||||
modalTabTrapHandler = function (evt) {
|
||||
// We only care about the TAB key.
|
||||
if (evt.which != 9) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var tabbableElements = getTabbableElements(),
|
||||
firstTabbableElement = tabbableElements[0],
|
||||
lastTabbableElement = tabbableElements[tabbableElements.length - 1],
|
||||
singleTabbableElement = firstTabbableElement == lastTabbableElement,
|
||||
node = evt.target;
|
||||
|
||||
// If this is the first element and the user wants to go backwards, then
|
||||
// jump to the last element.
|
||||
if (node == firstTabbableElement && evt.shiftKey) {
|
||||
if (!singleTabbableElement) {
|
||||
lastTabbableElement.focus();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// If this is the last element and the user wants to go forwards, then
|
||||
// jump to the first element.
|
||||
else if (node == lastTabbableElement && !evt.shiftKey) {
|
||||
if (!singleTabbableElement) {
|
||||
firstTabbableElement.focus();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// If this element isn't in the dialog at all, then jump to the first
|
||||
// or last element to get the user into the game.
|
||||
else if ($.inArray(node, tabbableElements) == -1) {
|
||||
// Make sure the node isn't in another modal (ie. WYSIWYG modal).
|
||||
var parents = $(node).parents().get();
|
||||
for (var i = 0; i < parents.length; ++i) {
|
||||
var position = $(parents[i]).css('position');
|
||||
if (position == 'absolute' || position == 'fixed') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (evt.shiftKey) {
|
||||
lastTabbableElement.focus();
|
||||
}
|
||||
else {
|
||||
firstTabbableElement.focus();
|
||||
}
|
||||
}
|
||||
};
|
||||
$('body').bind('keydown', modalTabTrapHandler);
|
||||
|
||||
// Create our content div, get the dimensions, and hide it
|
||||
var modalContent = $('#modalContent').css('top','-1000px');
|
||||
var mdcTop = wt + ( winHeight / 2 ) - ( modalContent.outerHeight() / 2);
|
||||
var $modalHeader = modalContent.find('.modal-header');
|
||||
var mdcTop = wt + Math.max((winHeight / 2) - (modalContent.outerHeight() / 2), 0);
|
||||
var mdcLeft = ( winWidth / 2 ) - ( modalContent.outerWidth() / 2);
|
||||
$('#modalBackdrop').css(css).css('top', 0).css('height', docHeight + 'px').css('width', docWidth + 'px').show();
|
||||
modalContent.css({top: mdcTop + 'px', left: mdcLeft + 'px'}).hide()[animation](speed);
|
||||
|
||||
// Bind a click for closing the modalContent
|
||||
modalContentClose = function(){close(); return false;};
|
||||
$('.close').bind('click', modalContentClose);
|
||||
$('.close', $modalHeader).bind('click', modalContentClose);
|
||||
|
||||
// Bind a keypress on escape for closing the modalContent
|
||||
modalEventEscapeCloseHandler = function(event) {
|
||||
@@ -436,31 +574,63 @@
|
||||
|
||||
$(document).bind('keydown', modalEventEscapeCloseHandler);
|
||||
|
||||
// Per WAI-ARIA 1.0 Authoring Practices, initial focus should be on the
|
||||
// close button, but we should save the original focus to restore it after
|
||||
// the dialog is closed.
|
||||
var oldFocus = document.activeElement;
|
||||
$('.close', $modalHeader).focus();
|
||||
|
||||
// Close the open modal content and backdrop
|
||||
function close() {
|
||||
// Unbind the events
|
||||
$(window).unbind('resize', modalContentResize);
|
||||
$('body').unbind( 'focus', modalEventHandler);
|
||||
$('body').unbind( 'keypress', modalEventHandler );
|
||||
$('.close').unbind('click', modalContentClose);
|
||||
$('body').unbind('keypress', modalEventEscapeCloseHandler);
|
||||
$('body').unbind( 'keydown', modalTabTrapHandler );
|
||||
$('.close', $modalHeader).unbind('click', modalContentClose);
|
||||
$(document).unbind('keydown', modalEventEscapeCloseHandler);
|
||||
$(document).trigger('CToolsDetachBehaviors', $('#modalContent'));
|
||||
|
||||
// Set our animation parameters and use them
|
||||
if ( animation == 'fadeIn' ) animation = 'fadeOut';
|
||||
if ( animation == 'slideDown' ) animation = 'slideUp';
|
||||
if ( animation == 'show' ) animation = 'hide';
|
||||
// Closing animation.
|
||||
switch (animation) {
|
||||
case 'fadeIn':
|
||||
modalContent.fadeOut(speed, modalContentRemove);
|
||||
break;
|
||||
|
||||
// Close the content
|
||||
modalContent.hide()[animation](speed);
|
||||
case 'slideDown':
|
||||
modalContent.slideUp(speed, modalContentRemove);
|
||||
break;
|
||||
|
||||
// Remove the content
|
||||
case 'show':
|
||||
modalContent.hide(speed, modalContentRemove);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the content.
|
||||
modalContentRemove = function () {
|
||||
$('#modalContent').remove();
|
||||
$('#modalBackdrop').remove();
|
||||
|
||||
// Restore focus to where it was before opening the dialog.
|
||||
$(oldFocus).focus();
|
||||
};
|
||||
|
||||
// Move and resize the modalBackdrop and modalContent on resize of the window
|
||||
modalContentResize = function(){
|
||||
// Move and resize the modalBackdrop and modalContent on window resize.
|
||||
modalContentResize = function () {
|
||||
// Reset the backdrop height/width to get accurate document size.
|
||||
$('#modalBackdrop').css('height', '').css('width', '');
|
||||
|
||||
// Position code lifted from:
|
||||
// http://www.quirksmode.org/viewport/compatibility.html
|
||||
if (self.pageYOffset) { // all except Explorer
|
||||
var wt = self.pageYOffset;
|
||||
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
|
||||
var wt = document.documentElement.scrollTop;
|
||||
} else if (document.body) { // all other Explorers
|
||||
var wt = document.body.scrollTop;
|
||||
}
|
||||
|
||||
// Get our heights
|
||||
var docHeight = $(document).height();
|
||||
var docWidth = $(document).width();
|
||||
@@ -470,7 +640,7 @@
|
||||
|
||||
// Get where we should move content to
|
||||
var modalContent = $('#modalContent');
|
||||
var mdcTop = ( winHeight / 2 ) - ( modalContent.outerHeight() / 2);
|
||||
var mdcTop = wt + Math.max((winHeight / 2) - (modalContent.outerHeight() / 2), 0);
|
||||
var mdcLeft = ( winWidth / 2 ) - ( modalContent.outerWidth() / 2);
|
||||
|
||||
// Apply the changes
|
||||
@@ -478,8 +648,6 @@
|
||||
modalContent.css('top', mdcTop + 'px').css('left', mdcLeft + 'px').show();
|
||||
};
|
||||
$(window).bind('resize', modalContentResize);
|
||||
|
||||
$('#modalContent').focus();
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -502,8 +670,12 @@
|
||||
$(window).unbind('resize', modalContentResize);
|
||||
$('body').unbind('focus', modalEventHandler);
|
||||
$('body').unbind('keypress', modalEventHandler);
|
||||
$('.close').unbind('click', modalContentClose);
|
||||
$(document).trigger('CToolsDetachBehaviors', $('#modalContent'));
|
||||
$('body').unbind( 'keydown', modalTabTrapHandler );
|
||||
var $modalContent = $('#modalContent');
|
||||
var $modalHeader = $modalContent.find('.modal-header');
|
||||
$('.close', $modalHeader).unbind('click', modalContentClose);
|
||||
$('body').unbind('keypress', modalEventEscapeCloseHandler);
|
||||
$(document).trigger('CToolsDetachBehaviors', $modalContent);
|
||||
|
||||
// jQuery magic loop through the instances and run the animations or removal.
|
||||
content.each(function(){
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* @file
|
||||
* Custom state for handling visibility
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add a new state to Drupal #states. We use this to toggle element-invisible
|
||||
* to show/hidden #states elements. This allows elements to be visible to
|
||||
* screen readers.
|
||||
*
|
||||
* To use:
|
||||
* $form['my_form_field'] = array(
|
||||
* ..
|
||||
* // Only show this field if 'some_other_field' is checked.
|
||||
* '#states => array(
|
||||
* 'show' => array(
|
||||
* 'some-other-field' => array('checked' => TRUE),
|
||||
* ),
|
||||
* ),
|
||||
* ..
|
||||
* // Required to load the 'show' state handler.
|
||||
* '#attached' => array(
|
||||
* 'js' => array(ctools_attach_js('states-show')),
|
||||
* ),
|
||||
* );
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
Drupal.states.State.aliases.hidden = '!show';
|
||||
|
||||
// Show/hide form items by toggling the 'element-invisible' class. This is a
|
||||
// more accessible option than the core 'visible' state.
|
||||
$(document).bind('state:show', function(e) {
|
||||
if (e.trigger) {
|
||||
var element = $(e.target).closest('.form-item, .form-submit, .form-wrapper');
|
||||
element.toggle(e.value);
|
||||
e.value === true ? element.removeClass('element-invisible') : element.addClass('element-invisible');
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
Drupal.CTools.Stylizer.addFarbtastic = function(context) {
|
||||
// This behavior attaches by ID, so is only valid once on a page.
|
||||
if ($('ctools_stylizer_color_scheme_form .color-form.Stylizer-processed').size()) {
|
||||
if ($('#ctools_stylizer_color_scheme_form .color-form.Stylizer-processed').size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user