PluginProbe
QuadMenu – Mega Menu / 1.8.9
QuadMenu – Mega Menu v1.8.9
3.3.8 3.3.7 3.3.6 trunk 1.8.4 1.8.5 1.8.7 1.8.8 1.8.9 1.9.0 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 88 releases
quadmenu / assets / backend / js / quadmenu-compiler.js

quadmenu-compiler.js in QuadMenu – Mega Menu 1.8.9, at assets/backend/js/quadmenu-compiler.js

252 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function ($) {
2 "use strict";
3
4 if (!window.console)
5 console = {};
6
7 console.log = console.log || function (name, data) {
8 };
9
10 console.error = console.error || function (data) {
11 };
12
13 function eachLessFile(files, variables, action) {
14
15 var startingpoint = $.Deferred();
16
17 startingpoint.resolve();
18
19 var promises = [];
20
21 $.each(files, function (i, file) {
22
23 var da = new DeferredLess({
24 modifyVars: variables,
25 lessPath: file,
26 action: action,
27 id: i,
28 });
29
30 $.when(startingpoint).then(function () {
31 setTimeout(function () {
32 da.invoke();
33 }, 200);
34 });
35
36 startingpoint = da;
37
38 promises.push(startingpoint)
39
40 });
41
42 return promises;
43
44 }
45
46 function DeferredLess(options) {
47
48 this.options = options;
49 this.deferred = $.Deferred();
50
51 }
52
53 DeferredLess.prototype.invoke = function () {
54
55 var self = this;
56
57 less.options.env = quadmenu.debug ? 'development' : 'production';
58
59 less.options.logLevel = 0;
60
61 less.options.useFileCache = true;
62
63 return less.render('@import "' + self.options.lessPath + '";', self.options).then(
64 function (output) {
65 self.trigger(output, self.options.action, self.options.id);
66 self.deferred.resolve();
67 },
68 function (error) {
69 console.log(error);
70 self.deferred.resolve();
71 });
72
73
74 }
75
76 DeferredLess.prototype.trigger = function (output, action, id) {
77
78 if (typeof (action) == 'undefined')
79 console.log('Undefined action');
80
81 $(document).trigger('quadmenu_compiler_' + action, [output, id]);
82
83 };
84
85 DeferredLess.prototype.promise = function () {
86 return this.deferred.promise();
87 };
88
89 $(document).on('quadmenu_compiler_end', function (e, notice) {
90
91 var $compiler = $('#redux-compiler-hook');
92
93 if (!$compiler.length)
94 return;
95
96 $('#redux-compiler-hook').val(0);
97
98 });
99
100 $(document).on('quadmenu_compiler_error', function (e, notice) {
101 alert(notice);
102 });
103
104 $(document).on('quadmenu_compiler_success', function (e, notice) {
105
106 var $notification_bar = $(document.getElementById('redux_notification_bar')),
107 $alert = $('.quadmenu-admin-compiler-alert'),
108 $button = $alert.find('input[name="quadmenu_compiler"]');
109
110 $alert.addClass('hidden');
111
112 $button.attr('disabled', true).removeClass('button-critical').addClass('delete');
113
114 $notification_bar.append(notice).find('.saved_notice').delay(4000).slideUp();
115
116 });
117
118 $(document).on('quadmenu_compiler_change', function (e, output, id) {
119
120 $('style#quadmenu_customizer_' + id, 'head').remove();
121
122 $('head').append('<style id="quadmenu_customizer_' + id + '">' + output.css + '</style>');
123 console.log('Append CSS');
124
125 });
126
127 $(document).on('quadmenu_compiler_save', function (e, output, id) {
128
129 $.ajax({
130 type: 'POST',
131 dataType: 'json',
132 url: ajaxurl,
133 data: {
134 action: 'quadmenu_compiler_save',
135 output: output,
136 nonce: quadmenu.nonce,
137 },
138 success: function (response) {
139 $(document).delay(4000).trigger('quadmenu_compiler_success', [response.notification_bar]);
140
141 console.log('Compiled [' + output.imports[0] + ']');
142 },
143 error: function (response) {
144
145 console.log(response);
146
147 $(document).delay(4000).trigger('quadmenu_compiler_error', response.responseText);
148 },
149 complete: function (xhr, status, error) {
150 }
151 });
152 });
153
154 $(document).on('quadmenu_compiler_files', function (e, files, variables, action) {
155
156 var $this = $(this),
157 $overlay = $('#redux_ajax_overlay'),
158 $buttons = $('.redux-action_bar input'),
159 $spinner = $('.redux-action_bar .spinner');
160
161 if ($overlay.length)
162 $overlay.fadeIn();
163
164 if ($spinner.length)
165 $spinner.addClass('is-active');
166
167 console.log('Starting compiler!');
168
169 var promises = eachLessFile(files, variables, action);
170
171 $.when.apply($, promises).done(function () {
172
173 if ($overlay.length)
174 $overlay.fadeOut();
175
176 if ($spinner.length)
177 $spinner.removeClass('is-active');
178
179 if ($buttons.length)
180 $buttons.removeAttr('disabled');
181
182 $this.trigger('quadmenu_compiler_end');
183
184 console.log('Ending compiler!');
185
186 });
187
188 });
189
190 $(document).on('ajaxSuccess.redux_save', function (e, xhr, settings) {
191
192 var $compiler = $('#redux-compiler-hook');
193
194 if (!$compiler.length)
195 return;
196
197 var compiler = $compiler.val(),
198 response = $.parseJSON(xhr.responseText);
199
200 if (compiler != 1)
201 return;
202
203 if (!response.variables)
204 return;
205
206 try {
207 $(this).trigger('quadmenu_compiler_files', [quadmenu.files, response.variables, 'save']);
208 } catch (error) {
209 alert('Not JSON');
210 }
211
212 });
213
214 $(window).on('load', function () {
215
216 if (typeof (quadmenu) == 'undefined')
217 return;
218
219 if (quadmenu.compiler != 1)
220 return;
221
222 if (!quadmenu.variables)
223 return;
224
225 if (!quadmenu.files)
226 return;
227
228 console.log(quadmenu);
229
230 $(document).trigger('quadmenu_compiler_files', [quadmenu.files, quadmenu.variables, 'save']);
231 });
232
233 $(document).on('ready', function (e) {
234
235 });
236
237 $(document).on('quadmenu_customizer_save', function (e) {
238
239 if (typeof (quadmenu) == 'undefined')
240 return;
241
242 if (!quadmenu.variables)
243 return;
244
245 if (!quadmenu.files)
246 return;
247
248 $(this).trigger('quadmenu_compiler_files', [quadmenu.files, quadmenu.variables, 'save']);
249
250 });
251
252 })(jQuery);