tjadmin 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tjadmin/version.rb +1 -1
  3. data/vendor/assets/font/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff +0 -0
  4. data/vendor/assets/font/FontAwesome.otf +0 -0
  5. data/vendor/assets/font/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff +0 -0
  6. data/vendor/assets/font/fontawesome-webfont.eot +0 -0
  7. data/vendor/assets/font/fontawesome-webfont.svg +399 -0
  8. data/vendor/assets/font/fontawesome-webfont.ttf +0 -0
  9. data/vendor/assets/font/fontawesome-webfont.woff +0 -0
  10. data/vendor/assets/javascripts/tjadmin/ace-elements.js +866 -0
  11. data/vendor/assets/javascripts/tjadmin/ace-extra.js +374 -0
  12. data/vendor/assets/javascripts/tjadmin/ace.js +310 -0
  13. data/vendor/assets/javascripts/tjadmin/additional-methods.js +617 -0
  14. data/vendor/assets/javascripts/tjadmin/bootbox.js +660 -0
  15. data/vendor/assets/javascripts/tjadmin/bootstrap-colorpicker.js +540 -0
  16. data/vendor/assets/javascripts/tjadmin/bootstrap-tag.js +206 -0
  17. data/vendor/assets/javascripts/tjadmin/bootstrap-wysiwyg.js +206 -0
  18. data/vendor/assets/javascripts/tjadmin/bootstrap.js +2280 -0
  19. data/vendor/assets/javascripts/tjadmin/chosen.jquery.js +1166 -0
  20. data/vendor/assets/javascripts/tjadmin/date-time/bootstrap-datepicker.js +1016 -0
  21. data/vendor/assets/javascripts/tjadmin/date-time/bootstrap-timepicker.js +888 -0
  22. data/vendor/assets/javascripts/tjadmin/date-time/daterangepicker.js +854 -0
  23. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.bg.js +14 -0
  24. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.ca.js +14 -0
  25. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.cs.js +15 -0
  26. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.da.js +14 -0
  27. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.de.js +16 -0
  28. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.el.js +13 -0
  29. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.es.js +14 -0
  30. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.fi.js +14 -0
  31. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.fr.js +16 -0
  32. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.he.js +15 -0
  33. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.hr.js +13 -0
  34. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.hu.js +16 -0
  35. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.id.js +13 -0
  36. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.is.js +14 -0
  37. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.it.js +16 -0
  38. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.ja.js +15 -0
  39. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.kr.js +13 -0
  40. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.lt.js +16 -0
  41. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.lv.js +16 -0
  42. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.ms.js +14 -0
  43. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.nb.js +14 -0
  44. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.nl.js +14 -0
  45. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.pl.js +15 -0
  46. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.pt-BR.js +14 -0
  47. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.pt.js +14 -0
  48. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.ro.js +15 -0
  49. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.rs-latin.js +14 -0
  50. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.rs.js +14 -0
  51. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.ru.js +14 -0
  52. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.sk.js +15 -0
  53. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.sl.js +14 -0
  54. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.sv.js +14 -0
  55. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.sw.js +15 -0
  56. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.th.js +14 -0
  57. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.tr.js +15 -0
  58. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.uk.js +14 -0
  59. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.zh-CN.js +14 -0
  60. data/vendor/assets/javascripts/tjadmin/date-time/locales/bootstrap-datepicker.zh-TW.js +13 -0
  61. data/vendor/assets/javascripts/tjadmin/date-time/moment.js +1400 -0
  62. data/vendor/assets/javascripts/tjadmin/excanvas.js +1428 -0
  63. data/vendor/assets/javascripts/tjadmin/flot/jquery.flot.js +3061 -0
  64. data/vendor/assets/javascripts/tjadmin/flot/jquery.flot.pie.js +817 -0
  65. data/vendor/assets/javascripts/tjadmin/flot/jquery.flot.resize.js +60 -0
  66. data/vendor/assets/javascripts/tjadmin/fuelux/data/fuelux.tree-sampledata.js +174 -0
  67. data/vendor/assets/javascripts/tjadmin/fuelux/fuelux.spinner.js +201 -0
  68. data/vendor/assets/javascripts/tjadmin/fuelux/fuelux.tree.js +173 -0
  69. data/vendor/assets/javascripts/tjadmin/fuelux/fuelux.wizard.js +172 -0
  70. data/vendor/assets/javascripts/tjadmin/fullcalendar.js +5973 -0
  71. data/vendor/assets/javascripts/tjadmin/jquery-1.10.2.js +9789 -0
  72. data/vendor/assets/javascripts/tjadmin/jquery-2.0.3.js +8829 -0
  73. data/vendor/assets/javascripts/tjadmin/jquery-ui-1.10.3.custom.js +5423 -0
  74. data/vendor/assets/javascripts/tjadmin/jquery.autosize.js +242 -0
  75. data/vendor/assets/javascripts/tjadmin/jquery.colorbox.js +1063 -0
  76. data/vendor/assets/javascripts/tjadmin/jquery.dataTables.js +12099 -0
  77. data/vendor/assets/javascripts/tjadmin/jquery.easy-pie-chart.js +200 -0
  78. data/vendor/assets/javascripts/tjadmin/jquery.gritter.js +418 -0
  79. data/vendor/assets/javascripts/tjadmin/jquery.hotkeys.js +113 -0
  80. data/vendor/assets/javascripts/tjadmin/jquery.inputlimiter.1.3.1.js +172 -0
  81. data/vendor/assets/javascripts/tjadmin/jquery.knob.js +656 -0
  82. data/vendor/assets/javascripts/tjadmin/jquery.maskedinput.js +338 -0
  83. data/vendor/assets/javascripts/tjadmin/jquery.mobile.custom.js +1081 -0
  84. data/vendor/assets/javascripts/tjadmin/jquery.slimscroll.js +448 -0
  85. data/vendor/assets/javascripts/tjadmin/jquery.sparkline.js +3054 -0
  86. data/vendor/assets/javascripts/tjadmin/jquery.ui.touch-punch.js +160 -0
  87. data/vendor/assets/javascripts/tjadmin/jquery.validate.js +1231 -0
  88. data/vendor/assets/javascripts/tjadmin/markdown/bootstrap-markdown.js +993 -0
  89. data/vendor/assets/javascripts/tjadmin/markdown/markdown.js +1616 -0
  90. data/vendor/assets/javascripts/tjadmin/markdown/to-markdown.js +184 -0
  91. data/vendor/assets/javascripts/tjadmin/select2.js +3168 -0
  92. data/vendor/assets/javascripts/tjadmin/spin.js +349 -0
  93. data/vendor/assets/javascripts/tjadmin/x-editable/ace-editable.js +368 -0
  94. data/vendor/assets/javascripts/tjadmin/x-editable/bootstrap-editable.js +6827 -0
  95. data/vendor/assets/javascripts/tjadmin.js +5 -0
  96. data/vendor/assets/stylesheets/tjadmin/ace-fonts.css.scss +13 -0
  97. data/vendor/assets/stylesheets/tjadmin/ace-ie.css +293 -0
  98. data/vendor/assets/stylesheets/tjadmin/ace-responsive.css +1113 -0
  99. data/vendor/assets/stylesheets/tjadmin/ace-skins.css +1301 -0
  100. data/vendor/assets/stylesheets/tjadmin/ace.css +14701 -0
  101. data/vendor/assets/stylesheets/tjadmin/bootstrap-responsive.css +1109 -0
  102. data/vendor/assets/stylesheets/tjadmin/bootstrap.css +6167 -0
  103. data/vendor/assets/stylesheets/tjadmin/chosen.css +430 -0
  104. data/vendor/assets/stylesheets/tjadmin/font-awesome-ie7.css +1203 -0
  105. data/vendor/assets/stylesheets/tjadmin/font-awesome.css +1479 -0
  106. data/vendor/assets/stylesheets/tjadmin/jquery-ui-1.10.3.custom.css +223 -0
  107. data/vendor/assets/stylesheets/tjadmin.css +9 -0
  108. metadata +106 -1
