pageflow 15.1.0 → 15.2.2
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.
Potentially problematic release.
This version of pageflow might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +92 -161
 - data/README.md +1 -2
 - data/admins/pageflow/accounts.rb +94 -19
 - data/app/assets/javascripts/pageflow/admin/accounts.js +3 -3
 - data/app/assets/javascripts/pageflow/dist/frontend.js +2 -0
 - data/app/assets/javascripts/pageflow/dist/ui.js +9 -0
 - data/app/assets/stylesheets/pageflow/themes/default/logo/variant/background_image.scss +4 -0
 - data/app/assets/stylesheets/pageflow/themes/default/logo/variant/watermark.scss +5 -0
 - data/app/controllers/pageflow/editor/widgets_controller.rb +1 -1
 - data/app/helpers/pageflow/pages_helper.rb +1 -0
 - data/app/models/pageflow/account.rb +6 -0
 - data/app/models/pageflow/draft_entry.rb +13 -3
 - data/app/models/pageflow/entry.rb +8 -1
 - data/app/models/pageflow/entry_template.rb +55 -0
 - data/app/models/pageflow/published_entry.rb +13 -3
 - data/app/models/pageflow/revision.rb +1 -1
 - data/app/models/pageflow/theming.rb +8 -47
 - data/app/policies/pageflow/entry_template_policy.rb +18 -0
 - data/app/policies/pageflow/theming_policy.rb +0 -4
 - data/app/views/admin/accounts/_configuration_label.html.erb +5 -0
 - data/app/views/admin/accounts/_entry_template_details.html.arb +17 -0
 - data/app/views/admin/accounts/_form.html.erb +43 -23
 - data/app/views/admin/accounts/_share_providers_label.html.erb +5 -0
 - data/app/views/admin/accounts/_theming_details.html.arb +0 -12
 - data/app/views/pageflow/themes/_theme.json.jbuilder +1 -0
 - data/config/locales/de.yml +12 -7
 - data/config/locales/en.yml +12 -7
 - data/db/migrate/20200122115400_create_pageflow_entry_templates.rb +75 -0
 - data/db/migrate/20200206134400_convert_legacy_scrolled_content_element_types.rb +48 -0
 - data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +42 -4
 - data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +1 -0
 - data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +4 -1
 - data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +2 -1
 - data/entry_types/scrolled/app/helpers/pageflow_scrolled/i18n_helper.rb +35 -0
 - data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -1
 - data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +14 -2
 - data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +10 -1
 - data/entry_types/scrolled/config/locales/new/de.yml +231 -8
 - data/entry_types/scrolled/config/locales/new/en.yml +228 -10
 - data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +3 -0
 - data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +9 -4
 - data/entry_types/scrolled/lib/tasks/pageflow_scrolled_tasks.rake +96 -0
 - data/entry_types/scrolled/package/contentElements-editor.js +410 -0
 - data/entry_types/scrolled/package/contentElements-frontend.js +533 -0
 - data/entry_types/scrolled/package/editor.js +498 -2561
 - data/entry_types/scrolled/package/frontend.js +713 -1238
 - data/entry_types/scrolled/package/package.json +12 -2
 - data/lib/pageflow/ability_mixin.rb +3 -2
 - data/lib/pageflow/seeds.rb +0 -2
 - data/lib/pageflow/theme.rb +4 -0
 - data/lib/pageflow/themes.rb +5 -1
 - data/lib/pageflow/version.rb +1 -1
 - data/packages/pageflow/config/jest/index.js +0 -1
 - data/packages/pageflow/config/jest/transformers/jst.js +1 -1
 - data/packages/pageflow/config/webpack.js +0 -1
 - data/packages/pageflow/editor.js +33 -4
 - data/packages/pageflow/package.json +2 -1
 - data/packages/pageflow/testHelpers.js +367 -4
 - data/packages/pageflow/ui.js +9 -0
 - data/spec/factories/accounts.rb +6 -0
 - data/spec/factories/entry_templates.rb +8 -0
 - data/spec/factories/published_entries.rb +3 -1
 - data/spec/factories/themings.rb +0 -1
 - metadata +14 -4
 - data/app/assets/javascripts/pageflow/dist/editor.js +0 -11881
 - data/app/assets/javascripts/pageflow/dist/index.js +0 -3
 
| 
         @@ -7,14 +7,20 @@ 
     | 
|
| 
       7 
7 
     | 
    
         
             
              "author": "Codevise Solutions GmbH <info@codevise.de>",
         
     | 
| 
       8 
8 
     | 
    
         
             
              "license": "MIT",
         
     | 
| 
       9 
9 
     | 
    
         
             
              "dependencies": {
         
     | 
| 
      
 10 
     | 
    
         
            +
                "prop-types": "^15.7.2",
         
     | 
| 
       10 
11 
     | 
    
         
             
                "react": "^16.9.0",
         
     | 
| 
       11 
12 
     | 
    
         
             
                "react-dom": "^16.9.0",
         
     | 
| 
       12 
     | 
    
         
            -
                "react- 
     | 
| 
      
 13 
     | 
    
         
            +
                "react-player": "^1.15.2",
         
     | 
| 
      
 14 
     | 
    
         
            +
                "react-tooltip": "^3.11.1",
         
     | 
| 
      
 15 
     | 
    
         
            +
                "react-compare-image": "^2.0.4"
         
     | 
| 
       13 
16 
     | 
    
         
             
              },
         
     | 
| 
       14 
17 
     | 
    
         
             
              "peerDependencies": {
         
     | 
| 
       15 
18 
     | 
    
         
             
                "pageflow": "15.1.0"
         
     | 
| 
       16 
19 
     | 
    
         
             
              },
         
     | 
| 
       17 
20 
     | 
    
         
             
              "devDependencies": {
         
     | 
| 
      
 21 
     | 
    
         
            +
                "@percy/storybook": "^3.2.0",
         
     | 
| 
      
 22 
     | 
    
         
            +
                "@storybook/addon-viewport": "^5.3.13",
         
     | 
| 
      
 23 
     | 
    
         
            +
                "@storybook/react": "^5.3.9",
         
     | 
| 
       18 
24 
     | 
    
         
             
                "@testing-library/jest-dom": "^4.2.4",
         
     | 
| 
       19 
25 
     | 
    
         
             
                "@testing-library/react": "^9.4.0",
         
     | 
| 
       20 
26 
     | 
    
         
             
                "@testing-library/react-hooks": "^3.2.1",
         
     | 
| 
         @@ -22,6 +28,7 @@ 
     | 
|
| 
       22 
28 
     | 
    
         
             
                "@typescript-eslint/parser": "2.x",
         
     | 
| 
       23 
29 
     | 
    
         
             
                "babel-eslint": "10.x",
         
     | 
| 
       24 
30 
     | 
    
         
             
                "babel-jest": "^24.9.0",
         
     | 
| 
      
 31 
     | 
    
         
            +
                "babel-loader": "^8.0.6",
         
     | 
| 
       25 
32 
     | 
    
         
             
                "eslint": "6.x",
         
     | 
| 
       26 
33 
     | 
    
         
             
                "eslint-config-react-app": "^5.1.0",
         
     | 
| 
       27 
34 
     | 
    
         
             
                "eslint-import-resolver-jest": "^3.0.0",
         
     | 
| 
         @@ -38,6 +45,9 @@ 
     | 
|
| 
       38 
45 
     | 
    
         
             
              },
         
     | 
