requirejs-rails-plugins 0.2.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 (72) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/requirejs_plugins/async.js +42 -0
  5. data/app/assets/javascripts/requirejs_plugins/domReady.js +129 -0
  6. data/app/assets/javascripts/requirejs_plugins/font.js +45 -0
  7. data/app/assets/javascripts/requirejs_plugins/goog.js +38 -0
  8. data/app/assets/javascripts/requirejs_plugins/image.js +53 -0
  9. data/app/assets/javascripts/requirejs_plugins/json.js +61 -0
  10. data/app/assets/javascripts/requirejs_plugins/nokia.js +65 -0
  11. data/app/assets/javascripts/requirejs_plugins/propertyParser.js +43 -0
  12. data/app/assets/javascripts/requirejs_plugins/text.js +332 -0
  13. data/app/assets/stylesheets/requirejs_plugins/application.css +13 -0
  14. data/app/controllers/requirejs_plugins/application_controller.rb +4 -0
  15. data/app/helpers/requirejs_plugins/application_helper.rb +4 -0
  16. data/app/views/layouts/requirejs_plugins/application.html.erb +14 -0
  17. data/config/routes.rb +2 -0
  18. data/lib/requirejs_plugins.rb +4 -0
  19. data/lib/requirejs_plugins/engine.rb +5 -0
  20. data/lib/requirejs_plugins/version.rb +3 -0
  21. data/lib/tasks/requirejs_plugins_tasks.rake +4 -0
  22. data/test/dummy/README.rdoc +261 -0
  23. data/test/dummy/Rakefile +7 -0
  24. data/test/dummy/app/assets/javascripts/application.js +13 -0
  25. data/test/dummy/app/assets/javascripts/content.js +2 -0
  26. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  27. data/test/dummy/app/assets/stylesheets/content.css +4 -0
  28. data/test/dummy/app/controllers/application_controller.rb +3 -0
  29. data/test/dummy/app/controllers/content_controller.rb +4 -0
  30. data/test/dummy/app/helpers/application_helper.rb +2 -0
  31. data/test/dummy/app/helpers/content_helper.rb +2 -0
  32. data/test/dummy/app/views/content/index.html.erb +2 -0
  33. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  34. data/test/dummy/config.ru +4 -0
  35. data/test/dummy/config/application.rb +59 -0
  36. data/test/dummy/config/boot.rb +10 -0
  37. data/test/dummy/config/database.yml +25 -0
  38. data/test/dummy/config/environment.rb +5 -0
  39. data/test/dummy/config/environments/development.rb +37 -0
  40. data/test/dummy/config/environments/production.rb +67 -0
  41. data/test/dummy/config/environments/test.rb +37 -0
  42. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  43. data/test/dummy/config/initializers/inflections.rb +15 -0
  44. data/test/dummy/config/initializers/mime_types.rb +5 -0
  45. data/test/dummy/config/initializers/secret_token.rb +7 -0
  46. data/test/dummy/config/initializers/session_store.rb +8 -0
  47. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  48. data/test/dummy/config/locales/en.yml +5 -0
  49. data/test/dummy/config/routes.rb +6 -0
  50. data/test/dummy/db/development.sqlite3 +0 -0
  51. data/test/dummy/log/development.log +58 -0
  52. data/test/dummy/public/404.html +26 -0
  53. data/test/dummy/public/422.html +26 -0
  54. data/test/dummy/public/500.html +25 -0
  55. data/test/dummy/public/favicon.ico +0 -0
  56. data/test/dummy/script/rails +6 -0
  57. data/test/dummy/test/functional/content_controller_test.rb +9 -0
  58. data/test/dummy/test/unit/helpers/content_helper_test.rb +4 -0
  59. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  60. data/test/dummy/tmp/cache/assets/CE4/100/sprockets%2F83ef55e03553719c4bc20f8482d621fe +0 -0
  61. data/test/dummy/tmp/cache/assets/CFA/E70/sprockets%2F4d5132aa20a3ea73f3258e45307c8da3 +0 -0
  62. data/test/dummy/tmp/cache/assets/D0E/EE0/sprockets%2F63f7dbafcb2778ad334c1072468684a1 +0 -0
  63. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  64. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  65. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  66. data/test/dummy/tmp/cache/assets/DD0/480/sprockets%2F5dec288b53bc04a79eee7b7dcc1911e3 +0 -0
  67. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  68. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  69. data/test/integration/navigation_test.rb +10 -0
  70. data/test/requirejs_plugins_test.rb +7 -0
  71. data/test/test_helper.rb +15 -0
  72. metadata +252 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Basic parser for URL properties
