chr 0.2.8 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/Gruntfile.coffee +33 -27
  3. data/README.md +6 -1
  4. data/app/assets/javascripts/chr.coffee +18 -16
  5. data/app/assets/javascripts/chr/core/chr.coffee +41 -76
  6. data/app/assets/javascripts/chr/core/chr_router.coffee +141 -0
  7. data/app/assets/javascripts/chr/core/item.coffee +36 -49
  8. data/app/assets/javascripts/chr/core/list.coffee +26 -71
  9. data/app/assets/javascripts/chr/core/list_config.coffee +28 -13
  10. data/app/assets/javascripts/chr/core/list_pagination.coffee +56 -13
  11. data/app/assets/javascripts/chr/core/list_reorder.coffee +2 -2
  12. data/app/assets/javascripts/chr/core/list_search.coffee +2 -2
  13. data/app/assets/javascripts/chr/core/module.coffee +24 -93
  14. data/app/assets/javascripts/chr/core/utils.coffee +4 -0
  15. data/app/assets/javascripts/chr/core/view.coffee +123 -43
  16. data/app/assets/javascripts/chr/core/view_local-storage.coffee +58 -0
  17. data/app/assets/javascripts/chr/store/{_array-store.coffee → array-store.coffee} +3 -1
  18. data/app/assets/javascripts/chr/store/{_object-store.coffee → object-store.coffee} +0 -0
  19. data/app/assets/javascripts/chr/store/rails-array-store.coffee +39 -0
  20. data/app/assets/javascripts/chr/store/{mongosteen-object-store.coffee → rails-form-object-parser.coffee} +11 -20
  21. data/app/assets/javascripts/chr/store/rails-object-store.coffee +35 -0
  22. data/app/assets/javascripts/chr/store/rest-array-store.coffee +3 -5
  23. data/app/assets/javascripts/chr/store/rest-object-store.coffee +1 -1
  24. data/app/assets/javascripts/form/expandable-group.coffee +30 -0
  25. data/app/assets/javascripts/{chr/form → form}/form.coffee +3 -1
  26. data/app/assets/javascripts/{chr/form → form}/input-checkbox.coffee +1 -1
  27. data/app/assets/javascripts/{chr/form → form}/input-color.coffee +2 -0
  28. data/app/assets/javascripts/{chr/form → form}/input-date.coffee +0 -0
  29. data/app/assets/javascripts/{chr/form → form}/input-file.coffee +28 -1
  30. data/app/assets/javascripts/{chr/form → form}/input-form.coffee +14 -5
  31. data/app/assets/javascripts/{chr/form → form}/input-form_reorder.coffee +0 -0
  32. data/app/assets/javascripts/{chr/form → form}/input-hidden.coffee +9 -9
  33. data/app/assets/javascripts/{chr/form → form}/input-list.coffee +61 -53
  34. data/app/assets/javascripts/{chr/form → form}/input-list_reorder.coffee +2 -0
  35. data/app/assets/javascripts/form/input-list_typeahead.coffee +55 -0
  36. data/app/assets/javascripts/{chr/form → form}/input-password.coffee +1 -0
  37. data/app/assets/javascripts/{chr/form → form}/input-select.coffee +10 -11
  38. data/app/assets/javascripts/form/input-select2.coffee +33 -0
  39. data/app/assets/javascripts/{chr/form → form}/input-string.coffee +45 -2
  40. data/app/assets/javascripts/{chr/form → form}/input-text.coffee +6 -3
  41. data/app/assets/javascripts/input-html.coffee +8 -5
  42. data/app/assets/javascripts/input-markdown.coffee +10 -5
  43. data/app/assets/javascripts/input-redactor.coffee +1 -61
  44. data/app/assets/javascripts/redactor/input-redactor.coffee +53 -0
  45. data/app/assets/javascripts/redactor/input-redactor_character.coffee +83 -0
  46. data/app/assets/javascripts/redactor/input-redactor_images.coffee +166 -0
  47. data/app/assets/javascripts/{chr/vendor → vendor}/ace.js +0 -0
  48. data/app/assets/javascripts/{chr/vendor → vendor}/jquery.scrollparent.js +0 -0
  49. data/app/assets/javascripts/{chr/vendor → vendor}/jquery.textarea_autosize.js +0 -0
  50. data/app/assets/javascripts/{chr/vendor → vendor}/jquery.typeahead.js +0 -0
  51. data/app/assets/javascripts/{chr/vendor → vendor}/marked.js +0 -0
  52. data/app/assets/javascripts/{chr/vendor → vendor}/mode-html.js +0 -0
  53. data/app/assets/javascripts/{chr/vendor → vendor}/mode-markdown.js +0 -0
  54. data/app/assets/javascripts/{chr/vendor → vendor}/redactor.fixedtoolbar.js +1 -1
  55. data/app/assets/javascripts/vendor/select2.js +5274 -0
  56. data/app/assets/javascripts/{chr/vendor → vendor}/slip.js +0 -0
  57. data/app/assets/stylesheets/_chr.scss +11 -13
  58. data/app/assets/stylesheets/_input-redactor.scss +17 -16
  59. data/app/assets/stylesheets/{core → chr}/_icons.scss +1 -1
  60. data/app/assets/stylesheets/chr/_main.scss +110 -0
  61. data/app/assets/stylesheets/{core → chr}/_mixins.scss +58 -34
  62. data/app/assets/stylesheets/{core → chr}/_settings.scss +7 -1
  63. data/app/assets/stylesheets/form/_expandable-group.scss +16 -0
  64. data/app/assets/stylesheets/form/_input-select2.scss +94 -0
  65. data/app/assets/stylesheets/form/_main.scss +180 -0
  66. data/app/assets/stylesheets/vendor/select2.css +258 -0
  67. data/bower.json +2 -2
  68. data/dist/chr.js +2292 -2030
  69. data/dist/input-ace.js +18 -8
  70. data/dist/input-redactor.js +0 -156
  71. data/docs/bootstrap.md +1 -1
  72. data/docs/rails.md +10 -10
  73. data/lib/chr.rb +1 -8
  74. data/lib/chr/version.rb +1 -1
  75. data/lib/mongoid/character.rb +30 -0
  76. data/package.json +1 -1
  77. metadata +49 -43
  78. data/app/assets/javascripts/chr/store/mongosteen-array-store.coffee +0 -55
  79. data/app/assets/stylesheets/core/_list.scss +0 -39
  80. data/app/assets/stylesheets/core/_main.scss +0 -49
  81. data/app/assets/stylesheets/core/_responsive.scss +0 -62
  82. data/app/assets/stylesheets/form/_form.scss +0 -41
  83. data/app/assets/stylesheets/form/_input-checkbox.scss +0 -18
  84. data/app/assets/stylesheets/form/_input-color.scss +0 -10
  85. data/app/assets/stylesheets/form/_input-file.scss +0 -29
  86. data/app/assets/stylesheets/form/_input-form.scss +0 -26
  87. data/app/assets/stylesheets/form/_input-list.scss +0 -36
  88. data/app/assets/stylesheets/form/_input-string.scss +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7fceeef7d448d2cdc5eb8b0d8b83b41f9e3286eb
