ende 0.4.25 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/component.json +0 -1
  4. data/lib/assets/javascripts/aura/extensions/domain.js.coffee +55 -0
  5. data/lib/assets/javascripts/aura/extensions/models.js.coffee.erb +13 -4
  6. data/lib/assets/javascripts/aura/extensions/platform.js.coffee +8 -2
  7. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +10 -21
  8. data/lib/assets/javascripts/aura/extensions/stamps/stampit.js +242 -568
  9. data/lib/assets/javascripts/aura/extensions/widget/composable.js.coffee +18 -35
  10. data/lib/assets/javascripts/config/load_components.js.coffee +7 -5
  11. data/lib/assets/javascripts/widgets/attachable/main.js.coffee +77 -0
  12. data/lib/assets/javascripts/widgets/list/presenter.js.coffee +4 -5
  13. data/lib/assets/javascripts/widgets/support/adapters/olark.js +1 -1
  14. data/lib/assets/javascripts/widgets/tray/main.js.coffee +22 -16
  15. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +4 -8
  16. data/lib/assets/javascripts/widgets/viewer/plugins/scopable.js.coffee +1 -7
  17. data/lib/ende/version.rb +1 -1
  18. data/vendor/assets/components/ende_build.js +463 -5150
  19. data/vendor/components/indefinido-indemma/build/development.js +2 -2
  20. data/vendor/components/indefinido-indemma/build/release.js +4 -5
  21. data/vendor/components/indefinido-indemma/build/test.js +2 -2
  22. data/vendor/components/indefinido-indemma/component.json +1 -0
  23. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +2 -3
  24. data/vendor/components/indefinido-indemma/lib/record/validatable.js +2 -2
  25. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +3 -9
  26. data/vendor/components/indefinido-indemma/src/lib/record/validatable.coffee +3 -3
  27. data/vendor/components/indefinido-observable/component.json +3 -7
  28. data/vendor/components/indefinido-observable/lib/observable.js +19 -9
  29. metadata +4 -60
  30. data/build/build.css +0 -111
  31. data/vendor/assets/javascripts/stampit/stampit.js +0 -392
  32. data/vendor/components/indefinido-observable/.gitignore +0 -15
  33. data/vendor/components/indefinido-observable/.ruby-gemset +0 -1
  34. data/vendor/components/indefinido-observable/.ruby-version +0 -1
  35. data/vendor/components/indefinido-observable/Gemfile +0 -13
  36. data/vendor/components/indefinido-observable/Guardfile +0 -39
  37. data/vendor/components/indefinido-observable/History.md +0 -0
  38. data/vendor/components/indefinido-observable/Readme.md +0 -116
  39. data/vendor/components/indefinido-observable/build/build.js +0 -14798
  40. data/vendor/components/indefinido-observable/build/development.js +0 -339
  41. data/vendor/components/indefinido-observable/build/release.js +0 -14937
  42. data/vendor/components/indefinido-observable/build/test.js +0 -339
  43. data/vendor/components/indefinido-observable/components/chaijs-chai/component.json +0 -46
  44. data/vendor/components/indefinido-observable/components/chaijs-chai/index.js +0 -1
  45. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/assertion.js +0 -132
  46. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/core/assertions.js +0 -1270
  47. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/error.js +0 -60
  48. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/assert.js +0 -1060
  49. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/expect.js +0 -12
  50. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/should.js +0 -76
  51. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +0 -94
  52. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addMethod.js +0 -37
  53. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addProperty.js +0 -40
  54. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/eql.js +0 -124
  55. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/flag.js +0 -32
  56. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getActual.js +0 -19
  57. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +0 -25
  58. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getMessage.js +0 -49
  59. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getName.js +0 -20
  60. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getPathValue.js +0 -102
  61. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getProperties.js +0 -35
  62. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/index.js +0 -108
  63. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/inspect.js +0 -316
  64. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/objDisplay.js +0 -48
  65. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +0 -51
  66. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +0 -54
  67. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/test.js +0 -26
  68. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/transferFlags.js +0 -44
  69. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/type.js +0 -45
  70. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai.js +0 -79
  71. data/vendor/components/indefinido-observable/components/cjohansen-sinon/sinon.js +0 -4290
  72. data/vendor/components/indefinido-observable/components/component-jquery/component.json +0 -14
  73. data/vendor/components/indefinido-observable/components/component-jquery/index.js +0 -9601
  74. data/vendor/components/indefinido-observable/components/kapit-observe-shim/component.json +0 -11
  75. data/vendor/components/indefinido-observable/components/kapit-observe-utils/component.json +0 -13
  76. data/vendor/components/indefinido-observable/karma.conf.js +0 -92
  77. data/vendor/components/indefinido-observable/spec/legacy/observable_spec.js +0 -126
  78. data/vendor/components/indefinido-observable/spec/observable_spec.js +0 -92
  79. data/vendor/components/indefinido-observable/spec/spec_helper.js +0 -8
  80. data/vendor/components/indefinido-observable/spec/vendor/accessors_spec.js +0 -63
  81. data/vendor/components/indefinido-observable/src/lib/adapters/rivets.js.coffee +0 -15
  82. data/vendor/components/indefinido-observable/src/spec/legacy/observable_spec.coffee +0 -132
  83. data/vendor/components/indefinido-observable/src/spec/observable_spec.coffee +0 -85
  84. data/vendor/components/indefinido-observable/src/spec/spec_helper.coffee +0 -5
  85. data/vendor/components/indefinido-observable/src/spec/vendor/accessors_spec.coffee +0 -59
  86. data/vendor/components/indefinido-observable/vendor/spec/boot.js +0 -104
  87. data/vendor/components/indefinido-observable/vendor/spec/jasmine.js +0 -2054
