js-routes 1.4.9 → 2.0.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.
- checksums.yaml +4 -4
- data/.eslintrc.js +15 -0
- data/.gitignore +4 -0
- data/.nvmrc +1 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +29 -0
- data/Readme.md +189 -65
- data/VERSION_2_UPGRADE.md +61 -0
- data/js-routes.gemspec +7 -4
- data/lib/js_routes.rb +109 -63
- data/lib/js_routes/engine.rb +0 -1
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.d.ts +64 -0
- data/lib/routes.js +479 -518
- data/lib/routes.js.map +1 -0
- data/lib/routes.ts +680 -0
- data/package.json +36 -0
- data/spec/dummy/app/assets/config/manifest.js +2 -0
- data/spec/js_routes/default_serializer_spec.rb +8 -3
- data/spec/js_routes/{amd_compatibility_spec.rb → module_types/amd_spec.rb} +1 -9
- data/spec/js_routes/module_types/cjs_spec.rb +15 -0
- data/spec/js_routes/module_types/esm_spec.rb +45 -0
- data/spec/js_routes/{generated_javascript_spec.rb → module_types/umd_spec.rb} +32 -26
- data/spec/js_routes/options_spec.rb +19 -6
- data/spec/js_routes/rails_routes_compatibility_spec.rb +40 -21
- data/spec/js_routes/zzz_last_post_rails_init_spec.rb +2 -2
- data/spec/spec_helper.rb +25 -17
- data/tsconfig.json +32 -0
- data/yarn.lock +2145 -0
- metadata +30 -20
- data/lib/routes.js.coffee +0 -411
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js-routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
|
-
type: :
|
34
|
+
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
@@ -67,33 +67,33 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.1.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: appraisal
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.5.2
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.5.2
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: bump
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
89
|
+
version: 0.10.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
96
|
+
version: 0.10.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: byebug
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.4.0
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.4.0
|
139
139
|
description: Generates javascript file that defines all Rails named routes as javascript
|
140
140
|
helpers
|
141
141
|
email: agresso@gmail.com
|
@@ -145,7 +145,9 @@ extra_rdoc_files:
|
|
145
145
|
- LICENSE.txt
|
146
146
|
files:
|
147
147
|
- ".document"
|
148
|
+
- ".eslintrc.js"
|
148
149
|
- ".gitignore"
|
150
|
+
- ".nvmrc"
|
149
151
|
- ".rspec"
|
150
152
|
- ".travis.yml"
|
151
153
|
- Appraisals
|
@@ -154,6 +156,7 @@ files:
|
|
154
156
|
- LICENSE.txt
|
155
157
|
- Rakefile
|
156
158
|
- Readme.md
|
159
|
+
- VERSION_2_UPGRADE.md
|
157
160
|
- app/assets/javascripts/js-routes.js.erb
|
158
161
|
- gemfiles/rails40_sprockets_2.gemfile
|
159
162
|
- gemfiles/rails40_sprockets_3.gemfile
|
@@ -169,24 +172,32 @@ files:
|
|
169
172
|
- lib/js_routes.rb
|
170
173
|
- lib/js_routes/engine.rb
|
171
174
|
- lib/js_routes/version.rb
|
175
|
+
- lib/routes.d.ts
|
172
176
|
- lib/routes.js
|
173
|
-
- lib/routes.js.
|
177
|
+
- lib/routes.js.map
|
178
|
+
- lib/routes.ts
|
174
179
|
- lib/tasks/js_routes.rake
|
180
|
+
- package.json
|
181
|
+
- spec/dummy/app/assets/config/manifest.js
|
175
182
|
- spec/dummy/app/assets/javascripts/.gitkeep
|
176
183
|
- spec/dummy/config/routes.rb
|
177
|
-
- spec/js_routes/amd_compatibility_spec.rb
|
178
184
|
- spec/js_routes/default_serializer_spec.rb
|
179
|
-
- spec/js_routes/
|
185
|
+
- spec/js_routes/module_types/amd_spec.rb
|
186
|
+
- spec/js_routes/module_types/cjs_spec.rb
|
187
|
+
- spec/js_routes/module_types/esm_spec.rb
|
188
|
+
- spec/js_routes/module_types/umd_spec.rb
|
180
189
|
- spec/js_routes/options_spec.rb
|
181
190
|
- spec/js_routes/rails_routes_compatibility_spec.rb
|
182
191
|
- spec/js_routes/zzz_last_post_rails_init_spec.rb
|
183
192
|
- spec/spec_helper.rb
|
184
193
|
- spec/support/routes.rb
|
194
|
+
- tsconfig.json
|
195
|
+
- yarn.lock
|
185
196
|
homepage: http://github.com/railsware/js-routes
|
186
197
|
licenses:
|
187
198
|
- MIT
|
188
199
|
metadata: {}
|
189
|
-
post_install_message:
|
200
|
+
post_install_message:
|
190
201
|
rdoc_options: []
|
191
202
|
require_paths:
|
192
203
|
- lib
|
@@ -194,16 +205,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
205
|
requirements:
|
195
206
|
- - ">="
|
196
207
|
- !ruby/object:Gem::Version
|
197
|
-
version:
|
208
|
+
version: 2.4.0
|
198
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
210
|
requirements:
|
200
211
|
- - ">="
|
201
212
|
- !ruby/object:Gem::Version
|
202
213
|
version: '0'
|
203
214
|
requirements: []
|
204
|
-
|
205
|
-
|
206
|
-
signing_key:
|
215
|
+
rubygems_version: 3.2.0
|
216
|
+
signing_key:
|
207
217
|
specification_version: 4
|
208
218
|
summary: Brings Rails named routes to javascript
|
209
219
|
test_files: []
|
data/lib/routes.js.coffee
DELETED
@@ -1,411 +0,0 @@
|
|
1
|
-
###
|
2
|
-
File generated by js-routes GEM_VERSION
|
3
|
-
Based on Rails RAILS_VERSION routes of APP_CLASS
|
4
|
-
###
|
5
|
-
root = (exports ? this)
|
6
|
-
|
7
|
-
ParameterMissing = (message, fileName, lineNumber) ->
|
8
|
-
instance = new Error(message, fileName, lineNumber)
|
9
|
-
if Object.setPrototypeOf
|
10
|
-
Object.setPrototypeOf instance, Object.getPrototypeOf(this)
|
11
|
-
else
|
12
|
-
instance.__proto__ = this.__proto__
|
13
|
-
if Error.captureStackTrace
|
14
|
-
Error.captureStackTrace instance, ParameterMissing
|
15
|
-
instance
|
16
|
-
|
17
|
-
ParameterMissing.prototype = Object.create(Error.prototype, constructor:
|
18
|
-
value: Error
|
19
|
-
enumerable: false
|
20
|
-
writable: true
|
21
|
-
configurable: true
|
22
|
-
)
|
23
|
-
|
24
|
-
if Object.setPrototypeOf
|
25
|
-
Object.setPrototypeOf(ParameterMissing, Error)
|
26
|
-
else
|
27
|
-
ParameterMissing.__proto__ = Error
|
28
|
-
|
29
|
-
NodeTypes = NODE_TYPES
|
30
|
-
DeprecatedGlobbingBehavior = DEPRECATED_GLOBBING_BEHAVIOR
|
31
|
-
SpecialOptionsKey = SPECIAL_OPTIONS_KEY
|
32
|
-
UriEncoderSegmentRegex = /[^a-zA-Z0-9\-\._~!\$&'\(\)\*\+,;=:@]/g # this is ActionDispatch::Journey::Router::Utils::UriEncoder::SEGMENT
|
33
|
-
|
34
|
-
ReservedOptions = [
|
35
|
-
'anchor'
|
36
|
-
'trailing_slash'
|
37
|
-
'subdomain'
|
38
|
-
'host'
|
39
|
-
'port'
|
40
|
-
'protocol'
|
41
|
-
]
|
42
|
-
|
43
|
-
Utils =
|
44
|
-
|
45
|
-
configuration:
|
46
|
-
prefix: PREFIX
|
47
|
-
default_url_options: DEFAULT_URL_OPTIONS
|
48
|
-
special_options_key: SPECIAL_OPTIONS_KEY
|
49
|
-
serializer: SERIALIZER
|
50
|
-
|
51
|
-
|
52
|
-
default_serializer: (object, prefix = null) ->
|
53
|
-
return "" unless object?
|
54
|
-
if !prefix and !(@get_object_type(object) is "object")
|
55
|
-
throw new Error("Url parameters should be a javascript hash")
|
56
|
-
|
57
|
-
s = []
|
58
|
-
switch @get_object_type(object)
|
59
|
-
when "array"
|
60
|
-
for element, i in object
|
61
|
-
s.push @default_serializer(element, prefix + "[]")
|
62
|
-
when "object"
|
63
|
-
for own key, prop of object
|
64
|
-
if !prop? and prefix?
|
65
|
-
prop = ""
|
66
|
-
|
67
|
-
if prop?
|
68
|
-
key = "#{prefix}[#{key}]" if prefix?
|
69
|
-
s.push @default_serializer(prop, key)
|
70
|
-
else
|
71
|
-
if object?
|
72
|
-
s.push "#{encodeURIComponent(prefix.toString())}=#{encodeURIComponent(object.toString())}"
|
73
|
-
|
74
|
-
return "" unless s.length
|
75
|
-
s.join("&")
|
76
|
-
|
77
|
-
serialize: (object) ->
|
78
|
-
custom_serializer = @configuration.serializer
|
79
|
-
if custom_serializer? and @get_object_type(custom_serializer) is "function"
|
80
|
-
custom_serializer(object)
|
81
|
-
else
|
82
|
-
@default_serializer(object)
|
83
|
-
|
84
|
-
clean_path: (path) ->
|
85
|
-
path = path.split("://")
|
86
|
-
last_index = path.length - 1
|
87
|
-
path[last_index] = path[last_index].replace(/\/+/g, "/")
|
88
|
-
path.join "://"
|
89
|
-
|
90
|
-
extract_options: (number_of_params, args) ->
|
91
|
-
last_el = args[args.length - 1]
|
92
|
-
if (args.length > number_of_params and last_el == undefined) or (last_el? and "object" is @get_object_type(last_el) and !@looks_like_serialized_model(last_el))
|
93
|
-
options = args.pop() || {}
|
94
|
-
delete options[@configuration.special_options_key]
|
95
|
-
options
|
96
|
-
else
|
97
|
-
{}
|
98
|
-
|
99
|
-
looks_like_serialized_model: (object) ->
|
100
|
-
!object[@configuration.special_options_key] and ("id" of object or "to_param" of object)
|
101
|
-
|
102
|
-
|
103
|
-
path_identifier: (object) ->
|
104
|
-
return "0" if object is 0
|
105
|
-
# null, undefined, false or ''
|
106
|
-
return "" unless object
|
107
|
-
property = object
|
108
|
-
if @get_object_type(object) is "object"
|
109
|
-
if "to_param" of object
|
110
|
-
throw new ParameterMissing("Route parameter missing: to_param") unless object.to_param?
|
111
|
-
property = object.to_param
|
112
|
-
else if "id" of object
|
113
|
-
throw new ParameterMissing("Route parameter missing: id") unless object.id?
|
114
|
-
property = object.id
|
115
|
-
else
|
116
|
-
property = object
|
117
|
-
|
118
|
-
property = property.call(object) if @get_object_type(property) is "function"
|
119
|
-
property.toString()
|
120
|
-
|
121
|
-
clone: (obj) ->
|
122
|
-
return obj if !obj? or "object" isnt @get_object_type(obj)
|
123
|
-
copy = obj.constructor()
|
124
|
-
copy[key] = attr for own key, attr of obj
|
125
|
-
copy
|
126
|
-
|
127
|
-
merge: (xs...) ->
|
128
|
-
tap = (o, fn) -> fn(o); o
|
129
|
-
if xs?.length > 0
|
130
|
-
tap {}, (m) -> m[k] = v for k, v of x for x in xs
|
131
|
-
|
132
|
-
normalize_options: (parts, required_parts, default_options, actual_parameters) ->
|
133
|
-
options = @extract_options(parts.length, actual_parameters)
|
134
|
-
|
135
|
-
if actual_parameters.length > parts.length
|
136
|
-
throw new Error("Too many parameters provided for path")
|
137
|
-
|
138
|
-
use_all_parts = actual_parameters.length > required_parts.length
|
139
|
-
parts_options = {}
|
140
|
-
|
141
|
-
for own key of options
|
142
|
-
use_all_parts = true
|
143
|
-
if @indexOf(parts, key) >= 0
|
144
|
-
parts_options[key] = value
|
145
|
-
|
146
|
-
options = @merge(@configuration.default_url_options, default_options, options)
|
147
|
-
result = {}
|
148
|
-
url_parameters = {}
|
149
|
-
result['url_parameters'] = url_parameters
|
150
|
-
for own key, value of options
|
151
|
-
if @indexOf(ReservedOptions, key) >= 0
|
152
|
-
result[key] = value
|
153
|
-
else
|
154
|
-
url_parameters[key] = value
|
155
|
-
|
156
|
-
route_parts = if use_all_parts then parts else required_parts
|
157
|
-
i = 0
|
158
|
-
for part in route_parts when i < actual_parameters.length
|
159
|
-
unless parts_options.hasOwnProperty(part)
|
160
|
-
url_parameters[part] = actual_parameters[i]
|
161
|
-
++i
|
162
|
-
|
163
|
-
result
|
164
|
-
|
165
|
-
build_route: (parts, required_parts, default_options, route, full_url, args) ->
|
166
|
-
args = Array::slice.call(args)
|
167
|
-
|
168
|
-
options = @normalize_options(parts, required_parts, default_options, args)
|
169
|
-
parameters = options['url_parameters']
|
170
|
-
|
171
|
-
# path
|
172
|
-
result = "#{@get_prefix()}#{@visit(route, parameters)}"
|
173
|
-
url = Utils.clean_path(result)
|
174
|
-
# set trailing_slash
|
175
|
-
url = url.replace(/(.*?)[\/]?$/, "$1/") if options['trailing_slash'] is true
|
176
|
-
# set additional url params
|
177
|
-
if (url_params = @serialize(parameters)).length
|
178
|
-
url += "?#{url_params}"
|
179
|
-
# set anchor
|
180
|
-
url += if options.anchor then "##{options.anchor}" else ""
|
181
|
-
if full_url
|
182
|
-
url = @route_url(options) + url
|
183
|
-
url
|
184
|
-
|
185
|
-
#
|
186
|
-
# This function is JavaScript impelementation of the
|
187
|
-
# Journey::Visitors::Formatter that builds route by given parameters
|
188
|
-
# from route binary tree.
|
189
|
-
# Binary tree is serialized in the following way:
|
190
|
-
# [node type, left node, right node ]
|
191
|
-
#
|
192
|
-
# @param {Boolean} optional Marks the currently visited branch as optional.
|
193
|
-
# If set to `true`, this method will not throw when encountering
|
194
|
-
# a missing parameter (used in recursive calls).
|
195
|
-
#
|
196
|
-
visit: (route, parameters, optional = false) ->
|
197
|
-
[type, left, right] = route
|
198
|
-
switch type
|
199
|
-
when NodeTypes.GROUP
|
200
|
-
@visit left, parameters, true
|
201
|
-
when NodeTypes.STAR
|
202
|
-
@visit_globbing left, parameters, true
|
203
|
-
when NodeTypes.LITERAL, NodeTypes.SLASH, NodeTypes.DOT
|
204
|
-
left
|
205
|
-
when NodeTypes.CAT
|
206
|
-
left_part = @visit(left, parameters, optional)
|
207
|
-
right_part = @visit(right, parameters, optional)
|
208
|
-
if optional and ((@is_optional_node(left[0]) and not left_part) or
|
209
|
-
((@is_optional_node(right[0])) and not right_part))
|
210
|
-
return ""
|
211
|
-
"#{left_part}#{right_part}"
|
212
|
-
when NodeTypes.SYMBOL
|
213
|
-
value = parameters[left]
|
214
|
-
delete parameters[left]
|
215
|
-
if value?
|
216
|
-
return @encode_segment(@path_identifier(value))
|
217
|
-
if optional
|
218
|
-
"" # missing parameter
|
219
|
-
else
|
220
|
-
throw new ParameterMissing("Route parameter missing: #{left}")
|
221
|
-
#
|
222
|
-
# I don't know what is this node type
|
223
|
-
# Please send your PR if you do
|
224
|
-
#
|
225
|
-
# when NodeTypes.OR:
|
226
|
-
else
|
227
|
-
throw new Error("Unknown Rails node type")
|
228
|
-
|
229
|
-
encode_segment: (segment) -> segment.replace(UriEncoderSegmentRegex, (str) -> encodeURIComponent(str))
|
230
|
-
|
231
|
-
is_optional_node: (node) -> @indexOf([NodeTypes.STAR, NodeTypes.SYMBOL, NodeTypes.CAT], node) >= 0
|
232
|
-
|
233
|
-
#
|
234
|
-
# This method build spec for route
|
235
|
-
#
|
236
|
-
build_path_spec: (route, wildcard=false) ->
|
237
|
-
[type, left, right] = route
|
238
|
-
switch type
|
239
|
-
when NodeTypes.GROUP
|
240
|
-
"(#{@build_path_spec(left)})"
|
241
|
-
when NodeTypes.CAT
|
242
|
-
"#{@build_path_spec(left)}#{@build_path_spec(right)}"
|
243
|
-
when NodeTypes.STAR
|
244
|
-
@build_path_spec(left, true)
|
245
|
-
when NodeTypes.SYMBOL
|
246
|
-
if wildcard is true
|
247
|
-
"#{if left[0] is '*' then '' else '*'}#{left}"
|
248
|
-
else
|
249
|
-
":#{left}"
|
250
|
-
when NodeTypes.SLASH, NodeTypes.DOT, NodeTypes.LITERAL
|
251
|
-
left
|
252
|
-
# Not sure about this one
|
253
|
-
# when NodeTypes.OR
|
254
|
-
else throw new Error("Unknown Rails node type")
|
255
|
-
|
256
|
-
#
|
257
|
-
# This method convert value for globbing in right value for rails route
|
258
|
-
#
|
259
|
-
visit_globbing: (route, parameters, optional) ->
|
260
|
-
[type, left, right] = route
|
261
|
-
value = parameters[left]
|
262
|
-
delete parameters[left]
|
263
|
-
return @visit(route, parameters, optional) unless value?
|
264
|
-
value = switch @get_object_type(value)
|
265
|
-
when "array"
|
266
|
-
value.join("/")
|
267
|
-
else
|
268
|
-
value
|
269
|
-
|
270
|
-
if DeprecatedGlobbingBehavior
|
271
|
-
@path_identifier(value)
|
272
|
-
else
|
273
|
-
encodeURI(@path_identifier(value))
|
274
|
-
|
275
|
-
#
|
276
|
-
# This method check and return prefix from options
|
277
|
-
#
|
278
|
-
get_prefix: ->
|
279
|
-
prefix = @configuration.prefix
|
280
|
-
prefix = (if prefix.match("/$") then prefix else "#{prefix}/") if prefix isnt ""
|
281
|
-
prefix
|
282
|
-
|
283
|
-
#
|
284
|
-
# route function: create route path function and add spec to it
|
285
|
-
#
|
286
|
-
route: (parts_table, default_options, route_spec, full_url) ->
|
287
|
-
required_parts = []
|
288
|
-
parts = []
|
289
|
-
for [part, required] in parts_table
|
290
|
-
parts.push(part)
|
291
|
-
required_parts.push(part) if required
|
292
|
-
|
293
|
-
path_fn = -> Utils.build_route(
|
294
|
-
parts, required_parts, default_options, route_spec, full_url, arguments
|
295
|
-
)
|
296
|
-
path_fn.required_params = required_parts
|
297
|
-
path_fn.toString = -> Utils.build_path_spec(route_spec)
|
298
|
-
path_fn
|
299
|
-
|
300
|
-
|
301
|
-
route_url: (route_defaults) ->
|
302
|
-
return route_defaults if typeof route_defaults == 'string'
|
303
|
-
|
304
|
-
hostname = route_defaults.host || Utils.current_host()
|
305
|
-
|
306
|
-
return '' unless hostname
|
307
|
-
|
308
|
-
subdomain = if route_defaults.subdomain then route_defaults.subdomain + '.' else ''
|
309
|
-
protocol = route_defaults.protocol || Utils.current_protocol()
|
310
|
-
port = route_defaults.port || (Utils.current_port() unless route_defaults.host)
|
311
|
-
port = if port then ":#{port}" else ''
|
312
|
-
|
313
|
-
protocol + "://" + subdomain + hostname + port
|
314
|
-
|
315
|
-
has_location: -> window?.location?
|
316
|
-
|
317
|
-
current_host: ->
|
318
|
-
if @has_location() then window.location.hostname else null
|
319
|
-
|
320
|
-
current_protocol: () ->
|
321
|
-
if @has_location() && window.location.protocol != ''
|
322
|
-
# location.protocol includes the colon character
|
323
|
-
window.location.protocol.replace(/:$/, '')
|
324
|
-
else
|
325
|
-
'http'
|
326
|
-
|
327
|
-
current_port: () ->
|
328
|
-
if @has_location() && window.location.port != ''
|
329
|
-
window.location.port
|
330
|
-
else
|
331
|
-
''
|
332
|
-
|
333
|
-
#
|
334
|
-
# This is helper method to define object type.
|
335
|
-
# The typeof operator is probably the biggest design flaw of JavaScript, simply because it's basically completely broken.
|
336
|
-
#
|
337
|
-
# Value Class Type
|
338
|
-
# -------------------------------------
|
339
|
-
# "foo" String string
|
340
|
-
# new String("foo") String object
|
341
|
-
# 1.2 Number number
|
342
|
-
# new Number(1.2) Number object
|
343
|
-
# true Boolean boolean
|
344
|
-
# new Boolean(true) Boolean object
|
345
|
-
# new Date() Date object
|
346
|
-
# new Error() Error object
|
347
|
-
# [1,2,3] Array object
|
348
|
-
# new Array(1, 2, 3) Array object
|
349
|
-
# new Function("") Function function
|
350
|
-
# /abc/g RegExp object
|
351
|
-
# new RegExp("meow") RegExp object
|
352
|
-
# {} Object object
|
353
|
-
# new Object() Object object
|
354
|
-
#
|
355
|
-
# What is why I use Object.prototype.toString() to know better type of variable. Or use jQuery.type, if it available.
|
356
|
-
# _classToTypeCache used for perfomance cache of types map (underscore at the beginning mean private method - of course it doesn't realy private).
|
357
|
-
#
|
358
|
-
_classToTypeCache: null
|
359
|
-
_classToType: ->
|
360
|
-
return @_classToTypeCache if @_classToTypeCache?
|
361
|
-
@_classToTypeCache = {}
|
362
|
-
for name in "Boolean Number String Function Array Date RegExp Object Error".split(" ")
|
363
|
-
@_classToTypeCache["[object #{name}]"] = name.toLowerCase()
|
364
|
-
@_classToTypeCache
|
365
|
-
get_object_type: (obj) ->
|
366
|
-
return root.jQuery.type(obj) if root.jQuery and root.jQuery.type?
|
367
|
-
return "#{obj}" unless obj?
|
368
|
-
(if typeof obj is "object" or typeof obj is "function" then @_classToType()[Object::toString.call(obj)] or "object" else typeof obj)
|
369
|
-
|
370
|
-
# indexOf helper
|
371
|
-
indexOf: (array, element) -> if Array::indexOf then array.indexOf(element) else @indexOfImplementation(array, element)
|
372
|
-
indexOfImplementation: (array, element) ->
|
373
|
-
result = -1
|
374
|
-
(result = i for el, i in array when el is element)
|
375
|
-
result
|
376
|
-
|
377
|
-
namespace: (root, namespace, routes) ->
|
378
|
-
parts = if namespace then namespace.split(".") else []
|
379
|
-
return routes if parts.length == 0
|
380
|
-
for part, index in parts
|
381
|
-
if index < parts.length - 1
|
382
|
-
root = (root[part] or= {})
|
383
|
-
else
|
384
|
-
return root[part] = routes
|
385
|
-
|
386
|
-
configure: (new_config) ->
|
387
|
-
@configuration = @merge(@configuration, new_config)
|
388
|
-
|
389
|
-
config: ->
|
390
|
-
@clone(@configuration)
|
391
|
-
|
392
|
-
make: ->
|
393
|
-
routes = ROUTES
|
394
|
-
routes.configure = (config) -> Utils.configure(config)
|
395
|
-
routes.config = -> Utils.config()
|
396
|
-
Object.defineProperty routes, 'defaults',
|
397
|
-
get: ->
|
398
|
-
throw new Error("#{NAMESPACE}.defaults is removed. Use #{NAMESPACE}.configure() instead.")
|
399
|
-
set: (value) ->
|
400
|
-
|
401
|
-
routes.default_serializer = (object, prefix) ->
|
402
|
-
Utils.default_serializer(object, prefix)
|
403
|
-
# Browser globals
|
404
|
-
Utils.namespace(root, NAMESPACE, routes)
|
405
|
-
|
406
|
-
result = Utils.make()
|
407
|
-
# Set up Routes appropriately for the environment.
|
408
|
-
if typeof define is "function" and define.amd
|
409
|
-
# AMD
|
410
|
-
define [], -> result
|
411
|
-
return result
|