tjadmin 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
+ }