@@ -0,0 +1,374 @@
1
+ if(! ('ace' in window) ) window['ace'] = {}
2
+
3
+ ace.config = {
4
+ cookie_expiry : 604800, //1 week duration for saved settings
5
+ storage_method: 2 //2 means use cookies, 1 means localStorage, 0 means localStorage if available otherwise cookies
6
+ }
7
+
8
+ ace.settings = {
9
+ is : function(item, status) {
10
+ //such as ace.settings.is('navbar', 'fixed')
11
+ return (ace.data.get('settings', item+'-'+status) == 1)
12
+ },
13
+ exists : function(item, status) {
14
+ return (ace.data.get('settings', item+'-'+status) !== null)
15
+ },
16
+ set : function(item, status) {
17
+ ace.data.set('settings', item+'-'+status, 1)
18
+ },
19
+ unset : function(item, status) {
20
+ ace.data.set('settings', item+'-'+status, -1)
21
+ },
22
+ remove : function(item, status) {
23
+ ace.data.remove('settings', item+'-'+status)
24
+ },
25
+
26
+ navbar_fixed : function(fix) {
27
+ fix = fix || false;
28
+ if(!fix && ace.settings.is('sidebar', 'fixed')) {
29
+ ace.settings.sidebar_fixed(false);
30
+ }
31
+
32
+ var navbar = document.getElementById('navbar');
33
+ if(fix) {
34
+ if(!ace.hasClass(navbar , 'navbar-fixed-top')) ace.addClass(navbar , 'navbar-fixed-top');
35
+ if(!ace.hasClass(document.body , 'navbar-fixed')) ace.addClass(document.body , 'navbar-fixed');
36
+
37
+ ace.settings.set('navbar', 'fixed');
38
+ } else {
39
+ ace.removeClass(navbar , 'navbar-fixed-top');
40
+ ace.removeClass(document.body , 'navbar-fixed');
41
+
42
+ ace.settings.unset('navbar', 'fixed');
43
+ }
44
+
45
+ document.getElementById('ace-settings-navbar').checked = fix;
46
+ },
47
+
48
+
49
+ breadcrumbs_fixed : function(fix) {
50
+ fix = fix || false;
51
+ if(fix && !ace.settings.is('sidebar', 'fixed')) {
52
+ ace.settings.sidebar_fixed(true);
53
+ }
54
+
55
+ var breadcrumbs = document.getElementById('breadcrumbs');
56
+ if(fix) {
57
+ if(!ace.hasClass(breadcrumbs , 'breadcrumbs-fixed')) ace.addClass(breadcrumbs , 'breadcrumbs-fixed');
58
+ if(!ace.hasClass(document.body , 'breadcrumbs-fixed')) ace.addClass(document.body , 'breadcrumbs-fixed');
59
+
60
+ ace.settings.set('breadcrumbs', 'fixed');
61
+ } else {
62
+ ace.removeClass(breadcrumbs , 'breadcrumbs-fixed');
63
+ ace.removeClass(document.body , 'breadcrumbs-fixed');
64
+
65
+ ace.settings.unset('breadcrumbs', 'fixed');
66
+ }
67
+ document.getElementById('ace-settings-breadcrumbs').checked = fix;
68
+ },
69
+
70
+
71
+ sidebar_fixed : function(fix) {
72
+ fix = fix || false;
73
+ if(!fix && ace.settings.is('breadcrumbs', 'fixed')) {
74
+ ace.settings.breadcrumbs_fixed(false);
75
+ }
76
+
77
+ if( fix && !ace.settings.is('navbar', 'fixed') ) {
78
+ ace.settings.navbar_fixed(true);
79
+ }
80
+
81
+ var sidebar = document.getElementById('sidebar');
82
+ if(fix) {
83
+ if( !ace.hasClass(sidebar , 'sidebar-fixed') ) ace.addClass(sidebar , 'sidebar-fixed');
84
+ ace.settings.set('sidebar', 'fixed');
85
+ } else {
86
+ ace.removeClass(sidebar , 'sidebar-fixed');
87
+ ace.settings.unset('sidebar', 'fixed');
88
+ }
89
+ document.getElementById('ace-settings-sidebar').checked = fix;
90
+ },
91
+
92
+
93
+ sidebar_collapsed : function(collpase) {
94
+ collpase = collpase || false;
95
+
96
+ var sidebar = document.getElementById('sidebar');
97
+ var icon = document.getElementById('sidebar-collapse').querySelector('[class*="icon-"]');
98
+ var $icon1 = icon.getAttribute('data-icon1');//the icon for expanded state
99
+ var $icon2 = icon.getAttribute('data-icon2');//the icon for collapsed state
100
+
101
+ if(collpase) {
102
+ ace.addClass(sidebar , 'menu-min');
103
+ ace.removeClass(icon , $icon1);
104
+ ace.addClass(icon , $icon2);
105
+
106
+ ace.settings.set('sidebar', 'collapsed');
107
+ } else {
108
+ ace.removeClass(sidebar , 'menu-min');
109
+ ace.removeClass(icon , $icon2);
110
+ ace.addClass(icon , $icon1);
111
+
112
+ ace.settings.unset('sidebar', 'collapsed');
113
+ }
114
+
115
+ },
116
+ /**
117
+ select_skin : function(skin) {
118
+ }
119
+ */
120
+ }
121
+
122
+
123
+ //check the status of something
124
+ ace.settings.check = function(item, val) {
125
+ if(! ace.settings.exists(item, val) ) return;//no such setting specified
126
+ var status = ace.settings.is(item, val);//is breadcrumbs-fixed? or is sidebar-collapsed? etc
127
+
128
+ var mustHaveClass = {
129
+ 'navbar-fixed' : 'navbar-fixed-top',
130
+ 'sidebar-fixed' : 'sidebar-fixed',
131
+ 'breadcrumbs-fixed' : 'breadcrumbs-fixed',
132
+ 'sidebar-collapsed' : 'menu-min'
133
+ }
134
+
135
+
136
+ //if an element doesn't have a specified class, but saved settings say it should, then add it
137
+ //for example, sidebar isn't .fixed, but user fixed it on a previous page
138
+ //or if an element has a specified class, but saved settings say it shouldn't, then remove it
139
+ //for example, sidebar by default is minimized (.menu-min hard coded), but user expanded it and now shouldn't have 'menu-min' class
140
+
141
+ var target = document.getElementById(item);//#navbar, #sidebar, #breadcrumbs
142
+ if(status != ace.hasClass(target , mustHaveClass[item+'-'+val])) {
143
+ ace.settings[item+'_'+val](status);//call the relevant function to mage the changes
144
+ }
145
+ }
146
+
147
+
148
+
149
+
150
+
151
+
152
+ //save/retrieve data using localStorage or cookie
153
+ //method == 1, use localStorage
154
+ //method == 2, use cookies
155
+ //method not specified, use localStorage if available, otherwise cookies
156
+ ace.data_storage = function(method, undefined) {
157
+ var prefix = 'ace.';
158
+
159
+ var storage = null;
160
+ var type = 0;
161
+
162
+ if((method == 1 || method === undefined) && 'localStorage' in window && window['localStorage'] !== null) {
163
+ storage = ace.storage;
164
+ type = 1;
165
+ }
166
+ else if(storage == null && (method == 2 || method === undefined) && 'cookie' in document && document['cookie'] !== null) {
167
+ storage = ace.cookie;
168
+ type = 2;
169
+ }
170
+
171
+ //var data = {}
172
+ this.set = function(namespace, key, value, undefined) {
173
+ if(!storage) return;
174
+
175
+ if(value === undefined) {//no namespace here?
176
+ value = key;
177
+ key = namespace;
178
+
179
+ if(value == null) storage.remove(prefix+key)
180
+ else {
181
+ if(type == 1)
182
+ storage.set(prefix+key, value)
183
+ else if(type == 2)
184
+ storage.set(prefix+key, value, ace.config.cookie_expiry)
185
+ }
186
+ }
187
+ else {
188
+ if(type == 1) {//localStorage
189
+ if(value == null) storage.remove(prefix+namespace+'.'+key)
190
+ else storage.set(prefix+namespace+'.'+key, value);
191
+ }
192
+ else if(type == 2) {//cookie
193
+ var val = storage.get(prefix+namespace);
194
+ var tmp = val ? JSON.parse(val) : {};
195
+
196
+ if(value == null) {
197
+ delete tmp[key];//remove
198
+ if(ace.sizeof(tmp) == 0) {//no other elements in this cookie, so delete it
199
+ storage.remove(prefix+namespace);
200
+ return;
201
+ }
202
+ }
203
+
204
+ else {
205
+ tmp[key] = value;
206
+ }
207
+
208
+ storage.set(prefix+namespace , JSON.stringify(tmp), ace.config.cookie_expiry)
209
+ }
210
+ }
211
+ }
212
+
213
+ this.get = function(namespace, key, undefined) {
214
+ if(!storage) return null;
215
+
216
+ if(key === undefined) {//no namespace here?
217
+ key = namespace;
218
+ return storage.get(prefix+key);
219
+ }
220
+ else {
221
+ if(type == 1) {//localStorage
222
+ return storage.get(prefix+namespace+'.'+key);
223
+ }
224
+ else if(type == 2) {//cookie
225
+ var val = storage.get(prefix+namespace);
226
+ var tmp = val ? JSON.parse(val) : {};
227
+ return key in tmp ? tmp[key] : null;
228
+ }
229
+ }
230
+ }
231
+
232
+
233
+ this.remove = function(namespace, key, undefined) {
234
+ if(!storage) return;
235
+
236
+ if(key === undefined) {
237
+ key = namespace
238
+ this.set(key, null);
239
+ }
240
+ else {
241
+ this.set(namespace, key, null);
242
+ }
243
+ }
244
+ }
245
+
246
+
247
+
248
+
249
+
250
+ //cookie storage
251
+ ace.cookie = {
252
+ // The following functions are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL.
253
+
254
+ /**
255
+ * Get a cookie.
256
+ */
257
+ get : function(name) {
258
+ var cookie = document.cookie, e, p = name + "=", b;
259
+
260
+ if ( !cookie )
261
+ return;
262
+
263
+ b = cookie.indexOf("; " + p);
264
+
265
+ if ( b == -1 ) {
266
+ b = cookie.indexOf(p);
267
+
268
+ if ( b != 0 )
269
+ return null;
270
+
271
+ } else {
272
+ b += 2;
273
+ }
274
+
275
+ e = cookie.indexOf(";", b);
276
+
277
+ if ( e == -1 )
278
+ e = cookie.length;
279
+
280
+ return decodeURIComponent( cookie.substring(b + p.length, e) );
281
+ },
282
+
283
+ /**
284
+ * Set a cookie.
285
+ *
286
+ * The 'expires' arg can be either a JS Date() object set to the expiration date (back-compat)
287
+ * or the number of seconds until expiration
288
+ */
289
+ set : function(name, value, expires, path, domain, secure) {
290
+ var d = new Date();
291
+
292
+ if ( typeof(expires) == 'object' && expires.toGMTString ) {
293
+ expires = expires.toGMTString();
294
+ } else if ( parseInt(expires, 10) ) {
295
+ d.setTime( d.getTime() + ( parseInt(expires, 10) * 1000 ) ); // time must be in miliseconds
296
+ expires = d.toGMTString();
297
+ } else {
298
+ expires = '';
299
+ }
300
+
301
+ document.cookie = name + "=" + encodeURIComponent(value) +
302
+ ((expires) ? "; expires=" + expires : "") +
303
+ ((path) ? "; path=" + path : "") +
304
+ ((domain) ? "; domain=" + domain : "") +
305
+ ((secure) ? "; secure" : "");
306
+ },
307
+
308
+ /**
309
+ * Remove a cookie.
310
+ *
311
+ * This is done by setting it to an empty value and setting the expiration time in the past.
312
+ */
313
+ remove : function(name, path) {
314
+ this.set(name, '', -1000, path);
315
+ }
316
+ };
317
+
318
+
319
+ //local storage
320
+ ace.storage = {
321
+ get: function(key) {
322
+ return window['localStorage'].getItem(key);
323
+ },
324
+ set: function(key, value) {
325
+ window['localStorage'].setItem(key , value);
326
+ },
327
+ remove: function(key) {
328
+ window['localStorage'].removeItem(key);
329
+ }
330
+ };
331
+
332
+
333
+
334
+
335
+
336
+
337
+ //count the number of properties in an object
338
+ //useful for getting the number of elements in an associative array
339
+ ace.sizeof = function(obj) {
340
+ var size = 0;
341
+ for(var key in obj) if(obj.hasOwnProperty(key)) size++;
342
+ return size;
343
+ }
344
+
345
+ //because jQuery may not be loaded at this stage, we use our own toggleClass
346
+ ace.hasClass = function(elem, className) {
347
+ return (" " + elem.className + " ").indexOf(" " + className + " ") > -1;
348
+ }
349
+ ace.addClass = function(elem, className) {
350
+ if (!ace.hasClass(elem, className)) {
351
+ var currentClass = elem.className;
352
+ elem.className = currentClass + (currentClass.length? " " : "") + className;
353
+ }
354
+ }
355
+ ace.removeClass = function(elem, className) {ace.replaceClass(elem, className);}
356
+
357
+ ace.replaceClass = function(elem, className, newClass) {
358
+ var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i");
359
+ elem.className = elem.className.replace(classToRemove, function (match, p1, p2) {
360
+ return newClass? (p1 + newClass + p2) : " ";
361
+ }).replace(/^\s+|\s+$/g, "");
362
+ }
363
+
364
+ ace.toggleClass = function(elem, className) {
365
+ if(ace.hasClass(elem, className))
366
+ ace.removeClass(elem, className);
367
+ else ace.addClass(elem, className);
368
+ }
369
+
370
+
371
+
372
+
373
+ //data_storage instance used inside ace.settings etc
374
+ ace.data = new ace.data_storage(ace.config.storage_method);
@@ -0,0 +1,310 @@
1
+ if(! ('ace' in window) ) window['ace'] = {}
2
+ jQuery(function($) {
3
+ //at some places we try to use 'tap' event instead of 'click' if jquery mobile plugin is available
4
+ window['ace'].click_event = $.fn.tap ? "tap" : "click";
5
+ });
6
+
7
+ jQuery(function($) {
8
+ //ace.click_event defined in ace-elements.js
9
+ ace.handle_side_menu(jQuery);
10
+
11
+ ace.enable_search_ahead(jQuery);
12
+
13
+ ace.general_things(jQuery);//and settings
14
+
15
+ ace.widget_boxes(jQuery);
16
+
17
+ /**
18
+ //make sidebar scrollbar when it is fixed and some parts of it is out of view
19
+ //>> you should include jquery-ui and slimscroll javascript files in your file
20
+ //>> you can call this function when sidebar is clicked to be fixed
21
+ $('.nav-list').slimScroll({
22
+ height: '400px',
23
+ distance:0,
24
+ size : '6px'
25
+ });
26
+ */
27
+ });
28
+
29
+
30
+
31
+ ace.handle_side_menu = function($) {
32
+ $('#menu-toggler').on(ace.click_event, function() {
33
+ $('#sidebar').toggleClass('display');
34
+ $(this).toggleClass('display');
35
+ return false;
36
+ });
37
+ //mini
38
+ var $minimized = $('#sidebar').hasClass('menu-min');
39
+ $('#sidebar-collapse').on(ace.click_event, function(){
40
+ $minimized = $('#sidebar').hasClass('menu-min');
41
+ ace.settings.sidebar_collapsed(!$minimized);//@ ace-extra.js
42
+ });
43
+
44
+ var touch = "ontouchend" in document;
45
+ //opening submenu
46
+ $('.nav-list').on(ace.click_event, function(e){
47
+ //check to see if we have clicked on an element which is inside a .dropdown-toggle element?!
48
+ //if so, it means we should toggle a submenu
49
+ var link_element = $(e.target).closest('a');
50
+ if(!link_element || link_element.length == 0) return;//if not clicked inside a link element
51
+
52
+ $minimized = $('#sidebar').hasClass('menu-min');
53
+
54
+ if(! link_element.hasClass('dropdown-toggle') ) {//it doesn't have a submenu return
55
+ //just one thing before we return
56
+ //if sidebar is collapsed(minimized) and we click on a first level menu item
57
+ //and the click is on the icon, not on the menu text then let's cancel event and cancel navigation
58
+ //Good for touch devices, that when the icon is tapped to see the menu text, navigation is cancelled
59
+ //navigation is only done when menu text is tapped
60
+ if($minimized && ace.click_event == "tap" &&
61
+ link_element.get(0).parentNode.parentNode == this /*.nav-list*/ )//i.e. only level-1 links
62
+ {
63
+ var text = link_element.find('.menu-text').get(0);
64
+ if( e.target != text && !$.contains(text , e.target) )//not clicking on the text or its children
65
+ return false;
66
+ }
67
+
68
+ return;
69
+ }
70
+ //
71
+ var sub = link_element.next().get(0);
72
+
73
+ //if we are opening this submenu, close all other submenus except the ".active" one
74
+ if(! $(sub).is(':visible') ) {//if not open and visible, let's open it and make it visible
75
+ var parent_ul = $(sub.parentNode).closest('ul');
76
+ if($minimized && parent_ul.hasClass('nav-list')) return;
77
+
78
+ parent_ul.find('> .open > .submenu').each(function(){
79
+ //close all other open submenus except for the active one
80
+ if(this != sub && !$(this.parentNode).hasClass('active')) {
81
+ $(this).slideUp(200).parent().removeClass('open');
82
+
83
+ //uncomment the following line to close all submenus on deeper levels when closing a submenu
84
+ //$(this).find('.open > .submenu').slideUp(0).parent().removeClass('open');
85
+ }
86
+ });
87
+ } else {
88
+ //uncomment the following line to close all submenus on deeper levels when closing a submenu
89
+ //$(sub).find('.open > .submenu').slideUp(0).parent().removeClass('open');
90
+ }
91
+
92
+ if($minimized && $(sub.parentNode.parentNode).hasClass('nav-list')) return false;
93
+
94
+ $(sub).slideToggle(200).parent().toggleClass('open');
95
+ return false;
96
+ })
97
+ }
98
+
99
+
100
+
101
+ ace.general_things = function($) {
102
+ $('.ace-nav [class*="icon-animated-"]').closest('a').on('click', function(){
103
+ var icon = $(this).find('[class*="icon-animated-"]').eq(0);
104
+ var $match = icon.attr('class').match(/icon\-animated\-([\d\w]+)/);
105
+ icon.removeClass($match[0]);
106
+ $(this).off('click');
107
+ });
108
+
109
+ $('.nav-list .badge[title],.nav-list .label[title]').tooltip({'placement':'right'});
110
+
111
+
112
+
113
+ //simple settings
114
+
115
+ $('#ace-settings-btn').on(ace.click_event, function(){
116
+ $(this).toggleClass('open');
117
+ $('#ace-settings-box').toggleClass('open');
118
+ });
119
+
120
+
121
+ $('#ace-settings-navbar').on('click', function(){
122
+ ace.settings.navbar_fixed(this.checked);//@ ace-extra.js
123
+ }).get(0).checked = ace.settings.is('navbar', 'fixed')
124
+
125
+ $('#ace-settings-sidebar').on('click', function(){
126
+ ace.settings.sidebar_fixed(this.checked);//@ ace-extra.js
127
+ }).get(0).checked = ace.settings.is('sidebar', 'fixed')
128
+
129
+ $('#ace-settings-breadcrumbs').on('click', function(){
130
+ ace.settings.breadcrumbs_fixed(this.checked);//@ ace-extra.js
131
+ }).get(0).checked = ace.settings.is('breadcrumbs', 'fixed')
132
+
133
+
134
+ //Switching to RTL (right to left) Mode
135
+ $('#ace-settings-rtl').removeAttr('checked').on('click', function(){
136
+ ace.switch_direction(jQuery);
137
+ });
138
+
139
+
140
+ $('#btn-scroll-up').on(ace.click_event, function(){
141
+ var duration = Math.max(100, parseInt($('html').scrollTop() / 3));
142
+ $('html,body').animate({scrollTop: 0}, duration);
143
+ return false;
144
+ });
145
+
146
+ try {
147
+ $('#skin-colorpicker').ace_colorpicker();
148
+ } catch(e) {}
149
+
150
+ $('#skin-colorpicker').on('change', function(){
151
+ var skin_class = $(this).find('option:selected').data('skin');
152
+
153
+ var body = $(document.body);
154
+ body.removeClass('skin-1 skin-2 skin-3');
155
+
156
+
157
+ if(skin_class != 'default') body.addClass(skin_class);
158
+
159
+ if(skin_class == 'skin-1') {
160
+ $('.ace-nav > li.grey').addClass('dark');
161
+ }
162
+ else {
163
+ $('.ace-nav > li.grey').removeClass('dark');
164
+ }
165
+
166
+ if(skin_class == 'skin-2') {
167
+ $('.ace-nav > li').addClass('no-border margin-1');
168
+ $('.ace-nav > li:not(:last-child)').addClass('light-pink').find('> a > [class*="icon-"]').addClass('pink').end().eq(0).find('.badge').addClass('badge-warning');
169
+ }
170
+ else {
171
+ $('.ace-nav > li').removeClass('no-border margin-1');
172
+ $('.ace-nav > li:not(:last-child)').removeClass('light-pink').find('> a > [class*="icon-"]').removeClass('pink').end().eq(0).find('.badge').removeClass('badge-warning');
173
+ }
174
+
175
+ if(skin_class == 'skin-3') {
176
+ $('.ace-nav > li.grey').addClass('red').find('.badge').addClass('badge-yellow');
177
+ } else {
178
+ $('.ace-nav > li.grey').removeClass('red').find('.badge').removeClass('badge-yellow');
179
+ }
180
+ });
181
+
182
+ }
183
+
184
+
185
+
186
+ ace.widget_boxes = function($) {
187
+ $('.page-content,#page-content').delegate('.widget-toolbar > [data-action]' , 'click', function(ev) {
188
+ ev.preventDefault();
189
+
190
+ var $this = $(this);
191
+ var $action = $this.data('action');
192
+ var $box = $this.closest('.widget-box');
193
+
194
+ if($box.hasClass('ui-sortable-helper')) return;
195
+
196
+ if($action == 'collapse') {
197
+ var $body = $box.find('.widget-body');
198
+ var $icon = $this.find('[class*=icon-]').eq(0);
199
+ var $match = $icon.attr('class').match(/icon\-(.*)\-(up|down)/);
200
+ var $icon_down = 'icon-'+$match[1]+'-down';
201
+ var $icon_up = 'icon-'+$match[1]+'-up';
202
+
203
+ var $body_inner = $body.find('.widget-body-inner')
204
+ if($body_inner.length == 0) {
205
+ $body = $body.wrapInner('<div class="widget-body-inner"></div>').find(':first-child').eq(0);
206
+ } else $body = $body_inner.eq(0);
207
+
208
+
209
+ var expandSpeed = 300;
210
+ var collapseSpeed = 200;
211
+
212
+ if($box.hasClass('collapsed')) {
213
+ if($icon) $icon.addClass($icon_up).removeClass($icon_down);
214
+ $box.removeClass('collapsed');
215
+ $body.slideUp(0 , function(){$body.slideDown(expandSpeed)});
216
+ }
217
+ else {
218
+ if($icon) $icon.addClass($icon_down).removeClass($icon_up);
219
+ $body.slideUp(collapseSpeed, function(){$box.addClass('collapsed')});
220
+ }
221
+ }
222
+ else if($action == 'close') {
223
+ var closeSpeed = parseInt($this.data('close-speed')) || 300;
224
+ $box.hide(closeSpeed , function(){$box.remove()});
225
+ }
226
+ else if($action == 'reload') {
227
+ $this.blur();
228
+
229
+ var $remove = false;
230
+ if($box.css('position') == 'static') {$remove = true; $box.addClass('position-relative');}
231
+ $box.append('<div class="widget-box-layer"><i class="icon-spinner icon-spin icon-2x white"></i></div>');
232
+ setTimeout(function(){
233
+ $box.find('.widget-box-layer').remove();
234
+ if($remove) $box.removeClass('position-relative');
235
+ }, parseInt(Math.random() * 1000 + 1000));
236
+ }
237
+ else if($action == 'settings') {
238
+
239
+ }
240
+
241
+ });
242
+ }
243
+
244
+
245
+
246
+ //search box's dropdown autocomplete
247
+ ace.enable_search_ahead = function($) {
248
+ ace.variable_US_STATES = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"],
249
+ $('#nav-search-input').typeahead({
250
+ source: ace.variable_US_STATES,
251
+ updater:function (item) {
252
+ $('#nav-search-input').focus();
253
+ return item;
254
+ }
255
+ });
256
+ }
257
+
258
+
259
+
260
+ ace.switch_direction = function($) {
261
+ var $body = $(document.body);
262
+ $body
263
+ .toggleClass('rtl')
264
+ //toggle pull-right class on dropdown-menu
265
+ .find('.dropdown-menu:not(.datepicker-dropdown,.colorpicker)').toggleClass('pull-right')
266
+ .end()
267
+ //swap pull-left & pull-right
268
+ .find('.pull-right:not(.dropdown-menu,blockquote,.dropdown-submenu,.profile-skills .pull-right,.control-group .controls > [class*="span"]:first-child)').removeClass('pull-right').addClass('tmp-rtl-pull-right')
269
+ .end()
270
+ .find('.pull-left:not(.dropdown-submenu,.profile-skills .pull-left)').removeClass('pull-left').addClass('pull-right')
271
+ .end()
272
+ .find('.tmp-rtl-pull-right').removeClass('tmp-rtl-pull-right').addClass('pull-left')
273
+ .end()
274
+
275
+ .find('.chosen-container').toggleClass('chosen-rtl')
276
+ .end()
277
+
278
+ .find('.control-group .controls > [class*="span"]:first-child').toggleClass('pull-right')
279
+ .end()
280
+
281
+ function swap_classes(class1, class2) {
282
+ $body
283
+ .find('.'+class1).removeClass(class1).addClass('tmp-rtl-'+class1)
284
+ .end()
285
+ .find('.'+class2).removeClass(class2).addClass(class1)
286
+ .end()
287
+ .find('.tmp-rtl-'+class1).removeClass('tmp-rtl-'+class1).addClass(class2)
288
+ }
289
+ function swap_styles(style1, style2, elements) {
290
+ elements.each(function(){
291
+ var e = $(this);
292
+ var tmp = e.css(style2);
293
+ e.css(style2 , e.css(style1));
294
+ e.css(style1 , tmp);
295
+ });
296
+ }
297
+
298
+ swap_classes('align-left', 'align-right');
299
+ swap_classes('arrowed', 'arrowed-right');
300
+ swap_classes('arrowed-in', 'arrowed-in-right');
301
+ swap_classes('messagebar-item-left', 'messagebar-item-right');//for inbox page
302
+
303
+
304
+ //redraw the traffic pie chart on homepage with a different parameter
305
+ var placeholder = $('#piechart-placeholder');
306
+ if(placeholder.size() > 0) {
307
+ var pos = $(document.body).hasClass('rtl') ? 'nw' : 'ne';//draw on north-west or north-east?
308
+ placeholder.data('draw').call(placeholder.get(0) , placeholder, placeholder.data('chart'), pos);
309
+ }
310
+ }