ende 0.4.25 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ ;