ninjs-framework 0.1.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 (82) hide show
  1. data/.DS_Store +0 -0
  2. data/.bundle/config +2 -0
  3. data/.travis.yml +2 -0
  4. data/Gemfile +10 -0
  5. data/Gemfile.lock +47 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +4 -0
  8. data/Rakefile +76 -0
  9. data/VERSION +1 -0
  10. data/lib/.DS_Store +0 -0
  11. data/lib/ninjs-framework.rb +164 -0
  12. data/lib/ninjs-framework/assets/jasmine/jasmine-html.js +190 -0
  13. data/lib/ninjs-framework/assets/jasmine/jasmine.css +166 -0
  14. data/lib/ninjs-framework/assets/jasmine/jasmine.js +2476 -0
  15. data/lib/ninjs-framework/assets/jasmine/jasmine_favicon.png +0 -0
  16. data/lib/ninjs-framework/core/.core.pdoc.yaml +0 -0
  17. data/lib/ninjs-framework/core/.existence.pdoc.yaml +12 -0
  18. data/lib/ninjs-framework/core/.extend.pdoc.yaml +0 -0
  19. data/lib/ninjs-framework/core/.nin.pdoc.yaml +0 -0
  20. data/lib/ninjs-framework/core/application.js +17 -0
  21. data/lib/ninjs-framework/core/dom.js +164 -0
  22. data/lib/ninjs-framework/core/existence.js +60 -0
  23. data/lib/ninjs-framework/core/extend.js +14 -0
  24. data/lib/ninjs-framework/core/module.js +66 -0
  25. data/lib/ninjs-framework/core/nin.js +5 -0
  26. data/lib/ninjs-framework/extensions/jquery.elements.js +60 -0
  27. data/lib/ninjs-framework/templates/application.js.erb +3 -0
  28. data/lib/ninjs-framework/templates/autoload.js.erb +3 -0
  29. data/lib/ninjs-framework/templates/core.js.erb +3 -0
  30. data/lib/ninjs-framework/templates/dependency.js.erb +3 -0
  31. data/lib/ninjs-framework/templates/jasmine.yml.erb +75 -0
  32. data/lib/ninjs-framework/templates/test-index.html.erb +51 -0
  33. data/lib/ninjs-framework/utilities/all.js +5 -0
  34. data/lib/ninjs-framework/utilities/array.js +29 -0
  35. data/lib/ninjs-framework/utilities/cookie.js +59 -0
  36. data/lib/ninjs-framework/utilities/css.js +51 -0
  37. data/lib/ninjs-framework/utilities/number.js +11 -0
  38. data/lib/ninjs-framework/utilities/string.js +61 -0
  39. data/spec/fixtures/myapp.js +530 -0
  40. data/spec/fixtures/nin.js +297 -0
  41. data/spec/fixtures/ninjs.conf +9 -0
  42. data/spec/fixtures/test.elements.js +3 -0
  43. data/spec/fixtures/test.js +14 -0
  44. data/spec/fixtures/test.model.js +3 -0
  45. data/spec/fixtures/test.module.js +10 -0
  46. data/spec/fixtures/utilities.js +211 -0
  47. data/spec/javascripts/application_spec.js +22 -0
  48. data/spec/javascripts/array_utility_spec.js +49 -0
  49. data/spec/javascripts/existence_spec.js +71 -0
  50. data/spec/javascripts/extension_spec.js +22 -0
  51. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  52. data/spec/javascripts/module_spec.js +30 -0
  53. data/spec/javascripts/string_utility_spec.js +85 -0
  54. data/spec/javascripts/support/jasmine.yml +75 -0
  55. data/spec/javascripts/support/jasmine_config.rb +23 -0
  56. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  57. data/spec/ninjs_framework_spec.rb +121 -0
  58. data/spec/spec_helper.rb +41 -0
  59. data/spec/tmp/Rakefile +76 -0
  60. data/spec/tmp/application/myapp.js +530 -0
  61. data/spec/tmp/application/test.js +14 -0
  62. data/spec/tmp/elements/test.elements.js +3 -0
  63. data/spec/tmp/lib/nin.js +297 -0
  64. data/spec/tmp/lib/utilities.js +211 -0
  65. data/spec/tmp/models/test.model.js +3 -0
  66. data/spec/tmp/modules/test.module.js +10 -0
  67. data/spec/tmp/ninjs.conf +9 -0
  68. data/spec/tmp/spec/index.html +51 -0
  69. data/spec/tmp/spec/javascripts/application_spec.js +22 -0
  70. data/spec/tmp/spec/javascripts/array_utility_spec.js +49 -0
  71. data/spec/tmp/spec/javascripts/existence_spec.js +71 -0
  72. data/spec/tmp/spec/javascripts/extension_spec.js +22 -0
  73. data/spec/tmp/spec/javascripts/module_spec.js +30 -0
  74. data/spec/tmp/spec/javascripts/string_utility_spec.js +85 -0
  75. data/spec/tmp/spec/javascripts/support/jasmine-html.js +190 -0
  76. data/spec/tmp/spec/javascripts/support/jasmine.css +166 -0
  77. data/spec/tmp/spec/javascripts/support/jasmine.js +2476 -0
  78. data/spec/tmp/spec/javascripts/support/jasmine.yml.erb +75 -0
  79. data/spec/tmp/spec/javascripts/support/jasmine_config.rb +23 -0
  80. data/spec/tmp/spec/javascripts/support/jasmine_favicon.png +0 -0
  81. data/spec/tmp/spec/javascripts/support/jasmine_runner.rb +32 -0
  82. metadata +285 -0
