luca 0.9.89 → 0.9.91

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.
Files changed (186) hide show
  1. data/CHANGELOG +11 -1
  2. data/Gemfile +5 -2
  3. data/Gemfile.lock +84 -56
  4. data/Rakefile +10 -2
  5. data/app/assets/javascripts/luca/components/application.coffee +82 -89
  6. data/app/assets/javascripts/luca/components/collection_view.coffee +9 -5
  7. data/app/assets/javascripts/luca/components/controller.coffee +72 -11
  8. data/app/assets/javascripts/luca/components/fields/base.coffee +61 -8
  9. data/app/assets/javascripts/luca/components/fields/button_field.coffee +53 -7
  10. data/app/assets/javascripts/luca/components/fields/checkbox_array.coffee +12 -7
  11. data/app/assets/javascripts/luca/components/fields/text_field.coffee +1 -1
  12. data/app/assets/javascripts/luca/components/form_view.coffee +2 -2
  13. data/app/assets/javascripts/luca/components/grid_layout_view.coffee +0 -1
  14. data/app/assets/javascripts/luca/components/page.coffee +1 -0
  15. data/app/assets/javascripts/luca/components/table_view.coffee +2 -2
  16. data/app/assets/javascripts/luca/concerns/dom_helpers.coffee +2 -2
  17. data/app/assets/javascripts/luca/containers/card_view.coffee +84 -54
  18. data/app/assets/javascripts/luca/containers/container.coffee +126 -46
  19. data/app/assets/javascripts/luca/containers/modal_view.coffee +9 -9
  20. data/app/assets/javascripts/luca/containers/page_controller.coffee +25 -0
  21. data/app/assets/javascripts/luca/containers/panel_toolbar.coffee +1 -1
  22. data/app/assets/javascripts/luca/containers/viewport.coffee +2 -5
  23. data/app/assets/javascripts/luca/core/collection.coffee +18 -4
  24. data/app/assets/javascripts/luca/core/model.coffee +1 -1
  25. data/app/assets/javascripts/luca/core/panel.coffee +1 -1
  26. data/app/assets/javascripts/luca/core/view.coffee +26 -7
  27. data/app/assets/javascripts/luca/development/code_sync_manager.coffee +51 -4
  28. data/app/assets/javascripts/luca/development/console.coffee +1 -1
  29. data/app/assets/javascripts/luca/framework.coffee +1 -1
  30. data/app/assets/javascripts/luca/index.coffee +1 -0
  31. data/app/assets/javascripts/luca/util/luca.coffee +2 -1
  32. data/app/assets/stylesheets/luca/components/viewport.scss +0 -4
  33. data/bin/luca +14 -0
  34. data/docs/framework.json +1 -1
  35. data/docs/luca-framework-documentation.js +1 -0
  36. data/lib/luca/cli/generate.rb +37 -0
  37. data/lib/luca/cli/server.rb +20 -0
  38. data/lib/luca/cli/sync.rb +40 -0
  39. data/lib/luca/cli/watch.rb +16 -0
  40. data/lib/luca/cli.rb +68 -0
  41. data/lib/luca/collection/endpoint.rb +1 -0
  42. data/lib/luca/component_definition.rb +23 -5
  43. data/lib/luca/luca_application.rb +18 -7
  44. data/lib/luca/rails/version.rb +1 -1
  45. data/lib/luca/server.rb +7 -0
  46. data/lib/luca/stylesheet.rb +2 -3
  47. data/lib/luca/version.rb +3 -0
  48. data/lib/luca/watcher.rb +72 -0
  49. data/lib/luca.rb +8 -1
  50. data/luca.gemspec +14 -7
  51. data/site/.bundle/config +2 -0
  52. data/site/.gitignore +5 -0
  53. data/site/.rvmrc +1 -0
  54. data/site/CHANGELOG.md +41 -0
  55. data/site/DOCS.md +41 -0
  56. data/site/Gemfile +8 -0
  57. data/site/Gemfile.lock +134 -0
  58. data/site/LICENSE.md +19 -0
  59. data/site/config.rb +84 -0
  60. data/site/helpers/site_helpers.rb +20 -0
  61. data/site/html5bp-docs/README.md +38 -0
  62. data/site/html5bp-docs/contribute.md +104 -0
  63. data/site/html5bp-docs/crossdomain.md +21 -0
  64. data/site/html5bp-docs/css.md +135 -0
  65. data/site/html5bp-docs/extend.md +507 -0
  66. data/site/html5bp-docs/faq.md +77 -0
  67. data/site/html5bp-docs/htaccess.md +323 -0
  68. data/site/html5bp-docs/html.md +170 -0
  69. data/site/html5bp-docs/js.md +31 -0
  70. data/site/html5bp-docs/misc.md +25 -0
  71. data/site/html5bp-docs/usage.md +109 -0
  72. data/site/readme.md +47 -0
  73. data/site/source/.htaccess +540 -0
  74. data/site/source/404.html +157 -0
  75. data/site/source/app/assets/javascripts/dependencies.js.coffee +6 -0
  76. data/site/source/app/assets/javascripts/docs/application.coffee +64 -0
  77. data/site/source/app/assets/javascripts/docs/collections/docs_documentation.coffee +17 -0
  78. data/site/source/app/assets/javascripts/docs/collections/github_repositories.coffee +7 -0
  79. data/site/source/app/assets/javascripts/docs/collections/index.coffee +1 -0
  80. data/site/source/app/assets/javascripts/docs/collections/luca_documentation.coffee +17 -0
  81. data/site/source/app/assets/javascripts/docs/collections/public_gists.coffee +4 -0
  82. data/site/source/app/assets/javascripts/docs/config.coffee +5 -0
  83. data/site/source/app/assets/javascripts/docs/index.coffee +12 -0
  84. data/site/source/app/assets/javascripts/docs/lib/router.coffee +3 -0
  85. data/site/source/app/assets/javascripts/docs/lib/util.coffee +0 -0
  86. data/site/source/app/assets/javascripts/docs/models/component.coffee +99 -0
  87. data/site/source/app/assets/javascripts/docs/models/github_repository.coffee +3 -0
  88. data/site/source/app/assets/javascripts/docs/models/index.coffee +1 -0
  89. data/site/source/app/assets/javascripts/docs/templates/component_documentation.jst.ejs +55 -0
  90. data/site/source/app/assets/javascripts/docs/templates/examples_browser/overview.jst.ejs +4 -0
  91. data/site/source/app/assets/javascripts/docs/templates/examples_browser/selector.jst.ejs +11 -0
  92. data/site/source/app/assets/javascripts/docs/templates/github_repository.jst.ejs +4 -0
  93. data/site/source/app/assets/javascripts/docs/templates/layouts/main.jst.ejs +4 -0
  94. data/site/source/app/assets/javascripts/docs/templates/left_navigation.jst.ejs +5 -0
  95. data/site/source/app/assets/javascripts/docs/templates/pages/getting_started.jst.ejs +78 -0
  96. data/site/source/app/assets/javascripts/docs/templates/pages/home.jst.ejs +57 -0
  97. data/site/source/app/assets/javascripts/docs/views/components/code_editor/index.coffee +0 -0
  98. data/site/source/app/assets/javascripts/docs/views/components/code_editor.coffee +45 -0
  99. data/site/source/app/assets/javascripts/docs/views/components/component_documentation.coffee +72 -0
  100. data/site/source/app/assets/javascripts/docs/views/index.coffee +3 -0
  101. data/site/source/app/assets/javascripts/docs/views/pages/browse_source/details.coffee +37 -0
  102. data/site/source/app/assets/javascripts/docs/views/pages/browse_source/list.coffee +31 -0
  103. data/site/source/app/assets/javascripts/docs/views/pages/browse_source.coffee +46 -0
  104. data/site/source/app/assets/javascripts/docs/views/pages/component_editor.coffee +10 -0
  105. data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/docs.coffee +12 -0
  106. data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/source.coffee +13 -0
  107. data/site/source/app/assets/javascripts/docs/views/pages/examples_browser.coffee +102 -0
  108. data/site/source/app/assets/javascripts/docs/views/pages/home.coffee +10 -0
  109. data/site/source/app/assets/javascripts/docs/views/views/api_browser/index.coffee +43 -0
  110. data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/grid_layout_view_example.coffee +14 -0
  111. data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/table_view_example.coffee +39 -0
  112. data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/basic_example.coffee +38 -0
  113. data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/complex_layout.coffee +110 -0
  114. data/site/source/app/assets/javascripts/docs/views/views/top_navigation.coffee +6 -0
  115. data/site/source/app/assets/javascripts/docs-docs.js +1 -0
  116. data/site/source/app/assets/javascripts/luca-docs.js +1 -0
  117. data/site/source/app/assets/javascripts/luca-framework-documentation.js +1 -0
  118. data/site/source/app/assets/javascripts/site.js.coffee +4 -0
  119. data/site/source/app/assets/javascripts/vendor/codemirror.js +4786 -0
  120. data/site/source/app/assets/javascripts/vendor/coffeescript.js +346 -0
  121. data/site/source/app/assets/javascripts/vendor/css.js +465 -0
  122. data/site/source/app/assets/javascripts/vendor/htmlmixed.js +84 -0
  123. data/site/source/app/assets/javascripts/vendor/javascript.js +422 -0
  124. data/site/source/app/assets/javascripts/vendor/js-beautify.js +1353 -0
  125. data/site/source/app/assets/javascripts/vendor/modernizr-2.6.1.min.js +4 -0
  126. data/site/source/app/assets/javascripts/vendor/vim.js +2511 -0
  127. data/site/source/app/assets/stylesheets/docs/api-browser.css.scss +5 -0
  128. data/site/source/app/assets/stylesheets/docs/application.css.scss +35 -0
  129. data/site/source/app/assets/stylesheets/docs/browse-source.css.scss +5 -0
  130. data/site/source/app/assets/stylesheets/docs/scrollable-table.css.scss +5 -0
  131. data/site/source/app/assets/stylesheets/site.css.scss +2 -0
  132. data/site/source/app/assets/stylesheets/vendor/codemirror.css +240 -0
  133. data/site/source/app/assets/stylesheets/vendor/prettify-tomorrow-night-bright.css +160 -0
  134. data/site/source/app/assets/stylesheets/vendor/twilight.css +26 -0
  135. data/site/source/crossdomain.xml +15 -0
  136. data/site/source/documentation.html.haml +1 -0
  137. data/site/source/favicon_base.png +0 -0
  138. data/site/source/humans.txt +15 -0
  139. data/site/source/images/background.png +0 -0
  140. data/site/source/images/middleman.png +0 -0
  141. data/site/source/index.html.haml +1 -0
  142. data/site/source/layouts/layout.haml +55 -0
  143. data/site/source/readme.md +63 -0
  144. data/site/source/robots.txt +3 -0
  145. data/spec/javascripts/components/collection_view_spec.coffee +1 -1
  146. data/spec/javascripts/containers/card_view_spec.coffee +58 -5
  147. data/spec/javascripts/core/collection_spec.coffee +1 -1
  148. data/spec/javascripts/core/view_spec.coffee +2 -2
  149. data/vendor/assets/javascripts/backbone-min.js +37 -33
  150. data/vendor/assets/javascripts/backbone-query.min.js +1 -1
  151. data/vendor/assets/javascripts/jquery.js +5 -4
  152. data/vendor/assets/javascripts/luca-dependencies.min.js +8 -6
  153. data/vendor/assets/javascripts/luca-development.min.js +1 -1
  154. data/vendor/assets/javascripts/luca.full.min.js +12 -10
  155. data/vendor/assets/javascripts/luca.min.js +5 -5
  156. data/vendor/assets/javascripts/underscore-min.js +1 -5
  157. data/vendor/assets/javascripts/underscore-string.min.js +1 -1
  158. data/vendor/assets/stylesheets/luca-components.css +0 -2
  159. data/vendor/assets/stylesheets/luca-development.css +1 -1
  160. metadata +215 -39
  161. data/app/assets/javascripts/luca/components/page_controller.coffee +0 -3
  162. data/app/assets/javascripts/luca/core/collection_view.coffee +0 -150
  163. data/site/assets/bootstrap.min.js +0 -7
  164. data/site/assets/dependencies.js +0 -94
  165. data/site/assets/glyphicons-halflings-white.png +0 -0
  166. data/site/assets/glyphicons-halflings.png +0 -0
  167. data/site/assets/luca-ui-bootstrap.css +0 -1331
  168. data/site/assets/luca-ui-bootstrap.js +0 -9
  169. data/site/assets/luca-ui-development-tools.css +0 -234
  170. data/site/assets/luca-ui-development-tools.js +0 -18561
  171. data/site/assets/luca-ui-development-tools.min.js +0 -15
  172. data/site/assets/luca-ui-full.min.js +0 -8
  173. data/site/assets/luca-ui.min.js +0 -4
  174. data/site/assets/sandbox.css +0 -62
  175. data/site/assets/sandbox.js +0 -469
  176. data/site/docs/application.html +0 -41
  177. data/site/docs/caching.html +0 -43
  178. data/site/docs/collection.html +0 -75
  179. data/site/docs/collection_manager.html +0 -71
  180. data/site/docs/containers.html +0 -118
  181. data/site/docs/events.html +0 -153
  182. data/site/docs/view.html +0 -128
  183. data/site/img/glyphicons-halflings-white.png +0 -0
  184. data/site/img/glyphicons-halflings.png +0 -0
  185. data/site/index.html +0 -20
  186. data/site/source-map.js +0 -1
