ultimate-base 0.3.5.0 → 0.4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/ultimate/base/version.rb +1 -1
- data/test/javascripts/all_tests.js.coffee +0 -5
- metadata +1 -19
- data/app/assets/javascripts/ultimate/helpers/asset_tag.js.coffee +0 -82
- data/app/assets/javascripts/ultimate/helpers/base.js.coffee +0 -3
- data/app/assets/javascripts/ultimate/helpers/decor.js.coffee +0 -19
- data/app/assets/javascripts/ultimate/helpers/form_options.js.coffee +0 -106
- data/app/assets/javascripts/ultimate/helpers/form_tag.js.coffee +0 -175
- data/app/assets/javascripts/ultimate/helpers/javascript.js.coffee +0 -31
- data/app/assets/javascripts/ultimate/helpers/number.js.coffee +0 -600
- data/app/assets/javascripts/ultimate/helpers/record_tag.js.coffee +0 -81
- data/app/assets/javascripts/ultimate/helpers/tag.js.coffee +0 -91
- data/app/assets/javascripts/ultimate/helpers/url.js.coffee +0 -152
- data/test/javascripts/tests/helpers/asset_tag_test.js.coffee +0 -51
- data/test/javascripts/tests/helpers/form_options_test.js.coffee +0 -170
- data/test/javascripts/tests/helpers/form_tag_test.js.coffee +0 -226
- data/test/javascripts/tests/helpers/javascript_test.js.coffee +0 -25
- data/test/javascripts/tests/helpers/number_test.js.coffee +0 -250
- data/test/javascripts/tests/helpers/record_tag_test.js.coffee +0 -60
- data/test/javascripts/tests/helpers/tag_test.js.coffee +0 -58
- data/test/javascripts/tests/helpers/url_test.js.coffee +0 -76
@@ -1,81 +0,0 @@
|
|
1
|
-
#= require ./base
|
2
|
-
#= require ./tag
|
3
|
-
|
4
|
-
@Ultimate.Helpers.RecordTag =
|
5
|
-
|
6
|
-
div_for: (record, args...) ->
|
7
|
-
@content_tag_for "div", record, args...
|
8
|
-
|
9
|
-
content_tag_for: (tag_name, single_or_multiple_records, prefix = null, options = null, block = null) ->
|
10
|
-
block = _.outcasts.blockGiven(arguments)
|
11
|
-
if _.isFunction(single_or_multiple_records?.map)
|
12
|
-
single_or_multiple_records.map( (single_record) =>
|
13
|
-
@content_tag_for_single_record(tag_name, single_record, prefix, options, block)
|
14
|
-
).join("\n")
|
15
|
-
else
|
16
|
-
@content_tag_for_single_record(tag_name, single_or_multiple_records, prefix, options, block)
|
17
|
-
|
18
|
-
content_tag_for_single_record: (tag_name, record, prefix, options, block = null) ->
|
19
|
-
return '' unless record?
|
20
|
-
[options, prefix] = [prefix, null] if _.isObject(prefix)
|
21
|
-
block = _.outcasts.blockGiven(arguments)
|
22
|
-
options = if _.isObject(options) then _.clone(options) else {}
|
23
|
-
_.extend options, {class: Ultimate.Helpers.Tag.concat_class(@dom_class(record, prefix), options['class']), id: @dom_id(record, prefix)}
|
24
|
-
if block
|
25
|
-
Ultimate.Helpers.Tag.content_tag(tag_name, block(record), options, false)
|
26
|
-
else
|
27
|
-
Ultimate.Helpers.Tag.content_tag(tag_name, block, options, false)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# from ActionView::ModelNaming
|
32
|
-
model_name_from_record_or_class: (record_or_class) ->
|
33
|
-
modelClass = record_or_class?.constructor ? record_or_class
|
34
|
-
if modelClass?
|
35
|
-
modelClass.modelName or modelClass.className or modelClass.name or 'Model'
|
36
|
-
else
|
37
|
-
'Model'
|
38
|
-
|
39
|
-
# ============= from ActionView::RecordIdentifier ===============
|
40
|
-
|
41
|
-
# The DOM class convention is to use the singular form of an object or class. Examples:
|
42
|
-
#
|
43
|
-
# dom_class(post) # => "post"
|
44
|
-
# dom_class(Person) # => "person"
|
45
|
-
#
|
46
|
-
# If you need to address multiple instances of the same class in the same view, you can prefix the dom_class:
|
47
|
-
#
|
48
|
-
# dom_class(post, 'edit') # => "edit_post"
|
49
|
-
# dom_class(Person, 'edit') # => "edit_person"
|
50
|
-
dom_class: (record_or_class, prefix = "") ->
|
51
|
-
singular =
|
52
|
-
_.result(record_or_class, 'singular') ?
|
53
|
-
_.singularize _.string.underscored(
|
54
|
-
if _.isString(record_or_class)
|
55
|
-
record_or_class
|
56
|
-
else
|
57
|
-
@model_name_from_record_or_class(record_or_class) )
|
58
|
-
if prefix then "#{prefix}_#{singular}" else singular
|
59
|
-
|
60
|
-
# The DOM id convention is to use the singular form of an object or class with the id following an underscore.
|
61
|
-
# If no id is found, prefix with "new_" instead. Examples:
|
62
|
-
#
|
63
|
-
# dom_id(Post.find(45)) # => "post_45"
|
64
|
-
# dom_id(new Post) # => "new_post"
|
65
|
-
#
|
66
|
-
# If you need to address multiple instances of the same class in the same view, you can prefix the dom_id:
|
67
|
-
#
|
68
|
-
# dom_id(Post.find(45), "edit") # => "edit_post_45"
|
69
|
-
# TODO sync with rorId and ror_id
|
70
|
-
dom_id: (record, prefix = "") ->
|
71
|
-
if record_id = @_record_key_for_dom_id(record)
|
72
|
-
"#{@dom_class(record, prefix)}_#{record_id}"
|
73
|
-
else
|
74
|
-
@dom_class(record, prefix or "new")
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
# protected
|
79
|
-
|
80
|
-
_record_key_for_dom_id: (record) ->
|
81
|
-
record?.id
|
@@ -1,91 +0,0 @@
|
|
1
|
-
#= require ./base
|
2
|
-
|
3
|
-
@Ultimate.Helpers.Tag =
|
4
|
-
|
5
|
-
BOOLEAN_ATTRIBUTES: "disabled readonly multiple checked autobuffer
|
6
|
-
autoplay controls loop selected hidden scoped async
|
7
|
-
defer reversed ismap seemless muted required
|
8
|
-
autofocus novalidate formnovalidate open pubdate itemscope".split(/\s+/)
|
9
|
-
|
10
|
-
PRE_CONTENT_STRINGS:
|
11
|
-
textarea: "\n"
|
12
|
-
|
13
|
-
tag: (tag_name, options = {}, open = false, escape = true) ->
|
14
|
-
"<#{tag_name}#{@tag_options(options, escape)}#{if open then '>' else ' />'}"
|
15
|
-
|
16
|
-
content_tag: (name, content_or_options_with_block = null, options = null, escape = true, block = null) ->
|
17
|
-
if block = _.outcasts.blockGiven(arguments)
|
18
|
-
options = content_or_options_with_block
|
19
|
-
@content_tag_string(name, block(), options, escape)
|
20
|
-
else
|
21
|
-
@content_tag_string(name, content_or_options_with_block, options, escape)
|
22
|
-
|
23
|
-
cdata_section: (content) ->
|
24
|
-
splitted = content.replace(/\]\]>/g, ']]]]><![CDATA[>')
|
25
|
-
"<![CDATA[#{splitted}]]>"
|
26
|
-
|
27
|
-
content_tag_string: (name, content = '', options = {}, escape = true, _escapeContent = escape) ->
|
28
|
-
content = _.string.escapeHTML(content) if _escapeContent
|
29
|
-
"<#{name}#{@tag_options(options, escape)}>#{@PRE_CONTENT_STRINGS[name] ? ''}#{content}</#{name}>"
|
30
|
-
|
31
|
-
html_options_to_s: (html_options, escape = false, prefix = "") ->
|
32
|
-
deprecate 'html_options_to_s()', "tag_options()"
|
33
|
-
@tag_options arguments...
|
34
|
-
|
35
|
-
tag_options: (options, escape = true) ->
|
36
|
-
return "" if _.isEmpty(options)
|
37
|
-
attrs = []
|
38
|
-
for key, value of options
|
39
|
-
if key is "data" and _.isObject(value)
|
40
|
-
for k, v of value
|
41
|
-
attrs.push @data_tag_option(k, v, escape)
|
42
|
-
else if _.include(@BOOLEAN_ATTRIBUTES, key)
|
43
|
-
attrs.push @boolean_tag_option(key) if value
|
44
|
-
else if value?
|
45
|
-
attrs.push @tag_option(key, value, escape)
|
46
|
-
if _.isEmpty(attrs) then "" else " #{attrs.sort().join(' ')}"
|
47
|
-
|
48
|
-
data_tag_option: (key, value, escape) ->
|
49
|
-
key = "data-#{_.string.dasherize(key)}"
|
50
|
-
value = JSON.stringify(value) if JSON? and _.isObject(value)
|
51
|
-
@tag_option(key, value, escape)
|
52
|
-
|
53
|
-
boolean_tag_option: (key) ->
|
54
|
-
"#{key}=\"#{key}\""
|
55
|
-
|
56
|
-
tag_option: (key, value, escape) ->
|
57
|
-
value = value.join(" ") if _.isArray(value)
|
58
|
-
value = _.string.escapeHTML(value) if escape
|
59
|
-
"#{key}=\"#{value}\""
|
60
|
-
|
61
|
-
concat_class: ->
|
62
|
-
flatten_classes = _.filter( _.flatten(arguments), (e) -> _.isString(e) ).join(' ')
|
63
|
-
_.uniq( _.string.words(flatten_classes) ).join(' ')
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
selfClosedTags: _.string.words('area base br col command embed hr img input keygen link meta param source track wbr')
|
68
|
-
|
69
|
-
# Generate html from zen-selector. Ninja tool.
|
70
|
-
# TODO more zen features: +, *x, {content}
|
71
|
-
# TODO cache
|
72
|
-
selectorToHtml: (selector) ->
|
73
|
-
if matches = selector.match(/^[\s>]*([\w\-\.#]+)(.*)$/)
|
74
|
-
selector = matches[1]
|
75
|
-
continuation = matches[2] # in v1 {(if continuation then ">" + content else " />")}
|
76
|
-
tag_name = selector.match(/^\w+/)?[0] or 'div'
|
77
|
-
id = selector.match(/#([\w\-]+)/)?[1]
|
78
|
-
classes = _.map( selector.match(/\.[\w\-]+/g), (c) -> _.string.ltrim(c, '.') )
|
79
|
-
html_options = {}
|
80
|
-
html_options['id'] = id if id
|
81
|
-
html_options['class'] = classes.join(' ') if classes.length
|
82
|
-
if _.contains(@selfClosedTags, tag_name)
|
83
|
-
@tag(tag_name, html_options)
|
84
|
-
else
|
85
|
-
continuation = @selectorToHtml(continuation) if continuation
|
86
|
-
@content_tag(tag_name, continuation, html_options)
|
87
|
-
# else if matches = selector.match(/^\s*\+\s*(.*)$/) # /^\s*\+\s*([\w\.#]+)(.*)$/)
|
88
|
-
# continuation = matches[1]
|
89
|
-
# if continuation then @selectorToHtml(continuation) else continuation
|
90
|
-
else
|
91
|
-
''
|
@@ -1,152 +0,0 @@
|
|
1
|
-
#= require ./base
|
2
|
-
#= require ./tag
|
3
|
-
#= require ./javascript
|
4
|
-
|
5
|
-
__char_encode = (char) -> "%#{char.charCodeAt(0).toString(16)}"
|
6
|
-
__escape_path = (str) -> str.replace(/[^*\-.0-9A-Z_a-z]/g, __char_encode).replace(/\+/g, '%20')
|
7
|
-
__string_encode = (str) -> _.map(str, (char) -> "&##{char.charCodeAt(0)};" ).join('')
|
8
|
-
|
9
|
-
@Ultimate.Helpers.Url =
|
10
|
-
|
11
|
-
url_for: (options = null) ->
|
12
|
-
if _.isString(options)
|
13
|
-
if options is 'back'
|
14
|
-
'javascript:history.back();'
|
15
|
-
else
|
16
|
-
options
|
17
|
-
else unless _.isEmpty(options)
|
18
|
-
url = _.result(options, 'url') ? ''
|
19
|
-
if $.isPlainObject(options)
|
20
|
-
options = _.clone(options)
|
21
|
-
delete options['url']
|
22
|
-
anchor = _.outcasts.delete(options, 'anchor')
|
23
|
-
url += "?#{_.map(options, (value, key) -> "#{key}=#{value}").sort().join('&')}" unless _.isEmpty(options)
|
24
|
-
url += "##{anchor}" if anchor
|
25
|
-
url
|
26
|
-
else
|
27
|
-
'javascript:;'
|
28
|
-
|
29
|
-
link_to: (name = null, options = null, html_options = null, block = null) ->
|
30
|
-
[html_options, options] = [options, name] if block = _.outcasts.blockGiven(arguments)
|
31
|
-
options ||= {}
|
32
|
-
url = @url_for(options)
|
33
|
-
html_options = @_convert_options_to_data_attributes(options, html_options)
|
34
|
-
html_options['href'] ||= url
|
35
|
-
if block
|
36
|
-
Ultimate.Helpers.Tag.content_tag('a', html_options, null, false, block)
|
37
|
-
else
|
38
|
-
Ultimate.Helpers.Tag.content_tag('a', name ? url, html_options, false)
|
39
|
-
|
40
|
-
link_to_js: (name = null, html_options = null, block = null) ->
|
41
|
-
[options, name] = [name, null] if block = _.outcasts.blockGiven(arguments)
|
42
|
-
@link_to [name, options, html_options, block]...
|
43
|
-
|
44
|
-
# TODO tests
|
45
|
-
link_to_unless_current_span: (name, options = null, html_options = null, block = null) ->
|
46
|
-
[html_options, options] = [options, name] if block = _.outcasts.blockGiven(arguments)
|
47
|
-
url = @url_for(options)
|
48
|
-
if @current_page_(url)
|
49
|
-
if block
|
50
|
-
Ultimate.Helpers.Tag.content_tag('span', html_options, null, false, block)
|
51
|
-
else
|
52
|
-
Ultimate.Helpers.Tag.content_tag('span', name ? url, html_options, false)
|
53
|
-
else
|
54
|
-
if block
|
55
|
-
@link_to options, html_options, block
|
56
|
-
else
|
57
|
-
@link_to name, options, html_options
|
58
|
-
|
59
|
-
# TODO tests
|
60
|
-
link_to_unless_current: (name, options = {}, html_options = {}, block = null) ->
|
61
|
-
@link_to_unless @current_page_(options), name, options, html_options, block
|
62
|
-
|
63
|
-
# TODO tests
|
64
|
-
link_to_unless: (condition, name, options = {}, html_options = {}, block = null) ->
|
65
|
-
if condition
|
66
|
-
if block = _.outcasts.blockGiven(arguments)
|
67
|
-
block(name, options, html_options)
|
68
|
-
else
|
69
|
-
name
|
70
|
-
else
|
71
|
-
@link_to name, options, html_options, block
|
72
|
-
|
73
|
-
# TODO tests
|
74
|
-
link_to_if: (condition, name, options = {}, html_options = {}, block = null) ->
|
75
|
-
@link_to_unless not condition, name, options, html_options, block
|
76
|
-
|
77
|
-
mail_to: (email_address, name = null, html_options = {}) ->
|
78
|
-
email_address = _.string.escapeHTML(email_address)
|
79
|
-
encode = _.outcasts.delete(html_options, 'encode')
|
80
|
-
extras = _.compact _.map _.string.words('cc bcc body subject'), (item) ->
|
81
|
-
option = _.outcasts.delete(html_options, item)
|
82
|
-
if option?
|
83
|
-
"#{item}=#{__escape_path(option)}"
|
84
|
-
extras = if _.isEmpty(extras) then '' else '?' + _.string.escapeHTML(extras.join('&'))
|
85
|
-
email_address_obfuscated = email_address
|
86
|
-
email_address_obfuscated = email_address_obfuscated.replace('@', _.outcasts.delete(html_options, 'replace_at')) if 'replace_at' of html_options
|
87
|
-
email_address_obfuscated = email_address_obfuscated.replace('.', _.outcasts.delete(html_options, 'replace_dot')) if 'replace_dot' of html_options
|
88
|
-
switch encode
|
89
|
-
when 'javascript'
|
90
|
-
html = @link_to(name or email_address_obfuscated, "mailto:#{email_address}#{extras}", html_options)
|
91
|
-
html = Ultimate.Helpers.Javascript.escape_javascript(html)
|
92
|
-
string = _.map("document.write('#{html}');", __char_encode).join('')
|
93
|
-
"<script>eval(decodeURIComponent('#{string}'))</script>"
|
94
|
-
when 'hex'
|
95
|
-
email_address_encoded = __string_encode(email_address_obfuscated)
|
96
|
-
string = __string_encode('mailto:') + _.map(email_address, (char) -> if /\w/.test(char) then __char_encode(char) else char).join('')
|
97
|
-
@link_to name or email_address_encoded, "#{string}#{extras}", html_options
|
98
|
-
else
|
99
|
-
@link_to name or email_address_obfuscated, "mailto:#{email_address}#{extras}", html_options
|
100
|
-
|
101
|
-
# TODO tests
|
102
|
-
current_page_: (options) ->
|
103
|
-
url_string = @url_for(options)
|
104
|
-
request_uri = location.pathname
|
105
|
-
if /^\w+:\/\//.test(url_string)
|
106
|
-
url_string == "#{location.protocol}#{location.host}#{request_uri}"
|
107
|
-
else
|
108
|
-
url_string == request_uri
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
_convert_options_to_data_attributes: (options, html_options) ->
|
113
|
-
if html_options
|
114
|
-
html_options['data-remote'] = 'true' if @_link_to_remote_options(options) or @_link_to_remote_options(html_options)
|
115
|
-
method = _.outcasts.delete(html_options, 'method')
|
116
|
-
@_add_method_to_attributes(html_options, method) if method
|
117
|
-
html_options
|
118
|
-
else
|
119
|
-
if @_link_to_remote_options(options) then {'data-remote': 'true'} else {}
|
120
|
-
|
121
|
-
_link_to_remote_options: (options) ->
|
122
|
-
_.isObject(options) and _.outcasts.delete(options, 'remote')
|
123
|
-
|
124
|
-
_add_method_to_attributes: (html_options, method) ->
|
125
|
-
if _.isString(method) and method.toLowerCase() isnt 'get' and not /nofollow/.test(html_options['rel'])
|
126
|
-
html_options['rel'] = Ultimate.Helpers.Tag.concat_class(html_options['rel'], 'nofollow')
|
127
|
-
html_options['data-method'] = method
|
128
|
-
|
129
|
-
_convert_boolean_attributes: (html_options, bool_attrs) ->
|
130
|
-
html_options[x] = x for x in bool_attrs when _.outcasts.delete(html_options, x)
|
131
|
-
html_options
|
132
|
-
|
133
|
-
__protect_against_forgery: false
|
134
|
-
__request_forgery_protection_token: 'form_token'
|
135
|
-
__form_authenticity_token: 'secret'
|
136
|
-
|
137
|
-
__init_request_forgery_protection: ->
|
138
|
-
param = $('head meta[name="csrf-param"]').attr('content')
|
139
|
-
token = $('head meta[name="csrf-token"]').attr('content')
|
140
|
-
if param and token
|
141
|
-
@__protect_against_forgery = true
|
142
|
-
@__request_forgery_protection_token = param
|
143
|
-
@__form_authenticity_token = token
|
144
|
-
|
145
|
-
_token_tag: (token = @__form_authenticity_token) ->
|
146
|
-
if token isnt false and @__protect_against_forgery
|
147
|
-
Ultimate.Helpers.Tag.tag 'input', type: 'hidden', name: @__request_forgery_protection_token, value: token
|
148
|
-
else
|
149
|
-
''
|
150
|
-
|
151
|
-
_method_tag: (method) ->
|
152
|
-
Ultimate.Helpers.Tag.tag 'input', type: 'hidden', name: '_method', value: method
|
@@ -1,51 +0,0 @@
|
|
1
|
-
#= require ultimate/underscore/underscore
|
2
|
-
#= require ultimate/underscore/underscore.string
|
3
|
-
#= require ultimate/helpers/asset_tag
|
4
|
-
|
5
|
-
module "Ultimate.Helpers.AssetTag"
|
6
|
-
|
7
|
-
_.extend @, Ultimate.Helpers.AssetTag
|
8
|
-
|
9
|
-
test "favicon_link_tag", ->
|
10
|
-
equal favicon_link_tag(), '<link href="/images/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />'
|
11
|
-
equal favicon_link_tag('favicon.ico'), '<link href="/images/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />'
|
12
|
-
equal favicon_link_tag('favicon.ico', rel: 'foo'), '<link href="/images/favicon.ico" rel="foo" type="image/vnd.microsoft.icon" />'
|
13
|
-
equal favicon_link_tag('favicon.ico', rel: 'foo', type: 'bar'), '<link href="/images/favicon.ico" rel="foo" type="bar" />'
|
14
|
-
equal favicon_link_tag('mb-icon.png', rel: 'apple-touch-icon', type: 'image/png'), '<link href="/images/mb-icon.png" rel="apple-touch-icon" type="image/png" />'
|
15
|
-
|
16
|
-
test "image_path", ->
|
17
|
-
equal image_path(""), ''
|
18
|
-
equal image_path("xml"), '/images/xml'
|
19
|
-
equal image_path("xml.png"), '/images/xml.png'
|
20
|
-
equal image_path("dir/xml.png"), '/images/dir/xml.png'
|
21
|
-
equal image_path("/dir/xml.png"), '/dir/xml.png'
|
22
|
-
|
23
|
-
test "path_to_image", ->
|
24
|
-
equal path_to_image(""), ''
|
25
|
-
equal path_to_image("xml"), '/images/xml'
|
26
|
-
equal path_to_image("xml.png"), '/images/xml.png'
|
27
|
-
equal path_to_image("dir/xml.png"), '/images/dir/xml.png'
|
28
|
-
equal path_to_image("/dir/xml.png"), '/dir/xml.png'
|
29
|
-
|
30
|
-
test "image_alt", ->
|
31
|
-
for prefix in ['', '/', '/foo/bar/', 'foo/bar/']
|
32
|
-
equal image_alt("#{prefix}rails.png"), 'Rails'
|
33
|
-
equal image_alt("#{prefix}rails-9c0a079bdd7701d7e729bd956823d153.png"), 'Rails'
|
34
|
-
equal image_alt("#{prefix}avatar-0000.png"), 'Avatar-0000'
|
35
|
-
|
36
|
-
test "image_tag", ->
|
37
|
-
equal image_tag("xml.png"), '<img alt="Xml" src="/images/xml.png" />'
|
38
|
-
equal image_tag("rss.gif", alt: "rss syndication"), '<img alt="rss syndication" src="/images/rss.gif" />'
|
39
|
-
equal image_tag("gold.png", size: "20"), '<img alt="Gold" height="20" src="/images/gold.png" width="20" />'
|
40
|
-
equal image_tag("gold.png", size: "45x70"), '<img alt="Gold" height="70" src="/images/gold.png" width="45" />'
|
41
|
-
equal image_tag("gold.png", size: "45x70"), '<img alt="Gold" height="70" src="/images/gold.png" width="45" />'
|
42
|
-
equal image_tag("error.png", size: "45 x 70"), '<img alt="Error" src="/images/error.png" />'
|
43
|
-
equal image_tag("error.png", size: "x"), '<img alt="Error" src="/images/error.png" />'
|
44
|
-
equal image_tag("google.com.png"), '<img alt="Google.com" src="/images/google.com.png" />'
|
45
|
-
equal image_tag("slash..png"), '<img alt="Slash." src="/images/slash..png" />'
|
46
|
-
equal image_tag(".pdf.png"), '<img alt=".pdf" src="/images/.pdf.png" />'
|
47
|
-
equal image_tag("http://www.rubyonrails.com/images/rails.png"), '<img alt="Rails" src="http://www.rubyonrails.com/images/rails.png" />'
|
48
|
-
equal image_tag("//www.rubyonrails.com/images/rails.png"), '<img alt="Rails" src="//www.rubyonrails.com/images/rails.png" />'
|
49
|
-
equal image_tag("mouse.png", alt: null), '<img src="/images/mouse.png" />'
|
50
|
-
equal image_tag("data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==", alt: null), '<img src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" />'
|
51
|
-
equal image_tag(""), '<img src="" />'
|
@@ -1,170 +0,0 @@
|
|
1
|
-
#= require ultimate/underscore/underscore
|
2
|
-
#= require ultimate/underscore/underscore.string
|
3
|
-
#= require ultimate/underscore/underscore.outcasts
|
4
|
-
#= require ultimate/backbone/lib/backbone
|
5
|
-
#= require ultimate/helpers/form_options
|
6
|
-
|
7
|
-
module "Ultimate.Helpers.FormOptions"
|
8
|
-
|
9
|
-
_.extend @, Ultimate.Helpers.FormOptions
|
10
|
-
|
11
|
-
test "options_for_select", ->
|
12
|
-
options = '<option value="Denmark">Denmark</option><option value="USA">USA</option><option value="Sweden">Sweden</option>'
|
13
|
-
equal options_for_select(options), options
|
14
|
-
equal options_for_select([ "<Denmark>", "USA", "Sweden" ]),
|
15
|
-
"<option value=\"<Denmark>\"><Denmark></option>\n<option value=\"USA\">USA</option>\n<option value=\"Sweden\">Sweden</option>"
|
16
|
-
equal options_for_select([ "Denmark", "<USA>", "Sweden" ], "<USA>"),
|
17
|
-
"<option value=\"Denmark\">Denmark</option>\n<option selected=\"selected\" value=\"<USA>\"><USA></option>\n<option value=\"Sweden\">Sweden</option>"
|
18
|
-
equal options_for_select([ "Denmark", "<USA>", "Sweden" ], [ "<USA>", "Sweden" ]),
|
19
|
-
"<option value=\"Denmark\">Denmark</option>\n<option selected=\"selected\" value=\"<USA>\"><USA></option>\n<option selected=\"selected\" value=\"Sweden\">Sweden</option>"
|
20
|
-
equal options_for_select([ "Denmark", "<USA>", "Sweden" ], disabled: "<USA>"),
|
21
|
-
"<option value=\"Denmark\">Denmark</option>\n<option disabled=\"disabled\" value=\"<USA>\"><USA></option>\n<option value=\"Sweden\">Sweden</option>"
|
22
|
-
equal options_for_select([ "Denmark", "<USA>", "Sweden" ], disabled: ["<USA>", "Sweden"]),
|
23
|
-
"<option value=\"Denmark\">Denmark</option>\n<option disabled=\"disabled\" value=\"<USA>\"><USA></option>\n<option disabled=\"disabled\" value=\"Sweden\">Sweden</option>"
|
24
|
-
equal options_for_select([ "Denmark", "<USA>", "Sweden" ], selected: "Denmark", disabled: "<USA>"),
|
25
|
-
"<option selected=\"selected\" value=\"Denmark\">Denmark</option>\n<option disabled=\"disabled\" value=\"<USA>\"><USA></option>\n<option value=\"Sweden\">Sweden</option>"
|
26
|
-
equal options_for_select([ true, false ], selected: false, disabled: null),
|
27
|
-
"<option value=\"true\">true</option>\n<option selected=\"selected\" value=\"false\">false</option>"
|
28
|
-
equal options_for_select([1..3]),
|
29
|
-
"<option value=\"1\">1</option>\n<option value=\"2\">2</option>\n<option value=\"3\">3</option>"
|
30
|
-
equal options_for_select([ "ruby", "rubyonrails" ], "rubyonrails"),
|
31
|
-
"<option value=\"ruby\">ruby</option>\n<option selected=\"selected\" value=\"rubyonrails\">rubyonrails</option>"
|
32
|
-
equal options_for_select([ "ruby", "rubyonrails" ], "ruby"),
|
33
|
-
"<option selected=\"selected\" value=\"ruby\">ruby</option>\n<option value=\"rubyonrails\">rubyonrails</option>"
|
34
|
-
equal options_for_select([ "ruby", "rubyonrails", null ], "ruby"),
|
35
|
-
"<option selected=\"selected\" value=\"ruby\">ruby</option>\n<option value=\"rubyonrails\">rubyonrails</option>\n<option value=\"\"></option>"
|
36
|
-
equal options_for_select("$": "Dollar", "<DKR>": "<Kroner>"),
|
37
|
-
"<option value=\"Dollar\">$</option>\n<option value=\"<Kroner>\"><DKR></option>"
|
38
|
-
equal options_for_select({ "$": "Dollar", "<DKR>": "<Kroner>" }, "Dollar"),
|
39
|
-
"<option selected=\"selected\" value=\"Dollar\">$</option>\n<option value=\"<Kroner>\"><DKR></option>"
|
40
|
-
equal options_for_select({ "$": "Dollar", "<DKR>": "<Kroner>" }, [ "Dollar", "<Kroner>" ]),
|
41
|
-
"<option selected=\"selected\" value=\"Dollar\">$</option>\n<option selected=\"selected\" value=\"<Kroner>\"><DKR></option>"
|
42
|
-
equal options_for_select([ [ "<Denmark>", { class: 'bold' } ], [ "USA", { onclick: "alert('Hello World');" } ], [ "Sweden" ], "Germany" ]),
|
43
|
-
"<option class=\"bold\" value=\"<Denmark>\"><Denmark></option>\n<option onclick=\"alert('Hello World');\" value=\"USA\">USA</option>\n<option value=\"Sweden\">Sweden</option>\n<option value=\"Germany\">Germany</option>"
|
44
|
-
equal options_for_select([ [ "<Denmark>", { data: { test: 'bold' } } ] ]),
|
45
|
-
"<option data-test=\"bold\" value=\"<Denmark>\"><Denmark></option>"
|
46
|
-
equal options_for_select([ [ "<Denmark>", { data: { test: '<bold>' } } ] ]),
|
47
|
-
"<option data-test=\"<bold>\" value=\"<Denmark>\"><Denmark></option>"
|
48
|
-
equal options_for_select([ "<Denmark>", [ "USA", { class: 'bold' } ], "Sweden" ], "USA"),
|
49
|
-
"<option value=\"<Denmark>\"><Denmark></option>\n<option class=\"bold\" selected=\"selected\" value=\"USA\">USA</option>\n<option value=\"Sweden\">Sweden</option>"
|
50
|
-
equal options_for_select([ "<Denmark>", [ "USA", { class: 'bold' } ], "Sweden" ], [ "USA", "Sweden" ]),
|
51
|
-
"<option value=\"<Denmark>\"><Denmark></option>\n<option class=\"bold\" selected=\"selected\" value=\"USA\">USA</option>\n<option selected=\"selected\" value=\"Sweden\">Sweden</option>"
|
52
|
-
equal options_for_select([ [ "<Denmark>", { onclick: 'alert("<code>")' } ] ]),
|
53
|
-
"<option onclick=\"alert("<code>")\" value=\"<Denmark>\"><Denmark></option>"
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
class Struct
|
58
|
-
constructor: ->
|
59
|
-
for key, index in @constructor.keys
|
60
|
-
@[key] = arguments[index] ? null
|
61
|
-
|
62
|
-
class Post extends Struct
|
63
|
-
@keys = ['title', 'author_name', 'body', 'secret', 'written_on', 'category', 'origin', 'allow_comments']
|
64
|
-
|
65
|
-
dummy_posts =
|
66
|
-
[ new Post("<Abe> went home", "<Abe>", "To a little house", "shh!"),
|
67
|
-
new Post("Babe went home", "Babe", "To a little house", "shh!"),
|
68
|
-
new Post("Cabe went home", "Cabe", (-> "To a little house"), (-> "shh!")) ]
|
69
|
-
|
70
|
-
test "options_from_collection_for_select", ->
|
71
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title"),
|
72
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
73
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", "Babe"),
|
74
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option selected=\"selected\" value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
75
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", [ "Babe", "Cabe" ]),
|
76
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option selected=\"selected\" value=\"Babe\">Babe went home</option>\n<option selected=\"selected\" value=\"Cabe\">Cabe went home</option>"
|
77
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", (p) -> p.author_name is 'Babe'),
|
78
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option selected=\"selected\" value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
79
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", disabled: "Babe"),
|
80
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option disabled=\"disabled\" value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
81
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", disabled: [ "Babe", "Cabe" ]),
|
82
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option disabled=\"disabled\" value=\"Babe\">Babe went home</option>\n<option disabled=\"disabled\" value=\"Cabe\">Cabe went home</option>"
|
83
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", selected: "Cabe", disabled: "Babe"),
|
84
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option disabled=\"disabled\" value=\"Babe\">Babe went home</option>\n<option selected=\"selected\" value=\"Cabe\">Cabe went home</option>"
|
85
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", "title", disabled: (p) -> p.author_name in ['Babe', 'Cabe']),
|
86
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option disabled=\"disabled\" value=\"Babe\">Babe went home</option>\n<option disabled=\"disabled\" value=\"Cabe\">Cabe went home</option>"
|
87
|
-
equal options_from_collection_for_select(dummy_posts, ((p) -> p.author_name), "title"),
|
88
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
89
|
-
equal options_from_collection_for_select(dummy_posts, "author_name", (p) -> p.title),
|
90
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
_objectsArrayToHashesArray = (objectsArray) ->
|
95
|
-
_.map objectsArray, (element) ->
|
96
|
-
hash = {}
|
97
|
-
for key in element.constructor.keys
|
98
|
-
hash[key] = element[key]
|
99
|
-
hash
|
100
|
-
|
101
|
-
test "options_from_collection_for_select with array of hashes", ->
|
102
|
-
equal options_from_collection_for_select(_objectsArrayToHashesArray(dummy_posts), "author_name", "title", "Babe"),
|
103
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option selected=\"selected\" value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
class BBPost extends Backbone.Model
|
108
|
-
|
109
|
-
class BBPosts extends Backbone.Collection
|
110
|
-
model: BBPost
|
111
|
-
|
112
|
-
test "options_from_collection_for_select with Backbone.Collection", ->
|
113
|
-
bbPosts = new BBPosts(_objectsArrayToHashesArray(dummy_posts))
|
114
|
-
equal options_from_collection_for_select(bbPosts, "author_name", "title", "Babe"),
|
115
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option selected=\"selected\" value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
116
|
-
equal options_from_collection_for_select(bbPosts, "author_name", "title", disabled: (p) -> p.get('author_name') in ['Babe', 'Cabe']),
|
117
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option disabled=\"disabled\" value=\"Babe\">Babe went home</option>\n<option disabled=\"disabled\" value=\"Cabe\">Cabe went home</option>"
|
118
|
-
equal options_from_collection_for_select(bbPosts, ((p) -> p.get('author_name')), "title"),
|
119
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
120
|
-
equal options_from_collection_for_select(bbPosts, "author_name", (p) -> p.get('title')),
|
121
|
-
"<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>"
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
class Continent extends Struct
|
126
|
-
@keys = ['continent_name', 'countries']
|
127
|
-
|
128
|
-
class Country extends Struct
|
129
|
-
@keys = ['country_id', 'country_name']
|
130
|
-
|
131
|
-
dummy_continents =
|
132
|
-
[ new Continent("<Africa>", [new Country("<sa>", "<South Africa>"), new Country("so", "Somalia")]),
|
133
|
-
new Continent("Europe", [new Country("dk", "Denmark"), new Country("ie", "Ireland")]) ]
|
134
|
-
|
135
|
-
test "option_groups_from_collection_for_select", ->
|
136
|
-
equal option_groups_from_collection_for_select(dummy_continents, "countries", "continent_name", "country_id", "country_name", "dk"),
|
137
|
-
"<optgroup label=\"<Africa>\"><option value=\"<sa>\"><South Africa></option>\n<option value=\"so\">Somalia</option></optgroup><optgroup label=\"Europe\"><option selected=\"selected\" value=\"dk\">Denmark</option>\n<option value=\"ie\">Ireland</option></optgroup>"
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
class BBContinent extends Backbone.Model
|
142
|
-
|
143
|
-
class BBContinents extends Backbone.Collection
|
144
|
-
model: BBContinent
|
145
|
-
|
146
|
-
test "option_groups_from_collection_for_select with Backbone.Collection", ->
|
147
|
-
BBContinents = new BBContinents(_objectsArrayToHashesArray(dummy_continents))
|
148
|
-
equal option_groups_from_collection_for_select(dummy_continents, "countries", "continent_name", "country_id", "country_name", "dk"),
|
149
|
-
"<optgroup label=\"<Africa>\"><option value=\"<sa>\"><South Africa></option>\n<option value=\"so\">Somalia</option></optgroup><optgroup label=\"Europe\"><option selected=\"selected\" value=\"dk\">Denmark</option>\n<option value=\"ie\">Ireland</option></optgroup>"
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
test "grouped_options_for_select", ->
|
154
|
-
equal grouped_options_for_select([
|
155
|
-
["North America",
|
156
|
-
[['United States','US'],"Canada"]],
|
157
|
-
["Europe",
|
158
|
-
[["Great Britain","GB"], "Germany"]]
|
159
|
-
]),
|
160
|
-
"<optgroup label=\"North America\"><option value=\"US\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup><optgroup label=\"Europe\"><option value=\"GB\">Great Britain</option>\n<option value=\"Germany\">Germany</option></optgroup>"
|
161
|
-
equal grouped_options_for_select([['US',"Canada"] , ["GB", "Germany"]], null, divider: "----------"),
|
162
|
-
"<optgroup label=\"----------\"><option value=\"US\">US</option>\n<option value=\"Canada\">Canada</option></optgroup><optgroup label=\"----------\"><option value=\"GB\">GB</option>\n<option value=\"Germany\">Germany</option></optgroup>"
|
163
|
-
equal grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", prompt: "Choose a product..."),
|
164
|
-
"<option value=\"\">Choose a product...</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>"
|
165
|
-
equal grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", prompt: true),
|
166
|
-
"<option value=\"\">Please select</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>"
|
167
|
-
equal grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], null, prompt: '<Choose One>'),
|
168
|
-
"<option value=\"\"><Choose One></option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>"
|
169
|
-
equal grouped_options_for_select({'North America': ['United States','Canada'], 'Europe': ['Denmark','Germany']}),
|
170
|
-
"<optgroup label=\"Europe\"><option value=\"Denmark\">Denmark</option>\n<option value=\"Germany\">Germany</option></optgroup><optgroup label=\"North America\"><option value=\"United States\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup>"
|