emerson 0.0.4 → 0.0.5
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.
data/lib/emerson/version.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
//
|
3
3
|
// Defines the Emerson namespace (global).
|
4
4
|
|
5
|
-
(function(){
|
5
|
+
(function() {
|
6
6
|
|
7
7
|
// Initial Setup
|
8
8
|
// --------------------------------------------------------------------------
|
@@ -21,7 +21,7 @@
|
|
21
21
|
}
|
22
22
|
|
23
23
|
// Current version of the library. Keep in sync with `package.json`.
|
24
|
-
Emerson.VERSION = '0.0.
|
24
|
+
Emerson.VERSION = '0.0.5';
|
25
25
|
|
26
26
|
// Reference the base lib (one of jQuery, Zepto or Ender) as $.
|
27
27
|
var $ = Emerson.base = (root.jQuery || root.Zepto || root.ender);
|
@@ -36,6 +36,7 @@
|
|
36
36
|
// * Given an object the current configuration will be extended with that.
|
37
37
|
// * Given a "dot-notated" string a lookup will be performed.
|
38
38
|
// * With no argument a copy of the current configuration will be returned.
|
39
|
+
// * Given a single argument as `true`, defaults will be restored.
|
39
40
|
//
|
40
41
|
Emerson.config = function config() {
|
41
42
|
var arg = arguments[0];
|
@@ -45,6 +46,10 @@
|
|
45
46
|
return _.clone(configuration);
|
46
47
|
}
|
47
48
|
|
49
|
+
if(arg === true) {
|
50
|
+
configuration = defaults();
|
51
|
+
}
|
52
|
+
|
48
53
|
if(typeof arg === 'string') {
|
49
54
|
result = configuration;
|
50
55
|
|
@@ -57,10 +62,10 @@
|
|
57
62
|
return undefined;
|
58
63
|
}
|
59
64
|
|
60
|
-
return
|
65
|
+
return result;
|
61
66
|
}
|
62
67
|
else {
|
63
|
-
_.
|
68
|
+
_.deepExtend(configuration, arg);
|
64
69
|
}
|
65
70
|
};
|
66
71
|
|
@@ -82,9 +87,72 @@
|
|
82
87
|
};
|
83
88
|
|
84
89
|
|
90
|
+
// Underscore Extension
|
91
|
+
// --------------------------------------------------------------------------
|
92
|
+
|
93
|
+
// ### deepExtend
|
94
|
+
//
|
95
|
+
// * Author: Kurt Milam - http://xioup.com
|
96
|
+
// * https://gist.github.com/1868955
|
97
|
+
_.deepExtend = function(obj) {
|
98
|
+
var parentRE = /#{\s*?_\s*?}/,
|
99
|
+
slice = Array.prototype.slice,
|
100
|
+
hasOwnProperty = Object.prototype.hasOwnProperty;
|
101
|
+
|
102
|
+
_.each(slice.call(arguments, 1), function(source) {
|
103
|
+
for (var prop in source) {
|
104
|
+
if (hasOwnProperty.call(source, prop)) {
|
105
|
+
if (_.isUndefined(obj[prop])) {
|
106
|
+
obj[prop] = source[prop];
|
107
|
+
}
|
108
|
+
else if (_.isString(source[prop]) && parentRE.test(source[prop])) {
|
109
|
+
if (_.isString(obj[prop])) {
|
110
|
+
obj[prop] = source[prop].replace(parentRE, obj[prop]);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
else if (_.isArray(obj[prop]) || _.isArray(source[prop])){
|
114
|
+
if (!_.isArray(obj[prop]) || !_.isArray(source[prop])){
|
115
|
+
throw 'Error: Trying to combine an array with a non-array (' + prop + ')';
|
116
|
+
} else {
|
117
|
+
obj[prop] = _.reject(_.deepExtend(obj[prop], source[prop]), function (item) { return _.isNull(item);});
|
118
|
+
}
|
119
|
+
}
|
120
|
+
else if (_.isObject(obj[prop]) || _.isObject(source[prop])){
|
121
|
+
if (!_.isObject(obj[prop]) || !_.isObject(source[prop])){
|
122
|
+
throw 'Error: Trying to combine an object with a non-object (' + prop + ')';
|
123
|
+
} else {
|
124
|
+
obj[prop] = _.deepExtend(obj[prop], source[prop]);
|
125
|
+
}
|
126
|
+
} else {
|
127
|
+
obj[prop] = source[prop];
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
});
|
132
|
+
return obj;
|
133
|
+
};
|
134
|
+
|
135
|
+
|
85
136
|
// Internal Implementation
|
86
137
|
// --------------------------------------------------------------------------
|
87
138
|
|
139
|
+
// ### defaults
|
140
|
+
// Default configuration.
|
141
|
+
// var defaults = {
|
142
|
+
// attrs : {
|
143
|
+
// view : 'view',
|
144
|
+
// traits : 'traits'
|
145
|
+
// }
|
146
|
+
// };
|
147
|
+
function defaults() {
|
148
|
+
return {
|
149
|
+
attrs : {
|
150
|
+
view : 'view',
|
151
|
+
traits : 'traits'
|
152
|
+
}
|
153
|
+
};
|
154
|
+
}
|
155
|
+
|
88
156
|
// ### configuration
|
89
157
|
// Stores library config, with defaults.
|
90
158
|
//
|
@@ -101,10 +169,5 @@
|
|
101
169
|
// }
|
102
170
|
// });
|
103
171
|
// Emerson.init();
|
104
|
-
var configuration = {
|
105
|
-
attrs : {
|
106
|
-
view : 'view',
|
107
|
-
traits : 'traits'
|
108
|
-
}
|
109
|
-
};
|
172
|
+
var configuration = _.deepExtend({}, defaults());
|
110
173
|
}).call(this);
|
@@ -69,9 +69,9 @@
|
|
69
69
|
// ### sink
|
70
70
|
//
|
71
71
|
// json: <response [action, data, path, view]>
|
72
|
-
// html: <response> (string)
|
73
|
-
// head: <response> single space string
|
72
|
+
// html: <response> (string) ... TODO
|
73
|
+
// head: <response> single space string ... TODO
|
74
74
|
function sink(response, status) {
|
75
|
-
$(response.view).
|
75
|
+
$(response.view).sink();
|
76
76
|
}
|
77
77
|
})(Emerson);
|
@@ -29,17 +29,43 @@
|
|
29
29
|
//
|
30
30
|
// $(target).sink()
|
31
31
|
//
|
32
|
+
// Given "replacement" content and for each "sink" (existing content):
|
33
|
+
//
|
34
|
+
// 1. fire "sink:before" with the sink as the target.
|
35
|
+
// 2. replace the sink with a "prepared" replacement.
|
36
|
+
// 3. fire "sink:after" with the replacement as the target.
|
32
37
|
$.fn.sink = function() {
|
33
38
|
_.each(this, function(e) {
|
34
39
|
var elem = $(e);
|
35
40
|
var key = elem.data('sink');
|
36
41
|
|
37
42
|
if(key) {
|
38
|
-
|
39
|
-
|
43
|
+
$('[data-sink="' + key + '"]').each(function() {
|
44
|
+
$(this)
|
45
|
+
.trigger('sink:before')
|
46
|
+
.replaceWith(prepare(elem));
|
47
|
+
});
|
48
|
+
|
49
|
+
$('[data-sink="' + key + '"]').trigger('sink:after');
|
40
50
|
}
|
41
51
|
});
|
42
52
|
|
43
53
|
return this;
|
44
54
|
};
|
55
|
+
|
56
|
+
|
57
|
+
// Internal Implementation
|
58
|
+
// --------------------------------------------------------------------------
|
59
|
+
|
60
|
+
// ### prepare
|
61
|
+
// Clone the replacement source and, if Emerson.view is defined, apply that.
|
62
|
+
function prepare(source) {
|
63
|
+
var result = source.clone();
|
64
|
+
|
65
|
+
if(Emerson.view) {
|
66
|
+
result.view();
|
67
|
+
}
|
68
|
+
|
69
|
+
return result;
|
70
|
+
}
|
45
71
|
})(Emerson);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emerson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: transcendent views
|
15
15
|
email:
|