Sha256: 5933c3f92654be2e97ce8efbc630505c16c7814cd256cde731f7bf4aac17db35

Contents?: true

Size: 1.57 KB

Versions: 7

Compression:

Stored size: 1.57 KB

Contents

/*
---
 
script: Class.Includes.js
 
description: Multiple inheritance in mootools, chained Extend basically.
 
license: MIT-style license.
 
requires:
- Core/Options
- Core/Events
- Core/Class

provides: [Class.Mutators.Includes, Class.include, Class.flatten]
 
...
*/

(function() {
  
  var getInstance = function(klass){
    klass.$prototyping = true;
    var proto = new klass;
    delete klass.$prototyping;
    return proto;
  };
  
  Class.include = function(klass, klasses) {
    return new Class({
      Includes: Array.from(arguments).flatten()
    });
  };
  
  Class.flatten = function(items) {
    return Array.from(items).clean().map(function(item, i) {
      if (item.parent) {
        return [Class.flatten(item.parent), item];
      } else {
        return item;
      }
    }).flatten();
  };

  Class.Mutators.Includes = function(items) {
    items = Array.from(items);
    var instance = this.parent ? this.parent : items.shift();
    Class.flatten(items).each(function(parent){
      var baked = new Class, proto = parent.prototype;
      if (instance) {
        baked.parent = instance;
        baked.prototype = getInstance(instance);
      }
      for (var name in proto) {
        switch (name) {
          case "$caller": case "$constructor": case "parent": case "caller":
            continue;
        }
        var fn = proto[name];
        if (fn && fn.$owner && (fn.$owner != parent) && fn.$owner.parent) continue;
        baked.implement(name, fn);
      }
      instance = baked;
    }, this);
    this.parent = instance;
    this.prototype = getInstance(instance);
  };
})();

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
lsd_rails-0.1.6 Packages/mootools-ext/Source/Core/Class.Includes.js
lsd_rails-0.1.5 Packages/mootools-ext/Source/Core/Class.Includes.js
lsd_rails-0.1.4 Packages/mootools-ext/Source/Core/Class.Includes.js
lsd_rails-0.1.3 Packages/mootools-ext/Source/Core/Class.Includes.js
lsd_rails-0.1.2 Packages/mootools-ext/Source/Core/Class.Includes.js
lsd_rails-0.1.1 Packages/mootools-ext/Source/Core/Class.Includes.js
lsd_rails-0.1 Packages/mootools-ext/Source/Core/Class.Includes.js