workarea-super_hero 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +15 -0
- data/.eslintrc +26 -0
- data/.gitignore +11 -0
- data/.jshintrc +37 -0
- data/.rails-rubocop.yml +119 -0
- data/.rubocop.yml +12 -0
- data/.scss-lint.yml +188 -0
- data/CHANGELOG.md +334 -0
- data/Gemfile +5 -0
- data/README.md +120 -0
- data/Rakefile +60 -0
- data/app/assets/images/workarea/admin/content_block_types/super_hero.svg +1 -0
- data/app/assets/images/workarea/svg/position_grid.svg +38 -0
- data/app/assets/javascripts/workarea/admin/super_hero/modules/media_modes.js +54 -0
- data/app/assets/javascripts/workarea/admin/super_hero/modules/position_input.js +59 -0
- data/app/assets/javascripts/workarea/storefront/super_hero/modules/vimeo_api.js +85 -0
- data/app/assets/javascripts/workarea/storefront/super_hero/modules/youtube_api.js +122 -0
- data/app/assets/stylesheets/workarea/admin/super_hero/components/_position_grid.scss +27 -0
- data/app/assets/stylesheets/workarea/storefront/super_hero/components/_content_position.scss +46 -0
- data/app/assets/stylesheets/workarea/storefront/super_hero/components/_super_hero_content_block.scss +69 -0
- data/app/models/workarea/content/fields/media_mode.rb +8 -0
- data/app/models/workarea/content/fields/video_advanced.rb +8 -0
- data/app/services/workarea/storefront/color_tools.rb +24 -0
- data/app/services/workarea/storefront/video_embedder/vimeo.rb +50 -0
- data/app/services/workarea/storefront/video_embedder/youtube.rb +56 -0
- data/app/services/workarea/storefront/video_embedder.rb +59 -0
- data/app/view_models/workarea/storefront/content_blocks/super_hero_view_model.rb +79 -0
- data/app/views/workarea/admin/content_blocks/_media_mode.html.haml +3 -0
- data/app/views/workarea/admin/content_blocks/_video_advanced.html.haml +12 -0
- data/app/views/workarea/admin/content_blocks/types/_super_hero.html.haml +106 -0
- data/app/views/workarea/storefront/content_blocks/_super_hero.html.haml +27 -0
- data/bin/rails +18 -0
- data/config/initializers/appends.rb +42 -0
- data/config/initializers/content_block_types.rb +49 -0
- data/config/locales/en.yml +23 -0
- data/config/routes.rb +2 -0
- data/lib/workarea/super_hero/engine.rb +8 -0
- data/lib/workarea/super_hero/version.rb +5 -0
- data/lib/workarea/super_hero.rb +11 -0
- data/script/admin_ci +9 -0
- data/script/ci +11 -0
- data/script/core_ci +9 -0
- data/script/plugins_ci +9 -0
- data/script/storefront_ci +9 -0
- data/super_hero_logo.svg +15 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +54 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/new_framework_defaults.rb +18 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/services/workarea/storefront/color_tools_test.rb +32 -0
- data/test/services/workarea/storefront/video_embedder_test.rb +52 -0
- data/test/test_helper.rb +10 -0
- data/test/view_models/workarea/storefront/super_hero_view_model_test.rb +38 -0
- data/workarea-super_hero.gemspec +18 -0
- metadata +158 -0
data/CHANGELOG.md
ADDED
@@ -0,0 +1,334 @@
|
|
1
|
+
Workarea Super Hero 2.2.1 (2019-08-21)
|
2
|
+
--------------------------------------------------------------------------------
|
3
|
+
|
4
|
+
* Open Source!
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
Workarea Super Hero 2.2.0 (2019-06-11)
|
9
|
+
--------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
* Make image clickable when link is present
|
12
|
+
|
13
|
+
Uses the new link_to_if_with_block helper from Workarea v3.4 to make the background image clickable if a link URL is provided
|
14
|
+
|
15
|
+
WLSUPERHRO-21
|
16
|
+
Jake Beresford
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Workarea Super Hero 2.1.1 (2018-10-02)
|
21
|
+
--------------------------------------------------------------------------------
|
22
|
+
|
23
|
+
* Add alt text to super hero when using 'switch' media mode
|
24
|
+
|
25
|
+
WLSUPERHRO-28
|
26
|
+
Jake Beresford
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
Workarea Super Hero 2.1.0 (2018-05-31)
|
31
|
+
--------------------------------------------------------------------------------
|
32
|
+
|
33
|
+
* Remove range field
|
34
|
+
|
35
|
+
The Range field was added to the Workarea platform in v3.3, this functionality has been removed from super hero to prevent conflicts and ensure compatibility.
|
36
|
+
|
37
|
+
WLSUPERHRO-26
|
38
|
+
Jake Beresford
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
Workarea Super Hero 2.0.5 (2018-05-24)
|
43
|
+
--------------------------------------------------------------------------------
|
44
|
+
|
45
|
+
* WLSUPERHRO-25: Add guard for if video APIs have already been added
|
46
|
+
|
47
|
+
Steve Perks
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
Workarea Super Hero v2.0.4 (2018-02-12)
|
52
|
+
--------------------------------------------------------------------------------
|
53
|
+
|
54
|
+
* Fix admin duplicate IDs in SVG icon
|
55
|
+
|
56
|
+
Jake Beresford
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
Workarea Super Hero v2.0.3 (2018-02-08)
|
61
|
+
--------------------------------------------------------------------------------
|
62
|
+
|
63
|
+
* Fix appends lambda
|
64
|
+
|
65
|
+
Jake Beresford
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
Workarea Super Hero v2.0.2 (2018-01-11)
|
70
|
+
--------------------------------------------------------------------------------
|
71
|
+
|
72
|
+
* Add missing methods to range.rb
|
73
|
+
|
74
|
+
Jake Beresford
|
75
|
+
|
76
|
+
* Add condition around range_field.js append
|
77
|
+
|
78
|
+
This module is also defined in the slider_block plugin, causing an error if both plugins are loaded in a host application. This condition helps prevent JS errors in the admin due to registering 2 modules with the same name.
|
79
|
+
|
80
|
+
WLSUPERHRO-22
|
81
|
+
Jake Beresford
|
82
|
+
|
83
|
+
* Add step attribute to range input
|
84
|
+
|
85
|
+
* Update range input for compatibility with workarea-slider_block
|
86
|
+
* Set default step value to 1, since we're dealing with % I doubt this will ever need to change
|
87
|
+
|
88
|
+
WLSUPERHRO-22
|
89
|
+
Jake Beresford
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
Workarea Super Hero v2.0.1 (2017-06-06)
|
94
|
+
--------------------------------------------------------------------------------
|
95
|
+
|
96
|
+
* Updates for CI
|
97
|
+
|
98
|
+
* Remove bundler gem tasks to prevent pushing to rubygems
|
99
|
+
* Rubocop passing
|
100
|
+
* add bundle-audit for CI
|
101
|
+
Beresford, Jake
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
Workarea Super Hero v2.0.0 (2017-05-19)
|
106
|
+
--------------------------------------------------------------------------------
|
107
|
+
|
108
|
+
* Fixes mute functionality for vimeo
|
109
|
+
|
110
|
+
* Upgrade to the latest vimeo player API, remove froogaloop.
|
111
|
+
* Fix vimeo event implementation
|
112
|
+
* refactor video embedder nokogiri traversal
|
113
|
+
* Fix some tests that were broken on another ticket
|
114
|
+
* Move logic for adding video service api data binding into the video embedder.
|
115
|
+
* Split video embedder logic by service
|
116
|
+
* Request vimeo and youtube SDK as necessary using getScript
|
117
|
+
* Implement youtube_api.js module
|
118
|
+
* Move append points to initializer
|
119
|
+
* Updated readme
|
120
|
+
|
121
|
+
WLSUPERHRO-15
|
122
|
+
Beresford, Jake
|
123
|
+
|
124
|
+
* Responsive images fall back to asset if undefined by admin user.
|
125
|
+
|
126
|
+
* updated view_model syntax to be same as base content blocks
|
127
|
+
|
128
|
+
WLSUPERHRO-17
|
129
|
+
Beresford, Jake
|
130
|
+
|
131
|
+
* Translate admin views
|
132
|
+
|
133
|
+
WLSUPERHRO-16
|
134
|
+
Dave Barnow
|
135
|
+
|
136
|
+
* Upgrade plugin for v3 compatability
|
137
|
+
|
138
|
+
Many things were changed to get this working, however
|
139
|
+
functionality is almost identical to v2. Key changes:
|
140
|
+
|
141
|
+
* Re-write blocktype using DSL
|
142
|
+
* Re-name workarea & storefront
|
143
|
+
* Asset lookup for size & ratio removed, use base asset lookup
|
144
|
+
* Removed color input styles, use base color input
|
145
|
+
* Tests converted to minitest
|
146
|
+
|
147
|
+
WLSUPERHRO-14
|
148
|
+
Beresford, Jake
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
Workarea Super Hero v1.0.7 (2016-12-15)
|
153
|
+
--------------------------------------------------------------------------------
|
154
|
+
|
155
|
+
* WLSUPERHRO-13: Add require version file to super_hero.rb add metadata to gemspec
|
156
|
+
|
157
|
+
Beresford, Jake
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
Workarea Super Hero v1.0.6 (2016-07-20)
|
162
|
+
--------------------------------------------------------------------------------
|
163
|
+
|
164
|
+
* WLSUPERHRO-10: Adds another blank line for code style
|
165
|
+
|
166
|
+
Dave Barnow
|
167
|
+
|
168
|
+
* WLSUPERHRO-10: Adds back in blank lines to conform to cssguidelin.es
|
169
|
+
|
170
|
+
Dave Barnow
|
171
|
+
|
172
|
+
* WLSUPERHRO-10: Fixes center positioning, readme markdown formatting
|
173
|
+
|
174
|
+
Dave Barnow
|
175
|
+
|
176
|
+
|
177
|
+
|
178
|
+
Workarea Super Hero v1.0.5 (2016-06-30)
|
179
|
+
--------------------------------------------------------------------------------
|
180
|
+
|
181
|
+
* WLSUPERHRO-9: Adds preset for media to prevent admin errors
|
182
|
+
|
183
|
+
Beresford, Jake
|
184
|
+
|
185
|
+
* WLSUPERHRO-9: Change logic when checking for embed codes to cover nil? and empty?
|
186
|
+
|
187
|
+
Beresford, Jake
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
Workarea Super Hero v1.0.4 (2016-06-29)
|
192
|
+
--------------------------------------------------------------------------------
|
193
|
+
|
194
|
+
* WLSUPERHRO-8: Fix range slider
|
195
|
+
|
196
|
+
Beresford, Jake
|
197
|
+
|
198
|
+
|
199
|
+
|
200
|
+
Workarea Super Hero v1.0.3 (2016-06-15)
|
201
|
+
--------------------------------------------------------------------------------
|
202
|
+
|
203
|
+
* WLSUPERHRO-7: Add test for youtube embed codes
|
204
|
+
|
205
|
+
Beresford, Jake
|
206
|
+
|
207
|
+
* WLSUPERHRO-7: change vimeo conditional to guard clause
|
208
|
+
|
209
|
+
Beresford, Jake
|
210
|
+
|
211
|
+
* WLSUPERHRO-7: return iframe attrs in video embedder to fix issue with youtube videos having nil attrs
|
212
|
+
|
213
|
+
Beresford, Jake
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
Workarea Super Hero v1.0.1 (2016-05-31)
|
218
|
+
--------------------------------------------------------------------------------
|
219
|
+
|
220
|
+
* WLSUPERHRO-6: Explicitly require froogaloop
|
221
|
+
|
222
|
+
bberg
|
223
|
+
|
224
|
+
|
225
|
+
|
226
|
+
Workarea Super Hero v1.0.0 (2016-05-26)
|
227
|
+
--------------------------------------------------------------------------------
|
228
|
+
|
229
|
+
* WLSUPERHRO-4: Remove logic for ga tracker detection
|
230
|
+
|
231
|
+
Beresford, Jake
|
232
|
+
|
233
|
+
* WLSUPERHRO-4: Fix pause event data and player_id
|
234
|
+
|
235
|
+
Beresford, Jake
|
236
|
+
|
237
|
+
* WLSUPERHRO-4: Add jsdoc comment
|
238
|
+
|
239
|
+
Beresford, Jake
|
240
|
+
|
241
|
+
* WLSUPERHRO-4: change implementation to use WEBLINC.analytics
|
242
|
+
|
243
|
+
Beresford, Jake
|
244
|
+
|
245
|
+
* WLSUPERHRO-4: Add vimeo event tracking for video interactions
|
246
|
+
|
247
|
+
Beresford, Jake
|
248
|
+
|
249
|
+
* WLSUPERHRO-4: move color and video embed classes out of view models and in to services, fix up tests accordingly
|
250
|
+
|
251
|
+
Beresford, Jake
|
252
|
+
|
253
|
+
* WLSUPERHRO-4: Fixes froogaloop integration, makes things work properly.
|
254
|
+
|
255
|
+
Beresford, Jake
|
256
|
+
|
257
|
+
* WLSUPERHRO-4: Adds vimeo api integration using froogaloop JS
|
258
|
+
|
259
|
+
Beresford, Jake
|
260
|
+
|
261
|
+
* WLSUPERHRO-2: Removes debugging statements and cleanup ruby style
|
262
|
+
|
263
|
+
Beresford, Jake
|
264
|
+
|
265
|
+
* WLSUPERHERO-2: Adds tests and refactor for video_embed_view_model
|
266
|
+
|
267
|
+
Beresford, Jake
|
268
|
+
|
269
|
+
* Complete color view model unit tests, refactor view model to remove args
|
270
|
+
|
271
|
+
Beresford, Jake
|
272
|
+
|
273
|
+
* WLSUPERHRO-2: Update spec tests, add tests for color view model
|
274
|
+
|
275
|
+
Beresford, Jake
|
276
|
+
|
277
|
+
* WLSUPERHRO-2: Break out color and video embed methods into classes, start writing unit tests
|
278
|
+
|
279
|
+
Beresford, Jake
|
280
|
+
|
281
|
+
* Update aspect ratio calculation, remove dummy hero image
|
282
|
+
|
283
|
+
Beresford, Jake
|
284
|
+
|
285
|
+
* Cleanup haml file dynamic classes and symbol syntax
|
286
|
+
|
287
|
+
Beresford, Jake
|
288
|
+
|
289
|
+
* Improve some JS logic, cleanup some sass spacing, get everything looking groovy
|
290
|
+
|
291
|
+
Beresford, Jake
|
292
|
+
|
293
|
+
* Decorate Content::Asset with dragonfly magic attributes, cleanup viewmodel and remove call to S3 for each view of the blocktype
|
294
|
+
|
295
|
+
Beresford, Jake
|
296
|
+
|
297
|
+
* Cleanup rake task and JS
|
298
|
+
|
299
|
+
Beresford, Jake
|
300
|
+
|
301
|
+
* Clean up the turtle's cape
|
302
|
+
|
303
|
+
Beresford, Jake
|
304
|
+
|
305
|
+
* Add necessary files for content block plugin
|
306
|
+
|
307
|
+
Clean up the filez
|
308
|
+
updates to view model and add range for bg alpha channel
|
309
|
+
add basic styles, fixup the view model, add some sweet color pickers, add markup for responsive images and media modes
|
310
|
+
Adds color picker styles, additional config options, position input SVG, SVg helper, media modes and toggle groups.
|
311
|
+
Some fixes and placeholders and other things I needed to fix before the demo. Position input is a POS and doesnt work yet.
|
312
|
+
Adds image attribute detection using dragonfly analysers
|
313
|
+
Get the content position input working, rename some things, shuffle things about
|
314
|
+
Simplify filename regex, remove extraneous styles
|
315
|
+
Clean up content position styles
|
316
|
+
Simplify content class in view model
|
317
|
+
Pulls responsive images out of maintain aspect ratio, clen up the view model some more, rename some local_assigns
|
318
|
+
Bring content area controls into admin view
|
319
|
+
Modify media-mode groups to use array.includes to give more flexibility in the UI
|
320
|
+
Get video embeds working for youtube and vimeo. Code needs TLC but it works for now.
|
321
|
+
Fixes logic around video vs. image
|
322
|
+
Clean up content position scss component
|
323
|
+
Fixes nesting of position input
|
324
|
+
Refactor content position logic and styles for less CSS
|
325
|
+
Js changes to position input
|
326
|
+
Remove use of this in js
|
327
|
+
Clean up media_modes js
|
328
|
+
Add lintier config dotfiles
|
329
|
+
Remove generic content-block classes
|
330
|
+
|
331
|
+
Beresford, Jake
|
332
|
+
|
333
|
+
|
334
|
+
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
Workarea Super Hero
|
2
|
+
================================================================================
|
3
|
+
|
4
|
+
>Give your content super powers!
|
5
|
+
|
6
|
+
Super Hero plugin for the Workarea platform.
|
7
|
+
|
8
|
+
Configuring Super Hero for your app
|
9
|
+
--------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
Superhero implements a content block type which no longer requires any initial
|
12
|
+
configuration. You may wish to override the config for the block type in order
|
13
|
+
to change the preset colors for background and text color pickers.
|
14
|
+
|
15
|
+
What Super Hero Does
|
16
|
+
--------------------------------------------------------------------------------
|
17
|
+
Super hero provides a fleshed out set of content tools that allows admin users to deliver beautiful content easily.
|
18
|
+
|
19
|
+
## Media Modes
|
20
|
+
|
21
|
+
Media Modes offers a set of options that dictate how media will be rendered
|
22
|
+
|
23
|
+
### Resize mode
|
24
|
+
|
25
|
+
Stretches/squishes media to fit the viewport or container.
|
26
|
+
|
27
|
+
automatically deteects and retains the aspect ratio of the chosen media
|
28
|
+
|
29
|
+
### Crop Mode
|
30
|
+
|
31
|
+
Allows the admin to select a 'crop to' location (left, center, right)
|
32
|
+
|
33
|
+
The image will maintain it's original height and crop to the designated location as the browser is resized
|
34
|
+
|
35
|
+
### Switch Mode
|
36
|
+
|
37
|
+
Allows the user to select up to 3 images which are rendered as a <picture> element
|
38
|
+
|
39
|
+
### Video Mode
|
40
|
+
|
41
|
+
Provides the Admin user with a text area input to paste in a full embed code from Vimeo or Youtube
|
42
|
+
|
43
|
+
The full iframe embed code must be provided, this will be parsed in the view model and constructed into a responsive iframe on the store front.
|
44
|
+
|
45
|
+
## Color Pickers
|
46
|
+
|
47
|
+
Super hero provides a full color picker for both text and background colors. Brand colors can be configured on a per-installation basis inside the super_hero_tasks.rake file.
|
48
|
+
|
49
|
+
The background color picker also provides a range slider and text input to control opacity. This accepts values between 0 - 100 and is converted to an alpha channel in the view model.
|
50
|
+
|
51
|
+
>Currently browser support for input type='color' is patchy, a polyfill is in the works to allow users on unsupported browsers to use this functionality.
|
52
|
+
|
53
|
+
## Content Positioning
|
54
|
+
|
55
|
+
The admin user is able to select from 9 content positions using a sweet SVG UI element. By default a position offset of 5% is defined, you can override the $positioning-offset scss variable in your host application to customize the space between content and the edge of the block.
|
56
|
+
|
57
|
+
|
58
|
+
Video Embedder
|
59
|
+
--------------------------------------------------------------------------------
|
60
|
+
|
61
|
+
Super hero includes a VideoEmbedder service which parses youtube and vimeo iframes
|
62
|
+
and generates iframe parameters.
|
63
|
+
The embedder accepts the iframe embed code and a set of options.
|
64
|
+
Options are part of the advanced_video Content::Field and include: loop, autoplay,
|
65
|
+
and mute functionality.
|
66
|
+
|
67
|
+
The plugin also includes js player API integrations for youtube and vimeo.
|
68
|
+
This enables the mute functionality and fires events to Workarea analytics.js.
|
69
|
+
In order to use those analytics events in your host application you will need
|
70
|
+
to write analytics adapter callbacks for the service you wish to send the data to.
|
71
|
+
|
72
|
+
Example callbacks:
|
73
|
+
```
|
74
|
+
'vimeo': function (payload) {
|
75
|
+
send('send', payload.eventCategory, payload.eventAction, payload.eventLabel, payload.eventValue);
|
76
|
+
},
|
77
|
+
|
78
|
+
'youtube': function (payload) {
|
79
|
+
send('send', payload.eventCategory, payload.eventAction, payload.eventLabel, payload.eventValue);
|
80
|
+
},
|
81
|
+
```
|
82
|
+
|
83
|
+
Getting Started
|
84
|
+
--------------------------------------------------------------------------------
|
85
|
+
|
86
|
+
This gem contains a rails engine that must be mounted onto a host Rails application.
|
87
|
+
|
88
|
+
You must have access to a WebLinc gems server to use this gem. Add your gems server credentials to Bundler:
|
89
|
+
|
90
|
+
bundle config gems.weblinc.com my_username:my_password
|
91
|
+
|
92
|
+
Or set the appropriate environment variable in a shell startup file:
|
93
|
+
|
94
|
+
export BUNDLE_GEMS__WEBLINC__COM='my_username:my_password'
|
95
|
+
|
96
|
+
Then add the gem to your application's Gemfile specifying the source:
|
97
|
+
|
98
|
+
# ...
|
99
|
+
gem 'workarea-super_hero', source: 'https://gems.weblinc.com'
|
100
|
+
# ...
|
101
|
+
|
102
|
+
Or use a source block:
|
103
|
+
|
104
|
+
# ...
|
105
|
+
source 'https://gems.weblinc.com' do
|
106
|
+
gem 'workarea-super_hero'
|
107
|
+
end
|
108
|
+
# ...
|
109
|
+
|
110
|
+
Update your application's bundle.
|
111
|
+
|
112
|
+
cd path/to/application
|
113
|
+
bundle
|
114
|
+
|
115
|
+
Copyright & Licensing
|
116
|
+
--------------------------------------------------------------------------------
|
117
|
+
|
118
|
+
Copyright WebLinc 2015. All rights reserved.
|
119
|
+
|
120
|
+
For licensing, contact sales@workarea.com.
|
data/Rakefile
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
9
|
+
rdoc.rdoc_dir = 'rdoc'
|
10
|
+
rdoc.title = 'SuperHero'
|
11
|
+
rdoc.options << '--line-numbers'
|
12
|
+
rdoc.rdoc_files.include('README.md')
|
13
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
14
|
+
end
|
15
|
+
|
16
|
+
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
|
17
|
+
load 'rails/tasks/engine.rake'
|
18
|
+
load 'rails/tasks/statistics.rake'
|
19
|
+
load 'workarea/changelog.rake'
|
20
|
+
|
21
|
+
require 'rake/testtask'
|
22
|
+
Rake::TestTask.new(:test) do |t|
|
23
|
+
t.libs << 'lib'
|
24
|
+
t.libs << 'test'
|
25
|
+
t.pattern = 'test/**/*_test.rb'
|
26
|
+
t.verbose = false
|
27
|
+
end
|
28
|
+
task default: :test
|
29
|
+
|
30
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
31
|
+
require 'workarea/super_hero/version'
|
32
|
+
|
33
|
+
desc "Release version #{Workarea::SuperHero::VERSION} of the gem"
|
34
|
+
task :release do
|
35
|
+
host = "https://#{ENV['BUNDLE_GEMS__WEBLINC__COM']}@gems.weblinc.com"
|
36
|
+
|
37
|
+
#Rake::Task['workarea:changelog'].execute
|
38
|
+
#system 'git add CHANGELOG.md'
|
39
|
+
#system 'git commit -m "Update CHANGELOG"'
|
40
|
+
#system 'git push origin HEAD'
|
41
|
+
|
42
|
+
system "git tag -a v#{Workarea::SuperHero::VERSION} -m 'Tagging #{Workarea::SuperHero::VERSION}'"
|
43
|
+
system 'git push --tags'
|
44
|
+
|
45
|
+
system 'gem build workarea-super_hero.gemspec'
|
46
|
+
system "gem push workarea-super_hero-#{Workarea::SuperHero::VERSION}.gem"
|
47
|
+
system "gem push workarea-super_hero-#{Workarea::SuperHero::VERSION}.gem --host #{host}"
|
48
|
+
system "rm workarea-super_hero-#{Workarea::SuperHero::VERSION}.gem"
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'Run the JavaScript tests'
|
52
|
+
ENV['TEASPOON_RAILS_ENV'] = File.expand_path('../test/dummy/config/environment', __FILE__)
|
53
|
+
task teaspoon: 'app:teaspoon'
|
54
|
+
|
55
|
+
desc 'Start a server at http://localhost:3000/teaspoon for JavaScript tests'
|
56
|
+
task :teaspoon_server do
|
57
|
+
Dir.chdir('test/dummy')
|
58
|
+
teaspoon_env = File.expand_path('../test/teaspoon_env.rb', __FILE__)
|
59
|
+
system "RAILS_ENV=test TEASPOON_ENV=#{teaspoon_env} rails s"
|
60
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 40.93"><defs><style>.super-hero-icon__path{fill:#fff;}</style></defs><title>Super hero</title><path d="M58.75,35.93a5,5,0,0,1-5,5H10.25a5,5,0,0,1-5-5V5a5,5,0,0,1,5-5h43.5a5,5,0,0,1,5,5Z"/><path class="super-hero-icon__path" d="M46.76,4.3H17.24l-5.16,9.38L32,36.63,51.92,13.68ZM32,33.23,19.46,18.51l-3.28-3.78h.06L15,13.3l1.67-3L18.6,6.83v0l.08-.15h26.8L49,13.33l-1.19,1.4h.05l-3,3.41Z"/><path class="super-hero-icon__path" d="M32.54,11.09a.76.76,0,0,1,.22.55,1,1,0,0,1-.09.35l-2.93,7a1.05,1.05,0,0,1-.37.45,1,1,0,0,1-.56.18h-.15a1,1,0,0,1-.56-.18,1,1,0,0,1-.37-.45l-2.95-7a.94.94,0,0,1-.09-.35.76.76,0,0,1,.22-.54.72.72,0,0,1,.54-.23.74.74,0,0,1,.41.13.74.74,0,0,1,.28.31l2.58,6.52,2.58-6.54a.73.73,0,0,1,.28-.31.74.74,0,0,1,.41-.13A.72.72,0,0,1,32.54,11.09Z"/><path class="super-hero-icon__path" d="M39.08,11.09a.72.72,0,0,0-.54-.24.74.74,0,0,0-.41.13.73.73,0,0,0-.28.31l-2.57,6.54L33.6,13.59l-.81,1.92L34.25,19a1,1,0,0,0,.37.45,1,1,0,0,0,.56.18h.17a1,1,0,0,0,.56-.18,1.05,1.05,0,0,0,.37-.45l2.93-7a1,1,0,0,0,.09-.35A.76.76,0,0,0,39.08,11.09Z"/></svg>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<svg id="position_grid" class="position-grid" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150">
|
2
|
+
<g id="top-left">
|
3
|
+
<path class="position-grid__cell" d="M1 1h49.9v50.2H1z"/>
|
4
|
+
<path class="position-grid__cell-path" d="M49.4 2.5v47.2H2.5V2.5h46.9m3-3H-.5v53.2h52.9V-.5z"/>
|
5
|
+
</g>
|
6
|
+
<g id="top-center">
|
7
|
+
<path class="position-grid__cell" d="M50.1 1H100v50.2H50.1z"/>
|
8
|
+
<path class="position-grid__cell-path" d="M98.4 2.5v47.2H51.6V2.5h46.8m3-3H48.6v53.2h52.9V-.5h-.1z"/>
|
9
|
+
</g>
|
10
|
+
<g id="top-right">
|
11
|
+
<path class="position-grid__cell" d="M99.1 1H149v50.2H99.1z"/>
|
12
|
+
<path class="position-grid__cell-path" d="M147.5 2.5v47.2h-46.9V2.5h46.9m3-3H97.6v53.2h52.9V-.5z"/>
|
13
|
+
</g>
|
14
|
+
<g id="middle-left">
|
15
|
+
<path class="position-grid__cell" d="M1 49.9h49.9v50.2H1z"/>
|
16
|
+
<path class="position-grid__cell-path" d="M49.4 51.4v47.2H2.5V51.4h46.9m3-3H-.5v53.2h52.9V48.4z"/>
|
17
|
+
</g>
|
18
|
+
<g id="middle-center">
|
19
|
+
<path class="position-grid__cell" d="M50.1 49.9H100v50.2H50.1z"/>
|
20
|
+
<path class="position-grid__cell-path" d="M98.4 51.4v47.2H51.6V51.4h46.8m3-3H48.6v53.2h52.9V48.4h-.1z"/>
|
21
|
+
</g>
|
22
|
+
<g id="middle-right">
|
23
|
+
<path class="position-grid__cell" d="M99.1 49.9H149v50.2H99.1z"/>
|
24
|
+
<path class="position-grid__cell-path" d="M147.5 51.4v47.2h-46.9V51.4h46.9m3-3H97.6v53.2h52.9V48.4z"/>
|
25
|
+
</g>
|
26
|
+
<g id="bottom-left">
|
27
|
+
<path class="position-grid__cell" d="M1 98.8h49.9V149H1z"/>
|
28
|
+
<path class="position-grid__cell-path" d="M49.4 100.3v47.2H2.5v-47.2h46.9m3-3H-.5v53.2h52.9V97.3z"/>
|
29
|
+
</g>
|
30
|
+
<g id="bottom-center">
|
31
|
+
<path class="position-grid__cell" d="M50.1 98.8H100V149H50.1z"/>
|
32
|
+
<path class="position-grid__cell-path" d="M98.4 100.3v47.2H51.6v-47.2h46.8m3-3H48.6v53.2h52.9V97.3h-.1z"/>
|
33
|
+
</g>
|
34
|
+
<g id="bottom-right">
|
35
|
+
<path class="position-grid__cell" d="M99.1 98.8H149V149H99.1z"/>
|
36
|
+
<path class="position-grid__cell-path" d="M147.5 100.3v47.2h-46.9v-47.2h46.9m3-3H97.6v53.2h52.9V97.3z"/>
|
37
|
+
</g>
|
38
|
+
</svg>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.mediaModes
|
3
|
+
*/
|
4
|
+
WORKAREA.registerModule('mediaModes', (function () {
|
5
|
+
'use strict';
|
6
|
+
|
7
|
+
var activateOptionGroup = function($group) {
|
8
|
+
$group.removeClass('hidden');
|
9
|
+
},
|
10
|
+
|
11
|
+
deactivateOptionGroup = function ($group) {
|
12
|
+
$group.addClass('hidden');
|
13
|
+
},
|
14
|
+
|
15
|
+
triggerMediaModeChange = function ($optionGroups, mode) {
|
16
|
+
$optionGroups.each(function(index, option) {
|
17
|
+
var $option = $(option);
|
18
|
+
|
19
|
+
if ($option.data('mediaMode').includes(mode)) {
|
20
|
+
activateOptionGroup($option);
|
21
|
+
} else {
|
22
|
+
deactivateOptionGroup($option);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
},
|
26
|
+
|
27
|
+
setInitialState = function($optionGroups, $control) {
|
28
|
+
var selectedOption = $control.val();
|
29
|
+
triggerMediaModeChange($optionGroups, selectedOption);
|
30
|
+
},
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @method
|
34
|
+
* @name init
|
35
|
+
* @memberof WORKAREA.mediaModes
|
36
|
+
*/
|
37
|
+
init = function ($scope) {
|
38
|
+
var $control = $('[data-media-mode="control"]', $scope),
|
39
|
+
$optionGroups = $('[data-media-mode]', $scope).not($control);
|
40
|
+
|
41
|
+
if (_.isEmpty($control) ||
|
42
|
+
_.isEmpty($optionGroups)) { return; }
|
43
|
+
|
44
|
+
setInitialState($optionGroups, $control);
|
45
|
+
|
46
|
+
$control.on('change', function(event) {
|
47
|
+
triggerMediaModeChange($optionGroups, $(event.currentTarget).val());
|
48
|
+
});
|
49
|
+
};
|
50
|
+
|
51
|
+
return {
|
52
|
+
init: init
|
53
|
+
};
|
54
|
+
}()));
|
@@ -0,0 +1,59 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.positionInput
|
3
|
+
*/
|
4
|
+
WORKAREA.registerModule('positionInput', (function () {
|
5
|
+
'use strict';
|
6
|
+
|
7
|
+
var setSelected = function ($svgInput, $selectInput, position) {
|
8
|
+
$svgInput
|
9
|
+
.find('#'+position+' .position-grid__cell')
|
10
|
+
.attr('style', 'fill:#000000');
|
11
|
+
|
12
|
+
$selectInput.val(position).trigger('change');
|
13
|
+
},
|
14
|
+
|
15
|
+
updateSelected = function($svgInput, $selectInput, newPosition) {
|
16
|
+
clearSelected($svgInput);
|
17
|
+
setSelected($svgInput, $selectInput, newPosition);
|
18
|
+
},
|
19
|
+
|
20
|
+
clearSelected = function($svgInput) {
|
21
|
+
$('g .position-grid__cell', $svgInput).each(function(index, cell) {
|
22
|
+
$(cell).attr('style', 'fill: #ffffff');
|
23
|
+
}
|
24
|
+
);
|
25
|
+
},
|
26
|
+
|
27
|
+
bindSVGEvents = function ($svgInput, $selectInput) {
|
28
|
+
$('g', $svgInput).each(function(index, cell) {
|
29
|
+
$(cell).on('click', function(event) {
|
30
|
+
event.preventDefault();
|
31
|
+
var newPosition = $(event.currentTarget).attr('id');
|
32
|
+
updateSelected($svgInput, $selectInput, newPosition);
|
33
|
+
});
|
34
|
+
});
|
35
|
+
},
|
36
|
+
|
37
|
+
setupField = function (index, el) {
|
38
|
+
var $positionInput = $(el),
|
39
|
+
$selectInput = $positionInput.find('select'),
|
40
|
+
$svgInput = $positionInput.find('.position-grid'),
|
41
|
+
position = $selectInput.val();
|
42
|
+
|
43
|
+
setSelected($svgInput, $selectInput, position);
|
44
|
+
bindSVGEvents($svgInput, $selectInput);
|
45
|
+
},
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @method
|
49
|
+
* @name init
|
50
|
+
* @memberof WORKAREA.positionInput
|
51
|
+
*/
|
52
|
+
init = function ($scope) {
|
53
|
+
$('[data-position-input]', $scope).each(setupField);
|
54
|
+
};
|
55
|
+
|
56
|
+
return {
|
57
|
+
init: init
|
58
|
+
};
|
59
|
+
}()));
|