ninjs 0.13.8 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/ninjs +2 -1
- data/lib/ninjs/command.rb +1 -1
- data/lib/ninjs/generator.rb +14 -10
- data/lib/ninjs/project.rb +7 -4
- data/ninjs.gemspec +20 -7
- data/repository/ninjs/core/application.js +24 -43
- data/repository/ninjs/core/dom.js +139 -0
- data/repository/ninjs/core/existence.js +121 -277
- data/repository/ninjs/core/extend.js +35 -77
- data/repository/ninjs/core/module.js +101 -116
- data/repository/ninjs/core/nin.js +7 -4
- data/repository/ninjs/tests/application.test.js +24 -0
- data/repository/ninjs/tests/array.utilities.test.js +55 -0
- data/repository/ninjs/tests/existence.test.js +64 -0
- data/repository/ninjs/tests/extension.test.js +38 -0
- data/repository/ninjs/tests/index.html +11 -5
- data/repository/ninjs/tests/module.test.js +75 -0
- data/repository/ninjs/tests/qspec.js +26 -0
- data/repository/ninjs/tests/{ninjs.utilities.test.js → string.utilities.test.js} +14 -66
- data/spec/cli_spec.rb +159 -0
- data/spec/command_spec.rb +226 -2
- data/spec/fixtures/compressed.myapp.js +40 -20
- data/spec/fixtures/myapp.initial.js +383 -488
- data/spec/fixtures/myapp.js +379 -484
- data/spec/fixtures/mymodule.alias.module.js +10 -0
- data/spec/fixtures/mymodule.dependencies.module.js +13 -0
- data/spec/fixtures/mymodule.elements.js +5 -0
- data/spec/fixtures/mymodule.model.js +3 -0
- data/spec/fixtures/mymodule.module.js +10 -0
- data/spec/fixtures/nin.js +428 -0
- data/spec/generator_spec.rb +58 -10
- data/spec/project_spec.rb +11 -7
- metadata +59 -9
- data/repository/ninjs/tests/ninjs.test.js +0 -188
- data/repository/ninjs/tests/qunit/qunit.css +0 -197
- data/repository/ninjs/tests/qunit/qunit.js +0 -1415
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.14.0
|
data/bin/ninjs
CHANGED
@@ -83,7 +83,7 @@ help = {
|
|
83
83
|
command = ARGV[0]
|
84
84
|
|
85
85
|
options = {
|
86
|
-
:alias =>
|
86
|
+
:alias => nil,
|
87
87
|
:elements => false,
|
88
88
|
:model => false,
|
89
89
|
:help => false,
|
@@ -171,6 +171,7 @@ case command
|
|
171
171
|
}
|
172
172
|
|
173
173
|
Ninjs::Command.generate({
|
174
|
+
:project => Ninjs::Project.new,
|
174
175
|
:type => type,
|
175
176
|
:name => name,
|
176
177
|
:alias => als,
|
data/lib/ninjs/command.rb
CHANGED
@@ -3,7 +3,7 @@ module Ninjs
|
|
3
3
|
def watch
|
4
4
|
require "fssm"
|
5
5
|
|
6
|
-
project_path = File.expand_path
|
6
|
+
project_path = File.expand_path Dir.getwd
|
7
7
|
raise "ninjs.conf was not located in #{project_path}" unless File.exists? "#{project_path}/ninjs.conf"
|
8
8
|
|
9
9
|
puts Ninjs::Notification.log "Ninjs are watching for changes. Press Ctrl-C to stop."
|
data/lib/ninjs/generator.rb
CHANGED
@@ -5,7 +5,7 @@ module Ninjs
|
|
5
5
|
|
6
6
|
def initialize(config)
|
7
7
|
@type = config[:type]
|
8
|
-
@project =
|
8
|
+
@project = config[:project]
|
9
9
|
@name = config[:name]
|
10
10
|
@module_name = config[:name].gsub(/^_/, '')
|
11
11
|
@alias = config[:alias].nil? ? false : true
|
@@ -21,14 +21,18 @@ module Ninjs
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def generate_module_file
|
24
|
+
module_content = Array.new
|
25
|
+
module_content << "(function(#{@app_name if @alias}) {\n"
|
26
|
+
module_content << "\tvar mod = #{@app_name}.add_module('#{@name}');\n\n"
|
27
|
+
module_content << %Q{\t//= require "../elements/#{@name.downcase}.elements"\n} if @dependencies[:elements] || @type === 'elements'
|
28
|
+
module_content << %Q{\t//= require "../models/#{@name.downcase}.model"\n\n} if @dependencies[:model] || @type === 'model'
|
29
|
+
module_content << "\t#{@app_name}.#{@module_name}.actions = function() {\n\t\t\n\t};\n\n"
|
30
|
+
module_content << "\t#{@app_name}.#{@module_name}.run();\n"
|
31
|
+
module_content << "\n})(#{@project.config.name if @alias});"
|
32
|
+
|
33
|
+
|
24
34
|
File.open "#{@project.root}/#{@dest}/#{@name}.module.js", "w" do |file|
|
25
|
-
file <<
|
26
|
-
file << "\tvar self = #{@app_name}.add_module('#{@name}');\n\n"
|
27
|
-
file << %Q(\t//= require "../elements/#{@name.downcase}.elements"\n\n) if @dependencies[:elements] || @type === 'elements'
|
28
|
-
file << %Q(\t//= require "../models/#{@name.downcase}.model"\n\n) if @dependencies[:model] || @type === 'model'
|
29
|
-
file << "\t#{@app_name}.#{@module_name}.actions = function() {\n\n\t};\n\n"
|
30
|
-
file << "\t#{@app_name}.#{@module_name}.run();\n"
|
31
|
-
file << "})(#{@project.config.name});" if @alias
|
35
|
+
file << module_content.join('')
|
32
36
|
puts Ninjs::Notification.added "created #{@name.downcase}.module.js"
|
33
37
|
end unless File.exists? "#{@project.root}/#{@dest}/#{@name}.module.js"
|
34
38
|
|
@@ -37,7 +41,7 @@ module Ninjs
|
|
37
41
|
|
38
42
|
def generate_elements_file
|
39
43
|
File.open("#{@project.root}/elements/#{@module_name}" + ".elements.js", "w") do |file|
|
40
|
-
file <<
|
44
|
+
file << %Q{\tmod.dom.ready(function() {\n\t\t#{@app_name}.#{@module_name}.elements({\n\t\t\t\n\t\t});\n\t});\n}
|
41
45
|
puts Ninjs::Notification.added "created #{@module_name}.elements.js"
|
42
46
|
end unless File.exists? "#{@project.root}/elements/#{@module_name}.elements.js"
|
43
47
|
|
@@ -46,7 +50,7 @@ module Ninjs
|
|
46
50
|
|
47
51
|
def generate_model_file
|
48
52
|
File.open "#{@project.root}/models/#{@module_name}.model.js", "w" do |file|
|
49
|
-
file <<
|
53
|
+
file << %Q{\t#{@app_name}.#{@module_name}.set_data({\n\t\t\n\t});\n}
|
50
54
|
puts Ninjs::Notification.added "created #{@module_name}.model.js"
|
51
55
|
end unless File.exists? "#{@project.root}/models/#{@module_name}.model.js"
|
52
56
|
|
data/lib/ninjs/project.rb
CHANGED
@@ -75,10 +75,13 @@ module Ninjs
|
|
75
75
|
|
76
76
|
def import_test_files
|
77
77
|
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/index.html", "#{@root}/tests"
|
78
|
-
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/
|
79
|
-
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/
|
80
|
-
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/
|
81
|
-
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/
|
78
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/application.test.js", "#{@root}/tests"
|
79
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/array.utilities.test.js", "#{@root}/tests"
|
80
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/existence.test.js", "#{@root}/tests"
|
81
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/extension.test.js", "#{@root}/tests"
|
82
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/module.test.js", "#{@root}/tests"
|
83
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/qspec.js", "#{@root}/tests"
|
84
|
+
FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/string.utilities.test.js", "#{@root}/tests"
|
82
85
|
end
|
83
86
|
|
84
87
|
def update
|
data/ninjs.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ninjs}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.14.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dayton Nolan"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-05}
|
13
13
|
s.default_executable = %q{ninjs}
|
14
14
|
s.description = %q{Ninjs is a ruby application and small javascript framework that helps you build clean, modular javascript applications. Ninjs encourages "Good Parts" best practices and the Crockford school Module pattern (http://www.crockford.com/). The ninjs command line application is an automatic compiler, written in ruby, and based on the Sprockets library (http://getsprockets.org/).}
|
15
15
|
s.email = %q{daytonn@gmail.com}
|
@@ -122,6 +122,7 @@ Gem::Specification.new do |s|
|
|
122
122
|
"repository/ninjs/core/.extend.pdoc.yaml",
|
123
123
|
"repository/ninjs/core/.nin.pdoc.yaml",
|
124
124
|
"repository/ninjs/core/application.js",
|
125
|
+
"repository/ninjs/core/dom.js",
|
125
126
|
"repository/ninjs/core/existence.js",
|
126
127
|
"repository/ninjs/core/extend.js",
|
127
128
|
"repository/ninjs/core/module.js",
|
@@ -187,11 +188,14 @@ Gem::Specification.new do |s|
|
|
187
188
|
"repository/ninjs/docs/search/VariablesT.html",
|
188
189
|
"repository/ninjs/docs/styles/main.css",
|
189
190
|
"repository/ninjs/extensions/jquery.elements.js",
|
191
|
+
"repository/ninjs/tests/application.test.js",
|
192
|
+
"repository/ninjs/tests/array.utilities.test.js",
|
193
|
+
"repository/ninjs/tests/existence.test.js",
|
194
|
+
"repository/ninjs/tests/extension.test.js",
|
190
195
|
"repository/ninjs/tests/index.html",
|
191
|
-
"repository/ninjs/tests/
|
192
|
-
"repository/ninjs/tests/
|
193
|
-
"repository/ninjs/tests/
|
194
|
-
"repository/ninjs/tests/qunit/qunit.js",
|
196
|
+
"repository/ninjs/tests/module.test.js",
|
197
|
+
"repository/ninjs/tests/qspec.js",
|
198
|
+
"repository/ninjs/tests/string.utilities.test.js",
|
195
199
|
"repository/ninjs/utilities/all.js",
|
196
200
|
"repository/ninjs/utilities/array.js",
|
197
201
|
"repository/ninjs/utilities/cookie.js",
|
@@ -267,6 +271,7 @@ Gem::Specification.new do |s|
|
|
267
271
|
"repository/syntaxhighlighter/shBrushXml.js",
|
268
272
|
"repository/syntaxhighlighter/shCore.js",
|
269
273
|
"repository/syntaxhighlighter/shLegacy.js",
|
274
|
+
"spec/cli_spec.rb",
|
270
275
|
"spec/command_spec.rb",
|
271
276
|
"spec/configuration_spec.rb",
|
272
277
|
"spec/dependencies_spec.rb",
|
@@ -285,7 +290,13 @@ Gem::Specification.new do |s|
|
|
285
290
|
"spec/fixtures/hello.module.js",
|
286
291
|
"spec/fixtures/myapp.initial.js",
|
287
292
|
"spec/fixtures/myapp.js",
|
293
|
+
"spec/fixtures/mymodule.alias.module.js",
|
294
|
+
"spec/fixtures/mymodule.dependencies.module.js",
|
295
|
+
"spec/fixtures/mymodule.elements.js",
|
296
|
+
"spec/fixtures/mymodule.model.js",
|
297
|
+
"spec/fixtures/mymodule.module.js",
|
288
298
|
"spec/fixtures/new.ninjs.conf",
|
299
|
+
"spec/fixtures/nin.js",
|
289
300
|
"spec/fixtures/ninjs.conf",
|
290
301
|
"spec/generator_spec.rb",
|
291
302
|
"spec/helpers_spec.rb",
|
@@ -299,9 +310,10 @@ Gem::Specification.new do |s|
|
|
299
310
|
s.licenses = ["MIT"]
|
300
311
|
s.require_paths = ["lib"]
|
301
312
|
s.rubyforge_project = %q{nowarning}
|
302
|
-
s.rubygems_version = %q{1.
|
313
|
+
s.rubygems_version = %q{1.3.7}
|
303
314
|
s.summary = %q{ninjs is a command line application to help you write clean, modular javascript applications.}
|
304
315
|
s.test_files = [
|
316
|
+
"spec/cli_spec.rb",
|
305
317
|
"spec/command_spec.rb",
|
306
318
|
"spec/configuration_spec.rb",
|
307
319
|
"spec/dependencies_spec.rb",
|
@@ -315,6 +327,7 @@ Gem::Specification.new do |s|
|
|
315
327
|
]
|
316
328
|
|
317
329
|
if s.respond_to? :specification_version then
|
330
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
318
331
|
s.specification_version = 3
|
319
332
|
|
320
333
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
@@ -1,47 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
An NinjsApplication object serves as your application's namespace and includes a utility to add modules to the application object.
|
1
|
+
window.NinjsApplication = function(base_url, tests_path) {
|
2
|
+
if(is_defined(tests_path)) {
|
3
|
+
this.tests_path = tests_path;
|
4
|
+
}
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
if(is_defined(base_url)) {
|
7
|
+
this.site_url = function(path) {
|
8
|
+
var path = path || '';
|
9
|
+
return base_url + path;
|
10
|
+
};
|
11
|
+
}
|
12
|
+
};
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
if(is_defined(base_url)) {
|
17
|
-
this.site_url = function(path) {
|
18
|
-
var path = path || '';
|
19
|
-
return base_url + path;
|
20
|
-
};
|
21
|
-
}
|
22
|
-
};
|
14
|
+
NinjsApplication.method('add_module', function(name) {
|
15
|
+
if (is_undefined(name)) {
|
16
|
+
throw new SyntaxError("NinjsApplication.add_module(name): name is undefined");
|
17
|
+
}
|
23
18
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
Parameters:
|
29
|
-
name - the name of the module
|
30
|
-
|
31
|
-
> myapp.add_module('my_module');
|
32
|
-
*/
|
33
|
-
NinjsApplication.method('add_module', function(name) {
|
34
|
-
if (is_undefined(name)) {
|
35
|
-
throw new SyntaxError("NinjsApplication.add_module(name): name is undefined");
|
36
|
-
}
|
19
|
+
if (is_defined(this[name])) {
|
20
|
+
throw new SyntaxError("NinjsApplication.add_module(name): '" + name + "' already declared");
|
21
|
+
}
|
37
22
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
}
|
45
|
-
|
46
|
-
return this[name] = new NinjsModule(name);
|
47
|
-
});
|
23
|
+
if (this.name === name) {
|
24
|
+
throw new SyntaxError("NinjsApplication.add_module(name): a module cannot have the same name as the application");
|
25
|
+
}
|
26
|
+
|
27
|
+
return this[name] = new NinjsModule(name);
|
28
|
+
});
|
@@ -0,0 +1,139 @@
|
|
1
|
+
var userAgent = navigator.userAgent;
|
2
|
+
var browser = {
|
3
|
+
agent: userAgent,
|
4
|
+
mozilla: (/mozilla/.test(userAgent.toLowerCase())) && (!/(compatible|webkit)/.test(userAgent.toLowerCase())),
|
5
|
+
webkit: /webkit/.test(userAgent.toLowerCase()),
|
6
|
+
firefox: /firefox/.test(userAgent.toLowerCase()),
|
7
|
+
chrome: /webkit/.test(userAgent.toLowerCase()),
|
8
|
+
safari: /safari/.test(userAgent.toLowerCase()),
|
9
|
+
opera: /opera/.test(userAgent.toLowerCase()),
|
10
|
+
msie: (/msie/.test(userAgent.toLowerCase())) && (!/opera/.test( userAgent.toLowerCase() ))
|
11
|
+
};
|
12
|
+
|
13
|
+
var readyBound = false;
|
14
|
+
var isReady = false;
|
15
|
+
var readyList = [];
|
16
|
+
|
17
|
+
function domReady() {
|
18
|
+
if (!isReady) {
|
19
|
+
isReady = true;
|
20
|
+
if (readyList) {
|
21
|
+
for(var fn = 0; fn < readyList.length; fn++) {
|
22
|
+
readyList[fn].call(window, []);
|
23
|
+
}
|
24
|
+
readyList = [];
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
// From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
|
30
|
+
function addLoadEvent(func) {
|
31
|
+
var oldonload = window.onload;
|
32
|
+
if (typeof window.onload != 'function') {
|
33
|
+
window.onload = func;
|
34
|
+
} else {
|
35
|
+
window.onload = function() {
|
36
|
+
if (oldonload) {
|
37
|
+
oldonload();
|
38
|
+
}
|
39
|
+
func();
|
40
|
+
}
|
41
|
+
}
|
42
|
+
};
|
43
|
+
|
44
|
+
// does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
|
45
|
+
function bindReady() {
|
46
|
+
if (readyBound) {
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
|
50
|
+
readyBound = true;
|
51
|
+
|
52
|
+
// Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
|
53
|
+
if (document.addEventListener && !browser.opera) {
|
54
|
+
// Use the handy event callback
|
55
|
+
document.addEventListener("DOMContentLoaded", domReady, false);
|
56
|
+
}
|
57
|
+
|
58
|
+
// If IE is used and is not in a frame
|
59
|
+
// Continually check to see if the document is ready
|
60
|
+
if (browser.msie && window == top) (function(){
|
61
|
+
if (isReady) return;
|
62
|
+
try {
|
63
|
+
// If IE is used, use the trick by Diego Perini
|
64
|
+
// http://javascript.nwbox.com/IEContentLoaded/
|
65
|
+
document.documentElement.doScroll("left");
|
66
|
+
} catch(error) {
|
67
|
+
setTimeout(arguments.callee, 0);
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
// and execute any waiting functions
|
71
|
+
domReady();
|
72
|
+
})();
|
73
|
+
|
74
|
+
if (browser.opera) {
|
75
|
+
document.addEventListener( "DOMContentLoaded", function () {
|
76
|
+
if (isReady) return;
|
77
|
+
for (var i = 0; i < document.styleSheets.length; i++)
|
78
|
+
if (document.styleSheets[i].disabled) {
|
79
|
+
setTimeout( arguments.callee, 0 );
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
// and execute any waiting functions
|
83
|
+
domReady();
|
84
|
+
}, false);
|
85
|
+
}
|
86
|
+
|
87
|
+
if (browser.safari) {
|
88
|
+
var numStyles;
|
89
|
+
(function(){
|
90
|
+
if (isReady) return;
|
91
|
+
if (document.readyState != "loaded" && document.readyState != "complete") {
|
92
|
+
setTimeout( arguments.callee, 0 );
|
93
|
+
return;
|
94
|
+
}
|
95
|
+
if (numStyles === undefined) {
|
96
|
+
var links = document.getElementsByTagName("link");
|
97
|
+
for (var i=0; i < links.length; i++) {
|
98
|
+
if (links[i].getAttribute('rel') == 'stylesheet') {
|
99
|
+
numStyles++;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
var styles = document.getElementsByTagName("style");
|
103
|
+
numStyles += styles.length;
|
104
|
+
}
|
105
|
+
if (document.styleSheets.length != numStyles) {
|
106
|
+
setTimeout( arguments.callee, 0 );
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
|
110
|
+
// and execute any waiting functions
|
111
|
+
domReady();
|
112
|
+
})();
|
113
|
+
}
|
114
|
+
|
115
|
+
// A fallback to window.onload, that will always work
|
116
|
+
addLoadEvent(domReady);
|
117
|
+
};
|
118
|
+
|
119
|
+
window.NinjsDOM = function() {
|
120
|
+
this.cached_selectors = {};
|
121
|
+
};
|
122
|
+
|
123
|
+
// This is the public function that people can use to hook up ready.
|
124
|
+
NinjsDOM.method('ready', function(fn, args) {
|
125
|
+
// Attach the listeners
|
126
|
+
bindReady();
|
127
|
+
|
128
|
+
// If the DOM is already ready
|
129
|
+
if (isReady) {
|
130
|
+
// Execute the function immediately
|
131
|
+
fn.call(window, []);
|
132
|
+
}
|
133
|
+
else {
|
134
|
+
// Add the function to the wait list
|
135
|
+
readyList.push( function() { return fn.call(window, []); } );
|
136
|
+
}
|
137
|
+
});
|
138
|
+
|
139
|
+
bindReady();
|
@@ -1,277 +1,121 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
}
|
73
|
-
|
74
|
-
|
75
|
-
if (is_undefined(
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
};
|
123
|
-
}
|
124
|
-
|
125
|
-
if (is_undefined(is_array)) {
|
126
|
-
/*
|
127
|
-
Function: is_array
|
128
|
-
Determine if the suspect is an Array. This is a proxy method for is_typeof(Array, suspect).
|
129
|
-
|
130
|
-
Parameters:
|
131
|
-
suspect - suspect variable to test
|
132
|
-
|
133
|
-
Returns:
|
134
|
-
bool
|
135
|
-
|
136
|
-
See Also:
|
137
|
-
<is_typeof>,
|
138
|
-
<is_numeric>,
|
139
|
-
<is_string>,
|
140
|
-
<is_number>,
|
141
|
-
<is_date>,
|
142
|
-
<is_bool>,
|
143
|
-
<is_regex>
|
144
|
-
*/
|
145
|
-
var is_array = function(suspect) {
|
146
|
-
return is_typeof(Array, suspect);
|
147
|
-
};
|
148
|
-
}
|
149
|
-
|
150
|
-
if (is_undefined(is_number)) {
|
151
|
-
/*
|
152
|
-
Function: is_number
|
153
|
-
Determines if the suspect is a Number. This is a proxy method for is_typeof(Number, suspect).
|
154
|
-
|
155
|
-
Parameters:
|
156
|
-
suspect - suspect variable to test
|
157
|
-
|
158
|
-
Returns:
|
159
|
-
bool
|
160
|
-
|
161
|
-
See Also:
|
162
|
-
<is_typeof>,
|
163
|
-
<is_numeric>,
|
164
|
-
<is_string>,
|
165
|
-
<is_array>,
|
166
|
-
<is_date>,
|
167
|
-
<is_bool>,
|
168
|
-
<is_regex>
|
169
|
-
*/
|
170
|
-
var is_number = function(suspect) {
|
171
|
-
return is_typeof(Number, suspect);
|
172
|
-
};
|
173
|
-
}
|
174
|
-
|
175
|
-
if (is_undefined(is_date)) {
|
176
|
-
/*
|
177
|
-
Function: is_date
|
178
|
-
Determines if the suspect is a Date. This is a proxy method for is_typeof(Date, suspect).
|
179
|
-
|
180
|
-
Parameters:
|
181
|
-
suspect - suspect variable to test
|
182
|
-
|
183
|
-
Returns:
|
184
|
-
bool
|
185
|
-
|
186
|
-
See Also:
|
187
|
-
<is_typeof>,
|
188
|
-
<is_numeric>,
|
189
|
-
<is_string>,
|
190
|
-
<is_array>,
|
191
|
-
<is_number>,
|
192
|
-
<is_bool>,
|
193
|
-
<is_regex>
|
194
|
-
*/
|
195
|
-
var is_date = function(suspect) {
|
196
|
-
return is_typeof(Date, suspect);
|
197
|
-
};
|
198
|
-
}
|
199
|
-
|
200
|
-
if (is_undefined(is_bool)) {
|
201
|
-
/*
|
202
|
-
Function: is_bool
|
203
|
-
Determines if the suspect is a Boolean. This is a proxy method for is_typeof(Boolean, suspect).
|
204
|
-
|
205
|
-
Parameters:
|
206
|
-
suspect - suspect variable to test
|
207
|
-
|
208
|
-
Returns:
|
209
|
-
bool
|
210
|
-
|
211
|
-
See Also:
|
212
|
-
<is_typeof>,
|
213
|
-
<is_numeric>,
|
214
|
-
<is_string>,
|
215
|
-
<is_array>,
|
216
|
-
<is_number>,
|
217
|
-
<is_regex>
|
218
|
-
*/
|
219
|
-
var is_bool = function(suspect) {
|
220
|
-
return is_typeof(Boolean, suspect);
|
221
|
-
};
|
222
|
-
}
|
223
|
-
|
224
|
-
if (is_undefined(is_regex)) {
|
225
|
-
/*
|
226
|
-
Function: is_regex
|
227
|
-
Determines if the suspect is a RegExp. This is a proxy method for is_typeof(RegExp, suspect).
|
228
|
-
|
229
|
-
Parameters:
|
230
|
-
suspect - suspect variable to test
|
231
|
-
|
232
|
-
Returns:
|
233
|
-
bool
|
234
|
-
|
235
|
-
See Also:
|
236
|
-
<is_typeof>,
|
237
|
-
<is_numeric>,
|
238
|
-
<is_string>,
|
239
|
-
<is_array>,
|
240
|
-
<is_number>,
|
241
|
-
<is_bool>
|
242
|
-
*/
|
243
|
-
var is_regex = function(suspect) {
|
244
|
-
return is_typeof(RegExp, suspect);
|
245
|
-
};
|
246
|
-
}
|
247
|
-
|
248
|
-
|
249
|
-
if (is_undefined(is_empty)) {
|
250
|
-
/*
|
251
|
-
Function: is_empty
|
252
|
-
Determined if the suspect's length is less than one.
|
253
|
-
|
254
|
-
Parameters:
|
255
|
-
suspect - suspect variable to test
|
256
|
-
|
257
|
-
Returns: bool
|
258
|
-
*/
|
259
|
-
var is_empty = function(suspect) {
|
260
|
-
return suspect.length === 0;
|
261
|
-
};
|
262
|
-
}
|
263
|
-
|
264
|
-
if (is_undefined(is_not_empty)) {
|
265
|
-
/*
|
266
|
-
Function: is_not_empty
|
267
|
-
Determined if the suspect's length is greater than one.
|
268
|
-
|
269
|
-
Parameters:
|
270
|
-
suspect - suspect variable to test
|
271
|
-
|
272
|
-
Returns: bool
|
273
|
-
*/
|
274
|
-
var is_not_empty = function(suspect) {
|
275
|
-
return suspect.length >= 1;
|
276
|
-
};
|
277
|
-
}
|
1
|
+
if (window.is_defined === undefined) {
|
2
|
+
window.is_defined = function(suspect) {
|
3
|
+
return ((suspect === undefined) || (suspect === null)) ? false : true;
|
4
|
+
};
|
5
|
+
}
|
6
|
+
|
7
|
+
if (!is_defined(window.is_undefined)) {
|
8
|
+
window.is_undefined = function(suspect) {
|
9
|
+
return (suspect === undefined) ? true : false;
|
10
|
+
};
|
11
|
+
}
|
12
|
+
|
13
|
+
if (is_undefined(window.is_typeof)) {
|
14
|
+
window.is_typeof = function(type, suspect) {
|
15
|
+
if (is_undefined(type)) {
|
16
|
+
throw new SyntaxError("is_typeof(Type, suspect): type is undefined");
|
17
|
+
}
|
18
|
+
if (is_undefined(suspect)) {
|
19
|
+
throw new SyntaxError("is_typeof(Type, suspect): suspect is undefined");
|
20
|
+
}
|
21
|
+
|
22
|
+
return (suspect.constructor == type) ? true : false;
|
23
|
+
};
|
24
|
+
}
|
25
|
+
|
26
|
+
if (is_undefined(window.is_numeric)) {
|
27
|
+
window.is_numeric = function(suspect) {
|
28
|
+
if(is_typeof(Number, suspect)) {
|
29
|
+
return true;
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
var pattern = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
|
33
|
+
return pattern.test(suspect);
|
34
|
+
}
|
35
|
+
};
|
36
|
+
}
|
37
|
+
|
38
|
+
if (is_undefined(window.is_string)) {
|
39
|
+
window.is_string = function(suspect) {
|
40
|
+
return is_typeof(String, suspect);
|
41
|
+
};
|
42
|
+
}
|
43
|
+
|
44
|
+
if (is_undefined(window.is_array)) {
|
45
|
+
window.is_array = function(suspect) {
|
46
|
+
return is_typeof(Array, suspect);
|
47
|
+
};
|
48
|
+
}
|
49
|
+
|
50
|
+
if (is_undefined(window.is_number)) {
|
51
|
+
window.is_number = function(suspect) {
|
52
|
+
return is_typeof(Number, suspect);
|
53
|
+
};
|
54
|
+
}
|
55
|
+
|
56
|
+
if (is_undefined(window.is_date)) {
|
57
|
+
window.is_date = function(suspect) {
|
58
|
+
return is_typeof(Date, suspect);
|
59
|
+
};
|
60
|
+
}
|
61
|
+
|
62
|
+
if (is_undefined(window.is_bool)) {
|
63
|
+
window.is_bool = function(suspect) {
|
64
|
+
return is_typeof(Boolean, suspect);
|
65
|
+
};
|
66
|
+
}
|
67
|
+
|
68
|
+
if (is_undefined(window.is_regex)) {
|
69
|
+
window.is_regex = function(suspect) {
|
70
|
+
return is_typeof(RegExp, suspect);
|
71
|
+
};
|
72
|
+
}
|
73
|
+
|
74
|
+
|
75
|
+
if (is_undefined(window.is_empty)) {
|
76
|
+
window.is_empty = function(suspect) {
|
77
|
+
return suspect.length === 0;
|
78
|
+
};
|
79
|
+
}
|
80
|
+
|
81
|
+
if (is_undefined(window.is_not_empty)) {
|
82
|
+
window.is_not_empty = function(suspect) {
|
83
|
+
return suspect.length >= 1;
|
84
|
+
};
|
85
|
+
}
|
86
|
+
|
87
|
+
if (is_undefined(Function.prototype['method'])) {
|
88
|
+
Function.prototype.method = function(name, func) {
|
89
|
+
if (is_undefined(name)) {
|
90
|
+
throw new SyntaxError("Object.method(name, func): name is undefined");
|
91
|
+
}
|
92
|
+
|
93
|
+
if (is_undefined(func)) {
|
94
|
+
throw new SyntaxError("Object.method(name, func): func is undefined");
|
95
|
+
}
|
96
|
+
|
97
|
+
if (is_undefined(this.prototype[name])) {
|
98
|
+
this.prototype[name] = func;
|
99
|
+
return this;
|
100
|
+
}
|
101
|
+
};
|
102
|
+
}
|
103
|
+
|
104
|
+
if (is_undefined(window.unless)) {
|
105
|
+
window.unless = function(expression, callback, fallback) {
|
106
|
+
if (is_undefined(expression)) {
|
107
|
+
throw new SyntaxError("unless(expression, callback[, fallback]): expression is undefined");
|
108
|
+
}
|
109
|
+
|
110
|
+
if (is_undefined(callback)) {
|
111
|
+
throw new SyntaxError("unless(expression, callback[, fallback]): callback is undefined");
|
112
|
+
}
|
113
|
+
|
114
|
+
if (!expression) {
|
115
|
+
callback.call(this);
|
116
|
+
}
|
117
|
+
else if (is_defined(fallback)) {
|
118
|
+
fallback.call(this);
|
119
|
+
}
|
120
|
+
};
|
121
|
+
}
|