@@ -0,0 +1,45 @@
1
+ view = Luca.register "Docs.views.CodeEditor"
2
+ view.extends "Luca.View"
3
+
4
+ view.privateConfiguration
5
+ tagName: "textarea"
6
+
7
+ view.publicConfiguration
8
+ # CodeMirror option. This will control which theme is applied
9
+ # to the editor. Make sure the CSS for this theme has been loaded.
10
+ theme: "twilight"
11
+
12
+ # How many spaces a block should be indented.
13
+ indentUnit: 2
14
+
15
+ # Whether to use the context-sensitive indentation that the mode provides
16
+ smartIndent: true
17
+
18
+ # Which language will we be editing? Support for coffeescript,
19
+ # html, javascript, css, sass, less come out of the box
20
+ mode: "coffeescript"
21
+
22
+ # which keymap to use? default, or vim
23
+ keyMap: "default"
24
+
25
+ # whether or not to wrap lines when they reach past the set limit
26
+ lineWrapping: false
27
+
28
+ view.privateConfiguration
29
+ codeMirrorOptions: {}
30
+ codeMirrorConfigKeys:[
31
+ "theme"
32
+ "indentUnit"
33
+ "smartIndent"
34
+ "mode"
35
+ "keyMap"
36
+ "lineWrapping"
37
+ ]
38
+
39
+ view.privateMethods
40
+ afterRender: ()->
41
+ defaults = _(@).pick( @codeMirrorConfigKeys... )
42
+ options = _(@codeMirrorOptions).defaults(defaults)
43
+ @codeMirror = window.CodeMirror.fromTextArea( @$el[0], options)
44
+
45
+ view.register()
@@ -0,0 +1,72 @@
1
+ view = Docs.register "Docs.views.ComponentDocumentation"
2
+ view.extends "Luca.View"
3
+
4
+ view.privateConfiguration
5
+ bodyTemplate: "component_documentation"
6
+
7
+ # If set to true, we will render the source code
8
+ # for the component in addition to all of the information
9
+ # about the methods and properties
10
+ displaySource: false
11
+
12
+ # If set to true, we will render the header documentation
13
+ # that is contained in the component
14
+ displayHeader: false
15
+
16
+ view.publicMethods
17
+ # Loads a component definition from the documentation objects that
18
+ # are generated by the Luca gem's Luca::LucaApplication#export tool.
19
+ # These objects are the result of parsing component definition files
20
+ # and determining the public and private properties and methods, and
21
+ # the documentation that is rendered from their comments.
22
+ loadComponent: (@component)->
23
+ @reset()
24
+
25
+ for section in ["private", "public"]
26
+ @renderMethodGroup(section)
27
+ @renderPropertyGroup(section)
28
+
29
+ @$('.source').hide()
30
+
31
+ if @displayHeader is true
32
+ @$('.header-documentation').show()
33
+ @$('.header-documentation').html( @component.get("header_documentation") )
34
+
35
+ if @displaySource is true
36
+ @$('.source').show()
37
+ @$('pre.source').html( @component.contentsWithoutHeader() )
38
+
39
+ @$('pre').addClass('prettyprint')
40
+
41
+ view.privateMethods
42
+ reset: ()->
43
+ @$('.table tbody').empty()
44
+ @$('.properties,.methods').hide()
45
+ @$('.header-documentation').hide()
46
+
47
+ renderMethodGroup: (group="public")->
48
+ source = @component?.documentation()?.details["#{ group }Methods"]
49
+ return if _.isEmpty(source)
50
+ prototype = Luca.util.resolve(@component.get("class_name"))?.prototype
51
+ list = @$(".methods.#{ group }").show().find('.table tbody')
52
+
53
+ for method, details of source when _.isFunction(prototype[method])
54
+ details ||= {}
55
+ arg_details = _( details.arguments ).reduce (memo,pair)->
56
+ memo += "#{ pair.argument }"
57
+ memo += "= #{ pair.value || 'undefined' }" if pair.value?
58
+ memo += "<br/>"
59
+ , ""
60
+ list.append "<tr><td>#{ method }</td><td>#{ arg_details }</td><td>#{ details.documentation || "" }</td></tr>"
61
+
62
+ renderPropertyGroup: (group="public")->
63
+ source = @component?.documentation()?.details["#{ group }Properties"]
64
+ return if _.isEmpty(source)
65
+ prototype = Luca.util.resolve(@component.get("class_name"))?.prototype
66
+ list = @$(".properties.#{ group }").show().find('.table tbody')
67
+
68
+ for method, details of source when not _.isFunction(prototype[method])
69
+ details ||= {}
70
+ list.append "<tr><td>#{ method }</td><td>#{ details.default || "" }</td><td>#{ details.documentation || "" }</td></tr>"
71
+
72
+ view.register()
@@ -0,0 +1,3 @@
1
+ #= require_tree ./components
2
+ #= require_tree ./views
3
+ #= require_tree ./pages
@@ -0,0 +1,37 @@
1
+ view = Docs.register "Docs.views.ComponentDetails"
2
+ view.extends "Luca.Container"
3
+
4
+ view.configuration
5
+ rowFluid: true
6
+
7
+ view.contains
8
+ role: "documentation"
9
+ span: 5
10
+ loadComponent: (model)->
11
+ @$el.empty()
12
+ @$el.append("<h2>#{ model.get('class_name') }</h2>")
13
+ @$el.append("<div class='header-documentation'>#{ model.get('header_documentation') }</div>")
14
+ ,
15
+ type: "component_documentation"
16
+ role: "details"
17
+ displaySource: true
18
+ span: 7
19
+
20
+ view.defines
21
+ afterRender: ()->
22
+ @getDetails().$el.hide()
23
+ @getDocumentation().$el.hide()
24
+
25
+ load: (model)->
26
+ @getDetails().$el.show()
27
+ @getDocumentation().$el.show()
28
+
29
+ @getDetails().loadComponent(model)
30
+ @getDocumentation().loadComponent(model)
31
+
32
+ @prettyPrint()
33
+
34
+ # Applies syntax highlighting to all pre elements
35
+ prettyPrint: ()->
36
+ @$('pre').addClass('prettyprint')
37
+ window.prettyPrint?()
@@ -0,0 +1,31 @@
1
+ view = Docs.register "Docs.views.ComponentList"
2
+ view.extends "Luca.components.ScrollableTable"
3
+ view.defines
4
+ paginatable: false
5
+ maxHeight: 200
6
+ collection: "luca_documentation"
7
+ columns:[
8
+ reader: "class_name"
9
+ width: "20%"
10
+ renderer: (name)->
11
+ "<a class='link'>#{ name }</a>"
12
+ ,
13
+ reader: "class_name"
14
+ header: "Extends From"
15
+ width: "20%"
16
+ renderer: (className)->
17
+ if component = Luca.util.resolve(className)
18
+ name = component.prototype.componentMetaData()?.meta["super class name"]
19
+ "<a class='link'>#{ name }</a>"
20
+ ,
21
+ reader: "type_alias"
22
+ header: "Shortcut"
23
+ width: "10%"
24
+ ,
25
+ reader: "defined_in_file"
26
+ header: "<i class='icon icon-github'/> Github"
27
+ renderer: (file)->
28
+ shortened = file.split("javascripts/luca/")[1]
29
+ "<a href='https://github.com/datapimp/luca/blob/master/app/assets/javascripts/luca/#{ shortened }'>#{ shortened }</a>"
30
+ ]
31
+
@@ -0,0 +1,46 @@
1
+ #= require_tree ./browse_source
2
+ #= require_self
3
+ view = Docs.register "Docs.views.BrowseSource"
4
+ view.extends "Luca.Container"
5
+
6
+ view.configuration
7
+ autoBindEventHandlers: true
8
+ events:
9
+ "click .docs-component-list a.link" : "selectComponent"
10
+
11
+ view.contains
12
+ component: "component_list"
13
+ ,
14
+ component: "component_details"
15
+
16
+ view.privateMethods
17
+
18
+ index: ()->
19
+ @selectComponent(@getComponentList().getCollection().at(0))
20
+
21
+ show: (componentName)->
22
+ component = @getComponentList().getCollection().detect (model)->
23
+ model.get("class_name") is componentName
24
+
25
+ return @index() unless component?
26
+
27
+ @selectComponent(component)
28
+
29
+ selectComponent: (e)->
30
+ list = @getComponentList()
31
+ details = @getComponentDetails()
32
+
33
+ if Luca.isBackboneModel(e)
34
+ model = e
35
+ index = list.getCollection().indexOf(model)
36
+ row = list.$("tr[data-index='#{ index }']")
37
+ else
38
+ $target = @$(e.target)
39
+ row = $target.parents('tr').eq(0)
40
+ index = row.data('index')
41
+ model = list.getCollection().at(index)
42
+
43
+ list.$('tr').removeClass('info')
44
+ row.addClass('info')
45
+ details.load(model)
46
+
@@ -0,0 +1,10 @@
1
+ view = Docs.register "Docs.views.ComponentEditor"
2
+ view.extends "Luca.Container"
3
+
4
+ view.contains
5
+ type: "code_editor"
6
+
7
+ view.defines
8
+ index: ()->
9
+ 1
10
+
@@ -0,0 +1,12 @@
1
+ view = Docs.register "Docs.views.ExampleDocs"
2
+ view.extends "Docs.views.ComponentDocumentation"
3
+ view.defines
4
+ collection: "docs_documentation"
5
+ displayHeader: true
6
+ beforeRender: ()->
7
+ component = @collection.detect (component)=>
8
+ component.get("type_alias") is @example
9
+
10
+ if component?
11
+ @loadComponent(component)
12
+
@@ -0,0 +1,13 @@
1
+ view = Docs.register "Docs.views.ExampleSource"
2
+ view.extends "Luca.View"
3
+ view.defines
4
+ tagName: "pre"
5
+ className: "prettyprint pre-scrollable"
6
+ collection: "docs_documentation"
7
+ beforeRender: ()->
8
+ component = @collection.detect (component)=>
9
+ component.get("type_alias") is @example
10
+
11
+ @$el.html( component.get("source_file_contents") )
12
+ window.prettyPrint()
13
+
@@ -0,0 +1,102 @@
1
+ #= require_tree ./examples_browser
2
+ #= require_self
3
+
4
+ page = Docs.register "Docs.views.ExamplesBrowser"
5
+ page.extends "Luca.containers.TabView"
6
+
7
+ page.contains
8
+ title: "API Browser"
9
+ type: "api_browser"
10
+ name: "api_browser"
11
+ ,
12
+ title: "Basic FormView"
13
+ type: "basic_form_view"
14
+ name: "basic_form_view"
15
+ ,
16
+ title: "Complex Layout FormView"
17
+ type: "complex_layout_form"
18
+ name: "complex_layout_form"
19
+ ,
20
+ title: "Scrollable Table"
21
+ type: "table_view_example"
22
+ name: "table_view_example"
23
+ ,
24
+ title: "Grid Layout CollectionView"
25
+ type: "grid_layout_view_example"
26
+ name: "grid_layout_view_example"
27
+
28
+ page.privateConfiguration
29
+ activeCard: 0
30
+ tab_position: "left"
31
+ defaults:
32
+ activation: ()->
33
+ Docs().router.navigate("#examples/#{ @name }/component", false)
34
+
35
+ page.privateMethods
36
+ # Hack
37
+ afterSelect: _.debounce ()->
38
+ if active = @activeComponent()
39
+ active.findComponentByName?("component")?.runExample?()
40
+ , 10
41
+
42
+ wrapExampleComponents: ()->
43
+ wrapped = []
44
+
45
+ wrapped = _(@components).map (component,index)->
46
+ title: component.title
47
+ name: component.name
48
+ autoBindEventHandlers: true
49
+ events:
50
+ "click a.link[data-navigate-to]" : "selectPanel"
51
+
52
+ selectPanel: (e)->
53
+ $target = @$(e.target)
54
+ link = $target.data("navigate-to")
55
+ index = $target.data("index")
56
+ @$('.panel-selector li').removeClass("active")
57
+ $target.parent('li').addClass("active")
58
+ @getViewSelector().activate(index)
59
+ Docs().router.navigate(link, false)
60
+
61
+ components:[
62
+ type: "card"
63
+ role: "view_selector"
64
+ afterInitialize: ()->
65
+ @$el.append("<h3>#{ component.title } Example</h3>")
66
+ components:[
67
+ type: component.type
68
+ name: "component"
69
+ activation: ()->
70
+ @runExample?()
71
+ ,
72
+ type: "example_source"
73
+ example: component.name
74
+ name: "source"
75
+ ,
76
+ type: "example_docs"
77
+ example: component.name
78
+ name: "documentation"
79
+ ]
80
+ ,
81
+ bodyTemplate: "examples_browser/selector"
82
+ bodyTemplateVars: ()->
83
+ example_name: component.name
84
+ ]
85
+
86
+ @components = wrapped
87
+ @components.unshift title: "Overview", bodyTemplate: "examples_browser/overview"
88
+
89
+ afterInitialize: ()->
90
+ @wrapExampleComponents()
91
+
92
+ page.publicMethods
93
+ show: (exampleName=0, view="component")->
94
+ @activate exampleName, false, ()->
95
+ @getViewSelector().activate(view)
96
+ @$("li").removeClass("active")
97
+ @$("li.#{view}").addClass("active")
98
+
99
+ index: ()->
100
+ @show()
101
+
102
+ page.register()
@@ -0,0 +1,10 @@
1
+ page = Docs.register "Docs.views.Home"
2
+ page.extends "Luca.components.Page"
3
+ page.configuration
4
+ template: "pages/home"
5
+
6
+ page.defines
7
+ index: ()->
8
+ @trigger "index"
9
+
10
+ page.register()
@@ -0,0 +1,43 @@
1
+ # The `Docs.components.ApiBrowser` is an example of using
2
+ # a `Luca.Container` with a `@componentEvents` configuration
3
+ # to broker communication between two child components.
4
+ view = Docs.register "Docs.components.ApiBrowser"
5
+ view.extends "Luca.Container"
6
+
7
+ view.configuration
8
+ componentEvents:
9
+ "* button:click" : "loadUrl"
10
+
11
+ view.contains
12
+ type: "container"
13
+ rowFluid: true
14
+ className: "url-selector"
15
+ components:[
16
+ type: "text_field"
17
+ name: "endpoint_url"
18
+ label: "Enter a URL"
19
+ span: 9
20
+ ,
21
+ type: "button_field"
22
+ input_value: "Browse"
23
+ span: 3
24
+ ]
25
+ ,
26
+ tagName: "pre"
27
+ className: "prettyprint pre-scrollable"
28
+ role: "output"
29
+ afterInitialize: ()->
30
+ @$el.html("Loading...")
31
+
32
+ view.privateMethods
33
+ runExample: ()->
34
+ @findComponentByName("endpoint_url", true).setValue("https://api.github.com/users/datapimp/gists")
35
+ @loadUrl()
36
+
37
+ loadUrl: ()->
38
+ url = @findComponentByName("endpoint_url", true).getValue()
39
+ $.get url, (parsed, state, options)=>
40
+ @getOutput().$html( options.responseText )
41
+ window.prettyPrint()
42
+
43
+ view.register()
@@ -0,0 +1,14 @@
1
+ view = Docs.register "Docs.views.GridLayoutViewExample"
2
+ view.extends "Luca.components.GridLayoutView"
3
+
4
+ view.publicConfiguration
5
+ collection: "github_repositories"
6
+ itemPerRow: 4
7
+ paginatable: 12
8
+ itemTemplate: "github_repository"
9
+
10
+ view.publicMethods
11
+ runExample: ()->
12
+ @getCollection().fetch()
13
+
14
+ view.register()
@@ -0,0 +1,39 @@
1
+ view = Docs.register "Docs.views.TableViewExample"
2
+ view.extends "Luca.components.ScrollableTable"
3
+ view.publicConfiguration
4
+ # Only render 100 models at a time. The `Luca.CollectionView` has
5
+ # automatic pagination control rendering, if you specify a pagination
6
+ # view class and render area.
7
+ paginatable: 100
8
+
9
+ # The scrollable table element has a max height.
10
+ maxHeight: 300
11
+
12
+ # The string "github_repositories" is an alias for the collection manager
13
+ # which is created by the `Docs.Application`. It represents a singular
14
+ # global instance of the `Docs.collections.GithubRepositories` collection.
15
+ collection: "github_repositories"
16
+
17
+ # The `Luca.components.TableView` component accepts an array of column
18
+ # configurations. Each column can specify the following properties:
19
+ # - header
20
+ # - reader ( a method, or attribute on the collection's model )
21
+ # - renderer ( a custom function which renders the model / reader )
22
+ # - width ( a percentage width for the column )
23
+ columns:[
24
+ reader: "name"
25
+ renderer: (name, model)->
26
+ "<a href=#{ model.get('html_url') }>#{ name }</a>"
27
+ ,
28
+ reader: "description"
29
+ ,
30
+ reader: "language"
31
+ ,
32
+ reader: "watchers"
33
+ ]
34
+
35
+ view.publicMethods
36
+ runExample: ()->
37
+ @getCollection().fetch()
38
+
39
+ view.register()
@@ -0,0 +1,38 @@
1
+ # The `Docs.views.BasicFormView` is an example of the `Luca.components.FormView`.
2
+ # In this basic example, the form contains a range of different fields. They are
3
+ # rendered one on top of another. You can get more advanced and nest containers within
4
+ # your form, or use a `@bodyTemplate` and specify your own DOM structure, and assign
5
+ # components to custom CSS selectors within it.
6
+ form = Docs.register "Docs.views.BasicFormView"
7
+ form.extends "Luca.components.FormView"
8
+
9
+ form.privateConfiguration
10
+ # Any values you specify in the `@defaults` property will be
11
+ # set on each of the components in this container.
12
+ defaults:
13
+ type: "text"
14
+
15
+ form.publicConfiguration
16
+ # You can manually define a `@components` property, or in your component
17
+ # definition you can use the special `contains` directive, the only difference
18
+ # is your personal preference for readability. I did it this way
19
+ components:[
20
+ label: "Text Field One"
21
+ ,
22
+ type: "select"
23
+ label: "Select Field One"
24
+ collection:
25
+ data:[
26
+ ['Alpha','Alpha']
27
+ ['Bravo','Bravo']
28
+ ['Charlie','Charlie']
29
+ ['Delta','Delta']
30
+ ]
31
+ ,
32
+ type: "checkbox_field"
33
+ label: "Checkbox Field"
34
+
35
+ ]
36
+
37
+ form.register()
38
+
@@ -0,0 +1,110 @@
1
+ # The `Docs.views.ComplexLayoutForm` is an example of a `Luca.components.FormView` which contains
2
+ # a nested container, and which uses the bootstrap grid helper properties `@rowFluid` and `@span`
3
+ # to arrange the nested components inside of a grid layout.
4
+ #
5
+ # In addition to laying out the form components visually, there is a nested `Luca.containers.CardView`
6
+ # component which shows / hides various field sets depending on what options you select on the form.
7
+ # This is an example of how Luca framework components can be assembled together arbitrarily to build
8
+ # whatever type of user interface you can imagine.
9
+ form = Docs.register "Docs.views.ComplexLayoutForm"
10
+ form.extends "Luca.components.FormView"
11
+
12
+ form.privateConfiguration
13
+ # By setting `@rowFluid` to true, this container
14
+ # will support the twitter bootstrap grid layout. Applying
15
+ # the `@span` property to the direct children of this component
16
+ # will control their width
17
+ rowFluid: true
18
+
19
+ # Here is an example of using the `@componentEvents` property to listen
20
+ # to the change event on the select field identified by the role 'group_selector'.
21
+ # once that field emits its change event, we change the active display card in the
22
+ # nested card selector.
23
+ componentEvents:
24
+ "group_selector on:change" : "selectGroup"
25
+
26
+ form.privateMethods
27
+ # The selectGroup method is bound to the componentEvent listener. Whenever
28
+ # the group_selector field changes its value, we want to change which field
29
+ # group is visible on the form.
30
+ selectGroup: ()->
31
+ desiredGroup = @getGroupSelector().getValue()
32
+ selector = @getGroupDisplaySelector()
33
+ selector.activate(desiredGroup)
34
+
35
+ form.contains
36
+ type: "container"
37
+ span: 6
38
+ components:[
39
+ type: "text"
40
+ label: "Field One"
41
+ ,
42
+ type: "text"
43
+ label: "Field Two"
44
+ ,
45
+ type: "text"
46
+ label: "Field Three"
47
+ ]
48
+ ,
49
+ type: "container"
50
+ span: 6
51
+ components:[
52
+ label: "Select a Group"
53
+ type: "select"
54
+ role: "group_selector"
55
+ includeBlank: false
56
+ valueType: "string"
57
+ collection:
58
+ data:[
59
+ ["alpha","Alpha Group"]
60
+ ["bravo", "Bravo Group"]
61
+ ["charlie","Charlie Group"]
62
+ ]
63
+ ,
64
+ type: "card"
65
+ role: "group_display_selector"
66
+ components:[
67
+ name: "alpha"
68
+ defaults:
69
+ type: "text"
70
+ components:[
71
+ type: "view"
72
+ tagName: "h4"
73
+ bodyTemplate: ()-> "Group One"
74
+ ,
75
+ label: "Alpha"
76
+ ,
77
+ label: "Bravo"
78
+ ,
79
+ label: "Charlie"
80
+ ]
81
+ ,
82
+ name: "bravo"
83
+ defaults:
84
+ type: "checkbox_field"
85
+ components:[
86
+ type: "view"
87
+ tagName: "h4"
88
+ bodyTemplate: ()-> "Group Two"
89
+ ,
90
+ label: "One"
91
+ ,
92
+ label: "Two"
93
+ ]
94
+ ,
95
+ name: "charlie"
96
+ defaults:
97
+ type: "button_field"
98
+ components:[
99
+ type: "view"
100
+ tagName: "h4"
101
+ bodyTemplate: ()-> "Group Three"
102
+ ,
103
+ input_value: "Button One"
104
+ icon_class: "chevron-up"
105
+ ,
106
+ input_value: "Button Two"
107
+ icon_class: "pencil"
108
+ ]
109
+ ]
110
+ ]
@@ -0,0 +1,6 @@
1
+ nav = Docs.register "Docs.views.TopNavigation"
2
+ nav.extends "Luca.components.NavBar"
3
+ nav.defines
4
+ brand: "Luca.js"
5
+ inverse: true
6
+ orientation: "top"