scratch – Blame information for rev 75

Subversion Repositories:
Rev:
Rev Author Line No. Line
75 office 1 // Generated by CoffeeScript 1.10.0
2 var Pattern, Utils;
3  
4 Pattern = require('./Pattern');
5  
6 Utils = (function() {
7 function Utils() {}
8  
9 Utils.REGEX_LEFT_TRIM_BY_CHAR = {};
10  
11 Utils.REGEX_RIGHT_TRIM_BY_CHAR = {};
12  
13 Utils.REGEX_SPACES = /\s+/g;
14  
15 Utils.REGEX_DIGITS = /^\d+$/;
16  
17 Utils.REGEX_OCTAL = /[^0-7]/gi;
18  
19 Utils.REGEX_HEXADECIMAL = /[^a-f0-9]/gi;
20  
21 Utils.PATTERN_DATE = new Pattern('^' + '(?<year>[0-9][0-9][0-9][0-9])' + '-(?<month>[0-9][0-9]?)' + '-(?<day>[0-9][0-9]?)' + '(?:(?:[Tt]|[ \t]+)' + '(?<hour>[0-9][0-9]?)' + ':(?<minute>[0-9][0-9])' + ':(?<second>[0-9][0-9])' + '(?:\.(?<fraction>[0-9]*))?' + '(?:[ \t]*(?<tz>Z|(?<tz_sign>[-+])(?<tz_hour>[0-9][0-9]?)' + '(?::(?<tz_minute>[0-9][0-9]))?))?)?' + '$', 'i');
22  
23 Utils.LOCAL_TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000;
24  
25 Utils.trim = function(str, _char) {
26 var regexLeft, regexRight;
27 if (_char == null) {
28 _char = '\\s';
29 }
30 return str.trim();
31 regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char];
32 if (regexLeft == null) {
33 this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*');
34 }
35 regexLeft.lastIndex = 0;
36 regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char];
37 if (regexRight == null) {
38 this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$');
39 }
40 regexRight.lastIndex = 0;
41 return str.replace(regexLeft, '').replace(regexRight, '');
42 };
43  
44 Utils.ltrim = function(str, _char) {
45 var regexLeft;
46 if (_char == null) {
47 _char = '\\s';
48 }
49 regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char];
50 if (regexLeft == null) {
51 this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*');
52 }
53 regexLeft.lastIndex = 0;
54 return str.replace(regexLeft, '');
55 };
56  
57 Utils.rtrim = function(str, _char) {
58 var regexRight;
59 if (_char == null) {
60 _char = '\\s';
61 }
62 regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char];
63 if (regexRight == null) {
64 this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$');
65 }
66 regexRight.lastIndex = 0;
67 return str.replace(regexRight, '');
68 };
69  
70 Utils.isEmpty = function(value) {
71 return !value || value === '' || value === '0' || (value instanceof Array && value.length === 0);
72 };
73  
74 Utils.subStrCount = function(string, subString, start, length) {
75 var c, i, j, len, ref, sublen;
76 c = 0;
77 string = '' + string;
78 subString = '' + subString;
79 if (start != null) {
80 string = string.slice(start);
81 }
82 if (length != null) {
83 string = string.slice(0, length);
84 }
85 len = string.length;
86 sublen = subString.length;
87 for (i = j = 0, ref = len; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
88 if (subString === string.slice(i, sublen)) {
89 c++;
90 i += sublen - 1;
91 }
92 }
93 return c;
94 };
95  
96 Utils.isDigits = function(input) {
97 this.REGEX_DIGITS.lastIndex = 0;
98 return this.REGEX_DIGITS.test(input);
99 };
100  
101 Utils.octDec = function(input) {
102 this.REGEX_OCTAL.lastIndex = 0;
103 return parseInt((input + '').replace(this.REGEX_OCTAL, ''), 8);
104 };
105  
106 Utils.hexDec = function(input) {
107 this.REGEX_HEXADECIMAL.lastIndex = 0;
108 input = this.trim(input);
109 if ((input + '').slice(0, 2) === '0x') {
110 input = (input + '').slice(2);
111 }
112 return parseInt((input + '').replace(this.REGEX_HEXADECIMAL, ''), 16);
113 };
114  
115 Utils.utf8chr = function(c) {
116 var ch;
117 ch = String.fromCharCode;
118 if (0x80 > (c %= 0x200000)) {
119 return ch(c);
120 }
121 if (0x800 > c) {
122 return ch(0xC0 | c >> 6) + ch(0x80 | c & 0x3F);
123 }
124 if (0x10000 > c) {
125 return ch(0xE0 | c >> 12) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F);
126 }
127 return ch(0xF0 | c >> 18) + ch(0x80 | c >> 12 & 0x3F) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F);
128 };
129  
130 Utils.parseBoolean = function(input, strict) {
131 var lowerInput;
132 if (strict == null) {
133 strict = true;
134 }
135 if (typeof input === 'string') {
136 lowerInput = input.toLowerCase();
137 if (!strict) {
138 if (lowerInput === 'no') {
139 return false;
140 }
141 }
142 if (lowerInput === '0') {
143 return false;
144 }
145 if (lowerInput === 'false') {
146 return false;
147 }
148 if (lowerInput === '') {
149 return false;
150 }
151 return true;
152 }
153 return !!input;
154 };
155  
156 Utils.isNumeric = function(input) {
157 this.REGEX_SPACES.lastIndex = 0;
158 return typeof input === 'number' || typeof input === 'string' && !isNaN(input) && input.replace(this.REGEX_SPACES, '') !== '';
159 };
160  
161 Utils.stringToDate = function(str) {
162 var date, day, fraction, hour, info, minute, month, second, tz_hour, tz_minute, tz_offset, year;
163 if (!(str != null ? str.length : void 0)) {
164 return null;
165 }
166 info = this.PATTERN_DATE.exec(str);
167 if (!info) {
168 return null;
169 }
170 year = parseInt(info.year, 10);
171 month = parseInt(info.month, 10) - 1;
172 day = parseInt(info.day, 10);
173 if (info.hour == null) {
174 date = new Date(Date.UTC(year, month, day));
175 return date;
176 }
177 hour = parseInt(info.hour, 10);
178 minute = parseInt(info.minute, 10);
179 second = parseInt(info.second, 10);
180 if (info.fraction != null) {
181 fraction = info.fraction.slice(0, 3);
182 while (fraction.length < 3) {
183 fraction += '0';
184 }
185 fraction = parseInt(fraction, 10);
186 } else {
187 fraction = 0;
188 }
189 if (info.tz != null) {
190 tz_hour = parseInt(info.tz_hour, 10);
191 if (info.tz_minute != null) {
192 tz_minute = parseInt(info.tz_minute, 10);
193 } else {
194 tz_minute = 0;
195 }
196 tz_offset = (tz_hour * 60 + tz_minute) * 60000;
197 if ('-' === info.tz_sign) {
198 tz_offset *= -1;
199 }
200 }
201 date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
202 if (tz_offset) {
203 date.setTime(date.getTime() + tz_offset);
204 }
205 return date;
206 };
207  
208 Utils.strRepeat = function(str, number) {
209 var i, res;
210 res = '';
211 i = 0;
212 while (i < number) {
213 res += str;
214 i++;
215 }
216 return res;
217 };
218  
219 Utils.getStringFromFile = function(path, callback) {
220 var data, fs, j, len1, name, ref, req, xhr;
221 if (callback == null) {
222 callback = null;
223 }
224 xhr = null;
225 if (typeof window !== "undefined" && window !== null) {
226 if (window.XMLHttpRequest) {
227 xhr = new XMLHttpRequest();
228 } else if (window.ActiveXObject) {
229 ref = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
230 for (j = 0, len1 = ref.length; j < len1; j++) {
231 name = ref[j];
232 try {
233 xhr = new ActiveXObject(name);
234 } catch (undefined) {}
235 }
236 }
237 }
238 if (xhr != null) {
239 if (callback != null) {
240 xhr.onreadystatechange = function() {
241 if (xhr.readyState === 4) {
242 if (xhr.status === 200 || xhr.status === 0) {
243 return callback(xhr.responseText);
244 } else {
245 return callback(null);
246 }
247 }
248 };
249 xhr.open('GET', path, true);
250 return xhr.send(null);
251 } else {
252 xhr.open('GET', path, false);
253 xhr.send(null);
254 if (xhr.status === 200 || xhr.status === 0) {
255 return xhr.responseText;
256 }
257 return null;
258 }
259 } else {
260 req = require;
261 fs = req('fs');
262 if (callback != null) {
263 return fs.readFile(path, function(err, data) {
264 if (err) {
265 return callback(null);
266 } else {
267 return callback(String(data));
268 }
269 });
270 } else {
271 data = fs.readFileSync(path);
272 if (data != null) {
273 return String(data);
274 }
275 return null;
276 }
277 }
278 };
279  
280 return Utils;
281  
282 })();
283  
284 module.exports = Utils;