PluginProbe
User Access Manager / 2.3.18
User Access Manager v2.3.18
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
user-access-manager / assets / js / functions.js

functions.js in User Access Manager 2.3.18, at assets/js/functions.js

179 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 jQuery(document).ready(function ($) {
2 /**
3 * Click triggered flyouts, modelled on the popovers WordPress uses for the
4 * publish date. Only one is open at a time; escape and outside clicks close
5 * it and return focus to the trigger it belongs to.
6 */
7 var flyoutIdCounter = 0;
8 var $openToggle = null;
9
10 var getPanel = function ($toggle) {
11 return $toggle.next('.uam_flyout_panel');
12 };
13
14 var positionPanel = function ($toggle, $panel) {
15 $panel.removeClass('uam_flyout_panel_above').css('left', 0);
16
17 var rect = $panel[0].getBoundingClientRect();
18 var overflowRight = rect.right - (window.innerWidth - 8);
19
20 if (overflowRight > 0) {
21 $panel.css('left', -overflowRight + 'px');
22 }
23
24 var left = $panel[0].getBoundingClientRect().left;
25
26 if (left < 8) {
27 $panel.css('left', (parseFloat($panel.css('left')) || 0) + (8 - left) + 'px');
28 }
29
30 // Flip above the trigger when there is no room below, the way the
31 // publish date popover does.
32 var panelRect = $panel[0].getBoundingClientRect();
33 var toggleTop = $toggle[0].getBoundingClientRect().top;
34
35 if (panelRect.bottom > window.innerHeight - 8 && toggleTop > panelRect.height + 8) {
36 $panel.addClass('uam_flyout_panel_above');
37 }
38 };
39
40 var closeFlyout = function (returnFocus) {
41 if ($openToggle === null) {
42 return;
43 }
44
45 getPanel($openToggle).hide();
46 $openToggle.attr('aria-expanded', 'false');
47
48 if (returnFocus === true) {
49 $openToggle.trigger('focus');
50 }
51
52 $openToggle = null;
53 };
54
55 var openFlyout = function ($toggle) {
56 var $panel = getPanel($toggle);
57
58 if ($panel.length === 0) {
59 return;
60 }
61
62 if (!$panel.attr('id')) {
63 flyoutIdCounter++;
64 $panel.attr('id', 'uam_flyout_panel_' + flyoutIdCounter);
65 }
66
67 $toggle.attr('aria-controls', $panel.attr('id'));
68 $toggle.attr('aria-expanded', 'true');
69 $panel.show();
70 positionPanel($toggle, $panel);
71 $openToggle = $toggle;
72 };
73
74 jQuery(document).on('click', '.uam_flyout_toggle', function (event) {
75 var $toggle = jQuery(this);
76 var wasOpen = $toggle.attr('aria-expanded') === 'true';
77
78 event.preventDefault();
79 event.stopPropagation();
80 closeFlyout(false);
81
82 if (wasOpen === false) {
83 openFlyout($toggle);
84 }
85 });
86
87 // Clearing both fields removes the time restriction on save, because an
88 // empty value makes the server store no date at all.
89 jQuery(document).on('click', '.uam_clear_dates', function () {
90 var $panel = jQuery(this).closest('.uam_flyout_panel');
91 var $toggle = $panel.prev('.uam_flyout_toggle');
92 var emptyLabel = $toggle.data('empty-label');
93
94 $panel.find('input').val('');
95
96 if (emptyLabel) {
97 $toggle.text(emptyLabel);
98 }
99
100 closeFlyout(true);
101 });
102
103 jQuery(document).on('click', function (event) {
104 if ($openToggle !== null && jQuery(event.target).closest('.uam_flyout_panel').length === 0) {
105 closeFlyout(false);
106 }
107 });
108
109 jQuery(document).on('keydown', function (event) {
110 if (event.key === 'Escape' && $openToggle !== null) {
111 closeFlyout(true);
112 }
113 });
114
115 //Functions for the setting page
116 var toggleGroup = function (group, elementIndex, hiddenFlag, elementsToHide) {
117 hiddenFlag = hiddenFlag || 'true';
118 var $group = jQuery(group);
119 var $inputs = jQuery('tr:eq('+elementIndex+') input', $group);
120
121 var toggleElement = function (element) {
122 var $element = jQuery(element);
123 var $subElements = jQuery('tr:gt('+elementIndex+')', $group);
124 var currentState = ($element.val() === hiddenFlag);
125 elementsToHide = elementsToHide || $subElements.length;
126
127 for (var index = 0; index < $subElements.length; index++) {
128 var $subElement = jQuery($subElements[index]);
129 var data = $subElement.data('hidden') || {};
130 data[elementIndex] = (index < elementsToHide) ? currentState : !currentState;
131 $subElement.data('hidden', data);
132
133 var showElement = true;
134
135 jQuery.each(data, function(key, value) {
136 if (value === true) {
137 showElement = false;
138 return null;
139 }
140 });
141
142 $subElement.toggle(showElement);
143 }
144 };
145
146 $inputs.on('change', function () {
147 toggleElement(this);
148 });
149
150 toggleElement($inputs.filter(':checked'));
151 };
152
153 toggleGroup('.uam_settings_group_post_type', 0);
154 toggleGroup('.uam_settings_group_post_type:not(.default)', 1);
155 toggleGroup('.uam_settings_group_taxonomies:not(.default)', 0);
156 toggleGroup('.uam_settings_group_file:not(.default)', 1);
157 toggleGroup('#uam_settings_group_file', 0, 'false');
158 toggleGroup('#uam_settings_group_file', 4, 'false', 1);
159
160 // Functions for the setup page
161 jQuery('#uam_reset_confirm').on('change paste keyup', function () {
162 var $button = jQuery('#uam_reset_submit');
163
164 if (jQuery(this).val() === 'reset') {
165 $button.removeAttr('disabled');
166 } else if (typeof $button.attr('disabled') === 'undefined') {
167 $button.attr('disabled', 'disabled');
168 }
169 });
170
171 jQuery('#uam_settings_group_section').on('change', function () {
172 var $selected = jQuery(this).find(':selected');
173 window.location.href = $selected.data('link');
174 });
175
176 /** global: ajaxurl */
177 $('#uam_dynamic_groups').uamGroupSuggest(ajaxurl + '?action=uam-get-dynamic-group', { delay: 500, multiple: true });
178 $('.uam_time_input').uamTimeInput();
179 });