Mercurial > hg > cmmr2012-drupal-site
comparison core/misc/collapse.js @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 /** | |
2 * DO NOT EDIT THIS FILE. | |
3 * See the following change record for more information, | |
4 * https://www.drupal.org/node/2815083 | |
5 * @preserve | |
6 **/ | |
7 | |
8 (function ($, Modernizr, Drupal) { | |
9 function CollapsibleDetails(node) { | |
10 this.$node = $(node); | |
11 this.$node.data('details', this); | |
12 | |
13 var anchor = location.hash && location.hash !== '#' ? ', ' + location.hash : ''; | |
14 if (this.$node.find('.error' + anchor).length) { | |
15 this.$node.attr('open', true); | |
16 } | |
17 | |
18 this.setupSummary(); | |
19 | |
20 this.setupLegend(); | |
21 } | |
22 | |
23 $.extend(CollapsibleDetails, { | |
24 instances: [] | |
25 }); | |
26 | |
27 $.extend(CollapsibleDetails.prototype, { | |
28 setupSummary: function setupSummary() { | |
29 this.$summary = $('<span class="summary"></span>'); | |
30 this.$node.on('summaryUpdated', $.proxy(this.onSummaryUpdated, this)).trigger('summaryUpdated'); | |
31 }, | |
32 setupLegend: function setupLegend() { | |
33 var $legend = this.$node.find('> summary'); | |
34 | |
35 $('<span class="details-summary-prefix visually-hidden"></span>').append(this.$node.attr('open') ? Drupal.t('Hide') : Drupal.t('Show')).prependTo($legend).after(document.createTextNode(' ')); | |
36 | |
37 $('<a class="details-title"></a>').attr('href', '#' + this.$node.attr('id')).prepend($legend.contents()).appendTo($legend); | |
38 | |
39 $legend.append(this.$summary).on('click', $.proxy(this.onLegendClick, this)); | |
40 }, | |
41 onLegendClick: function onLegendClick(e) { | |
42 this.toggle(); | |
43 e.preventDefault(); | |
44 }, | |
45 onSummaryUpdated: function onSummaryUpdated() { | |
46 var text = $.trim(this.$node.drupalGetSummary()); | |
47 this.$summary.html(text ? ' (' + text + ')' : ''); | |
48 }, | |
49 toggle: function toggle() { | |
50 var _this = this; | |
51 | |
52 var isOpen = !!this.$node.attr('open'); | |
53 var $summaryPrefix = this.$node.find('> summary span.details-summary-prefix'); | |
54 if (isOpen) { | |
55 $summaryPrefix.html(Drupal.t('Show')); | |
56 } else { | |
57 $summaryPrefix.html(Drupal.t('Hide')); | |
58 } | |
59 | |
60 setTimeout(function () { | |
61 _this.$node.attr('open', !isOpen); | |
62 }, 0); | |
63 } | |
64 }); | |
65 | |
66 Drupal.behaviors.collapse = { | |
67 attach: function attach(context) { | |
68 if (Modernizr.details) { | |
69 return; | |
70 } | |
71 var $collapsibleDetails = $(context).find('details').once('collapse').addClass('collapse-processed'); | |
72 if ($collapsibleDetails.length) { | |
73 for (var i = 0; i < $collapsibleDetails.length; i++) { | |
74 CollapsibleDetails.instances.push(new CollapsibleDetails($collapsibleDetails[i])); | |
75 } | |
76 } | |
77 } | |
78 }; | |
79 | |
80 var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e, $target) { | |
81 $target.parents('details').not('[open]').find('> summary').trigger('click'); | |
82 }; | |
83 | |
84 $('body').on('formFragmentLinkClickOrHashChange.details', handleFragmentLinkClickOrHashChange); | |
85 | |
86 Drupal.CollapsibleDetails = CollapsibleDetails; | |
87 })(jQuery, Modernizr, Drupal); |