nice 0.0.6 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +162 -0
- data/LICENSE +21 -0
- data/README.md +93 -99
- data/Rakefile +4 -45
- data/lib/nice/client.rb +51 -0
- data/lib/nice/version.rb +1 -1
- data/lib/nice.rb +30 -2
- data/nice.gemspec +43 -0
- metadata +144 -67
- data/MIT-LICENSE +0 -20
- data/lib/assets/javascripts/event_dispatcher.coffee +0 -34
- data/lib/assets/javascripts/nice_imp_jquery.js.coffee +0 -122
- data/lib/assets/javascripts/nice_jquery.js +0 -15
- data/lib/nice/config.rb +0 -3
- data/lib/nice/engine.rb +0 -4
- data/lib/nice/html_parser.rb +0 -144
- data/lib/nice/js/caller.rb +0 -48
- data/lib/nice/logic.rb +0 -99
- data/lib/nice/middleware.rb +0 -82
- data/lib/tasks/nice_tasks.rake +0 -4
- data/test/integration/nice_test.rb +0 -25
- data/test/test_helper.rb +0 -30
metadata
CHANGED
|
@@ -1,118 +1,195 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nice
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.1.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
bindir: bin
|
|
7
|
+
- Nicolas Leger
|
|
8
|
+
bindir: exe
|
|
11
9
|
cert_chain: []
|
|
12
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
11
|
dependencies:
|
|
14
12
|
- !ruby/object:Gem::Dependency
|
|
15
|
-
name:
|
|
13
|
+
name: ckan
|
|
16
14
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
15
|
requirements:
|
|
19
|
-
- -
|
|
16
|
+
- - ">="
|
|
20
17
|
- !ruby/object:Gem::Version
|
|
21
|
-
version:
|
|
18
|
+
version: '0'
|
|
22
19
|
type: :runtime
|
|
23
20
|
prerelease: false
|
|
24
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
22
|
requirements:
|
|
27
|
-
- -
|
|
23
|
+
- - ">="
|
|
28
24
|
- !ruby/object:Gem::Version
|
|
29
|
-
version:
|
|
25
|
+
version: '0'
|
|
30
26
|
- !ruby/object:Gem::Dependency
|
|
31
|
-
name:
|
|
27
|
+
name: httparty
|
|
32
28
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
29
|
requirements:
|
|
35
|
-
- -
|
|
30
|
+
- - "~>"
|
|
36
31
|
- !ruby/object:Gem::Version
|
|
37
|
-
version: '0'
|
|
32
|
+
version: '0.21'
|
|
38
33
|
type: :runtime
|
|
39
34
|
prerelease: false
|
|
40
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
36
|
requirements:
|
|
43
|
-
- -
|
|
37
|
+
- - "~>"
|
|
44
38
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '0'
|
|
39
|
+
version: '0.21'
|
|
46
40
|
- !ruby/object:Gem::Dependency
|
|
47
|
-
name:
|
|
41
|
+
name: json
|
|
48
42
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
43
|
requirements:
|
|
51
|
-
- -
|
|
44
|
+
- - "~>"
|
|
52
45
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
46
|
+
version: '2.6'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '2.6'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rake
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '13.0'
|
|
54
61
|
type: :development
|
|
55
62
|
prerelease: false
|
|
56
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
64
|
requirements:
|
|
59
|
-
- -
|
|
65
|
+
- - "~>"
|
|
60
66
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
|
|
67
|
+
version: '13.0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rspec
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '3.12'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '3.12'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: rubocop
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '1.50'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '1.50'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: vcr
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '6.0'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '6.0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: webmock
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '3.0'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '3.0'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: pry
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - "~>"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0.14'
|
|
131
|
+
type: :development
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '0.14'
|
|
138
|
+
- !ruby/object:Gem::Dependency
|
|
139
|
+
name: pry-byebug
|
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '3.10'
|
|
145
|
+
type: :development
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - "~>"
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '3.10'
|
|
152
|
+
description: A Ruby gem for accessing and managing OpenData from Nice Côte d'Azur
|
|
153
|
+
metropolitan area via CKAN API
|
|
63
154
|
email:
|
|
64
|
-
-
|
|
155
|
+
- nicolasleger@users.noreply.github.com
|
|
65
156
|
executables: []
|
|
66
157
|
extensions: []
|
|
67
158
|
extra_rdoc_files: []
|
|
68
159
|
files:
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
- lib/nice/html_parser.rb
|
|
75
|
-
- lib/nice/js/caller.rb
|
|
76
|
-
- lib/nice/logic.rb
|
|
77
|
-
- lib/nice/middleware.rb
|
|
78
|
-
- lib/nice/version.rb
|
|
79
|
-
- lib/nice.rb
|
|
80
|
-
- lib/tasks/nice_tasks.rake
|
|
81
|
-
- MIT-LICENSE
|
|
82
|
-
- Rakefile
|
|
160
|
+
- ".rspec"
|
|
161
|
+
- CHANGELOG.md
|
|
162
|
+
- Gemfile
|
|
163
|
+
- Gemfile.lock
|
|
164
|
+
- LICENSE
|
|
83
165
|
- README.md
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
166
|
+
- Rakefile
|
|
167
|
+
- lib/nice.rb
|
|
168
|
+
- lib/nice/client.rb
|
|
169
|
+
- lib/nice/version.rb
|
|
170
|
+
- nice.gemspec
|
|
171
|
+
homepage: https://github.com/nicolasleger/nice
|
|
172
|
+
licenses:
|
|
173
|
+
- MIT
|
|
174
|
+
metadata:
|
|
175
|
+
homepage_uri: https://github.com/nicolasleger/nice
|
|
176
|
+
source_code_uri: https://github.com/nicolasleger/nice
|
|
177
|
+
changelog_uri: https://github.com/nicolasleger/nice/blob/main/CHANGELOG.md
|
|
89
178
|
rdoc_options: []
|
|
90
179
|
require_paths:
|
|
91
180
|
- lib
|
|
92
181
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
|
-
none: false
|
|
94
182
|
requirements:
|
|
95
|
-
- -
|
|
183
|
+
- - ">="
|
|
96
184
|
- !ruby/object:Gem::Version
|
|
97
|
-
version:
|
|
98
|
-
segments:
|
|
99
|
-
- 0
|
|
100
|
-
hash: -579488533932706128
|
|
185
|
+
version: 2.7.0
|
|
101
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
|
-
none: false
|
|
103
187
|
requirements:
|
|
104
|
-
- -
|
|
188
|
+
- - ">="
|
|
105
189
|
- !ruby/object:Gem::Version
|
|
106
190
|
version: '0'
|
|
107
|
-
segments:
|
|
108
|
-
- 0
|
|
109
|
-
hash: -579488533932706128
|
|
110
191
|
requirements: []
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
summary: Nice / Nizza is a posh little town in south France.
|
|
116
|
-
test_files:
|
|
117
|
-
- test/integration/nice_test.rb
|
|
118
|
-
- test/test_helper.rb
|
|
192
|
+
rubygems_version: 4.0.3
|
|
193
|
+
specification_version: 4
|
|
194
|
+
summary: OpenData NCA - Métropole Nice Côte d'Azur
|
|
195
|
+
test_files: []
|
data/MIT-LICENSE
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
Copyright 2012 YOURNAME
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
-
a copy of this software and associated documentation files (the
|
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
-
the following conditions:
|
|
10
|
-
|
|
11
|
-
The above copyright notice and this permission notice shall be
|
|
12
|
-
included in all copies or substantial portions of the Software.
|
|
13
|
-
|
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
class this.NiceEventDispatcher
|
|
2
|
-
|
|
3
|
-
# state transition cache
|
|
4
|
-
@state_cache
|
|
5
|
-
|
|
6
|
-
# gets called by JS response and generates JS events either dispatched immediatly
|
|
7
|
-
# or later by another transition event
|
|
8
|
-
@dispatch_event: (event_name, attrs, cached = false, transition_id = null) ->
|
|
9
|
-
# create event
|
|
10
|
-
evt = document.createEvent("Event")
|
|
11
|
-
evt.initEvent(event_name,true,true);
|
|
12
|
-
|
|
13
|
-
# add remaining arguments as event properties
|
|
14
|
-
evt[key] = value for key, value of attrs
|
|
15
|
-
|
|
16
|
-
if cached == true # is this state preloading?
|
|
17
|
-
if !NiceEventDispatcher.state_cache?[transition_id]?
|
|
18
|
-
NiceEventDispatcher.state_cache = new Object;
|
|
19
|
-
NiceEventDispatcher.state_cache[transition_id] = []
|
|
20
|
-
document.addEventListener "nice.state.CachedTransitionEvent", NiceEventDispatcher.dispatch_cached_transition_events, false
|
|
21
|
-
|
|
22
|
-
NiceEventDispatcher.state_cache[transition_id].push evt
|
|
23
|
-
else # dispatch
|
|
24
|
-
document.dispatchEvent(evt)
|
|
25
|
-
|
|
26
|
-
# launch cached state transition
|
|
27
|
-
@dispatch_cached_transition_events: (event) ->
|
|
28
|
-
if NiceEventDispatcher.state_cache?[event.transition_id]?
|
|
29
|
-
|
|
30
|
-
# fire stored events
|
|
31
|
-
document.dispatchEvent(evt) for evt in NiceEventDispatcher.state_cache[event.transition_id]
|
|
32
|
-
|
|
33
|
-
# clean/reset
|
|
34
|
-
NiceEventDispatcher.state_cache[event.transition_id] = null
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
## default event handler
|
|
2
|
-
class NiceJquery
|
|
3
|
-
|
|
4
|
-
# css top class manipulation
|
|
5
|
-
@change_top_css: (event) ->
|
|
6
|
-
# remove global state class and add new one
|
|
7
|
-
reg = /// ^
|
|
8
|
-
state-\S+
|
|
9
|
-
///
|
|
10
|
-
matches = $("body").attr("class")?.match(reg)
|
|
11
|
-
$("body").removeClass(c_name) for c_name in matches if matches?
|
|
12
|
-
$("body").addClass("state-#{event.new_state_name}")
|
|
13
|
-
|
|
14
|
-
# insert element after referencing node
|
|
15
|
-
@insert_after: (event) ->
|
|
16
|
-
act = (ref,ins) -> ref.after(ins)
|
|
17
|
-
NiceJquery.perform_transition(event.ref_node, event.new_node, act)
|
|
18
|
-
|
|
19
|
-
# insert element at first position inside referencing node
|
|
20
|
-
@insert_inside: (event) ->
|
|
21
|
-
act = (ref,ins) -> ref.prepend(ins)
|
|
22
|
-
NiceJquery.perform_transition(event.ref_node, event.new_node, act)
|
|
23
|
-
|
|
24
|
-
# replace ref node with new node
|
|
25
|
-
@replace: (event) ->
|
|
26
|
-
act = (ref,ins) -> ref.replaceWith(ins)
|
|
27
|
-
NiceJquery.perform_transition(event.ref_node, event.new_node, act)
|
|
28
|
-
|
|
29
|
-
# remove all elements which are not of current state and all elements
|
|
30
|
-
# which are of current state and secondly annotated to be always updated.
|
|
31
|
-
@remove_state_elements: (event) ->
|
|
32
|
-
$("[data-state]").not("[data-state~='#{event.curr_state}']").remove()
|
|
33
|
-
$("[data-state~='#{event.curr_state}'][data-state-update!='no']").remove()
|
|
34
|
-
|
|
35
|
-
# remove everything under the "root tag"
|
|
36
|
-
@clean_root_tree: (event) ->
|
|
37
|
-
$("[data-state-root]").children().remove()
|
|
38
|
-
|
|
39
|
-
# Browser History Stuff
|
|
40
|
-
@move_to_url: (event) ->
|
|
41
|
-
history.pushState(null,event.title,event.url)
|
|
42
|
-
|
|
43
|
-
@insert_or_update_back_listener: (event) ->
|
|
44
|
-
# remove current existing back-binders
|
|
45
|
-
$(window).unbind('popstate')
|
|
46
|
-
$(window).bind('popstate', ->
|
|
47
|
-
xmlHttp = null
|
|
48
|
-
xmlHttp = new XMLHttpRequest()
|
|
49
|
-
xmlHttp.open('GET', event.url, false)
|
|
50
|
-
xmlHttp.send(null)
|
|
51
|
-
eval(xmlHttp.responseText)
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
# each DOM Manipulation should call this method which will apply the transition animation start values
|
|
56
|
-
# to the elements before inserting into the DOM tree and the trigger the animation
|
|
57
|
-
@perform_transition: (elem_ref, elem_new, action) ->
|
|
58
|
-
|
|
59
|
-
# get jquery obj of element to insert
|
|
60
|
-
e = $(elem_new)
|
|
61
|
-
e_ref = $(elem_ref)
|
|
62
|
-
return if !e? || !e_ref?
|
|
63
|
-
|
|
64
|
-
filter = '[data-state-transition][data-state-transition!="none"]'
|
|
65
|
-
animated_elements = e.find('*').andSelf().filter(filter)
|
|
66
|
-
|
|
67
|
-
styles = []
|
|
68
|
-
durations = []
|
|
69
|
-
easing = []
|
|
70
|
-
|
|
71
|
-
animated_elements.each (index,elem) =>
|
|
72
|
-
|
|
73
|
-
# get transition style
|
|
74
|
-
a_e = $(elem)
|
|
75
|
-
transition = a_e.data('state-transition')
|
|
76
|
-
|
|
77
|
-
# get custom defined transition definitions
|
|
78
|
-
if( NiceTransitions? )
|
|
79
|
-
transition_def = if(transition) then NiceTransitions[transition] else NiceTransitions.default
|
|
80
|
-
|
|
81
|
-
# if no custom definitions exist - generate a default to do something at least
|
|
82
|
-
if( !transition_def? )
|
|
83
|
-
if transition?
|
|
84
|
-
console.log("Custom Transition Definition for \"#{transition}\" is \
|
|
85
|
-
missing! Please create a NiceTransitions class and configure your transitions.")
|
|
86
|
-
|
|
87
|
-
# rescue default transition
|
|
88
|
-
transition_def =
|
|
89
|
-
duration: 200
|
|
90
|
-
easing: "linear"
|
|
91
|
-
properties:
|
|
92
|
-
opacity: 0.0
|
|
93
|
-
|
|
94
|
-
durations.push transition_def.duration
|
|
95
|
-
easing.push transition_def.easing
|
|
96
|
-
|
|
97
|
-
# get current style values and apply start values
|
|
98
|
-
style = {}
|
|
99
|
-
for style_key, style_val of transition_def.properties
|
|
100
|
-
old_value = a_e.css(style_key)
|
|
101
|
-
a_e.css(style_key, style_val)
|
|
102
|
-
style[style_key] = old_value
|
|
103
|
-
|
|
104
|
-
styles.push style
|
|
105
|
-
|
|
106
|
-
# insert element
|
|
107
|
-
action(e_ref, e)
|
|
108
|
-
|
|
109
|
-
# animate
|
|
110
|
-
animated_elements.each (index,elem) =>
|
|
111
|
-
$(elem).animate(styles[index],durations[index],easing[index]) if styles[index]?
|
|
112
|
-
|
|
113
|
-
## add event listener
|
|
114
|
-
document.addEventListener "nice.dom.InsertAfterEvent", NiceJquery.insert_after, false
|
|
115
|
-
document.addEventListener "nice.dom.InsertInsideEvent", NiceJquery.insert_inside, false
|
|
116
|
-
document.addEventListener "nice.dom.ReplaceEvent", NiceJquery.replace, false
|
|
117
|
-
document.addEventListener "nice.dom.RemoveStateEvent", NiceJquery.remove_state_elements, false
|
|
118
|
-
document.addEventListener "nice.dom.ChangeTopCssEvent", NiceJquery.change_top_css, false
|
|
119
|
-
document.addEventListener "nice.dom.CleanRootEvent", NiceJquery.clean_root_tree, false
|
|
120
|
-
document.addEventListener "nice.hist.ChangeURLEvent", NiceJquery.move_to_url, false
|
|
121
|
-
document.addEventListener "nice.hist.PopHistoryEvent", NiceJquery.insert_or_update_back_listener, false
|
|
122
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
|
2
|
-
// listed below.
|
|
3
|
-
//
|
|
4
|
-
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
|
5
|
-
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
|
6
|
-
//
|
|
7
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
|
8
|
-
// the compiled file.
|
|
9
|
-
//
|
|
10
|
-
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
|
11
|
-
// GO AFTER THE REQUIRES BELOW.
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
//= require event_dispatcher
|
|
15
|
-
//= require nice_imp_jquery
|
data/lib/nice/config.rb
DELETED
data/lib/nice/engine.rb
DELETED
data/lib/nice/html_parser.rb
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
require 'nokogiri'
|
|
2
|
-
require 'yaml'
|
|
3
|
-
require 'nice/js/caller'
|
|
4
|
-
|
|
5
|
-
module Nice
|
|
6
|
-
class HtmlParser
|
|
7
|
-
|
|
8
|
-
def self.remove_elements_not_of_state(state, doc)
|
|
9
|
-
|
|
10
|
-
doc.css("[data-state]").each do |node|
|
|
11
|
-
if !node.attribute('data-state').value.split(" ").include?(state) then
|
|
12
|
-
node.remove
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
doc
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def self.add_elements_of_current_state doc, curr_state, upper_root=false
|
|
20
|
-
|
|
21
|
-
# get all nodes of the current state
|
|
22
|
-
doc.css("*[data-state-root]").remove if upper_root # for upper_root option remove tree below root to shorten the search
|
|
23
|
-
curr_state_nodes = doc.css("[data-state~='#{curr_state}']")
|
|
24
|
-
|
|
25
|
-
# get reference nodes in DOM tree for current nodes and generate js insert statements
|
|
26
|
-
stack = curr_state_nodes.reverse.each_with_index.map do |curr_node,index|
|
|
27
|
-
|
|
28
|
-
if curr_node.has_attribute?("data-state-update") &&
|
|
29
|
-
curr_node.attribute("data-state-update").value == "no" then
|
|
30
|
-
next
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
ref_id = self.ref_node_uid(curr_state,curr_state_nodes.count - index)
|
|
34
|
-
ref_node_name = "[data-state-uid~=\'#{ref_id}\']"
|
|
35
|
-
ref_node = doc.css(ref_node_name)
|
|
36
|
-
|
|
37
|
-
next if ref_node == nil
|
|
38
|
-
|
|
39
|
-
#get index
|
|
40
|
-
idx = ref_node.attribute("data-state-uid").value.split(" ").find_index(ref_id)
|
|
41
|
-
|
|
42
|
-
ref_node_method = ref_node.attribute('data-state-insert-method').value.split(" ")[idx]
|
|
43
|
-
|
|
44
|
-
if ref_node_method == "insert"
|
|
45
|
-
js_text = Nice::Js::Caller.generate_js_insert_after curr_node, ref_node_name
|
|
46
|
-
else
|
|
47
|
-
js_text = Nice::Js::Caller.generate_js_insert_inside curr_node, ref_node_name
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# remove unuseful chars which will break the js parser
|
|
51
|
-
js_text = js_text.gsub(/(\r\n|\n|\r|\t|\s\s)/,'')
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
stack
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# generates referencing data attributes in all preceiding or parent nodes of
|
|
58
|
-
# state bound elements which are used later to insert elements correctly
|
|
59
|
-
# This method supports referencing by more than one state bounded node
|
|
60
|
-
def self.annotate_referencing_nodes doc
|
|
61
|
-
|
|
62
|
-
per_state_counter = {}
|
|
63
|
-
doc.css("[data-state]").each do |curr_node|
|
|
64
|
-
|
|
65
|
-
# each node can have multiple state references which need to be
|
|
66
|
-
# treated separately
|
|
67
|
-
states = curr_node.attribute("data-state").value.split(" ")
|
|
68
|
-
|
|
69
|
-
states.each do |state|
|
|
70
|
-
# increase counter per state
|
|
71
|
-
per_state_counter[state] ||= 0
|
|
72
|
-
idx = per_state_counter[state] += 1
|
|
73
|
-
|
|
74
|
-
# try using preceding element if one exists otherwise use parent.
|
|
75
|
-
# the referencing node must not be an state bound element otherwise
|
|
76
|
-
# we can not be sure the element is always present.
|
|
77
|
-
prev_node = curr_node.previous_element
|
|
78
|
-
|
|
79
|
-
while prev_node && prev_node.has_attribute?("data-state")
|
|
80
|
-
prev_node = prev_node.previous_element
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
if prev_node && !prev_node.has_attribute?("data-state")
|
|
84
|
-
node = prev_node
|
|
85
|
-
method = "insert"
|
|
86
|
-
else
|
|
87
|
-
par_node = curr_node.parent
|
|
88
|
-
|
|
89
|
-
while par_node && par_node.has_attribute?("data-state")
|
|
90
|
-
par_node = par_node.parent
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
if par_node && !par_node.has_attribute?("data-state")
|
|
94
|
-
node = curr_node.parent
|
|
95
|
-
method = "append"
|
|
96
|
-
else
|
|
97
|
-
raise "No reference could be created for node #{curr_node}. Make sure this node \
|
|
98
|
-
is preceeded or sourrounded at least by one non state bound element."
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
next if node == nil
|
|
104
|
-
|
|
105
|
-
# add reference to the found element
|
|
106
|
-
a = node.has_attribute?('data-state-uid') ? [node.attribute('data-state-uid').value] : []
|
|
107
|
-
a += [self.ref_node_uid(state,idx)]
|
|
108
|
-
node['data-state-uid'] = a.join(" ")
|
|
109
|
-
|
|
110
|
-
m = node.has_attribute?('data-state-insert-method') ? [node.attribute('data-state-insert-method').value] : []
|
|
111
|
-
m += [method]
|
|
112
|
-
node['data-state-insert-method'] = m.join(" ")
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
doc
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def self.add_top_css doc, current_state
|
|
120
|
-
doc.css("body").add_class("state-#{current_state}")
|
|
121
|
-
doc
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def self.add_root_content doc
|
|
125
|
-
if doc.css("[data-state-root]").length == 0
|
|
126
|
-
raise "You must add add a data-state-root in your application.html to your main container"
|
|
127
|
-
else
|
|
128
|
-
ref_node_name = "[data-state-root]"
|
|
129
|
-
js = []
|
|
130
|
-
doc.css("*[data-state-root]").each do |curr_node|
|
|
131
|
-
js << Nice::Js::Caller.replace_node(curr_node, ref_node_name).gsub(/(\r\n|\n|\r|\t|\s\s)/,'')
|
|
132
|
-
end
|
|
133
|
-
js
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
private
|
|
138
|
-
|
|
139
|
-
def self.ref_node_uid node_uid, num
|
|
140
|
-
"#{node_uid}_ref_#{num}"
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
end
|
|
144
|
-
end
|
data/lib/nice/js/caller.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
module Nice
|
|
2
|
-
module Js
|
|
3
|
-
class Caller
|
|
4
|
-
|
|
5
|
-
# DOM Manipulation
|
|
6
|
-
def self.generate_js_insert_after new_node, reference_node_ref
|
|
7
|
-
"NiceEventDispatcher.dispatch_event(\'nice.dom.InsertAfterEvent\',{new_node:\'#{new_node}\', ref_node:\"#{reference_node_ref}\"});"
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.generate_js_insert_inside new_node, reference_node_ref
|
|
11
|
-
"NiceEventDispatcher.dispatch_event(\'nice.dom.InsertInsideEvent\',{new_node:\'#{new_node}\', ref_node:\"#{reference_node_ref}\"});"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def self.replace_node new_node, reference_node_ref
|
|
15
|
-
"NiceEventDispatcher.dispatch_event(\'nice.dom.ReplaceEvent\',{new_node:\'#{new_node}\', ref_node:\"#{reference_node_ref}\"});"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.generate_js_remove curr_state
|
|
19
|
-
"NiceEventDispatcher.dispatch_event(\'nice.dom.RemoveStateEvent\',{curr_state:\'#{curr_state}\'});"
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def self.clean_root_tree
|
|
23
|
-
"NiceEventDispatcher.dispatch_event(\'nice.dom.CleanRootEvent\',{});"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# History Manipulation
|
|
28
|
-
def self.move_to_url url, title
|
|
29
|
-
"NiceEventDispatcher.dispatch_event(\'nice.hist.ChangeURLEvent\',{url:\'#{url}\', title:\'#{title}\'});"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def self.insert_or_update_back_listener url
|
|
33
|
-
"NiceEventDispatcher.dispatch_event(\'nice.hist.PopHistoryEvent\',{url:\'#{url}\'});"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# events for UI
|
|
37
|
-
def self.state_did_change prev_state, new_state
|
|
38
|
-
"NiceEventDispatcher.dispatch_event(\'nice.ui.StateDidChangeEvent\',{prev_state:\'#{prev_state}\', new_state:\"#{new_state}\"});"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Change Body Css Class to reflect current state
|
|
42
|
-
def self.change_top_css new_state_name
|
|
43
|
-
"NiceEventDispatcher.dispatch_event(\'nice.dom.ChangeTopCssEvent\',{new_state_name:\'#{new_state_name}\'});"
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|