Вход Регистрация
Файл: templates/backend/default/assets/plugins/jquery-ricksaw-chart/js/Rickshaw.Class.js
Строк: 250
<?php
/* Adapted from https://github.com/Jakobo/PTClass */

/*
Copyright (c) 2005-2010 Sam Stephenson

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
/* Based on Alex Arnell's inheritance implementation. */
/** section: Language
 * class Class
 *
 *  Manages Prototype's class-based OOP system.
 *
 *  Refer to Prototype's web site for a [tutorial on classes and
 *  inheritance](http://prototypejs.org/learn/class-inheritance).
**/
(function(globalContext) {
/* ------------------------------------ */
/* Import from object.js                */
/* ------------------------------------ */
var _toString = Object.prototype.toString,
    
NULL_TYPE = 'Null',
    
UNDEFINED_TYPE = 'Undefined',
    
BOOLEAN_TYPE = 'Boolean',
    
NUMBER_TYPE = 'Number',
    
STRING_TYPE = 'String',
    
OBJECT_TYPE = 'Object',
    
FUNCTION_CLASS = '[object Function]';
function 
isFunction(object) {
  return 
_toString.call(object) === FUNCTION_CLASS;
}
function 
extend(destination, source) {
  for (var 
property in source) if (source.hasOwnProperty(property)) // modify protect primitive slaughter
    
destination[property] = source[property];
  return 
destination;
}
function 
keys(object) {
  if (
Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
  var 
results = [];
  for (var 
property in object) {
    if (
object.hasOwnProperty(property)) {
      
results.push(property);
    }
  }
  return 
results;
}
function 
Type(o) {
  switch(
o) {
    case 
null: return NULL_TYPE;
    case (
void 0): return UNDEFINED_TYPE;
  }
  var 
type = typeof o;
  switch(
type) {
    case 
'boolean': return BOOLEAN_TYPE;
    case 
'number':  return NUMBER_TYPE;
    case 
'string':  return STRING_TYPE;
  }
  return 
OBJECT_TYPE;
}
function 
isUndefined(object) {
  return 
typeof object === "undefined";
}
/* ------------------------------------ */
/* Import from Function.js              */
/* ------------------------------------ */
var slice = Array.prototype.slice;
function 
argumentNames(fn) {
  var 
names = fn.toString().match(/^[s(]*function[^(]*(([^)]*))/)[1]
    .
replace(///.*?[rn]|/*(?:.|[rn])*?*//g, '')
    
.replace(/s+/g, '').split(',');
  return 
names.length == 1 && !names[0] ? [] : names;
}
function 
wrap(fn, wrapper) {
  var 
__method = fn;
  return function() {
    var 
a = update([bind(__method, this)], arguments);
    return 
wrapper.apply(this, a);
  }
}
function 
update(array, args) {
  var 
arrayLength = array.length, length = args.length;
  while (
length--) array[arrayLength + length] = args[length];
  return array;
}
function 
merge(array, args) {
  array = 
slice.call(array, 0);
  return 
update(array, args);
}
function 
bind(fn, context) {
  if (
arguments.length < 2 && isUndefined(arguments[0])) return this;
  var 
__method = fn, args = slice.call(arguments, 2);
  return function() {
    var 
a = merge(args, arguments);
    return 
__method.apply(context, a);
  }
}

/* ------------------------------------ */
/* Import from Prototype.js             */
/* ------------------------------------ */
var emptyFunction = function(){};

var Class = (function() {
  
  
// Some versions of JScript fail to enumerate over properties, names of which 
  // correspond to non-enumerable properties in the prototype chain
  
var IS_DONTENUM_BUGGY = (function(){
    for (var 
p in { toString: 1 }) {
      
// check actual property name, so that it works with augmented Object.prototype
      
if (p === 'toString') return false;
    }
    return 
true;
  })();
  
  function 
subclass() {};
  function 
create() {
    var 
parent = null, properties = [].slice.apply(arguments);
    if (
isFunction(properties[0]))
      
parent = properties.shift();

    function 
klass() {
      
this.initialize.apply(this, arguments);
    }

    
extend(klass, Class.Methods);
    
klass.superclass = parent;
    
klass.subclasses = [];

    if (
parent) {
      
subclass.prototype = parent.prototype;
      
klass.prototype = new subclass;
      try { 
parent.subclasses.push(klass) } catch(e) {}
    }

    for (var 
i = 0, length = properties.length; i < length; i++)
      
klass.addMethods(properties[i]);

    if (!
klass.prototype.initialize)
      
klass.prototype.initialize = emptyFunction;

    
klass.prototype.constructor = klass;
    return 
klass;
  }

  function 
addMethods(source) {
    var 
ancestor   = this.superclass && this.superclass.prototype,
        
properties = keys(source);

    
// IE6 doesn't enumerate `toString` and `valueOf` (among other built-in `Object.prototype`) properties,
    // Force copy if they're not Object.prototype ones.
    // Do not copy other Object.prototype.* for performance reasons
    
if (IS_DONTENUM_BUGGY) {
      if (
source.toString != Object.prototype.toString)
        
properties.push("toString");
      if (
source.valueOf != Object.prototype.valueOf)
        
properties.push("valueOf");
    }

    for (var 
i = 0, length = properties.length; i < length; i++) {
      var 
property = properties[i], value = source[property];
      if (
ancestor && isFunction(value) &&
          
argumentNames(value)[0] == "$super") {
        var 
method = value;
        
value = wrap((function(m) {
          return function() { return 
ancestor[m].apply(this, arguments); };
        })(
property), method);

        
value.valueOf = bind(method.valueOf, method);
        
value.toString = bind(method.toString, method);
      }
      
this.prototype[property] = value;
    }

    return 
this;
  }

  return {
    
create: create,
    
Methods: {
      
addMethods: addMethods
    
}
  };
})();

if (
globalContext.exports) {
  
globalContext.exports.Class = Class;
}
else {
  
globalContext.Class = Class;
}
})(
Rickshaw);
?>
Онлайн: 1
Реклама