@@ -1,24 +1,5 @@
1
- !function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.stampit=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2
- var forIn = _dereq_('mout/object/forIn');
3
-
4
- function copyProp(val, key){
5
- this[key] = val;
6
- }
7
-
8
- module.exports = function mixInChain(target, objects){
9
- var i = 0,
10
- n = arguments.length,
11
- obj;
12
- while(++i < n){
13
- obj = arguments[i];
14
- if (obj != null) {
15
- forIn(obj, copyProp, target);
16
- }
17
- }
18
- return target;
19
- };
20
-
21
- },{"mout/object/forIn":14}],2:[function(_dereq_,module,exports){
1
+ (function(e){if("function"==typeof bootstrap)bootstrap("stampit",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeStampit=e}else"undefined"!=typeof window?window.stampit=e():global.stampit=e()})(function(){var define,ses,bootstrap,module,exports;
2
+ return (function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
22
3
 
23
4
 
24
5
  /**
@@ -43,311 +24,306 @@ module.exports = function mixInChain(target, objects){
43
24
 
44
25
 
45
26
 
46
- },{}],3:[function(_dereq_,module,exports){
47
- var forEach = _dereq_('./forEach');
48
- var makeIterator = _dereq_('../function/makeIterator_');
27
+ },{}],2:[function(require,module,exports){
49
28
 
50
- /**
51
- * Array map
52
- */
53
- function map(arr, callback, thisObj) {
54
- callback = makeIterator(callback, thisObj);
55
- var results = [];
56
- if (arr == null){
57
- return results;
58
- }
59
-
60
- var i = -1, len = arr.length;
61
- while (++i < len) {
62
- results[i] = callback(arr[i], i, arr);
63
- }
64
29
 
65
- return results;
30
+ function slice(arr, offset){
31
+ return Array.prototype.slice.call(arr, offset || 0);
66
32
  }
67
33
 
68
- module.exports = map;
69
-
70
-
71
- },{"../function/makeIterator_":4,"./forEach":2}],4:[function(_dereq_,module,exports){
72
- var prop = _dereq_('./prop');
73
- var deepMatches = _dereq_('../object/deepMatches');
74
-
75
- /**
76
- * Converts argument into a valid iterator.
77
- * Used internally on most array/object/collection methods that receives a
78
- * callback/iterator providing a shortcut syntax.
79
- */
80
- function makeIterator(src, thisObj){
81
- switch(typeof src) {
82
- case 'object':
83
- // typeof null == "object"
84
- return (src != null)? function(val, key, target){
85
- return deepMatches(val, src);
86
- } : src;
87
- case 'string':
88
- case 'number':
89
- return prop(src);
90
- case 'function':
91
- if (typeof thisObj === 'undefined') {
92
- return src;
93
- } else {
94
- return function(val, i, arr){
95
- return src.call(thisObj, val, i, arr);
96
- };
97
- }
98
- default:
99
- return src;
100
- }
101
- }
102
-
103
- module.exports = makeIterator;
104
-
105
-
106
-
107
- },{"../object/deepMatches":13,"./prop":5}],5:[function(_dereq_,module,exports){
108
-
109
-
110
34
  /**
111
- * Returns a function that gets a property of the passed object
35
+ * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection.
36
+ * @param {Function} fn Function.
37
+ * @param {object} context Execution context.
38
+ * @param {rest} args Arguments (0...n arguments).
39
+ * @return {Function} Wrapped Function.
112
40
  */
113
- function prop(name){
114
- return function(obj){
115
- return obj[name];
41
+ function bind(fn, context, args){
42
+ var argsArr = slice(arguments, 2); //curried args
43
+ return function(){
44
+ return fn.apply(context, argsArr.concat(slice(arguments)));
116
45
  };
117
46
  }
118
47
 
119
- module.exports = prop;
48
+ module.exports = bind;
120
49
 
121
50
 
122
51
 
123
- },{}],6:[function(_dereq_,module,exports){
124
- var kindOf = _dereq_('./kindOf');
125
- var isPlainObject = _dereq_('./isPlainObject');
126
- var mixIn = _dereq_('../object/mixIn');
52
+ },{}],3:[function(require,module,exports){
53
+ var shimIndexOf = function shimIndexOf() {
127
54
 
128
- /**
129
- * Clone native types.
130
- */
131
- function clone(val){
132
- switch (kindOf(val)) {
133
- case 'Object':
134
- return cloneObject(val);
135
- case 'Array':
136
- return cloneArray(val);
137
- case 'RegExp':
138
- return cloneRegExp(val);
139
- case 'Date':
140
- return cloneDate(val);
141
- default:
142
- return val;
55
+ if (!Array.prototype.indexOf) {
56
+ Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
57
+ "use strict";
58
+ if (this == null) {
59
+ throw new TypeError();
60
+ }
61
+ var t = Object(this);
62
+ var len = t.length >>> 0;
63
+ if (len === 0) {
64
+ return -1;
65
+ }
66
+ var n = 0;
67
+ if (arguments.length > 1) {
68
+ n = Number(arguments[1]);
69
+ if (n != n) { // shortcut for verifying if it's NaN
70
+ n = 0;
71
+ } else if (n != 0 && n != Infinity && n != -Infinity) {
72
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
73
+ }
74
+ }
75
+ if (n >= len) {
76
+ return -1;
77
+ }
78
+ var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
79
+ for (; k < len; k++) {
80
+ if (k in t && t[k] === searchElement) {
81
+ return k;
82
+ }
83
+ }
84
+ return -1;
143
85
  }
144
86
  }
145
87
 
146
- function cloneObject(source) {
147
- if (isPlainObject(source)) {
148
- return mixIn({}, source);
149
- } else {
150
- return source;
151
- }
152
- }
88
+ }
153
89
 
154
- function cloneRegExp(r) {
155
- var flags = '';
156
- flags += r.multiline ? 'm' : '';
157
- flags += r.global ? 'g' : '';
158
- flags += r.ignorecase ? 'i' : '';
159
- return new RegExp(r.source, flags);
160
- }
90
+ module.exports = shimIndexOf;
161
91
 
162
- function cloneDate(date) {
163
- return new Date(+date);
164
- }
92
+ },{}],4:[function(require,module,exports){
93
+ /**
94
+ * Stampit
95
+ **
96
+ * Create objects from reusable, composable behaviors.
97
+ **
98
+ * Copyright (c) 2013 Eric Elliott
99
+ * http://opensource.org/licenses/MIT
100
+ **/
165
101
 
166
- function cloneArray(arr) {
167
- return arr.slice();
168
- }
102
+ 'use strict';
103
+ var forEach = require('mout/array/forEach');
104
+ var bind = require('mout/function/bind');
105
+ var mixIn = require('mout/object/mixIn');
106
+ var stringify = require('json-stringify-safe');
107
+ var indexOf = require('./indexof'); // shim indexOf for stringify
169
108
 
170
- module.exports = clone;
109
+ var create = function (o) {
110
+ if (arguments.length > 1) {
111
+ throw new Error('Object.create implementation only accepts the first parameter.');
112
+ }
113
+ function F() {}
114
+ F.prototype = o;
115
+ return new F();
116
+ };
171
117
 
118
+ /**
119
+ * Return a factory function that will produce new objects using the
120
+ * prototypes that are passed in or composed.
121
+ *
122
+ * @param {Object} [methods] A map of method names and bodies for delegation.
123
+ * @param {Object} [state] A map of property names and values to clone for each new object.
124
+ * @param {Function} [enclose] A closure (function) used to create private data and privileged methods.
125
+ * @return {Function} factory A factory to produce objects using the given prototypes.
126
+ * @return {Function} factory.create Just like calling the factory function.
127
+ * @return {Object} factory.fixed An object map containing the fixed prototypes.
128
+ * @return {Function} factory.methods Add methods to the methods prototype. Chainable.
129
+ * @return {Function} factory.state Add properties to the state prototype. Chainable.
130
+ * @return {Function} factory.enclose Add or replace the closure prototype. Not chainable.
131
+ */
132
+ var stampit = function stampit(methods, state, enclose) {
133
+ var fixed = {
134
+ methods: methods || {},
135
+ state: state ?
136
+ JSON.parse(stringify(state)) :
137
+ {},
138
+ enclose: enclose
139
+ },
172
140
 
141
+ factory = function factory(properties, enclose) {
142
+ var instance = mixIn(create(fixed.methods || {}),
143
+ fixed.state, properties),
144
+ alt;
173
145
 
174
- },{"../object/mixIn":18,"./isPlainObject":11,"./kindOf":12}],7:[function(_dereq_,module,exports){
175
- var clone = _dereq_('./clone');
176
- var forOwn = _dereq_('../object/forOwn');
177
- var kindOf = _dereq_('./kindOf');
178
- var isPlainObject = _dereq_('./isPlainObject');
146
+ if (typeof fixed.enclose === 'function') {
147
+ alt = fixed.enclose.call(instance);
148
+ }
179
149
 
180
- /**
181
- * Recursively clone native types.
182
- */
183
- function deepClone(val, instanceClone) {
184
- switch ( kindOf(val) ) {
185
- case 'Object':
186
- return cloneObject(val, instanceClone);
187
- case 'Array':
188
- return cloneArray(val, instanceClone);
189
- default:
190
- return clone(val);
191
- }
192
- }
150
+ if (typeof enclose === 'function') {
151
+ alt = enclose.call(alt || instance);
152
+ }
193
153
 
194
- function cloneObject(source, instanceClone) {
195
- if (isPlainObject(source)) {
196
- var out = {};
197
- forOwn(source, function(val, key) {
198
- this[key] = deepClone(val, instanceClone);
199
- }, out);
200
- return out;
201
- } else if (instanceClone) {
202
- return instanceClone(source);
203
- } else {
204
- return source;
205
- }
206
- }
154
+ return alt || instance;
155
+ };
207
156
 
208
- function cloneArray(arr, instanceClone) {
209
- var out = [],
210
- i = -1,
211
- n = arr.length,
212
- val;
213
- while (++i < n) {
214
- out[i] = deepClone(arr[i], instanceClone);
215
- }
216
- return out;
157
+ return mixIn(factory, {
158
+ create: factory,
159
+ fixed: fixed,
160
+ methods: function () {
161
+ var obj = fixed.methods || {},
162
+ args = [obj].concat([].slice.call(arguments));
163
+ fixed.methods = mixIn.apply(this, args);
164
+ return this;
165
+ },
166
+ state: function (state) {
167
+ var obj = fixed.state || {},
168
+ args = [obj].concat([].slice.call(arguments));
169
+ fixed.state = mixIn.apply(this, args);
170
+ return this;
171
+ },
172
+ enclose: function (enclose) {
173
+ fixed.enclose = enclose;
174
+ return this;
217
175
  }
176
+ });
177
+ };
218
178
 
219
- module.exports = deepClone;
220
-
179
+ /**
180
+ * Take two or more factories produced from stampit() and
181
+ * combine them to produce a new factory. Combining overrides
182
+ * properties with last-in priority.
183
+ *
184
+ * @param {...Function} factory A factory produced by stampit().
185
+ * @return {Function} A new stampit factory composed from arguments.
186
+ */
187
+ var compose = function compose() {
188
+ var args = [].slice.call(arguments),
189
+ initFunctions = [],
190
+ obj = stampit(),
191
+ props = ['methods', 'state'];
221
192
 
193
+ forEach(args, function (source) {
194
+ if (source) {
195
+ forEach(props, function (prop) {
196
+ if (source.fixed[prop]) {
197
+ obj.fixed[prop] = mixIn(obj.fixed[prop],
198
+ source.fixed[prop]);
199
+ }
200
+ });
222
201
 
202
+ if (typeof source.fixed.enclose === 'function') {
203
+ initFunctions.push(source.fixed.enclose);
204
+ }
205
+ }
206
+ });
223
207
 
224
- },{"../object/forOwn":15,"./clone":6,"./isPlainObject":11,"./kindOf":12}],8:[function(_dereq_,module,exports){
225
- var isKind = _dereq_('./isKind');
226
- /**
227
- */
228
- var isArray = Array.isArray || function (val) {
229
- return isKind(val, 'Array');
230
- };
231
- module.exports = isArray;
208
+ return stampit(obj.fixed.methods, obj.fixed.state, function () {
209
+ forEach(initFunctions, bind(function (fn) {
210
+ fn.call(this);
211
+ }, this));
212
+ });
213
+ };
232
214
 
215
+ indexOf();
233
216
 
234
- },{"./isKind":9}],9:[function(_dereq_,module,exports){
235
- var kindOf = _dereq_('./kindOf');
236
- /**
237
- * Check if value is from a specific "kind".
238
- */
239
- function isKind(val, kind){
240
- return kindOf(val) === kind;
241
- }
242
- module.exports = isKind;
217
+ module.exports = mixIn(stampit, {
218
+ compose: compose,
219
+ /**
220
+ * Alias for mixIn
221
+ */
222
+ extend: mixIn,
223
+ /**
224
+ * Take a destination object followed by one or more source objects,
225
+ * and copy the source object properties to the destination object,
226
+ * with last in priority overrides.
227
+ * @param {Object} destination An object to copy properties to.
228
+ * @param {...Object} source An object to copy properties from.
229
+ * @returns {Object}
230
+ */
231
+ mixIn: mixIn
232
+ });
243
233
 
234
+ },{"mout/array/forEach":1,"mout/function/bind":2,"mout/object/mixIn":5,"./indexof":3,"json-stringify-safe":6}],6:[function(require,module,exports){
235
+ module.exports = stringify;
244
236
 
245
- },{"./kindOf":12}],10:[function(_dereq_,module,exports){
246
- var isKind = _dereq_('./isKind');
247
- /**
248
- */
249
- function isObject(val) {
250
- return isKind(val, 'Object');
237
+ function getSerialize (fn, decycle) {
238
+ var seen = [];
239
+ decycle = decycle || function(key, value) {
240
+ return '[Circular]';
241
+ };
242
+ return function(key, value) {
243
+ var ret = value;
244
+ if (typeof value === 'object' && value) {
245
+ if (seen.indexOf(value) !== -1)
246
+ ret = decycle(key, value);
247
+ else
248
+ seen.push(value);
251
249
  }
252
- module.exports = isObject;
250
+ if (fn) ret = fn(key, ret);
251
+ return ret;
252
+ }
253
+ }
253
254
 
255
+ function stringify(obj, fn, spaces, decycle) {
256
+ return JSON.stringify(obj, getSerialize(fn, decycle), spaces);
257
+ }
254
258
 
255
- },{"./isKind":9}],11:[function(_dereq_,module,exports){
259
+ stringify.getSerialize = getSerialize;
256
260
 
261
+ },{}],5:[function(require,module,exports){
262
+ var forOwn = require('./forOwn');
257
263
 
258
264
  /**
259
- * Checks if the value is created by the `Object` constructor.
260
- */
261
- function isPlainObject(value) {
262
- return (!!value
263
- && typeof value === 'object'
264
- && value.constructor === Object);
265
+ * Combine properties from all the objects into first one.
266
+ * - This method affects target object in place, if you want to create a new Object pass an empty object as first param.
267
+ * @param {object} target Target Object
268
+ * @param {...object} objects Objects to be combined (0...n objects).
269
+ * @return {object} Target Object.
270
+ */
271
+ function mixIn(target, objects){
272
+ var i = 0,
273
+ n = arguments.length,
274
+ obj;
275
+ while(++i < n){
276
+ obj = arguments[i];
277
+ if (obj != null) {
278
+ forOwn(obj, copyProp, target);
279
+ }
280
+ }
281
+ return target;
265
282
  }
266
283
 
267
- module.exports = isPlainObject;
268
-
269
-
284
+ function copyProp(val, key){
285
+ this[key] = val;
286
+ }
270
287
 
271
- },{}],12:[function(_dereq_,module,exports){
288
+ module.exports = mixIn;
272
289
 
273
290
 
274
- var _rKind = /^\[object (.*)\]$/,
275
- _toString = Object.prototype.toString,
276
- UNDEF;
291
+ },{"./forOwn":7}],7:[function(require,module,exports){
292
+ var hasOwn = require('./hasOwn');
293
+ var forIn = require('./forIn');
277
294
 
278
295
  /**
279
- * Gets the "kind" of value. (e.g. "String", "Number", etc)
296
+ * Similar to Array/forEach but works over object properties and fixes Don't
297
+ * Enum bug on IE.
298
+ * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
280
299
  */
281
- function kindOf(val) {
282
- if (val === null) {
283
- return 'Null';
284
- } else if (val === UNDEF) {
285
- return 'Undefined';
286
- } else {
287
- return _rKind.exec( _toString.call(val) )[1];
288
- }
289
- }
290
- module.exports = kindOf;
291
-
292
-
293
- },{}],13:[function(_dereq_,module,exports){
294
- var forOwn = _dereq_('./forOwn');
295
- var isArray = _dereq_('../lang/isArray');
296
-
297
- function containsMatch(array, pattern) {
298
- var i = -1, length = array.length;
299
- while (++i < length) {
300
- if (deepMatches(array[i], pattern)) {
301
- return true;
300
+ function forOwn(obj, fn, thisObj){
301
+ forIn(obj, function(val, key){
302
+ if (hasOwn(obj, key)) {
303
+ return fn.call(thisObj, obj[key], key, obj);
302
304
  }
303
- }
304
-
305
- return false;
305
+ });
306
306
  }
307
307
 
308
- function matchArray(target, pattern) {
309
- var i = -1, patternLength = pattern.length;
310
- while (++i < patternLength) {
311
- if (!containsMatch(target, pattern[i])) {
312
- return false;
313
- }
314
- }
308
+ module.exports = forOwn;
315
309
 
316
- return true;
317
- }
318
310
 
319
- function matchObject(target, pattern) {
320
- var result = true;
321
- forOwn(pattern, function(val, key) {
322
- if (!deepMatches(target[key], val)) {
323
- // Return false to break out of forOwn early
324
- return (result = false);
325
- }
326
- });
327
311
 
328
- return result;
329
- }
312
+ },{"./hasOwn":8,"./forIn":9}],8:[function(require,module,exports){
313
+
330
314
 
331
315
  /**
332
- * Recursively check if the objects match.
316
+ * Safer Object.hasOwnProperty
333
317
  */
334
- function deepMatches(target, pattern){
335
- if (target && typeof target === 'object') {
336
- if (isArray(target) && isArray(pattern)) {
337
- return matchArray(target, pattern);
338
- } else {
339
- return matchObject(target, pattern);
340
- }
341
- } else {
342
- return target === pattern;
343
- }
344
- }
318
+ function hasOwn(obj, prop){
319
+ return Object.prototype.hasOwnProperty.call(obj, prop);
320
+ }
345
321
 
346
- module.exports = deepMatches;
322
+ module.exports = hasOwn;
347
323
 
348
324
 
349
325
 
350
- },{"../lang/isArray":8,"./forOwn":15}],14:[function(_dereq_,module,exports){
326
+ },{}],9:[function(require,module,exports){
351
327
 
352
328
 
353
329
  var _hasDontEnumBug,
@@ -411,308 +387,6 @@ var isArray = _dereq_('../lang/isArray');
411
387
 
412
388
 
413
389
 
414
- },{}],15:[function(_dereq_,module,exports){
415
- var hasOwn = _dereq_('./hasOwn');
416
- var forIn = _dereq_('./forIn');
417
-
418
- /**
419
- * Similar to Array/forEach but works over object properties and fixes Don't
420
- * Enum bug on IE.
421
- * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
422
- */
423
- function forOwn(obj, fn, thisObj){
424
- forIn(obj, function(val, key){
425
- if (hasOwn(obj, key)) {
426
- return fn.call(thisObj, obj[key], key, obj);
427
- }
428
- });
429
- }
430
-
431
- module.exports = forOwn;
432
-
433
-
434
-
435
- },{"./forIn":14,"./hasOwn":16}],16:[function(_dereq_,module,exports){
436
-
437
-
438
- /**
439
- * Safer Object.hasOwnProperty
440
- */
441
- function hasOwn(obj, prop){
442
- return Object.prototype.hasOwnProperty.call(obj, prop);
443
- }
444
-
445
- module.exports = hasOwn;
446
-
447
-
448
-
449
- },{}],17:[function(_dereq_,module,exports){
450
- var hasOwn = _dereq_('./hasOwn');
451
- var deepClone = _dereq_('../lang/deepClone');
452
- var isObject = _dereq_('../lang/isObject');
453
-
454
- /**
455
- * Deep merge objects.
456
- */
457
- function merge() {
458
- var i = 1,
459
- key, val, obj, target;
460
-
461
- // make sure we don't modify source element and it's properties
462
- // objects are passed by reference
463
- target = deepClone( arguments[0] );
464
-
465
- while (obj = arguments[i++]) {
466
- for (key in obj) {
467
- if ( ! hasOwn(obj, key) ) {
468
- continue;
469
- }
470
-
471
- val = obj[key];
472
-
473
- if ( isObject(val) && isObject(target[key]) ){
474
- // inception, deep merge objects
475
- target[key] = merge(target[key], val);
476
- } else {
477
- // make sure arrays, regexp, date, objects are cloned
478
- target[key] = deepClone(val);
479
- }
480
-
481
- }
482
- }
483
-
484
- return target;
485
- }
486
-
487
- module.exports = merge;
488
-
489
-
490
-
491
- },{"../lang/deepClone":7,"../lang/isObject":10,"./hasOwn":16}],18:[function(_dereq_,module,exports){
492
- var forOwn = _dereq_('./forOwn');
493
-
494
- /**
495
- * Combine properties from all the objects into first one.
496
- * - This method affects target object in place, if you want to create a new Object pass an empty object as first param.
497
- * @param {object} target Target Object
498
- * @param {...object} objects Objects to be combined (0...n objects).
499
- * @return {object} Target Object.
500
- */
501
- function mixIn(target, objects){
502
- var i = 0,
503
- n = arguments.length,
504
- obj;
505
- while(++i < n){
506
- obj = arguments[i];
507
- if (obj != null) {
508
- forOwn(obj, copyProp, target);
509
- }
510
- }
511
- return target;
512
- }
513
-
514
- function copyProp(val, key){
515
- this[key] = val;
516
- }
517
-
518
- module.exports = mixIn;
519
-
520
-
521
- },{"./forOwn":15}],19:[function(_dereq_,module,exports){
522
- /**
523
- * Stampit
524
- **
525
- * Create objects from reusable, composable behaviors.
526
- **
527
- * Copyright (c) 2013 Eric Elliott
528
- * http://opensource.org/licenses/MIT
529
- **/
530
- 'use strict';
531
- var forEach = _dereq_('mout/array/forEach');
532
- var mixIn = _dereq_('mout/object/mixIn');
533
- var merge = _dereq_('mout/object/merge');
534
- var map = _dereq_('mout/array/map');
535
- var forOwn = _dereq_('mout/object/forOwn');
536
- var mixInChain = _dereq_('./mixinchain.js');
537
- var slice = [].slice;
538
-
539
- var create = function (o) {
540
- if (arguments.length > 1) {
541
- throw new Error('Object.create implementation only accepts the first parameter.');
542
- }
543
- function F() {}
544
- F.prototype = o;
545
- return new F();
546
- };
547
-
548
- if(!Array.isArray) {
549
- Array.isArray = function (vArg) {
550
- return Object.prototype.toString.call(vArg) === "[object Array]";
551
- };
552
- }
553
-
554
- var extractFunctions = function extractFunctions(arg) {
555
- var arr = [],
556
- args = [].slice.call(arguments);
557
-
558
- if (typeof arg === 'function') {
559
- arr = map(args, function (fn) {
560
- if (typeof fn === 'function') {
561
- return fn;
562
- }
563
- });
564
- } else if (typeof arg === 'object') {
565
- forEach(args, function (obj) {
566
- forOwn(obj, function (fn) {
567
- arr.push(fn);
568
- });
569
- });
570
- } else if ( Array.isArray(arg) ) {
571
- forEach(arg, function (fn) {
572
- arr.push(fn);
573
- });
574
- }
575
- return arr;
576
- };
577
-
578
- /**
579
- * Return a factory function that will produce new objects using the
580
- * prototypes that are passed in or composed.
581
- *
582
- * @param {Object} [methods] A map of method names and bodies for delegation.
583
- * @param {Object} [state] A map of property names and values to clone for each new object.
584
- * @param {Function} [enclose] A closure (function) used to create private data and privileged methods.
585
- * @return {Function} factory A factory to produce objects using the given prototypes.
586
- * @return {Function} factory.create Just like calling the factory function.
587
- * @return {Object} factory.fixed An object map containing the fixed prototypes.
588
- * @return {Function} factory.methods Add methods to the methods prototype. Chainable.
589
- * @return {Function} factory.state Add properties to the state prototype. Chainable.
590
- * @return {Function} factory.enclose Add or replace the closure prototype. Not chainable.
591
- */
592
- var stampit = function stampit(methods, state, enclose) {
593
- var fixed = {
594
- methods: methods || {},
595
- state: state,
596
- enclose: extractFunctions(enclose)
597
- },
598
-
599
- factory = function factory(properties) {
600
- var state = merge({}, fixed.state),
601
- instance = mixIn(create(fixed.methods || {}),
602
- state, properties),
603
- closures = fixed.enclose,
604
- args = slice.call(arguments, 1);
605
-
606
- forEach(closures, function (fn) {
607
- if (typeof fn === 'function') {
608
- instance = fn.apply(instance, args) || instance;
609
- }
610
- });
611
-
612
- return instance;
613
- };
614
-
615
- return mixIn(factory, {
616
- create: factory,
617
- fixed: fixed,
618
- /**
619
- * Take n objects and add them to the methods prototype.
620
- * @return {Object} stamp The factory in question (`this`).
621
- */
622
- methods: function stampMethods() {
623
- var obj = fixed.methods || {},
624
- args = [obj].concat([].slice.call(arguments));
625
- fixed.methods = mixInChain.apply(this, args);
626
- return this;
627
- },
628
- /**
629
- * Take n objects and add them to the state prototype.
630
- * @return {Object} stamp The factory in question (`this`).
631
- */
632
- state: function stampState() {
633
- var obj = fixed.state || {},
634
- args = [obj].concat([].slice.call(arguments));
635
- fixed.state = mixIn.apply(this, args);
636
- return this;
637
- },
638
- /**
639
- * Take n functions, an array of functions, or n objects and add
640
- * the functions to the enclose prototype.
641
- * @return {Object} stamp The factory in question (`this`).
642
- */
643
- enclose: function stampEnclose() {
644
- fixed.enclose = fixed.enclose
645
- .concat( extractFunctions.apply(null, arguments) );
646
- return this;
647
- }
648
- });
649
- };
650
-
651
- /**
652
- * Take two or more factories produced from stampit() and
653
- * combine them to produce a new factory. Combining overrides
654
- * properties with last-in priority.
655
- *
656
- * @param {...Function} factory A factory produced by stampit().
657
- * @return {Function} A new stampit factory composed from arguments.
658
- */
659
- var compose = function compose() {
660
- var args = [].slice.call(arguments),
661
- obj = stampit();
662
-
663
- forEach(args, function (source) {
664
- if (source) {
665
- if (source.fixed.methods) {
666
- obj.fixed.methods = mixInChain({}, obj.fixed.methods,
667
- source.fixed.methods);
668
- }
669
-
670
- if (source.fixed.state) {
671
- obj.fixed.state = mixIn({}, obj.fixed.state,
672
- source.fixed.state);
673
- }
674
-
675
- if (source.fixed.enclose) {
676
- obj.fixed.enclose = obj.fixed.enclose
677
- .concat(source.fixed.enclose);
678
- }
679
- }
680
- });
681
-
682
- return stampit(obj.fixed.methods, obj.fixed.state,
683
- obj.fixed.enclose);
684
- };
685
-
686
- /**
687
- * Take an old-fashioned JS constructor and return a stampit stamp
688
- * that you can freely compose with other stamps.
689
- * @param {Function} Constructor
690
- * @return {Function} A composable stampit factory
691
- * (aka stamp).
692
- */
693
- var convertConstructor = function convertConstructor(Constructor) {
694
- return stampit().methods(Constructor.prototype).enclose(Constructor);
695
- };
696
-
697
- module.exports = mixIn(stampit, {
698
- compose: compose,
699
- /**
700
- * Alias for mixIn
701
- */
702
- extend: mixIn,
703
- /**
704
- * Take a destination object followed by one or more source objects,
705
- * and copy the source object properties to the destination object,
706
- * with last in priority overrides.
707
- * @param {Object} destination An object to copy properties to.
708
- * @param {...Object} source An object to copy properties from.
709
- * @returns {Object}
710
- */
711
- mixIn: mixIn,
712
-
713
- convertConstructor: convertConstructor
390
+ },{}]},{},[4])(4)
714
391
  });
715
-
716
- },{"./mixinchain.js":1,"mout/array/forEach":2,"mout/array/map":3,"mout/object/forOwn":15,"mout/object/merge":17,"mout/object/mixIn":18}]},{},[19])
717
- (19)
718
- });
392
+ ;