pageflow-linkmap-page 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.jshintignore +1 -0
  4. data/.jshintrc +23 -0
  5. data/CHANGELOG.md +8 -0
  6. data/Gemfile +18 -0
  7. data/README.md +62 -0
  8. data/Rakefile +11 -0
  9. data/app/assets/images/pageflow/linkmap_page/text_only_area_type_pictogram.png +0 -0
  10. data/app/assets/images/pageflow/linkmap_page/themes/default/pictograms/sprite.png +0 -0
  11. data/app/assets/images/pageflow/linkmap_page/themes/default/pictograms/wide.png +0 -0
  12. data/app/assets/images/pageflow/linkmap_page_pictogram.png +0 -0
  13. data/app/assets/images/pageflow/linkmap_page_pictogram_small.png +0 -0
  14. data/app/assets/javascript/pageflow/linkmap_page.js +9 -0
  15. data/app/assets/javascript/pageflow/linkmap_page/editor.js +25 -0
  16. data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +57 -0
  17. data/app/assets/javascript/pageflow/linkmap_page/editor/collections/page_links_collection.js +29 -0
  18. data/app/assets/javascript/pageflow/linkmap_page/editor/config.js +51 -0
  19. data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +15 -0
  20. data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +79 -0
  21. data/app/assets/javascript/pageflow/linkmap_page/editor/models/area_file_selection_handler.js +12 -0
  22. data/app/assets/javascript/pageflow/linkmap_page/editor/models/audio_file_area_type.js +17 -0
  23. data/app/assets/javascript/pageflow/linkmap_page/editor/models/external_link_area_type.js +19 -0
  24. data/app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js +11 -0
  25. data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +33 -0
  26. data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_link_area_type.js +29 -0
  27. data/app/assets/javascript/pageflow/linkmap_page/editor/models/text_only_area_type.js +15 -0
  28. data/app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js +5 -0
  29. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/edit_area.jst.ejs +3 -0
  30. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs +11 -0
  31. data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +44 -0
  32. data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +90 -0
  33. data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +103 -0
  34. data/app/assets/javascript/pageflow/linkmap_page/editor/views/editable_areas_mode_view.js +10 -0
  35. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +190 -0
  36. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +26 -0
  37. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/panorama_embedded_view.js +14 -0
  38. data/app/assets/javascript/pageflow/linkmap_page/features.js +9 -0
  39. data/app/assets/javascript/pageflow/linkmap_page/page_type.js +302 -0
  40. data/app/assets/javascript/pageflow/linkmap_page/vendor/gyro.js +3 -0
  41. data/app/assets/javascript/pageflow/linkmap_page/widgets/hover_video.js +77 -0
  42. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +112 -0
  43. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_player_controls.js +132 -0
  44. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_players_controller.js +48 -0
  45. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround.js +154 -0
  46. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround_strategies/target_speed.js +99 -0
  47. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +421 -0
  48. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_scroll_indicators.js +17 -0
  49. data/app/assets/stylesheets/pageflow/linkmap_page.css.scss +266 -0
  50. data/app/assets/stylesheets/pageflow/linkmap_page/animations/rotate.css.scss +8 -0
  51. data/app/assets/stylesheets/pageflow/linkmap_page/audio_player_controls.scss +134 -0
  52. data/app/assets/stylesheets/pageflow/linkmap_page/editor.css.scss +122 -0
  53. data/app/assets/stylesheets/pageflow/linkmap_page/editor/areas_list.scss +15 -0
  54. data/app/assets/stylesheets/pageflow/linkmap_page/editor/file_areas.css.scss +70 -0
  55. data/app/assets/stylesheets/pageflow/linkmap_page/editor/resizable.css.scss +80 -0
  56. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default.css.scss +341 -0
  57. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/scroll_indicators.scss +82 -0
  58. data/app/controllers/pageflow/external_links/sites_controller.rb +40 -0
  59. data/app/helpers/pageflow/linkmap_page/areas_helper.rb +93 -0
  60. data/app/models/pageflow/linkmap_page/site.rb +11 -0
  61. data/app/views/pageflow/linkmap_page/areas/_div.html.erb +33 -0
  62. data/app/views/pageflow/linkmap_page/page.html +51 -0
  63. data/config/locales/de.yml +119 -0
  64. data/config/locales/en.yml +119 -0
  65. data/config/locales/new/inverted.de.yml +10 -0
  66. data/config/locales/new/inverted.en.yml +10 -0
  67. data/config/locales/new/text_only_area_type.de.yml +11 -0
  68. data/config/locales/new/text_only_area_type.en.yml +11 -0
  69. data/config/routes.rb +5 -0
  70. data/config/spring.rb +1 -0
  71. data/exec/rspec +15 -0
  72. data/exec/spring +18 -0
  73. data/lib/pageflow-linkmap-page.rb +13 -0
  74. data/lib/pageflow/linkmap_page/engine.rb +17 -0
  75. data/lib/pageflow/linkmap_page/page_type.rb +19 -0
  76. data/lib/pageflow/linkmap_page/plugin.rb +9 -0
  77. data/lib/pageflow/linkmap_page/version.rb +5 -0
  78. data/pageflow-linkmap-page.gemspec +37 -0
  79. data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +68 -0
  80. data/spec/spec_helper.rb +15 -0
  81. metadata +265 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b493ac7493f526d49f5805c713a211ba6447de0e