3
+ * @author Miller Medeiros
4
+ * @version 0.1.0 (2011/12/06)
5
+ * MIT license
6
+ */
7
+ define(function(){
8
+
9
+ var rProps = /([\w-]+)\s*:\s*(?:(\[[^\]]+\])|([^,]+)),?/g, //match "foo:bar" and "lorem:[ipsum,dolor]" capturing name as $1 and val as $2 or $3
10
+ rArr = /^\[([^\]]+)\]$/; //match "[foo,bar]" capturing "foo,bar"
11
+
12
+ function parseProperties(str){
13
+ var match, obj = {};
14
+ while (match = rProps.exec(str)) {
15
+ obj[ match[1] ] = typecastVal(match[2] || match[3]);
16
+ }
17
+ return obj;
18
+ }
19
+
20
+ function typecastVal(val){
21
+ if (rArr.test(val)){
22
+ val = val.replace(rArr, '$1').split(',');
23
+ } else if (val === 'null'){
24
+ val = null;
25
+ } else if (val === 'false'){
26
+ val = false;
27
+ } else if (val === 'true'){
28
+ val = true;
29
+ } else if (val === '' || val === "''" || val === '""'){
30
+ val = '';
31
+ } else if (! isNaN(val)) {
32
+ //isNaN('') == false
33
+ val = +val;
34
+ }
35
+ return val;
36
+ }
37
+
38
+ //API
39
+ return {
40
+ parseProperties : parseProperties,
41
+ typecastVal : typecastVal
42
+ };
43
+ });
@@ -0,0 +1,332 @@
1
+ /**
2
+ * @license RequireJS text 2.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
3
+ * Available via the MIT or new BSD license.
4
+ * see: http://github.com/requirejs/text for details
5
+ */
6
+ /*jslint regexp: true */
7
+ /*global require: false, XMLHttpRequest: false, ActiveXObject: false,
8
+ define: false, window: false, process: false, Packages: false,
9
+ java: false, location: false */
10
+
11
+ define(['module'], function (module) {
12
+ 'use strict';
13
+
14
+ var text, fs,
15
+ progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],
16
+ xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,
17
+ bodyRegExp = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,
18
+ hasLocation = typeof location !== 'undefined' && location.href,
19
+ defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''),
20
+ defaultHostName = hasLocation && location.hostname,
21
+ defaultPort = hasLocation && (location.port || undefined),
22
+ buildMap = [],
23
+ masterConfig = (module.config && module.config()) || {};
24
+
25
+ text = {
26
+ version: '2.0.5',
27
+
28
+ strip: function (content) {
29
+ //Strips <?xml ...?> declarations so that external SVG and XML
30
+ //documents can be added to a document without worry. Also, if the string
31
+ //is an HTML document, only the part inside the body tag is returned.
32
+ if (content) {
33
+ content = content.replace(xmlRegExp, "");
34
+ var matches = content.match(bodyRegExp);
35
+ if (matches) {
36
+ content = matches[1];
37
+ }
38
+ } else {
39
+ content = "";
40
+ }
41
+ return content;
42
+ },
43
+
44
+ jsEscape: function (content) {
45
+ return content.replace(/(['\\])/g, '\\$1')
46
+ .replace(/[\f]/g, "\\f")
47
+ .replace(/[\b]/g, "\\b")
48
+ .replace(/[\n]/g, "\\n")
49
+ .replace(/[\t]/g, "\\t")
50
+ .replace(/[\r]/g, "\\r")
51
+ .replace(/[\u2028]/g, "\\u2028")
52
+ .replace(/[\u2029]/g, "\\u2029");
53
+ },
54
+
55
+ createXhr: masterConfig.createXhr || function () {
56
+ //Would love to dump the ActiveX crap in here. Need IE 6 to die first.
57
+ var xhr, i, progId;
58
+ if (typeof XMLHttpRequest !== "undefined") {
59
+ return new XMLHttpRequest();
60
+ } else if (typeof ActiveXObject !== "undefined") {
61
+ for (i = 0; i < 3; i += 1) {
62
+ progId = progIds[i];
63
+ try {
64
+ xhr = new ActiveXObject(progId);
65
+ } catch (e) {}
66
+
67
+ if (xhr) {
68
+ progIds = [progId]; // so faster next time
69
+ break;
70
+ }
71
+ }
72
+ }
73
+
74
+ return xhr;
75
+ },
76
+
77
+ /**
78
+ * Parses a resource name into its component parts. Resource names
79
+ * look like: module/name.ext!strip, where the !strip part is
80
+ * optional.
81
+ * @param {String} name the resource name
82
+ * @returns {Object} with properties "moduleName", "ext" and "strip"
83
+ * where strip is a boolean.
84
+ */
85
+ parseName: function (name) {
86
+ var modName, ext, temp,
87
+ strip = false,
88
+ index = name.indexOf("."),
89
+ isRelative = name.indexOf('./') === 0 ||
90
+ name.indexOf('../') === 0;
91
+
92
+ if (index !== -1 && (!isRelative || index > 1)) {
93
+ modName = name.substring(0, index);
94
+ ext = name.substring(index + 1, name.length);
95
+ } else {
96
+ modName = name;
97
+ }
98
+
99
+ temp = ext || modName;
100
+ index = temp.indexOf("!");
101
+ if (index !== -1) {
102
+ //Pull off the strip arg.
103
+ strip = temp.substring(index + 1) === "strip";
104
+ temp = temp.substring(0, index);
105
+ if (ext) {
106
+ ext = temp;
107
+ } else {
108
+ modName = temp;
109
+ }
110
+ }
111
+
112
+ return {
113
+ moduleName: modName,
114
+ ext: ext,
115
+ strip: strip
116
+ };
117
+ },
118
+
119
+ xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/,
120
+
121
+ /**
122
+ * Is an URL on another domain. Only works for browser use, returns
123
+ * false in non-browser environments. Only used to know if an
124
+ * optimized .js version of a text resource should be loaded
125
+ * instead.
126
+ * @param {String} url
127
+ * @returns Boolean
128
+ */
129
+ useXhr: function (url, protocol, hostname, port) {
130
+ var uProtocol, uHostName, uPort,
131
+ match = text.xdRegExp.exec(url);
132
+ if (!match) {
133
+ return true;
134
+ }
135
+ uProtocol = match[2];
136
+ uHostName = match[3];
137
+
138
+ uHostName = uHostName.split(':');
139
+ uPort = uHostName[1];
140
+ uHostName = uHostName[0];
141
+
142
+ return (!uProtocol || uProtocol === protocol) &&
143
+ (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) &&
144
+ ((!uPort && !uHostName) || uPort === port);
145
+ },
146
+
147
+ finishLoad: function (name, strip, content, onLoad) {
148
+ content = strip ? text.strip(content) : content;
149
+ if (masterConfig.isBuild) {
150
+ buildMap[name] = content;
151
+ }
152
+ onLoad(content);
153
+ },
154
+
155
+ load: function (name, req, onLoad, config) {
156
+ //Name has format: some.module.filext!strip
157
+ //The strip part is optional.
158
+ //if strip is present, then that means only get the string contents
159
+ //inside a body tag in an HTML string. For XML/SVG content it means
160
+ //removing the <?xml ...?> declarations so the content can be inserted
161
+ //into the current doc without problems.
162
+
163
+ // Do not bother with the work if a build and text will
164
+ // not be inlined.
165
+ if (config.isBuild && !config.inlineText) {
166
+ onLoad();
167
+ return;
168
+ }
169
+
170
+ masterConfig.isBuild = config.isBuild;
171
+
172
+ var parsed = text.parseName(name),
173
+ nonStripName = parsed.moduleName +
174
+ (parsed.ext ? '.' + parsed.ext : ''),
175
+ url = req.toUrl(nonStripName),
176
+ useXhr = (masterConfig.useXhr) ||
177
+ text.useXhr;
178
+
179
+ //Load the text. Use XHR if possible and in a browser.
180
+ if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {
181
+ text.get(url, function (content) {
182
+ text.finishLoad(name, parsed.strip, content, onLoad);
183
+ }, function (err) {
184
+ if (onLoad.error) {
185
+ onLoad.error(err);
186
+ }
187
+ });
188
+ } else {
189
+ //Need to fetch the resource across domains. Assume
190
+ //the resource has been optimized into a JS module. Fetch
191
+ //by the module name + extension, but do not include the
192
+ //!strip part to avoid file system issues.
193
+ req([nonStripName], function (content) {
194
+ text.finishLoad(parsed.moduleName + '.' + parsed.ext,
195
+ parsed.strip, content, onLoad);
196
+ });
197
+ }
198
+ },
199
+
200
+ write: function (pluginName, moduleName, write, config) {
201
+ if (buildMap.hasOwnProperty(moduleName)) {
202
+ var content = text.jsEscape(buildMap[moduleName]);
203
+ write.asModule(pluginName + "!" + moduleName,
204
+ "define(function () { return '" +
205
+ content +
206
+ "';});\n");
207
+ }
208
+ },
209
+
210
+ writeFile: function (pluginName, moduleName, req, write, config) {
211
+ var parsed = text.parseName(moduleName),
212
+ extPart = parsed.ext ? '.' + parsed.ext : '',
213
+ nonStripName = parsed.moduleName + extPart,
214
+ //Use a '.js' file name so that it indicates it is a
215
+ //script that can be loaded across domains.
216
+ fileName = req.toUrl(parsed.moduleName + extPart) + '.js';
217
+
218
+ //Leverage own load() method to load plugin value, but only
219
+ //write out values that do not have the strip argument,
220
+ //to avoid any potential issues with ! in file names.
221
+ text.load(nonStripName, req, function (value) {
222
+ //Use own write() method to construct full module value.
223
+ //But need to create shell that translates writeFile's
224
+ //write() to the right interface.
225
+ var textWrite = function (contents) {
226
+ return write(fileName, contents);
227
+ };
228
+ textWrite.asModule = function (moduleName, contents) {
229
+ return write.asModule(moduleName, fileName, contents);
230
+ };
231
+
232
+ text.write(pluginName, nonStripName, textWrite, config);
233
+ }, config);
234
+ }
235
+ };
236
+
237
+ if (masterConfig.env === 'node' || (!masterConfig.env &&
238
+ typeof process !== "undefined" &&
239
+ process.versions &&
240
+ !!process.versions.node)) {
241
+ //Using special require.nodeRequire, something added by r.js.
242
+ fs = require.nodeRequire('fs');
243
+
244
+ text.get = function (url, callback) {
245
+ var file = fs.readFileSync(url, 'utf8');
246
+ //Remove BOM (Byte Mark Order) from utf8 files if it is there.
247
+ if (file.indexOf('\uFEFF') === 0) {
248
+ file = file.substring(1);
249
+ }
250
+ callback(file);
251
+ };
252
+ } else if (masterConfig.env === 'xhr' || (!masterConfig.env &&
253
+ text.createXhr())) {
254
+ text.get = function (url, callback, errback, headers) {
255
+ var xhr = text.createXhr(), header;
256
+ xhr.open('GET', url, true);
257
+
258
+ //Allow plugins direct access to xhr headers
259
+ if (headers) {
260
+ for (header in headers) {
261
+ if (headers.hasOwnProperty(header)) {
262
+ xhr.setRequestHeader(header.toLowerCase(), headers[header]);
263
+ }
264
+ }
265
+ }
266
+
267
+ //Allow overrides specified in config
268
+ if (masterConfig.onXhr) {
269
+ masterConfig.onXhr(xhr, url);
270
+ }
271
+
272
+ xhr.onreadystatechange = function (evt) {
273
+ var status, err;
274
+ //Do not explicitly handle errors, those should be
275
+ //visible via console output in the browser.
276
+ if (xhr.readyState === 4) {
277
+ status = xhr.status;
278
+ if (status > 399 && status < 600) {
279
+ //An http 4xx or 5xx error. Signal an error.
280
+ err = new Error(url + ' HTTP status: ' + status);
281
+ err.xhr = xhr;
282
+ errback(err);
283
+ } else {
284
+ callback(xhr.responseText);
285
+ }
286
+ }
287
+ };
288
+ xhr.send(null);
289
+ };
290
+ } else if (masterConfig.env === 'rhino' || (!masterConfig.env &&
291
+ typeof Packages !== 'undefined' && typeof java !== 'undefined')) {
292
+ //Why Java, why is this so awkward?
293
+ text.get = function (url, callback) {
294
+ var stringBuffer, line,
295
+ encoding = "utf-8",
296
+ file = new java.io.File(url),
297
+ lineSeparator = java.lang.System.getProperty("line.separator"),
298
+ input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),
299
+ content = '';
300
+ try {
301
+ stringBuffer = new java.lang.StringBuffer();
302
+ line = input.readLine();
303
+
304
+ // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324
305
+ // http://www.unicode.org/faq/utf_bom.html
306
+
307
+ // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK:
308
+ // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
309
+ if (line && line.length() && line.charAt(0) === 0xfeff) {
310
+ // Eat the BOM, since we've already found the encoding on this file,
311
+ // and we plan to concatenating this buffer with others; the BOM should
312
+ // only appear at the top of a file.
313
+ line = line.substring(1);
314
+ }
315
+
316
+ stringBuffer.append(line);
317
+
318
+ while ((line = input.readLine()) !== null) {
319
+ stringBuffer.append(lineSeparator);
320
+ stringBuffer.append(line);
321
+ }
322
+ //Make sure we return a JavaScript string and not a Java string.
323
+ content = String(stringBuffer.toString()); //String
324
+ } finally {
325
+ input.close();
326
+ }
327
+ callback(content);
328
+ };
329
+ }
330
+
331
+ return text;
332
+ });
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,4 @@
1
+ module RequirejsPlugins
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module RequirejsPlugins
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>RequirejsPlugins</title>
5
+ <%= stylesheet_link_tag "requirejs_plugins/application", :media => "all" %>
6
+ <%= javascript_include_tag "requirejs_plugins/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ RequirejsPlugins::Engine.routes.draw do
2
+ end
@@ -0,0 +1,4 @@
1
+ require "requirejs_plugins/engine"
2
+
3
+ module RequirejsPlugins
4
+ end
@@ -0,0 +1,5 @@
1
+ module RequirejsPlugins
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace RequirejsPlugins
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module RequirejsPlugins
2
+ VERSION = '0.2.0'
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :requirejs_plugins do
3
+ # # Task goes here
4
+ # end