| 
       39 
46 
     | 
    
         
             
              "scripts": {
         
     | 
| 
       40 
47 
     | 
    
         
             
                "test": "jest",
         
     | 
| 
       41 
     | 
    
         
            -
                "lint": "eslint ."
         
     | 
| 
      
 48 
     | 
    
         
            +
                "lint": "eslint .",
         
     | 
| 
      
 49 
     | 
    
         
            +
                "start-storybook": "start-storybook",
         
     | 
| 
      
 50 
     | 
    
         
            +
                "build-storybook": "build-storybook -o .storybook/out",
         
     | 
| 
      
 51 
     | 
    
         
            +
                "snapshot": "STORYBOOK_SPLIT=true build-storybook --quiet -o .storybook/out && PERCY_TOKEN=${PERCY_TOKEN:-$PT} percy-storybook --widths=1280 --build_dir=.storybook/out"
         
     | 
| 
       42 
52 
     | 
    
         
             
              }
         
     | 
| 
       43 
53 
     | 
    
         
             
            }
         
     | 
| 
         @@ -214,8 +214,8 @@ module Pageflow 
     | 
|
| 
       214 
214 
     | 
    
         
             
                      ThemingPolicy.new(user, theming).edit?
         
     | 
| 
       215 
215 
     | 
    
         
             
                    end
         
     | 
| 
       216 
216 
     | 
    
         | 
| 
       217 
     | 
    
         
            -
                    can : 
     | 
| 
       218 
     | 
    
         
            -
                       
     | 
| 
      
 217 
     | 
    
         
            +
                    can :edit, EntryTemplate do |entry_template|
         
     | 
| 
      
 218 
     | 
    
         
            +
                      EntryTemplatePolicy.new(user, entry_template).edit?
         
     | 
| 
       219 
219 
     | 
    
         
             
                    end
         
     | 
| 
       220 
220 
     | 
    
         | 
| 
       221 
221 
     | 
    
         
             
                    can :create, ::User do |managed_user|
         
     | 
| 
         @@ -260,6 +260,7 @@ module Pageflow 
     | 
|
| 
       260 
260 
     | 
    
         
             
                    can :manage, Pageflow.config.file_types.map(&:model)
         
     | 
| 
       261 
261 
     | 
    
         
             
                    can :manage, Folder
         
     | 
| 
       262 
262 
     | 
    
         
             
                    can :manage, Theming
         
     | 
| 
      
 263 
     | 
    
         
            +
                    can :manage, EntryTemplate
         
     | 
| 
       263 
264 
     | 
    
         
             
                    can :manage, ::User
         
     | 
| 
       264 
265 
     | 
    
         
             
                  end
         
     | 
| 
       265 
266 
     | 
    
         
             
                end
         
     | 
    
        data/lib/pageflow/seeds.rb
    CHANGED
    
    | 
         @@ -54,8 +54,6 @@ module Pageflow 
     | 
|
| 
       54 
54 
     | 
    
         
             
                # @return [Theming] newly built theming
         
     | 
| 
       55 
55 
     | 
    
         
             
                def build_default_theming_for(account, attributes = {}, &block)
         
     | 
| 
       56 
