lol_framework 0.1.0

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 (68) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +4 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +30 -0
  6. data/Rakefile +1 -0
  7. data/lib/generators/lol_framework/setup/lol_framework.rb +27 -0
  8. data/lib/generators/lol_framework/setup/setup_generator.rb +17 -0
  9. data/lib/lol_framework.rb +8 -0
  10. data/lib/lol_framework/common.rb +20 -0
  11. data/lib/lol_framework/config.rb +17 -0
  12. data/lib/lol_framework/config/components.rb +16 -0
  13. data/lib/lol_framework/config/components/css.rb +44 -0
  14. data/lib/lol_framework/config/components/js.rb +75 -0
  15. data/lib/lol_framework/railtie.rb +14 -0
  16. data/lib/lol_framework/version.rb +3 -0
  17. data/lol_framework.gemspec +28 -0
  18. data/spec/lol_framework/config/components/css_spec.rb +5 -0
  19. data/spec/lol_framework/config/components/js_spec.rb +11 -0
  20. data/spec/lol_framework/config/components_spec.rb +24 -0
  21. data/spec/lol_framework/config_spec.rb +19 -0
  22. data/spec/lol_framework/lol_framework_spec.rb +13 -0
  23. data/spec/spec_helper.rb +20 -0
  24. data/vendor/assets/images/lol_framework/datatable/sorting_bg.png +0 -0
  25. data/vendor/assets/images/lol_framework/glyphicons-lol-origin-white.png +0 -0
  26. data/vendor/assets/images/lol_framework/glyphicons-lol-origin.png +0 -0
  27. data/vendor/assets/images/lol_framework/glyphicons-lol.png +0 -0
  28. data/vendor/assets/javascripts/.gitkeep +0 -0
  29. data/vendor/assets/javascripts/Jasmine/jasmine-html.js +616 -0
  30. data/vendor/assets/javascripts/Jasmine/jasmine.js +2529 -0
  31. data/vendor/assets/javascripts/lol.js +18 -0
  32. data/vendor/assets/javascripts/lol_framework/Ajax.coffee +183 -0
  33. data/vendor/assets/javascripts/lol_framework/Alert.coffee +113 -0
  34. data/vendor/assets/javascripts/lol_framework/Button.coffee +268 -0
  35. data/vendor/assets/javascripts/lol_framework/Core.coffee +85 -0
  36. data/vendor/assets/javascripts/lol_framework/Datatable.coffee +340 -0
  37. data/vendor/assets/javascripts/lol_framework/Date.coffee +0 -0
  38. data/vendor/assets/javascripts/lol_framework/Debug.coffee +45 -0
  39. data/vendor/assets/javascripts/lol_framework/I18n.coffee +81 -0
  40. data/vendor/assets/javascripts/lol_framework/Lang/en-us.coffee +54 -0
  41. data/vendor/assets/javascripts/lol_framework/Lang/pt-br.coffee +57 -0
  42. data/vendor/assets/javascripts/lol_framework/Library/date-functions.js +409 -0
  43. data/vendor/assets/javascripts/lol_framework/Library/jquery.dataTables.min.js +157 -0
  44. data/vendor/assets/javascripts/lol_framework/Library/jquery.mobile.js +14 -0
  45. data/vendor/assets/javascripts/lol_framework/Loader.coffee +83 -0
  46. data/vendor/assets/javascripts/lol_framework/Lol.coffee +4 -0
  47. data/vendor/assets/javascripts/lol_framework/Modal.coffee +221 -0
  48. data/vendor/assets/javascripts/lol_framework/Model.coffee +71 -0
  49. data/vendor/assets/javascripts/lol_framework/Model/Rest.coffee +15 -0
  50. data/vendor/assets/javascripts/lol_framework/Tests/Alert.coffee +83 -0
  51. data/vendor/assets/javascripts/lol_framework/Tests/Core.coffee +35 -0
  52. data/vendor/assets/javascripts/lol_framework/Tests/Debug.coffee +14 -0
  53. data/vendor/assets/javascripts/lol_framework/Tests/I18n.coffee +7 -0
  54. data/vendor/assets/javascripts/lol_framework/Tests/Lang.coffee +130 -0
  55. data/vendor/assets/javascripts/lol_framework/Tests/Library.coffee +13 -0
  56. data/vendor/assets/javascripts/lol_framework/Tests/Lol.coffee +4 -0
  57. data/vendor/assets/javascripts/lol_framework/Tests/Utils.coffee +22 -0
  58. data/vendor/assets/javascripts/lol_framework/Utils.coffee +42 -0
  59. data/vendor/assets/javascripts/lol_main_tests.js +43 -0
  60. data/vendor/assets/stylesheets/.gitkeep +0 -0
  61. data/vendor/assets/stylesheets/jasmine.css +81 -0
  62. data/vendor/assets/stylesheets/lol_framework/_mixin.scss +650 -0
  63. data/vendor/assets/stylesheets/lol_framework/_variable.scss +107 -0
  64. data/vendor/assets/stylesheets/lol_framework/components/_alert.scss +46 -0
  65. data/vendor/assets/stylesheets/lol_framework/components/_datatable.scss +172 -0
  66. data/vendor/assets/stylesheets/lol_framework/components/_loader.scss +15 -0
  67. data/vendor/assets/stylesheets/lol_framework/components/_modal.scss +68 -0
  68. metadata +222 -0