4
- data.tar.gz: e7ca6fddaae45df4c2d0e53ee1bd288975d8aa6c
3
+ metadata.gz: 7f826f08992b4b9540353bcbbba91f9065e0de72
4
+ data.tar.gz: a63be1339e56a9672be6dd74e1e4a8c527827bde
5
5
  SHA512:
6
- metadata.gz: 6c18ab1dafebd9e6321c6d44734b11af06d2b2e42a46a0191c5b6c64b1043633e7621d8224dd75d6c6b543cb181ea456183c7940386a47baff602c93ab626e86
7
- data.tar.gz: d568e55272035adadfa181cc463ba89399822a07b8969c1af63e482106a93b096993dd247cf7c59ca8ab5662e61b11ae3c732efa33c6958d6f62eee35d57167d
6
+ metadata.gz: b3213804478267d46391d85bacfa7adb5070a67667b0c1310004480f44a9793903f9634f0b61c8ac7e603fc400b32359d7aa4ee269ac72a1ccd026501b7b3344
7
+ data.tar.gz: 5308776a2b5f5b5b76385a14ca232786b8555cff71419ee3f7d267b35089bc857591f04647c061aee2e4d362f82bac665ece115f4726bb9fd90dcfefa180448c
@@ -10,6 +10,7 @@ module.exports = (grunt) ->
10
10
  'build/chr.js': [
11
11
  # core
12
12
  'app/assets/javascripts/chr/core/utils.coffee'
13
+ 'app/assets/javascripts/chr/core/chr_router.coffee'
13
14
  'app/assets/javascripts/chr/core/chr.coffee'
14
15
  'app/assets/javascripts/chr/core/module.coffee'
15
16
  'app/assets/javascripts/chr/core/list_config.coffee'
@@ -18,29 +19,34 @@ module.exports = (grunt) ->
18
19
  'app/assets/javascripts/chr/core/list_search.coffee'
19
20
  'app/assets/javascripts/chr/core/list.coffee'
20
21
  'app/assets/javascripts/chr/core/item.coffee'
22
+ 'app/assets/javascripts/chr/core/view_local-storage.coffee'
21
23
  'app/assets/javascripts/chr/core/view.coffee'
22
- # form
23
- 'app/assets/javascripts/chr/form/form.coffee'
24
- 'app/assets/javascripts/chr/form/input-form_reorder.coffee'
25
- 'app/assets/javascripts/chr/form/input-form.coffee'
26
- 'app/assets/javascripts/chr/form/input-string.coffee'
27
- 'app/assets/javascripts/chr/form/input-hidden.coffee'
28
- 'app/assets/javascripts/chr/form/input-checkbox.coffee'
29
- 'app/assets/javascripts/chr/form/input-color.coffee'
30
- 'app/assets/javascripts/chr/form/input-date.coffee'
31
- 'app/assets/javascripts/chr/form/input-file.coffee'
32
- 'app/assets/javascripts/chr/form/input-list_reorder.coffee'
33
- 'app/assets/javascripts/chr/form/input-list.coffee'
34
- 'app/assets/javascripts/chr/form/input-password.coffee'
35
- 'app/assets/javascripts/chr/form/input-select.coffee'
36
- 'app/assets/javascripts/chr/form/input-text.coffee'
37
24
  # stores
38
- 'app/assets/javascripts/chr/store/_array-store.coffee'
39
- 'app/assets/javascripts/chr/store/_object-store.coffee'
25
+ 'app/assets/javascripts/chr/store/array-store.coffee'
26
+ 'app/assets/javascripts/chr/store/object-store.coffee'
40
27
  'app/assets/javascripts/chr/store/rest-array-store.coffee'
41
28
  'app/assets/javascripts/chr/store/rest-object-store.coffee'
42
- 'app/assets/javascripts/chr/store/mongosteen-array-store.coffee'
43
- 'app/assets/javascripts/chr/store/mongosteen-object-store.coffee'
29
+ 'app/assets/javascripts/chr/store/rails-form-object-parser.coffee'
30
+ 'app/assets/javascripts/chr/store/rails-array-store.coffee'
31
+ 'app/assets/javascripts/chr/store/rails-object-store.coffee'
32
+ # form
33
+ 'app/assets/javascripts/form/form.coffee'
34
+ 'app/assets/javascripts/form/input-form_reorder.coffee'
35
+ 'app/assets/javascripts/form/input-form.coffee'
36
+ 'app/assets/javascripts/form/input-string.coffee'
37
+ 'app/assets/javascripts/form/input-hidden.coffee'
38
+ 'app/assets/javascripts/form/input-checkbox.coffee'
39
+ 'app/assets/javascripts/form/input-color.coffee'
40
+ 'app/assets/javascripts/form/input-date.coffee'
41
+ 'app/assets/javascripts/form/input-file.coffee'
42
+ 'app/assets/javascripts/form/input-list_typeahead.coffee'
43
+ 'app/assets/javascripts/form/input-list_reorder.coffee'
44
+ 'app/assets/javascripts/form/input-list.coffee'
45
+ 'app/assets/javascripts/form/input-password.coffee'
46
+ 'app/assets/javascripts/form/input-select.coffee'
47
+ 'app/assets/javascripts/form/input-text.coffee'
48
+ 'app/assets/javascripts/form/input-select2.coffee'
49
+ 'app/assets/javascripts/form/extendable-group.coffee'
44
50
  ]