File without changes
@@ -0,0 +1,12 @@
1
+ ---
2
+ id: "is_defined"
3
+ type: class method
4
+ line_number: 5
5
+ description: |
6
+
7
+
8
+ signatures:
9
+ -
10
+ signature: ".is_defined(suspect)"
11
+ return_value: "Any"
12
+ file: /Volumes/Storage/Development/ninjs/repository/ninjs/core/existence.js
File without changes
File without changes
@@ -0,0 +1,17 @@
1
+ NinjsApplication = function() {};
2
+
3
+ NinjsApplication.prototype.add_module = function(name) {
4
+ if (is_undefined(name)) {
5
+ throw new SyntaxError("NinjsApplication.add_module(name): name is undefined");
6
+ }
7
+
8
+ if (is_defined(this[name])) {
9
+ throw new SyntaxError("NinjsApplication.add_module(name): '" + name + "' already declared");
10
+ }
11
+
12
+ if (this.name === name) {
13
+ throw new SyntaxError("NinjsApplication.add_module(name): a module cannot have the same name as the application");
14
+ }
15
+
16
+ return this[name] = new NinjsModule(name);
17
+ };
@@ -0,0 +1,164 @@
1
+ var DomReady = window.DomReady = {},
2
+ userAgent = navigator.userAgent.toLowerCase(),
3
+ browser = {
4
+ version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
5
+ safari: /webkit/.test(userAgent),
6
+ opera: /opera/.test(userAgent),
7
+ msie: (/msie/.test(userAgent)) && (!/opera/.test( userAgent )),
8
+ mozilla: (/mozilla/.test(userAgent)) && (!/(compatible|webkit)/.test(userAgent))
9
+ },
10
+ readyBound = false,
11
+ isReady = false,
12
+ readyList = [];
13
+
14
+
15
+ function domReady() {
16
+ // Make sure that the DOM is not already loaded
17
+ if(!isReady) {
18
+ // Remember that the DOM is ready
19
+ isReady = true;
20
+
21
+ if(readyList) {
22
+ var length = readyList.length;
23
+ for(var fn = 0; fn < length; fn++) {
24
+ readyList[fn].call(window, []);
25
+ }
26
+
27
+ readyList = [];
28
+ }
29
+ }
30
+ };
31
+
32
+ // From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
33
+ function addLoadEvent(func) {
34
+ var oldonload = window.onload;
35
+ if (typeof window.onload != 'function') {
36
+ window.onload = func;
37
+ }
38
+ else {
39
+ window.onload = function() {
40
+ if (oldonload) {
41
+ oldonload();
42
+ }
43
+ func();
44
+ }
45
+ }
46
+ };
47
+
48
+ // does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
49
+ function bindReady() {
50
+ if(readyBound) {
51
+ return;
52
+ }
53
+
54
+ readyBound = true;
55
+
56
+ // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
57
+ if (document.addEventListener && !browser.opera) {
58
+ // Use the handy event callback
59
+ document.addEventListener("DOMContentLoaded", domReady, false);
60
+ }
61
+
62
+ // If IE is used and is not in a frame
63
+ // Continually check to see if the document is ready
64
+ if (browser.msie && window == top) (function() {
65
+ if (isReady) return;
66
+ try {
67
+ // If IE is used, use the trick by Diego Perini
68
+ // http://javascript.nwbox.com/IEContentLoaded/
69
+ document.documentElement.doScroll("left");
70
+ }
71
+ catch(error) {
72
+ setTimeout(arguments.callee, 0);
73
+ return;
74
+ }
75
+ // and execute any waiting functions
76
+ domReady();
77
+ })();
78
+
79
+ if(browser.opera) {
80
+ document.addEventListener( "DOMContentLoaded", function () {
81
+ if (isReady) return;
82
+ for (var i = 0; i < document.styleSheets.length; i++)
83
+ if (document.styleSheets[i].disabled) {
84
+ setTimeout( arguments.callee, 0 );
85
+ return;
86
+ }
87
+ // and execute any waiting functions
88
+ domReady();
89
+ }, false);
90
+ }
91
+
92
+ if(browser.safari) {
93
+ var numStyles;
94
+ (function(){
95
+ if (isReady) return;
96
+
97
+ if (document.readyState != "loaded" && document.readyState != "complete") {
98
+ setTimeout( arguments.callee, 0 );
99
+ return;
100
+ }
101
+
102
+ if (numStyles === undefined) {
103
+ var links = document.getElementsByTagName("link");
104
+ for (var i=0; i < links.length; i++) {
105
+ if(links[i].getAttribute('rel') == 'stylesheet') {
106
+ numStyles++;
107
+ }
108
+ }
109
+
110
+ var styles = document.getElementsByTagName("style");
111
+ numStyles += styles.length;
112
+ }
113
+
114
+ if (document.styleSheets.length != numStyles) {
115
+ setTimeout( arguments.callee, 0 );
116
+ return;
117
+ }
118
+
119
+ // and execute any waiting functions
120
+ domReady();
121
+ })();
122
+ }
123
+
124
+ // A fallback to window.onload, that will always work
125
+ addLoadEvent(domReady);
126
+ };
127
+
128
+ // This is the public function that people can use to hook up ready.
129
+ DomReady.ready = function(fn, args) {
130
+ // Attach the listeners
131
+ bindReady();
132
+
133
+ // If the DOM is already ready
134
+ if (isReady) {
135
+ // Execute the function immediately
136
+ fn.call(window, []);
137
+ }
138
+ else {
139
+ // Add the function to the wait list
140
+ readyList.push( function() { return fn.call(window, []); } );
141
+ }
142
+ };
143
+
144
+ NinjsDOM = function() {
145
+ this.cached_selectors = {};
146
+ };
147
+
148
+ // This is the public function that people can use to hook up ready.
149
+ NinjsDOM.prototype.ready = function(fn, args) {
150
+ // Attach the listeners
151
+ bindReady();
152
+
153
+ // If the DOM is already ready
154
+ if (isReady) {
155
+ // Execute the function immediately
156
+ fn.call(window, args || []);
157
+ }
158
+ else {
159
+ // Add the function to the wait list
160
+ readyList.push( function() { return fn.call(window, args || []); } );
161
+ }
162
+ };
163
+
164
+ bindReady();
@@ -0,0 +1,60 @@
1
+ is_defined = function(suspect) {
2
+ return ((suspect === undefined) || (suspect === null)) ? false : true;
3
+ };
4
+
5
+ is_undefined = function(suspect) {
6
+ return (suspect === undefined) ? true : false;
7
+ };
8
+
9
+ is_typeof = function(type, suspect) {
10
+ if (is_undefined(type)) {
11
+ throw new SyntaxError("is_typeof(Type, suspect): type is undefined");
12
+ }
13
+ if (is_undefined(suspect)) {
14
+ throw new SyntaxError("is_typeof(Type, suspect): suspect is undefined");
15
+ }
16
+
17
+ return (suspect.constructor == type) ? true : false;
18
+ };
19
+
20
+ is_numeric = function(suspect) {
21
+ if(is_typeof(Number, suspect)) {
22
+ return true;
23
+ }
24
+ else {
25
+ var pattern = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
26
+ return pattern.test(suspect);
27
+ }
28
+ };
29
+
30
+ is_string = function(suspect) {
31
+ return is_typeof(String, suspect);
32
+ };
33
+
34
+ is_array = function(suspect) {
35
+ return is_typeof(Array, suspect);
36
+ };
37
+
38
+ is_number = function(suspect) {
39
+ return is_typeof(Number, suspect);
40
+ };
41
+
42
+ is_date = function(suspect) {
43
+ return is_typeof(Date, suspect);
44
+ };
45
+
46
+ is_bool = function(suspect) {
47
+ return is_typeof(Boolean, suspect);
48
+ };
49
+
50
+ is_regex = function(suspect) {
51
+ return is_typeof(RegExp, suspect);
52
+ };
53
+
54
+ is_empty = function(suspect) {
55
+ return suspect.length === 0;
56
+ };
57
+
58
+ is_not_empty = function(suspect) {
59
+ return suspect.length >= 1;
60
+ };
@@ -0,0 +1,14 @@
1
+ unless = function(expression, callback, fallback) {
2
+ if (is_undefined(callback)) {
3
+ throw new SyntaxError("unless(expression, callback[, fallback]): callback is undefined");
4
+ }
5
+
6
+ if (!!!expression) {
7
+ callback.call(this);
8
+ }
9
+ else {
10
+ if (is_defined(fallback)) {
11
+ fallback.call(this);
12
+ }
13
+ }
14
+ };
@@ -0,0 +1,66 @@
1
+ NinjsModule = function(name) {
2
+ this.dom = new NinjsDOM(this);
3
+ this.data = {};
4
+ this.name = name;
5
+ };
6
+
7
+ NinjsModule.prototype.actions = function() {};
8
+
9
+ NinjsModule.prototype.run = function() {
10
+ var mod = this;
11
+ this.dom.ready(function() {
12
+ mod.execute();
13
+ });
14
+ };
15
+
16
+ NinjsModule.prototype.execute = function() {
17
+ this.actions();
18
+ };
19
+
20
+ NinjsModule.prototype.elements = function(elements) {
21
+ if (is_undefined(elements)) {
22
+ if (is_typeof(Object, elements)) {
23
+ throw new SyntaxError("NinjsModule.elements(elements): elements is undefined");
24
+ }
25
+ else if (is_string(elements)) {
26
+ throw new SyntaxError("NinjsModule.elements(name): name is undefined");
27
+ }
28
+ }
29
+
30
+ if (is_string(elements)) {
31
+ var name = elements;
32
+ return this.dom.cached_selectors[name];
33
+ }
34
+ else {
35
+ var dom = this.dom;
36
+ dom.ready(function() {
37
+ for(var key in elements) {
38
+ if (elements.hasOwnProperty(key)) {
39
+ dom.cached_selectors[key] = elements[key];
40
+ }
41
+ }
42
+ });
43
+ }
44
+ };
45
+
46
+ NinjsModule.prototype.set_data = function(key, value) {
47
+ if (is_undefined(key)) {
48
+ throw new SyntaxError('NinjsModule.set_data(key, value): key is undefined');
49
+ }
50
+
51
+ if (is_typeof(String, key) && is_undefined(value)) {
52
+ throw new SyntaxError('NinjsModule.set_data(key, value): value is undefined');
53
+ }
54
+
55
+ if (is_typeof(String, key)) {
56
+ this.data[key] = value;
57
+ }
58
+ else if (is_typeof(Object, key)) {
59
+ var data = key;
60
+ for(var property in data) {
61
+ this.data[property] = data[property];
62
+ }
63
+ }
64
+
65
+ return this;
66
+ };
@@ -0,0 +1,5 @@
1
+ //= require "existence"
2
+ //= require "extend"
3
+ //= require "dom"
4
+ //= require "module"
5
+ //= require "application"
@@ -0,0 +1,60 @@
1
+ (function($) {
2
+ NinjsModule.prototype.elements = function(elements, force) {
3
+ var self = this;
4
+
5
+ unless(is_defined(force), function() {
6
+ force = false;
7
+ });
8
+
9
+ if (is_string(elements)) {
10
+ var key = elements;
11
+ if (is_undefined(self.dom[key])) {
12
+ throw new SyntaxError("NinjsModule.elements('" + key + "'): " + self.name + ".dom." + key + " is undefined");
13
+ }
14
+
15
+ if (is_string(self.dom[key])) {
16
+ var selection = $(self.dom[key]);
17
+
18
+ unless(selection.length === 0, function() {
19
+ return self.dom[key] = selection;
20
+ }, function() {
21
+ return self.dom[key];
22
+ });
23
+ }
24
+ else {
25
+ if (self.dom[key].length === 0 || force) {
26
+
27
+ var return_obj = undefined;
28
+
29
+ if (is_string(force)) {
30
+ var selector = self.dom[key].selector;
31
+ self.dom[key] = $(force).find(selector);
32
+ self.dom[key].selector = selector;
33
+
34
+ return_obj = self.dom[key];
35
+ }
36
+
37
+ var selection = $(self.dom[key].selector);
38
+
39
+ unless(selection.length === 0, function() {
40
+ return_obj = selection;
41
+ });
42
+
43
+ return return_obj;
44
+ }
45
+ else {
46
+ return self.dom[key];
47
+ }
48
+ }
49
+ }
50
+ else if (is_typeof(Object, elements)) {
51
+ self.call_on_ready(function() {
52
+ for(var key in elements) {
53
+ if (elements.hasOwnProperty(key)) {
54
+ self.dom[key] = elements[key];
55
+ }
56
+ }
57
+ });
58
+ }
59
+ };
60
+ })(jQuery);
@@ -0,0 +1,3 @@
1
+ //-- This file was automatically generated by Ninjs @ <%= Time.now.to_s %> DO NOT EDIT THIS FILE --//\n"
2
+ <%= ninjs_lib %>
3
+ var <%= @config[:name] %> = new NinjsApplication();
@@ -0,0 +1,3 @@
1
+ /*---------- Ninjs autoload <%= auto_file %> ----------*/
2
+ <%= "//= require #{auto_file}" if is_repo %>
3
+ <%= "//= require \"#{auto_file}\"" unless is_repo %>
@@ -0,0 +1,3 @@
1
+ /*---------- Ninjs core ../lib/nin.js ----------*/
2
+ //= require "../lib/nin.js"
3
+ var <%= @config[:name] %> = new NinjsApplication();
@@ -0,0 +1,3 @@
1
+ /*---------- Ninjs dependency <%= dependency %> ----------*/
2
+ <%= "//= require #{dependency}" if is_repo %>
3
+ <%= "//= require \"#{dependency}\"" unless is_repo %>
@@ -0,0 +1,75 @@
1
+ # src_files
2
+ #
3
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
4
+ # Default: []
5
+ #
6
+ # EXAMPLE:
7
+ #
8
+ # src_files:
9
+ # - lib/source1.js
10
+ # - lib/source2.js
11
+ # - dist/**/*.js
12
+ #
13
+ src_files:
14
+ - lib/core/*.js
15
+ - lib/extensions/*.js
16
+ - lib/utilities/*.js
17
+
18
+ # stylesheets
19
+ #
20
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
21
+ # Default: []
22
+ #
23
+ # EXAMPLE:
24
+ #
25
+ # stylesheets:
26
+ # - css/style.css
27
+ # - stylesheets/*.css
28
+ #
29
+ stylesheets:
30
+
31
+ # helpers
32
+ #
33
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
34
+ # Default: ["helpers/**/*.js"]
35
+ #
36
+ # EXAMPLE:
37
+ #
38
+ # helpers:
39
+ # - helpers/**/*.js
40
+ #
41
+ helpers:
42
+
43
+ # spec_files
44
+ #
45
+ # Return an array of filepaths relative to spec_dir to include.
46
+ # Default: ["**/*[sS]pec.js"]
47
+ #
48
+ # EXAMPLE:
49
+ #
50
+ # spec_files:
51
+ # - **/*[sS]pec.js
52
+ #
53
+ spec_files:
54
+
55
+ # src_dir
56
+ #
57
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
58
+ # Default: project root
59
+ #
60
+ # EXAMPLE:
61
+ #
62
+ # src_dir: public
63
+ #
64
+ src_dir:
65
+
66
+ # spec_dir
67
+ #
68
+ # Spec directory path. Your spec_files must be returned relative to this path.
69
+ # Default: spec/javascripts
70
+ #
71
+ # EXAMPLE:
72
+ #
73
+ # spec_dir: spec/javascripts
74
+ #
75
+ spec_dir: