ende 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assets/javascripts/aura/extensions/rivets/#formatters.js.coffee# +183 -0
- data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee +172 -0
- data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee~ +0 -0
- data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +8 -20
- data/lib/ende/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54bd09d2da50fc28c4a33d1facdeebaaa0c84440
|
4
|
+
data.tar.gz: ea30029e995d48cb6008e390b39ba72495c38306
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d7e9c7f4544612d99bd25350700f8e88c62042ab2949f5441520658f3d6e240f92b10a12d2becef4cc2913f3c0cdb6869f69d399e376be2057be3ca28f8fe1b
|
7
|
+
data.tar.gz: fbbbdf48dee9f407dc2601cf39ea0403d3a5b2aab1332a146a6ef88eb7333f7c46438310f1f8d89f1fb4c544d2a8bc72fcb4eb8d5231289fa5d47aeefb1e10fd
|
@@ -0,0 +1,183 @@
|
|
1
|
+
prevent = require 'prevent'
|
2
|
+
|
3
|
+
# # Binding Formatters
|
4
|
+
# dermis provides some default data binding formatters to help you get going as quickly as possible
|
5
|
+
#
|
6
|
+
# The functions below can be used as standard rivets formatters and can be used in combination with one another to do crazy things.
|
7
|
+
|
8
|
+
cfg =
|
9
|
+
preloadData: true
|
10
|
+
formatters:
|
11
|
+
# ### exists
|
12
|
+
# ```data-show="user.name | exists"```
|
13
|
+
#
|
14
|
+
# Returns true or false if the value exists
|
15
|
+
exists: (v) -> v?
|
16
|
+
|
17
|
+
# ### empty
|
18
|
+
# ```data-hide="user.friends | empty"```
|
19
|
+
#
|
20
|
+
# Returns true if the value is non-existent or has a length of zero.
|
21
|
+
empty: (v) -> !(v? and v?.length isnt 0)
|
22
|
+
|
23
|
+
# ### date
|
24
|
+
# ```data-text="user.birthday | date"```
|
25
|
+
#
|
26
|
+
# You must include [moment.js](http://momentjs.com/) on your page to use this. It is not bundled.
|
27
|
+
#
|
28
|
+
# Returns the value date formatted by moment.js
|
29
|
+
date: (v) -> moment(v).format 'MMM DD, YYYY'
|
30
|
+
|
31
|
+
# ### money
|
32
|
+
# ```data-text="user.accountBalance | money"```
|
33
|
+
#
|
34
|
+
# You must include [accounting.js](http://josscrowcroft.github.com/accounting.js/) on your page to use this. It is not bundled.
|
35
|
+
#
|
36
|
+
# Returns the value currency formatted by accounting.js
|
37
|
+
money: (v) -> accounting.formatMoney v
|
38
|
+
|
39
|
+
# ### toNumber
|
40
|
+
# ```data-value="user.sweetText | toNumber"```
|
41
|
+
#
|
42
|
+
# Returns the value converted to a number
|
43
|
+
toNumber: (v) -> +v
|
44
|
+
|
45
|
+
# ### toString
|
46
|
+
# ```data-value="user.sweetNumber | toString"```
|
47
|
+
#
|
48
|
+
# Returns the value converted to a string
|
49
|
+
toString: (v) -> String v
|
50
|
+
|
51
|
+
# ### negate
|
52
|
+
# ```data-show="user.badBoy | exists | negate"```
|
53
|
+
#
|
54
|
+
# Returns the boolean opposite of the value (true=false, false=true)
|
55
|
+
negate: (v) -> !v
|
56
|
+
|
57
|
+
# ### is
|
58
|
+
# ```data-show="user.name | is John"```
|
59
|
+
#
|
60
|
+
# Returns true if the value equals the argument
|
61
|
+
is: (v,a) -> v is a
|
62
|
+
|
63
|
+
# ### isnt
|
64
|
+
# ```data-hide="user.name | isnt John"```
|
65
|
+
#
|
66
|
+
# Returns true if the value doesn't equal the argument
|
67
|
+
isnt: (v,a) -> v isnt a
|
68
|
+
|
69
|
+
# ### gt
|
70
|
+
# ```data-show="user.friends | length | gt 5"```
|
71
|
+
#
|
72
|
+
# Returns true if the value is greater than the argument
|
73
|
+
gt: (v,a) -> v > a
|
74
|
+
|
75
|
+
# ### lt
|
76
|
+
# ```data-hide="user.friends | length | lt 5"```
|
77
|
+
#
|
78
|
+
# Returns true if the value is less than the argument
|
79
|
+
lt: (v,a) -> v < a
|
80
|
+
|
81
|
+
# ### at
|
82
|
+
# ```data-text="user.friends | at 0"```
|
83
|
+
#
|
84
|
+
# Returns the item at the index specified for values
|
85
|
+
at: (v, a) ->
|
86
|
+
return v unless v?
|
87
|
+
return v[parseInt(a)]
|
88
|
+
|
89
|
+
# ### join
|
90
|
+
# ```data-text="user.friends | join ,"```
|
91
|
+
#
|
92
|
+
# Returns the output of value joined by the argument
|
93
|
+
join: (v, a) ->
|
94
|
+
return v unless v?
|
95
|
+
return v.join a
|
96
|
+
|
97
|
+
# ### split
|
98
|
+
# ```data-each-friend="user.friendList | split ,"```
|
99
|
+
#
|
100
|
+
# Returns an array of value split by the argument
|
101
|
+
split: (v, a) ->
|
102
|
+
return v unless v?
|
103
|
+
return v.split a
|
104
|
+
|
105
|
+
# ### prepend
|
106
|
+
# ```data-href="user.name | prepend /users/"```
|
107
|
+
#
|
108
|
+
# Returns a string of argument + value
|
109
|
+
prepend: (v,a...) -> a.join(' ')+v
|
110
|
+
|
111
|
+
# ### append
|
112
|
+
# ```data-href="user.name | prepend /users/ | append /messages"```
|
113
|
+
#
|
114
|
+
# Returns a string of value + argument
|
115
|
+
append: (v,a...) -> v+a.join(' ')
|
116
|
+
|
117
|
+
# ### length
|
118
|
+
# ```data-text="user.friends | length"```
|
119
|
+
#
|
120
|
+
# Returns the length of the value
|
121
|
+
length: (v) ->
|
122
|
+
return v unless v?
|
123
|
+
return v.length
|
124
|
+
|
125
|
+
# ### cancelEvent
|
126
|
+
# ```data-on-submit="user:save | cancelEvent"```
|
127
|
+
#
|
128
|
+
# Extremely useful for preventing forms from submitting but can be used to stop all event propagation.
|
129
|
+
#
|
130
|
+
# Returns a new function wrapping value that stops event propagation.
|
131
|
+
cancelEvent: (v) ->
|
132
|
+
return v unless v?
|
133
|
+
return (e) ->
|
134
|
+
prevent e
|
135
|
+
v.call @, e
|
136
|
+
return false
|
137
|
+
|
138
|
+
# ### sort
|
139
|
+
# ```data-each="movies.models | sort [asc | desc]"```
|
140
|
+
#
|
141
|
+
# Sorts collection in asc or desc order
|
142
|
+
sort: (arr, direction='asc') ->
|
143
|
+
return arr.sort().reverse() if direction is 'desc'
|
144
|
+
return arr.sort()
|
145
|
+
|
146
|
+
# ### sortBy
|
147
|
+
# ```data-each="movies | sortBy field, [asc | desc]"```
|
148
|
+
#
|
149
|
+
# Sorts collection in asc or desc order on a field
|
150
|
+
sortBy: (arr, field, direction='asc') ->
|
151
|
+
reverse = (direction is 'desc')
|
152
|
+
sortFn = (a, b) ->
|
153
|
+
if a[field] < b[field]
|
154
|
+
out = -1
|
155
|
+
else if a[field] > b[field]
|
156
|
+
out = 1
|
157
|
+
else
|
158
|
+
out = 0
|
159
|
+
return out*[1,-1][+!!reverse]
|
160
|
+
|
161
|
+
return arr.sort sortFn
|
162
|
+
|
163
|
+
|
164
|
+
adapter:
|
165
|
+
subscribe: (obj, kp, cb) ->
|
166
|
+
obj.on "change:#{kp}", cb
|
167
|
+
return
|
168
|
+
|
169
|
+
unsubscribe: (obj, kp, cb) ->
|
170
|
+
obj.removeListener "change:#{kp}", cb
|
171
|
+
return
|
172
|
+
|
173
|
+
read: (obj, kp) -> obj.get kp
|
174
|
+
|
175
|
+
publish: (obj, kp, val) ->
|
176
|
+
obj.set kp, val
|
177
|
+
return
|
178
|
+
|
179
|
+
publishers = ["toNumber", "toString"]
|
180
|
+
for k,v of cfg.formatters when publishers.indexOf(k) isnt -1
|
181
|
+
v.publish = v.read = v
|
182
|
+
|
183
|
+
module.exports = cfg
|
@@ -0,0 +1,172 @@
|
|
1
|
+
define 'extensions/rivets/formatters',
|
2
|
+
|
3
|
+
# ### exists
|
4
|
+
# ```data-show="user.name | exists"```
|
5
|
+
#
|
6
|
+
# Returns true or false if the value exists
|
7
|
+
exists: (v) -> v?
|
8
|
+
|
9
|
+
# ### empty
|
10
|
+
# ```data-hide="user.friends | empty"```
|
11
|
+
#
|
12
|
+
# Returns true if the value is non-existent or has a length of zero.
|
13
|
+
empty: (v) -> !(v? and v?.length isnt 0)
|
14
|
+
|
15
|
+
# ### date
|
16
|
+
# ```data-text="user.birthday | date"```
|
17
|
+
#
|
18
|
+
# You must include [moment.js](http://momentjs.com/) on your page to use this. It is not bundled.
|
19
|
+
#
|
20
|
+
# Returns the value date formatted by moment.js
|
21
|
+
# date: (v) -> moment(v).format 'MMM DD, YYYY'
|
22
|
+
|
23
|
+
# ### money
|
24
|
+
# ```data-text="user.accountBalance | money"```
|
25
|
+
#
|
26
|
+
# You must include [accounting.js](http://josscrowcroft.github.com/accounting.js/) on your page to use this. It is not bundled.
|
27
|
+
#
|
28
|
+
# Returns the value currency formatted by accounting.js
|
29
|
+
# money: (v) -> accounting.formatMoney v
|
30
|
+
|
31
|
+
# ### toNumber
|
32
|
+
# ```data-value="user.sweetText | toNumber"```
|
33
|
+
#
|
34
|
+
# Returns the value converted to a number
|
35
|
+
toNumber: (v) -> +v
|
36
|
+
|
37
|
+
# ### toString
|
38
|
+
# ```data-value="user.sweetNumber | toString"```
|
39
|
+
#
|
40
|
+
# Returns the value converted to a string
|
41
|
+
toString: (v) -> String v
|
42
|
+
|
43
|
+
# ### negate
|
44
|
+
# ```data-show="user.badBoy | exists | negate"```
|
45
|
+
#
|
46
|
+
# Returns the boolean opposite of the value (true=false, false=true)
|
47
|
+
# negate: (v) -> !v
|
48
|
+
|
49
|
+
# ### is
|
50
|
+
# ```data-show="user.name | is John"```
|
51
|
+
#
|
52
|
+
# Returns true if the value equals the argument
|
53
|
+
is: (v,a) -> v is a
|
54
|
+
|
55
|
+
# ### isnt
|
56
|
+
# ```data-hide="user.name | isnt John"```
|
57
|
+
#
|
58
|
+
# Returns true if the value doesn't equal the argument
|
59
|
+
isnt: (v,a) -> v isnt a
|
60
|
+
|
61
|
+
# ### gt
|
62
|
+
# ```data-show="user.friends | length | gt 5"```
|
63
|
+
#
|
64
|
+
# Returns true if the value is greater than the argument
|
65
|
+
gt: (v,a) -> v > a
|
66
|
+
|
67
|
+
# ### lt
|
68
|
+
# ```data-hide="user.friends | length | lt 5"```
|
69
|
+
#
|
70
|
+
# Returns true if the value is less than the argument
|
71
|
+
lt: (v,a) -> v < a
|
72
|
+
|
73
|
+
# ### at
|
74
|
+
# ```data-text="user.friends | at 0"```
|
75
|
+
#
|
76
|
+
# Returns the item at the index specified for values
|
77
|
+
at: (v, a) ->
|
78
|
+
return v unless v?
|
79
|
+
return v[parseInt(a)]
|
80
|
+
|
81
|
+
# ### join
|
82
|
+
# ```data-text="user.friends | join ,"```
|
83
|
+
#
|
84
|
+
# Returns the output of value joined by the argument
|
85
|
+
join: (v, a) ->
|
86
|
+
return v unless v?
|
87
|
+
return v.join a
|
88
|
+
|
89
|
+
# ### split
|
90
|
+
# ```data-each-friend="user.friendList | split ,"```
|
91
|
+
#
|
92
|
+
# Returns an array of value split by the argument
|
93
|
+
split: (v, a) ->
|
94
|
+
return v unless v?
|
95
|
+
return v.split a
|
96
|
+
|
97
|
+
# ### prepend
|
98
|
+
# ```data-href="user.name | prepend /users/"```
|
99
|
+
#
|
100
|
+
# Returns a string of argument + value
|
101
|
+
prepend: (v,a...) -> a.join(' ')+v
|
102
|
+
|
103
|
+
# ### append
|
104
|
+
# ```data-href="user.name | prepend /users/ | append /messages"```
|
105
|
+
#
|
106
|
+
# Returns a string of value + argument
|
107
|
+
append: (v,a...) -> v+a.join(' ')
|
108
|
+
|
109
|
+
# ### length
|
110
|
+
# ```data-text="user.friends | length"```
|
111
|
+
#
|
112
|
+
# Returns the length of the value
|
113
|
+
length: (v) ->
|
114
|
+
return v unless v?
|
115
|
+
return v.length
|
116
|
+
|
117
|
+
# ### cancelEvent
|
118
|
+
# ```data-on-submit="user:save | cancelEvent"```
|
119
|
+
#
|
120
|
+
# Extremely useful for preventing forms from submitting but can be used to stop all event propagation.
|
121
|
+
#
|
122
|
+
# Returns a new function wrapping value that stops event propagation.
|
123
|
+
cancelEvent: (v) ->
|
124
|
+
return v unless v?
|
125
|
+
return (e) ->
|
126
|
+
prevent e
|
127
|
+
v.call @, e
|
128
|
+
return false
|
129
|
+
|
130
|
+
# ### sort
|
131
|
+
# ```data-each="movies.models | sort [asc | desc]"```
|
132
|
+
#
|
133
|
+
# Sorts collection in asc or desc order
|
134
|
+
sort: (arr, direction='asc') ->
|
135
|
+
return arr.sort().reverse() if direction is 'desc'
|
136
|
+
return arr.sort()
|
137
|
+
|
138
|
+
# ### sortBy
|
139
|
+
# ```data-each="movies | sortBy field, [asc | desc]"```
|
140
|
+
#
|
141
|
+
# Sorts collection in asc or desc order on a field
|
142
|
+
sortBy: (arr, field, direction='asc') ->
|
143
|
+
reverse = (direction is 'desc')
|
144
|
+
sortFn = (a, b) ->
|
145
|
+
if a[field] < b[field]
|
146
|
+
out = -1
|
147
|
+
else if a[field] > b[field]
|
148
|
+
out = 1
|
149
|
+
else
|
150
|
+
out = 0
|
151
|
+
return out*[1,-1][+!!reverse]
|
152
|
+
|
153
|
+
return arr.sort sortFn
|
154
|
+
|
155
|
+
|
156
|
+
float: (value) ->
|
157
|
+
throw new TypeError "Invalid value passed to float formatter: #{value}" unless value?
|
158
|
+
|
159
|
+
# Blank value and impossible to convert to string
|
160
|
+
(!value || !(value + '')) && (value = 0)
|
161
|
+
|
162
|
+
# Force getter reading on IE
|
163
|
+
value = parseFloat value + ''
|
164
|
+
|
165
|
+
# Handle NaN
|
166
|
+
(isNaN(value)) && (value = 0)
|
167
|
+
|
168
|
+
# Format value
|
169
|
+
value.toFixed(2).toString().replace '.', ','
|
170
|
+
|
171
|
+
currency: (value) ->
|
172
|
+
'R$ ' + rivets.formatters.float value
|
File without changes
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
#= require 'aura/extensions/rivets/formatters'
|
2
|
+
|
3
|
+
define 'aura/extensions/rivets', ['extensions/rivets/formatters'], (formatters)->
|
2
4
|
|
3
5
|
'use strict';
|
4
6
|
|
@@ -9,6 +11,9 @@ define 'aura/extensions/rivets', ->
|
|
9
11
|
Rivets = rivets._
|
10
12
|
|
11
13
|
observable_configuration = require 'indefinido-observable/lib/adapters/rivets'
|
14
|
+
|
15
|
+
|
16
|
+
extend rivets.formatters, formatters
|
12
17
|
|
13
18
|
rivets.configure observable_configuration
|
14
19
|
rivets.configure
|
@@ -211,29 +216,12 @@ define 'aura/extensions/rivets', ->
|
|
211
216
|
else if value?.toString() isnt el.value?.toString()
|
212
217
|
el.value = if value? then value else ''
|
213
218
|
|
214
|
-
# TODO isntall formatters from the external custom formatters repo
|
215
|
-
rivets.formatters.is ||= (one, other) -> one == other
|
216
|
-
|
217
|
-
rivets.formatters.float ||= (value) ->
|
218
|
-
throw new TypeError "Invalid value passed to float formatter: #{value}" unless value?
|
219
|
-
|
220
|
-
# Blank value and impossible to convert to string
|
221
|
-
(!value || !(value + '')) && (value = 0)
|
222
|
-
|
223
|
-
# Force getter reading on IE
|
224
|
-
value = parseFloat value + ''
|
225
|
-
|
226
|
-
# Handle NaN
|
227
|
-
(isNaN(value)) && (value = 0)
|
228
|
-
|
229
|
-
# Format value
|
230
|
-
value.toFixed(2).toString().replace '.', ','
|
231
219
|
|
232
|
-
rivets.formatters.currency ||= (value) ->
|
233
|
-
'R$ ' + rivets.formatters.float value
|
234
220
|
|
221
|
+
|
235
222
|
|
236
223
|
(application) ->
|
224
|
+
version: '0.1.0'
|
237
225
|
|
238
226
|
initialize: (application) ->
|
239
227
|
observable = require('observable').mixin
|
data/lib/ende/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ende
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Heitor Salazar
|
@@ -76,6 +76,9 @@ files:
|
|
76
76
|
- lib/assets/javascripts/aura/extensions/mediator.js
|
77
77
|
- lib/assets/javascripts/aura/extensions/models.js.coffee.erb
|
78
78
|
- lib/assets/javascripts/aura/extensions/rivets.js.coffee
|
79
|
+
- lib/assets/javascripts/aura/extensions/rivets/#formatters.js.coffee#
|
80
|
+
- lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee
|
81
|
+
- lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee~
|
79
82
|
- lib/assets/javascripts/aura/extensions/routes.js.coffee
|
80
83
|
- lib/assets/javascripts/aura/extensions/states.js.coffee
|
81
84
|
- lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee
|