| // Generated by CoffeeScript 1.6.3 |
| var classic, |
| __slice = [].slice; |
| |
| module.exports = classic = {}; |
| |
| classic.implement = function() { |
| var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len; |
| mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++]; |
| for (_j = 0, _len = mixins.length; _j < _len; _j++) { |
| mixin = mixins[_j]; |
| classProto = classReference.prototype; |
| for (member in mixin.prototype) { |
| if (!Object.getOwnPropertyDescriptor(classProto, member)) { |
| desc = Object.getOwnPropertyDescriptor(mixin.prototype, member); |
| Object.defineProperty(classProto, member, desc); |
| } |
| } |
| } |
| return classReference; |
| }; |
| |
| classic.mix = function() { |
| var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len; |
| mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++]; |
| classProto = classReference.prototype; |
| classReference.__mixinCloners = []; |
| classReference.__applyClonersFor = function(instance, args) { |
| var cloner, _j, _len, _ref; |
| if (args == null) { |
| args = null; |
| } |
| _ref = classReference.__mixinCloners; |
| for (_j = 0, _len = _ref.length; _j < _len; _j++) { |
| cloner = _ref[_j]; |
| cloner.apply(instance, args); |
| } |
| }; |
| classReference.__mixinInitializers = []; |
| classReference.__initMixinsFor = function(instance, args) { |
| var initializer, _j, _len, _ref; |
| if (args == null) { |
| args = null; |
| } |
| _ref = classReference.__mixinInitializers; |
| for (_j = 0, _len = _ref.length; _j < _len; _j++) { |
| initializer = _ref[_j]; |
| initializer.apply(instance, args); |
| } |
| }; |
| classReference.__mixinQuitters = []; |
| classReference.__applyQuittersFor = function(instance, args) { |
| var quitter, _j, _len, _ref; |
| if (args == null) { |
| args = null; |
| } |
| _ref = classReference.__mixinQuitters; |
| for (_j = 0, _len = _ref.length; _j < _len; _j++) { |
| quitter = _ref[_j]; |
| quitter.apply(instance, args); |
| } |
| }; |
| for (_j = 0, _len = mixins.length; _j < _len; _j++) { |
| mixin = mixins[_j]; |
| if (!(mixin.constructor instanceof Function)) { |
| throw Error("Mixin should be a function"); |
| } |
| for (member in mixin.prototype) { |
| if (member.substr(0, 11) === '__initMixin') { |
| classReference.__mixinInitializers.push(mixin.prototype[member]); |
| continue; |
| } else if (member.substr(0, 11) === '__clonerFor') { |
| classReference.__mixinCloners.push(mixin.prototype[member]); |
| continue; |
| } else if (member.substr(0, 12) === '__quitterFor') { |
| classReference.__mixinQuitters.push(mixin.prototype[member]); |
| continue; |
| } |
| if (!Object.getOwnPropertyDescriptor(classProto, member)) { |
| desc = Object.getOwnPropertyDescriptor(mixin.prototype, member); |
| Object.defineProperty(classProto, member, desc); |
| } |
| } |
| } |
| return classReference; |
| }; |