mochiscript 0.4.6.pre4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mochiscript/core.rb +197 -227
- data/lib/mochiscript/version.rb +1 -1
- data/vendor/assets/javascripts/mochiscript.js +143 -182
- metadata +46 -40
data/lib/mochiscript/core.rb
CHANGED
@@ -222,24 +222,6 @@ var JS2 = $m;
|
|
222
222
|
events[type].push(listener);
|
223
223
|
}
|
224
224
|
|
225
|
-
$m.EventEmitter = $m.Module.extend({
|
226
|
-
emit: function () {
|
227
|
-
// TODO optimize
|
228
|
-
var type = arguments[0];
|
229
|
-
var events = this.__$events || (this.__$events = {});
|
230
|
-
var handlers = events[type];
|
231
|
-
|
232
|
-
if (!handlers) return false;
|
233
|
-
|
234
|
-
var args = [];
|
235
|
-
for (var i=1,len=arguments.length; i<len; i++) args[i-1] = arguments[i];
|
236
|
-
for (var i=0,len=handlers.length; i<len; i++) handlers[i].apply(this, args);
|
237
|
-
},
|
238
|
-
|
239
|
-
addListener: addListener,
|
240
|
-
on: addListener
|
241
|
-
});
|
242
|
-
|
243
225
|
$m.out = function () {
|
244
226
|
for (var i=0,arg=null,_list_0=arguments,_len_0=_list_0.length;(arg=_list_0[i])||i<_len_0;i++){
|
245
227
|
$m.ADAPTER.out(arg);
|
@@ -259,216 +241,196 @@ var JS2 = $m;
|
|
259
241
|
})(undefined, $m);
|
260
242
|
|
261
243
|
|
262
|
-
$m.Class.extend("
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
OO.addMember("initialize", function(txt){var self=this;
|
268
|
-
var lines = txt.split(/\n/);
|
269
|
-
this.root = new $c.JSMLElement();
|
270
|
-
this.stack = [ this.root ];
|
244
|
+
$m.Class.extend("EventEmitter", function(KLASS, OO){
|
245
|
+
|
246
|
+
this._maxListeners = 10;
|
247
|
+
var isArray = Array.isArray;
|
248
|
+
|
271
249
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
250
|
+
OO.addMember("emit", function(){
|
251
|
+
var type = arguments[0];
|
252
|
+
// If there is no 'error' event listener then throw.
|
253
|
+
if (type === 'error') {
|
254
|
+
if (!this._events || !this._events.error ||
|
255
|
+
(isArray(this._events.error) && !this._events.error.length))
|
256
|
+
{
|
257
|
+
if (arguments[1] instanceof Error) {
|
258
|
+
throw arguments[1]; // Unhandled 'error' event
|
259
|
+
} else {
|
260
|
+
throw new Error("Uncaught, unspecified 'error' event.");
|
261
|
+
}
|
262
|
+
return false;
|
263
|
+
}
|
276
264
|
}
|
277
265
|
|
278
|
-
|
279
|
-
|
266
|
+
if (!this._events) return false;
|
267
|
+
var handler = this._events[type];
|
268
|
+
if (!handler) return false;
|
269
|
+
|
270
|
+
if (typeof handler == 'function') {
|
271
|
+
switch (arguments.length) {
|
272
|
+
// fast cases
|
273
|
+
case 1:
|
274
|
+
handler.call(this);
|
275
|
+
break;
|
276
|
+
case 2:
|
277
|
+
handler.call(this, arguments[1]);
|
278
|
+
break;
|
279
|
+
case 3:
|
280
|
+
handler.call(this, arguments[1], arguments[2]);
|
281
|
+
break;
|
282
|
+
// slower
|
283
|
+
default:
|
284
|
+
var l = arguments.length;
|
285
|
+
var args = new Array(l - 1);
|
286
|
+
for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
|
287
|
+
handler.apply(this, args);
|
288
|
+
}
|
289
|
+
return true;
|
280
290
|
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
});
|
291
|
+
} else if (isArray(handler)) {
|
292
|
+
var l = arguments.length;
|
293
|
+
var args = new Array(l - 1);
|
294
|
+
for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
|
286
295
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
OO.addMember("processLine", function(line){var self=this;
|
292
|
-
if (line.match(/^\s*$/)) return;
|
293
|
-
|
294
|
-
var ele = new $m.JSMLElement(line);
|
295
|
-
var scope = this.getScope();
|
296
|
-
|
297
|
-
if (ele.scope == scope) {
|
298
|
-
this.stack.pop();
|
299
|
-
this.getLast().push(ele);
|
300
|
-
this.stack.push(ele);
|
301
|
-
} else if (ele.scope > scope) {
|
302
|
-
this.getLast().push(ele);
|
303
|
-
this.stack.push(ele);
|
304
|
-
} else if (ele.scope < scope) {
|
305
|
-
var diff = scope - ele.scope + 1;
|
306
|
-
while(diff-- > 0) {
|
307
|
-
this.stack.pop();
|
296
|
+
var listeners = handler.slice();
|
297
|
+
for (var i = 0, l = listeners.length; i < l; i++) {
|
298
|
+
listeners[i].apply(this, args);
|
308
299
|
}
|
309
|
-
|
310
|
-
|
300
|
+
return true;
|
301
|
+
|
302
|
+
} else {
|
303
|
+
return false;
|
311
304
|
}
|
312
|
-
});
|
313
305
|
|
306
|
+
});
|
314
307
|
|
315
|
-
OO.addMember("
|
316
|
-
|
317
|
-
|
308
|
+
OO.addMember("addListener", function(type, listener){
|
309
|
+
if ('function' !== typeof listener) {
|
310
|
+
throw new Error('addListener only takes instances of Function');
|
311
|
+
}
|
318
312
|
|
319
|
-
|
320
|
-
return this.stack[this.stack.length-1];
|
321
|
-
});
|
313
|
+
if (!this._events) this._events = {};
|
322
314
|
|
323
|
-
|
315
|
+
// To avoid recursion in the case that type == "newListeners"! Before
|
316
|
+
// adding it to the listeners, first emit "newListeners".
|
317
|
+
this.emit('newListener', type, typeof listener.listener === 'function' ?
|
318
|
+
listener.listener : listener);
|
324
319
|
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
OO.addMember("JS_REGEX", /^(-|=)(.*)$/g);
|
330
|
-
OO.addMember("SCOPE_OFFSET", 1);
|
331
|
-
OO.addMember("SELF_CLOSING", { area: null, basefont: null, br: null, hr: null, input: null, img: null, link: null, meta: null });
|
320
|
+
if (!this._events[type]) {
|
321
|
+
// Optimize the case of one listener. Don't need the extra array object.
|
322
|
+
this._events[type] = listener;
|
323
|
+
} else if (isArray(this._events[type])) {
|
332
324
|
|
333
|
-
|
334
|
-
|
325
|
+
// If we've already got an array, just append.
|
326
|
+
this._events[type].push(listener);
|
335
327
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
}
|
328
|
+
} else {
|
329
|
+
// Adding the second element, need to change to array.
|
330
|
+
this._events[type] = [this._events[type], listener];
|
340
331
|
|
341
|
-
|
342
|
-
this.scope = spaceMatch[1].length / 2 + this.SCOPE_OFFSET;
|
332
|
+
}
|
343
333
|
|
344
|
-
|
345
|
-
this.
|
334
|
+
// Check for listener leak
|
335
|
+
if (isArray(this._events[type]) && !this._events[type].warned) {
|
336
|
+
var m;
|
337
|
+
if (this._maxListeners !== undefined) {
|
338
|
+
m = this._maxListeners;
|
339
|
+
} else {
|
340
|
+
m = defaultMaxListeners;
|
341
|
+
}
|
346
342
|
|
347
|
-
|
348
|
-
|
343
|
+
if (m && m > 0 && this._events[type].length > m) {
|
344
|
+
this._events[type].warned = true;
|
345
|
+
console.error('(node) warning: possible EventEmitter memory ' +
|
346
|
+
'leak detected. %d listeners added. ' +
|
347
|
+
'Use emitter.setMaxListeners() to increase limit.',
|
348
|
+
this._events[type].length);
|
349
|
+
console.trace();
|
350
|
+
}
|
351
|
+
}
|
349
352
|
|
350
|
-
|
351
|
-
this.children.push(child);
|
353
|
+
return this;
|
352
354
|
});
|
353
355
|
|
354
|
-
OO.addMember("
|
355
|
-
|
356
|
-
|
357
|
-
var self = this;
|
358
|
-
|
359
|
-
var splitted = line.match(this.SPLIT_REGEX);
|
360
|
-
var tokens = splitted[1];
|
361
|
-
var attrs = splitted[2];
|
362
|
-
var jsType = splitted[3];
|
363
|
-
var content = splitted[4];
|
364
|
-
|
365
|
-
if (tokens) {
|
366
|
-
tokens.replace(this.TOKEN_REGEX, function(match, type, name) {
|
367
|
-
switch(type) {
|
368
|
-
case '%': self.nodeType = name; break;
|
369
|
-
case '.': self.classes.push(name); break;
|
370
|
-
case '#': self.nodeID = name; break;
|
371
|
-
}
|
372
|
-
return '';
|
373
|
-
});
|
356
|
+
OO.addMember("once", function(type, listener){
|
357
|
+
if ('function' !== typeof listener) {
|
358
|
+
throw new Error('.once only takes instances of Function');
|
374
359
|
}
|
375
360
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
} else {
|
381
|
-
this.content = content;
|
382
|
-
}
|
361
|
+
function g() {
|
362
|
+
self.removeListener(type, g);
|
363
|
+
listener.apply(this, arguments);
|
364
|
+
};
|
383
365
|
|
384
|
-
|
385
|
-
|
386
|
-
}
|
366
|
+
g.listener = listener;
|
367
|
+
this.on(type, g);
|
387
368
|
|
388
|
-
|
389
|
-
|
390
|
-
}
|
369
|
+
return this;
|
370
|
+
});
|
391
371
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
this.selfClose = '';
|
372
|
+
OO.addMember("removeListener", function(type, listener){
|
373
|
+
if ('function' !== typeof listener) {
|
374
|
+
throw new Error('removeListener only takes instances of Function');
|
396
375
|
}
|
397
|
-
});
|
398
376
|
|
399
|
-
|
400
|
-
|
377
|
+
// does not use listeners(), so no side effect of creating _events[type]
|
378
|
+
if (!this._events || !this._events[type]) return this;
|
401
379
|
|
402
|
-
|
403
|
-
var c = this.children[i];
|
404
|
-
var arr = c.flatten();
|
405
|
-
for (var j=0; j<arr.length; j++) {
|
406
|
-
var item = arr[j];
|
407
|
-
out.push(item);
|
408
|
-
}
|
409
|
-
}
|
380
|
+
var list = this._events[type];
|
410
381
|
|
411
|
-
if (
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
382
|
+
if (isArray(list)) {
|
383
|
+
var position = -1;
|
384
|
+
for (var i = 0, length = list.length; i < length; i++) {
|
385
|
+
if (list[i] === listener ||
|
386
|
+
(list[i].listener && list[i].listener === listener))
|
387
|
+
{
|
388
|
+
position = i;
|
389
|
+
break;
|
390
|
+
}
|
417
391
|
}
|
418
|
-
} else {
|
419
|
-
this.handleJsExec(out);
|
420
|
-
this.handleJsEQ(out);
|
421
|
-
this.handleContent(out);
|
422
|
-
}
|
423
|
-
|
424
|
-
return out;
|
425
|
-
});
|
426
392
|
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
393
|
+
if (position < 0) return this;
|
394
|
+
list.splice(position, 1);
|
395
|
+
if (list.length == 0)
|
396
|
+
delete this._events[type];
|
397
|
+
} else if (list === listener ||
|
398
|
+
(list.listener && list.listener === listener))
|
399
|
+
{
|
400
|
+
delete this._events[type];
|
431
401
|
}
|
432
|
-
});
|
433
402
|
|
434
|
-
|
435
|
-
if (this.content != null && this.content.length > 0) {
|
436
|
-
out.unshift('out.push(' + JSON.stringify(this.content) + ');\n');
|
437
|
-
}
|
403
|
+
return this;
|
438
404
|
});
|
439
405
|
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
if (this.jsExec.match(/\{\s*$/)) {
|
445
|
-
out.push("}\n");
|
446
|
-
}
|
406
|
+
OO.addMember("removeAllListeners", function(type){
|
407
|
+
if (arguments.length === 0) {
|
408
|
+
this._events = {};
|
409
|
+
return this;
|
447
410
|
}
|
448
|
-
});
|
449
411
|
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
if (classes.length) hash['class'] = classes.join(" ");
|
412
|
+
// does not use listeners(), so no side effect of creating _events[type]
|
413
|
+
if (type && this._events && this._events[type]) this._events[type] = null;
|
414
|
+
return this;
|
415
|
+
});
|
455
416
|
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
417
|
+
OO.addMember("listeners", function(type){
|
418
|
+
if (!this._events) this._events = {};
|
419
|
+
if (!this._events[type]) this._events[type] = [];
|
420
|
+
if (!isArray(this._events[type])) {
|
421
|
+
this._events[type] = [this._events[type]];
|
460
422
|
}
|
461
|
-
return
|
423
|
+
return this._events[type];
|
462
424
|
});
|
463
425
|
});
|
464
426
|
|
465
|
-
$m.
|
466
|
-
$m.JSMLElement = $m.ROOT.JSMLElement;
|
427
|
+
$m.EventEmitter = $m.ROOT.EventEmitter;
|
467
428
|
|
468
429
|
|
469
430
|
var IDENT = "[\\$\\w]+";
|
470
431
|
var TOKENS = [
|
471
432
|
[ "SPACE", "\\s+" ],
|
433
|
+
[ "RETURN", "=>", 'ReturnParser' ],
|
472
434
|
|
473
435
|
[ "STATIC", "static\\b" ],
|
474
436
|
[ "MODULE", "module\\b", 'ModuleParser' ],
|
@@ -528,14 +490,14 @@ var EXTRA_REGEX_STRINGS = {
|
|
528
490
|
var MAIN_REGEX = new RegExp("^" + REGEXES.join('|'));
|
529
491
|
|
530
492
|
$m.Class.extend("Tokens", function(KLASS, OO){
|
531
|
-
OO.addMember("initialize", function(str){
|
493
|
+
OO.addMember("initialize", function(str){
|
532
494
|
this.orig = str;
|
533
495
|
this.str = str;
|
534
496
|
this.iterator = 0;
|
535
497
|
this.consumed = 0;
|
536
498
|
});
|
537
499
|
|
538
|
-
OO.addMember("peek", function(){
|
500
|
+
OO.addMember("peek", function(){
|
539
501
|
if (this._peek) return this._peek;
|
540
502
|
|
541
503
|
var m = this.str.match(MAIN_REGEX);
|
@@ -546,7 +508,7 @@ $m.Class.extend("Tokens", function(KLASS, OO){
|
|
546
508
|
}
|
547
509
|
});
|
548
510
|
|
549
|
-
OO.addStaticMember("regex", function(str){
|
511
|
+
OO.addStaticMember("regex", function(str){
|
550
512
|
var regexStr = str.replace(/\*\*/g, "\\s*").replace(/\s+/g, "\\s+").replace(/\>\</g, ">\\s*<").replace(/\<(\w+)\>/g, function($1,$2,$3){
|
551
513
|
return "(" + (EXTRA_REGEX_STRINGS[$2] || TOKENS[TYPES[$2]][1]) + ")";
|
552
514
|
});
|
@@ -554,17 +516,17 @@ $m.Class.extend("Tokens", function(KLASS, OO){
|
|
554
516
|
return new RegExp("^" + regexStr);
|
555
517
|
});
|
556
518
|
|
557
|
-
OO.addMember("consume", function(n){
|
519
|
+
OO.addMember("consume", function(n){
|
558
520
|
this.str = this.str.substr(n, this.str.length-n);
|
559
521
|
this._peek = null;
|
560
522
|
this.consumed += n;
|
561
523
|
});
|
562
524
|
|
563
|
-
OO.addMember("length", function(){
|
525
|
+
OO.addMember("length", function(){
|
564
526
|
return this.str.length;
|
565
527
|
});
|
566
528
|
|
567
|
-
OO.addMember("lookback", function(n){
|
529
|
+
OO.addMember("lookback", function(n){
|
568
530
|
var starting = this.consumed - 1;
|
569
531
|
|
570
532
|
//$m.outs(JSON.stringify(this.orig.substr(starting-10, 10)));
|
@@ -578,18 +540,18 @@ $m.Class.extend("Tokens", function(KLASS, OO){
|
|
578
540
|
return this.orig.substr(starting-n+1, n);
|
579
541
|
});
|
580
542
|
|
581
|
-
OO.addMember("lookahead", function(n){
|
543
|
+
OO.addMember("lookahead", function(n){
|
582
544
|
var starting = this.consumed;
|
583
545
|
while (this.orig.charAt(starting).match(/\s/)) starting++;
|
584
546
|
return this.orig.substr(starting, n);
|
585
547
|
});
|
586
548
|
|
587
549
|
|
588
|
-
OO.addMember("any", function(){
|
550
|
+
OO.addMember("any", function(){
|
589
551
|
return this.str.length > 0;
|
590
552
|
});
|
591
553
|
|
592
|
-
OO.addMember("match", function(regex){
|
554
|
+
OO.addMember("match", function(regex){
|
593
555
|
return this.str.match(regex);
|
594
556
|
});
|
595
557
|
});
|
@@ -619,19 +581,19 @@ var OPTIONS = {};
|
|
619
581
|
$m.Class.extend("RootParser", function(KLASS, OO){
|
620
582
|
OO.addMember("handlers", {});
|
621
583
|
|
622
|
-
OO.addMember("initialize", function(){
|
584
|
+
OO.addMember("initialize", function(){
|
623
585
|
this.out = [];
|
624
586
|
this.finished = false;
|
625
587
|
});
|
626
588
|
|
627
|
-
OO.addMember("parse", function(tokens){
|
589
|
+
OO.addMember("parse", function(tokens){
|
628
590
|
var len = tokens.length();
|
629
591
|
if (this.startParse(tokens) === false || this.parseTokens(tokens) === false || this.endParse(tokens) === false) return false
|
630
592
|
return len != tokens.length();
|
631
593
|
});
|
632
594
|
|
633
595
|
// TODO: messy clean this process up
|
634
|
-
OO.addMember("parseTokens", function(tokens){
|
596
|
+
OO.addMember("parseTokens", function(tokens){
|
635
597
|
var sanity = 100;
|
636
598
|
var origLen = tokens.length();
|
637
599
|
|
@@ -667,15 +629,15 @@ $m.Class.extend("RootParser", function(KLASS, OO){
|
|
667
629
|
}
|
668
630
|
});
|
669
631
|
|
670
|
-
OO.addMember("startParse", function(){
|
671
|
-
OO.addMember("endParse", function(){
|
632
|
+
OO.addMember("startParse", function(){ });
|
633
|
+
OO.addMember("endParse", function(){ });
|
672
634
|
|
673
|
-
OO.addMember("handleToken", function(token, tokens){
|
635
|
+
OO.addMember("handleToken", function(token, tokens){
|
674
636
|
this.out.push(token[1]);
|
675
637
|
tokens.consume(token[1].length);
|
676
638
|
});
|
677
639
|
|
678
|
-
OO.addMember("toString", function(){
|
640
|
+
OO.addMember("toString", function(){
|
679
641
|
var ret = [];
|
680
642
|
for (var i=0; i<this.out.length; i++) {
|
681
643
|
var ele = this.out[i];
|
@@ -684,11 +646,11 @@ $m.Class.extend("RootParser", function(KLASS, OO){
|
|
684
646
|
return ret.join("");
|
685
647
|
});
|
686
648
|
|
687
|
-
OO.addMember("toJSON", function(){
|
649
|
+
OO.addMember("toJSON", function(){
|
688
650
|
return JSON.stringify(this.toStruct());
|
689
651
|
});
|
690
652
|
|
691
|
-
OO.addMember("pp", function(space){
|
653
|
+
OO.addMember("pp", function(space){
|
692
654
|
space = space == null ? " " : space + " ";
|
693
655
|
|
694
656
|
var ret = [ space + (this._TYPE || 'NODE') ];
|
@@ -719,7 +681,7 @@ $m.Class.extend("RootParser", function(KLASS, OO){
|
|
719
681
|
return ret.join("\n");
|
720
682
|
});
|
721
683
|
|
722
|
-
OO.addMember("toStruct", function(){
|
684
|
+
OO.addMember("toStruct", function(){
|
723
685
|
var ret = [];
|
724
686
|
for (var _i_0=0,ele=null,_list_0=this.out,_len_0=_list_0.length;(ele=_list_0[_i_0])||_i_0<_len_0;_i_0++){
|
725
687
|
ret.push(ele.toStruct ? ele.toStruct() : ele);
|
@@ -728,11 +690,11 @@ $m.Class.extend("RootParser", function(KLASS, OO){
|
|
728
690
|
});
|
729
691
|
|
730
692
|
// intercepts parser class for special cases
|
731
|
-
OO.addMember("getHandler", function(token){
|
693
|
+
OO.addMember("getHandler", function(token){
|
732
694
|
return null;
|
733
695
|
});
|
734
696
|
|
735
|
-
OO.addMember("chop", function(){
|
697
|
+
OO.addMember("chop", function(){
|
736
698
|
this.out.pop();
|
737
699
|
});
|
738
700
|
});
|
@@ -745,7 +707,7 @@ RootParser.extend("ClassParser", function(KLASS, OO){
|
|
745
707
|
var EXTENDS = Tokens.regex("(?:<EXPORT>|<PUBLIC>|<CLASS>) <CLASSNAME><EXTENDS><CLASSNAME><LCURLY>");
|
746
708
|
|
747
709
|
|
748
|
-
OO.addMember("parse", function(tokens){
|
710
|
+
OO.addMember("parse", function(tokens){
|
749
711
|
var m = tokens.match(REGEX) || tokens.match(EXTENDS);
|
750
712
|
var name = m[4];
|
751
713
|
var extending = m[6] || "$m.Class";
|
@@ -767,7 +729,7 @@ RootParser.extend("ModuleParser", function(KLASS, OO){
|
|
767
729
|
var REGEX = Tokens.regex("<MODULE> <CLASSNAME><LCURLY>");
|
768
730
|
|
769
731
|
|
770
|
-
OO.addMember("parse", function(tokens){
|
732
|
+
OO.addMember("parse", function(tokens){
|
771
733
|
var m = tokens.match(REGEX);
|
772
734
|
if (!m) return false;
|
773
735
|
var name = m[2];
|
@@ -783,12 +745,12 @@ RootParser.extend("ModuleParser", function(KLASS, OO){
|
|
783
745
|
RootParser.extend("CurlyParser", function(KLASS, OO){
|
784
746
|
OO.addMember("_TYPE", 'CurlyParser');
|
785
747
|
|
786
|
-
OO.addMember("initialize", function(chop){
|
748
|
+
OO.addMember("initialize", function(chop){
|
787
749
|
this.chop = chop;
|
788
750
|
this.$super();
|
789
751
|
});
|
790
752
|
|
791
|
-
OO.addMember("handleToken", function(token, tokens){
|
753
|
+
OO.addMember("handleToken", function(token, tokens){
|
792
754
|
if (this.curly === undefined) this.curly = 0;
|
793
755
|
if (token[0] == TYPES.RCURLY) {
|
794
756
|
this.curly--;
|
@@ -803,7 +765,7 @@ RootParser.extend("CurlyParser", function(KLASS, OO){
|
|
803
765
|
}
|
804
766
|
});
|
805
767
|
|
806
|
-
OO.addMember("endParse", function(tokens){
|
768
|
+
OO.addMember("endParse", function(tokens){
|
807
769
|
if (this.chop) {
|
808
770
|
this.out.pop();
|
809
771
|
this.out.shift();
|
@@ -814,7 +776,7 @@ RootParser.extend("CurlyParser", function(KLASS, OO){
|
|
814
776
|
var CurlyParser = $c.CurlyParser;
|
815
777
|
|
816
778
|
CurlyParser.extend("ClassContentParser", function(KLASS, OO){
|
817
|
-
OO.addMember("getHandler", function(token){
|
779
|
+
OO.addMember("getHandler", function(token){
|
818
780
|
switch(token[0]) {
|
819
781
|
case TYPES.STATIC: return "StaticParser";
|
820
782
|
case TYPES.VAR: return "MemberParser";
|
@@ -826,7 +788,7 @@ CurlyParser.extend("ClassContentParser", function(KLASS, OO){
|
|
826
788
|
});
|
827
789
|
|
828
790
|
RootParser.extend("LineParser", function(KLASS, OO){
|
829
|
-
OO.addMember("handleToken", function(token, tokens){
|
791
|
+
OO.addMember("handleToken", function(token, tokens){
|
830
792
|
this.$super(token, tokens);
|
831
793
|
if (token[0] == TYPES.SEMICOLON) {
|
832
794
|
this.finished = true;
|
@@ -839,12 +801,12 @@ CurlyParser.extend("PrivateParser", function(KLASS, OO){
|
|
839
801
|
var REGEX = Tokens.regex("<PRIVATE>\\s*");
|
840
802
|
|
841
803
|
|
842
|
-
OO.addMember("startParse", function(tokens){
|
804
|
+
OO.addMember("startParse", function(tokens){
|
843
805
|
var m = tokens.match(REGEX);
|
844
806
|
tokens.consume(m[0].length);
|
845
807
|
});
|
846
808
|
|
847
|
-
OO.addMember("endParse", function(tokens){
|
809
|
+
OO.addMember("endParse", function(tokens){
|
848
810
|
this.out.pop();
|
849
811
|
this.out.shift();
|
850
812
|
});
|
@@ -856,7 +818,7 @@ RootParser.extend("IStringParser", function(KLASS, OO){
|
|
856
818
|
var BEGIN = Tokens.regex("<ISTRING_START>");
|
857
819
|
|
858
820
|
|
859
|
-
OO.addMember("parse", function(tokens){
|
821
|
+
OO.addMember("parse", function(tokens){
|
860
822
|
var m = tokens.match(BEGIN);
|
861
823
|
tokens.consume(m[0].length);
|
862
824
|
this.out.push('"');
|
@@ -883,7 +845,7 @@ RootParser.extend("IStringParser", function(KLASS, OO){
|
|
883
845
|
}
|
884
846
|
});
|
885
847
|
|
886
|
-
OO.addMember("parseMiddle", function(tokens){
|
848
|
+
OO.addMember("parseMiddle", function(tokens){
|
887
849
|
var parser = new $c.CurlyParser(true);
|
888
850
|
parser.parse(tokens);
|
889
851
|
this.out.push(parser);
|
@@ -896,7 +858,7 @@ RootParser.extend("StaticParser", function(KLASS, OO){
|
|
896
858
|
var FUNCT_REGEX = Tokens.regex("(<STATIC>(\\s+))<FUNCTION>");
|
897
859
|
|
898
860
|
|
899
|
-
OO.addMember("parseTokens", function(tokens){
|
861
|
+
OO.addMember("parseTokens", function(tokens){
|
900
862
|
var varMatch = tokens.match(VAR_REGEX);
|
901
863
|
if (varMatch) {
|
902
864
|
tokens.consume(varMatch[1].length);
|
@@ -923,7 +885,7 @@ RootParser.extend("MemberParser", function(KLASS, OO){
|
|
923
885
|
var REGEX = Tokens.regex("var <IDENT>\\s*=\\s*?");
|
924
886
|
|
925
887
|
|
926
|
-
OO.addMember("parse", function(tokens){
|
888
|
+
OO.addMember("parse", function(tokens){
|
927
889
|
var m = tokens.str.match(REGEX);
|
928
890
|
this.name = m[1];
|
929
891
|
tokens.consume(m[0].length);
|
@@ -946,7 +908,7 @@ RootParser.extend("IncludeParser", function(KLASS, OO){
|
|
946
908
|
var REGEX = Tokens.regex("<INCLUDE> <CLASSNAME><SEMICOLON>");
|
947
909
|
|
948
910
|
|
949
|
-
OO.addMember("parse", function(tokens){
|
911
|
+
OO.addMember("parse", function(tokens){
|
950
912
|
var m = tokens.match(REGEX);
|
951
913
|
tokens.consume(m[0].length);
|
952
914
|
this.out = [ 'OO.include(', m[2], ');' ];
|
@@ -958,7 +920,7 @@ RootParser.extend("HereDocParser", function(KLASS, OO){
|
|
958
920
|
var REGEX = Tokens.regex("<HEREDOC>");
|
959
921
|
|
960
922
|
|
961
|
-
OO.addMember("parse", function(tokens){
|
923
|
+
OO.addMember("parse", function(tokens){
|
962
924
|
var beginning = tokens.match(/^<<(\w+)(?::(\w+))?\s*([;\)])*\n/);
|
963
925
|
var terminator = beginning[1];
|
964
926
|
|
@@ -991,7 +953,7 @@ RootParser.extend("MethodParser", function(KLASS, OO){
|
|
991
953
|
var REGEX = Tokens.regex("<FUNCTION> <IDENT><ARGS><SPACE>");
|
992
954
|
|
993
955
|
|
994
|
-
OO.addMember("parse", function(tokens){
|
956
|
+
OO.addMember("parse", function(tokens){
|
995
957
|
var m = tokens.str.match(REGEX);
|
996
958
|
tokens.consume(m[0].length);
|
997
959
|
var name = m[2];
|
@@ -1008,12 +970,19 @@ RootParser.extend("MethodParser", function(KLASS, OO){
|
|
1008
970
|
});
|
1009
971
|
});
|
1010
972
|
|
973
|
+
RootParser.extend("ReturnParser", function(KLASS, OO){
|
974
|
+
OO.addMember("parse", function(tokens){
|
975
|
+
tokens.consume(2);
|
976
|
+
this.out = [ 'return ' ];
|
977
|
+
});
|
978
|
+
});
|
979
|
+
|
1011
980
|
RootParser.extend("ShorthandMapperParser", function(KLASS, OO){
|
1012
981
|
|
1013
982
|
var ARGS_REGEX = Tokens.regex("<ARGS>\\s*");
|
1014
983
|
|
1015
984
|
|
1016
|
-
OO.addMember("parse", function(tokens){
|
985
|
+
OO.addMember("parse", function(tokens){
|
1017
986
|
tokens.consume(1);
|
1018
987
|
var nameMatch = tokens.match(/^([\w\$]+)\s*/);
|
1019
988
|
tokens.consume(nameMatch[0].length);
|
@@ -1042,7 +1011,7 @@ RootParser.extend("ShorthandFunctionParser", function(KLASS, OO){
|
|
1042
1011
|
var ARGS_REGEX = Tokens.regex("<ARGS>\\s*");
|
1043
1012
|
|
1044
1013
|
|
1045
|
-
OO.addMember("parse", function(tokens){
|
1014
|
+
OO.addMember("parse", function(tokens){
|
1046
1015
|
tokens.consume(1);
|
1047
1016
|
var argsMatch = tokens.match(ARGS_REGEX);
|
1048
1017
|
var args = null;
|
@@ -1063,7 +1032,7 @@ RootParser.extend("ShorthandFunctionParser", function(KLASS, OO){
|
|
1063
1032
|
});
|
1064
1033
|
|
1065
1034
|
RootParser.extend("CommentParser", function(KLASS, OO){
|
1066
|
-
OO.addMember("parse", function(tokens){
|
1035
|
+
OO.addMember("parse", function(tokens){
|
1067
1036
|
var m = tokens.match(/^\/\/.*?\n/);
|
1068
1037
|
if (m) {
|
1069
1038
|
tokens.consume(m[0].length);
|
@@ -1088,7 +1057,7 @@ RootParser.extend("RegexParser", function(KLASS, OO){
|
|
1088
1057
|
var DIVIDE = /(\}|\)|\+\+|\-\-|[\w\$])$/;
|
1089
1058
|
|
1090
1059
|
|
1091
|
-
OO.addMember("parseTokens", function(tokens){
|
1060
|
+
OO.addMember("parseTokens", function(tokens){
|
1092
1061
|
var back = tokens.lookback(2);
|
1093
1062
|
|
1094
1063
|
if (back.match(DIVIDE)) {
|
@@ -1112,13 +1081,14 @@ RootParser.extend("RegexParser", function(KLASS, OO){
|
|
1112
1081
|
});
|
1113
1082
|
|
1114
1083
|
CurlyParser.extend("ReturnableCurlyParser", function(KLASS, OO){
|
1115
|
-
OO.addMember("toString", function(){
|
1084
|
+
OO.addMember("toString", function(){
|
1116
1085
|
var ret = this.$super();
|
1117
1086
|
return ret.replace(/^{(\s*)(return)?/, '{$1return ');
|
1118
1087
|
});
|
1119
1088
|
});
|
1120
1089
|
|
1121
1090
|
|
1091
|
+
|
1122
1092
|
CurlyParser.extend("ForeachParser", function(KLASS, OO){
|
1123
1093
|
OO.addMember("_TYPE", 'Foreach');
|
1124
1094
|
|
@@ -1126,7 +1096,7 @@ CurlyParser.extend("ForeachParser", function(KLASS, OO){
|
|
1126
1096
|
var REGEX = Tokens.regex("<FOREACH><LBRACE><VAR> <IDENT>(?:**:**<IDENT>)? in (.*?)**<RBRACE>**{");
|
1127
1097
|
|
1128
1098
|
|
1129
|
-
OO.addMember("startParse", function(tokens){
|
1099
|
+
OO.addMember("startParse", function(tokens){
|
1130
1100
|
var m = tokens.match(REGEX);
|
1131
1101
|
namespace = tokens.iterator++;
|
1132
1102
|
|
@@ -1143,7 +1113,7 @@ CurlyParser.extend("ForeachParser", function(KLASS, OO){
|
|
1143
1113
|
this.out = [ "for (var ", declare, ";", bool, ';', this.iterator + "++)" ];
|
1144
1114
|
});
|
1145
1115
|
|
1146
|
-
OO.addMember("endParse", function(tokens){
|
1116
|
+
OO.addMember("endParse", function(tokens){
|
1147
1117
|
tokens.iterator--;
|
1148
1118
|
});
|
1149
1119
|
|
@@ -1160,14 +1130,14 @@ $m.Class.extend("CLI", function(KLASS, OO){
|
|
1160
1130
|
};
|
1161
1131
|
|
1162
1132
|
|
1163
|
-
OO.addMember("run", function(args){
|
1133
|
+
OO.addMember("run", function(args){
|
1164
1134
|
var opts = this.parseOpts(args);
|
1165
1135
|
var options = opts[0];
|
1166
1136
|
var command = opts[1];
|
1167
1137
|
var files = opts[2];
|
1168
1138
|
});
|
1169
1139
|
|
1170
|
-
OO.addMember("parseOpts", function(args){
|
1140
|
+
OO.addMember("parseOpts", function(args){
|
1171
1141
|
var files = [];
|
1172
1142
|
var options = {};
|
1173
1143
|
var command = null;
|
data/lib/mochiscript/version.rb
CHANGED
@@ -187,24 +187,6 @@ window.$m = $m;
|
|
187
187
|
events[type].push(listener);
|
188
188
|
}
|
189
189
|
|
190
|
-
$m.EventEmitter = $m.Module.extend({
|
191
|
-
emit: function () {
|
192
|
-
// TODO optimize
|
193
|
-
var type = arguments[0];
|
194
|
-
var events = this.__$events || (this.__$events = {});
|
195
|
-
var handlers = events[type];
|
196
|
-
|
197
|
-
if (!handlers) return false;
|
198
|
-
|
199
|
-
var args = [];
|
200
|
-
for (var i=1,len=arguments.length; i<len; i++) args[i-1] = arguments[i];
|
201
|
-
for (var i=0,len=handlers.length; i<len; i++) handlers[i].apply(this, args);
|
202
|
-
},
|
203
|
-
|
204
|
-
addListener: addListener,
|
205
|
-
on: addListener
|
206
|
-
});
|
207
|
-
|
208
190
|
$m.out = function () {
|
209
191
|
for (var i=0,arg=null,_list_0=arguments,_len_0=_list_0.length;(arg=_list_0[i])||i<_len_0;i++){
|
210
192
|
$m.ADAPTER.out(arg);
|
@@ -224,211 +206,190 @@ window.$m = $m;
|
|
224
206
|
})(undefined, $m);
|
225
207
|
|
226
208
|
|
227
|
-
$m.Class.extend("
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
209
|
+
$m.Class.extend("EventEmitter", function(KLASS, OO){
|
210
|
+
|
211
|
+
this._maxListeners = 10;
|
212
|
+
var isArray = Array.isArray;
|
213
|
+
|
214
|
+
|
215
|
+
OO.addMember("emit", function(){
|
216
|
+
var type = arguments[0];
|
217
|
+
// If there is no 'error' event listener then throw.
|
218
|
+
if (type === 'error') {
|
219
|
+
if (!this._events || !this._events.error ||
|
220
|
+
(isArray(this._events.error) && !this._events.error.length))
|
221
|
+
{
|
222
|
+
if (arguments[1] instanceof Error) {
|
223
|
+
throw arguments[1]; // Unhandled 'error' event
|
224
|
+
} else {
|
225
|
+
throw new Error("Uncaught, unspecified 'error' event.");
|
226
|
+
}
|
227
|
+
return false;
|
228
|
+
}
|
241
229
|
}
|
242
230
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
231
|
+
if (!this._events) return false;
|
232
|
+
var handler = this._events[type];
|
233
|
+
if (!handler) return false;
|
234
|
+
|
235
|
+
if (typeof handler == 'function') {
|
236
|
+
switch (arguments.length) {
|
237
|
+
// fast cases
|
238
|
+
case 1:
|
239
|
+
handler.call(this);
|
240
|
+
break;
|
241
|
+
case 2:
|
242
|
+
handler.call(this, arguments[1]);
|
243
|
+
break;
|
244
|
+
case 3:
|
245
|
+
handler.call(this, arguments[1], arguments[2]);
|
246
|
+
break;
|
247
|
+
// slower
|
248
|
+
default:
|
249
|
+
var l = arguments.length;
|
250
|
+
var args = new Array(l - 1);
|
251
|
+
for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
|
252
|
+
handler.apply(this, args);
|
253
|
+
}
|
254
|
+
return true;
|
251
255
|
|
252
|
-
|
253
|
-
|
254
|
-
|
256
|
+
} else if (isArray(handler)) {
|
257
|
+
var l = arguments.length;
|
258
|
+
var args = new Array(l - 1);
|
259
|
+
for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
|
255
260
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
var ele = new $m.JSMLElement(line);
|
260
|
-
var scope = this.getScope();
|
261
|
-
|
262
|
-
if (ele.scope == scope) {
|
263
|
-
this.stack.pop();
|
264
|
-
this.getLast().push(ele);
|
265
|
-
this.stack.push(ele);
|
266
|
-
} else if (ele.scope > scope) {
|
267
|
-
this.getLast().push(ele);
|
268
|
-
this.stack.push(ele);
|
269
|
-
} else if (ele.scope < scope) {
|
270
|
-
var diff = scope - ele.scope + 1;
|
271
|
-
while(diff-- > 0) {
|
272
|
-
this.stack.pop();
|
261
|
+
var listeners = handler.slice();
|
262
|
+
for (var i = 0, l = listeners.length; i < l; i++) {
|
263
|
+
listeners[i].apply(this, args);
|
273
264
|
}
|
274
|
-
|
275
|
-
|
265
|
+
return true;
|
266
|
+
|
267
|
+
} else {
|
268
|
+
return false;
|
276
269
|
}
|
277
|
-
});
|
278
270
|
|
271
|
+
});
|
279
272
|
|
280
|
-
OO.addMember("
|
281
|
-
|
282
|
-
|
273
|
+
OO.addMember("addListener", function(type, listener){
|
274
|
+
if ('function' !== typeof listener) {
|
275
|
+
throw new Error('addListener only takes instances of Function');
|
276
|
+
}
|
283
277
|
|
284
|
-
|
285
|
-
return this.stack[this.stack.length-1];
|
286
|
-
});
|
278
|
+
if (!this._events) this._events = {};
|
287
279
|
|
288
|
-
|
280
|
+
// To avoid recursion in the case that type == "newListeners"! Before
|
281
|
+
// adding it to the listeners, first emit "newListeners".
|
282
|
+
this.emit('newListener', type, typeof listener.listener === 'function' ?
|
283
|
+
listener.listener : listener);
|
289
284
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
OO.addMember("JS_REGEX", /^(-|=)(.*)$/g);
|
295
|
-
OO.addMember("SCOPE_OFFSET", 1);
|
296
|
-
OO.addMember("SELF_CLOSING", { area: null, basefont: null, br: null, hr: null, input: null, img: null, link: null, meta: null });
|
285
|
+
if (!this._events[type]) {
|
286
|
+
// Optimize the case of one listener. Don't need the extra array object.
|
287
|
+
this._events[type] = listener;
|
288
|
+
} else if (isArray(this._events[type])) {
|
297
289
|
|
298
|
-
|
299
|
-
|
290
|
+
// If we've already got an array, just append.
|
291
|
+
this._events[type].push(listener);
|
300
292
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
}
|
293
|
+
} else {
|
294
|
+
// Adding the second element, need to change to array.
|
295
|
+
this._events[type] = [this._events[type], listener];
|
305
296
|
|
306
|
-
|
307
|
-
this.scope = spaceMatch[1].length / 2 + this.SCOPE_OFFSET;
|
297
|
+
}
|
308
298
|
|
309
|
-
|
310
|
-
this.
|
299
|
+
// Check for listener leak
|
300
|
+
if (isArray(this._events[type]) && !this._events[type].warned) {
|
301
|
+
var m;
|
302
|
+
if (this._maxListeners !== undefined) {
|
303
|
+
m = this._maxListeners;
|
304
|
+
} else {
|
305
|
+
m = defaultMaxListeners;
|
306
|
+
}
|
311
307
|
|
312
|
-
|
313
|
-
|
308
|
+
if (m && m > 0 && this._events[type].length > m) {
|
309
|
+
this._events[type].warned = true;
|
310
|
+
console.error('(node) warning: possible EventEmitter memory ' +
|
311
|
+
'leak detected. %d listeners added. ' +
|
312
|
+
'Use emitter.setMaxListeners() to increase limit.',
|
313
|
+
this._events[type].length);
|
314
|
+
console.trace();
|
315
|
+
}
|
316
|
+
}
|
314
317
|
|
315
|
-
|
316
|
-
this.children.push(child);
|
318
|
+
return this;
|
317
319
|
});
|
318
320
|
|
319
|
-
OO.addMember("
|
320
|
-
|
321
|
-
|
322
|
-
var self = this;
|
323
|
-
|
324
|
-
var splitted = line.match(this.SPLIT_REGEX);
|
325
|
-
var tokens = splitted[1];
|
326
|
-
var attrs = splitted[2];
|
327
|
-
var jsType = splitted[3];
|
328
|
-
var content = splitted[4];
|
329
|
-
|
330
|
-
if (tokens) {
|
331
|
-
tokens.replace(this.TOKEN_REGEX, function(match, type, name) {
|
332
|
-
switch(type) {
|
333
|
-
case '%': self.nodeType = name; break;
|
334
|
-
case '.': self.classes.push(name); break;
|
335
|
-
case '#': self.nodeID = name; break;
|
336
|
-
}
|
337
|
-
return '';
|
338
|
-
});
|
321
|
+
OO.addMember("once", function(type, listener){
|
322
|
+
if ('function' !== typeof listener) {
|
323
|
+
throw new Error('.once only takes instances of Function');
|
339
324
|
}
|
340
325
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
} else {
|
346
|
-
this.content = content;
|
347
|
-
}
|
326
|
+
function g() {
|
327
|
+
self.removeListener(type, g);
|
328
|
+
listener.apply(this, arguments);
|
329
|
+
};
|
348
330
|
|
349
|
-
|
350
|
-
|
351
|
-
}
|
331
|
+
g.listener = listener;
|
332
|
+
this.on(type, g);
|
352
333
|
|
353
|
-
|
354
|
-
|
355
|
-
}
|
334
|
+
return this;
|
335
|
+
});
|
356
336
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
this.selfClose = '';
|
337
|
+
OO.addMember("removeListener", function(type, listener){
|
338
|
+
if ('function' !== typeof listener) {
|
339
|
+
throw new Error('removeListener only takes instances of Function');
|
361
340
|
}
|
362
|
-
});
|
363
341
|
|
364
|
-
|
365
|
-
|
342
|
+
// does not use listeners(), so no side effect of creating _events[type]
|
343
|
+
if (!this._events || !this._events[type]) return this;
|
366
344
|
|
367
|
-
|
368
|
-
var c = this.children[i];
|
369
|
-
var arr = c.flatten();
|
370
|
-
for (var j=0; j<arr.length; j++) {
|
371
|
-
var item = arr[j];
|
372
|
-
out.push(item);
|
373
|
-
}
|
374
|
-
}
|
345
|
+
var list = this._events[type];
|
375
346
|
|
376
|
-
if (
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
347
|
+
if (isArray(list)) {
|
348
|
+
var position = -1;
|
349
|
+
for (var i = 0, length = list.length; i < length; i++) {
|
350
|
+
if (list[i] === listener ||
|
351
|
+
(list[i].listener && list[i].listener === listener))
|
352
|
+
{
|
353
|
+
position = i;
|
354
|
+
break;
|
355
|
+
}
|
382
356
|
}
|
383
|
-
} else {
|
384
|
-
this.handleJsExec(out);
|
385
|
-
this.handleJsEQ(out);
|
386
|
-
this.handleContent(out);
|
387
|
-
}
|
388
357
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
if (
|
394
|
-
|
395
|
-
|
358
|
+
if (position < 0) return this;
|
359
|
+
list.splice(position, 1);
|
360
|
+
if (list.length == 0)
|
361
|
+
delete this._events[type];
|
362
|
+
} else if (list === listener ||
|
363
|
+
(list.listener && list.listener === listener))
|
364
|
+
{
|
365
|
+
delete this._events[type];
|
396
366
|
}
|
397
|
-
});
|
398
367
|
|
399
|
-
|
400
|
-
if (this.content != null && this.content.length > 0) {
|
401
|
-
out.unshift('out.push(' + JSON.stringify(this.content) + ');\n');
|
402
|
-
}
|
368
|
+
return this;
|
403
369
|
});
|
404
370
|
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
if (this.jsExec.match(/\{\s*$/)) {
|
410
|
-
out.push("}\n");
|
411
|
-
}
|
371
|
+
OO.addMember("removeAllListeners", function(type){
|
372
|
+
if (arguments.length === 0) {
|
373
|
+
this._events = {};
|
374
|
+
return this;
|
412
375
|
}
|
413
|
-
});
|
414
376
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
if (classes.length) hash['class'] = classes.join(" ");
|
377
|
+
// does not use listeners(), so no side effect of creating _events[type]
|
378
|
+
if (type && this._events && this._events[type]) this._events[type] = null;
|
379
|
+
return this;
|
380
|
+
});
|
420
381
|
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
382
|
+
OO.addMember("listeners", function(type){
|
383
|
+
if (!this._events) this._events = {};
|
384
|
+
if (!this._events[type]) this._events[type] = [];
|
385
|
+
if (!isArray(this._events[type])) {
|
386
|
+
this._events[type] = [this._events[type]];
|
425
387
|
}
|
426
|
-
return
|
388
|
+
return this._events[type];
|
427
389
|
});
|
428
390
|
});
|
429
391
|
|
430
|
-
$m.
|
431
|
-
$m.JSMLElement = $m.ROOT.JSMLElement;
|
392
|
+
$m.EventEmitter = $m.ROOT.EventEmitter;
|
432
393
|
|
433
394
|
|
434
395
|
})(window);
|
metadata
CHANGED
@@ -1,48 +1,51 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mochiscript
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.5.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Jeff Su
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2012-03-23 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: therubyracer
|
16
|
-
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
19
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version:
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
22
24
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
26
27
|
name: json
|
27
|
-
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
30
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version:
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
33
35
|
type: :runtime
|
34
|
-
|
35
|
-
version_requirements: *70238662874820
|
36
|
+
version_requirements: *id002
|
36
37
|
description: Javascript Dessert
|
37
|
-
email:
|
38
|
+
email:
|
38
39
|
- me@jeffsu.com
|
39
|
-
executables:
|
40
|
+
executables:
|
40
41
|
- ms-bootstrap
|
41
42
|
- ms-parse
|
42
43
|
- ms-run
|
43
44
|
extensions: []
|
45
|
+
|
44
46
|
extra_rdoc_files: []
|
45
|
-
|
47
|
+
|
48
|
+
files:
|
46
49
|
- .gitignore
|
47
50
|
- Gemfile
|
48
51
|
- Rakefile
|
@@ -57,29 +60,32 @@ files:
|
|
57
60
|
- lib/mochiscript/version.rb
|
58
61
|
- mochiscript.gemspec
|
59
62
|
- vendor/assets/javascripts/mochiscript.js
|
60
|
-
homepage:
|
63
|
+
homepage: ""
|
61
64
|
licenses: []
|
65
|
+
|
62
66
|
post_install_message:
|
63
67
|
rdoc_options: []
|
64
|
-
|
68
|
+
|
69
|
+
require_paths:
|
65
70
|
- lib
|
66
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
72
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version:
|
72
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: "0"
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
78
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version:
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: "0"
|
78
83
|
requirements: []
|
84
|
+
|
79
85
|
rubyforge_project: mochiscript
|
80
|
-
rubygems_version: 1.8.
|
86
|
+
rubygems_version: 1.8.11
|
81
87
|
signing_key:
|
82
88
|
specification_version: 3
|
83
89
|
summary: Javascript Dessert
|
84
90
|
test_files: []
|
85
|
-
|
91
|
+
|