summaryrefslogtreecommitdiffstatshomepage
path: root/core/modules/contextual/contextual.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/contextual/contextual.js')
-rw-r--r--core/modules/contextual/contextual.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/core/modules/contextual/contextual.js b/core/modules/contextual/contextual.js
new file mode 100644
index 00000000000..ee5b7a0545a
--- /dev/null
+++ b/core/modules/contextual/contextual.js
@@ -0,0 +1,43 @@
+(function ($) {
+
+Drupal.contextualLinks = Drupal.contextualLinks || {};
+
+/**
+ * Attach outline behavior for regions associated with contextual links.
+ */
+Drupal.behaviors.contextualLinks = {
+ attach: function (context) {
+ $('div.contextual-links-wrapper', context).once('contextual-links', function () {
+ var $wrapper = $(this);
+ var $region = $wrapper.closest('.contextual-links-region');
+ var $links = $wrapper.find('ul.contextual-links');
+ var $trigger = $('<a class="contextual-links-trigger" href="#" />').text(Drupal.t('Configure')).click(
+ function () {
+ $links.stop(true, true).slideToggle(100);
+ $wrapper.toggleClass('contextual-links-active');
+ return false;
+ }
+ );
+ // Attach hover behavior to trigger and ul.contextual-links.
+ $trigger.add($links).hover(
+ function () { $region.addClass('contextual-links-region-active'); },
+ function () { $region.removeClass('contextual-links-region-active'); }
+ );
+ // Hide the contextual links when user clicks a link or rolls out of the .contextual-links-region.
+ $region.bind('mouseleave click', Drupal.contextualLinks.mouseleave);
+ // Prepend the trigger.
+ $wrapper.prepend($trigger);
+ });
+ }
+};
+
+/**
+ * Disables outline for the region contextual links are associated with.
+ */
+Drupal.contextualLinks.mouseleave = function () {
+ $(this)
+ .find('.contextual-links-active').removeClass('contextual-links-active')
+ .find('ul.contextual-links').hide();
+};
+
+})(jQuery);