@@ -0,0 +1,81 @@
1
+ ###
2
+ @summary Lol Framework
3
+ @description Framework of RIAs applications
4
+ @version 1.0.0
5
+ @file Ajax.js
6
+ @author Welington Sampaio (http://welington.zaez.net/)
7
+ @contact http://welington.zaez.net/site/contato
8
+
9
+ @copyright Copyright 2012 Welington Sampaio, all rights reserved.
10
+
11
+ This source file is free software, under the license MIT, available at:
12
+ http://lolframework.zaez.net/license
13
+
14
+ This source file is distributed in the hope that it will be useful, but
15
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16
+ or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
17
+
18
+ For details please refer to: http://welington.zaez.net
19
+ ###
20
+
21
+ ###
22
+ Create a new instance of I18n.
23
+
24
+ @classDescription This class creates a new I18n.
25
+ @param {Object} Receives configuration to create the I18n
26
+ @return {I18n}    Returns a new I18n.
27
+ @type {Object}
28
+ ###
29
+ class Lol.I18n
30
+ # the methods
31
+ constructor: ->
32
+ throw 'Required jQuery library' if jQuery == undefined
33
+ Lol.I18n.language = if not navigator.language then 'en-us' else new String(navigator.language).toLowerCase()
34
+ @tDate()
35
+ tDate: ->
36
+ Date.monthNames =
37
+ [
38
+ Lol.t "date_months_january"
39
+ Lol.t "date_months_february"
40
+ Lol.t "date_months_march"
41
+ Lol.t "date_months_april"
42
+ Lol.t "date_months_may"
43
+ Lol.t "date_months_june"
44
+ Lol.t "date_months_july"
45
+ Lol.t "date_months_august"
46
+ Lol.t "date_months_september"
47
+ Lol.t "date_months_october"
48
+ Lol.t "date_months_november"
49
+ Lol.t "date_months_december"
50
+ ]
51
+ Date.dayNames =
52
+ [
53
+ Lol.t "date_days_sunday"
54
+ Lol.t "date_days_monday"
55
+ Lol.t "date_days_tuesday"
56
+ Lol.t "date_days_wednesday"
57
+ Lol.t "date_days_thursday"
58
+ Lol.t "date_days_friday"
59
+ Lol.t "date_days_saturday"
60
+ ]
61
+ ###
62
+ Method translation framework
63
+ @param {String}
64
+ ###
65
+ @translate: (name)->
66
+ return Lol.i18n[Lol.I18n.language][name] if Lol.i18n[Lol.I18n.language].hasOwnProperty(name)
67
+ return name
68
+
69
+ ###
70
+ Method translation framework
71
+ @see Lol.I18n.tralate
72
+ @param {String}
73
+ @example
74
+ *-* translating *-*
75
+ var january = Lol.t('date_months_january'); // January
76
+ ###
77
+ Lol.t = (name)->
78
+ return Lol.I18n.translate(name)
79
+
80
+ ## Initializing the Lol.I18n
81
+ new Lol.I18n()
@@ -0,0 +1,54 @@
1
+ Lol.i18n = Lol.i18n || {}
2
+ Lol.i18n['en-us'] =
3
+ # Commom
4
+ search: 'search'
5
+ #buttons names
6
+ OK : 'OK'
7
+ CANCEL: 'CANCEL'
8
+ YES : 'YES'
9
+ NO : 'NO'
10
+ # Datatable
11
+ datatable_oAria_sSortAscending : ": activate to sort column ascending"
12
+ datatable_oAria_sSortDescending: ": activate to sort column descending"
13
+ datatable_oPaginate_sFirst : "First"
14
+ datatable_oPaginate_sLast : "Last"
15
+ datatable_oPaginate_sNext : "Next"
16
+ datatable_oPaginate_sPrevious: "Previous"
17
+ datatable_sEmptyTable : "No data available in table"
18
+ datatable_sInfo : "Showing _START_ to _END_ of _TOTAL_ entries"
19
+ datatable_sInfoEmpty : "Showing 0 to 0 of 0 entries"
20
+ datatable_sInfoFiltered : "(filtered from _MAX_ total entries)"
21
+ datatable_sInfoPostFix : ""
22
+ datatable_sInfoThousands : ","
23
+ datatable_sLengthMenu : "Show _MENU_ entries"
24
+ datatable_sLoadingRecords: "Loading..."
25
+ datatable_sProcessing : "Processing..."
26
+ datatable_sSearch : "<i class='icon-search'></i>"
27
+ datatable_search : "search..."
28
+ datatable_sUrl : ""
29
+ datatable_sZeroRecords : "No matching records found"
30
+ datatable_view : 'view'
31
+ datatable_edit : 'edit'
32
+ datatable_delete : 'delete'
33
+ datatable_confirm_delete : 'Are you sure you want to delete this record?<br />This operation can not be undone.'
34
+ datatable_confirm_delete_title : 'Lol Framework'
35
+ # Date Object
36
+ date_months_january : 'January'
37
+ date_months_february : 'February'
38
+ date_months_march : 'March'
39
+ date_months_april : 'April'
40
+ date_months_may : 'May'
41
+ date_months_june : 'June'
42
+ date_months_july : 'July'
43
+ date_months_august : 'August'
44
+ date_months_september : 'September'
45
+ date_months_october : 'October'
46
+ date_months_november : 'November'
47
+ date_months_december : 'December'
48
+ date_days_sunday : 'Sunday'
49
+ date_days_monday : 'Monday'
50
+ date_days_tuesday : 'Tuesday'
51
+ date_days_wednesday : 'Wednesday'
52
+ date_days_thursday : 'Thursday'
53
+ date_days_friday : 'Friday'
54
+ date_days_saturday : 'Saturday'
@@ -0,0 +1,57 @@
1
+ Lol.i18n = Lol.i18n || {}
2
+ Lol.i18n['pt-br'] =
3
+ #Common
4
+ search : 'pesquisa'
5
+ #buttons names
6
+ OK : 'OK'
7
+ CANCEL: 'CANCELAR'
8
+ YES : 'SIM'
9
+ NO : 'NÃO'
10
+ # Datatable
11
+ datatable_oAria_sSortAscending : ": ativar para classificar coluna ascendente"
12
+ datatable_oAria_sSortDescending: ": ativar para classificar coluna descendente"
13
+ datatable_oPaginate_sFirst : "Primeiro"
14
+ datatable_oPaginate_sLast : "Último"
15
+ datatable_oPaginate_sNext : "Seguinte"
16
+ datatable_oPaginate_sPrevious: "Anterior"
17
+ datatable_sEmptyTable : "Não há dados disponíveis na tabela"
18
+ datatable_sInfo : "Mostrando de _START_ até _END_ de _TOTAL_ registros"
19
+ datatable_sInfoEmpty : "Mostrando de 0 até 0 de 0 registros"
20
+ datatable_sInfoFiltered : "(filtrado de _MAX_ registros no total)"
21
+ datatable_sInfoPostFix : ""
22
+ datatable_sInfoThousands : ","
23
+ datatable_sLengthMenu : "Mostrar _MENU_ registros"
24
+ datatable_sLoadingRecords: "Carregando..."
25
+ datatable_sProcessing : "Processando..."
26
+ datatable_sSearch : "<i class='icon-search'></i>"
27
+ datatable_search : "buscar"
28
+ datatable_sUrl : ""
29
+ datatable_sZeroRecords : "Não foram encontrados resultados"
30
+ datatable_view : 'visualizar'
31
+ datatable_edit : 'editar'
32
+ datatable_delete : 'remover'
33
+ datatable_confirm_delete : 'Você tem certeza que deseja excluir este registro?<br />Esta operação não poderá ser desfeita.'
34
+ datatable_confirm_delete_title : 'Lol Framework'
35
+ # Date Object
36
+ date_months_january : 'Janeiro'
37
+ date_months_february : 'Fevereiro'
38
+ date_months_march : 'Março'
39
+ date_months_april : 'Abril'
40
+ date_months_may : 'Maio'
41
+ date_months_june : 'Junho'
42
+ date_months_july : 'Julho'
43
+ date_months_august : 'Agosto'
44
+ date_months_september : 'Setembro'
45
+ date_months_october : 'Outubro'
46
+ date_months_november : 'Novembro'
47
+ date_months_december : 'Dezembro'
48
+ date_days_sunday : 'Domingo'
49
+ date_days_monday : 'Segunda'
50
+ date_days_tuesday : 'Terça'
51
+ date_days_wednesday : 'Quarta'
52
+ date_days_thursday : 'Quinta'
53
+ date_days_friday : 'Sexta'
54
+ date_days_saturday : 'Sábado'
55
+
56
+ ## Alias
57
+ Lol.i18n['pt'] = Lol.i18n['pt-br']
@@ -0,0 +1,409 @@
1
+ /*
2
+ * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
3
+ *
4
+ * This program is free software; you can redistribute it and/or modify it
5
+ * under the terms of the GNU Lesser General Public License as published by the
6
+ * Free Software Foundation, version 2.1.
7
+ *
8
+ * This program is distributed in the hope that it will be useful, but WITHOUT
9
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11
+ * details.
12
+ */
13
+
14
+ Date.parseFunctions = {count:0};
15
+ Date.parseRegexes = [];
16
+ Date.formatFunctions = {count:0};
17
+
18
+ Date.prototype.dateFormat = function(format) {
19
+ if (Date.formatFunctions[format] == null) {
20
+ Date.createNewFormat(format);
21
+ }
22
+ var func = Date.formatFunctions[format];
23
+ return this[func]();
24
+ }
25
+
26
+ Date.createNewFormat = function(format) {
27
+ var funcName = "format" + Date.formatFunctions.count++;
28
+ Date.formatFunctions[format] = funcName;
29
+ var code = "Date.prototype." + funcName + " = function(){return ";
30
+ var special = false;
31
+ var ch = '';
32
+ for (var i = 0; i < format.length; ++i) {
33
+ ch = format.charAt(i);
34
+ if (!special && ch == "\\") {
35
+ special = true;
36
+ }
37
+ else if (special) {
38
+ special = false;
39
+ code += "'" + String.escape(ch) + "' + ";
40
+ }
41
+ else {
42
+ code += Date.getFormatCode(ch);
43
+ }
44
+ }
45
+ eval(code.substring(0, code.length - 3) + ";}");
46
+ }
47
+
48
+ Date.getFormatCode = function(character) {
49
+ switch (character) {
50
+ case "d":
51
+ return "String.leftPad(this.getDate(), 2, '0') + ";
52
+ case "D":
53
+ return "Date.dayNames[this.getDay()].substring(0, 3) + ";
54
+ case "j":
55
+ return "this.getDate() + ";
56
+ case "l":
57
+ return "Date.dayNames[this.getDay()] + ";
58
+ case "S":
59
+ return "this.getSuffix() + ";
60
+ case "w":
61
+ return "this.getDay() + ";
62
+ case "z":
63
+ return "this.getDayOfYear() + ";
64
+ case "W":
65
+ return "this.getWeekOfYear() + ";
66
+ case "F":
67
+ return "Date.monthNames[this.getMonth()] + ";
68
+ case "m":
69
+ return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
70
+ case "M":
71
+ return "Date.monthNames[this.getMonth()].substring(0, 3) + ";
72
+ case "n":
73
+ return "(this.getMonth() + 1) + ";
74
+ case "t":
75
+ return "this.getDaysInMonth() + ";
76
+ case "L":
77
+ return "(this.isLeapYear() ? 1 : 0) + ";
78
+ case "Y":
79
+ return "this.getFullYear() + ";
80
+ case "y":
81
+ return "('' + this.getFullYear()).substring(2, 4) + ";
82
+ case "a":
83
+ return "(this.getHours() < 12 ? 'am' : 'pm') + ";
84
+ case "A":
85
+ return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
86
+ case "g":
87
+ return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";
88
+ case "G":
89
+ return "this.getHours() + ";
90
+ case "h":
91
+ return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";
92
+ case "H":
93
+ return "String.leftPad(this.getHours(), 2, '0') + ";
94
+ case "i":
95
+ return "String.leftPad(this.getMinutes(), 2, '0') + ";
96
+ case "s":
97
+ return "String.leftPad(this.getSeconds(), 2, '0') + ";
98
+ case "O":
99
+ return "this.getGMTOffset() + ";
100
+ case "T":
101
+ return "this.getTimezone() + ";
102
+ case "Z":
103
+ return "(this.getTimezoneOffset() * -60) + ";
104
+ default:
105
+ return "'" + String.escape(character) + "' + ";
106
+ }
107
+ }
108
+
109
+ Date.parseDate = function(input, format) {
110
+ if (Date.parseFunctions[format] == null) {
111
+ Date.createParser(format);
112
+ }
113
+ var func = Date.parseFunctions[format];
114
+ return Date[func](input);
115
+ }
116
+
117
+ Date.createParser = function(format) {
118
+ var funcName = "parse" + Date.parseFunctions.count++;
119
+ var regexNum = Date.parseRegexes.length;
120
+ var currentGroup = 1;
121
+ Date.parseFunctions[format] = funcName;
122
+
123
+ var code = "Date." + funcName + " = function(input){\n"
124
+ + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"
125
+ + "var d = new Date();\n"
126
+ + "y = d.getFullYear();\n"
127
+ + "m = d.getMonth();\n"
128
+ + "d = d.getDate();\n"
129
+ + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
130
+ + "if (results && results.length > 0) {"
131
+ var regex = "";
132
+
133
+ var special = false;
134
+ var ch = '';
135
+ for (var i = 0; i < format.length; ++i) {
136
+ ch = format.charAt(i);
137
+ if (!special && ch == "\\") {
138
+ special = true;
139
+ }
140
+ else if (special) {
141
+ special = false;
142
+ regex += String.escape(ch);
143
+ }
144
+ else {
145
+ obj = Date.formatCodeToRegex(ch, currentGroup);
146
+ currentGroup += obj.g;
147
+ regex += obj.s;
148
+ if (obj.g && obj.c) {
149
+ code += obj.c;
150
+ }
151
+ }
152
+ }
153
+
154
+ code += "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
155
+ + "{return new Date(y, m, d, h, i, s);}\n"
156
+ + "else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
157
+ + "{return new Date(y, m, d, h, i);}\n"
158
+ + "else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
159
+ + "{return new Date(y, m, d, h);}\n"
160
+ + "else if (y > 0 && m >= 0 && d > 0)\n"
161
+ + "{return new Date(y, m, d);}\n"
162
+ + "else if (y > 0 && m >= 0)\n"
163
+ + "{return new Date(y, m);}\n"
164
+ + "else if (y > 0)\n"
165
+ + "{return new Date(y);}\n"
166
+ + "}return null;}";
167
+
168
+ Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
169
+ eval(code);
170
+ }
171
+
172
+ Date.formatCodeToRegex = function(character, currentGroup) {
173
+ switch (character) {
174
+ case "D":
175
+ return {g:0,
176
+ c:null,
177
+ s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
178
+ case "j":
179
+ case "d":
180
+ return {g:1,
181
+ c:"d = parseInt(results[" + currentGroup + "], 10);\n",
182
+ s:"(\\d{1,2})"};
183
+ case "l":
184
+ return {g:0,
185
+ c:null,
186
+ s:"(?:" + Date.dayNames.join("|") + ")"};
187
+ case "S":
188
+ return {g:0,
189
+ c:null,
190
+ s:"(?:st|nd|rd|th)"};
191
+ case "w":
192
+ return {g:0,
193
+ c:null,
194
+ s:"\\d"};
195
+ case "z":
196
+ return {g:0,
197
+ c:null,
198
+ s:"(?:\\d{1,3})"};
199
+ case "W":
200
+ return {g:0,
201
+ c:null,
202
+ s:"(?:\\d{2})"};
203
+ case "F":
204
+ return {g:1,
205
+ c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "].substring(0, 3)], 10);\n",
206
+ s:"(" + Date.monthNames.join("|") + ")"};
207
+ case "M":
208
+ return {g:1,
209
+ c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n",
210
+ s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
211
+ case "n":
212
+ case "m":
213
+ return {g:1,
214
+ c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
215
+ s:"(\\d{1,2})"};
216
+ case "t":
217
+ return {g:0,
218
+ c:null,
219
+ s:"\\d{1,2}"};
220
+ case "L":
221
+ return {g:0,
222
+ c:null,
223
+ s:"(?:1|0)"};
224
+ case "Y":
225
+ return {g:1,
226
+ c:"y = parseInt(results[" + currentGroup + "], 10);\n",
227
+ s:"(\\d{4})"};
228
+ case "y":
229
+ return {g:1,
230
+ c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
231
+ + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
232
+ s:"(\\d{1,2})"};
233
+ case "a":
234
+ return {g:1,
235
+ c:"if (results[" + currentGroup + "] == 'am') {\n"
236
+ + "if (h == 12) { h = 0; }\n"
237
+ + "} else { if (h < 12) { h += 12; }}",
238
+ s:"(am|pm)"};
239
+ case "A":
240
+ return {g:1,
241
+ c:"if (results[" + currentGroup + "] == 'AM') {\n"
242
+ + "if (h == 12) { h = 0; }\n"
243
+ + "} else { if (h < 12) { h += 12; }}",
244
+ s:"(AM|PM)"};
245
+ case "g":
246
+ case "G":
247
+ case "h":
248
+ case "H":
249
+ return {g:1,
250
+ c:"h = parseInt(results[" + currentGroup + "], 10);\n",
251
+ s:"(\\d{1,2})"};
252
+ case "i":
253
+ return {g:1,
254
+ c:"i = parseInt(results[" + currentGroup + "], 10);\n",
255
+ s:"(\\d{2})"};
256
+ case "s":
257
+ return {g:1,
258
+ c:"s = parseInt(results[" + currentGroup + "], 10);\n",
259
+ s:"(\\d{2})"};
260
+ case "O":
261
+ return {g:0,
262
+ c:null,
263
+ s:"[+-]\\d{4}"};
264
+ case "T":
265
+ return {g:0,
266
+ c:null,
267
+ s:"[A-Z]{3}"};
268
+ case "Z":
269
+ return {g:0,
270
+ c:null,
271
+ s:"[+-]\\d{1,5}"};
272
+ default:
273
+ return {g:0,
274
+ c:null,
275
+ s:String.escape(character)};
276
+ }
277
+ }
278
+
279
+ Date.prototype.getTimezone = function() {
280
+ return this.toString().replace(
281
+ /^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
282
+ /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
283
+ }
284
+
285
+ Date.prototype.getGMTOffset = function() {
286
+ return (this.getTimezoneOffset() > 0 ? "-" : "+")
287
+ + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
288
+ + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
289
+ }
290
+
291
+ Date.prototype.getDayOfYear = function() {
292
+ var num = 0;
293
+ Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
294
+ for (var i = 0; i < this.getMonth(); ++i) {
295
+ num += Date.daysInMonth[i];
296
+ }
297
+ return num + this.getDate() - 1;
298
+ }
299
+
300
+ Date.prototype.getWeekOfYear = function() {
301
+ // Skip to Thursday of this week
302
+ var now = this.getDayOfYear() + (4 - this.getDay());
303
+ // Find the first Thursday of the year
304
+ var jan1 = new Date(this.getFullYear(), 0, 1);
305
+ var then = (7 - jan1.getDay() + 4);
306
+ document.write(then);
307
+ return String.leftPad(((now - then) / 7) + 1, 2, "0");
308
+ }
309
+
310
+ Date.prototype.isLeapYear = function() {
311
+ var year = this.getFullYear();
312
+ return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
313
+ }
314
+
315
+ Date.prototype.getFirstDayOfMonth = function() {
316
+ var day = (this.getDay() - (this.getDate() - 1)) % 7;
317
+ return (day < 0) ? (day + 7) : day;
318
+ }
319
+
320
+ Date.prototype.getLastDayOfMonth = function() {
321
+ var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
322
+ return (day < 0) ? (day + 7) : day;
323
+ }
324
+
325
+ Date.prototype.getDaysInMonth = function() {
326
+ Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
327
+ return Date.daysInMonth[this.getMonth()];
328
+ }
329
+
330
+ Date.prototype.getSuffix = function() {
331
+ switch (this.getDate()) {
332
+ case 1:
333
+ case 21:
334
+ case 31:
335
+ return "st";
336
+ case 2:
337
+ case 22:
338
+ return "nd";
339
+ case 3:
340
+ case 23:
341
+ return "rd";
342
+ default:
343
+ return "th";
344
+ }
345
+ }
346
+
347
+ String.escape = function(string) {
348
+ return string.replace(/('|\\)/g, "\\$1");
349
+ }
350
+
351
+ String.leftPad = function (val, size, ch) {
352
+ var result = new String(val);
353
+ if (ch == null) {
354
+ ch = " ";
355
+ }
356
+ while (result.length < size) {
357
+ result = ch + result;
358
+ }
359
+ return result;
360
+ }
361
+
362
+ Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
363
+ Date.monthNames =
364
+ ["January",
365
+ "February",
366
+ "March",
367
+ "April",
368
+ "May",
369
+ "June",
370
+ "July",
371
+ "August",
372
+ "September",
373
+ "October",
374
+ "November",
375
+ "December"];
376
+ Date.dayNames =
377
+ ["Sunday",
378
+ "Monday",
379
+ "Tuesday",
380
+ "Wednesday",
381
+ "Thursday",
382
+ "Friday",
383
+ "Saturday"];
384
+ Date.y2kYear = 50;
385
+ Date.monthNumbers = {
386
+ Jan:0,
387
+ Feb:1,
388
+ Mar:2,
389
+ Apr:3,
390
+ May:4,
391
+ Jun:5,
392
+ Jul:6,
393
+ Aug:7,
394
+ Sep:8,
395
+ Oct:9,
396
+ Nov:10,
397
+ Dec:11};
398
+ Date.patterns = {
399
+ ISO8601LongPattern:"Y-m-d H:i:s",
400
+ ISO8601ShortPattern:"Y-m-d",
401
+ ShortDatePattern: "n/j/Y",
402
+ LongDatePattern: "l, F d, Y",
403
+ FullDateTimePattern: "l, F d, Y g:i:s A",
404
+ MonthDayPattern: "F d",
405
+ ShortTimePattern: "g:i A",
406
+ LongTimePattern: "g:i:s A",
407
+ SortableDateTimePattern: "Y-m-d\\TH:i:s",
408
+ UniversalSortableDateTimePattern: "Y-m-d H:i:sO",
409
+ YearMonthPattern: "F, Y"};