1 /*!
  2  * Wef
  3  * Copyright (c) 2011 Pablo Escalada
  4  * MIT Licensed
  5  */
  6 
  7 /**
  8  * wef module
  9  */
 10 (function () {
 11     var wef;
 12     /**
 13      * @namespace
 14      */
 15     wef = function () {
 16         return new wef.prototype.init();
 17     };
 18 
 19     wef.prototype = {
 20         constructor:wef,
 21         /**
 22          * Version number
 23          */
 24         version:"0.2.0",
 25         /**
 26          * @ignore
 27          */
 28         init:function () {
 29             return this;
 30         }
 31     };
 32 
 33     /**
 34      * Extension point
 35      */
 36     wef.fn = wef.prototype;
 37 
 38     /**
 39      * @ignore
 40      */
 41     wef.prototype.init = function () {
 42         return this;
 43     };
 44 
 45     wef.prototype.init.prototype = wef.prototype;
 46 
 47     /**
 48      * Extends an object with other object properties
 49      * @param {Object}receiver receiver object
 50      * @param {Object}giver giver object
 51      * @param {string[]}[filter] array of strings. If giver property name is
 52      * contained in filter is added to receiver, else don't
 53      *
 54      * @memberOf wef
 55      */
 56     wef.fn.extend = function (receiver, giver, filter) {
 57         var tmp = receiver, property;
 58         //both must be objects
 59         if (typeof receiver === "object" && typeof giver === "object") {
 60             if (tmp === null) {
 61                 tmp = {};
 62             }
 63             if (receiver === null) {
 64                 return tmp;
 65             }
 66 
 67             for (property in giver) {
 68                 if ((!filter || filter.indexOf(property) !== -1) && giver.hasOwnProperty(property) && giver[property] !== undefined) {
 69                     tmp[property] = giver[property];
 70                 }
 71             }
 72             return tmp;
 73         }
 74         wef.fn.error("InvalidArgumentException: incorrect argument type");
 75         return null;
 76     };
 77 
 78     wef.fn.hasOwnProperty = function(o, property) {
 79         //literal objects in IE don't have hasOwnProperty
 80         //todo:delete????
 81         return Object.prototype.hasOwnProperty.call(o, property);
 82     };
 83 
 84     /**
 85      * Checks if param is a Function
 86      * @param obj object to check
 87      * @returns {boolean} true if a Function, false if not
 88      *
 89      * @memberOf wef
 90      */
 91     wef.fn.isFunction = function (obj) {
 92         return typeof obj == "function";
 93     };
 94 
 95     /**
 96      * Checks if param is a literal string
 97      * @param obj object to check
 98      * @returns {boolean} true if a literal string, false if not
 99      *
100      * @memberOf wef
101      */
102     wef.fn.isString = function (obj) {
103         return typeof obj == "string";
104     };
105 
106     /**
107      * Throws an Error
108      * @param message error message
109      *
110      * @memberOf wef
111      */
112     wef.fn.error = function (message) {
113         throw new Error(message);
114     };
115 
116     //registering global variable
117     if (window.wef) {
118         throw new Error("wef has already been defined");
119     } else {
120         window.wef = wef();
121     }
122 
123 })();
124