spine-rails 0.0.1 → 0.0.2

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.
@@ -1,84 +0,0 @@
1
- require 'rails'
2
- require 'curb'
3
-
4
- module Spinejs
5
- module Generators
6
- class InstallGenerator < ::Rails::Generators::Base
7
- @@spine_version = "0.0.3"
8
- @@icanhaz_version = "0.9"
9
-
10
- desc "This generator installs spine.js #{@@spine_version}, json2.js, and (optionally) icanhaz.js #{@@icanhaz_version}"
11
- class_option :ich, :type => :boolean, :default => false, :desc => "Include ICanHaz.js"
12
- source_root File.expand_path('../../../../../vendor/assets/javascripts', __FILE__)
13
-
14
- def fetch_libraries
15
- url_icanhaz = "https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.js"
16
- url_icanhaz_min = "https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.min.js"
17
- url_json2 = "https://github.com/douglascrockford/JSON-js/raw/master/json2.js"
18
- url_spine = "https://github.com/maccman/spine/raw/master/spine.js"
19
- url_spine_min = "https://github.com/maccman/spine/raw/master/spine.min.js"
20
- #urls = [url_spine, url_spine_min] #, url_json2, url_icanhaz, url_icanhaz_min]
21
- urls = {"spine" => url_spine, "spine.min" => url_spine_min, "json2" => url_json2, "icanhaz" => url_icanhaz, "icanhaz.min" => url_icanhaz_min }
22
-
23
- urls.each do |url|
24
-
25
- # puts url[0]
26
- the_url = url[1]
27
- # puts the_url
28
-
29
- filename = url[0]
30
- new_file = "public/javascripts/#{filename}.js"
31
-
32
-
33
- begin
34
- c = Curl::Easy.new(the_url)
35
- c.perform
36
-
37
- # puts c.body_str
38
- # end
39
-
40
-
41
- if File.exist?(new_file)
42
- puts "Skipping #{filename}.js because it already exists"
43
- else
44
- puts "Generating #{new_file}"
45
- #FileUtils.cp(source, destination)
46
- create_file new_file
47
- append_to_file new_file, c.body_str
48
- end
49
-
50
- rescue
51
- puts "Connection to #{the_url} failed!"
52
- puts "Falling back to copying over a, most likely, older version."
53
-
54
- say_status("copying", "#{filename}.js", :green)
55
- copy_file "#{filename}.js", "public/javascripts/#{filename}.js"
56
- #copy_file "spine.min.js", "public/javascripts/#{filename}.js"
57
- end
58
-
59
- end
60
- end
61
-
62
- # def copy_spine
63
- # say_status("copying", "spine.js (#{@@spine_version})", :green)
64
- # copy_file "spine.js", "public/javascripts/spine.js"
65
- # copy_file "spine.min.js", "public/javascripts/spine.min.js"
66
- # end
67
- #
68
- # def copy_json2
69
- # say_status("copying", "json2.js", :green)
70
- # copy_file "json2.js", "public/javascripts/json2.js"
71
- # #copy_file "json2.min.js", "public/javascripts/json2.min.js"
72
- # end
73
- #
74
- # def copy_icanhaz
75
- # if options.ich?
76
- # say_status("copying", "icanhaz.js (#{@@icanhaz_version})", :green)
77
- # copy_file "icanhaz.js", "public/javascripts/icanhaz.js"
78
- # copy_file "icanhaz.min.js", "public/javascripts/icanhaz.min.js"
79
- # end
80
- # end
81
-
82
- end
83
- end
84
- end #if ::Rails.version < "3.1"
@@ -1,18 +0,0 @@
1
- # Configure Rails 3.0 to use public/javascripts/spine et al
2
- module Spinejs
3
- module Rails
4
-
5
- class Railtie < ::Rails::Railtie
6
- config.before_configuration do
7
-
8
- js_defaults = ::Rails.env.production? ? %w(spine.min) : %w(spine)
9
-
10
- # Merge the jQuery scripts, remove the Prototype defaults and finally add 'rails'
11
- # at the end, because load order is important
12
- config.action_view.javascript_expansions[:defaults] |= js_defaults
13
- #config.action_view.javascript_expansions[:defaults] << 'jquery_ujs'
14
- end
15
- end
16
-
17
- end
18
- end
@@ -1,5 +0,0 @@
1
- module Spinejs
2
- module Rails
3
- VERSION = "0.0.1"
4
- end
5
- end
@@ -1,52 +0,0 @@
1
- desc "Fetch common recent versions of JS files"
2
- task :get_js => :environment do
3
-
4
- #require 'nokogiri'
5
- #require 'open-uri'
6
- require 'curb'
7
-
8
- url_icanhaz = "https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.js"
9
- url_icanhaz_min = "https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.min.js"
10
- url_json2 = "https://github.com/douglascrockford/JSON-js/raw/master/json2.js"
11
- url_spine = "https://github.com/maccman/spine/raw/master/spine.js"
12
- url_spine_min = "https://github.com/maccman/spine/raw/master/spine.min.js"
13
- urls = [url_spine, url_spine_min] #, url_json2, url_icanhaz, url_icanhaz_min]
14
-
15
- source_root File.expand_path('../../../../../vendor/assets/javascripts', __FILE__)
16
-
17
- urls.each do |url|
18
-
19
- puts url
20
-
21
- #doc = Nokogiri::HTML(open(url))
22
-
23
- create_file "public/javascripts/spine.js"
24
-
25
-
26
- c = Curl::Easy.new(url)
27
- c.perform
28
- #puts c.body_str
29
-
30
-
31
- #copy_file "spine.js", "public/javascripts/spine.js"
32
-
33
-
34
- # h2_exists = false
35
- #
36
- # doc.css("h2").each do |item|
37
- # h2_exists = true
38
- #
39
- # end
40
- #
41
- # if h2_exists
42
- # puts "is available"
43
- # #theurl = "http://iwantmyname.com/search/add/#{threeio.word}/io/0"
44
- # threeio.update_attributes(:date_checked => Date.today, :checked => checked)
45
- # else
46
- # puts "does not exist"
47
- # threeio.update_attributes(:available => false, :date_checked => Date.today, :checked => checked)
48
- # end
49
-
50
- end
51
-
52
- end
data/tasks/get_js.rake DELETED
@@ -1,52 +0,0 @@
1
- desc "Fetch common recent versions of JS files"
2
- task :get_js => :environment do
3
-
4
- #require 'nokogiri'
5
- #require 'open-uri'
6
- require 'curb'
7
-
8
- url_icanhaz = "https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.js"
9
- url_icanhaz_min = "https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.min.js"
10
- url_json2 = "https://github.com/douglascrockford/JSON-js/raw/master/json2.js"
11
- url_spine = "https://github.com/maccman/spine/raw/master/spine.js"
12
- url_spine_min = "https://github.com/maccman/spine/raw/master/spine.min.js"
13
- urls = [url_spine, url_spine_min] #, url_json2, url_icanhaz, url_icanhaz_min]
14
-
15
- source_root File.expand_path('../../../../../vendor/assets/javascripts', __FILE__)
16
-
17
- urls.each do |url|
18
-
19
- puts url
20
-
21
- #doc = Nokogiri::HTML(open(url))
22
-
23
- create_file "public/javascripts/spine.js"
24
-
25
-
26
- c = Curl::Easy.new(url)
27
- c.perform
28
- #puts c.body_str
29
-
30
-
31
- #copy_file "spine.js", "public/javascripts/spine.js"
32
-
33
-
34
- # h2_exists = false
35
- #
36
- # doc.css("h2").each do |item|
37
- # h2_exists = true
38
- #
39
- # end
40
- #
41
- # if h2_exists
42
- # puts "is available"
43
- # #theurl = "http://iwantmyname.com/search/add/#{threeio.word}/io/0"
44
- # threeio.update_attributes(:date_checked => Date.today, :checked => checked)
45
- # else
46
- # puts "does not exist"
47
- # threeio.update_attributes(:available => false, :date_checked => Date.today, :checked => checked)
48
- # end
49
-
50
- end
51
-
52
- end
@@ -1,401 +0,0 @@
1
- /*!
2
- ICanHaz.js version 0.9 -- by @HenrikJoreteg
3
- More info at: http://icanhazjs.com
4
- */
5
- (function ($) {
6
- /*!
7
- mustache.js -- Logic-less templates in JavaScript
8
-
9
- by @janl (MIT Licensed, https://github.com/janl/mustache.js/blob/master/LICENSE).
10
-
11
- See http://mustache.github.com/ for more info.
12
- */
13
-
14
- var Mustache = function() {
15
- var Renderer = function() {};
16
-
17
- Renderer.prototype = {
18
- otag: "{{",
19
- ctag: "}}",
20
- pragmas: {},
21
- buffer: [],
22
- pragmas_implemented: {
23
- "IMPLICIT-ITERATOR": true
24
- },
25
- context: {},
26
-
27
- render: function(template, context, partials, in_recursion) {
28
- // reset buffer & set context
29
- if(!in_recursion) {
30
- this.context = context;
31
- this.buffer = []; // TODO: make this non-lazy
32
- }
33
-
34
- // fail fast
35
- if(!this.includes("", template)) {
36
- if(in_recursion) {
37
- return template;
38
- } else {
39
- this.send(template);
40
- return;
41
- }
42
- }
43
-
44
- template = this.render_pragmas(template);
45
- var html = this.render_section(template, context, partials);
46
- if(in_recursion) {
47
- return this.render_tags(html, context, partials, in_recursion);
48
- }
49
-
50
- this.render_tags(html, context, partials, in_recursion);
51
- },
52
-
53
- /*
54
- Sends parsed lines
55
- */
56
- send: function(line) {
57
- if(line != "") {
58
- this.buffer.push(line);
59
- }
60
- },
61
-
62
- /*
63
- Looks for %PRAGMAS
64
- */
65
- render_pragmas: function(template) {
66
- // no pragmas
67
- if(!this.includes("%", template)) {
68
- return template;
69
- }
70
-
71
- var that = this;
72
- var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" +
73
- this.ctag);
74
- return template.replace(regex, function(match, pragma, options) {
75
- if(!that.pragmas_implemented[pragma]) {
76
- throw({message:
77
- "This implementation of mustache doesn't understand the '" +
78
- pragma + "' pragma"});
79
- }
80
- that.pragmas[pragma] = {};
81
- if(options) {
82
- var opts = options.split("=");
83
- that.pragmas[pragma][opts[0]] = opts[1];
84
- }
85
- return "";
86
- // ignore unknown pragmas silently
87
- });
88
- },
89
-
90
- /*
91
- Tries to find a partial in the curent scope and render it
92
- */
93
- render_partial: function(name, context, partials) {
94
- name = this.trim(name);
95
- if(!partials || partials[name] === undefined) {
96
- throw({message: "unknown_partial '" + name + "'"});
97
- }
98
- if(typeof(context[name]) != "object") {
99
- return this.render(partials[name], context, partials, true);
100
- }
101
- return this.render(partials[name], context[name], partials, true);
102
- },
103
-
104
- /*
105
- Renders inverted (^) and normal (#) sections
106
- */
107
- render_section: function(template, context, partials) {
108
- if(!this.includes("#", template) && !this.includes("^", template)) {
109
- return template;
110
- }
111
-
112
- var that = this;
113
- // CSW - Added "+?" so it finds the tighest bound, not the widest
114
- var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag +
115
- "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag +
116
- "\\s*", "mg");
117
-
118
- // for each {{#foo}}{{/foo}} section do...
119
- return template.replace(regex, function(match, type, name, content) {
120
- var value = that.find(name, context);
121
- if(type == "^") { // inverted section
122
- if(!value || that.is_array(value) && value.length === 0) {
123
- // false or empty list, render it
124
- return that.render(content, context, partials, true);
125
- } else {
126
- return "";
127
- }
128
- } else if(type == "#") { // normal section
129
- if(that.is_array(value)) { // Enumerable, Let's loop!
130
- return that.map(value, function(row) {
131
- return that.render(content, that.create_context(row),
132
- partials, true);
133
- }).join("");
134
- } else if(that.is_object(value)) { // Object, Use it as subcontext!
135
- return that.render(content, that.create_context(value),
136
- partials, true);
137
- } else if(typeof value === "function") {
138
- // higher order section
139
- return value.call(context, content, function(text) {
140
- return that.render(text, context, partials, true);
141
- });
142
- } else if(value) { // boolean section
143
- return that.render(content, context, partials, true);
144
- } else {
145
- return "";
146
- }
147
- }
148
- });
149
- },
150
-
151
- /*
152
- Replace {{foo}} and friends with values from our view
153
- */
154
- render_tags: function(template, context, partials, in_recursion) {
155
- // tit for tat
156
- var that = this;
157
-
158
- var new_regex = function() {
159
- return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" +
160
- that.ctag + "+", "g");
161
- };
162
-
163
- var regex = new_regex();
164
- var tag_replace_callback = function(match, operator, name) {
165
- switch(operator) {
166
- case "!": // ignore comments
167
- return "";
168
- case "=": // set new delimiters, rebuild the replace regexp
169
- that.set_delimiters(name);
170
- regex = new_regex();
171
- return "";
172
- case ">": // render partial
173
- return that.render_partial(name, context, partials);
174
- case "{": // the triple mustache is unescaped
175
- return that.find(name, context);
176
- default: // escape the value
177
- return that.escape(that.find(name, context));
178
- }
179
- };
180
- var lines = template.split("\n");
181
- for(var i = 0; i < lines.length; i++) {
182
- lines[i] = lines[i].replace(regex, tag_replace_callback, this);
183
- if(!in_recursion) {
184
- this.send(lines[i]);
185
- }
186
- }
187
-
188
- if(in_recursion) {
189
- return lines.join("\n");
190
- }
191
- },
192
-
193
- set_delimiters: function(delimiters) {
194
- var dels = delimiters.split(" ");
195
- this.otag = this.escape_regex(dels[0]);
196
- this.ctag = this.escape_regex(dels[1]);
197
- },
198
-
199
- escape_regex: function(text) {
200
- // thank you Simon Willison
201
- if(!arguments.callee.sRE) {
202
- var specials = [
203
- '/', '.', '*', '+', '?', '|',
204
- '(', ')', '[', ']', '{', '}', '\\'
205
- ];
206
- arguments.callee.sRE = new RegExp(
207
- '(\\' + specials.join('|\\') + ')', 'g'
208
- );
209
- }
210
- return text.replace(arguments.callee.sRE, '\\$1');
211
- },
212
-
213
- /*
214
- find `name` in current `context`. That is find me a value
215
- from the view object
216
- */
217
- find: function(name, context) {
218
- name = this.trim(name);
219
-
220
- // Checks whether a value is thruthy or false or 0
221
- function is_kinda_truthy(bool) {
222
- return bool === false || bool === 0 || bool;
223
- }
224
-
225
- var value;
226
- if(is_kinda_truthy(context[name])) {
227
- value = context[name];
228
- } else if(is_kinda_truthy(this.context[name])) {
229
- value = this.context[name];
230
- }
231
-
232
- if(typeof value === "function") {
233
- return value.apply(context);
234
- }
235
- if(value !== undefined) {
236
- return value;
237
- }
238
- // silently ignore unkown variables
239
- return "";
240
- },
241
-
242
- // Utility methods
243
-
244
- /* includes tag */
245
- includes: function(needle, haystack) {
246
- return haystack.indexOf(this.otag + needle) != -1;
247
- },
248
-
249
- /*
250
- Does away with nasty characters
251
- */
252
- escape: function(s) {
253
- s = String(s === null ? "" : s);
254
- return s.replace(/&(?!\w+;)|["<>\\]/g, function(s) {
255
- switch(s) {
256
- case "&": return "&amp;";
257
- case "\\": return "\\\\";
258
- case '"': return '\"';
259
- case "<": return "&lt;";
260
- case ">": return "&gt;";
261
- default: return s;
262
- }
263
- });
264
- },
265
-
266
- // by @langalex, support for arrays of strings
267
- create_context: function(_context) {
268
- if(this.is_object(_context)) {
269
- return _context;
270
- } else {
271
- var iterator = ".";
272
- if(this.pragmas["IMPLICIT-ITERATOR"]) {
273
- iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
274
- }
275
- var ctx = {};
276
- ctx[iterator] = _context;
277
- return ctx;
278
- }
279
- },
280
-
281
- is_object: function(a) {
282
- return a && typeof a == "object";
283
- },
284
-
285
- is_array: function(a) {
286
- return Object.prototype.toString.call(a) === '[object Array]';
287
- },
288
-
289
- /*
290
- Gets rid of leading and trailing whitespace
291
- */
292
- trim: function(s) {
293
- return s.replace(/^\s*|\s*$/g, "");
294
- },
295
-
296
- /*
297
- Why, why, why? Because IE. Cry, cry cry.
298
- */
299
- map: function(array, fn) {
300
- if (typeof array.map == "function") {
301
- return array.map(fn);
302
- } else {
303
- var r = [];
304
- var l = array.length;
305
- for(var i = 0; i < l; i++) {
306
- r.push(fn(array[i]));
307
- }
308
- return r;
309
- }
310
- }
311
- };
312
-
313
- return({
314
- name: "mustache.js",
315
- version: "0.3.0",
316
-
317
- /*
318
- Turns a template and view into HTML
319
- */
320
- to_html: function(template, view, partials, send_fun) {
321
- var renderer = new Renderer();
322
- if(send_fun) {
323
- renderer.send = send_fun;
324
- }
325
- renderer.render(template, view, partials);
326
- if(!send_fun) {
327
- return renderer.buffer.join("\n");
328
- }
329
- }
330
- });
331
- }();/*!
332
- ICanHaz.js -- by @HenrikJoreteg
333
- */
334
- /*global jQuery */
335
- function ICanHaz() {
336
- var self = this;
337
- self.VERSION = "0.9";
338
- self.templates = {};
339
- self.partials = {};
340
-
341
- // public function for adding templates
342
- // We're enforcing uniqueness to avoid accidental template overwrites.
343
- // If you want a different template, it should have a different name.
344
- self.addTemplate = function (name, templateString) {
345
- if (self[name]) throw "Invalid name: " + name + ".";
346
- if (self.templates[name]) throw "Template \" + name + \" exists";
347
-
348
- self.templates[name] = templateString;
349
- self[name] = function (data, raw) {
350
- data = data || {};
351
- var result = Mustache.to_html(self.templates[name], data, self.partials);
352
- return raw ? result : $(result);
353
- };
354
- };
355
-
356
- // public function for adding partials
357
- self.addPartial = function (name, templateString) {
358
- if (self.partials[name]) {
359
- throw "Partial \" + name + \" exists";
360
- } else {
361
- self.partials[name] = templateString;
362
- }
363
- };
364
-
365
- // grabs templates from the DOM and caches them.
366
- // Loop through and add templates.
367
- // Whitespace at beginning and end of all templates inside <script> tags will
368
- // be trimmed. If you want whitespace around a partial, add it in the parent,
369
- // not the partial. Or do it explicitly using <br/> or &nbsp;
370
- self.grabTemplates = function () {
371
- $('script[type="text/html"]').each(function (a, b) {
372
- var script = $((typeof a === 'number') ? b : a), // Zepto doesn't bind this
373
- text = (''.trim) ? script.html().trim() : $.trim(script.html());
374
-
375
- self[script.hasClass('partial') ? 'addPartial' : 'addTemplate'](script.attr('id'), text);
376
- script.remove();
377
- });
378
- };
379
-
380
- // clears all retrieval functions and empties caches
381
- self.clearAll = function () {
382
- for (var key in self.templates) {
383
- delete self[key];
384
- }
385
- self.templates = {};
386
- self.partials = {};
387
- };
388
-
389
- self.refresh = function () {
390
- self.clearAll();
391
- self.grabTemplates();
392
- };
393
- }
394
-
395
- window.ich = new ICanHaz();
396
-
397
- // init itself on document ready
398
- $(function () {
399
- ich.grabTemplates();
400
- });
401
- })(window.jQuery || window.Zepto);