home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / filF02217DC11F09313EED43F6C36D60461 < prev    next >
Text File  |  2010-07-12  |  4KB  |  129 lines

  1. /*
  2.     http://github.com/shergin/legacy/
  3.     Special version for Firefox only.
  4. */
  5.  
  6. function Class($super, $members, $statics) {
  7.     var $class = function $class() {
  8.         if ($class.prototype.$constructor)
  9.             $class.prototype.$constructor.apply(this, arguments);
  10.     }
  11.     
  12.     var prototype = {};
  13.     
  14.     if ($super) {
  15.         prototype.__proto__ = $super.prototype;
  16.         prototype.constructor = $class;
  17.     }
  18.     
  19.     $class.$super = $super;
  20.     $class.$name = $members.$name || ($members.constructor ? $members.constructor.name : '');
  21.     $class.prototype = prototype;
  22.     
  23.     prototype.$class = $class;
  24.     prototype.$super = $super ? $super.prototype : null;
  25.     prototype.$base = Class.$base;
  26.  
  27.     if ($members.constructor && $members.constructor != Object) {
  28.         $members.$constructor = $members.constructor;
  29.         delete $members.constructor;
  30.     }
  31.     
  32.     Class.$implement($class, $members, $statics);
  33.     
  34.     return $class;
  35. }
  36.  
  37. Class.$empty = function () {};
  38.  
  39. Class.$base = function $base() {
  40.     var caller = $base.caller;
  41.     return caller.$class.$super.prototype[caller.$name].apply(this, arguments);
  42. };
  43.  
  44. Class.$copy = function($source, $target, $class) {
  45.     const specials = ["$class", "$name", "$super", "$base"];
  46.     var member;
  47.     for (let name in $source) {
  48.         if (specials.indexOf(name) >= 0)
  49.             continue;
  50.         
  51.         if (member = $source.__lookupSetter__(name)) {
  52.             if (member.$class)
  53.                 member = eval(member.toString());
  54.             member.$class = $class;
  55.             member.$name = name;
  56.             $target.__defineSetter__(name, member);
  57.         }
  58.         else if (member = $source.__lookupGetter__(name)) {
  59.             if (member.$class)
  60.                 member = eval(member.toString());
  61.             member.$class = $class;
  62.             member.$name = name;
  63.             $target.__defineGetter__(name, member);
  64.         }
  65.         else {
  66.             member = $source[name];
  67.             if (member instanceof Function) {
  68.                 if (member.$class)
  69.                     member = eval("(" + member.toString() + ")");
  70.                 member.$class = $class;
  71.                 member.$name = name;
  72.             }
  73.             $target[name] = member;
  74.         }
  75.     }
  76. };
  77.  
  78. Class.$implement = function $implement($class, $members, $statics) {
  79.     Class.$copy($members, $class.prototype, $class);
  80.     
  81.     if ($statics)
  82.         Class.$copy($statics, $class, null);
  83. };
  84.  
  85. // Implement Base.js by Dean Edwards (http://code.google.com/p/base2/)
  86. Base = Class(null, {
  87.        
  88.         extend: function($members) {
  89.             Class.$copy($members, this, this.$class);
  90.             return this;
  91.         },
  92.         
  93.         base: function() {
  94.         }
  95.     }, {
  96.         ancestorOf: function($class) {
  97.             while ($class) {
  98.                 $class = $class.$super;
  99.                 if ($class == this)
  100.                     return true;
  101.             }
  102.             return false;
  103.         },
  104.         
  105.         inherits: function($class) {
  106.             return $class.ancestorOf(this);
  107.         },
  108.         
  109.         extend: function $extend(members, statics) {
  110.             statics = statics || {};
  111.             statics.extend = this.extend;
  112.             statics.implement = this.implement;
  113.             statics.ancestorOf = this.ancestorOf;
  114.             statics.inherits = this.inherits;
  115.             var $class = Class(this, members || {}, statics);
  116.             $class.prototype.base = $class.prototype.$base; 
  117.             return $class;
  118.         },
  119.         
  120.         implement: function(members, statics) {
  121.             if (members.prototype)
  122.                 Class.$implement(this, members.prototype, members);
  123.             else
  124.                 Class.$implement(this, members, statics);
  125.             return this;
  126.         }
  127.     }
  128. );
  129.