mochiscript 0.4.6.pre4 → 0.5.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.
- 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
|
+
|