emerson 0.0.7 → 0.0.8
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
@@ -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.8';
|
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);
|
@@ -45,32 +45,31 @@
|
|
45
45
|
// Pass an `override` argument to target a specific sink, say:
|
46
46
|
//
|
47
47
|
// data-sink="modal"
|
48
|
+
//
|
49
|
+
// Strategies:
|
50
|
+
//
|
51
|
+
// * `replace` (default)
|
52
|
+
// * `inner`
|
53
|
+
// * `prepend`
|
54
|
+
// * `append`
|
55
|
+
// * `before`
|
56
|
+
// * `after`
|
57
|
+
//
|
58
|
+
// data-sink"modal:inner"
|
59
|
+
//
|
48
60
|
$.fn.sink = function(override) {
|
49
61
|
_.each(this, function(e) {
|
50
|
-
var
|
51
|
-
var key
|
52
|
-
var selector, matches;
|
62
|
+
var element = $(e);
|
63
|
+
var key = override || element.data('sink');
|
64
|
+
var selector, matches, count;
|
53
65
|
|
54
66
|
if(key) {
|
55
|
-
selector = '[data-sink
|
67
|
+
selector = '[data-sink^="' + key + '"]';
|
56
68
|
matches = $(selector);
|
69
|
+
count = matches.length;
|
57
70
|
|
58
|
-
if(
|
59
|
-
matches
|
60
|
-
var replacement = prepare(elem.clone(true));
|
61
|
-
|
62
|
-
$(this)
|
63
|
-
.trigger('sink:before')
|
64
|
-
.replaceWith(replacement);
|
65
|
-
|
66
|
-
replacement.trigger('sink:after');
|
67
|
-
});
|
68
|
-
}
|
69
|
-
else {
|
70
|
-
matches.trigger('sink:before');
|
71
|
-
prepare(elem)
|
72
|
-
.replaceAll(matches)
|
73
|
-
.trigger('sink:after');
|
71
|
+
if(count) {
|
72
|
+
process(element, matches);
|
74
73
|
}
|
75
74
|
}
|
76
75
|
});
|
@@ -82,6 +81,18 @@
|
|
82
81
|
// Internal Implementation
|
83
82
|
// --------------------------------------------------------------------------
|
84
83
|
|
84
|
+
var strategies = {
|
85
|
+
replace : $.fn.replaceAll,
|
86
|
+
inner : function(target) {
|
87
|
+
target.empty();
|
88
|
+
return this.appendTo(target);
|
89
|
+
},
|
90
|
+
prepend : $.fn.prependTo,
|
91
|
+
append : $.fn.appendTo,
|
92
|
+
before : $.fn.insertBefore,
|
93
|
+
after : $.fn.insertAfter
|
94
|
+
};
|
95
|
+
|
85
96
|
// ### prepare
|
86
97
|
// Clone the replacement source and, if Emerson.view is defined, apply that.
|
87
98
|
function prepare(source) {
|
@@ -93,4 +104,32 @@
|
|
93
104
|
|
94
105
|
return result;
|
95
106
|
}
|
107
|
+
|
108
|
+
// ### process
|
109
|
+
// ...
|
110
|
+
function process(element, matches) {
|
111
|
+
var parts, strategy, clone;
|
112
|
+
|
113
|
+
if(matches.length > 1) {
|
114
|
+
matches.each(function() {
|
115
|
+
clone = prepare(element.clone(true));
|
116
|
+
parts = $(this).data('sink').split(':');
|
117
|
+
strategy = parts[1] || 'replace';
|
118
|
+
|
119
|
+
$(this).trigger('sink:before');
|
120
|
+
strategies[strategy].call(clone, $(this))
|
121
|
+
.trigger('sink:after');
|
122
|
+
|
123
|
+
clone.trigger('sink:after');
|
124
|
+
});
|
125
|
+
}
|
126
|
+
else {
|
127
|
+
parts = matches.data('sink').split(':');
|
128
|
+
strategy = parts[1] || 'replace';
|
129
|
+
|
130
|
+
matches.trigger('sink:before');
|
131
|
+
strategies[strategy].call(prepare(element), matches)
|
132
|
+
.trigger('sink:after');
|
133
|
+
}
|
134
|
+
}
|
96
135
|
})(Emerson);
|
@@ -213,8 +213,16 @@
|
|
213
213
|
// 2. A "subclass", extended with the View prototype.
|
214
214
|
function construct(name, setup) {
|
215
215
|
var sub = _.extend($sub(), {
|
216
|
-
constructor
|
217
|
-
setup
|
216
|
+
constructor : View,
|
217
|
+
setup : _.extend({
|
218
|
+
initialize : function() {},
|
219
|
+
connected : false,
|
220
|
+
subscribe : {},
|
221
|
+
}, setup),
|
222
|
+
// experimental... allows for easier spec'ing of a view/trait
|
223
|
+
build : function build(element, mode) {
|
224
|
+
return instance(this, element, mode);
|
225
|
+
}
|
218
226
|
});
|
219
227
|
|
220
228
|
_.extend(sub.fn, View.prototype);
|
@@ -222,6 +230,21 @@
|
|
222
230
|
return sub;
|
223
231
|
}
|
224
232
|
|
233
|
+
// ### instance
|
234
|
+
// experimental (see `build` definition in `construct`).
|
235
|
+
function instance(def, element, mode) {
|
236
|
+
var setup = def.setup;
|
237
|
+
var built = def(element, element.context);
|
238
|
+
built.connect(setup.connected);
|
239
|
+
|
240
|
+
_.each(setup.subscribe, function(handler, key) {
|
241
|
+
bind(built, key, handler);
|
242
|
+
});
|
243
|
+
|
244
|
+
setup.initialize.call(built, mode);
|
245
|
+
return built;
|
246
|
+
}
|
247
|
+
|
225
248
|
// ### attach
|
226
249
|
// Given a (complex) list of keys, search the libraries for applicable View
|
227
250
|
// and Trait definitions to apply to the object.
|
@@ -257,15 +280,17 @@
|
|
257
280
|
|
258
281
|
// Build an instance, connect outlets, bind events, init and record.
|
259
282
|
if(def = library[key]) {
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
283
|
+
// experimental...
|
284
|
+
instance(def, self, mode);
|
285
|
+
// setup = def.setup;
|
286
|
+
// built = def(self, self.context);
|
287
|
+
// built.connect(setup.connected);
|
288
|
+
//
|
289
|
+
// _.each(setup.subscribe, function(handler, key) {
|
290
|
+
// bind(built, key, handler);
|
291
|
+
// });
|
292
|
+
//
|
293
|
+
// setup.initialize.call(built, mode);
|
269
294
|
set.push(id);
|
270
295
|
}
|
271
296
|
});
|
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.8
|
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-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: transcendent views
|
15
15
|
email:
|