56 
     | 
    
         
             
                  default_attributes = {
         
     | 
| 
       57 
     | 
    
         
            -
                    theme_name: Pageflow.config_for(account).themes.names.first,
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
57 
     | 
    
         
             
                    imprint_link_label: 'Impressum',
         
     | 
| 
       60 
58 
     | 
    
         
             
                    imprint_link_url: 'http://example.com/impressum.html',
         
     | 
| 
       61 
59 
     | 
    
         
             
                    copyright_link_label: '© Pageflow 2014',
         
     | 
    
        data/lib/pageflow/theme.rb
    CHANGED
    
    
    
        data/lib/pageflow/themes.rb
    CHANGED
    
    | 
         @@ -31,7 +31,11 @@ module Pageflow 
     | 
|
| 
       31 
31 
     | 
    
         
             
                #
         
     | 
| 
       32 
32 
     | 
    
         
             
                # @option options :no_hide_text_on_swipe [Boolean]
         
     | 
| 
       33 
33 
     | 
    
         
             
                #   Pass true if hiding the text by swiping to left shall be
         
     | 
| 
       34 
     | 
    
         
            -
                #    
     | 
| 
      
 34 
     | 
    
         
            +
                #   deactivated on mobile devices.
         
     | 
| 
      
 35 
     | 
    
         
            +
                #
         
     | 
| 
      
 36 
     | 
    
         
            +
                # @option options :hide_logo_option [Boolean]
         
     | 
| 
      
 37 
     | 
    
         
            +
                #   Pass true if hiding the logo on specific pages should be supported
         
     | 
| 
      
 38 
     | 
    
         
            +
                #   as an option in the editor.
         
     | 
| 
       35 
39 
     | 
    
         
             
                def register(name, options = {})
         
     | 
| 
       36 
40 
     | 
    
         
             
                  @themes[name] = Theme.new(name, options)
         
     | 
| 
       37 
41 
     | 
    
         
             
                end
         
     | 
    
        data/lib/pageflow/version.rb
    CHANGED
    
    
| 
         @@ -10,7 +10,6 @@ module.exports = { 
     | 
|
| 
       10 
10 
     | 
    
         
             
                '^backbone$': resolve('../../src/vendor/backbone'),
         
     | 
| 
       11 
11 
     | 
    
         
             
                '^underscore$': resolve('../../src/vendor/underscore'),
         
     | 
| 
       12 
12 
     | 
    
         
             
                '^cocktail$': resolve('../../src/vendor/cocktail'),
         
     | 
| 
       13 
     | 
    
         
            -
                '^i18n-js$': resolve('../../src/vendor/i18n'),
         
     | 
| 
       14 
13 
     | 
    
         
             
                '^iscroll$': resolve('../../src/vendor/iscroll'),
         
     | 
| 
       15 
14 
     | 
    
         
             
                '^wysihtml5': resolve('../../spec/support/wysihtmlStub'),
         
     | 
| 
       16 
15 
     | 
    
         
             
              },
         
     | 
| 
         @@ -3,6 +3,6 @@ const jst = jstPlugin(); 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            module.exports = {
         
     | 
| 
       5 
5 
     | 
    
         
             
              process(data, id) {
         
     | 
| 
       6 
     | 
    
         
            -
                return jst.transform(data, id).replace('export default', 'var I18n = require("i18n-js") 
     | 
| 
      
 6 
     | 
    
         
            +
                return jst.transform(data, id).replace('export default', 'var I18n = require("i18n-js"); module.exports =');
         
     | 
| 
       7 
7 
     | 
    
         
             
              }
         
     | 
| 
       8 
8 
     | 
    
         
             
            };
         
     | 
    
        data/packages/pageflow/editor.js
    CHANGED
    
    | 
         @@ -1119,7 +1119,9 @@ var EditorApi = Object$1.extend( 
     | 
|
| 
       1119 
1119 
     | 
    
         
             
                }
         
     | 
| 
       1120 
1120 
     | 
    
         | 
| 
       1121 
1121 
     | 
    
         
             
                var payloadJson = JSON.parse(decodeURIComponent(encodedPayload));
         
     | 
| 
       1122 
     | 
    
         
            -
                return new this.fileSelectionHandlers[handlerName](payloadJson 
     | 
| 
      
 1122 
     | 
    
         
            +
                return new this.fileSelectionHandlers[handlerName](_objectSpread({}, payloadJson, {
         
     | 
| 
      
 1123 
     | 
    
         
            +
                  entry: state.entry
         
     | 
| 
      
 1124 
     | 
    
         
            +
                }));
         
     | 
| 
       1123 
1125 
     | 
    
         
             
              },
         
     | 
| 
       1124 
1126 
     | 
    
         
             
              createPageConfigurationEditorView: function createPageConfigurationEditorView(page, options) {
         
     | 
| 
       1125 
1127 
     | 
    
         
             
                var view = this.pageTypes.findByPage(page).createConfigurationEditorView(_$1.extend(options, {
         
     | 
| 
         @@ -1132,6 +1134,13 @@ var EditorApi = Object$1.extend( 
     | 
|
| 
       1132 
1134 
     | 
    
         | 
| 
       1133 
1135 
     | 
    
         
             
            var editor$1 = new EditorApi();
         
     | 
| 
       1134 
1136 
     | 
    
         
             
            var startEditor = function startEditor(options) {
         
     | 
| 
      
 1137 
     | 
    
         
            +
              // In Webpack builds, I18n object from the i18n-js module is not
         
     | 
| 
      
 1138 
     | 
    
         
            +
              // identical to window.I18n which is provided by the i18n-js gem via
         
     | 
| 
      
 1139 
     | 
    
         
            +
              // the asset pipeline. Make translations provided via the asset
         
     | 
| 
      
 1140 
     | 
    
         
            +
              // pipeline available in Webpack bundle.
         
     | 
| 
      
 1141 
     | 
    
         
            +
              I18n$1.defaultLocale = window.I18n.defaultLocale;
         
     | 
| 
      
 1142 
     | 
    
         
            +
              I18n$1.locale = window.I18n.locale;
         
     | 
| 
      
 1143 
     | 
    
         
            +
              I18n$1.translations = window.I18n.translations;
         
     | 
| 
       1135 
1144 
     | 
    
         
             
              $(function () {
         
     | 
| 
       1136 
1145 
     | 
    
         
             
                $.when($.getJSON('/editor/entries/' + options.entryId + '/seed'), pageflow.browser.detectFeatures()).done(function (result) {
         
     | 
| 
       1137 
1146 
     | 
    
         
             
                  app.start(result[0]);
         
     | 
| 
         @@ -2259,6 +2268,9 @@ var Theme = Backbone.Model.extend({ 
     | 
|
| 
       2259 
2268 
     | 
    
         
             
              },
         
     | 
| 
       2260 
2269 
     | 
    
         
             
              supportsScrollIndicatorModes: function supportsScrollIndicatorModes() {
         
     | 
| 
       2261 
2270 
     | 
    
         
             
                return this.get('scroll_indicator_modes');
         
     | 
| 
      
 2271 
     | 
    
         
            +
              },
         
     | 
| 
      
 2272 
     | 
    
         
            +
              supportsHideLogoOnPages: function supportsHideLogoOnPages() {
         
     | 
| 
      
 2273 
     | 
    
         
            +
                return this.get('hide_logo_option');
         
     | 
| 
       2262 
2274 
     | 
    
         
             
              }
         
     | 
| 
       2263 
2275 
     | 
    
         
             
            });
         
     | 
| 
       2264 
2276 
     | 
    
         | 
| 
         @@ -3294,7 +3306,16 @@ var Entry = Backbone.Model.extend({ 
     | 
|
| 
       3294 
3306 
     | 
    
         
             
              initialize: function initialize(attributes, options) {
         
     | 
| 
       3295 
3307 
     | 
    
         
             
                options = options || {};
         
     | 
| 
       3296 
3308 
     | 
    
         
             
                this.metadata = new EntryMetadata(this.get('metadata') || {});
         
     | 
| 
       3297 
     | 
    
         
            -
                this.metadata.parent = this;
         
     | 
| 
      
 3309 
     | 
    
         
            +
                this.metadata.parent = this; // In 15.1 `entry.configuration` was turned into a new `Metadata`
         
     | 
| 
      
 3310 
     | 
    
         
            +
                // model. Some of the entry type specific data (like
         
     | 
| 
      
 3311 
     | 
    
         
            +
                // `home_button_enabled`) was extraced into
         
     | 
| 
      
 3312 
     | 
    
         
            +
                // `entry.metadata.configuration`. Attributes like `title` or `locale`
         
     | 
| 
      
 3313 
     | 
    
         
            +
                // which used to live in `entry.configuration` now live in
         
     | 
| 
      
 3314 
     | 
    
         
            +
                // entry.metadata. Since some plugins (e.g. `pageflow-vr`) depend on
         
     | 
| 
      
 3315 
     | 
    
         
            +
                // reading the locale from `entry.configuration`, this `configuration`
         
     | 
| 
      
 3316 
     | 
    
         
            +
                // keeps backwards compatibility.
         
     | 
| 
      
 3317 
     | 
    
         
            +
             
     | 
| 
      
 3318 
     | 
    
         
            +
                this.configuration = this.metadata;
         
     | 
| 
       3298 
3319 
     | 
    
         
             
                this.themes = options.themes || state.themes;
         
     | 
| 
       3299 
3320 
     | 
    
         
             
                this.files = options.files || state.files;
         
     | 
| 
       3300 
3321 
     | 
    
         
             
                this.fileTypes = options.fileTypes || editor$1.fileTypes;
         
     | 
| 
         @@ -3890,6 +3911,7 @@ var BackButtonDecoratorView = Marionette.Layout.extend({ 
     | 
|
| 
       3890 
3911 
     | 
    
         
             
                this.outlet.show(this.options.view);
         
     | 
| 
       3891 
3912 
     | 
    
         
             
              },
         
     | 
| 
       3892 
3913 
     | 
    
         
             
              goBack: function goBack() {
         
     | 
| 
      
 3914 
     | 
    
         
            +
                this.options.view.onGoBack && this.options.view.onGoBack();
         
     | 
| 
       3893 
3915 
     | 
    
         
             
                editor$1.navigate('/', {
         
     | 
| 
       3894 
3916 
     | 
    
         
             
                  trigger: true
         
     | 
| 
       3895 
3917 
     | 
    
         
             
                });
         
     | 
| 
         @@ -5464,6 +5486,8 @@ var EditPageView = Marionette.Layout.extend({ 
     | 
|
| 
       5464 
5486 
     | 
    
         
             
                'change:template': 'load'
         
     | 
| 
       5465 
5487 
     | 
    
         
             
              },
         
     | 
| 
       5466 
5488 
     | 
    
         
             
              onRender: function onRender() {
         
     | 
| 
      
 5489 
     | 
    
         
            +
                var _this = this;
         
     | 
| 
      
 5490 
     | 
    
         
            +
             
     | 
| 
       5467 
5491 
     | 
    
         
             
                this.pageTypeContainer.show(new ExtendedSelectInputView({
         
     | 
| 
       5468 
5492 
     | 
    
         
             
                  model: this.model,
         
     | 
| 
       5469 
5493 
     | 
    
         
             
                  propertyName: 'template',
         
     | 
| 
         @@ -5474,7 +5498,8 @@ var EditPageView = Marionette.Layout.extend({ 
     | 
|
| 
       5474 
5498 
     | 
    
         
             
                  descriptionTranslationKeyProperty: 'description_translation_key',
         
     | 
| 
       5475 
5499 
     | 
    
         
             
                  pictogramClass: 'type_pictogram',
         
     | 
| 
       5476 
5500 
     | 
    
         
             
                  helpLinkClicked: function helpLinkClicked(value) {
         
     | 
| 
       5477 
     | 
    
         
            -
                    var pageType =  
     | 
| 
      
 5501 
     | 
    
         
            +
                    var pageType = _this.options.api.pageTypes.findByName(value);
         
     | 
| 
      
 5502 
     | 
    
         
            +
             
     | 
| 
       5478 
5503 
     | 
    
         
             
                    app.trigger('toggle-help', pageType.seed.help_entry_translation_key);
         
     | 
| 
       5479 
5504 
     | 
    
         
             
                  }
         
     | 
| 
       5480 
5505 
     | 
    
         
             
                }));
         
     | 
| 
         @@ -8084,7 +8109,7 @@ var ListView = Marionette.ItemView.extend({ 
     | 
|
| 
       8084 
8109 
     | 
    
         
             
                    typeName: this.options.itemTypeName,
         
     | 
| 
       8085 
8110 
     | 
    
         
             
                    typeDescription: this.options.itemTypeDescription,
         
     | 
| 
       8086 
8111 
     | 
    
         
             
                    isInvalid: this.options.itemIsInvalid
         
     | 
| 
       8087 
     | 
    
         
            -
                  }, _$1(this.options).pick('onEdit', ' 
     | 
| 
      
 8112 
     | 
    
         
            +
                  }, _$1(this.options).pick('onEdit', 'onRemove', 'highlight')),
         
     | 
| 
       8088 
8113 
     | 
    
         
             
                  blankSlateViewConstructor: Marionette.ItemView.extend({
         
     | 
| 
       8089 
8114 
     | 
    
         
             
                    tagName: 'li',
         
     | 
| 
       8090 
8115 
     | 
    
         
             
                    className: 'list_blank_slate',
         
     | 
| 
         @@ -8469,6 +8494,10 @@ ConfigurationEditorTabView.groups.define('options', function (options) { 
     | 
|
| 
       8469 
8494 
     | 
    
         
             
                collection: state.audioFiles
         
     | 
| 
       8470 
8495 
     | 
    
         
             
              });
         
     | 
| 
       8471 
8496 
     | 
    
         | 
| 
      
 8497 
     | 
    
         
            +
              if (theme.supportsHideLogoOnPages()) {
         
     | 
| 
      
 8498 
     | 
    
         
            +
                this.input('hide_logo', CheckBoxInputView);
         
     | 
| 
      
 8499 
     | 
    
         
            +
              }
         
     | 
| 
      
 8500 
     | 
    
         
            +
             
     | 
| 
       8472 
8501 
     | 
    
         
             
              if (options.canPauseAtmo) {
         
     | 
| 
       8473 
8502 
     | 
    
         
             
                this.input('atmo_during_playback', SelectInputView, {
         
     | 
| 
       8474 
8503 
     | 
    
         
             
                  values: pageflow.Atmo.duringPlaybackModes
         
     | 
| 
         @@ -1,7 +1,281 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import  
     | 
| 
      
 1 
     | 
    
         
            +
            import $ from 'jquery';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import _ from 'underscore';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { Object as Object$1 } from 'pageflow/ui';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import Backbone from 'backbone';
         
     | 
| 
       3 
5 
     | 
    
         
             
            import { Entry, Theme, FileTypes, FilesCollection, SubsetCollection, ImageFile, WidgetTypes, EditorApi, VideoFile, TextTrackFile } from 'pageflow/editor';
         
     | 
| 
      
 6 
     | 
    
         
            +
            import I18n from 'i18n-js';
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            var Base = Object$1.extend({
         
     | 
| 
      
 9 
     | 
    
         
            +
              initialize: function initialize($el) {
         
     | 
| 
      
 10 
     | 
    
         
            +
                this.$el = $el;
         
     | 
| 
      
 11 
     | 
    
         
            +
              }
         
     | 
| 
      
 12 
     | 
    
         
            +
            });
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Base.classMethods = function (Constructor) {
         
     | 
| 
      
 15 
     | 
    
         
            +
              return {
         
     | 
| 
      
 16 
     | 
    
         
            +
                find: function find(viewOrParentElement) {
         
     | 
| 
      
 17 
     | 
    
         
            +
                  var selector = Constructor.prototype.selector;
         
     | 
| 
      
 18 
     | 
    
         
            +
                  var parentElement = viewOrParentElement.$el || viewOrParentElement;
         
     | 
| 
      
 19 
     | 
    
         
            +
                  var element = parentElement.find(selector);
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  if (element.length > 1) {
         
     | 
| 
      
 22 
     | 
    
         
            +
                    throw new Error('Selector "' + selector + '" matches multiple elements in view. Expected only one');
         
     | 
| 
      
 23 
     | 
    
         
            +
                  }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  if (element.length === 0) {
         
     | 
| 
      
 26 
     | 
    
         
            +
                    throw new Error('Selector "' + selector + '" did not match any elements in view.');
         
     | 
| 
      
 27 
     | 
    
         
            +
                  }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  return new Constructor(element);
         
     | 
| 
      
 30 
     | 
    
         
            +
                },
         
     | 
| 
      
 31 
     | 
    
         
            +
                findAll: function findAll(viewOrParentElement) {
         
     | 
| 
      
 32 
     | 
    
         
            +
                  var selector = Constructor.prototype.selector;
         
     | 
| 
      
 33 
     | 
    
         
            +
                  var parentElement = viewOrParentElement.$el || viewOrParentElement;
         
     | 
| 
      
 34 
     | 
    
         
            +
                  var elements = parentElement.find(selector);
         
     | 
| 
      
 35 
     | 
    
         
            +
                  return elements.map(function () {
         
     | 
| 
      
 36 
     | 
    
         
            +
                    return new Constructor($(this));
         
     | 
| 
      
 37 
     | 
    
         
            +
                  }).get();
         
     | 
| 
      
 38 
     | 
    
         
            +
                },
         
     | 
| 
      
 39 
     | 
    
         
            +
                findBy: function findBy(predicate, options) {
         
     | 
| 
      
 40 
     | 
    
         
            +
                  var predicateString = options.predicateName ? ' filtered by ' + options.predicateName : '';
         
     | 
| 
      
 41 
     | 
    
         
            +
                  var selector = Constructor.prototype.selector;
         
     | 
| 
      
 42 
     | 
    
         
            +
                  var selectorString = 'Selector "' + selector + '"' + predicateString;
         
     | 
| 
      
 43 
     | 
    
         
            +
                  var elements = options.inView.$el.find(selector);
         
     | 
| 
      
 44 
     | 
    
         
            +
                  var element = elements.filter(function () {
         
     | 
| 
      
 45 
     | 
    
         
            +
                    return predicate($(this));
         
     | 
| 
      
 46 
     | 
    
         
            +
                  });
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  if (element.length > 1) {
         
     | 
| 
      
 49 
     | 
    
         
            +
                    throw new Error(selectorString + ' matches multiple elements in view. Expected only one');
         
     | 
| 
      
 50 
     | 
    
         
            +
                  }
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  if (element.length === 0) {
         
     | 
| 
      
 53 
     | 
    
         
            +
                    throw new Error(selectorString + ' did not match any elements in view.');
         
     | 
| 
      
 54 
     | 
    
         
            +
                  }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  return new Constructor(element);
         
     | 
| 
      
 57 
     | 
    
         
            +
                },
         
     | 
| 
      
 58 
     | 
    
         
            +
                render: function render(view, options) {
         
     | 
| 
      
 59 
     | 
    
         
            +
                  view.render();
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  if (options && options.appendTo) {
         
     | 
| 
      
 62 
     | 
    
         
            +
                    options.appendTo.append(view.$el);
         
     | 
| 
      
 63 
     | 
    
         
            +
                  }
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  return new Constructor(view.$el);
         
     | 
| 
      
 66 
     | 
    
         
            +
                }
         
     | 
| 
      
 67 
     | 
    
         
            +
              };
         
     | 
| 
      
 68 
     | 
    
         
            +
            };
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            Base.extend = function ()
         
     | 
| 
      
 71 
     | 
    
         
            +
            /* arguments */
         
     | 
| 
      
 72 
     | 
    
         
            +
            {
         
     | 
| 
      
 73 
     | 
    
         
            +
              var result = Object$1.extend.apply(this, arguments);
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              _.extend(result, Base.classMethods(result));
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
              return result;
         
     | 
| 
      
 78 
     | 
    
         
            +
            };
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            var DropDownButton = Base.extend({
         
     | 
| 
      
 81 
     | 
    
         
            +
              selector: '.drop_down_button',
         
     | 
| 
      
 82 
     | 
    
         
            +
              menuItemNames: function menuItemNames() {
         
     | 
| 
      
 83 
     | 
    
         
            +
                return this.$el.find('li').map(function () {
         
     | 
| 
      
 84 
     | 
    
         
            +
                  return $(this).data('name');
         
     | 
| 
      
 85 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 86 
     | 
    
         
            +
              },
         
     | 
| 
      
 87 
     | 
    
         
            +
              menuItemLabels: function menuItemLabels() {
         
     | 
| 
      
 88 
     | 
    
         
            +
                return this.$el.find('li a').map(function () {
         
     | 
| 
      
 89 
     | 
    
         
            +
                  return $(this).text();
         
     | 
| 
      
 90 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 91 
     | 
    
         
            +
              },
         
     | 
| 
      
 92 
     | 
    
         
            +
              selectMenuItemByName: function selectMenuItemByName(name) {
         
     | 
| 
      
 93 
     | 
    
         
            +
                var menuItem = this.$el.find('li').filter(function () {
         
     | 
| 
      
 94 
     | 
    
         
            +
                  return $(this).data('name') == name;
         
     | 
| 
      
 95 
     | 
    
         
            +
                });
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                if (!menuItem.length) {
         
     | 
| 
      
 98 
     | 
    
         
            +
                  throw new Error('Could not find menu item with name "' + name + '"');
         
     | 
| 
      
 99 
     | 
    
         
            +
                }
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                menuItem.find('a').trigger('click');
         
     | 
| 
      
 102 
     | 
    
         
            +
              },
         
     | 
| 
      
 103 
     | 
    
         
            +
              selectMenuItemByLabel: function selectMenuItemByLabel(label) {
         
     | 
| 
      
 104 
     | 
    
         
            +
                var menuItemLink = this.$el.find('li a').filter(function () {
         
     | 
| 
      
 105 
     | 
    
         
            +
                  return $(this).text() == label;
         
     | 
| 
      
 106 
     | 
    
         
            +
                });
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                if (!menuItemLink.length) {
         
     | 
| 
      
 109 
     | 
    
         
            +
                  throw new Error('Could not find menu item with label "' + label + '"');
         
     | 
| 
      
 110 
     | 
    
         
            +
                }
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                menuItemLink.trigger('click');
         
     | 
| 
      
 113 
     | 
    
         
            +
              }
         
     | 
| 
      
 114 
     | 
    
         
            +
            });
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            var FileMetaDataTable = Base.extend({
         
     | 
| 
      
 117 
     | 
    
         
            +
              selector: '.file_meta_data table',
         
     | 
| 
      
 118 
     | 
    
         
            +
              values: function values() {
         
     | 
| 
      
 119 
     | 
    
         
            +
                return this.$el.find('.value').map(function () {
         
     | 
| 
      
 120 
     | 
    
         
            +
                  return $(this).text();
         
     | 
| 
      
 121 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 122 
     | 
    
         
            +
              }
         
     | 
| 
      
 123 
     | 
    
         
            +
            });
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            var FileStageItem = Base.extend({
         
     | 
| 
      
 126 
     | 
    
         
            +
              selector: '.file_stage_item'
         
     | 
| 
      
 127 
     | 
    
         
            +
            });
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
            var FileThumbnail = Base.extend({
         
     | 
| 
      
 130 
     | 
    
         
            +
              selector: '.file_thumbnail',
         
     | 
| 
      
 131 
     | 
    
         
            +
              backgroundImage: function backgroundImage() {
         
     | 
| 
      
 132 
     | 
    
         
            +
                return this.$el.css('backgroundImage');
         
     | 
| 
      
 133 
     | 
    
         
            +
              }
         
     | 
| 
      
 134 
     | 
    
         
            +
            });
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
            var ReferenceInput = Base.extend({
         
     | 
| 
      
 137 
     | 
    
         
            +
              clickChooseButton: function clickChooseButton() {
         
     | 
| 
      
 138 
     | 
    
         
            +
                this.$el.find('.choose').trigger('click');
         
     | 
| 
      
 139 
     | 
    
         
            +
              }
         
     | 
| 
      
 140 
     | 
    
         
            +
            });
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            var StaticThumbnail = Base.extend({
         
     | 
| 
      
 143 
     | 
    
         
            +
              selector: '.static_thumbnail',
         
     | 
| 
      
 144 
     | 
    
         
            +
              backgroundImage: function backgroundImage() {
         
     | 
| 
      
 145 
     | 
    
         
            +
                return this.$el.css('backgroundImage');
         
     | 
| 
      
 146 
     | 
    
         
            +
              }
         
     | 
| 
      
 147 
     | 
    
         
            +
            });
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            var ThemeItem = Base.extend({
         
     | 
| 
      
 150 
     | 
    
         
            +
              selector: '.theme_item',
         
     | 
| 
      
 151 
     | 
    
         
            +
              hover: function hover() {
         
     | 
| 
      
 152 
     | 
    
         
            +
                this.$el.trigger('mouseenter');
         
     | 
| 
      
 153 
     | 
    
         
            +
              },
         
     | 
| 
      
 154 
     | 
    
         
            +
              click: function click() {
         
     | 
| 
      
 155 
     | 
    
         
            +
                this.$el.trigger('click');
         
     | 
| 
      
 156 
     | 
    
         
            +
              },
         
     | 
| 
      
 157 
     | 
    
         
            +
              clickUseButton: function clickUseButton() {
         
     | 
| 
      
 158 
     | 
    
         
            +
                this.$el.find('.use_theme').trigger('click');
         
     | 
| 
      
 159 
     | 
    
         
            +
              }
         
     | 
| 
      
 160 
     | 
    
         
            +
            });
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
            ThemeItem.findByName = function (themeName, options) {
         
     | 
| 
      
 163 
     | 
    
         
            +
              return this.findBy(function ($el) {
         
     | 
| 
      
 164 
     | 
    
         
            +
                return $el.data('themeName') === themeName;
         
     | 
| 
      
 165 
     | 
    
         
            +
              }, _.extend({
         
     | 
| 
      
 166 
     | 
    
         
            +
                predicateName: 'theme name ' + themeName
         
     | 
| 
      
 167 
     | 
    
         
            +
              }, options));
         
     | 
| 
      
 168 
     | 
    
         
            +
            };
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
            var ConfigurationEditorTab = Base.extend({
         
     | 
| 
      
 171 
     | 
    
         
            +
              selector: '.configuration_editor_tab',
         
     | 
| 
      
 172 
     | 
    
         
            +
              inputPropertyNames: function inputPropertyNames() {
         
     | 
| 
      
 173 
     | 
    
         
            +
                return this.$el.find('.input').map(function () {
         
     | 
| 
      
 174 
     | 
    
         
            +
                  return $(this).data('inputPropertyName');
         
     | 
| 
      
 175 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 176 
     | 
    
         
            +
              },
         
     | 
| 
      
 177 
     | 
    
         
            +
              inputLabels: function inputLabels() {
         
     | 
| 
      
 178 
     | 
    
         
            +
                return this.$el.find('.input').map(function () {
         
     | 
| 
      
 179 
     | 
    
         
            +
                  return $(this).data('labelText');
         
     | 
| 
      
 180 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 181 
     | 
    
         
            +
              },
         
     | 
| 
      
 182 
     | 
    
         
            +
              inlineHelpTexts: function inlineHelpTexts() {
         
     | 
| 
      
 183 
     | 
    
         
            +
                return this.$el.find('.input').map(function () {
         
     | 
| 
      
 184 
     | 
    
         
            +
                  return $(this).data('inlineHelpText');
         
     | 
| 
      
 185 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 186 
     | 
    
         
            +
              }
         
     | 
| 
      
 187 
     | 
    
         
            +
            });
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            var Tabs = Base.extend({
         
     | 
| 
      
 190 
     | 
    
         
            +
              selector: '.tabs_view',
         
     | 
| 
      
 191 
     | 
    
         
            +
              tabNames: function tabNames() {
         
     | 
| 
      
 192 
     | 
    
         
            +
                return this.$el.find('[data-tab-name]').map(function () {
         
     | 
| 
      
 193 
     | 
    
         
            +
                  return $(this).data('tabName');
         
     | 
| 
      
 194 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 195 
     | 
    
         
            +
              },
         
     | 
| 
      
 196 
     | 
    
         
            +
              tabLabels: function tabLabels() {
         
     | 
| 
      
 197 
     | 
    
         
            +
                return this.$el.find('[data-tab-name]').map(function () {
         
     | 
| 
      
 198 
     | 
    
         
            +
                  return $(this).text();
         
     | 
| 
      
 199 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 200 
     | 
    
         
            +
              }
         
     | 
| 
      
 201 
     | 
    
         
            +
            });
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
            var ConfigurationEditor = Base.extend({
         
     | 
| 
      
 204 
     | 
    
         
            +
              selector: '.configuration_editor',
         
     | 
| 
      
 205 
     | 
    
         
            +
              tabNames: function tabNames() {
         
     | 
| 
      
 206 
     | 
    
         
            +
                return Tabs.find(this.$el).tabNames();
         
     | 
| 
      
 207 
     | 
    
         
            +
              },
         
     | 
| 
      
 208 
     | 
    
         
            +
              tabLabels: function tabLabels() {
         
     | 
| 
      
 209 
     | 
    
         
            +
                return Tabs.find(this.$el).tabLabels();
         
     | 
| 
      
 210 
     | 
    
         
            +
              },
         
     | 
| 
      
 211 
     | 
    
         
            +
              inputPropertyNames: function inputPropertyNames() {
         
     | 
| 
      
 212 
     | 
    
         
            +
                return ConfigurationEditorTab.find(this.$el).inputPropertyNames();
         
     | 
| 
      
 213 
     | 
    
         
            +
              },
         
     | 
| 
      
 214 
     | 
    
         
            +
              inputLabels: function inputLabels() {
         
     | 
| 
      
 215 
     | 
    
         
            +
                return ConfigurationEditorTab.find(this.$el).inputLabels();
         
     | 
| 
      
 216 
     | 
    
         
            +
              },
         
     | 
| 
      
 217 
     | 
    
         
            +
              inlineHelpTexts: function inlineHelpTexts() {
         
     | 
| 
      
 218 
     | 
    
         
            +
                return ConfigurationEditorTab.find(this.$el).inlineHelpTexts();
         
     | 
| 
      
 219 
     | 
    
         
            +
              }
         
     | 
| 
      
 220 
     | 
    
         
            +
            });
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
            var Table = Base.extend({
         
     | 
| 
      
 223 
     | 
    
         
            +
              selector: '.table_view',
         
     | 
| 
      
 224 
     | 
    
         
            +
              columnNames: function columnNames() {
         
     | 
| 
      
 225 
     | 
    
         
            +
                return this.$el.find('th').map(function () {
         
     | 
| 
      
 226 
     | 
    
         
            +
                  return $(this).data('columnName');
         
     | 
| 
      
 227 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 228 
     | 
    
         
            +
              }
         
     | 
| 
      
 229 
     | 
    
         
            +
            });
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
            var ColorInput = Base.extend({
         
     | 
| 
      
 232 
     | 
    
         
            +
              value: function value() {
         
     | 
| 
      
 233 
     | 
    
         
            +
                return this._input().val();
         
     | 
| 
      
 234 
     | 
    
         
            +
              },
         
     | 
| 
      
 235 
     | 
    
         
            +
              fillIn: function fillIn(value, clock) {
         
     | 
| 
      
 236 
     | 
    
         
            +
                this._input().val(value);
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
                this._input().trigger('keyup');
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
                clock.tick(500);
         
     | 
| 
      
 241 
     | 
    
         
            +
              },
         
     | 
| 
      
 242 
     | 
    
         
            +
              swatches: function swatches() {
         
     | 
| 
      
 243 
     | 
    
         
            +
                return this.$el.find('.minicolors-swatches span').map(function () {
         
     | 
| 
      
 244 
     | 
    
         
            +
                  return window.getComputedStyle(this)['background-color'];
         
     | 
| 
      
 245 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 246 
     | 
    
         
            +
              },
         
     | 
| 
      
 247 
     | 
    
         
            +
              _input: function _input() {
         
     | 
| 
      
 248 
     | 
    
         
            +
                return this.$el.find('input');
         
     | 
| 
      
 249 
     | 
    
         
            +
              }
         
     | 
| 
      
 250 
     | 
    
         
            +
            });
         
     | 
| 
       4 
251 
     | 
    
         | 
| 
      
 252 
     | 
    
         
            +
            var SelectInput = Base.extend({
         
     | 
| 
      
 253 
     | 
    
         
            +
              selector: 'select',
         
     | 
| 
      
 254 
     | 
    
         
            +
              values: function values() {
         
     | 
| 
      
 255 
     | 
    
         
            +
                return this.$el.find('option').map(function () {
         
     | 
| 
      
 256 
     | 
    
         
            +
                  return $(this).attr('value');
         
     | 
| 
      
 257 
     | 
    
         
            +
                }).get();
         
     | 
| 
      
 258 
     | 
    
         
            +
              }
         
     | 
| 
      
 259 
     | 
    
         
            +
            });
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
            function _defineProperty(obj, key, value) {
         
     | 
| 
      
 262 
     | 
    
         
            +
              if (key in obj) {
         
     | 
| 
      
 263 
     | 
    
         
            +
                Object.defineProperty(obj, key, {
         
     | 
| 
      
 264 
     | 
    
         
            +
                  value: value,
         
     | 
| 
      
 265 
     | 
    
         
            +
                  enumerable: true,
         
     | 
| 
      
 266 
     | 
    
         
            +
                  configurable: true,
         
     | 
| 
      
 267 
     | 
    
         
            +
                  writable: true
         
     | 
| 
      
 268 
     | 
    
         
            +
                });
         
     | 
| 
      
 269 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 270 
     | 
    
         
            +
                obj[key] = value;
         
     | 
| 
      
 271 
     | 
    
         
            +
              }
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
              return obj;
         
     | 
| 
      
 274 
     | 
    
         
            +
            }
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
            function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
            function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
         
     | 
| 
       5 
279 
     | 
    
         
             
            /**
         
     | 
| 
       6 
280 
     | 
    
         
             
             * Build editor Backbone models for tests.
         
     | 
| 
       7 
281 
     | 
    
         
             
             */
         
     | 
| 
         @@ -40,7 +314,9 @@ var factories = { 
     | 
|
| 
       40 
314 
     | 
    
         | 
| 
       41 
315 
     | 
    
         
             
                ensureFileTypes(options);
         
     | 
| 
       42 
316 
     | 
    
         
             
                ensureFilesCollections(options);
         
     | 
| 
       43 
     | 
    
         
            -
                var entry = new model( 
     | 
| 
      
 317 
     | 
    
         
            +
                var entry = new model(_objectSpread({
         
     | 
| 
      
 318 
     | 
    
         
            +
                  id: 1
         
     | 
| 
      
 319 
     | 
    
         
            +
                }, attributes), _.extend({
         
     | 
| 
       44 
320 
     | 
    
         
             
                  storylines: new Backbone.Collection(),
         
     | 
| 
       45 
321 
     | 
    
         
             
                  chapters: new Backbone.Collection()
         
     | 
| 
       46 
322 
     | 
    
         
             
                }, options));
         
     | 
| 
         @@ -233,7 +509,17 @@ var factories = { 
     | 
|
| 
       233 
509 
     | 
    
         
             
                return widgetTypes;
         
     | 
| 
       234 
510 
     | 
    
         
             
              },
         
     | 
| 
       235 
511 
     | 
    
         
             
              editorApi: function editorApi(beforeSetup) {
         
     | 
| 
       236 
     | 
    
         
            -
                var api = new EditorApi( 
     | 
| 
      
 512 
     | 
    
         
            +
                var api = new EditorApi({
         
     | 
| 
      
 513 
     | 
    
         
            +
                  router: {
         
     | 
| 
      
 514 
     | 
    
         
            +
                    navigate: function navigate(path, _ref) {
         
     | 
| 
      
 515 
     | 
    
         
            +
                      var trigger = _ref.trigger;
         
     | 
| 
      
 516 
     | 
    
         
            +
             
     | 
| 
      
 517 
     | 
    
         
            +
                      if (trigger) {
         
     | 
| 
      
 518 
     | 
    
         
            +
                        api.trigger('navigate', path);
         
     | 
| 
      
 519 
     | 
    
         
            +
                      }
         
     | 
| 
      
 520 
     | 
    
         
            +
                    }
         
     | 
| 
      
 521 
     | 
    
         
            +
                  }
         
     | 
| 
      
 522 
     | 
    
         
            +
                });
         
     | 
| 
       237 
523 
     | 
    
         | 
| 
       238 
524 
     | 
    
         
             
                if (beforeSetup) {
         
     | 
| 
       239 
525 
     | 
    
         
             
                  beforeSetup(api);
         
     | 
| 
         @@ -265,4 +551,81 @@ function ensureFilesCollections(options) { 
     | 
|
| 
       265 
551 
     | 
    
         
             
              }
         
     | 
| 
       266 
552 
     | 
    
         
             
            }
         
     | 
| 
       267 
553 
     | 
    
         | 
| 
       268 
     | 
    
         
            -
             
     | 
| 
      
 554 
     | 
    
         
            +
            /**
         
     | 
| 
      
 555 
     | 
    
         
            +
             * Define translations to use in tests.
         
     | 
| 
      
 556 
     | 
    
         
            +
             *
         
     | 
| 
      
 557 
     | 
    
         
            +
             * @param {Object} translations -
         
     | 
| 
      
 558 
     | 
    
         
            +
             *   A mapping of either the form `(translation key => translated
         
     | 
| 
      
 559 
     | 
    
         
            +
             *   text)`.  Translation keys can contains dots.
         
     | 
| 
      
 560 
     | 
    
         
            +
             * @param {Object} [options]
         
     | 
| 
      
 561 
     | 
    
         
            +
             * @param {boolean} [options.multiLocale] -
         
     | 
| 
      
 562 
     | 
    
         
            +
             *   Set to `true` if keys include the locale name.
         
     | 
| 
      
 563 
     | 
    
         
            +
             *
         
     | 
| 
      
 564 
     | 
    
         
            +
             * @example
         
     | 
| 
      
 565 
     | 
    
         
            +
             * import {useFakeTranslations} from 'pageflow/testHelpers';
         
     | 
| 
      
 566 
     | 
    
         
            +
             * import I18n from 'i18n-js';
         
     | 
| 
      
 567 
     | 
    
         
            +
             *
         
     | 
| 
      
 568 
     | 
    
         
            +
             * describe('...', () => {
         
     | 
| 
      
 569 
     | 
    
         
            +
             *   useFakeTranslations({
         
     | 
| 
      
 570 
     | 
    
         
            +
             *     'some.key': 'some translation'
         
     | 
| 
      
 571 
     | 
    
         
            +
             *   });
         
     | 
| 
      
 572 
     | 
    
         
            +
             *
         
     | 
| 
      
 573 
     | 
    
         
            +
             *   it('...', () => {
         
     | 
| 
      
 574 
     | 
    
         
            +
             *     I18n.t('some.key') // => 'some translation'
         
     | 
| 
      
 575 
     | 
    
         
            +
             *   });
         
     | 
| 
      
 576 
     | 
    
         
            +
             * });
         
     | 
| 
      
 577 
     | 
    
         
            +
             *
         
     | 
| 
      
 578 
     | 
    
         
            +
             * @example
         
     | 
| 
      
 579 
     | 
    
         
            +
             * import {useFakeTranslations} from 'pageflow/testHelpers';
         
     | 
| 
      
 580 
     | 
    
         
            +
             * import I18n from 'i18n-js';
         
     | 
| 
      
 581 
     | 
    
         
            +
             *
         
     | 
| 
      
 582 
     | 
    
         
            +
             * describe('...', () => {
         
     | 
| 
      
 583 
     | 
    
         
            +
             *   useFakeTranslations({
         
     | 
| 
      
 584 
     | 
    
         
            +
             *     'en.some.key': 'some text',
         
     | 
| 
      
 585 
     | 
    
         
            +
             *     'de.some.key': 'etwas Text'
         
     | 
| 
      
 586 
     | 
    
         
            +
             *   }, {multiLocale: true});
         
     | 
| 
      
 587 
     | 
    
         
            +
             *
         
     | 
| 
      
 588 
     | 
    
         
            +
             *   it('...', () => {
         
     | 
| 
      
 589 
     | 
    
         
            +
             *     I18n.locale = 'de';
         
     | 
| 
      
 590 
     | 
    
         
            +
             *     I18n.t('some.key') // => 'etwas Text'
         
     | 
| 
      
 591 
     | 
    
         
            +
             *   });
         
     | 
| 
      
 592 
     | 
    
         
            +
             * });
         
     | 
| 
      
 593 
     | 
    
         
            +
             */
         
     | 
| 
      
 594 
     | 
    
         
            +
             
     | 
| 
      
 595 
     | 
    
         
            +
            function useFakeTranslations(translations) {
         
     | 
| 
      
 596 
     | 
    
         
            +
              var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
         
     | 
| 
      
 597 
     | 
    
         
            +
                  multiLocale = _ref.multiLocale;
         
     | 
| 
      
 598 
     | 
    
         
            +
             
     | 
| 
      
 599 
     | 
    
         
            +
              var originalTranslations;
         
     | 
| 
      
 600 
     | 
    
         
            +
              beforeEach(function () {
         
     | 
| 
      
 601 
     | 
    
         
            +
                originalTranslations = I18n.translations;
         
     | 
| 
      
 602 
     | 
    
         
            +
             
     | 
| 
      
 603 
     | 
    
         
            +
                if (multiLocale) {
         
     | 
| 
      
 604 
     | 
    
         
            +
                  I18n.translations = keysWithDotsToNestedObjects(translations);
         
     | 
| 
      
 605 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 606 
     | 
    
         
            +
                  I18n.translations = {
         
     | 
| 
      
 607 
     | 
    
         
            +
                    en: keysWithDotsToNestedObjects(translations)
         
     | 
| 
      
 608 
     | 
    
         
            +
                  };
         
     | 
| 
      
 609 
     | 
    
         
            +
                }
         
     | 
| 
      
 610 
     | 
    
         
            +
              });
         
     | 
| 
      
 611 
     | 
    
         
            +
              afterEach(function () {
         
     | 
| 
      
 612 
     | 
    
         
            +
                I18n.translations = originalTranslations;
         
     | 
| 
      
 613 
     | 
    
         
            +
              });
         
     | 
| 
      
 614 
     | 
    
         
            +
            }
         
     | 
| 
      
 615 
     | 
    
         
            +
             
     | 
| 
      
 616 
     | 
    
         
            +
            function keysWithDotsToNestedObjects(translations) {
         
     | 
| 
      
 617 
     | 
    
         
            +
              return _(translations).reduce(function (result, value, key) {
         
     | 
| 
      
 618 
     | 
    
         
            +
                var keys = key.split('.');
         
     | 
| 
      
 619 
     | 
    
         
            +
                var last = keys.pop();
         
     | 
| 
      
 620 
     | 
    
         
            +
             
     | 
| 
      
 621 
     | 
    
         
            +
                var inner = _(keys).reduce(function (r, key) {
         
     | 
| 
      
 622 
     | 
    
         
            +
                  r[key] = r[key] || {};
         
     | 
| 
      
 623 
     | 
    
         
            +
                  return r[key];
         
     | 
| 
      
 624 
     | 
    
         
            +
                }, result);
         
     | 
| 
      
 625 
     | 
    
         
            +
             
     | 
| 
      
 626 
     | 
    
         
            +
                inner[last] = value;
         
     | 
| 
      
 627 
     | 
    
         
            +
                return result;
         
     | 
| 
      
 628 
     | 
    
         
            +
              }, {});
         
     | 
| 
      
 629 
     | 
    
         
            +
            }
         
     | 
| 
      
 630 
     | 
    
         
            +
             
     | 
| 
      
 631 
     | 
    
         
            +
            export { ColorInput, ConfigurationEditor, ConfigurationEditorTab, DropDownButton, FileMetaDataTable, FileStageItem, FileThumbnail, ReferenceInput, SelectInput, StaticThumbnail, Table, Tabs, ThemeItem, factories, useFakeTranslations };
         
     |