luca 0.9.89 → 0.9.91

Sign up to get free protection for your applications and to get access to all the features.
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"