/*! * klass: a classical js oop façade * https://github.com/ded/klass * license mit (c) dustin diaz & jacob thornton 2012 */ !function (name, definition) { if (typeof define == 'function') define(definition) else if (typeof module != 'undefined') module.exports = definition() else this[name] = definition() }('klass', function () { var context = this , old = context.klass , f = 'function' , fntest = /xyz/.test(function () {xyz}) ? /\bsupr\b/ : /.*/ , proto = 'prototype' function klass(o) { return extend.call(isfn(o) ? o : function () {}, o, 1) } function isfn(o) { return typeof o === f } function wrap(k, fn, supr) { return function () { var tmp = this.supr this.supr = supr[proto][k] var ret = fn.apply(this, arguments) this.supr = tmp return ret } } function process(what, o, supr) { for (var k in o) { if (o.hasownproperty(k)) { what[k] = isfn(o[k]) && isfn(supr[proto][k]) && fntest.test(o[k]) ? wrap(k, o[k], supr) : o[k] } } } function extend(o, fromsub) { // must redefine noop each time so it doesn't inherit from previous arbitrary classes function noop() {} noop[proto] = this[proto] var supr = this , prototype = new noop() , isfunction = isfn(o) , _constructor = isfunction ? o : this , _methods = isfunction ? {} : o function fn() { if (this.initialize) this.initialize.apply(this, arguments) else { fromsub || isfunction && supr.apply(this, arguments) _constructor.apply(this, arguments) } } fn.methods = function (o) { process(prototype, o, supr) fn[proto] = prototype return this } fn.methods.call(fn, _methods).prototype.constructor = fn fn.extend = arguments.callee fn[proto].implement = fn.statics = function (o, optfn) { o = typeof o == 'string' ? (function () { var obj = {} obj[o] = optfn return obj }()) : o process(this, o, supr) return this } return fn } klass.noconflict = function () { context.klass = old return this } context.klass = klass return klass });