luca 0.6.6
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.
- data/.gitignore +5 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +77 -0
- data/Guardfile +22 -0
- data/README.md +291 -0
- data/Rakefile +28 -0
- data/app.rb +46 -0
- data/assets/images/glyphicons-halflings-white.png +0 -0
- data/assets/images/glyphicons-halflings.png +0 -0
- data/assets/javascripts/dependencies/backbone-min.js +37 -0
- data/assets/javascripts/dependencies/backbone-query.min.js +1 -0
- data/assets/javascripts/dependencies/bootstrap.min.js +1 -0
- data/assets/javascripts/dependencies/jasmine-html.js +190 -0
- data/assets/javascripts/dependencies/jasmine.js +2476 -0
- data/assets/javascripts/dependencies/jquery.js +4 -0
- data/assets/javascripts/dependencies/modal.js +698 -0
- data/assets/javascripts/dependencies/modernizr.min.js +30 -0
- data/assets/javascripts/dependencies/prettify.js +28 -0
- data/assets/javascripts/dependencies/sinon.js +3469 -0
- data/assets/javascripts/dependencies/spin-min.js +2 -0
- data/assets/javascripts/dependencies/underscore-min.js +31 -0
- data/assets/javascripts/dependencies/underscore-string.min.js +14 -0
- data/assets/javascripts/dependencies.coffee +7 -0
- data/assets/javascripts/luca-ui-base.coffee +12 -0
- data/assets/javascripts/luca-ui-spec.coffee +2 -0
- data/assets/javascripts/luca-ui.coffee +3 -0
- data/assets/javascripts/sandbox/collections/sample.coffee +0 -0
- data/assets/javascripts/sandbox/config.coffee +7 -0
- data/assets/javascripts/sandbox/sandbox.coffee +16 -0
- data/assets/javascripts/sandbox/templates/features/collection_helpers.luca +33 -0
- data/assets/javascripts/sandbox/templates/features/form_demo_code.luca +48 -0
- data/assets/javascripts/sandbox/templates/features/grid_demo_code.luca +24 -0
- data/assets/javascripts/sandbox/templates/features/introduction.luca +11 -0
- data/assets/javascripts/sandbox/templates/features/view_helpers.luca +43 -0
- data/assets/javascripts/sandbox/templates/navigation.luca +8 -0
- data/assets/javascripts/sandbox/views/form_demo.coffee +47 -0
- data/assets/javascripts/sandbox/views/grid_demo.coffee +23 -0
- data/assets/javascripts/sandbox/views/pages/collection_events_sample.coffee +1 -0
- data/assets/javascripts/sandbox/views/pages/pages_controller.coffee +28 -0
- data/assets/javascripts/sandbox.coffee +4 -0
- data/assets/javascripts/spec-dependencies.coffee +4 -0
- data/assets/stylesheets/bootstrap-responsive.min.css +3 -0
- data/assets/stylesheets/bootstrap.min.css +610 -0
- data/assets/stylesheets/jasmine.css +166 -0
- data/assets/stylesheets/luca-ui-bootstrap.css +5 -0
- data/assets/stylesheets/luca-ui-spec.css +3 -0
- data/assets/stylesheets/luca-ui.css +3 -0
- data/assets/stylesheets/prettify.css +40 -0
- data/assets/stylesheets/sandbox/sandbox.scss +4 -0
- data/assets/stylesheets/sandbox.css +3 -0
- data/config.ru +11 -0
- data/lib/luca/command_line.rb +69 -0
- data/lib/luca/rails/engine.rb +12 -0
- data/lib/luca/rails/version.rb +6 -0
- data/lib/luca/rails.rb +9 -0
- data/lib/luca/template.rb +51 -0
- data/lib/luca/test_harness.rb +106 -0
- data/lib/luca.rb +1 -0
- data/lib/sprockets/luca_template.rb +49 -0
- data/lib/templates/spec_manifest_javascripts.erb +7 -0
- data/lib/templates/spec_manifest_stylesheets.erb +11 -0
- data/luca.gemspec +26 -0
- data/public/jasmine/index.html +26 -0
- data/public/sandbox/api.js +1 -0
- data/spec/components/application_spec.coffee +0 -0
- data/spec/components/collection_loader_view_spec.coffee +0 -0
- data/spec/components/controller_spec.coffee +0 -0
- data/spec/components/form_view_spec.coffee +13 -0
- data/spec/components/grid_view_spec.coffee +0 -0
- data/spec/components/record_manager_spec.coffee +0 -0
- data/spec/components/template_spec.coffee +0 -0
- data/spec/containers/card_view_spec.coffee +1 -0
- data/spec/containers/column_view_spec.coffee +0 -0
- data/spec/containers/modal_view_spec.coffee +0 -0
- data/spec/containers/panel_view_spec.coffee +0 -0
- data/spec/containers/split_view_spec.coffee +0 -0
- data/spec/containers/tab_view_spec.coffee +0 -0
- data/spec/containers/viewport_spec.coffee +0 -0
- data/spec/core/collection_spec.coffee +215 -0
- data/spec/core/container_spec.coffee +0 -0
- data/spec/core/field_spec.coffee +0 -0
- data/spec/core/observer_spec.coffee +0 -0
- data/spec/core/view_spec.coffee +87 -0
- data/spec/framework_spec.coffee +48 -0
- data/spec/helper.coffee +120 -0
- data/spec/managers/collection_manager_spec.coffee +95 -0
- data/spec/managers/socket_manager_spec.coffee +0 -0
- data/src/components/application.coffee +83 -0
- data/src/components/base_toolbar.coffee +16 -0
- data/src/components/collection_loader_view.coffee +37 -0
- data/src/components/controller.coffee +41 -0
- data/src/components/fields/button_field.coffee +40 -0
- data/src/components/fields/checkbox_field.coffee +41 -0
- data/src/components/fields/file_upload_field.coffee +15 -0
- data/src/components/fields/hidden_field.coffee +18 -0
- data/src/components/fields/select_field.coffee +100 -0
- data/src/components/fields/text_area_field.coffee +43 -0
- data/src/components/fields/text_field.coffee +42 -0
- data/src/components/fields/type_ahead_field.coffee +10 -0
- data/src/components/form_button_toolbar.coffee +26 -0
- data/src/components/form_view.coffee +205 -0
- data/src/components/grid_view.coffee +208 -0
- data/src/components/record_manager.coffee +215 -0
- data/src/components/router.coffee +34 -0
- data/src/components/template.coffee +19 -0
- data/src/containers/card_view.coffee +89 -0
- data/src/containers/column_view.coffee +48 -0
- data/src/containers/modal_view.coffee +85 -0
- data/src/containers/panel_view.coffee +24 -0
- data/src/containers/split_view.coffee +12 -0
- data/src/containers/tab_view.coffee +77 -0
- data/src/containers/viewport.coffee +16 -0
- data/src/core/collection.coffee +319 -0
- data/src/core/container.coffee +256 -0
- data/src/core/field.coffee +68 -0
- data/src/core/observer.coffee +17 -0
- data/src/core/view.coffee +190 -0
- data/src/framework.coffee +110 -0
- data/src/index.coffee +255 -0
- data/src/managers/collection_manager.coffee +168 -0
- data/src/managers/socket_manager.coffee +54 -0
- data/src/modules/deferrable.coffee +18 -0
- data/src/modules/local_storage.coffee +50 -0
- data/src/stylesheets/base.scss +78 -0
- data/src/stylesheets/components/form_view.scss +54 -0
- data/src/stylesheets/components/grid_view.scss +111 -0
- data/src/stylesheets/components/toolbar.scss +15 -0
- data/src/stylesheets/containers/container.scss +7 -0
- data/src/stylesheets/containers/modal_view.scss +0 -0
- data/src/stylesheets/containers/tab_view.scss +33 -0
- data/src/stylesheets/normalize.scss +430 -0
- data/src/templates/components/bootstrap_form_controls.luca +7 -0
- data/src/templates/components/collection_loader_view.luca +5 -0
- data/src/templates/components/form_view.luca +15 -0
- data/src/templates/components/grid_view.luca +9 -0
- data/src/templates/components/grid_view_empty_text.luca +3 -0
- data/src/templates/containers/basic.luca +1 -0
- data/src/templates/containers/tab_selector_container.luca +8 -0
- data/src/templates/containers/tab_view.luca +1 -0
- data/src/templates/containers/toolbar_wrapper.luca +1 -0
- data/src/templates/fields/button_field.luca +2 -0
- data/src/templates/fields/button_field_link.luca +5 -0
- data/src/templates/fields/checkbox_field.luca +9 -0
- data/src/templates/fields/file_upload_field.luca +8 -0
- data/src/templates/fields/hidden_field.luca +1 -0
- data/src/templates/fields/select_field.luca +7 -0
- data/src/templates/fields/text_area_field.luca +8 -0
- data/src/templates/fields/text_field.luca +13 -0
- data/src/templates/sample/contents.luca +1 -0
- data/src/templates/sample/welcome.luca +1 -0
- data/vendor/assets/images/glyphicons-halflings-white.png +0 -0
- data/vendor/assets/images/glyphicons-halflings.png +0 -0
- data/vendor/assets/javascripts/luca-spec-dependencies.js +6135 -0
- data/vendor/assets/javascripts/luca-ui-base.js +1527 -0
- data/vendor/assets/javascripts/luca-ui-spec.js +3654 -0
- data/vendor/assets/javascripts/luca-ui.js +2763 -0
- data/vendor/assets/luca-ui/base.css +85 -0
- data/vendor/assets/luca-ui/components/application.js +91 -0
- data/vendor/assets/luca-ui/components/base_toolbar.js +23 -0
- data/vendor/assets/luca-ui/components/controller.js +38 -0
- data/vendor/assets/luca-ui/components/fields/button_field.js +45 -0
- data/vendor/assets/luca-ui/components/fields/checkbox_field.js +43 -0
- data/vendor/assets/luca-ui/components/fields/file_upload_field.js +20 -0
- data/vendor/assets/luca-ui/components/fields/hidden_field.js +20 -0
- data/vendor/assets/luca-ui/components/fields/select_field.js +97 -0
- data/vendor/assets/luca-ui/components/fields/text_area_field.js +48 -0
- data/vendor/assets/luca-ui/components/fields/text_field.js +46 -0
- data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +13 -0
- data/vendor/assets/luca-ui/components/form_button_toolbar.js +32 -0
- data/vendor/assets/luca-ui/components/form_view.css +32 -0
- data/vendor/assets/luca-ui/components/form_view.js +207 -0
- data/vendor/assets/luca-ui/components/grid_view.css +76 -0
- data/vendor/assets/luca-ui/components/grid_view.js +202 -0
- data/vendor/assets/luca-ui/components/record_manager.js +207 -0
- data/vendor/assets/luca-ui/components/router.js +36 -0
- data/vendor/assets/luca-ui/components/template.js +26 -0
- data/vendor/assets/luca-ui/components/toolbar.css +11 -0
- data/vendor/assets/luca-ui/containers/card_view.js +98 -0
- data/vendor/assets/luca-ui/containers/column_view.js +52 -0
- data/vendor/assets/luca-ui/containers/container.css +3 -0
- data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/containers/modal_view.js +87 -0
- data/vendor/assets/luca-ui/containers/panel_view.js +34 -0
- data/vendor/assets/luca-ui/containers/split_view.js +13 -0
- data/vendor/assets/luca-ui/containers/tab_view.css +16 -0
- data/vendor/assets/luca-ui/containers/tab_view.js +80 -0
- data/vendor/assets/luca-ui/containers/viewport.js +18 -0
- data/vendor/assets/luca-ui/core/collection.js +221 -0
- data/vendor/assets/luca-ui/core/container.js +205 -0
- data/vendor/assets/luca-ui/core/field.js +59 -0
- data/vendor/assets/luca-ui/core/observer.js +42 -0
- data/vendor/assets/luca-ui/core/view.js +127 -0
- data/vendor/assets/luca-ui/framework.js +110 -0
- data/vendor/assets/luca-ui/index.js +5 -0
- data/vendor/assets/luca-ui/managers/collection_manager.js +98 -0
- data/vendor/assets/luca-ui/managers/socket_manager.js +52 -0
- data/vendor/assets/luca-ui/modules/deferrable.js +21 -0
- data/vendor/assets/luca-ui/modules/local_storage.js +81 -0
- data/vendor/assets/luca-ui/normalize.css +359 -0
- data/vendor/assets/luca-ui/stylesheets/base.css +85 -0
- data/vendor/assets/luca-ui/stylesheets/components/form_view.css +32 -0
- data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +76 -0
- data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +11 -0
- data/vendor/assets/luca-ui/stylesheets/containers/container.css +3 -0
- data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +16 -0
- data/vendor/assets/luca-ui/stylesheets/normalize.css +359 -0
- data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +4 -0
- data/vendor/assets/luca-ui/templates/components/form_view.js +4 -0
- data/vendor/assets/luca-ui/templates/components/grid_view.js +4 -0
- data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/basic.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/tab_view.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/button_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/button_field_link.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/hidden_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/select_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/text_area_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/text_field.js +4 -0
- data/vendor/assets/luca-ui/templates/sample/contents.js +4 -0
- data/vendor/assets/luca-ui/templates/sample/welcome.js +4 -0
- data/vendor/assets/stylesheets/luca-spec-dependencies.css +166 -0
- data/vendor/assets/stylesheets/luca-ui-bootstrap.css +1201 -0
- data/vendor/assets/stylesheets/luca-ui-spec.css +586 -0
- data/vendor/assets/stylesheets/luca-ui.css +586 -0
- data/views/index.erb +20 -0
- data/views/jasmine.erb +22 -0
- data/views/spec_harness.erb +29 -0
- metadata +361 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
body {
|
|
2
|
+
font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
.jasmine_reporter a:visited, .jasmine_reporter a {
|
|
7
|
+
color: #303;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.jasmine_reporter a:hover, .jasmine_reporter a:active {
|
|
11
|
+
color: blue;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.run_spec {
|
|
15
|
+
float:right;
|
|
16
|
+
padding-right: 5px;
|
|
17
|
+
font-size: .8em;
|
|
18
|
+
text-decoration: none;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.jasmine_reporter {
|
|
22
|
+
margin: 0 5px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.banner {
|
|
26
|
+
color: #303;
|
|
27
|
+
background-color: #fef;
|
|
28
|
+
padding: 5px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.logo {
|
|
32
|
+
float: left;
|
|
33
|
+
font-size: 1.1em;
|
|
34
|
+
padding-left: 5px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.logo .version {
|
|
38
|
+
font-size: .6em;
|
|
39
|
+
padding-left: 1em;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.runner.running {
|
|
43
|
+
background-color: yellow;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
.options {
|
|
48
|
+
text-align: right;
|
|
49
|
+
font-size: .8em;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
.suite {
|
|
56
|
+
border: 1px outset gray;
|
|
57
|
+
margin: 5px 0;
|
|
58
|
+
padding-left: 1em;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.suite .suite {
|
|
62
|
+
margin: 5px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.suite.passed {
|
|
66
|
+
background-color: #dfd;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.suite.failed {
|
|
70
|
+
background-color: #fdd;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.spec {
|
|
74
|
+
margin: 5px;
|
|
75
|
+
padding-left: 1em;
|
|
76
|
+
clear: both;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.spec.failed, .spec.passed, .spec.skipped {
|
|
80
|
+
padding-bottom: 5px;
|
|
81
|
+
border: 1px solid gray;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.spec.failed {
|
|
85
|
+
background-color: #fbb;
|
|
86
|
+
border-color: red;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.spec.passed {
|
|
90
|
+
background-color: #bfb;
|
|
91
|
+
border-color: green;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.spec.skipped {
|
|
95
|
+
background-color: #bbb;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.messages {
|
|
99
|
+
border-left: 1px dashed gray;
|
|
100
|
+
padding-left: 1em;
|
|
101
|
+
padding-right: 1em;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.passed {
|
|
105
|
+
background-color: #cfc;
|
|
106
|
+
display: none;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.failed {
|
|
110
|
+
background-color: #fbb;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.skipped {
|
|
114
|
+
color: #777;
|
|
115
|
+
background-color: #eee;
|
|
116
|
+
display: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
/*.resultMessage {*/
|
|
121
|
+
/*white-space: pre;*/
|
|
122
|
+
/*}*/
|
|
123
|
+
|
|
124
|
+
.resultMessage span.result {
|
|
125
|
+
display: block;
|
|
126
|
+
line-height: 2em;
|
|
127
|
+
color: black;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.resultMessage .mismatch {
|
|
131
|
+
color: black;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.stackTrace {
|
|
135
|
+
white-space: pre;
|
|
136
|
+
font-size: .8em;
|
|
137
|
+
margin-left: 10px;
|
|
138
|
+
max-height: 5em;
|
|
139
|
+
overflow: auto;
|
|
140
|
+
border: 1px inset red;
|
|
141
|
+
padding: 1em;
|
|
142
|
+
background: #eef;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.finished-at {
|
|
146
|
+
padding-left: 1em;
|
|
147
|
+
font-size: .6em;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.show-passed .passed,
|
|
151
|
+
.show-skipped .skipped {
|
|
152
|
+
display: block;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
#jasmine_content {
|
|
157
|
+
position:fixed;
|
|
158
|
+
right: 100%;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.runner {
|
|
162
|
+
border: 1px solid gray;
|
|
163
|
+
display: block;
|
|
164
|
+
margin: 5px 0;
|
|
165
|
+
padding: 2px 0 2px 10px;
|
|
166
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* desert scheme ported from vim to google prettify */
|
|
2
|
+
pre { display: block; background-color: #333 }
|
|
3
|
+
pre .nocode { background-color: none; color: #000 }
|
|
4
|
+
pre .str { color: #ffa0a0 } /* string - pink */
|
|
5
|
+
pre .kwd { color: #f0e68c; font-weight: bold }
|
|
6
|
+
pre .com { color: #87ceeb } /* comment - skyblue */
|
|
7
|
+
pre .typ { color: #98fb98 } /* type - lightgreen */
|
|
8
|
+
pre .lit { color: #cd5c5c } /* literal - darkred */
|
|
9
|
+
pre .pun { color: #fff } /* punctuation */
|
|
10
|
+
pre .pln { color: #fff } /* plaintext */
|
|
11
|
+
pre .tag { color: #f0e68c; font-weight: bold } /* html/xml tag - lightyellow */
|
|
12
|
+
pre .atn { color: #bdb76b; font-weight: bold } /* attribute name - khaki */
|
|
13
|
+
pre .atv { color: #ffa0a0 } /* attribute value - pink */
|
|
14
|
+
pre .dec { color: #98fb98 } /* decimal - lightgreen */
|
|
15
|
+
|
|
16
|
+
/* Specify class=linenums on a pre to get line numbering */
|
|
17
|
+
ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE } /* IE indents via margin-left */
|
|
18
|
+
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
|
|
19
|
+
/* Alternate shading for lines */
|
|
20
|
+
li.L1,li.L3,li.L5,li.L7,li.L9 { }
|
|
21
|
+
|
|
22
|
+
@media print {
|
|
23
|
+
pre { background-color: none }
|
|
24
|
+
pre .str, code .str { color: #060 }
|
|
25
|
+
pre .kwd, code .kwd { color: #006; font-weight: bold }
|
|
26
|
+
pre .com, code .com { color: #600; font-style: italic }
|
|
27
|
+
pre .typ, code .typ { color: #404; font-weight: bold }
|
|
28
|
+
pre .lit, code .lit { color: #044 }
|
|
29
|
+
pre .pun, code .pun { color: #440 }
|
|
30
|
+
pre .pln, code .pln { color: #000 }
|
|
31
|
+
pre .tag, code .tag { color: #006; font-weight: bold }
|
|
32
|
+
pre .atn, code .atn { color: #404 }
|
|
33
|
+
pre .atv, code .atv { color: #060 }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
pre.prettyprint li {
|
|
37
|
+
font-family: 'Monaco';
|
|
38
|
+
font-size: 20px;
|
|
39
|
+
line-height: 24px;
|
|
40
|
+
}
|
data/config.ru
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require './app'
|
|
2
|
+
|
|
3
|
+
# I'm leaning more towards not mounting the sprockets rack application and just relying on the precompiler with guard.
|
|
4
|
+
# If you want to mount the Sprockets Rack Application, uncomment the following lines:
|
|
5
|
+
map "/assets" do
|
|
6
|
+
run App.sprockets
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
map "/" do
|
|
10
|
+
run App
|
|
11
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module Luca
|
|
4
|
+
class CommandLine
|
|
5
|
+
BANNER = <<-EOS
|
|
6
|
+
luca-ui generator
|
|
7
|
+
|
|
8
|
+
used to generate an application skeleton, or components
|
|
9
|
+
|
|
10
|
+
example:
|
|
11
|
+
|
|
12
|
+
luca new MyApp
|
|
13
|
+
|
|
14
|
+
EOS
|
|
15
|
+
|
|
16
|
+
attr_accessor :keystore, :arguments
|
|
17
|
+
|
|
18
|
+
GRAMMAR = %w{}
|
|
19
|
+
|
|
20
|
+
def initialize arguments=[]
|
|
21
|
+
arguments = arguments.split if arguments.is_a? String
|
|
22
|
+
parse_options arguments
|
|
23
|
+
|
|
24
|
+
if !@options[:action]
|
|
25
|
+
puts @option_parser.banner
|
|
26
|
+
exit
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def options
|
|
31
|
+
@options
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def parse_options arguments=[]
|
|
35
|
+
@options = {}
|
|
36
|
+
|
|
37
|
+
@option_parser = OptionParser.new do |opts|
|
|
38
|
+
opts.separator ""
|
|
39
|
+
opts.separator "Actions:"
|
|
40
|
+
|
|
41
|
+
opts.on("-n",'--new APPLICATION_NAME','Create a new luca-ui app skeleton') do |s|
|
|
42
|
+
@options[:action] = "new"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
opts.separator ""
|
|
46
|
+
opts.separator "Common Options:"
|
|
47
|
+
|
|
48
|
+
opts.on_tail("-h","--help",'You are looking at it') do
|
|
49
|
+
puts opts
|
|
50
|
+
exit
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
opts.on_tail('-v','--version','display Sentry version') do
|
|
54
|
+
puts "Luca Version #{ Luca::VERSION }"
|
|
55
|
+
exit
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
@option_parser.banner = BANNER
|
|
60
|
+
|
|
61
|
+
arguments.collect! do |arg|
|
|
62
|
+
GRAMMAR.include?(arg.downcase) ? "--#{ arg.downcase }" : arg
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
@option_parser.parse!( arguments )
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Luca
|
|
2
|
+
module Rails
|
|
3
|
+
class Engine < ::Rails::Engine
|
|
4
|
+
initializer "luca.register_template" do |app|
|
|
5
|
+
app.assets.register_engine ".luca", Luca::Template
|
|
6
|
+
Luca::TestHarness.set(:sprockets,app.assets)
|
|
7
|
+
Luca::TestHarness.set :root, File.expand_path('../../../../', __FILE__)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
data/lib/luca/rails.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'tilt'
|
|
2
|
+
|
|
3
|
+
module Luca
|
|
4
|
+
class Template < Tilt::Template
|
|
5
|
+
attr_accessor :namespace
|
|
6
|
+
def self.default_mime_type
|
|
7
|
+
'application/javascript'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.engine_initialized?
|
|
11
|
+
defined? ::EJS
|
|
12
|
+
defined? ::Haml
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize_engine
|
|
16
|
+
require_template_library 'ejs'
|
|
17
|
+
require_template_library 'haml'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def prepare
|
|
21
|
+
options = @options.merge(:filename => eval_file, :line => line, :escape_attrs => false)
|
|
22
|
+
@engine = ::Haml::Engine.new(data, options)
|
|
23
|
+
self.namespace = "window.JST"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def evaluate(scope, locals, &block)
|
|
27
|
+
compiled = @engine.render(scope, locals, &block)
|
|
28
|
+
code = EJS.compile(compiled)
|
|
29
|
+
tmpl = scope.logical_path
|
|
30
|
+
|
|
31
|
+
tmpl.gsub! /^.*\/templates\//, ''
|
|
32
|
+
|
|
33
|
+
<<-JST
|
|
34
|
+
|
|
35
|
+
(function() {
|
|
36
|
+
#{namespace} || (#{namespace} = {});
|
|
37
|
+
#{namespace}[#{ tmpl.inspect }] = #{indent(code)};
|
|
38
|
+
}).call(this);
|
|
39
|
+
|
|
40
|
+
JST
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def indent(string)
|
|
46
|
+
string.gsub(/$(.)/m, "\\1 ").strip
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require 'sinatra/base'
|
|
2
|
+
|
|
3
|
+
module Luca
|
|
4
|
+
module AssetHelpers
|
|
5
|
+
def asset_path(source)
|
|
6
|
+
"/assets/" + settings.sprockets.find_asset(source).digest_path
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class TestHarness < Sinatra::Base
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
attr_accessor :config_file, :spec_environment
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.parse_configuration_file
|
|
17
|
+
self.spec_environment = YAML.load_file(config_file)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.configure!
|
|
21
|
+
spec_javascripts = File.join(::Rails.root,'spec','javascripts')
|
|
22
|
+
locations = [ File.join(spec_javascripts,'luca.yml'), File.join(::Rails.root,'config','luca.yml') ]
|
|
23
|
+
|
|
24
|
+
@config_file = locations.detect {|f| File.exists?(f) }
|
|
25
|
+
|
|
26
|
+
tmp_path = File.join(::Rails.root,'tmp')
|
|
27
|
+
|
|
28
|
+
unless sprockets.paths.include?(spec_javascripts)
|
|
29
|
+
sprockets.append_path(spec_javascripts)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
unless sprockets.paths.include?(tmp_path)
|
|
33
|
+
sprockets.append_path( tmp_path )
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
if File.exists?( @config_file )
|
|
37
|
+
parse_configuration_file
|
|
38
|
+
else
|
|
39
|
+
# TODO - Provide error output to the test harness URL with instructions
|
|
40
|
+
# in the case the luca.yml config file does not exist
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.load_environment
|
|
45
|
+
configure!
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.get_suite application
|
|
49
|
+
@suite ||= load_environment.try(:[],"apps").try(:[], application)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# which files contain the actual specs
|
|
53
|
+
def self.get_specs application
|
|
54
|
+
get_suite( application ).try(:[],"specs") || []
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# which stylesheets ( if any ) are required to serve the spec harness
|
|
58
|
+
def self.get_stylesheets application
|
|
59
|
+
get_suite( application ).try(:[],"stylesheets") || []
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# which javascripts should we build and serve into a sprockets manifest
|
|
63
|
+
def self.get_javascripts application
|
|
64
|
+
get_suite( application ).try(:[],"scripts") || []
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# which assets to include directly
|
|
68
|
+
def self.get_assets application
|
|
69
|
+
get_suite( application ).try(:[],"assets") || []
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def self.create_tempfile type, contents
|
|
73
|
+
filename = File.join(::Rails.root,'tmp', rand(8**8).to_s(10) + ".#{ type }" )
|
|
74
|
+
File.open(filename,'w+') {|fh| fh.puts(contents)}
|
|
75
|
+
filename
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
get "/specs/:application/specs_manifest.js" do
|
|
79
|
+
@javascripts = self.class.get_specs( params[:application] )
|
|
80
|
+
template_file = File.join(self.class.root,'lib','templates','spec_manifest_javascripts.erb')
|
|
81
|
+
@temp_file = self.class.create_tempfile( 'js', ERB.new( IO.read(template_file) ).result( binding ) )
|
|
82
|
+
|
|
83
|
+
self.class.sprockets[ @temp_file ].to_s
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
get "/specs/:application/manifest.css" do
|
|
87
|
+
@stylesheets = self.class.get_stylesheets( params[:application] )
|
|
88
|
+
template_file = File.join(self.class.root,'lib','templates','spec_manifest_stylesheets.erb')
|
|
89
|
+
@temp_file = self.class.create_tempfile( 'css', ERB.new( IO.read(template_file) ).result( binding ) )
|
|
90
|
+
|
|
91
|
+
self.class.sprockets[ @temp_file ].to_s
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
get "/specs/:application/manifest.js" do
|
|
95
|
+
@javascripts = self.class.get_javascripts( params[:application] )
|
|
96
|
+
template_file = File.join(self.class.root,'lib','templates','spec_manifest_javascripts.erb')
|
|
97
|
+
@temp_file = self.class.create_tempfile( 'js', ERB.new( IO.read(template_file) ).result( binding ) )
|
|
98
|
+
self.class.sprockets[ @temp_file ].to_s
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
get "/specs/:application" do
|
|
102
|
+
@assets = self.class.get_assets( params[:application] )
|
|
103
|
+
erb :spec_harness
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
data/lib/luca.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'luca/rails'
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'tilt'
|
|
2
|
+
|
|
3
|
+
module Sprockets
|
|
4
|
+
class LucaTemplate < Tilt::Template
|
|
5
|
+
attr_accessor :namespace
|
|
6
|
+
def self.default_mime_type
|
|
7
|
+
'application/javascript'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.engine_initialized?
|
|
11
|
+
defined? ::EJS
|
|
12
|
+
defined? ::Haml
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize_engine
|
|
16
|
+
require_template_library 'ejs'
|
|
17
|
+
require_template_library 'haml'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def prepare
|
|
21
|
+
options = @options.merge(:filename => eval_file, :line => line, :escape_attrs => false)
|
|
22
|
+
@engine = ::Haml::Engine.new(data, options)
|
|
23
|
+
self.namespace = "Luca.templates"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def evaluate(scope, locals, &block)
|
|
27
|
+
compiled = @engine.render(scope, locals, &block)
|
|
28
|
+
code = EJS.compile(compiled)
|
|
29
|
+
tmpl = scope.logical_path
|
|
30
|
+
|
|
31
|
+
tmpl.gsub! /^.*\/templates\//, ''
|
|
32
|
+
|
|
33
|
+
<<-JST
|
|
34
|
+
(function() {
|
|
35
|
+
#{namespace} || (#{namespace} = {});
|
|
36
|
+
#{namespace}[#{ tmpl.inspect }] = #{indent(code)};
|
|
37
|
+
}).call(this);
|
|
38
|
+
JST
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def indent(string)
|
|
44
|
+
string.gsub(/$(.)/m, "\\1 ").strip
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
data/luca.gemspec
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
require File.expand_path('../lib/luca/rails/version', __FILE__)
|
|
3
|
+
|
|
4
|
+
Gem::Specification.new do |s|
|
|
5
|
+
s.name = "luca"
|
|
6
|
+
s.version = Luca::Rails::VERSION
|
|
7
|
+
s.platform = Gem::Platform::RUBY
|
|
8
|
+
s.authors = ["Jonathan Soeder"]
|
|
9
|
+
s.email = ["jonathan.soeder@gmail.com"]
|
|
10
|
+
s.homepage = "http://datapimp.github.com/luca"
|
|
11
|
+
s.summary = "A Backbone.JS Component Framework"
|
|
12
|
+
s.description = "This gem allows you to use the luca-ui backbone.js component framework easily with the assets pipeline"
|
|
13
|
+
|
|
14
|
+
s.required_rubygems_version = ">= 1.3.6"
|
|
15
|
+
|
|
16
|
+
s.add_dependency "railties", "~> 3.1"
|
|
17
|
+
s.add_dependency "thor", "~> 0.14"
|
|
18
|
+
s.add_dependency "sinatra", ">= 0.9.2"
|
|
19
|
+
s.add_development_dependency "bundler", "~> 1.0.0"
|
|
20
|
+
s.add_development_dependency "rails", "~> 3.1"
|
|
21
|
+
|
|
22
|
+
s.files = `git ls-files`.split("\n")
|
|
23
|
+
s.executables = `git ls-files`.split("\n").select{|f| f =~ /^bin/}
|
|
24
|
+
s.require_paths = ['lib']
|
|
25
|
+
end
|
|
26
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<title>Jasmine Test Runner</title>
|
|
6
|
+
<link rel="stylesheet" type="text/css" href="../jasmine.css">
|
|
7
|
+
<script type="text/javascript" src="../jasmine.js"></script>
|
|
8
|
+
<script type="text/javascript" src="../jasmine-html.js"></script>
|
|
9
|
+
|
|
10
|
+
<!-- include source files here... -->
|
|
11
|
+
<script type="text/javascript" src="../dependencies.js"></script>
|
|
12
|
+
<script type="text/javascript" src="../javascripts/luca-ui.js"></script>
|
|
13
|
+
|
|
14
|
+
<!-- include spec files here... -->
|
|
15
|
+
<script type="text/javascript" src="../javascripts/luca-ui-spec.js"></script>
|
|
16
|
+
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
|
|
20
|
+
<script type="text/javascript">
|
|
21
|
+
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
|
|
22
|
+
jasmine.getEnv().execute();
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"name":"Franz Hintz","location":"Port Lisa","email":"troy@larkin.name","website":"www.kub.biz"},{"name":"Savion Doyle","location":"Hesselfurt","email":"edyth.schmeler@quitzon.net","website":"www.boyerbeier.name"},{"name":"Alexzander Mante","location":"Port Zane","email":"lorna.jacobs@hellerbrekke.net","website":"www.rolfsonherman.com"},{"name":"Ava Bogan","location":"West Melanychester","email":"wallace.stiedemann@rempel.net","website":"www.reinger.biz"},{"name":"Kim Gleason","location":"North Jaylanbury","email":"barney@satterfield.biz","website":"www.erdmangreen.net"},{"name":"Sarina Mraz","location":"Keithview","email":"tanya@aufderharcrist.info","website":"www.gleason.biz"},{"name":"Newton Turner","location":"Thielberg","email":"favian@cruickshank.com","website":"www.pricebarrows.biz"},{"name":"Karlie Rempel","location":"Port Caleigh","email":"rahul@vandervortbailey.info","website":"www.raynormaggio.name"},{"name":"Frankie Greenholt","location":"Nikolasbury","email":"barney_jerde@strosinleuschke.name","website":"www.stamm.name"},{"name":"Courtney Hayes","location":"McKenziebury","email":"arnoldo@gerlach.biz","website":"www.sporer.org"},{"name":"Haven Hermiston","location":"Dooleymouth","email":"mylene@feeneyjenkins.net","website":"www.koch.biz"},{"name":"Cortez McLaughlin","location":"East Gustave","email":"mina.ritchie@brown.org","website":"www.murphyward.name"},{"name":"Ambrose Anderson","location":"Roxanestad","email":"earl.wiegand@baumbach.name","website":"www.hansen.org"},{"name":"Rowland Gorczany","location":"Quigleyberg","email":"elvis_becker@corwinberge.info","website":"www.aufderhar.name"},{"name":"Lourdes Willms","location":"Hickleshire","email":"ru@marquardtmoen.biz","website":"www.mosciski.com"},{"name":"Dave Hahn","location":"Lanceview","email":"abdul.homenick@brownmckenzie.net","website":"www.fay.name"},{"name":"Weston Prosacco","location":"Maverickborough","email":"aunta.schinner@dach.biz","website":"www.gusikowskigorczany.org"},{"name":"Antone Von","location":"New Alana","email":"nicholaus_hettinger@schulist.name","website":"www.zboncak.biz"},{"name":"Pat Upton","location":"Jairofurt","email":"marcellus@nienowreynolds.info","website":"www.stroman.net"},{"name":"Clark Murazik","location":"Lake Kody","email":"jaida@heel.info","website":"www.heaney.biz"},{"name":"Patience Skiles","location":"East Travis","email":"patrick_schaden@mcglynn.com","website":"www.mraz.info"},{"name":"Lavina Jacobson","location":"Port Kristyfort","email":"eleonore@kreiger.biz","website":"www.carter.biz"},{"name":"Mike Gerlach","location":"Gutkowskichester","email":"jazlyn@hartmann.com","website":"www.huelsferry.org"},{"name":"Green Rippin","location":"South Dimitri","email":"genoveva.gibson@yost.name","website":"www.pfannerstill.com"},{"name":"Rudolph Jakubowski","location":"Port Daniellafurt","email":"bridgette_hoeger@lakin.net","website":"www.beer.net"},{"name":"Caleb Lubowitz","location":"East Whitneyborough","email":"kraig@zemlak.org","website":"www.mitchell.com"},{"name":"Araceli Monahan","location":"New Heberbury","email":"carlee@davis.org","website":"www.mohr.net"},{"name":"Ruben Wisoky","location":"VonRuedenfort","email":"adela_gusikowski@ohara.biz","website":"www.cummerata.biz"},{"name":"Earnestine Schuster","location":"Port Kieran","email":"arden@kshlerin.org","website":"www.grimesauer.com"},{"name":"Pete Predovic","location":"West Brown","email":"jeanie@rutherford.org","website":"www.thiel.net"},{"name":"Paris Koepp","location":"New Ubaldoburgh","email":"baby.gusikowski@wizatreutel.net","website":"www.pfefferjaskolski.org"},{"name":"Mozelle Boehm","location":"South Reyes","email":"kitty@rau.biz","website":"www.ritchie.net"},{"name":"Austen Baumbach","location":"Georgetteview","email":"mercedes.armstrong@haley.com","website":"www.prohaskabayer.org"},{"name":"Lavonne O'Reilly","location":"West Ella","email":"lew@rodriguez.net","website":"www.gusikowski.info"},{"name":"Mckenzie West","location":"Lake Devin","email":"trever@gerlach.net","website":"www.heller.net"},{"name":"Albertha Schowalter","location":"New Aileenshire","email":"althea_wiegand@goldner.info","website":"www.kaulke.net"},{"name":"Wilhelmine Considine","location":"Port Howard","email":"tre@cronaoberbrunner.info","website":"www.rowe.org"},{"name":"Dina Keebler","location":"Elisaburgh","email":"suzanne@oconnellwilliamson.net","website":"www.parker.org"},{"name":"Jerad Kuphal","location":"Opheliamouth","email":"antonietta_hoppe@herzog.org","website":"www.nicolas.name"},{"name":"Wallace Murazik","location":"Jackview","email":"dameon@nikolausdamore.info","website":"www.morar.info"},{"name":"Christian Hyatt","location":"Kautzershire","email":"fausto_bins@adams.info","website":"www.padberg.name"},{"name":"Kyler Rohan","location":"East Feltonview","email":"pearline@erdmanschuster.com","website":"www.runolfsdottir.com"},{"name":"Alene Walter","location":"East Devante","email":"rozella@borerrenner.info","website":"www.muller.name"},{"name":"Yessenia Veum","location":"Beattyfurt","email":"kathlyn.cremin@stiedemann.info","website":"www.bayer.com"},{"name":"Ally Gerhold","location":"Gibsonville","email":"osvaldo.torp@ullrichlegros.com","website":"www.schoen.biz"},{"name":"Ephraim Kihn","location":"Champlinview","email":"cesar@schultz.info","website":"www.schimmelaltenwerth.net"},{"name":"Flavio Donnelly","location":"New Ole","email":"reina@rau.biz","website":"www.okeefepouros.biz"},{"name":"Kristopher Hermiston","location":"Shanellebury","email":"flo@stiedemann.name","website":"www.hermanwisoky.net"},{"name":"Michale Littel","location":"Marcelinashire","email":"aliya.wyman@steuber.name","website":"www.wintheiser.biz"},{"name":"Brendon Harber","location":"East Griffin","email":"demetrius_kris@cristkaulke.org","website":"www.bruenhoppe.net"},{"name":"Kristian Runolfsdottir","location":"New Omerbury","email":"alvina@luettgen.org","website":"www.kaulkekunde.org"},{"name":"Natalia Bashirian","location":"West Camylleberg","email":"kamron@kirlin.biz","website":"www.nicolasmayer.com"},{"name":"Francisca Purdy","location":"East Lorenamouth","email":"avery@zulaufbeatty.com","website":"www.schultz.info"},{"name":"Esteban Kunze","location":"Walkerside","email":"elyse.olson@lemke.com","website":"www.kulas.com"},{"name":"Angelica Jenkins","location":"South Naomiebury","email":"luciano.parker@schadenpredovic.info","website":"www.witting.info"},{"name":"Jovanny Glover","location":"North Candidaberg","email":"marjolaine_mraz@stamm.org","website":"www.zieme.net"},{"name":"Easton Purdy","location":"Winfieldstad","email":"meta@fadel.net","website":"www.aufderhar.com"},{"name":"Markus Cremin","location":"Fernburgh","email":"deion@abshire.info","website":"www.bins.info"},{"name":"Adrian Harris","location":"Audiefurt","email":"kennedy@nitzsche.info","website":"www.labadie.com"},{"name":"Roberta Predovic","location":"Kihnville","email":"quentin@senger.biz","website":"www.stroman.org"},{"name":"Alejandrin Beatty","location":"Hauckshire","email":"jovan_prosacco@williamson.com","website":"www.haag.biz"},{"name":"Yasmeen Jewess","location":"West Jarod","email":"rhianna.spencer@homenickjohnson.net","website":"www.prosacco.biz"},{"name":"Beryl Kozey","location":"Louieburgh","email":"fern@reynoldskutch.org","website":"www.bailey.net"},{"name":"Earl Will","location":"Lake Autumn","email":"mya.spencer@boyle.biz","website":"www.stanton.org"},{"name":"Maurice Hilll","location":"Noeliaberg","email":"annalise_hahn@white.net","website":"www.cruickshank.net"},{"name":"Hiram Anderson","location":"Starkside","email":"rosina.skiles@powlowski.org","website":"www.sanford.name"},{"name":"Taryn Jewess","location":"Martamouth","email":"german@murazik.info","website":"www.farrellkirlin.biz"},{"name":"Marge Bosco","location":"New Brenda","email":"wilber_haag@hettinger.biz","website":"www.beatty.org"},{"name":"Catharine Bahringer","location":"Derekton","email":"verna@smitham.com","website":"www.grady.info"},{"name":"Eleonore Kuvalis","location":"Kendramouth","email":"laurie.greenholt@rodriguez.info","website":"www.ernserwolf.net"},{"name":"Issac Carter","location":"Allisonland","email":"laria.leuschke@nicolas.org","website":"www.shields.name"},{"name":"Terrence Wisozk","location":"East Lindsey","email":"caesar@auer.biz","website":"www.nikolaus.info"},{"name":"Donavon Morissette","location":"Staceyview","email":"adrien_altenwerth@christiansen.com","website":"www.cummings.name"},{"name":"Zelda Lindgren","location":"West Carolannetown","email":"eleanore.davis@runolfsdottir.info","website":"www.andersonhamill.org"},{"name":"Darius Bergnaum","location":"Port Jazminborough","email":"anastacio@lesch.org","website":"www.reynoldchimmel.com"},{"name":"Althea Huel","location":"East Joannyton","email":"kyler.shields@mckenzie.biz","website":"www.spencer.info"},{"name":"Esperanza Lindgren","location":"South Sincere","email":"jazlyn@heathcote.com","website":"www.rolfson.com"},{"name":"Devonte Boyer","location":"North Adrianachester","email":"petra_moriette@yundt.biz","website":"www.mraz.biz"},{"name":"Roman Heathcote","location":"North Fayeton","email":"marlin_greenholt@kshlerin.org","website":"www.harvey.com"},{"name":"Julius Barrows","location":"Stokeston","email":"estevan_borer@stoltenberg.name","website":"www.howell.org"},{"name":"Marlen Kub","location":"Metaview","email":"vivien.halvorson@roberts.biz","website":"www.schustergusikowski.net"},{"name":"Gwen Fisher","location":"Leannonchester","email":"sherwood@cartwrightlynch.name","website":"www.keelinghyatt.net"},{"name":"Ariel Davis","location":"Garlandchester","email":"reina_mann@strosin.name","website":"www.ko.info"},{"name":"Ceasar Breitenberg","location":"West Sigmund","email":"rex.blanda@fritsch.biz","website":"www.padberg.biz"},{"name":"Olin Weimann","location":"Port Jeffmouth","email":"dimitri.mclaughlin@hoeger.com","website":"www.schmeler.org"},{"name":"Cara Jones","location":"Keelingfort","email":"hubert.crist@goldner.name","website":"www.bailey.biz"},{"name":"Cesar Nicolas","location":"Kesslerside","email":"beaulah@waters.com","website":"www.kerluke.info"},{"name":"Elise Reynolds","location":"Norbertoton","email":"fanny@breitenberg.com","website":"www.durgan.org"},{"name":"Oswaldo Haag","location":"North Dahliaton","email":"rhett.bogan@abshire.biz","website":"www.heelrohan.net"},{"name":"Amya Veum","location":"Estellaton","email":"stewart@hammeskuhlman.org","website":"www.boganschmeler.org"},{"name":"Mable Williamson","location":"East Jaycefurt","email":"vernie@klingrowe.biz","website":"www.larkin.name"},{"name":"Orlo Simonis","location":"Gloverbury","email":"jacques@dietrich.org","website":"www.jones.info"},{"name":"Loyal Collier","location":"Isobelland","email":"abdiel_torp@okeefe.com","website":"www.hagenesjewe.name"},{"name":"Evelyn Okuneva","location":"New Cade","email":"robin@wunsch.biz","website":"www.wolff.info"},{"name":"Justina Swift","location":"East Masonland","email":"stephan@wilkinsonhermann.biz","website":"www.bernier.biz"},{"name":"Jayde Lehner","location":"Svenview","email":"ivory@wehner.org","website":"www.rowe.name"},{"name":"Ima Murray","location":"Port Ronny","email":"marcelino.schumm@trantow.net","website":"www.ryan.info"},{"name":"Ignatius Kunze","location":"Mablemouth","email":"connor.ferry@bednar.info","website":"www.beahan.biz"},{"name":"Alexie Kohler","location":"South Zaria","email":"leonardo@dibbert.com","website":"www.beier.biz"},{"name":"Lorena Mohr","location":"Port Rachelleport","email":"jerrell_lockman@turner.org","website":"www.hane.name"}]
|
|
File without changes
|
|
File without changes
|