45
51
 
46
52
  'build/input-ace.js': [
@@ -55,20 +61,20 @@ module.exports = (grunt) ->
55
61
  concat:
56
62
  chr:
57
63
  src: [
58
- 'app/assets/javascripts/chr/vendor/slip.js'
59
- 'app/assets/javascripts/chr/vendor/jquery.scrollparent.js'
60
- 'app/assets/javascripts/chr/vendor/jquery.textarea_autosize.js'
61
- 'app/assets/javascripts/chr/vendor/jquery.typeahead.js'
64
+ 'app/assets/javascripts/vendor/slip.js'
65
+ 'app/assets/javascripts/vendor/jquery.scrollparent.js'
66
+ 'app/assets/javascripts/vendor/jquery.textarea_autosize.js'
67
+ 'app/assets/javascripts/vendor/jquery.typeahead.js'
62
68
  'build/chr.js'
63
69
  ]
64
70
  dest: 'dist/chr.js'
65
71
 
66
72
  ace:
67
73
  src: [
68
- 'app/assets/javascripts/chr/vendor/ace.js'
69
- 'app/assets/javascripts/chr/vendor/mode-html.js'
70
- 'app/assets/javascripts/chr/vendor/mode-markdown.js'
71
- 'app/assets/javascripts/chr/vendor/marked.js'
74
+ 'app/assets/javascripts/vendor/ace.js'
75
+ 'app/assets/javascripts/vendor/mode-html.js'
76
+ 'app/assets/javascripts/vendor/mode-markdown.js'
77
+ 'app/assets/javascripts/vendor/marked.js'
72
78
  'build/input-ace.js'
73
79
  ]
74
80
  dest: 'dist/input-ace.js'
data/README.md CHANGED
@@ -39,12 +39,17 @@ Styles setup:
39
39
 
40
40
  ## Documentation
41
41
 
42
- * [Start with Rails](docs/rails.md)
42
+ * [Rails Setup](docs/rails.md)
43
43
  * [Bootstrap Data](docs/bootstrap.md)
44
44
 
45
45
  More documentation and samples comming soon...
46
46
 
47
47
 
48
+ ## Notes
49
+
50
+ 1. Consider replace ```slip.js``` with [sortable.js](https://github.com/RubaXa/Sortable)
51
+
52
+
48
53
  ## Character family:
49
54
 
50
55
  - [Character](https://github.com/slate-studio/chr): Powerful responsive javascript CMS for apps
@@ -6,21 +6,23 @@
6
6
  #= require ./chr/core/item
7
7
  #= require ./chr/core/view
8
8
 
9
- #= require ./chr/form/form
10
- #= require ./chr/form/input-form
11
- #= require ./chr/form/input-hidden
12
- #= require ./chr/form/input-string
13
- #= require ./chr/form/input-text
14
- #= require ./chr/form/input-checkbox
15
- #= require ./chr/form/input-password
16
- #= require ./chr/form/input-color
17
- #= require ./chr/form/input-file
18
- #= require ./chr/form/input-list
19
- #= require ./chr/form/input-select
20
-
21
- #= require ./chr/store/_object-store
22
- #= require ./chr/store/_array-store
9
+ #= require ./chr/store/object-store
10
+ #= require ./chr/store/array-store
23
11
  #= require ./chr/store/rest-object-store
24
12
  #= require ./chr/store/rest-array-store
25
- #= require ./chr/store/mongosteen-object-store
26
- #= require ./chr/store/mongosteen-array-store
13
+ #= require ./chr/store/rails-object-store
14
+ #= require ./chr/store/rails-array-store
15
+
16
+ #= require ./form/form
17
+ #= require ./form/input-form
18
+ #= require ./form/input-hidden
19
+ #= require ./form/input-string
20
+ #= require ./form/input-text
21
+ #= require ./form/input-checkbox
22
+ #= require ./form/input-password
23
+ #= require ./form/input-color
24
+ #= require ./form/input-file
25
+ #= require ./form/input-list
26
+ #= require ./form/input-select
27
+ #= require ./form/input-select2
28
+ #= require ./form/expandable-group
@@ -9,19 +9,21 @@
9
9
  # -----------------------------------------------------------------------------
10
10
  # CHARACTER
11
11
  # -----------------------------------------------------------------------------
12
+ #
12
13
  # Public attributes:
13
14
  # modules
14
15
  # formInputs
15
16
  # itemsPerPageRequest
16
17
  #
17
18
  # Public methods:
18
- # start(@config) - start the character app with configuration
19
- # addMenuItem(moduleName, title) - add item to main menu
20
- # showAlert(message) - show alert notification
21
- # showError(message) - show error message
22
- # isMobile() - check if running on mobile
23
- # unsetActiveListItems() - clear selection from all list items
24
- # updateHash(hash, skipHashChange=false)
19
+ # start(@config) - start the character app with configuration
20
+ # updateHash(hash, skipRoute) - change window location hash
21
+ # isMobile() - check if running on mobile
22
+ # showAlert(message) - show alert notification
23
+ # showError(message) - show error message
24
+ #
25
+ # Dependencies:
26
+ #= require ./chr_router
25
27
  #
26
28
  # -----------------------------------------------------------------------------
27
29
  class @Chr
@@ -34,8 +36,9 @@ class @Chr
34
36
 
35
37
  # PRIVATE ===============================================
36
38
 
37
- _unset_active_menu_items: ->
39
+ _unset_active_items: ->
38
40
  $('.sidebar .menu a.active').removeClass('active')
41
+ $('.list .items .item.active').removeClass('active')
39
42
 
40
43
 
41
44
  _set_active_menu_item: ->
@@ -46,54 +49,41 @@ class @Chr
46
49
  return $(a).addClass('active')
47
50
 
48
51
 
49
- _navigate: (path) -> #/<module>[/<list>][/new]OR[/view/<objectId>]
50
- crumbs = path.split('/')
52
+ _add_menu_item: (moduleName, title) ->
53
+ @$mainMenu.append "<a href='#/#{ moduleName }' class='menu-#{ moduleName }'>#{ title }</a>"
51
54
 
52
- # if module changed, hide previous module
53
- if @module != @modules[crumbs[1]]
54
- @module?.hide()
55
55
 
56
- @module = @modules[crumbs[1]] # module name on position 1
56
+ _bind_hashchange: ->
57
+ @skipRoute = false
57
58
 
58
- if @module
59
- @module.show()
59
+ window.onhashchange = =>
60
+ @_unset_active_items()
60
61
 
61
- config = @module.config
62
- crumbs = crumbs.splice(2) # remove #/<module> part
62
+ if ! @skipRoute then @_route()
63
+ @skipRoute = false
63
64
 
64
- if crumbs.length > 0
65
- for crumb in crumbs
66
- if crumb == 'new'
67
- return @module.showView(null, config, 'New')
65
+ $(this).trigger 'hashchange'
68
66
 
69
- if crumb == 'view'
70
- objectId = _last(crumbs)
71
- return @module.showViewByObjectId(objectId, config)
67
+ $(this).on 'hashchange', => @_set_active_menu_item()
72
68
 
73
- config = config.items[crumb]
74
69
 
75
- if config.objectStore
76
- return @module.showViewByObjectId('', config, crumb.titleize())
70
+ _on_start: ->
71
+ if location.hash != ''
72
+ @_route()
73
+ return $(this).trigger('hashchange')
77
74
 
78
- else
79
- @module.showNestedList(crumb)
80
- else
81
- @module.showRootList()
75
+ if ! @isMobile()
76
+ return @updateHash('#/' + Object.keys(@modules)[0])
82
77
 
83
78
 
84
79
  # PUBLIC ================================================
85
80
 
86
- unsetActiveListItems: ->
87
- $('.list .items .item.active').removeClass('active')
88
-
89
-
90
81
  isMobile: ->
91
82
  $(window).width() < 760
92
83
 
93
84
 
94
- updateHash: (hash, skipHashChange=false) ->
95
- window._skipHashchange = skipHashChange
96
- location.hash = hash
85
+ updateHash: (path, @skipRoute=false) ->
86
+ window.location.hash = path
97
87
 
98
88
 
99
89
  start: (@config) ->
@@ -101,43 +91,15 @@ class @Chr
101
91
  @$navBar =$ "<nav class='sidebar'>"
102
92
  @$mainMenu =$ "<div class='menu'>"
103
93
 
104
- @$navBar.append @$mainMenu
105
- @$el.append @$navBar
106
-
107
- @modules[name] = new Module(this, name, config) for name, config of @config.modules
108
-
109
- $(this).on 'hashchange', => @_set_active_menu_item()
110
-
111
- window.onhashchange = =>
112
- @_unset_active_menu_items()
113
- @unsetActiveListItems()
114
-
115
- # this allows to skip chr _navigate method for silent hashchanges,
116
- # e.g. close view event
117
- if not window._skipHashchange then @_navigate(location.hash)
118
- window._skipHashchange = false
94
+ @$navBar.append(@$mainMenu)
95
+ @$el.append(@$navBar)
119
96
 
120
- # triggers hashchange event which is used for navigation
121
- # related code, e.g. list active item selection
122
- $(this).trigger 'hashchange'
97
+ for name, config of @config.modules
98
+ @modules[name] = new Module(this, name, config)
99
+ @_add_menu_item(name, @modules[name].menuTitle)
123
100
 
124
- # use class 'silent' for <a> when need to skip onhashchange event
125
- $(document).on 'click', 'a.silent', (e) -> window._skipHashchange = true
126
-
127
- # if not mobile navigate on first page load or page refresh
128
- window._skipHashchange = false
129
-
130
- # if hash is not empty go to module
131
- if location.hash != ''
132
- @_navigate(location.hash)
133
- $(this).trigger('hashchange')
134
- else if ! @isMobile()
135
- # if on desktop/tablet while hash is empty go to first module in the list
136
- location.hash = '#/' + Object.keys(@modules)[0]
137
-
138
-
139
- addMenuItem: (moduleName, title) ->
140
- @$mainMenu.append "<a href='#/#{ moduleName }'>#{ title }</a>"
101
+ @_bind_hashchange()
102
+ @_on_start()
141
103
 
142
104
 
143
105
  showAlert: (message) ->
@@ -148,9 +110,12 @@ class @Chr
148
110
  alert 'Error: ' + message
149
111
 
150
112
 
151
- # -----------------------------------------------------------------------------
113
+ include(Chr, chrRouter)
114
+
115
+
116
+ # ---------------------------------------------------------
152
117
  # Initialize `chr` object in global scope
153
- # -----------------------------------------------------------------------------
118
+ # ---------------------------------------------------------
154
119
  window.chr = new Chr()
155
120
 
156
121
 
@@ -0,0 +1,141 @@
1
+ # -----------------------------------------------------------------------------
2
+ # Author: Alexander Kravets <alex@slatestudio.com>,
3
+ # Slate Studio (http://www.slatestudio.com)
4
+ #
5
+ # Coding Guide:
6
+ # https://github.com/thoughtbot/guides/tree/master/style/coffeescript
7
+ # -----------------------------------------------------------------------------
8
+
9
+ # -----------------------------------------------------------------------------
10
+ # CHARACTER ROUTER
11
+ # -----------------------------------------------------------------------------
12
+
13
+ @chrRouter =
14
+
15
+ # PRIVATE ===============================================
16
+
17
+ # format: #/<module>[/<list>]+[/new]OR[/view/<objectId>]
18
+ _parse_path: ->
19
+ params =
20
+ path: location.hash
21
+ module: null
22
+ backToMenu: false
23
+ moduleHasChanged: false
24
+ nestedListNames: []
25
+ lastNestedListName: null
26
+ showView: false
27
+ objectId: null
28
+ showNestedView: false
29
+
30
+ crumbs = params.path.split('/')
31
+ module = @modules[crumbs[1]]
32
+ params.module = module
33
+ params.backToMenu = if module then false else true
34
+ params.moduleHasChanged = ( @module != module )
35
+
36
+ crumbs = crumbs.splice(2)
37
+ for crumb in crumbs
38
+ if crumb == 'new'
39
+ return $.extend(params, { showView: true })
40
+
41
+ if crumb == 'view'
42
+ return $.extend(params, { showView: true, objectId: _last(crumbs) })
43
+
44
+ params.lastNestedListName = crumb
45
+ params.nestedListNames.push(crumb)
46
+
47
+ # check if last list name is a name for nested view
48
+ if params.lastNestedListName
49
+ lastList = module.nestedLists[params.lastNestedListName]
50
+ if ! lastList
51
+ nestedViewName = params.nestedListNames.pop()
52
+ params.lastNestedListName = _last(params.nestedListNames)
53
+
54
+ parentList = module.nestedLists[params.lastNestedListName]
55
+ parentList ?= module.rootList
56
+
57
+ params.showNestedView = true
58
+ params.showView = true
59
+ params.objectId = ''
60
+ params.config = parentList.config.items[nestedViewName]
61
+
62
+ return params
63
+
64
+
65
+ _route: ->
66
+ params = @_parse_path()
67
+
68
+ if params.backToMenu
69
+ if @module
70
+ @module.activeList.scrollCache = 0
71
+ @module.hide()
72
+ @module = null
73
+ return
74
+
75
+ if params.moduleHasChanged
76
+ @module?.hide()
77
+ @module = params.module
78
+
79
+ # show module, root list becomes active
80
+ @module.show()
81
+ @module.activeList.updateItems()
82
+
83
+ # show nested lists
84
+ for listName in params.nestedListNames
85
+ @module.showList(listName)
86
+ @module.activeList.updateItems()
87
+
88
+ else
89
+ @module.destroyView()
90
+
91
+ for name, list of @module.nestedLists
92
+ # hide all lists not in the path and flush scroll cache for them
93
+ if params.path.indexOf(list.path) != 0
94
+ list.scrollCache = 0
95
+ list.hide()
96
+
97
+ update_active_list_items = true
98
+
99
+ # show view
100
+ if params.showView
101
+ update_active_list_items = false
102
+
103
+ # close view
104
+ if @module.activeList.path == params.path
105
+ update_active_list_items = false
106
+
107
+ # back to parent
108
+ if @module.activeList.path.indexOf(params.path) == 0
109
+ update_active_list_items = false
110
+
111
+ @module.showList(params.lastNestedListName)
112
+
113
+ if update_active_list_items
114
+ @module.activeList.updateItems()
115
+
116
+
117
+ params.config ?= @module.activeList.config
118
+
119
+ # show view
120
+ if params.showView
121
+ @module.showView(params.objectId, params.config)
122
+
123
+ @mobileListLock(params.showView)
124
+
125
+
126
+ # PUBLIC ================================================
127
+
128
+ mobileListLock: (showView) ->
129
+ if chr.isMobile()
130
+ @module.rootList.$el.addClass('scroll-lock')
131
+
132
+ for name, list of @module.nestedLists
133
+ list.$el.addClass('scroll-lock')
134
+
135
+ if ! showView
136
+ @module.activeList.$el.removeClass('scroll-lock')
137
+ $(window).scrollTop( @module.activeList.scrollCache ? 0)
138
+
139
+
140
+
141
+