4
+ data.tar.gz: 16e8273aa2955e2abec0d289a3aeb294d6ffb7c5
5
+ SHA512:
6
+ metadata.gz: a1082d4931f516b774ccf34def7f6ac4bc8dd1e3f1a8a30f1676e70646f0ad55da29379cb76ea8074ca53720e2928ce95632fe83b42d510ea72c90a1687f68fa
7
+ data.tar.gz: c42dd554b92d398453024079f6d0c826c0b1a5f77f847c7f1bab77b994da0346f6849069ffc5dd23a6562a55e20cd2e6aa92bf5be131099e9f8e28abe2501a40
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ *.sqlite3
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ log
19
+ Gemfile.lock
20
+ spec/dummy
21
+ .localeapp
@@ -0,0 +1 @@
1
+ vendor/assets/javascripts/**
@@ -0,0 +1,23 @@
1
+ {
2
+ "browser": true,
3
+ "undef": true,
4
+ "immed": true,
5
+ "trailing": true,
6
+ "globals": {
7
+ "jQuery": true,
8
+ "$": true,
9
+ "Backbone": true,
10
+ "Cocktail": true,
11
+ "_": true,
12
+ "vjs": true,
13
+ "Audio5js": true,
14
+ "I18n": true,
15
+ "gyro": true,
16
+
17
+ "pageflow": true,
18
+ "editor": true,
19
+
20
+ "confirm": true,
21
+ "alert": true
22
+ }
23
+ }
@@ -0,0 +1,8 @@
1
+ # CHANGELOG
2
+
3
+ ### Version 0.1.0
4
+
5
+ 2016-06-09
6
+
7
+ - Initial release
8
+
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in chart.gemspec
4
+ gemspec
5
+
6
+ # Rails 4 compat
7
+ gem 'activeadmin', :git => 'https://github.com/codevise/active_admin.git', :branch => 'rails4'
8
+ gem 'ransack'
9
+ gem 'inherited_resources', '1.4.1'
10
+ gem 'formtastic', '2.3.0.rc2'
11
+
12
+ gem 'pageflow', path: '.bundle/linked/pageflow'
13
+ gem 'pageflow-support', path: '.bundle/linked/pageflow/spec/support'
14
+
15
+ gem 'teaspoon', git: 'https://github.com/modeset/teaspoon'
16
+
17
+ gem "spring-commands-rspec", group: :development
18
+ gem "spring-commands-teaspoon", group: :development
@@ -0,0 +1,62 @@
1
+ # Pageflow Linkmap Page
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/pageflow-linkmap-page.svg)](http://badge.fury.io/rb/pageflowlinkmap-page)
4
+
5
+ Page type to display customizable link areas to internal/external
6
+ pages and inline audio players.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's `Gemfile`:
11
+
12
+ gem 'pageflow-linkmap-page'
13
+
14
+ Register the page type inside the configure block in `config/initializers/pageflow.rb`
15
+
16
+ Pageflow.configure do |config|
17
+ config.plugin(Pageflow::LinkmapPage.plugin)
18
+ end
19
+
20
+ Include javascripts and stylesheets:
21
+
22
+ # app/assets/javascripts/pageflow/application.js
23
+ //= require pageflow/linkmap_page
24
+
25
+ # app/assets/javascripts/pageflow/editor.js
26
+ //= require pageflow/linkmap_page/editor
27
+
28
+ # app/assets/stylesheets/pageflow/application.css.scss
29
+ @import "pageflow/linkmap_page";
30
+
31
+ # app/assets/stylesheets/pageflow/editor.css.scss
32
+ @import "pageflow/linkmap_page/editor";
33
+
34
+ Import default theme additions:
35
+
36
+ # app/assets/stylesheets/pageflow/themes/default.css.scss
37
+
38
+ @import "pageflow/linkmap_page/themes/default";
39
+
40
+ /* Display arrows left and right to indicate panorama */
41
+ @import "pageflow/linkmap_page/themes/default/scroll_indicators";
42
+
43
+ Install dependencies:
44
+
45
+ bundle install
46
+
47
+ Restart the application server and enable the corresponding page type
48
+ feature.
49
+
50
+ ## Troubleshooting
51
+
52
+ If you run into problems while installing the page type, please also refer to the
53
+ [Troubleshooting](https://github.com/codevise/pageflow/wiki/Troubleshooting) wiki
54
+ page in the [Pageflow repository](https://github.com/codevise/pageflow). If that
55
+ doesn't help, consider
56
+ [filing an issue](https://github.com/codevise/pageflow-linkmap-page/issues).
57
+
58
+ ## Contributing Locales
59
+
60
+ Edit the translations directly on the
61
+ [pageflow-internal-links](http://www.localeapp.com/projects/public?search=tf/pageflow-linkmap-page)
62
+ locale project.
@@ -0,0 +1,11 @@
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
+ Bundler::GemHelper.install_tasks
8
+
9
+ require 'semmy'
10
+
11
+ Semmy::Tasks.install
@@ -0,0 +1,9 @@
1
+ //= require_self
2
+ //= require ./linkmap_page/features
3
+ //= require ./linkmap_page/page_type
4
+ //= require ./linkmap_page/vendor/gyro
5
+ //= require_tree ./linkmap_page/widgets
6
+
7
+ pageflow.linkmapPage = pageflow.linkmapPage || {};
8
+
9
+ pageflow.linkmapPage.toggleMarkerOptions = ['no_marker', 'dynamic_marker'];
@@ -0,0 +1,25 @@
1
+ //= require_self
2
+
3
+ //= require_tree ./editor/models
4
+ //= require_tree ./editor/collections
5
+ //= require_tree ./editor/routers
6
+ //= require_tree ./editor/controllers
7
+ //= require_tree ./editor/templates
8
+ //= require_tree ./editor/views
9
+
10
+ //= require ./editor/config
11
+
12
+ pageflow.linkmapPage = pageflow.linkmapPage || {};
13
+
14
+ pageflow.linkmapPage.areaTypesFor = function(pageConfiguration) {
15
+ return new Backbone.Collection(_([
16
+ pageflow.linkmapPage.PageLinkAreaType,
17
+ pageflow.linkmapPage.AudioFileAreaType,
18
+ pageflow.linkmapPage.ExternalLinkAreaType,
19
+ pageflow.linkmapPage.TextOnlyAreaType
20
+ ]).map(function(constructor) {
21
+ return new constructor({}, {
22
+ pageConfiguration: pageConfiguration
23
+ });
24
+ }));
25
+ };
@@ -0,0 +1,57 @@
1
+ pageflow.linkmapPage.AreasCollection = Backbone.Collection.extend({
2
+ model: pageflow.linkmapPage.Area,
3
+
4
+ initialize: function(models, options) {
5
+ this.page = options.page;
6
+ this.defaultPosition = {
7
+ left: 10,
8
+ top: 10
9
+ };
10
+ },
11
+
12
+ /**
13
+ * @param [Object, Function] value
14
+ */
15
+ setDefaultPosition: function(value) {
16
+ this.defaultPosition = value;
17
+ },
18
+
19
+ canAddLink: function() {
20
+ return true;
21
+ },
22
+
23
+ addLink: function(targetPageId) {
24
+ this.addWithPosition({
25
+ target_type: 'page',
26
+ target_id: targetPageId
27
+ });
28
+ },
29
+
30
+ addAudioFile: function(audioFileId) {
31
+ this.addWithPosition({
32
+ target_type: 'audio_file',
33
+ target_id: audioFileId
34
+ });
35
+ },
36
+
37
+ addExternalSite: function(siteId) {
38
+ this.addWithPosition({
39
+ target_type: 'external_site',
40
+ target_id: siteId
41
+ });
42
+ },
43
+
44
+ addTextOnly: function() {
45
+ this.addWithPosition({
46
+ target_type: 'text_only'
47
+ });
48
+ },
49
+
50
+ addWithPosition: function(attributes) {
51
+ this.add(_.extend(
52
+ {width: 7, height: 7},
53
+ _.result(this, 'defaultPosition'),
54
+ attributes
55
+ ));
56
+ }
57
+ });
@@ -0,0 +1,29 @@
1
+ pageflow.linkmapPage.PageLinksCollection = pageflow.SubsetCollection.extend({
2
+ constructor: function(options) {
3
+ this.areas = options.areas;
4
+
5
+ pageflow.SubsetCollection.prototype.constructor.call(this, {
6
+ parent: options.areas,
7
+
8
+ filter: function(area) {
9
+ return area.get('target_type') === 'page';
10
+ }
11
+ });
12
+ },
13
+
14
+ canAddLink: function() {
15
+ return this.areas.canAddLink();
16
+ },
17
+
18
+ addLink: function(targetPageId) {
19
+ this.areas.addLink(targetPageId);
20
+ },
21
+
22
+ updateLink: function(link, targetPageId) {
23
+ link.set({target_id: targetPageId});
24
+ },
25
+
26
+ removeLink: function(link) {
27
+ this.remove(link);
28
+ },
29
+ });
@@ -0,0 +1,51 @@
1
+ pageflow.editor.pageTypes.register('linkmap_page', {
2
+ configurationEditorView: pageflow.linkmapPage.ConfigurationEditorView,
3
+
4
+ embeddedViews: {
5
+ '.scroller': {
6
+ view: pageflow.linkmapPage.PanoramaEmbeddedView,
7
+ options: {
8
+ disableMarginScrollingPropertyName: 'areas_editable'
9
+ }
10
+ },
11
+
12
+ '.panorama_image': {
13
+ view: pageflow.BackgroundImageEmbeddedView,
14
+ options: {
15
+ propertyName: 'panorama_image_id',
16
+ dataSizeAttributes : true
17
+ }
18
+ },
19
+
20
+ '.panorama_video': {
21
+ view: pageflow.LazyVideoEmbeddedView,
22
+ options: {
23
+ propertyName: 'panorama_video_id',
24
+ dataSizeAttributes: true
25
+ }
26
+ },
27
+
28
+ '.linkmap_areas': {
29
+ view: pageflow.linkmapPage.AreasEmbeddedView
30
+ },
31
+
32
+ '.fixed_background': {
33
+ view: pageflow.BackgroundImageEmbeddedView,
34
+ options: {propertyName: 'fixed_background_image_id'}
35
+ }
36
+ },
37
+
38
+ pageLinks: function(configuration) {
39
+ return configuration.linkmapPageLinks();
40
+ }
41
+ });
42
+
43
+ pageflow.editor.registerPageConfigurationMixin(pageflow.linkmapPage.pageConfigurationMixin);
44
+
45
+ pageflow.editor.registerFileSelectionHandler('linkmapPage.area', pageflow.linkmapPage.AreaFileSelectionHandler);
46
+ pageflow.editor.registerFileSelectionHandler('linkmapPage.newArea', pageflow.linkmapPage.NewAreaFileSelectionHandler);
47
+
48
+ pageflow.editor.registerSideBarRouting({
49
+ router: pageflow.linkmapPage.SideBarRouter,
50
+ controller: pageflow.linkmapPage.SideBarController
51
+ });
@@ -0,0 +1,15 @@
1
+ pageflow.linkmapPage.SideBarController = Backbone.Marionette.Controller.extend({
2
+ initialize: function(options) {
3
+ this.region = options.region;
4
+ },
5
+
6
+ area: function(pageId, areaIndex) {
7
+ var page = pageflow.pages.get(pageId);
8
+
9
+ this.region.show(new pageflow.linkmapPage.EditAreaView({
10
+ model: page.configuration.linkmapAreas().at(parseInt(areaIndex, 10)),
11
+ page: page,
12
+ areaIndex: areaIndex
13
+ }));
14
+ }
15
+ });
@@ -0,0 +1,79 @@
1
+ pageflow.linkmapPage.Area = Backbone.Model.extend({
2
+ modelName: 'area',
3
+ i18nKey: 'pageflow/linkmap_page/area',
4
+
5
+ mixins: [pageflow.transientReferences],
6
+
7
+ target: function() {
8
+ // This should eventually be replaces with some sort of
9
+ // polymorphic lookup for referenceable objects i.e.
10
+ //
11
+ // pageflow.xxx.getPolymorphic(this.get('target_type'), this.get('target_id'));
12
+ //
13
+ if (this.get('target_type') === 'audio_file') {
14
+ return pageflow.audioFiles.get(this.get('target_id'));
15
+ }
16
+ else if (this.get('target_type') === 'page') {
17
+ return pageflow.pages.getByPermaId(this.get('target_id'));
18
+ }
19
+ else if (this.get('target_type') === 'external_site') {
20
+ return pageflow.externalLinks.sites.getByPermaId(this.get('target_id'));
21
+ }
22
+ },
23
+
24
+ targetPage: function() {
25
+ return this.get('target_type') === 'page' ? this.target() : null;
26
+ },
27
+
28
+ title: function() {
29
+ var target = this.target();
30
+ return target ? target.title() : null;
31
+ },
32
+
33
+ thumbnailFile: function() {
34
+ if (this.get('target_type') === 'text_only') {
35
+ return this.textOnlyAreaPlaceholderFile();
36
+ }
37
+
38
+ var target = this.target();
39
+ return target ? target.thumbnailFile() : null;
40
+ },
41
+
42
+ textOnlyAreaPlaceholderFile: function() {
43
+ if (!pageflow.linkmapPage.Area.textOnlyAreaPlaceholderFile) {
44
+ var file = new pageflow.AudioFile({
45
+ state: 'encoded'
46
+ });
47
+
48
+ file.thumbnailPictogram = 'text_only';
49
+ pageflow.linkmapPage.Area.textOnlyAreaPlaceholderFile = file;
50
+ }
51
+
52
+ return pageflow.linkmapPage.Area.textOnlyAreaPlaceholderFile;
53
+ },
54
+
55
+ label: function() {
56
+ return this.get('name');
57
+ },
58
+
59
+ highlight: function() {
60
+ this.set('highlighted', true);
61
+ },
62
+
63
+ resetHighlight: function() {
64
+ this.unset('highlighted');
65
+ },
66
+
67
+ editPath: function() {
68
+ var areaIndex = this.collection.indexOf(this);
69
+ return '/linkmap_pages/' + this.getRoutableId() + '/areas/' + areaIndex;
70
+ },
71
+
72
+ getRoutableId: function() {
73
+ return this.collection.page.id;
74
+ },
75
+
76
+ remove: function() {
77
+ this.collection.remove(this);
78
+ }
79
+ });