From 8d1d1ff05b11e7f7ad5954e8e4b81ce6552affd4 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Mon, 16 Jul 2018 00:30:29 +0200 Subject: [PATCH] deploy docs --- docs/404.html | 19 + docs/Home.html | 335 +++++++++++++ docs/api/assets.html | 85 ++++ docs/api/block_manager.html | 81 +++ docs/api/commands.html | 58 +++ docs/api/components.html | 89 ++++ docs/api/css_composer.html | 79 +++ docs/api/device_manager.html | 56 +++ docs/api/editor.html | 115 +++++ docs/api/index.html | 36 ++ docs/api/keymaps.html | 70 +++ docs/api/modal_dialog.html | 47 ++ docs/api/panels.html | 92 ++++ docs/api/rich_text_editor.html | 79 +++ docs/api/selector_manager.html | 64 +++ docs/api/storage_manager.html | 70 +++ docs/api/style_manager.html | 94 ++++ docs/api/undo_manager.html | 55 ++ docs/assets-builtin-modal.png | Bin 0 -> 40201 bytes docs/assets-empty-view.png | Bin 0 -> 8870 bytes docs/assets-full-dropzone.gif | Bin 0 -> 205638 bytes docs/assets-svg-view.png | Bin 0 -> 10545 bytes docs/assets-uploader.png | Bin 0 -> 18149 bytes docs/assets/css/0.styles.680773b3.css | 1 + docs/assets/img/search.83621669.svg | 1 + docs/assets/js/1.4c1eabe5.js | 1 + docs/assets/js/10.4e962f3e.js | 1 + docs/assets/js/11.1feb9616.js | 1 + docs/assets/js/12.aff1f64d.js | 1 + docs/assets/js/13.f5710b12.js | 1 + docs/assets/js/14.78680387.js | 1 + docs/assets/js/15.6ee7f49c.js | 1 + docs/assets/js/16.89382312.js | 1 + docs/assets/js/17.322b5a49.js | 1 + docs/assets/js/18.b4dfc6ac.js | 1 + docs/assets/js/19.91169ac8.js | 1 + docs/assets/js/2.913089f8.js | 1 + docs/assets/js/20.0f79fdeb.js | 1 + docs/assets/js/21.5afad075.js | 1 + docs/assets/js/22.fbaff709.js | 1 + docs/assets/js/23.95e202fd.js | 1 + docs/assets/js/24.4fed3e13.js | 1 + docs/assets/js/25.51945ea0.js | 1 + docs/assets/js/26.685b07a3.js | 1 + docs/assets/js/27.8c514210.js | 1 + docs/assets/js/28.14c2ddb7.js | 1 + docs/assets/js/29.38c333a6.js | 1 + docs/assets/js/3.ea5de9c2.js | 1 + docs/assets/js/30.16f00928.js | 1 + docs/assets/js/31.6be64816.js | 1 + docs/assets/js/32.4ae7d1c2.js | 1 + docs/assets/js/33.de44a98d.js | 1 + docs/assets/js/34.7c6fa057.js | 1 + docs/assets/js/35.a1820a66.js | 1 + docs/assets/js/36.850684b6.js | 1 + docs/assets/js/37.91f76ccf.js | 1 + docs/assets/js/38.9e9e0a77.js | 1 + docs/assets/js/4.beae289b.js | 1 + docs/assets/js/5.8085c569.js | 1 + docs/assets/js/6.a2b96fcb.js | 1 + docs/assets/js/7.404a3812.js | 1 + docs/assets/js/8.bab4a56f.js | 1 + docs/assets/js/9.50c3291f.js | 1 + docs/assets/js/app.cb65ab74.js | 8 + docs/blocks3.jpg | Bin 0 -> 36146 bytes docs/btn-clicked.png | Bin 0 -> 178496 bytes docs/canvas-panels.jpg | Bin 0 -> 95217 bytes docs/default-gjs.jpg | Bin 0 -> 25888 bytes docs/default-sm.jpg | Bin 0 -> 23452 bytes docs/default-traits.png | Bin 0 -> 14048 bytes docs/demo-view.png | Bin 0 -> 70996 bytes docs/empty-gjs.png | Bin 0 -> 23618 bytes docs/enabled-sm.jpg | Bin 0 -> 11496 bytes docs/faq.html | 33 ++ docs/getting-started.html | 586 ++++++++++++++++++++++ docs/grapes.min.js | 12 + docs/guides/Replace-Rich-Text-Editor.html | 103 ++++ docs/index.html | 42 ++ docs/input-custom-traits.png | Bin 0 -> 17206 bytes docs/logo-icon.png | Bin 0 -> 13848 bytes docs/logo.png | Bin 0 -> 1711 bytes docs/modules/Assets.html | 365 ++++++++++++++ docs/modules/Blocks.html | 73 +++ docs/modules/Components-js.html | 168 +++++++ docs/modules/Components.html | 196 ++++++++ docs/modules/Plugins.html | 77 +++ docs/modules/Storage.html | 197 ++++++++ docs/modules/Style-manager.html | 50 ++ docs/modules/Traits.html | 130 +++++ docs/new-btn.png | Bin 0 -> 10208 bytes docs/new-panel.png | Bin 0 -> 26108 bytes docs/style-comp.jpg | Bin 0 -> 43949 bytes 92 files changed, 3604 insertions(+) create mode 100644 docs/404.html create mode 100644 docs/Home.html create mode 100644 docs/api/assets.html create mode 100644 docs/api/block_manager.html create mode 100644 docs/api/commands.html create mode 100644 docs/api/components.html create mode 100644 docs/api/css_composer.html create mode 100644 docs/api/device_manager.html create mode 100644 docs/api/editor.html create mode 100644 docs/api/index.html create mode 100644 docs/api/keymaps.html create mode 100644 docs/api/modal_dialog.html create mode 100644 docs/api/panels.html create mode 100644 docs/api/rich_text_editor.html create mode 100644 docs/api/selector_manager.html create mode 100644 docs/api/storage_manager.html create mode 100644 docs/api/style_manager.html create mode 100644 docs/api/undo_manager.html create mode 100644 docs/assets-builtin-modal.png create mode 100644 docs/assets-empty-view.png create mode 100644 docs/assets-full-dropzone.gif create mode 100644 docs/assets-svg-view.png create mode 100644 docs/assets-uploader.png create mode 100644 docs/assets/css/0.styles.680773b3.css create mode 100644 docs/assets/img/search.83621669.svg create mode 100644 docs/assets/js/1.4c1eabe5.js create mode 100644 docs/assets/js/10.4e962f3e.js create mode 100644 docs/assets/js/11.1feb9616.js create mode 100644 docs/assets/js/12.aff1f64d.js create mode 100644 docs/assets/js/13.f5710b12.js create mode 100644 docs/assets/js/14.78680387.js create mode 100644 docs/assets/js/15.6ee7f49c.js create mode 100644 docs/assets/js/16.89382312.js create mode 100644 docs/assets/js/17.322b5a49.js create mode 100644 docs/assets/js/18.b4dfc6ac.js create mode 100644 docs/assets/js/19.91169ac8.js create mode 100644 docs/assets/js/2.913089f8.js create mode 100644 docs/assets/js/20.0f79fdeb.js create mode 100644 docs/assets/js/21.5afad075.js create mode 100644 docs/assets/js/22.fbaff709.js create mode 100644 docs/assets/js/23.95e202fd.js create mode 100644 docs/assets/js/24.4fed3e13.js create mode 100644 docs/assets/js/25.51945ea0.js create mode 100644 docs/assets/js/26.685b07a3.js create mode 100644 docs/assets/js/27.8c514210.js create mode 100644 docs/assets/js/28.14c2ddb7.js create mode 100644 docs/assets/js/29.38c333a6.js create mode 100644 docs/assets/js/3.ea5de9c2.js create mode 100644 docs/assets/js/30.16f00928.js create mode 100644 docs/assets/js/31.6be64816.js create mode 100644 docs/assets/js/32.4ae7d1c2.js create mode 100644 docs/assets/js/33.de44a98d.js create mode 100644 docs/assets/js/34.7c6fa057.js create mode 100644 docs/assets/js/35.a1820a66.js create mode 100644 docs/assets/js/36.850684b6.js create mode 100644 docs/assets/js/37.91f76ccf.js create mode 100644 docs/assets/js/38.9e9e0a77.js create mode 100644 docs/assets/js/4.beae289b.js create mode 100644 docs/assets/js/5.8085c569.js create mode 100644 docs/assets/js/6.a2b96fcb.js create mode 100644 docs/assets/js/7.404a3812.js create mode 100644 docs/assets/js/8.bab4a56f.js create mode 100644 docs/assets/js/9.50c3291f.js create mode 100644 docs/assets/js/app.cb65ab74.js create mode 100644 docs/blocks3.jpg create mode 100644 docs/btn-clicked.png create mode 100644 docs/canvas-panels.jpg create mode 100644 docs/default-gjs.jpg create mode 100644 docs/default-sm.jpg create mode 100644 docs/default-traits.png create mode 100644 docs/demo-view.png create mode 100644 docs/empty-gjs.png create mode 100644 docs/enabled-sm.jpg create mode 100644 docs/faq.html create mode 100644 docs/getting-started.html create mode 100644 docs/grapes.min.js create mode 100644 docs/guides/Replace-Rich-Text-Editor.html create mode 100644 docs/index.html create mode 100644 docs/input-custom-traits.png create mode 100644 docs/logo-icon.png create mode 100644 docs/logo.png create mode 100644 docs/modules/Assets.html create mode 100644 docs/modules/Blocks.html create mode 100644 docs/modules/Components-js.html create mode 100644 docs/modules/Components.html create mode 100644 docs/modules/Plugins.html create mode 100644 docs/modules/Storage.html create mode 100644 docs/modules/Style-manager.html create mode 100644 docs/modules/Traits.html create mode 100644 docs/new-btn.png create mode 100644 docs/new-panel.png create mode 100644 docs/style-comp.jpg diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 000000000..4192995ce --- /dev/null +++ b/docs/404.html @@ -0,0 +1,19 @@ + + + + + + GrapesJS + + + + + + + + + +

404

How did we get here?
Take me home.
+ + + diff --git a/docs/Home.html b/docs/Home.html new file mode 100644 index 000000000..61a537a8f --- /dev/null +++ b/docs/Home.html @@ -0,0 +1,335 @@ + + + + + + Getting started | GrapesJS + + + + + + + + + +

Getting started

This page will introduce you to the main options of GrapesJS and how it works, in the way to be able to create your custom editor.

The pretty minimalistic way to instantiate the editor could be like this:

<link rel="stylesheet" href="path/to/grapes.min.css">
+<script src="path/to/grapes.min.js"></script>
+
+<div id="gjs"></div>
+
+<script type="text/javascript">
+  var editor = grapesjs.init({
+      container : '#gjs',
+      components: '<div class="txt-red">Hello world!</div>',
+      style: '.txt-red{color: red}',
+  });
+</script>
+

In just few lines, with the default configurations, you're already able to see something with which play around.

[[img/default-gjs.jpg]]

You'll see components commands on top left position that come handy to create and manage your blocks, below there are options which need to highlight and export them. When you select components ('mouse pointer' icon), on the right side, you should see pop up Class Manager and Style Manager options which allow to customize the style of the components. There is also a Layer Manager/Navigator ('hamburger' icon) which helps to manage easily the structure.

Of course all those stuff (panels, buttons, commands, etc.) are set just as default so you can overwrite them and add more other. Before you start to create things you should know that GrapesJS UI is composed basically by a canvas (where you will 'draw') and panels (which will contain buttons)

[[img/canvas-panels.jpg]]

If you'd like to extend the already instantiated editor you have to check API Reference. Check also how to create plugins using the same API. +In this guide we'll focus on how to initialize the editor with all custom UI from scratch.

Let's start the editor with some basic toolbar panel

...
+var editor = grapesjs.init({
+    container : '#gjs',
+    height: '100%',
+
+    panels: {
+      defaults: [{
+          id: 'commands',
+      }],
+    }
+});
+...
+

In this example we set a panel with 'commands' as an id and after the render we'll see nothing more than an empty div added to our panels. The new panel is already styled as the id 'commands' is one of the default but you can use whatever you like and place it wherever you want with CSS. With refresh we might see something like shown in the image below, with the new panel on the left:

[[img/new-panel.png]]

Check Editor API Reference for more details about editor configurations

Now let's put some button inside

...
+  panels: {
+    defaults  : [{
+        id      : 'commands',
+        buttons : [{
+            id          : 'smile',
+            className   : 'fa fa-smile-o',
+            attributes  : { title: 'Smile' }
+        }],
+    }],
+  }
+...
+

On refresh the page might present some changes ('fa fa-smile-o' are from FontAwesome set, so be sure to have placed correctly the font directory)

[[img/new-btn.png]]

Yeah, the button is pretty nice and happy, but useless without any command assigned, if you click on it nothing gonna happen.

Check Panels API Reference for more details about Panels and Buttons

Assigning commands is pretty easy, but before you should define one or use one of defaults (Built-in commands). So in this case we gonna create a new one.

...
+  panels: {
+    defaults  : [{
+        id      : 'commands',
+        buttons : [{
+            id          : 'smile',
+            className   : 'fa fa-smile-o',
+            attributes  : { title: 'Smile' },
+            command     : 'helloWorld',
+        }],
+    }],
+  },
+  commands: {
+    defaults: [{
+        id: 'helloWorld',
+
+        run:  function(editor, senderBtn){
+          alert('Hello world!');
+          // Deactivate button
+          senderBtn.set('active', false);
+        },
+
+        stop:  function(editor, senderBtn){
+        },
+    }]
+  }
+...
+

As you see we added a new command helloWorld and used its id as an identifier inside button.command. In addition to this we've also implemented two required methods, run and stop, to make button execute commands.

[[img/btn-clicked.png]]

Check Commands API Reference

Check the demo for more complete usage of panels, buttons and built-in commands.

Components

Components are elements inside the canvas, which can be drawn by commands or injected directly via configurations. In simple terms components represent the structure of our HTML document. You can init the editor with passing components as an HTML string

...
+  // Disable default local storage in case you've already used GrapesJS
+  storageManager: {type: 'none'},
+
+  components: '<div style="width:300px; min-height:100px; margin: 0 auto"></div>' +
+              '<div style="width:400px; min-height:100px; margin: 0 auto"></div>' +
+              '<div style="width:500px; min-height:100px; margin: 0 auto"></div>',
+...
+

We added 3 simple components with some basic style. If you refresh probably you'll see the same empty page but are actually there, you only need to highlight them. +For this purpose already exists a command, so add it to your panel in this way

...
+  panels: {
+    defaults  : [{
+        id      : 'commands',
+        buttons : [
+          {
+            id: 'smile',
+            ...
+          },
+          {
+            id        : 'vis',
+            className : 'fa fa-eye',
+            command   : 'sw-visibility',
+            context   : 'some-random-context', // For grouping context of buttons in the same panel
+            active    : true,
+          },
+        ],
+    }],
+  },
+...
+

Worth noting the use of context option (try to click 'smile' command without it) and active to enable it after the render. +Now you should be able to see blocks inside canvas.

[[img/blocks3.jpg]]

You could add other commands to enable interactions with blocks. Check Built-in commands to get more information

Check Components API Reference

Style Manager

Any HTML structure requires, at some point, a proper style, so to meet this need the Style Manager was added as a built-in feature in GrapesJS. Style manager is composed by sectors, which group inside different types of CSS properties. So you can add, for instance, a Dimension sector for width and height, and another one as Typography for font-size and color. So it's up to you decide how organize sectors.

To enable this module we rely on a built-in command open-sm, which shows up the Style Manager, which we gonna bind to another button in a separate panel

...
+panels: {
+    defaults  : [
+      {
+        id      : 'commands',
+        ...
+      },{
+        // If you use this id the default CSS will place this panel on top right corner for you
+        id      : 'views',
+        buttons : [{
+            id        : 'open-style-manager',
+            className : 'fa fa-paint-brush',
+            command   : 'open-sm',
+            active    : true,
+        }]
+      }
+    ],
+},
+...
+

After this you'll be able to see something like in the image below

[[img/enabled-sm.jpg]]

As you can see Style Manager is enabled but before using it you have to select an element in the canvas, for this purpose we can add another button with a built-in command select-comp in this way

...
+  panels: {
+    defaults  : [{
+        id      : 'commands',
+        buttons : [
+          {
+            id: 'smile',
+            ...
+          },{
+            id         : 'select',
+            className : 'fa fa-mouse-pointer',
+            command   : 'select-comp',
+          }
+        ],
+    }],
+  },
+...
+

Selecting one of the component will show up the Style Manager with default sectors, properties and an input where you can manage classes. The default class you see (cXX) was generated by extracting style from the component

[[img/default-sm.jpg]]

As we exploring different configurations inside GrapesJS we gonna overwrite all the default sectors to create some custom one

Let's put a few sectors with use of buildProps which helps us building common properties

...
+  styleManager : {
+    sectors: [{
+      name: 'Dimension',
+      buildProps: ['width', 'min-height']
+    },{
+      name: 'Extra',
+      buildProps: ['background-color', 'box-shadow']
+    }]
+  }
+...
+

Now you should be able to style components

[[img/style-comp.jpg]]

You can check the list of usable properties inside buildProps here: Built-in properties +otherwise is possible to build them on your own, let's see how we'd have done the previous configuration without the buildProps helper

...
+styleManager : {
+  sectors: [
+    {
+      name: 'Dimension',
+      properties:[
+        {
+            // Just the name
+            name      : 'Width',
+            // CSS property
+            property  : 'width',
+            // Type of the input, options: integer | radio | select | color | file | composite | stack
+            type      : 'integer',
+            // Units, available only for 'integer' types
+            units     : ['px', '%'],
+            // Default value
+            defaults  : 'auto',
+            // Min value, available only for 'integer' types
+            min       : 0,
+        },{
+            // Here I'm going to be more original
+            name      : 'Minimum height',
+            property  : 'min-height',
+            type      : 'select',
+            defaults  : '100px',
+            // List of options, available only for 'select' and 'radio'  types
+            list    : [{
+                      value   : '100px',
+                      name    : '100',
+                    },{
+                      value   : '200px',
+                      name    : '200',
+                    },{
+                      value   : '300px',
+                      name    : '300',
+                    }],
+        }
+      ]
+    },{
+      name: 'Extra',
+      // Sectors are expanded by default so put this one closed
+      open: false,
+      properties:[
+        {
+          name      : 'Background',
+          property  : 'background-color',
+          type      : 'color',
+          defaults:   'none'
+        },{
+          name    : 'Box shadow',
+          property  : 'box-shadow',
+          type    : 'stack',
+          preview   : true,
+          // List of nested properties, available only for 'stack' and 'composite'  types
+          properties  : [{
+                  name:     'Shadow type',
+                  // Nested properties with stack/composite type don't require proper 'property' name
+                  // as all of them will be merged to parent property, eg. box-shadow: X Y ...;
+                  property:   'shadow-type',
+                  type:     'select',
+                  defaults:   '',
+                  list:   [ { value : '', name : 'Outside', },
+                              { value : 'inset', name : 'Inside', }],
+                },{
+                  name:     'X position',
+                  property:   'shadow-x',
+                  type:     'integer',
+                  units:    ['px','%'],
+                  defaults :  0,
+                },{
+                  name:     'Y position',
+                  property:   'shadow-y',
+                  type:     'integer',
+                  units:    ['px','%'],
+                  defaults :  0,
+                },{
+                  name:     'Blur',
+                  property: 'shadow-blur',
+                  type:     'integer',
+                  units:    ['px'],
+                  defaults :  0,
+                  min:    0,
+                },{
+                  name:     'Spread',
+                  property:   'shadow-spread',
+                  type:     'integer',
+                  units:    ['px'],
+                  defaults :  0,
+                },{
+                  name:     'Color',
+                  property:   'shadow-color',
+                  type:     'color',
+                  defaults:   'black',
+                },],
+        }
+      ]
+    }
+  ]
+}
+...
+

As you can see using buildProps actually will save you a lot of work. You could also mix this techniques to obtain custom properties in less time. For example, let's see how can we setup the same width but with a different value of min:

...
+  styleManager : {
+    sectors: [{
+      name: 'Dimension',
+      buildProps: ['width', 'min-height'],
+      properties:[{
+        property: 'width', // Use 'property' as id
+        min: 30
+      }]
+    },
+    ...
+  }
+...
+

Check Style Manager API Reference

Store/load data

In this last part we're gonna see how to store and load template data inside GrapesJS. You may already noticed that even if you refresh the page after changes on canvas your data are not lost and this because GrapesJS comes with some built-in storage implementation. +The default one is the localStorage which is pretty simple and all the data are stored locally on your computer. Let's see the options available for this storage

...
+var editor = grapesjs.init({
+    container : '#gjs',
+    ...
+    // Default configuration
+    storageManager: {
+      id: 'gjs-',             // Prefix identifier that will be used inside storing and loading
+      type: 'local',          // Type of the storage
+      autosave: true,         // Store data automatically
+      autoload: true,         // Autoload stored data on init
+      stepsBeforeSave: 1,     // If autosave enabled, indicates how many changes are necessary before store method is triggered
+      storeComponents: false, // Enable/Disable storing of components in JSON format
+      storeStyles: false,     // Enable/Disable storing of rules/style in JSON format
+      storeHtml: true,        // Enable/Disable storing of components as HTML string
+      storeCss: true,         // Enable/Disable storing of rules/style as CSS string
+    }
+});
+...
+

Worth noting the defaut id parameter which adds a prefix for all keys to store. If you check the localStorage inside your DOM panel you'll see something like { 'gjs-components': '<div>....' ...} in this way it prevents the risk of collisions, quite common with localStorage use in large applications.

Storing data locally it's easy and fast but useless in some common cases. In the next example we'll see how to setup a remote storage, which is not far from the previous one

...
+var editor = grapesjs.init({
+    container : '#gjs',
+    ...
+    storageManager: {
+      type: 'remote',
+      stepsBeforeSave: 10,
+      urlStore: 'http://store/endpoint',
+      urlLoad: 'http://load/endpoint',
+      params: {},   // For custom values on requests
+    }
+});
+...
+

As you can see we've left some default option unchanged, increased changes necessary for autosave triggering and passed remote endpoints.

If you prefer you could also disable autosaving and do it by yourself using some custom command in this way:

...
+  storageManager: {
+    type: 'remote',
+    autosave: false,
+  },
+  ...
+  commands: {
+    defaults: [{
+        id: 'storeData',
+        run:  function(editor, senderBtn){
+          editor.store();
+        },
+    }]
+  }
+...
+

Check Storage Manager API Reference

Last Updated: 7/13/2018, 12:12:35 AM
+ + + diff --git a/docs/api/assets.html b/docs/api/assets.html new file mode 100644 index 000000000..0ac3062b0 --- /dev/null +++ b/docs/api/assets.html @@ -0,0 +1,85 @@ + + + + + + GrapesJS + + + + + + + + + +

AssetManager

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ assetManager: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const assetManager = editor.AssetManager;
+

add

Add new asset/s to the collection. URLs are supposed to be unique

Parameters

Examples

// In case of strings, would be interpreted as images
+assetManager.add('http://img.jpg');
+assetManager.add(['http://img.jpg', './path/to/img.png']);
+
+// Using objects you could indicate the type and other meta informations
+assetManager.add({
+	src: 'http://img.jpg',
+	//type: 'image',	//image is default
+	height: 300,
+width: 200,
+});
+assetManager.add([{
+	src: 'http://img.jpg',
+},{
+	src: './path/to/img.png',
+}]);
+

Returns Model

get

Returns the asset by URL

Parameters

Examples

var asset = assetManager.get('http://img.jpg');
+

Returns Object Object representing the asset

getAll

Return the global collection, containing all the assets

Returns Collection

getAllVisible

Return the visible collection, which containes assets actually rendered

Returns Collection

remove

Remove the asset by its URL

Parameters

Examples

assetManager.remove('http://img.jpg');
+

Returns this

store

Store assets data to the selected storage

Parameters

  • noStoreBoolean If true, won't store

Examples

var assets = assetManager.store();
+

Returns Object Data to store

load

Load data from the passed object. +The fetched data will be added to the collection.

Parameters

  • dataObject Object of data to load (optional, default {})

Examples

var assets = assetManager.load({
+	assets: [...]
+})
+

Returns Object Loaded assets

getContainer

Return the Asset Manager Container

Returns HTMLElement

getAssetsEl

Get assets element container

Returns HTMLElement

render

Render assets

Parameters

  • assetsarray Assets to render, without the argument will render +all global assets

Examples

// Render all assets
+assetManager.render();
+
+// Render some of the assets
+const assets = assetManager.getAll();
+assetManager.render(assets.filter(
+ asset => asset.get('category') == 'cats'
+));
+

Returns HTMLElement

addType

Add new type. If you want to get more about type definition we suggest to read the module's page

Parameters

  • idstring Type ID
  • definitionObject Definition of the type. Each definition contains +model (business logic), view (presentation logic) +and isType function which recognize the type of the +passed entity

Examples

assetManager.addType('my-type', {
+ model: {},
+ view: {},
+ isType: (value) => {},
+})
+

getType

Get type

Parameters

Returns Object Type definition

getTypes

Get types

Returns Array

Last Updated: 7/8/2018, 1:46:22 PM
+ + + diff --git a/docs/api/block_manager.html b/docs/api/block_manager.html new file mode 100644 index 000000000..07052c7f4 --- /dev/null +++ b/docs/api/block_manager.html @@ -0,0 +1,81 @@ + + + + + + GrapesJS + + + + + + + + + +

BlockManager

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ blockManager: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const blockManager = editor.BlockManager;
+

getConfig

Get configuration object

Returns Object

onLoad

Load default blocks if the collection is empty

add

Add new block to the collection.

Parameters

  • idstring Block id
  • optsObject Options +
    • opts.labelstring Name of the block
    • opts.contentstring HTML content
    • opts.category(string | Object) Group the block inside a catgegory. +You should pass objects with id property, eg: +{id: 'some-uid', label: 'My category'} +The string will be converted in: +'someid' => {id: 'someid', label: 'someid'}
    • opts.attributesObject Block attributes (optional, default {})

Examples

blockManager.add('h1-block', {
+  label: 'Heading',
+  content: '<h1>Put your title here</h1>',
+  category: 'Basic',
+  attributes: {
+    title: 'Insert h1 block'
+  }
+});
+

Returns Block Added block

get

Return the block by id

Parameters

Examples

const block = blockManager.get('h1-block');
+console.log(JSON.stringify(block));
+// {label: 'Heading', content: '<h1>Put your ...', ...}
+

getAll

Return all blocks

Examples

const blocks = blockManager.getAll();
+console.log(JSON.stringify(blocks));
+// [{label: 'Heading', content: '<h1>Put your ...'}, ...]
+

Returns Collection

getAllVisible

Return the visible collection, which containes blocks actually rendered

Returns Collection

remove

Remove a block by id

Parameters

Returns Block Removed block

getCategories

Get all available categories. +It's possible to add categories only within blocks via 'add()' method

Returns (Array | Collection)

getContainer

Return the Blocks container element

Returns HTMLElement

render

Render blocks

Parameters

  • blocksArray Blocks to render, without the argument will render +all global blocks

Examples

// Render all blocks (inside the global collection)
+blockManager.render();
+
+// Render new set of blocks
+const blocks = blockManager.getAll();
+blockManager.render(blocks.filter(
+ block => block.get('category') == 'sections'
+));
+// Or a new set from an array
+blockManager.render([
+ {label: 'Label text', content: '<div>Content</div>'}
+]);
+
+// Back to blocks from the global collection
+blockManager.render();
+

Returns HTMLElement Rendered element

Last Updated: 7/8/2018, 1:46:22 PM
+ + + diff --git a/docs/api/commands.html b/docs/api/commands.html new file mode 100644 index 000000000..b05cce7dc --- /dev/null +++ b/docs/api/commands.html @@ -0,0 +1,58 @@ + + + + + + GrapesJS + + + + + + + + + +

Commands

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ commands: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const commands = editor.Commands;
+

add

Add new command to the collection

Parameters

  • idstring Command's ID
  • command(Object | Function) Object representing your command, +By passing just a function it's intended as a stateless command +(just like passing an object with only run method).

Examples

commands.add('myCommand', {
+	run(editor, sender) {
+		alert('Hello world!');
+	},
+	stop(editor, sender) {
+	},
+});
+// As a function
+commands.add('myCommand2', editor => { ... });
+

Returns this

get

Get command by ID

Parameters

Examples

var myCommand = commands.get('myCommand');
+myCommand.run();
+

Returns Object Object representing the command

has

Check if command exists

Parameters

Returns Boolean

Last Updated: 7/8/2018, 1:46:22 PM
+ + + diff --git a/docs/api/components.html b/docs/api/components.html new file mode 100644 index 000000000..b46a487ef --- /dev/null +++ b/docs/api/components.html @@ -0,0 +1,89 @@ + + + + + + GrapesJS + + + + + + + + + +

DomComponents

With this module is possible to manage components inside the canvas. You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ domComponents: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const domComponents = editor.DomComponents;
+

load

Load components from the passed object, if the object is empty will try to fetch them +autonomously from the selected storage +The fetched data will be added to the collection

Parameters

  • dataObject Object of data to load (optional, default '')

Returns Object Loaded data

store

Store components on the selected storage

Parameters

  • noStoreBoolean If true, won't store

Returns Object Data to store

getWrapper

Returns root component inside the canvas. Something like <body> inside HTML page +The wrapper doesn't differ from the original Component Model

Examples

// Change background of the wrapper and set some attribute
+var wrapper = domComponents.getWrapper();
+wrapper.set('style', {'background-color': 'red'});
+wrapper.set('attributes', {'title': 'Hello!'});
+

Returns Component Root Component

getComponents

Returns wrapper's children collection. Once you have the collection you can +add other Components(Models) inside. Each component can have several nested +components inside and you can nest them as more as you wish.

Examples

// Let's add some component
+var wrapperChildren = domComponents.getComponents();
+var comp1 = wrapperChildren.add({
+  style: { 'background-color': 'red'}
+});
+var comp2 = wrapperChildren.add({
+  tagName: 'span',
+  attributes: { title: 'Hello!'}
+});
+// Now let's add an other one inside first component
+// First we have to get the collection inside. Each
+// component has 'components' property
+var comp1Children = comp1.get('components');
+// Procede as before. You could also add multiple objects
+comp1Children.add([
+  { style: { 'background-color': 'blue'}},
+  { style: { height: '100px', width: '100px'}}
+]);
+// Remove comp2
+wrapperChildren.remove(comp2);
+

Returns Components Collection of components

addComponent

Add new components to the wrapper's children. It's the same +as 'domComponents.getComponents().add(...)'

Parameters

  • component(Object | Component | Array<Object>) Component/s to add +
    • component.tagNamestring Tag name (optional, default 'div')
    • component.typestring Type of the component. Available: ''(default), 'text', 'image' (optional, default '')
    • component.removableboolean If component is removable (optional, default true)
    • component.draggableboolean If is possible to move the component around the structure (optional, default true)
    • component.droppableboolean If is possible to drop inside other components (optional, default true)
    • component.badgableboolean If the badge is visible when the component is selected (optional, default true)
    • component.stylableboolean If is possible to style component (optional, default true)
    • component.copyableboolean If is possible to copy&paste the component (optional, default true)
    • component.contentstring String inside component (optional, default '')
    • component.styleObject Style object (optional, default {})
    • component.attributesObject Attribute object (optional, default {})

Examples

// Example of a new component with some extra property
+var comp1 = domComponents.addComponent({
+  tagName: 'div',
+  removable: true, // Can't remove it
+  draggable: true, // Can't move it
+  copyable: true, // Disable copy/past
+  content: 'Content text', // Text inside component
+  style: { color: 'red'},
+  attributes: { title: 'here' }
+});
+

Returns (Component | Array<Component>) Component/s added

render

Render and returns wrapper element with all components inside. +Once the wrapper is rendered, and it's what happens when you init the editor, +the all new components will be added automatically and property changes are all +updated immediately

Returns HTMLElement

clear

Remove all components

Returns this

Last Updated: 7/8/2018, 1:46:22 PM
+ + + diff --git a/docs/api/css_composer.html b/docs/api/css_composer.html new file mode 100644 index 000000000..28481c5c7 --- /dev/null +++ b/docs/api/css_composer.html @@ -0,0 +1,79 @@ + + + + + + GrapesJS + + + + + + + + + +

CssComposer

This module contains and manage CSS rules for the template inside the canvas. +You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ cssComposer: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const cssComposer = editor.CssComposer;
+

load

Load data from the passed object, if the object is empty will try to fetch them +autonomously from the storage manager. +The fetched data will be added to the collection

Parameters

  • dataObject Object of data to load

Returns Object Loaded rules

store

Store data to the selected storage

Parameters

  • noStoreBoolean If true, won't store

Returns Object Data to store

add

Add new rule to the collection, if not yet exists with the same selectors

Parameters

  • selectorsArray<Selector> Array of selectors
  • stateString Css rule state
  • widthString For which device this style is oriented
  • optsObject Other options for the rule (optional, default {})

Examples

var sm = editor.SelectorManager;
+var sel1 = sm.add('myClass1');
+var sel2 = sm.add('myClass2');
+var rule = cssComposer.add([sel1, sel2], 'hover');
+rule.set('style', {
+  width: '100px',
+  color: '#fff',
+});
+

Returns Model

get

Get the rule

Parameters

  • selectorsArray<Selector> Array of selectors
  • stateString Css rule state
  • widthString For which device this style is oriented
  • rulePropsObject Other rule props

Examples

var sm = editor.SelectorManager;
+var sel1 = sm.add('myClass1');
+var sel2 = sm.add('myClass2');
+var rule = cssComposer.get([sel1, sel2], 'hover');
+// Update the style
+rule.set('style', {
+  width: '300px',
+  color: '#000',
+});
+

Returns (Model | null)

getAll

Get the collection of rules

Returns Collection

clear

Remove all rules

Returns this

setIdRule

Add/update the CSS rule with id selector

Parameters

  • namestring Id selector name, eg. 'my-id'
  • styleObject Style properties and values (optional, default {})
  • optsObject Custom options, like state and mediaText (optional, default {})

Examples

const rule = cc.setIdRule('myid', { color: 'red' });
+const ruleHover = cc.setIdRule('myid', { color: 'blue' }, { state: 'hover' });
+// This will add current CSS:
+// #myid { color: red }
+// #myid:hover { color: blue }
+

Returns CssRule The new/updated rule

getIdRule

Get the CSS rule by id selector

Parameters

  • namestring Id selector name, eg. 'my-id'
  • optsObject Custom options, like state and mediaText (optional, default {})

Examples

const rule = cc.getIdRule('myid');
+const ruleHover = cc.setIdRule('myid', { state: 'hover' });
+

Returns CssRule

setClassRule

Add/update the CSS rule with class selector

Parameters

  • namestring Class selector name, eg. 'my-class'
  • styleObject Style properties and values (optional, default {})
  • optsObject Custom options, like state and mediaText (optional, default {})

Examples

const rule = cc.setClassRule('myclass', { color: 'red' });
+const ruleHover = cc.setClassRule('myclass', { color: 'blue' }, { state: 'hover' });
+// This will add current CSS:
+// .myclass { color: red }
+// .myclass:hover { color: blue }
+

Returns CssRule The new/updated rule

getClassRule

Get the CSS rule by class selector

Parameters

  • namestring Class selector name, eg. 'my-class'
  • optsObject Custom options, like state and mediaText (optional, default {})

Examples

const rule = cc.getClassRule('myclass');
+const ruleHover = cc.getClassRule('myclass', { state: 'hover' });
+

Returns CssRule

Last Updated: 7/8/2018, 11:44:23 PM
+ + + diff --git a/docs/api/device_manager.html b/docs/api/device_manager.html new file mode 100644 index 000000000..b017740f2 --- /dev/null +++ b/docs/api/device_manager.html @@ -0,0 +1,56 @@ + + + + + + GrapesJS + + + + + + + + + +

DeviceManager

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ deviceManager: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const deviceManager = editor.DeviceManager;
+

add

Add new device to the collection. URLs are supposed to be unique

Parameters

Examples

deviceManager.add('Tablet', '900px');
+deviceManager.add('Tablet2', '900px', {
+ height: '300px',
+ widthMedia: '810px', // the width that will be used for the CSS media
+});
+

Returns Device Added device

get

Return device by name

Parameters

Examples

var device = deviceManager.get('Tablet');
+console.log(JSON.stringify(device));
+// {name: 'Tablet', width: '900px'}
+

getAll

Return all devices

Examples

var devices = deviceManager.getAll();
+console.log(JSON.stringify(devices));
+// [{name: 'Desktop', width: ''}, ...]
+

Returns Collection

Last Updated: 7/8/2018, 11:31:47 PM
+ + + diff --git a/docs/api/editor.html b/docs/api/editor.html new file mode 100644 index 000000000..e3fe86aab --- /dev/null +++ b/docs/api/editor.html @@ -0,0 +1,115 @@ + + + + + + GrapesJS + + + + + + + + + +

Editor

Editor contains the top level API which you'll probably use to customize the editor or extend it with plugins. +You get the Editor instance on init method and you can pass options via its Configuration Object

const editor = grapesjs.init({
+   // options
+});
+

Available Events

You can make use of available events in this way

editor.on('EVENT-NAME', (some, argument) => {
+   // do something
+})
+

Components

  • component:add - Triggered when a new component is added to the editor, the model is passed as an argument to the callback
  • component:remove - Triggered when a component is removed, the model is passed as an argument to the callback
  • component:clone - Triggered when a new component is added by a clone command, the model is passed as an argument to the callback
  • component:update - Triggered when a component is updated (moved, styled, etc.), the model is passed as an argument to the callback
  • component:update:{propertyName} - Listen any property change, the model is passed as an argument to the callback
  • component:styleUpdate - Triggered when the style of the component is updated, the model is passed as an argument to the callback
  • component:styleUpdate:{propertyName} - Listen for a specific style property change, the model is passed as an argument to the callback
  • component:selected - New component selected, the selected model is passed as an argument to the callback
  • component:deselected - Component deselected, the deselected model is passed as an argument to the callback
  • component:toggled - Component selection changed, toggled model is passed as an argument to the callback

Blocks

  • block:add - New block added
  • block:remove - Block removed
  • block:drag:start - Started dragging block, model of the block is passed as an argument
  • block:drag - Dragging block, the block's model and the drag event are passed as arguments
  • block:drag:stop - Dragging of the block is stopped. As agruments for the callback you get, the dropped component model (if dropped successfully) and the model of the block

Assets

  • asset:add - New asset added
  • asset:remove - Asset removed
  • asset:upload:start - Before the upload is started
  • asset:upload:end - After the upload is ended
  • asset:upload:error - On any error in upload, passes the error as an argument
  • asset:upload:response - On upload response, passes the result as an argument

Keymaps

  • keymap:add - New keymap added. The new keyamp object is passed as an argument
  • keymap:remove - Keymap removed. The removed keyamp object is passed as an argument
  • keymap:emit - Some keymap emitted, in arguments you get keymapId, shortcutUsed, Event
  • keymap:emit:{keymapId} - keymapId emitted, in arguments you get keymapId, shortcutUsed, Event

Style Manager

  • styleManager:change - Triggered on style property change from new selected component, the view of the property is passed as an argument to the callback
  • styleManager:change:{propertyName} - As above but for a specific style property

Storages

  • storage:start - Before the storage request is started
  • storage:start:store - Before the store request. The object to store is passed as an argumnet (which you can edit)
  • storage:start:load - Before the load request. Items to load are passed as an argumnet (which you can edit)
  • storage:load - Triggered when something was loaded from the storage, loaded object passed as an argumnet
  • storage:store - Triggered when something is stored to the storage, stored object passed as an argumnet
  • storage:end - After the storage request is ended
  • storage:end:store - After the store request
  • storage:end:load - After the load request
  • storage:error - On any error on storage request, passes the error as an argument
  • storage:error:store - Error on store request, passes the error as an argument
  • storage:error:load - Error on load request, passes the error as an argument

Canvas

  • canvas:dragenter - When something is dragged inside the canvas, DataTransfer instance passed as an argument
  • canvas:dragover - When something is dragging on canvas, DataTransfer instance passed as an argument
  • canvas:drop - Something is dropped in canvas, DataTransfer instance and the dropped model are passed as arguments
  • canvas:dragend - When a drag operation is ended, DataTransfer instance passed as an argument
  • canvas:dragdata - On any dataTransfer parse, DataTransfer instance and the result are passed as arguments. +By changing result.content you're able to customize what is dropped

Selectors

  • selector:add - Triggers when a new selector/class is created

RTE

  • rte:enable - RTE enabled. The view, on which RTE is enabled, is passed as an argument
  • rte:disable - RTE disabled. The view, on which RTE is disabled, is passed as an argument

Commands

  • run:{commandName} - Triggered when some command is called to run (eg. editor.runCommand('preview'))
  • stop:{commandName} - Triggered when some command is called to stop (eg. editor.stopCommand('preview'))
  • run:{commandName}:before - Triggered before the command is called
  • stop:{commandName}:before - Triggered before the command is called to stop
  • abort:{commandName} - Triggered when the command execution is aborted (editor.on(run:preview:before, opts => opts.abort = 1);)

General

  • canvasScroll - Triggered when the canvas is scrolle
  • undo - Undo executed
  • redo - Redo executed
  • load - When the editor is loaded

getConfig

Returns configuration object

Parameters

Returns any Returns the configuration object or +the value of the specified property

getHtml

Returns HTML built inside canvas

Parameters

  • opts

Returns string HTML string

getCss

Returns CSS built inside canvas

Parameters

  • optsObject Options (optional, default {})

Returns string CSS string

getJs

Returns JS of all components

Returns string JS string

getComponents

Returns components in JSON format object

Returns Object

setComponents

Set components inside editor's canvas. This method overrides actual components

Parameters

Examples

editor.setComponents('<div class="cls">New component</div>');
+// or
+editor.setComponents({
+ type: 'text',
+  classes:['cls'],
+  content: 'New component'
+});
+

Returns this

addComponents

Add components

Parameters

  • components(Array<Object> | Object | string) HTML string or components model
  • optsObject Options +
    • opts.avoidUpdateStyleBoolean If the HTML string contains styles, +by default, they will be created and, if already exist, updated. When this option +is true, styles already created will not be updated. (optional, default false)

Examples

editor.addComponents('<div class="cls">New component</div>');
+// or
+editor.addComponents({
+ type: 'text',
+  classes:['cls'],
+  content: 'New component'
+});
+

Returns (Model | Array<Model>)

getStyle

Returns style in JSON format object

Returns Object

setStyle

Set style inside editor's canvas. This method overrides actual style

Parameters

Examples

editor.setStyle('.cls{color: red}');
+//or
+editor.setStyle({
+  selectors: ['cls']
+  style: { color: 'red' }
+});
+

Returns this

getSelected

Returns the last selected component, if there is one

Returns Model

getSelectedAll

Returns an array of all selected components

Returns Array

getSelectedToStyle

Get a stylable entity from the selected component. +If you select a component without classes the entity is the Component +itself and all changes will go inside its 'style' attribute. Otherwise, +if the selected component has one or more classes, the function will +return the corresponding CSS Rule

Returns Model

select

Select a component

Parameters

Examples

// Select dropped block
+editor.on('block:drag:stop', function(model) {
+ editor.select(model);
+});
+

Returns this

selectAdd

Add component to selection

Parameters

Examples

editor.selectAdd(model);
+

Returns this

selectRemove

Remove component from selection

Parameters

Examples

editor.selectRemove(model);
+

Returns this

selectToggle

Toggle component selection

Parameters

Examples

editor.selectToggle(model);
+

Returns this

setDevice

Set device to the editor. If the device exists it will +change the canvas to the proper width

Parameters

Examples

editor.setDevice('Tablet');
+

Returns this

getDevice

Return the actual active device

Examples

var device = editor.getDevice();
+console.log(device);
+// 'Tablet'
+

Returns string Device name

runCommand

Execute command

Parameters

  • idstring Command ID
  • optionsObject Custom options (optional, default {})

Examples

editor.runCommand('myCommand', {someValue: 1});
+

Returns any The return is defined by the command

stopCommand

Stop the command if stop method was provided

Parameters

  • idstring Command ID
  • optionsObject Custom options (optional, default {})

Examples

editor.stopCommand('myCommand', {someValue: 1});
+

Returns any The return is defined by the command

store

Store data to the current storage

Parameters

Returns Object Stored data

load

Load data from the current storage

Parameters

Returns Object Stored data

getContainer

Returns container element. The one which was indicated as 'container' +on init method

Returns HTMLElement

getDirtyCount

Return the count of changes made to the content and not yet stored. +This count resets at any store()

Returns number

setCustomRte

Replace the built-in Rich Text Editor with a custom one.

Parameters

  • objObject Custom RTE Interface

Examples

editor.setCustomRte({
+  // Function for enabling custom RTE
+  // el is the HTMLElement of the double clicked Text Component
+  // rte is the same instance you have returned the first time you call
+  // enable(). This is useful if need to check if the RTE is already enabled so
+  // ion this case you'll need to return the RTE and the end of the function
+  enable: function(el, rte) {
+    rte = new MyCustomRte(el, {}); // this depends on the Custom RTE API
+    ...
+    return rte; // return the RTE instance
+  },
+
+  // Disable the editor, called for example when you unfocus the Text Component
+ disable: function(el, rte) {
+    rte.blur(); // this depends on the Custom RTE API
+ }
+
+// Called when the Text Component is focused again. If you returned the RTE instance
+// from the enable function, the enable won't be called again instead will call focus,
+// in this case to avoid double binding of the editor
+ focus: function (el, rte) {
+  rte.focus(); // this depends on the Custom RTE API
+ }
+});
+

on

Attach event

Parameters

Returns this

off

Detach event

Parameters

Returns this

trigger

Trigger event

Parameters

Returns this

destroy

Destroy the editor

render

Render editor

Returns HTMLElement

Last Updated: 7/9/2018, 12:48:25 AM
+ + + diff --git a/docs/api/index.html b/docs/api/index.html new file mode 100644 index 000000000..917a50858 --- /dev/null +++ b/docs/api/index.html @@ -0,0 +1,36 @@ + + + + + + API Reference | GrapesJS + + + + + + + + + +

API Reference

Here you can find the documentation about GrapesJS' APIs. Mainly, you would use them for your editor to extend the basic functionality of the framework or you could also create a plugin and make those extensions reusable and available to others.

Last Updated: 7/9/2018, 1:03:59 AM
+ + + diff --git a/docs/api/keymaps.html b/docs/api/keymaps.html new file mode 100644 index 000000000..ea9867386 --- /dev/null +++ b/docs/api/keymaps.html @@ -0,0 +1,70 @@ + + + + + + GrapesJS + + + + + + + + + +

Keymaps

You can customize the initial state of the module from the editor initialization

const editor = grapesjs.init({
+ keymaps: {
+    // Object of keymaps
+   defaults: {
+     'your-namespace:keymap-name' {
+       keys: '⌘+z, ctrl+z',
+       handler: 'some-command-id'
+     },
+     ...
+   }
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const keymaps = editor.Keymaps;
+

getConfig

Get module configurations

Returns Object Configuration object

add

Add new keymap

Parameters

Examples

// 'ns' is just a custom namespace
+keymaps.add('ns:my-keymap', '⌘+j, ⌘+u, ctrl+j, alt+u', editor => {
+ console.log('do stuff');
+});
+// or
+keymaps.add('ns:my-keymap', '⌘+s, ctrl+s', 'some-gjs-command');
+
+// listen to events
+editor.on('keymap:emit', (id, shortcut, e) => {
+ // ...
+})
+

Returns Object Added keymap +or just a command id as a string

get

Get the keymap by id

Parameters

Examples

keymaps.get('ns:my-keymap');
+// -> {keys, handler};
+

Returns Object Keymap object

getAll

Get all keymaps

Examples

keymaps.getAll();
+// -> {id1: {}, id2: {}};
+

Returns Object

remove

Remove the keymap by id

Parameters

Examples

keymaps.remove('ns:my-keymap');
+// -> {keys, handler};
+

Returns Object Removed keymap

Last Updated: 7/9/2018, 12:03:36 AM
+ + + diff --git a/docs/api/modal_dialog.html b/docs/api/modal_dialog.html new file mode 100644 index 000000000..f8ff75db9 --- /dev/null +++ b/docs/api/modal_dialog.html @@ -0,0 +1,47 @@ + + + + + + GrapesJS + + + + + + + + + +

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ modal: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const modal = editor.Modal;
+

open

Open the modal window

Returns this

close

Close the modal window

Returns this

isOpen

Checks if the modal window is open

Returns Boolean

setTitle

Set the title to the modal window

Parameters

Examples

modal.setTitle('New title');
+

Returns this

getTitle

Returns the title of the modal window

Returns string

setContent

Set the content of the modal window

Parameters

Examples

modal.setContent('<div>Some HTML content</div>');
+

Returns this

getContent

Get the content of the modal window

Returns string

Last Updated: 7/8/2018, 11:47:37 PM
+ + + diff --git a/docs/api/panels.html b/docs/api/panels.html new file mode 100644 index 000000000..8d6a26302 --- /dev/null +++ b/docs/api/panels.html @@ -0,0 +1,92 @@ + + + + + + GrapesJS + + + + + + + + + +

Panels

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ panels: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const panelManager = editor.Panels;
+

getPanels

Returns the collection of panels

Returns Collection Collection of panel

getPanelsEl

Returns panels element

Returns HTMLElement

addPanel

Add new panel to the collection

Parameters

  • panel(Object | Panel) Object with right properties or an instance of Panel

Examples

var newPanel = panelManager.addPanel({
+  id: 'myNewPanel',
+ visible  : true,
+ buttons  : [...],
+});
+

Returns Panel Added panel. Useful in case passed argument was an Object

removePanel

Remove a panel from the collection

Parameters

  • panel(Object | Panel | String) Object with right properties or an instance of Panel or Painel id

Examples

const newPanel = panelManager.removePanel({
+  id: 'myNewPanel',
+ visible  : true,
+ buttons  : [...],
+});
+
+const newPanel = panelManager.removePanel('myNewPanel');
+

Returns Panel Removed panel. Useful in case passed argument was an Object

getPanel

Get panel by ID

Parameters

Examples

var myPanel = panelManager.getPanel('myNewPanel');
+

Returns (Panel | null)

addButton

Add button to the panel

Parameters

  • panelIdstring Panel's ID
  • button(Object | Button) Button object or instance of Button

Examples

var newButton = panelManager.addButton('myNewPanel',{
+  id: 'myNewButton',
+  className: 'someClass',
+  command: 'someCommand',
+  attributes: { title: 'Some title'},
+  active: false,
+});
+// It's also possible to pass the command as an object
+// with .run and .stop methods
+...
+command: {
+  run: function(editor) {
+    ...
+  },
+  stop: function(editor) {
+    ...
+  }
+},
+// Or simply like a function which will be evaluated as a single .run command
+...
+command: function(editor) {
+  ...
+}
+

Returns (Button | null) Added button. Useful in case passed button was an Object

removeButton

Remove button from the panel

Parameters

  • panelIdstring Panel's ID
  • button(Object | Button | String) Button object or instance of Button or button id

Examples

const removedButton = panelManager.removeButton('myNewPanel',{
+  id: 'myNewButton',
+  className: 'someClass',
+  command: 'someCommand',
+  attributes: { title: 'Some title'},
+  active: false,
+});
+
+// It's also possible to use the button id
+const removedButton = panelManager.removeButton('myNewPanel','myNewButton');
+

Returns (Button | null) Removed button.

getButton

Get button from the panel

Parameters

Examples

var button = panelManager.getButton('myPanel','myButton');
+

Returns (Button | null)

Last Updated: 7/14/2018, 3:19:12 AM
+ + + diff --git a/docs/api/rich_text_editor.html b/docs/api/rich_text_editor.html new file mode 100644 index 000000000..af10df8c1 --- /dev/null +++ b/docs/api/rich_text_editor.html @@ -0,0 +1,79 @@ + + + + + + GrapesJS + + + + + + + + + +

RichTextEditor

This module allows to customize the built-in toolbar of the Rich Text Editor and use commands from the HTML Editing APIs. +It's highly recommended to keep this toolbar as small as possible, especially from styling commands (eg. 'fontSize') and leave this task to the Style Manager

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ rte: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const rte = editor.RichTextEditor;
+

add

Add a new action to the built-in RTE toolbar

Parameters

  • namestring Action name
  • actionObject Action options (optional, default {})

Examples

rte.add('bold', {
+  icon: '<b>B</b>',
+  attributes: {title: 'Bold',}
+  result: rte => rte.exec('bold')
+});
+rte.add('link', {
+  icon: document.getElementById('t'),
+  attributes: {title: 'Link',}
+  // Example on it's easy to wrap a selected content
+  result: rte => rte.insertHTML(`<a href="#">${rte.selection()}</a>`)
+});
+// An example with fontSize
+rte.add('fontSize', {
+  icon: `<select class="gjs-field">
+        <option>1</option>
+        <option>4</option>
+        <option>7</option>
+      </select>`,
+    // Bind the 'result' on 'change' listener
+  event: 'change',
+  result: (rte, action) => rte.exec('fontSize', action.btn.firstChild.value),
+  // Callback on any input change (mousedown, keydown, etc..)
+  update: (rte, action) => {
+    const value = rte.doc.queryCommandValue(action.name);
+    if (value != 'false') { // value is a string
+      action.btn.firstChild.value = value;
+    }
+   }
+  })
+

get

Get the action by its name

Parameters

Examples

const action = rte.get('bold');
+// {name: 'bold', ...}
+

Returns Object

getAll

Get all actions

Returns Array

remove

Remove the action from the toolbar

Parameters

Examples

const action = rte.remove('bold');
+// {name: 'bold', ...}
+

Returns Object Removed action

getToolbarEl

Get the toolbar element

Returns HTMLElement

Last Updated: 7/8/2018, 11:53:31 PM
+ + + diff --git a/docs/api/selector_manager.html b/docs/api/selector_manager.html new file mode 100644 index 000000000..51129ed3a --- /dev/null +++ b/docs/api/selector_manager.html @@ -0,0 +1,64 @@ + + + + + + GrapesJS + + + + + + + + + +

SelectorManager

Selectors in GrapesJS are used in CSS Composer inside Rules and in Components as classes. To get better this concept let's take +a look at this code:

span > #send-btn.btn{
+ ...
+}
+
<span>
+  <button id="send-btn" class="btn"></button>
+</span>
+

In this scenario we get:

  • span -> selector of type tag
  • send-btn -> selector of type id
  • btn -> selector of type class

So, for example, being btn the same class entity it'll be easier to refactor and track things.

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ selectorManager: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const selectorManager = editor.SelectorManager;
+

getConfig

Get configuration object

Returns Object

add

Add a new selector to collection if it's not already exists. Class type is a default one

Parameters

  • nameString Selector name
  • optsObject Selector options (optional, default {}) +
    • opts.labelString Label for the selector, if it's not provided the label will be the same as the name (optional, default '')
    • opts.typeString Type of the selector. At the moment, only 'class' (1) is available (optional, default 1)

Examples

var selector = selectorManager.add('selectorName');
+// Same as
+var selector = selectorManager.add('selectorName', {
+  type: 1,
+  label: 'selectorName'
+});
+

Returns Model

addClass

Add class selectors

Parameters

Examples

sm.addClass('class1');
+sm.addClass('class1 class2');
+sm.addClass(['class1', 'class2']);
+// -> [SelectorObject, ...]
+

Returns Array Array of added selectors

get

Get the selector by its name

Parameters

  • nameString Selector name
  • type (optional, default Selector.TYPE_CLASS)
  • tyoeString Selector type

Examples

var selector = selectorManager.get('selectorName');
+

Returns (Model | null)

getAll

Get all selectors

Returns Collection

Last Updated: 7/8/2018, 11:38:08 PM
+ + + diff --git a/docs/api/storage_manager.html b/docs/api/storage_manager.html new file mode 100644 index 000000000..3826e4f79 --- /dev/null +++ b/docs/api/storage_manager.html @@ -0,0 +1,70 @@ + + + + + + GrapesJS + + + + + + + + + +

StorageManager

You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ storageManager: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const storageManager = editor.StorageManager;
+

getConfig

Get configuration object

Returns Object

isAutosave

Checks if autosave is enabled

Returns Boolean

setAutosave

Set autosave value

Parameters

Returns this

getStepsBeforeSave

Returns number of steps required before trigger autosave

Returns number

setStepsBeforeSave

Set steps required before trigger autosave

Parameters

Returns this

add

Add new storage

Parameters

Examples

storageManager.add('local2', {
+  load: function(keys, clb, clbErr) {
+    var res = {};
+    for (var i = 0, len = keys.length; i < len; i++){
+      var v = localStorage.getItem(keys[i]);
+      if(v) res[keys[i]] = v;
+    }
+    clb(res); // might be called inside some async method
+    // In case of errors...
+    // clbErr('Went something wrong');
+  },
+  store: function(data, clb, clbErr) {
+    for(var key in data)
+      localStorage.setItem(key, data[key]);
+    clb(); // might be called inside some async method
+  }
+});
+

Returns this

get

Returns storage by id

Parameters

Returns (Object | null)

getStorages

Returns all storages

Returns Array

getCurrent

Returns current storage type

Returns string

setCurrent

Set current storage type

Parameters

Returns this

store

Store key-value resources in the current storage

Parameters

  • dataObject Data in key-value format, eg. {item1: value1, item2: value2}
  • clbFunction Callback function

Examples

storageManager.store({item1: value1, item2: value2});
+

Returns (Object | null)

load

Load resource from the current storage by keys

Parameters

Examples

storageManager.load(['item1', 'item2'], res => {
+ // res -> {item1: value1, item2: value2}
+});
+storageManager.load('item1', res => {
+// res -> {item1: value1}
+});
+

getCurrentStorage

Get current storage

Returns Storage

Last Updated: 7/8/2018, 11:25:18 PM
+ + + diff --git a/docs/api/style_manager.html b/docs/api/style_manager.html new file mode 100644 index 000000000..084ac16fb --- /dev/null +++ b/docs/api/style_manager.html @@ -0,0 +1,94 @@ + + + + + + GrapesJS + + + + + + + + + +

StyleManager

With Style Manager you build categories (called sectors) of CSS properties which could be used to customize the style of components. +You can customize the initial state of the module from the editor initialization, by passing the following Configuration Object

const editor = grapesjs.init({
+ styleManager: {
+   // options
+ }
+})
+

Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const styleManager = editor.StyleManager;
+

getConfig

Get configuration object

Returns Object

addSector

Add new sector to the collection. If the sector with the same id already exists, +that one will be returned

Parameters

  • idstring Sector id
  • sectorObject Object representing sector +
    • sector.namestring Sector's label (optional, default '')
    • sector.openBoolean Indicates if the sector should be opened (optional, default true)
    • sector.propertiesArray<Object> Array of properties (optional, default [])

Examples

var sector = styleManager.addSector('mySector',{
+  name: 'My sector',
+  open: true,
+  properties: [{ name: 'My property'}]
+});
+

Returns Sector Added Sector

getSector

Get sector by id

Parameters

Examples

var sector = styleManager.getSector('mySector');
+

Returns (Sector | null)

removeSector

Remove a sector by id

Parameters

Examples

const removed = styleManager.removeSector('mySector');
+

Returns Sector Removed sector

getSectors

Get all sectors

Returns Sectors Collection of sectors

addProperty

Add property to the sector identified by id

Parameters

  • sectorIdstring Sector id
  • propertyObject Property object +
    • property.namestring Name of the property (optional, default '')
    • property.propertystring CSS property, eg. min-height (optional, default '')
    • property.typestring Type of the property: integer | radio | select | color | file | composite | stack (optional, default '')
    • property.unitsArray<string> Unit of measure available, eg. ['px','%','em']. Only for integer type (optional, default [])
    • property.unitstring Default selected unit from units. Only for integer type (optional, default '')
    • property.minnumber Min possible value. Only for integer type (optional, default null)
    • property.maxnumber Max possible value. Only for integer type (optional, default null)
    • property.defaultsstring Default value (optional, default '')
    • property.infostring Some description (optional, default '')
    • property.iconstring Class name. If exists no text will be displayed (optional, default '')
    • property.previewBoolean Show layers preview. Only for stack type (optional, default false)
    • property.functionNamestring Indicates if value need to be wrapped in some function, for istance transform: rotate(90deg) (optional, default '')
    • property.propertiesArray<Object> Nested properties for composite and stack type (optional, default [])
    • property.layersArray<Object> Layers for stack properties (optional, default [])
    • property.listArray<Object> List of possible options for radio and select types (optional, default [])

Examples

var property = styleManager.addProperty('mySector',{
+  name: 'Minimum height',
+  property: 'min-height',
+  type: 'select',
+  defaults: '100px',
+  list: [{
+    value: '100px',
+    name: '100',
+   },{
+     value: '200px',
+     name: '200',
+   }],
+});
+

Returns (Property | null) Added Property or null in case sector doesn't exist

getProperty

Get property by its CSS name and sector id

Parameters

  • sectorIdstring Sector id
  • namestring CSS property name, eg. 'min-height'

Examples

var property = styleManager.getProperty('mySector','min-height');
+

Returns (Property | null)

removeProperty

Remove a property from the sector

Parameters

  • sectorIdstring Sector id
  • namestring CSS property name, eg. 'min-height'

Examples

const property = styleManager.removeProperty('mySector', 'min-height');
+

Returns Property Removed property

getProperties

Get properties of the sector

Parameters

Examples

var properties = styleManager.getProperties('mySector');
+

Returns Properties Collection of properties

getModelToStyle

Get what to style inside Style Manager. If you select the component +without classes the entity is the Component itself and all changes will +go inside its 'style' property. Otherwise, if the selected component has +one or more classes, the function will return the corresponding CSS Rule

Parameters

  • modelModel

Returns Model

addType

Add new property type

Parameters

  • idstring Type ID
  • definitionObject Definition of the type. Each definition contains +model (business logic), view (presentation logic) +and isType function which recognize the type of the +passed entity

Examples

styleManager.addType('my-type', {
+ model: {},
+ view: {},
+ isType: (value) => {
+   if (value && value.type == 'my-type') {
+     return value;
+   }
+ },
+})
+

getType

Get type

Parameters

Returns Object Type definition

getTypes

Get all types

Returns Array

createType

Create new property from type

Parameters

  • idstring Type ID
  • optionsObject Options (optional, default {}) +
    • options.modelObject Custom model object (optional, default {})
    • options.viewObject Custom view object (optional, default {})

Examples

const propView = styleManager.createType('integer', {
+ model: {units: ['px', 'rem']}
+});
+propView.render();
+propView.model.on('change:value', ...);
+someContainer.appendChild(propView.el);
+

Returns PropertyView

Last Updated: 7/8/2018, 11:17:15 PM
+ + + diff --git a/docs/api/undo_manager.html b/docs/api/undo_manager.html new file mode 100644 index 000000000..6b9b69a44 --- /dev/null +++ b/docs/api/undo_manager.html @@ -0,0 +1,55 @@ + + + + + + GrapesJS + + + + + + + + + +

UndoManager

This module allows to manage the stack of changes applied in canvas. +Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance

const um = editor.UndoManager;
+

getConfig

Get module configurations

Examples

const config = um.getConfig();
+// { ... }
+

Returns Object Configuration object

add

Add an entity (Model/Collection) to track +Note: New Components and CSSRules will be added automatically

Parameters

  • entity(Model | Collection) Entity to track

Examples

um.add(someModelOrCollection);
+

Returns this

remove

Remove and stop tracking the entity (Model/Collection)

Parameters

  • entity(Model | Collection) Entity to remove

Examples

um.remove(someModelOrCollection);
+

Returns this

removeAll

Remove all entities

Examples

um.removeAll();
+

Returns this

start

Start/resume tracking changes

Examples

um.start();
+

Returns this

stop

Stop tracking changes

Examples

um.stop();
+

Returns this

undo

Undo last change

Examples

um.undo();
+

Returns this

undoAll

Undo all changes

Examples

um.undoAll();
+

Returns this

redo

Redo last change

Examples

um.redo();
+

Returns this

redoAll

Redo all changes

Examples

um.redoAll();
+

Returns this

hasUndo

Checks if exists an available undo

Examples

um.hasUndo();
+

Returns Boolean

hasRedo

Checks if exists an available redo

Examples

um.hasRedo();
+

Returns Boolean

getStack

Get stack of changes

Examples

const stack = um.getStack();
+stack.each(item => ...);
+

Returns Collection

clear

Clear the stack

Examples

um.clear();
+

Returns this

Last Updated: 7/9/2018, 12:11:12 AM
+ + + diff --git a/docs/assets-builtin-modal.png b/docs/assets-builtin-modal.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6e7dcc6c318ee497f9cb7d8cf4464f9224a508 GIT binary patch literal 40201 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

B>0_OMJLRj4&(^z9!<3=S7!m(7wVNrhO9F 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 BzGnac literal 0 HcmV?d00001 diff --git a/docs/assets-empty-view.png b/docs/assets-empty-view.png new file mode 100644 index 0000000000000000000000000000000000000000..ac79c18b9e0b1410480721ad3ef8684f5e4a97c5 GIT binary patch literal 8870 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

  • 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

    e_9Si=z>~#UlH9j>lKpgw%4x4(9e@ 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 m6sYAK=a_%*;na,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid #ddd;border-bottom-color:#ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#e67891}.nav-links .nav-item{cursor:pointer;position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #e8839a}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;position:relative}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{font-size:.9rem;position:absolute;right:1.5rem;top:.7rem}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}}.page-edit,.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit,.page-nav{padding:2rem}}@media (max-width:419px){.page-edit,.page-nav{padding:1.5rem}}.page{padding-bottom:2rem}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#aaa}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#e67891}a.sidebar-link.active{font-weight:600;color:#e67891;border-left-color:#e67891}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar-group:not(.first){margin-top:1em}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading{cursor:auto;color:inherit}.sidebar-heading{color:#999;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:0 1.5rem;margin-top:0;margin-bottom:.5rem}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading:.open .arrow{top:-.18em}.sidebar-group-items{transition:height .1s ease-out;overflow:hidden}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem 0}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-links{padding:1.5rem 0}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-links{padding:1rem 0}}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}#nprogress{pointer-events:none}#nprogress .bar{background:#e67891;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #e67891,0 0 5px #e67891;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#e67891;border-left-color:#e67891;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.content pre,.content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background:transparent;overflow:auto}.content pre[class*=language-] code,.content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre{position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number,div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.content:not(.custom){padding:2rem}}@media (max-width:419px){.content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:15px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.content:not(.custom)>:first-child{margin-top:3.6rem}.content:not(.custom) a:hover{text-decoration:underline}.content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.content:not(.custom) img{max-width:100%}.content.custom{padding:0;margin:0}.content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#e67891}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1.2rem;color:#999;border-left:.25rem solid #dfe2e5;margin-left:0;padding-left:1rem}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.content:not(.custom)>h1,.content:not(.custom)>h2,.content:not(.custom)>h3,.content:not(.custom)>h4,.content:not(.custom)>h5,.content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.content:not(.custom)>h1:first-child,.content:not(.custom)>h2:first-child,.content:not(.custom)>h3:first-child,.content:not(.custom)>h4:first-child,.content:not(.custom)>h5:first-child,.content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.content:not(.custom)>h1:first-child+.custom-block,.content:not(.custom)>h1:first-child+p,.content:not(.custom)>h1:first-child+pre,.content:not(.custom)>h2:first-child+.custom-block,.content:not(.custom)>h2:first-child+p,.content:not(.custom)>h2:first-child+pre,.content:not(.custom)>h3:first-child+.custom-block,.content:not(.custom)>h3:first-child+p,.content:not(.custom)>h3:first-child+pre,.content:not(.custom)>h4:first-child+.custom-block,.content:not(.custom)>h4:first-child+p,.content:not(.custom)>h4:first-child+pre,.content:not(.custom)>h5:first-child+.custom-block,.content:not(.custom)>h5:first-child+p,.content:not(.custom)>h5:first-child+pre,.content:not(.custom)>h6:first-child+.custom-block,.content:not(.custom)>h6:first-child+p,.content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.custom-layout{padding-top:3.6rem}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}.theme-container.no-navbar .custom-layout{padding-top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.carbon-ads{min-height:102px;padding:1.5rem 1.5rem 0;margin-bottom:-.5rem;font-size:.75rem}.carbon-ads a{color:#444;font-weight:400;display:inline}.carbon-ads .carbon-img{float:left;margin-right:1rem;border:1px solid #eaecef}.carbon-ads .carbon-img img{display:block}.carbon-ads .carbon-poweredby{color:#999;display:block;margin-top:.5em}@media (max-width:719px){.carbon-ads .carbon-img img{width:100px;height:77px}}.icon.outbound{color:#aaa;display:inline-block}.navbar{background-color:#6f2943;background-image:linear-gradient(120deg,#d983a6,#4d114f);color:#fff;border:none}.navbar .logo{min-width:auto}.navbar .site-name{color:#fff}.token.string{color:#e67891}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#ffeff2}}.search-box input{border:1px solid transparent;transition:border .25s}.content:not(.custom),.page-edit,.page-nav{max-width:900px}.page__getting-started .language-js .language-js{max-height:300px}* ::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.1)}* ::-webkit-scrollbar{width:8px}.language-js ::-webkit-scrollbar{height:8px}.language-js ::-webkit-scrollbar-thumb{background-color:hsla(0,0%,100%,.3)}.badge{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff;margin-right:5px;background-color:#42b983}.badge.middle{vertical-align:middle}.badge.top{vertical-align:top}.badge.green,.badge.tip{background-color:#42b983}.badge.error{background-color:#da5961}.badge.warn,.badge.warning,.badge.yellow{background-color:#e7c000}.gjs__themed .gjs-one-bg{background-color:#78366a}.gjs__themed .gjs-two-color{color:hsla(0,0%,100%,.7)}.gjs__themed .gjs-three-bg{background-color:#ec5896;color:#fff}.gjs__themed .gjs-four-color,.gjs__themed .gjs-four-color-h:hover{color:#ec5896}.gjs__themed .gjs{border:none}.panel__switcher{position:static}.editor-row{display:flex;justify-content:flex-start;align-items:stretch;flex-wrap:nowrap;height:300px}.editor-canvas{flex-grow:1}.panel__right{flex-basis:230px;position:relative;overflow-y:auto}.panel__devices,.panel__top{position:static}.panel__top{padding:0;width:100%;display:flex;justify-content:center;justify-content:space-between}.panel__basic-actions{position:static}.content pre{padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0}#gjs{border:3px solid #444}.gjs-cv-canvas{top:0;width:100%;height:100%}.gjs{border:3px solid #444}.gjs-block{width:auto;height:auto;min-height:auto}.demo-container[data-v-b3715568]{min-height:20px;border:1px solid #eee;border-radius:2px;padding:25px 35px} \ No newline at end of file diff --git a/docs/assets/img/search.83621669.svg b/docs/assets/img/search.83621669.svg new file mode 100644 index 000000000..03d83913e --- /dev/null +++ b/docs/assets/img/search.83621669.svg @@ -0,0 +1 @@ + diff --git a/docs/assets/js/1.4c1eabe5.js b/docs/assets/js/1.4c1eabe5.js new file mode 100644 index 000000000..88ea4583d --- /dev/null +++ b/docs/assets/js/1.4c1eabe5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{172:function(t,s,n){"use strict";n.r(s);var a=n(1),e=Object(a.a)({},function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("div",{staticClass:"content"},[t._m(0),t._m(1),n("p"),t._m(2),n("p"),t._m(3),t._m(4),t._m(5),n("p",[t._v("You can add traits to the component by extending them or while creating a new one. Let's see in this example how to make inputs more customizable by the editor. All components, by default, contain 2 traits: id and title (at the moment of writing). So, if you select an input and open the Settings panel you will see just this:")]),n("img",{attrs:{src:t.$withBase("/default-traits.png")}}),t._m(6),t._m(7),n("p",[t._v("Now the result will be")]),n("img",{attrs:{src:t.$withBase("/input-custom-traits.png")}}),n("p",[t._v("By default, traits modify attributes of the model (which than reflected in canvas) but you can also have traits which change the property")]),t._m(8),n("p",[t._v("In this way you're able to listen this changes and react with your own logic")]),t._m(9),t._m(10),t._m(11),t._m(12)])},[function(){var t=this.$createElement,s=this._self._c||t;return s("h1",{attrs:{id:"trait-manager"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#trait-manager","aria-hidden":"true"}},[this._v("#")]),this._v(" Trait Manager")])},function(){var t=this.$createElement,s=this._self._c||t;return s("p",[this._v("In GrapesJS, Traits could define different parameters and behaviors of a single component. The user generally will see traits as "),s("em",[this._v("Settings")]),this._v(" of each component. A common use of traits is to customize element attributes (eg. "),s("code",[this._v("placeholder")]),this._v(" for inputs) and in this case the editor comes already with some built-in, easy configurable, types.")])},function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#built-in-trait-types"}},[this._v("Built-in trait types")])]),s("li",[s("a",{attrs:{href:"#add-traits-to-components"}},[this._v("Add Traits to Components")])]),s("li",[s("a",{attrs:{href:"#define-new-trait-type"}},[this._v("Define new Trait type")])])])])},function(){var t=this.$createElement,s=this._self._c||t;return s("h2",{attrs:{id:"built-in-trait-types"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#built-in-trait-types","aria-hidden":"true"}},[this._v("#")]),this._v(" Built-in trait types")])},function(){var t=this.$createElement,s=this._self._c||t;return s("ul",[s("li",[this._v("text")]),s("li",[this._v("number")]),s("li",[this._v("checkbox")]),s("li",[this._v("select")]),s("li",[this._v("color")])])},function(){var t=this.$createElement,s=this._self._c||t;return s("h2",{attrs:{id:"add-traits-to-components"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-traits-to-components","aria-hidden":"true"}},[this._v("#")]),this._v(" Add Traits to Components")])},function(){var t=this.$createElement,s=this._self._c||t;return s("p",[this._v("In this case we gonna create a new Component ("),s("a",{attrs:{href:"Components"}},[this._v("check here")]),this._v(" for more details about the creation of new components) with a new set of traits")])},function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("div",{staticClass:"language-js extra-class"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{attrs:{class:"token keyword"}},[t._v("var")]),t._v(" editor "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" grapesjs"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("init")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{attrs:{class:"token operator"}},[t._v("...")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{attrs:{class:"token keyword"}},[t._v("var")]),t._v(" domComps "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" editor"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DomComponents"),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{attrs:{class:"token keyword"}},[t._v("var")]),t._v(" dType "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" domComps"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("getType")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'default'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{attrs:{class:"token keyword"}},[t._v("var")]),t._v(" dModel "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" dType"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("model"),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{attrs:{class:"token keyword"}},[t._v("var")]),t._v(" dView "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" dType"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("view"),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\ndomComps"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("addType")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'input'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n model"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" dModel"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("extend")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n defaults"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Object"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("assign")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dModel"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prototype"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("defaults"),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n traits"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{attrs:{class:"token comment"}},[t._v("// strings are automatically converted to text types")]),t._v("\n "),n("span",{attrs:{class:"token string"}},[t._v("'name'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token string"}},[t._v("'placeholder'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'select'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n label"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Type'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'type'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("value"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'text'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Text'")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("value"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'email'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Email'")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("value"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'password'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Password'")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("value"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'number'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Number'")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'checkbox'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n label"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Required'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'required'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n isComponent"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("function")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),t._v("el"),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("if")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),t._v("el"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tagName "),n("span",{attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'INPUT'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'input'")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n view"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" dView"),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])},function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("div",{staticClass:"language-js extra-class"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{attrs:{class:"token operator"}},[t._v("...")]),t._v("\ntraits"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'text'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n label"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'Test'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'model-prop-name'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n changeProp"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token number"}},[t._v("1")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{attrs:{class:"token operator"}},[t._v("...")]),t._v("\n")])])])},function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("div",{staticClass:"language-js extra-class"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[t._v("editor"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DomComponents"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("addType")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'input'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n model"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" dModel"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("extend")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token function"}},[t._v("init")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("listenTo")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'change:model-prop-name'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("doStuff"),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{attrs:{class:"token function"}},[t._v("doStuff")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{attrs:{class:"token operator"}},[t._v("...")]),t._v("\n"),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])},function(){var t=this.$createElement,s=this._self._c||t;return s("h2",{attrs:{id:"define-new-trait-type"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#define-new-trait-type","aria-hidden":"true"}},[this._v("#")]),this._v(" Define new Trait type")])},function(){var t=this.$createElement,s=this._self._c||t;return s("p",[this._v("If built-in types are not enough (eg. something with more complex UI) you can define a new one.\nLet's see this simple "),s("code",[this._v("textarea")]),this._v(" element which updates contents of the component.")])},function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("div",{staticClass:"language-js extra-class"},[n("pre",{pre:!0,attrs:{class:"language-js"}},[n("code",[n("span",{attrs:{class:"token comment"}},[t._v("// Each new type extends the default Trait")]),t._v("\neditor"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("TraitManager"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("addType")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'content'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n events"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token string"}},[t._v("'keyup'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'onChange'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token comment"}},[t._v("// trigger parent onChange method on keyup")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{attrs:{class:"token comment"}},[t._v("/**\n * Returns the input element\n * @return {HTMLElement}\n */")]),t._v("\n getInputEl"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("function")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token operator"}},[t._v("!")]),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("inputEl"),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("var")]),t._v(" input "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token function"}},[t._v("createElement")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'textarea'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n input"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("target"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token keyword"}},[t._v("get")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'content'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("inputEl "),n("span",{attrs:{class:"token operator"}},[t._v("=")]),t._v(" input"),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("inputEl"),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{attrs:{class:"token comment"}},[t._v("/**\n * Triggered when the value of the model is changed\n */")]),t._v("\n onValueChange"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("target"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token keyword"}},[t._v("set")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'content'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{attrs:{class:"token keyword"}},[t._v("this")]),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),t._v("model"),n("span",{attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{attrs:{class:"token keyword"}},[t._v("get")]),n("span",{attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{attrs:{class:"token string"}},[t._v("'value'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{attrs:{class:"token comment"}},[t._v("// And then use it in your component")]),t._v("\n"),n("span",{attrs:{class:"token operator"}},[t._v("...")]),t._v("\ntraits"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),n("span",{attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{attrs:{class:"token string"}},[t._v("'content'")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{attrs:{class:"token operator"}},[t._v("...")]),t._v("\n")])])])}],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/10.4e962f3e.js b/docs/assets/js/10.4e962f3e.js new file mode 100644 index 000000000..17f5de309 --- /dev/null +++ b/docs/assets/js/10.4e962f3e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{190:function(t,s,a){"use strict";a.r(s);var n=a(1),o=Object(n.a)({},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"content"},[t._m(0),t._m(1),t._m(2),a("p",[t._v("Before start using GrapesJS you have to import it inside your project, so let's import its latest version")]),t._m(3),a("p",[t._v("or if you're in node environment")]),t._m(4),t._m(5),a("p",[t._v("The first step is to define the interface of our editor and for this purpose we gonna start from basic HTML layouts.\nFinding a common structure for the UI of any project is not an easy task that's why GrapesJS prefers to keep this process as simple as possible, by providing just few helpers but letting the user define the whole interface, this guarantees maximum flexibility.\nThe main part of the GrapesJS editor is the canvas, this is where you gonna create the whole structure of your templates and you definitely can't miss it. Let's try to initiate the editor with just the canvas and no panels.")]),t._m(6),t._m(7),t._m(8),a("Demo",[a("DemoCanvasOnly")],1),a("p",[t._v("With just the canvas you're already able to move, copy and delete components from the structure (when you select components in the canvas, the toolbar is shown). For now we just see the example template taken from the container. Let's see now how can we create and drag custom blocks into our canvas.")]),t._m(9),a("p",[t._v("The block in GrapesJS is just a reusable piece of HTML that you can drop in the canvas. A block can be an image, a button, or an entire section with videos, forms and iframes. Let's start from creating another container and append inside it few basic blocks which we can later use to build more complex structures.")]),t._m(10),t._m(11),t._m(12),a("Demo",[a("DemoBasicBlocks")],1),a("p",[t._v("As you see we add our blocks via the initial configuration, which is ok, but obviously there might be the case you would like to add them dynamically, in this case you have to use the "),a("router-link",{attrs:{to:"./api/block_manager.html"}},[t._v("Block Manager API")])],1),t._m(13),a("div",{staticClass:"tip custom-block"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),a("p",[t._v("If you want to get more about blocks we suggest to read its dedicated page: "),a("router-link",{attrs:{to:"./modules/Blocks.html"}},[t._v("Block Manager Module")])],1)]),t._m(14),a("p",[t._v("Technically, once you drop your HTML block inside the canvas each element of the content is transformed in GrapesJS Component, which is an object containing informations about how the element is rendered in the canvas (managed in the View) and how it might look its final code (created by the properties in the Model). Generally, all Model properties are reflected in the View, so, for example, if you add a new attribute to the model, not only it will be available in the export code (will see later how to get it) but also the element you see in the canvas is updated with new attributes.\nWhile this is a common behavior what it's cool about Components that you can create a totally decoupled view and show to the user whatever you desire (so not necessary reflecting the model). For example, by dragging a placeholder text you can fetch and show instead a dynamic content. If want to get more about Custom Components and how to create and extend them, we recommend to check out "),a("router-link",{attrs:{to:"./modules/Components.html"}},[t._v("Component Manager Module")]),t._v(".")],1),a("p",[t._v("GrapesJS comes along with few "),a("router-link",{attrs:{to:"./modules/Components.html#built-in-components"}},[t._v("built-in Components")]),t._v(" which enable different core features once rendered in canvas. Just to mention few of them, by double clicking on the image component you will see show up the default "),a("router-link",{attrs:{to:"./modules/Assets.html"}},[t._v("Asset Manager")]),t._v(", which you can customize or integrate you own, by double clicking on the text component you're able to edit it via the built-in Rich Text Editor, which is also customizable and "),a("router-link",{attrs:{to:"./guides/Replace-Rich-Text-Editor.html"}},[t._v("replaceable")]),t._v(".")],1),a("p",[t._v("As we have seen before you can create Blocks directly as Components")]),t._m(15),a("div",{staticClass:"tip custom-block"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),a("p",[t._v("Check the "),a("router-link",{attrs:{to:"./api/components.html"}},[t._v("Components API")]),t._v(" and see how to interact with components dynamically")],1)]),a("p",[t._v("An example on how to select some inner component and replace its children with new contents")]),t._m(16),t._m(17),a("p",[t._v("Now that we have a canvas and custom blocks let's see how to create a new custom panel with some buttons inside (using "),a("router-link",{attrs:{to:"./api/panels.html"}},[t._v("Panels API")]),t._v(") which trigger commands (the core one or custom).")],1),t._m(18),t._m(19),t._m(20),a("Demo",[a("DemoCustomPanels")],1),a("p",[t._v("So, we have defined where to render the panel with "),a("code",[t._v("el: '#basic-panel'")]),t._v(" and then for each button we added a "),a("code",[t._v("command")]),t._v(" property. The command could be the id, an object with "),a("code",[t._v("run")]),t._v(" and "),a("code",[t._v("stop")]),t._v(" functions or simply a single function.\nTry to use "),a("router-link",{attrs:{to:"./api/commands.html"}},[t._v("Commands")]),t._v(" when possible, they allow you to track actions globally and execute also callbacks before and after their execution (you can even interrupt them).")],1),t._m(21),a("div",{staticClass:"tip custom-block"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),a("p",[t._v("Check the "),a("router-link",{attrs:{to:"./api/panels.html"}},[t._v("Panels API")]),t._v(" to see all the available methods")],1)]),t._m(22),a("p",[t._v("Another utility tool you might find useful when working with web elements is a layer manger. It's just a tree overview of the structure nodes and enables you to manage it easier. To enable it you just have to specify where you want to render it")]),t._m(23),t._m(24),t._m(25),a("Demo",[a("DemoLayers")],1),t._m(26),a("p",[t._v("Once you have defined the structure of the template probably the next step is the ability to style it. To meet this need GrapesJS includes the Style Manager module which is composed by CSS style properties and sectors. To make it more clear, let's see how to define a basic set.")]),t._m(27),t._m(28),t._m(29),t._m(30),a("Demo",[a("DemoStyle")],1),a("p",[t._v("Inside Style Manager definition we use "),a("code",[t._v("buildProps")]),t._v(" which helps us create common properties from "),a("router-link",{attrs:{to:"./modules/Style-manager.html#built-in-properties"}},[t._v("available built-in objects")]),t._v(" then in "),a("code",[t._v("properties")]),t._v(" we can override same objects (eg. passing another "),a("code",[t._v("name")]),t._v(" to change the label) identified by "),a("code",[t._v("property")]),t._v(" name. As you can see from "),a("code",[t._v("custom-prop")]),t._v(" example it's a matter of defining the CSS "),a("code",[t._v("property")]),t._v(" and the input "),a("code",[t._v("type")]),t._v(". We suggest to check a more complete example of Style Manager properties usage from the "),a("a",{attrs:{href:"https://github.com/artf/grapesjs/blob/gh-pages/demo.html#L1000",target:"_blank",rel:"noopener noreferrer"}},[t._v("webpage preset demo"),a("OutboundLink")],1)],1),a("div",{staticClass:"tip custom-block"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),a("p",[t._v("Check the "),a("router-link",{attrs:{to:"./api/panels.html"}},[t._v("Style Manager API")]),t._v(" to see how to update sectors and properties dynamically")],1)]),t._m(31),a("p",[t._v("Most of the time you would style your components and place them somewhere in the structure, but sometimes your components might need custom attributes or even custom behaviors and for this need you can make use of traits. A common use of traits is the ability to update HTML element attributes (eg. "),a("code",[t._v("placeholder")]),t._v(" for inputs or "),a("code",[t._v("alt")]),t._v(" for images) but you can also define your own custom traits, access the selected Component model and do whatever you want. For this guide, we just gonna show you how to render available traits, for more details on how to extend them we suggest to read the "),a("router-link",{attrs:{to:"./modules/Traits.html"}},[t._v("Trait Manager Module page")]),t._v(".")],1),a("p",[t._v("Let's create a new container for traits, tell the editor where to render it and update the sidebar switcher")]),t._m(32),t._m(33),a("Demo",[a("DemoTraits")],1),a("p",[t._v("Now if you switch to the Trait panel and select some of the inner component you should see its default traits.")]),t._m(34),a("p",[t._v("GrapesJS implements also a module which allows you to work with responsive templates easily. Let's see how to define different devices and some button for device switching")]),t._m(35),t._m(36),t._m(37),a("Demo",[a("DemoDevices")],1),t._m(38),t._m(39),a("p",[t._v("What about the mobile-first approach? You can achieve it by changing your configurations in this way:")]),t._m(40),a("div",{staticClass:"tip custom-block"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),a("p",[t._v("Check the "),a("router-link",{attrs:{to:"./api/panels.html"}},[t._v("Device Manager API")]),t._v(" to get all available methods")],1)]),t._m(41),a("p",[t._v("Once you finished with defining you builder interface the next step would be to setup the storing and loading process.\nGrapesJS implements 2 simple type of storages inside its Storage Manager, the local (by using "),a("code",[t._v("localStorage")]),t._v(", active by default) and the remote one. Those are enough to cover most of the cases, but it's also possible to add new implementations ("),a("a",{attrs:{href:"https://github.com/artf/grapesjs-indexeddb",target:"_blank",rel:"noopener noreferrer"}},[t._v("grapesjs-indexeddb"),a("OutboundLink")],1),t._v(" is a good example).\nLet's see how the default options looks like")]),t._m(42),t._m(43),a("p",[t._v("Let's check also the configuration required to setup the remote storage")]),t._m(44),a("p",[t._v("As you might noticed, we've left some default option unchanged, increased changes necessary for autosave triggering and passed remote endpoints.\nIf you prefer you could also disable the autosaving and do it by yourself using some custom command")]),t._m(45),a("p",[t._v("To get a better overview of the Storage Manager, how correctly you should store/load the template and how to define new storages you have to read the "),a("router-link",{attrs:{to:"./modules/Storage.html"}},[t._v("Storage Manager Module")]),t._v(" page")],1),t._m(46),a("p",[t._v("One last step that might actually improve a lot your editor personality is how it's look visually. To achieve an easy theming we have adapted an atomic design for this purpose. To customize the main palette of colors all you have to do is to change few CSS rules or if you include GrapesJS styles via SCSS you can make use of its "),a("a",{attrs:{href:"https://github.com/artf/grapesjs/blob/dev/src/styles/scss/_gjs_variables.scss",target:"_blank",rel:"noopener noreferrer"}},[t._v("internal variables"),a("OutboundLink")],1),t._v(" and declare yours before the import")]),t._m(47),a("p",[t._v('In case of a simple CSS you just have to put your rules after the GrapesJS styles.\nTo complete our builder let\'s customize its color palette and to make it more visually "readable" we gonna replace all button labels with SVG icons')]),t._m(48),a("p",[t._v("and here is our final result")]),a("Demo",{attrs:{id:"final-result"}},[a("DemoTheme")],1)],1)},[function(){var t=this.$createElement,s=this._self._c||t;return s("h1",{attrs:{id:"getting-started"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getting-started","aria-hidden":"true"}},[this._v("#")]),this._v(" Getting Started")])},function(){var t=this.$createElement,s=this._self._c||t;return s("p",[this._v("This guide is a step-by-step introduction for everyone who wants to start creating its own builder with GrapesJS. This is not a complete guide of all functionalities but just a concise overview of most common modules.\nLet's see how to create a completely customized page builder from scratch. The last demo of this page represents the "),s("a",{attrs:{href:"#final-result"}},[this._v("final result")])])},function(){var t=this.$createElement,s=this._self._c||t;return s("h2",{attrs:{id:"import-the-library"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#import-the-library","aria-hidden":"true"}},[this._v("#")]),this._v(" Import the library")])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{attrs:{class:"token tag"}},[a("span",{attrs:{class:"token tag"}},[a("span",{attrs:{class:"token punctuation"}},[t._v("<")]),t._v("link")]),t._v(" "),a("span",{attrs:{class:"token attr-name"}},[t._v("rel")]),a("span",{attrs:{class:"token attr-value"}},[a("span",{attrs:{class:"token punctuation"}},[t._v("=")]),a("span",{attrs:{class:"token punctuation"}},[t._v('"')]),t._v("stylesheet"),a("span",{attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{attrs:{class:"token attr-name"}},[t._v("href")]),a("span",{attrs:{class:"token attr-value"}},[a("span",{attrs:{class:"token punctuation"}},[t._v("=")]),a("span",{attrs:{class:"token punctuation"}},[t._v('"')]),t._v("//unpkg.com/grapesjs/dist/css/grapes.min.css"),a("span",{attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{attrs:{class:"token tag"}},[a("span",{attrs:{class:"token tag"}},[a("span",{attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{attrs:{class:"token attr-value"}},[a("span",{attrs:{class:"token punctuation"}},[t._v("=")]),a("span",{attrs:{class:"token punctuation"}},[t._v('"')]),t._v("//unpkg.com/grapesjs"),a("span",{attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{attrs:{class:"token script language-javascript"}}),a("span",{attrs:{class:"token tag"}},[a("span",{attrs:{class:"token tag"}},[a("span",{attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{attrs:{class:"token comment"}},[t._v('\x3c!--\nIf you need plugins, put them below the main grapesjs script\n + + + + + +

    + + + diff --git a/docs/getting-started.html b/docs/getting-started.html new file mode 100644 index 000000000..f477ce64c --- /dev/null +++ b/docs/getting-started.html @@ -0,0 +1,586 @@ + + + + + + Getting Started | GrapesJS + + + + + + + + + +

    Getting Started

    This guide is a step-by-step introduction for everyone who wants to start creating its own builder with GrapesJS. This is not a complete guide of all functionalities but just a concise overview of most common modules. +Let's see how to create a completely customized page builder from scratch. The last demo of this page represents the final result

    Import the library

    Before start using GrapesJS you have to import it inside your project, so let's import its latest version

    <link rel="stylesheet" href="//unpkg.com/grapesjs/dist/css/grapes.min.css">
    +<script src="//unpkg.com/grapesjs"></script>
    +<!--
    +If you need plugins, put them below the main grapesjs script
    +<script src="/path/to/some/plugin.min.js"></script>
    +-->
    +

    or if you're in node environment

    import 'grapesjs/dist/css/grapes.min.css';
    +import grapesjs from 'grapesjs';
    +// If you need plugins, put them below the main grapesjs script
    +// import 'grapesjs-some-plugin';
    +

    Start from the canvas

    The first step is to define the interface of our editor and for this purpose we gonna start from basic HTML layouts. +Finding a common structure for the UI of any project is not an easy task that's why GrapesJS prefers to keep this process as simple as possible, by providing just few helpers but letting the user define the whole interface, this guarantees maximum flexibility. +The main part of the GrapesJS editor is the canvas, this is where you gonna create the whole structure of your templates and you definitely can't miss it. Let's try to initiate the editor with just the canvas and no panels.

    <div id="gjs">
    +  <h1>Hello World Component!</h1>
    +</div>
    +
    const editor = grapesjs.init({
    +  // Indicate where to init the editor. You can also pass an HTMLElement
    +  container: '#gjs',
    +  // Get the content for the canvas directly from the element
    +  // As an alternative we could use: `components: '<h1>Hello World Component!</h1>'`,
    +  fromElement: true,
    +  // Size of the editor
    +  height: '300px',
    +  width: 'auto',
    +  // Disable the storage manager for the moment
    +  storageManager: { type: null },
    +  // Avoid any default panel
    +  panels: { defaults: [] },
    +});
    +
    /* Let's highlight canvas boundaries */
    +#gjs {
    +  border: 3px solid #444;
    +}
    +
    +/* Reset some default styling */
    +.gjs-cv-canvas {
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +}
    +

    Hello World Component!

    With just the canvas you're already able to move, copy and delete components from the structure (when you select components in the canvas, the toolbar is shown). For now we just see the example template taken from the container. Let's see now how can we create and drag custom blocks into our canvas.

    Add Blocks

    The block in GrapesJS is just a reusable piece of HTML that you can drop in the canvas. A block can be an image, a button, or an entire section with videos, forms and iframes. Let's start from creating another container and append inside it few basic blocks which we can later use to build more complex structures.




     

    <div id="gjs">
    +  ...
    +</div>
    +<div id="blocks"></div>
    +
    const editor = grapesjs.init({
    +  // ...
    +  blockManager: {
    +    appendTo: '#blocks',
    +    blocks: [
    +      {
    +        id: 'section', // id is mandatory
    +        label: '<b>Section</b>', // You can use HTML/SVG inside labels
    +        attributes: { class:'gjs-block-section' },
    +        content: `<section>
    +          <h1>This is a simple title</h1>
    +          <div>This is just a Lorem text: Lorem ipsum dolor sit amet</div>
    +        </section>`,
    +      }, {
    +        id: 'text',
    +        label: 'Text',
    +        content: '<div data-gjs-type="text">Insert your text here</div>',
    +      }, {
    +        id: 'image',
    +        label: 'Image',
    +        // Select the component once it's dropped
    +        select: true,
    +        // You can pass components as a JSON instead of a simple HTML string,
    +        // in this case we also use a defined component type `image`
    +        content: { type: 'image' },
    +        // This triggers `active` event on dropped components and the `image`
    +        // reacts by opening the AssetManager
    +        activate: true,
    +      }
    +    ]
    +  },
    +});
    +
    .gjs-block {
    +  width: auto;
    +  height: auto;
    +  min-height: auto;
    +}
    +

    Hello World Component!

    As you see we add our blocks via the initial configuration, which is ok, but obviously there might be the case you would like to add them dynamically, in this case you have to use the Block Manager API

    editor.BlockManager.add('my-block-id', {
    +  label: '...',
    +  category: '...',
    +  // ...
    +})
    +

    TIP

    If you want to get more about blocks we suggest to read its dedicated page: Block Manager Module

    Define Components

    Technically, once you drop your HTML block inside the canvas each element of the content is transformed in GrapesJS Component, which is an object containing informations about how the element is rendered in the canvas (managed in the View) and how it might look its final code (created by the properties in the Model). Generally, all Model properties are reflected in the View, so, for example, if you add a new attribute to the model, not only it will be available in the export code (will see later how to get it) but also the element you see in the canvas is updated with new attributes. +While this is a common behavior what it's cool about Components that you can create a totally decoupled view and show to the user whatever you desire (so not necessary reflecting the model). For example, by dragging a placeholder text you can fetch and show instead a dynamic content. If want to get more about Custom Components and how to create and extend them, we recommend to check out Component Manager Module.

    GrapesJS comes along with few built-in Components which enable different core features once rendered in canvas. Just to mention few of them, by double clicking on the image component you will see show up the default Asset Manager, which you can customize or integrate you own, by double clicking on the text component you're able to edit it via the built-in Rich Text Editor, which is also customizable and replaceable.

    As we have seen before you can create Blocks directly as Components

    editor.BlockManager.add('my-block-id', {
    +  // ...
    +  content: {
    +    tagName: 'div',
    +    draggable: false,
    +    attributes: { 'some-attribute': 'some-value' },
    +    components: [
    +      {
    +        tagName: 'span',
    +        content: '<b>Some static content</b>',
    +      }, {
    +        tagName: 'div',
    +        // use `content` for static strings, `components` string will be parsed
    +        // and transformed in Components
    +        components: '<span>HTML at some point</span>',
    +      }      
    +    ]
    +  }
    +})
    +

    TIP

    Check the Components API and see how to interact with components dynamically

    An example on how to select some inner component and replace its children with new contents

    // The wrapper is the root Component
    +const wrapper = editor.DomComponents.getWrapper();
    +const myComponent = wrapper.find('div.my-component')[0];
    +myComponent.components().forEach(component => /* ... do something ... */);
    +myComponent.components('<div>New content</div>');
    +

    Panels & Buttons

    Now that we have a canvas and custom blocks let's see how to create a new custom panel with some buttons inside (using Panels API) which trigger commands (the core one or custom).

     
     
     





    <div class="panel__top">
    +    <div class="panel__basic-actions"></div>
    +</div>
    +<div id="gjs">
    +  ...
    +</div>
    +<div id="blocks"></div>
    +
    .panel__top {
    +  padding: 0;
    +  width: 100%;
    +  display: flex;
    +  position: initial;
    +  justify-content: center;
    +  justify-content: space-between;
    +}
    +.panel__basic-actions {
    +  position: initial;
    +}
    +
    editor.Panels.addPanel({
    +  id: 'panel-top',
    +  el: '.panel__top',
    +});
    +editor.Panels.addPanel({
    +  id: 'basic-actions',
    +  el: '.panel__basic-actions',
    +  buttons: [
    +    {
    +      id: 'visibility',
    +      active: true, // active by default
    +      className: 'btn-toggle-borders',
    +      label: '<u>B</u>',
    +      command: 'sw-visibility', // Built-in command
    +    }, {
    +      id: 'export',
    +      className: 'btn-open-export',
    +      label: 'Exp',
    +      command: 'export-template',
    +      context: 'export-template', // For grouping context of buttons from the same panel
    +    }, {
    +      id: 'show-json',
    +      className: 'btn-show-json',
    +      label: 'JSON',
    +      context: 'show-json',
    +      command(editor) {
    +        editor.Modal.setTitle('Components JSON')
    +          .setContent(`<textarea style="width:100%; height: 250px;">
    +            ${JSON.stringify(editor.getComponents())}
    +          </textarea>`)
    +          .open();
    +      },
    +    }
    +  ],
    +});
    +

    Hello World Component!

    So, we have defined where to render the panel with el: '#basic-panel' and then for each button we added a command property. The command could be the id, an object with run and stop functions or simply a single function. +Try to use Commands when possible, they allow you to track actions globally and execute also callbacks before and after their execution (you can even interrupt them).

    editor.on('run:export-template:before', opts => {
    +  console.log('Before the command run');
    +  if (0 /* some condition */) {
    +    opts.abort = 1;
    +  }
    +});
    +editor.on('run:export-template', () => console.log('After the command run'));
    +editor.on('abort:export-template', () => console.log('Command aborted'));
    +

    TIP

    Check the Panels API to see all the available methods

    Layers

    Another utility tool you might find useful when working with web elements is a layer manger. It's just a tree overview of the structure nodes and enables you to manage it easier. To enable it you just have to specify where you want to render it




     
     
     
     
     
     
     
     


    <div class="panel__top">
    +    <div class="panel__basic-actions"></div>
    +</div>
    +<div class="editor-row">
    +  <div class="editor-canvas">
    +    <div id="gjs">...</div>
    +  </div>
    +  <div class="panel__right">
    +    <div class="layers-container"></div>
    +  </div>
    +</div>
    +<div id="blocks"></div>
    +
    .editor-row {
    +  display: flex;
    +  justify-content: flex-start;
    +  align-items: stretch;
    +  flex-wrap: nowrap;
    +  height: 300px;
    +}
    +
    +.editor-canvas {
    +  flex-grow: 1;
    +}
    +
    +.panel__right {
    +  flex-basis: 230px;
    +  position: relative;
    +  overflow-y: auto;
    +}
    +
    const editor = grapesjs.init({
    +  // ...
    +  layerManager: {
    +    appendTo: '.layers-container'
    +  },
    +  // We define a default panel as a sidebar to contain layers
    +  panels: {
    +    defaults: [{
    +      id: 'layers',
    +      el: '.panel__right',
    +      // Make the panel resizable
    +      resizable: {
    +        maxDim: 350,
    +        minDim: 200,
    +        tc: 0, // Top handler
    +        cl: 1, // Left handler
    +        cr: 0, // Right handler
    +        bc: 0, // Bottom handler
    +        // Being a flex child we need to change `flex-basis` property
    +        // instead of the `width` (default)
    +        keyWidth: 'flex-basis',
    +      },
    +    }]
    +  }
    +});
    +

    Hello World Component!

    Style Manager

    Once you have defined the structure of the template probably the next step is the ability to style it. To meet this need GrapesJS includes the Style Manager module which is composed by CSS style properties and sectors. To make it more clear, let's see how to define a basic set.

    Let's start from adding one more panel inside the panel__right and another one in panel__top which will contain a Layer/Style Manager switcher



     




     



    <div class="panel__top">
    +    <div class="panel__basic-actions"></div>
    +    <div class="panel__switcher"></div>
    +</div>
    +...
    +  <div class="panel__right">
    +    <div class="layers-container"></div>
    +    <div class="styles-container"></div>
    +  </div>
    +...
    +
    .panel__switcher {
    +  position: initial;
    +}
    +
    const editor = grapesjs.init({
    +  // ...
    +  panels: {
    +    defaults: [
    +      // ...
    +      {
    +        id: 'panel-switcher',
    +        el: '.panel__switcher',
    +        buttons: [{
    +            id: 'show-layers',
    +            active: true,
    +            label: 'Layers',
    +            command: 'show-layers',
    +            // Once activated disable the possibility to turn it off
    +            togglable: false,
    +          }, {
    +            id: 'show-style',
    +            active: true,
    +            label: 'Styles',
    +            command: 'show-styles',
    +            togglable: false,
    +        }],
    +      }
    +    ]
    +  },
    +  // The Selector Manager allows to assign classes and
    +  // different states (eg. :hover) on components.
    +  // Generally, it's used in conjunction with Style Manager
    +  // but it's not mandatory
    +  selectorManager: {
    +    appendTo: '.styles-container'
    +  },
    +  styleManager: {
    +    appendTo: '.styles-container',
    +    sectors: [{
    +        name: 'Dimension',
    +        open: false,
    +        // Use built-in properties
    +        buildProps: ['width', 'min-height', 'padding'],
    +        // Use `properties` to define/override single property
    +        properties: [
    +          {
    +            // Type of the input,
    +            // options: integer | radio | select | color | slider | file | composite | stack
    +            type: 'integer',
    +            name: 'The width', // Label for the property
    +            property: 'width', // CSS property (if buildProps contains it will be extended)
    +            units: ['px', '%'], // Units, available only for 'integer' types
    +            defaults: 'auto', // Default value
    +            min: 0, // Min value, available only for 'integer' types
    +          }
    +        ]
    +      },{
    +        name: 'Extra',
    +        open: false,
    +        buildProps: ['background-color', 'box-shadow', 'custom-prop'],
    +        properties: [
    +          {
    +            id: 'custom-prop',
    +            name: 'Custom Label',
    +            property: 'font-size',
    +            type: 'select',
    +            defaults: '32px',
    +            // List of options, available only for 'select' and 'radio'  types
    +            options: [
    +              { value: '12px', name: 'Tiny' },
    +              { value: '18px', name: 'Medium' },
    +              { value: '32px', name: 'Big' },
    +            ],
    +         }
    +        ]
    +      }]
    +  },
    +});
    +
    +// Define commands
    +editor.Commands.add('show-layers', {
    +  getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
    +  getLayersEl(row) { return row.querySelector('.layers-container') },
    +
    +  run(editor, sender) {
    +    const lmEl = this.getLayersEl(this.getRowEl(editor));
    +    lmEl.style.display = '';
    +  },
    +  stop(editor, sender) {
    +    const lmEl = this.getLayersEl(this.getRowEl(editor));
    +    lmEl.style.display = 'none';
    +  },
    +});
    +editor.Commands.add('show-styles', {
    +  getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
    +  getStyleEl(row) { return row.querySelector('.styles-container') },
    +
    +  run(editor, sender) {
    +    const smEl = this.getStyleEl(this.getRowEl(editor));
    +    smEl.style.display = '';
    +  },
    +  stop(editor, sender) {
    +    const smEl = this.getStyleEl(this.getRowEl(editor));
    +    smEl.style.display = 'none';
    +  },
    +});
    +

    Hello World Component!

    Inside Style Manager definition we use buildProps which helps us create common properties from available built-in objects then in properties we can override same objects (eg. passing another name to change the label) identified by property name. As you can see from custom-prop example it's a matter of defining the CSS property and the input type. We suggest to check a more complete example of Style Manager properties usage from the webpage preset demo

    TIP

    Check the Style Manager API to see how to update sectors and properties dynamically

    Traits

    Most of the time you would style your components and place them somewhere in the structure, but sometimes your components might need custom attributes or even custom behaviors and for this need you can make use of traits. A common use of traits is the ability to update HTML element attributes (eg. placeholder for inputs or alt for images) but you can also define your own custom traits, access the selected Component model and do whatever you want. For this guide, we just gonna show you how to render available traits, for more details on how to extend them we suggest to read the Trait Manager Module page.

    Let's create a new container for traits, tell the editor where to render it and update the sidebar switcher





     



    ...
    +  <div class="panel__right">
    +    <div class="layers-container"></div>
    +    <div class="styles-container"></div>
    +    <div class="traits-container"></div>
    +  </div>
    +...
    +
    const editor = grapesjs.init({
    +  // ...
    +  panels: {
    +    defaults: [
    +      // ...
    +      {
    +        id: 'panel-switcher',
    +        el: '.panel__switcher',
    +        buttons: [
    +          // ...
    +          {
    +            id: 'show-traits',
    +            active: true,
    +            label: 'Traits',
    +            command: 'show-traits',
    +            togglable: false,
    +        }],
    +      }
    +    ]
    +  },
    +  traitManager: {
    +    appendTo: '.traits-container',
    +  },
    +});
    +
    +// Define command
    +// ...
    +editor.Commands.add('show-traits', {
    +  getTraitsEl(editor) {
    +    const row = editor.getContainer().closest('.editor-row');
    +    return row.querySelector('.traits-container');
    +  },
    +  run(editor, sender) {
    +    this.getTraitsEl(editor).style.display = '';
    +  },
    +  stop(editor, sender) {
    +    this.getTraitsEl(editor).style.display = 'none';
    +  },
    +});
    +

    Hello World Component!

    Now if you switch to the Trait panel and select some of the inner component you should see its default traits.

    Responsive templates

    GrapesJS implements also a module which allows you to work with responsive templates easily. Let's see how to define different devices and some button for device switching



     




    <div class="panel__top">
    +    <div class="panel__basic-actions"></div>
    +    <div class="panel__devices"></div>
    +    <div class="panel__switcher"></div>
    +</div>
    +...
    +
    .panel__devices {
    +  position: initial;
    +}
    +
    const editor = grapesjs.init({
    +  // ...
    +  deviceManager: {
    +    devices: [{
    +        name: 'Desktop',
    +        width: '', // default size
    +      }, {
    +        name: 'Mobile',
    +        width: '320px', // this value will be used on canvas width
    +        widthMedia: '480px', // this value will be used in CSS @media
    +    }]
    +  },
    +  // ...
    +  panels: {
    +    defaults: [
    +      // ...
    +      {
    +        id: 'panel-devices',
    +        el: '.panel__devices',
    +        buttons: [{
    +            id: 'device-desktop',
    +            label: 'D',
    +            command: 'set-device-desktop',
    +            active: true,
    +            togglable: false,
    +          }, {
    +            id: 'device-mobile',
    +            label: 'M',
    +            command: 'set-device-mobile',
    +            togglable: false,
    +        }],
    +      }
    +    ]
    +  },
    +});
    +
    +// Commands
    +editor.Commands.add('set-device-desktop', {
    +  run: editor => editor.setDevice('Desktop')
    +});
    +editor.Commands.add('set-device-mobile', {
    +  run: editor => editor.setDevice('Mobile')
    +});
    +

    Hello World Component!

    As you can see from the commands definition we just use the editor.setDevice method to change the size of the viewport. In case you need to trigger some action on device change you can setup a listener like this:

    editor.on('change:device', () => console.log('Current device: ', editor.getDevice()));
    +

    What about the mobile-first approach? You can achieve it by changing your configurations in this way:

    const editor = grapesjs.init({
    +  // ...
    +  mediaCondition: 'min-width', // default is `max-width`
    +  deviceManager: {
    +    devices: [{
    +        name: 'Mobile',
    +        width: '320',
    +        widthMedia: '',
    +      }, {
    +        name: 'Desktop',
    +        width: '',
    +        widthMedia:'1024',
    +    }]
    +  },
    +  // ...
    +});
    +
    +// Set initial device as Mobile
    +editor.setDevice('Mobile');
    +

    TIP

    Check the Device Manager API to get all available methods

    Store & load data

    Once you finished with defining you builder interface the next step would be to setup the storing and loading process. +GrapesJS implements 2 simple type of storages inside its Storage Manager, the local (by using localStorage, active by default) and the remote one. Those are enough to cover most of the cases, but it's also possible to add new implementations (grapesjs-indexeddb is a good example). +Let's see how the default options looks like

    grapesjs.init({
    +    // ...
    +    storageManager: {
    +      id: 'gjs-',             // Prefix identifier that will be used inside storing and loading
    +      type: 'local',          // Type of the storage
    +      autosave: true,         // Store data automatically
    +      autoload: true,         // Autoload stored data on init
    +      stepsBeforeSave: 1,     // If autosave enabled, indicates how many changes are necessary before store method is triggered
    +      storeComponents: true,  // Enable/Disable storing of components in JSON format
    +      storeStyles: true,      // Enable/Disable storing of rules in JSON format
    +      storeHtml: true,        // Enable/Disable storing of components as HTML string
    +      storeCss: true,         // Enable/Disable storing of rules as CSS string
    +    }
    +});
    +

    Worth noting the default id parameter which adds a prefix for all keys to store. If you check the localStorage inside the devtool panel you'll see something like { 'gjs-components': '....' ...} in this way it prevents the risk of collisions.

    Let's check also the configuration required to setup the remote storage

    grapesjs.init({
    +    // ...
    +    storageManager: {
    +      type: 'remote',
    +      stepsBeforeSave: 10,
    +      urlStore: 'http://store/endpoint',
    +      urlLoad: 'http://load/endpoint',
    +      params: {}, // Custom parameters to pass with the remote storage request, eg. CSRF token
    +      headers: {}, // Custom headers for the remote storage request
    +    }
    +});
    +

    As you might noticed, we've left some default option unchanged, increased changes necessary for autosave triggering and passed remote endpoints. +If you prefer you could also disable the autosaving and do it by yourself using some custom command

    // ...
    +  storageManager: {
    +    type: 'remote',
    +    autosave: false,
    +    // ...
    +  },
    +  // ...
    +  commands: {
    +    defaults: [
    +      // ...
    +      {
    +        id: 'store-data',
    +        run(editor) {
    +          editor.store();
    +        },
    +      }
    +    ]
    +  }
    +// ...
    +

    To get a better overview of the Storage Manager, how correctly you should store/load the template and how to define new storages you have to read the Storage Manager Module page

    Theming

    One last step that might actually improve a lot your editor personality is how it's look visually. To achieve an easy theming we have adapted an atomic design for this purpose. To customize the main palette of colors all you have to do is to change few CSS rules or if you include GrapesJS styles via SCSS you can make use of its internal variables and declare yours before the import

    // Put your variables before the grapesjs style import
    +
    +// Palette variables
    +$primaryColor: #444;
    +$secondaryColor: #ddd;
    +$tertiaryColor: #804f7b;
    +$quaternaryColor: #d278c9;
    +
    +// ...
    +
    +@import "grapesjs/src/styles/scss/main.scss";
    +

    In case of a simple CSS you just have to put your rules after the GrapesJS styles. +To complete our builder let's customize its color palette and to make it more visually "readable" we gonna replace all button labels with SVG icons

    /* We can remove the border we've set at the beginnig */
    +#gjs {
    +  border: none;
    +}
    +/* Theming */
    +
    +/* Primary color for the background */
    +.gjs-one-bg {
    +  background-color: #78366a;
    +}
    +
    +/* Secondary color for the text color */
    +.gjs-two-color {
    +  color: rgba(255, 255, 255, 0.7);
    +}
    +
    +/* Tertiary color for the background */
    +.gjs-three-bg {
    +  background-color: #ec5896;
    +  color: white;
    +}
    +
    +/* Quaternary color for the text color */
    +.gjs-four-color,
    +.gjs-four-color-h:hover {
    +  color: #ec5896;
    +}
    +

    and here is our final result

    Hello World Component!

    Last Updated: 7/14/2018, 1:29:46 AM
    + + + diff --git a/docs/grapes.min.js b/docs/grapes.min.js new file mode 100644 index 000000000..4a700a5de --- /dev/null +++ b/docs/grapes.min.js @@ -0,0 +1,12 @@ +/*! grapesjs - 0.14.21 */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.grapesjs=e():t.grapesjs=e()}(window,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=235)}([function(t,e,n){(function(i){var r,o;!function(s){var a="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i;r=[n(1),n(20),e],void 0===(o=function(t,e,n){a.Backbone=function(t,e,n,i){var r=t.Backbone,o=Array.prototype.slice;e.VERSION="1.3.3",e.$=i,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var s=function(t,e,i){n.each(e,function(e,r){n[r]&&(t.prototype[r]=function(t,e,i){switch(t){case 1:return function(){return n[e](this[i])};case 2:return function(t){return n[e](this[i],t)};case 3:return function(t,r){return n[e](this[i],a(t,this),r)};case 4:return function(t,r,o){return n[e](this[i],a(t,this),r,o)};default:return function(){var t=o.call(arguments);return t.unshift(this[i]),n[e].apply(n,t)}}}(e,r,i))})},a=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?l(t):n.isString(t)?function(e){return e.get(t)}:t},l=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}},c=e.Events={},u=/\s+/,h=function(t,e,i,r,o){var s,a=0;if(i&&"object"==typeof i){void 0!==r&&"context"in o&&void 0===o.context&&(o.context=r);for(s=n.keys(i);athis.length&&(r=this.length),r<0&&(r+=this.length+1);var o,s,a=[],l=[],c=[],u=[],h={},d=e.add,f=e.merge,p=e.remove,g=!1,v=this.comparator&&null==r&&!1!==e.sort,m=n.isString(this.comparator)?this.comparator:null;for(s=0;s7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(D,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var i=document.body,r=i.insertBefore(this.iframe,i.firstChild).contentWindow;r.document.open(),r.document.close(),r.location.hash="#"+this.fragment}var o=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?o("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?o("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),L.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!1;this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return!!this.matchRoot()&&(t=this.fragment=this.getFragment(t),n.some(this.handlers,function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(t,e){if(!L.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var i=n+t;if(t=this.decodeFragment(t.replace(I,"")),this.fragment!==t){if(this.fragment=t,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,i);else{if(!this._wantsHashChange)return this.location.assign(i);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var r=this.iframe.contentWindow;e.replace||(r.document.open(),r.document.close()),this._updateHash(r.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var i=t.href.replace(/(javascript:|#).*$/,"");t.replace(i+"#"+e)}else t.hash="#"+e}}),e.history=new L;y.extend=b.extend=M.extend=k.extend=L.extend=function(t,e){var i,r=this;i=t&&n.has(t,"constructor")?t.constructor:function(){return r.apply(this,arguments)};return n.extend(i,r,e),i.prototype=n.create(r.prototype,t),i.prototype.constructor=i,i.__super__=r.prototype,i};var F=function(){throw new Error('A "url" property or function must be specified')},R=function(t,e){var n=e.error;e.error=function(i){n&&n.call(e.context,t,i,e),t.trigger("error",t,i,e)}};return e}(a,n,t,e)}.apply(e,r))||(t.exports=o)}()}).call(this,n(11))},function(t,e,n){(function(t,n){var i;!function(){var r="object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t||this||{},o=r._,s=Array.prototype,a=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,c=s.push,u=s.slice,h=a.toString,d=a.hasOwnProperty,f=Array.isArray,p=Object.keys,g=Object.create,v=function(){},m=function(t){return t instanceof m?t:this instanceof m?void(this._wrapped=t):new m(t)};void 0===e||e.nodeType?r._=m:(void 0!==n&&!n.nodeType&&n.exports&&(e=n.exports=m),e._=m),m.VERSION="1.9.0";var y,b=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,i,r){return t.call(e,n,i,r)};case 4:return function(n,i,r,o){return t.call(e,n,i,r,o)}}return function(){return t.apply(e,arguments)}},x=function(t,e,n){return m.iteratee!==y?m.iteratee(t,e):null==t?m.identity:m.isFunction(t)?b(t,e,n):m.isObject(t)&&!m.isArray(t)?m.matcher(t):m.property(t)};m.iteratee=y=function(t,e){return x(t,e,1/0)};var w=function(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),i=Array(n),r=0;r=0&&e<=T};m.each=m.forEach=function(t,e,n){var i,r;if(e=b(e,n),M(t))for(i=0,r=t.length;i=3;return function(e,n,i,r){var o=!M(e)&&m.keys(e),s=(o||e).length,a=t>0?0:s-1;for(r||(i=e[o?o[a]:a],a+=t);a>=0&&a=0},m.invoke=w(function(t,e,n){var i,r;return m.isFunction(e)?r=e:m.isArray(e)&&(i=e.slice(0,-1),e=e[e.length-1]),m.map(t,function(t){var o=r;if(!o){if(i&&i.length&&(t=S(t,i)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)})}),m.pluck=function(t,e){return m.map(t,m.property(e))},m.where=function(t,e){return m.filter(t,m.matcher(e))},m.findWhere=function(t,e){return m.find(t,m.matcher(e))},m.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=M(t)?t:m.values(t)).length;ao&&(o=i);else e=x(e,n),m.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},m.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=M(t)?t:m.values(t)).length;ai||void 0===n)return 1;if(n0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return i[o=n(i,r)]===r?o:-1;if(r!=r)return(o=e(u.call(i,s,a),m.isNaN))>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&oe?(i&&(clearTimeout(i),i=null),a=c,s=t.apply(r,o),i||(r=o=null)):i||!1===n.trailing||(i=setTimeout(l,u)),s};return c.cancel=function(){clearTimeout(i),a=0,i=r=o=null},c},m.debounce=function(t,e,n){var i,r,o=function(e,n){i=null,n&&(r=t.apply(e,n))},s=w(function(s){if(i&&clearTimeout(i),n){var a=!i;i=setTimeout(o,e),a&&(r=t.apply(this,s))}else i=m.delay(o,e,this,s);return r});return s.cancel=function(){clearTimeout(i),i=null},s},m.wrap=function(t,e){return m.partial(e,t)},m.negate=function(t){return function(){return!t.apply(this,arguments)}},m.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},m.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},m.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},m.once=m.partial(m.before,2),m.restArguments=w;var I=!{toString:null}.propertyIsEnumerable("toString"),F=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],R=function(t,e){var n=F.length,i=t.constructor,r=m.isFunction(i)&&i.prototype||a,o="constructor";for(m.has(t,o)&&!m.contains(e,o)&&e.push(o);n--;)(o=F[n])in t&&t[o]!==r[o]&&!m.contains(e,o)&&e.push(o)};m.keys=function(t){if(!m.isObject(t))return[];if(p)return p(t);var e=[];for(var n in t)m.has(t,n)&&e.push(n);return I&&R(t,e),e},m.allKeys=function(t){if(!m.isObject(t))return[];var e=[];for(var n in t)e.push(n);return I&&R(t,e),e},m.values=function(t){for(var e=m.keys(t),n=e.length,i=Array(n),r=0;r1&&(i=b(i,e[1])),e=m.allKeys(t)):(i=V,e=_(e,!1,!1),t=Object(t));for(var r=0,o=e.length;r1&&(n=e[1])):(e=m.map(_(e,!1,!1),String),i=function(t,n){return!m.contains(e,n)}),m.pick(t,i,n)}),m.defaults=j(m.allKeys,!0),m.create=function(t,e){var n=C(t);return e&&m.extendOwn(n,e),n},m.clone=function(t){return m.isObject(t)?m.isArray(t)?t.slice():m.extend({},t):t},m.tap=function(t,e){return e(t),t},m.isMatch=function(t,e){var n=m.keys(e),i=n.length;if(null==t)return!i;for(var r=Object(t),o=0;o":">",'"':""","'":"'","`":"`"},W=m.invert(B),U=function(t){var e=function(e){return t[e]},n="(?:"+m.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};m.escape=U(B),m.unescape=U(W),m.result=function(t,e,n){m.isArray(e)||(e=[e]);var i=e.length;if(!i)return m.isFunction(n)?n.call(t):n;for(var r=0;r/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,G={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Y=/\\|'|\r|\n|\u2028|\u2029/g,X=function(t){return"\\"+G[t]};m.template=function(t,e,n){!e&&n&&(e=n),e=m.defaults({},e,m.templateSettings);var i,r=RegExp([(e.escape||K).source,(e.interpolate||K).source,(e.evaluate||K).source].join("|")+"|$","g"),o=0,s="__p+='";t.replace(r,function(e,n,i,r,a){return s+=t.slice(o,a).replace(Y,X),o=a+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?s+="'+\n((__t=("+i+"))==null?'':__t)+\n'":r&&(s+="';\n"+r+"\n__p+='"),e}),s+="';\n",e.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{i=new Function(e.variable||"obj","_",s)}catch(t){throw t.source=s,t}var a=function(t){return i.call(this,t,m)},l=e.variable||"obj";return a.source="function("+l+"){\n"+s+"}",a},m.chain=function(t){var e=m(t);return e._chain=!0,e};var J=function(t,e){return t._chain?m(e).chain():e};m.mixin=function(t){return m.each(m.functions(t),function(e){var n=m[e]=t[e];m.prototype[e]=function(){var t=[this._wrapped];return c.apply(t,arguments),J(this,n.apply(m,t))}}),m},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=s[t];m.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],J(this,n)}}),m.each(["concat","join","slice"],function(t){var e=s[t];m.prototype[t]=function(){return J(this,e.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return String(this._wrapped)},void 0===(i=function(){return m}.apply(e,[]))||(n.exports=i)}()}).call(this,n(11),n(231)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getUnitFromValue=e.normalizeFloat=e.shallowDiff=e.getElement=e.camelCase=e.getModel=e.matches=e.upFirst=e.hasDnd=e.off=e.on=void 0;var i=n(1),r=window.Element.prototype,o=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector,s=function(t){return t[0].toUpperCase()+t.toLowerCase().slice(1)};e.on=function(t,e,n){e=e.split(/\s+/),t=t instanceof Array?t:[t];for(var i=function(i){t.forEach(function(t){return t.addEventListener(e[i],n)})},r=0;r=0?s!==a&&(n[o]=a):n[o]=null}for(var l in e)e.hasOwnProperty(l)&&(0,i.isUndefined)(t[l])&&(n[l]=e[l]);return n},e.normalizeFloat=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=0;if(isNaN(t))return n;if(t=parseFloat(t),Math.floor(t)!==t){var r=e.toString().split(".")[1];i=r?r.length:0}return i?parseFloat(t.toFixed(i)):t},e.getUnitFromValue=function(t){return t.replace(parseFloat(t),"")}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1);var o=n(57);t.exports=i.default.View.extend({className:function(){return this.getClasses()},tagName:function(){return this.model.get("tagName")},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model,n=t.config||{};this.opts=t,this.config=n,this.em=n.em||"",this.pfx=n.stylePrefix||"",this.ppfx=n.pStylePrefix||"",this.attr=e.get("attributes"),this.classe=this.attr.class||[];var i=this.$el,r=e.get("classes");this.listenTo(e,"change:style",this.updateStyle),this.listenTo(e,"change:attributes",this.updateAttributes),this.listenTo(e,"change:highlightable",this.updateHighlight),this.listenTo(e,"change:status",this.updateStatus),this.listenTo(e,"change:state",this.updateState),this.listenTo(e,"change:script",this.render),this.listenTo(e,"change:content",this.updateContent),this.listenTo(e,"change",this.handleChange),this.listenTo(r,"add remove change",this.updateClasses),i.data("model",e),i.data("collection",e.get("components")),e.view=this,r.length&&this.importClasses(),this.init()},init:function(){},handleChange:function(){var t=this.model;for(var e in t.emitUpdate(),t.changed)t.emitUpdate(e)},importClasses:function(){var t=this.config.em.get("SelectorManager");t&&this.model.get("classes").each(function(e){t.add(e.get("name"))})},updateState:function(t){var e="hc-state";this.model.get("state")?this.$el.addClass(e):this.$el.removeClass(e)},updateStatus:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(this.em,this.el),n=this.model.get("status"),i=this.pfx,r=this.ppfx,o=i+"selected",s=o+"-parent",a=r+"freezed",l=r+"hovered",c=[o,s,a,l];this.$el.removeClass(c.join(" "));var u=e.getAttribute("class")||"",h="";switch(n){case"selected":h=u+" "+o;break;case"selected-parent":h=u+" "+s;break;case"freezed":h=u+" "+a;break;case"freezed-selected":h=u+" "+a+" "+o;break;case"hovered":h=t.avoidHover?"":u+" "+l}(h=h.trim())&&e.setAttribute("class",h)},updateHighlight:function(){var t=this.model.get("highlightable");this.setAttribute("data-highlightable",t?1:"")},updateStyle:function(){var t=this.em,e=this.model;if(t&&t.get("avoidInlineStyle")){this.el.id=e.getId();var n=e.getStyle();!(0,r.isEmpty)(n)&&e.setStyle(n)}else this.setAttribute("style",e.styleToString())},updateClasses:function(){var t=this.model.get("classes").pluck("name").join(" ");this.setAttribute("class",t),this.updateStatus()},setAttribute:function(t,e){var n=this.$el;e?n.attr(t,e):n.removeAttr(t)},getClasses:function(){var t=this.model.get("attributes").class||[];return(t=(0,r.isArray)(t)?t:[t]).length?t.join(" "):null},updateAttributes:function(){var t=this.model,e={"data-gjs-type":t.get("type")||"default"},n=t.get("attributes"),i=t.get("src");for(var r in n)e[r]=n[r];i&&(e.src=i),this.$el.attr(e),this.updateHighlight(),this.updateStyle()},updateContent:function(){this.getChildrenContainer().innerHTML=this.model.get("content")},prevDef:function(t){t.preventDefault()},updateScript:function(){if(this.model.get("script")){var t=this.em;if(t)t.get("Canvas").getCanvasView().updateScript(this)}},getChildrenContainer:function(){var t=this.el;return"function"==typeof this.getChildrenSelector?t=this.el.querySelector(this.getChildrenSelector()):this.getTemplate,t},renderChildren:function(){var t=this.getChildrenContainer(),e=new o({collection:this.model.get("components"),config:this.config,componentTypes:this.opts.componentTypes});e.render(t),this.childrenView=e;for(var n=Array.prototype.slice.call(e.el.childNodes),i=0,r=n.length;i0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.em,s=this.parent(),a=s&&s.attributes;if(a&&a.propagate){var l={},c=a.propagate;c.forEach(function(t){return l[t]=s.get(t)}),l.propagate=c,l=i({},l,e),this.set(l)}var u=this.get("propagate");u&&this.set("propagate",(0,r.isArray)(u)?u:[u]),n&&n.config&&n.config.voidElements.indexOf(this.get("tagName"))>=0&&this.set("void",!0),n.em=o,this.opt=n,this.em=o,this.config=n.config||{},this.ccid=g.createId(this),this.set("attributes",this.get("attributes")||{}),this.listenTo(this,"change:script",this.scriptUpdated),this.listenTo(this,"change:traits",this.traitsUpdated),this.listenTo(this,"change:tagName",this.tagUpdated),this.listenTo(this,"change:attributes",this.attrUpdated),this.initClasses(),this.loadTraits(),this.initComponents(),this.initToolbar(),this.set("status",""),["classes","traits"].forEach(function(e){return t.listenTo(t.get(e),"add remove change",function(){return t.emitUpdate(e)})}),this.init()},is:function(t){return!(this.get("type")!=t)},find:function(t){var e=[];return this.view.$el.find(t).each(function(t,n,i){var r=i.eq(n).data("model");r&&e.push(r)}),e},closest:function(t){var e=this.view.$el.closest(t);return e.length&&e.data("model")},tagUpdated:function(){var t=this.collection,e=t.indexOf(this);t.remove(this),t.add(this,{at:e})},replaceWith:function(t){var e=this.collection,n=e.indexOf(this);return e.remove(this),e.add(t,{at:n})},attrUpdated:function(){var t=this,e=i({},this.previous("attributes")),n=i({},this.get("attributes")),s=(0,o.shallowDiff)(e,n);(0,r.keys)(s).forEach(function(e){return t.trigger("change:attributes:"+e)})},setAttributes:function(t){var e=(t=i({},t)).class;e&&this.setClass(e),delete t.class;var n=t.style;n&&this.setStyle(n),delete t.style,this.set("attributes",t)},addAttributes:function(t){var e=i({},this.getAttributes(),t);this.setAttributes(e)},getStyle:function(){var t=this.em;if(t&&t.getConfig("avoidInlineStyle")){var e=this.get("state"),n=t.get("CssComposer").getIdRule(this.getId(),{state:e});if(this.rule=n,n)return n.getStyle()}return s.default.getStyle.call(this)},setStyle:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=this.em;if(a&&a.getConfig("avoidInlineStyle")){e=(0,r.isString)(e)?this.parseStyle(e):e,e=i({},e,this.get("style"));var l=this.get("state"),c=a.get("CssComposer"),u=this.getStyle();this.rule=c.setIdRule(this.getId(),e,i({},n,{state:l}));var h=(0,o.shallowDiff)(u,e);this.set("style",{},{silent:1}),(0,r.keys)(h).forEach(function(e){return t.trigger("change:style:"+e)})}else e=s.default.setStyle.apply(this,arguments);return e},getAttributes:function(){var t=this.em,e=[],n=i({},this.get("attributes")),o=t&&t.get("SelectorManager"),s=this.getId();return this.get("classes").each(function(t){return e.push(t.get("name"))}),e.length&&(n.class=e.join(" ")),!(0,r.has)(n,"id")&&o&&o.get(s,o.Selector.TYPE_ID)&&(n.id=this.getId()),n},addClass:function(t){var e=this.em.get("SelectorManager").addClass(t);return this.get("classes").add(e)},setClass:function(t){return this.get("classes").reset(),this.addClass(t)},removeClass:function(t){var e=[];t=(0,r.isArray)(t)?t:[t];var n=this.get("classes"),i=c.TYPE_CLASS;return t.forEach(function(t){t.split(" ").forEach(function(t){var r=n.where({name:t,type:i})[0];r&&e.push(n.remove(r))})}),e},initClasses:function(){var t=this.normalizeClasses(this.get("classes")||[]);return this.set("classes",new u(t)),this},initComponents:function(){var t=new l(null,this.opt);return t.parent=this,!this.opt.avoidChildren&&t.reset(this.get("components")),this.set("components",t),this},init:function(){},append:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.components().add(t,e);return(0,r.isArray)(n)?n:[n]},components:function(t){var e=this.get("components");if((0,r.isUndefined)(t))return e;e.reset(),t&&this.append(t)},parent:function(){var t=this.collection;return t&&t.parent},scriptUpdated:function(){this.set("scriptUpdated",1)},traitsUpdated:function(){var t=0,e=i({},this.get("attributes")),n=this.get("traits");n instanceof h?(n.each(function(n){if(t=1,!n.get("changeProp")){var i=n.get("name"),r=n.getInitValue();i&&r&&(e[i]=r)}}),t&&this.set("attributes",e)):this.loadTraits()},initToolbar:function(){if(!this.get("toolbar")){var t=[];this.collection&&t.push({attributes:{class:"fa fa-arrow-up"},command:"select-parent"}),this.get("draggable")&&t.push({attributes:{class:"fa fa-arrows",draggable:!0},command:"tlb-move"}),this.get("copyable")&&t.push({attributes:{class:"fa fa-clone"},command:"tlb-clone"}),this.get("removable")&&t.push({attributes:{class:"fa fa-trash-o"},command:"tlb-delete"}),this.set("toolbar",t)}},loadTraits:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new h([],this.opt);return n.setTarget(this),(t=t||this.get("traits")).length&&n.add(t),this.set("traits",n,e),this},normalizeClasses:function(t){var e=[],n=this.em;if(n){var i=n.get("SelectorManager");if(i)return t.forEach(function(t){var n="";n="string"==typeof t?t:t.name;var r=i.add(n);e.push(r)}),e}},clone:function(){var t=this.em,e=this.getStyle(),n=i({},this.attributes),o=i({},this.opt);return n.attributes=i({},n.attributes),delete n.attributes.id,n.components=[],n.classes=[],n.traits=[],this.get("components").each(function(t,e){n.components[e]=t.clone()}),this.get("traits").each(function(t,e){n.traits[e]=t.clone()}),this.get("classes").each(function(t,e){n.classes[e]=t.get("name")}),n.status="",n.view="",o.collection=null,t&&t.getConfig("avoidInlineStyle")&&!(0,r.isEmpty)(e)&&(n.style=e),new this.constructor(n,o)},getName:function(){var t=this.get("name")||this.get("custom-name"),e=this.get("tagName");e="div"==e?"box":e;var n=this.get("type")||e;return n=n.charAt(0).toUpperCase()+n.slice(1),t||n},getIcon:function(){var t=this.get("icon");return t?t+" ":""},toHTML:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.get("tagName"),i=this.get("void"),o=t.attributes,s=this.getAttrToHTML();for(var a in o&&((0,r.isFunction)(o)?s=o(this,s)||{}:(0,r.isObject)(o)&&(s=o)),s){var l=s[a],c=(0,r.isString)(l)?l.replace(/"/g,"""):l;(0,r.isUndefined)(c)||((0,r.isBoolean)(c)?c&&e.push(a):e.push(a+'="'+c+'"'))}var u="<"+n+(e.length?" "+e.join(" "):"")+(i?"/":"")+">"+this.get("content");return this.get("components").each(function(e){return u+=e.toHTML(t)}),!i&&(u+=""),u},getAttrToHTML:function(){var t=this.getAttributes();return delete t.style,t},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]&&arguments[0];var t=this.em,e=this.getId();if(e){var n=g.createId(this);this.setId(n);var i=t&&t.get("CssComposer").getIdRule(e),r=i&&i.get("selectors").at(0);return r&&r.set("name",n),this}}},{isComponent:function(t){return{tagName:t.tagName?t.tagName.toLowerCase():""}},createId:function(t){var e=(++f).toString().length+2,n="i"+(Math.random()+1.1).toString(36).slice(-e);return d[n]=t,n},getList:function(){return d}});t.exports=g},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1),o=n(2);t.exports=i.default.View.extend({template:function(t){return'\n
    \n '+this.templateLabel(t)+'\n
    \n
    \n '+this.templateInput(t)+"\n
    \n "},templateLabel:function(t){var e=this.pfx;return'\n \n '+t.get("name")+'\n \n ⨯\n '},templateInput:function(t){return'\n
    \n \n
    \n '},events:function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({change:"inputValueChanged"},"click [data-clear-style]","clear"),initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,r.bindAll)(this,"targetUpdated"),this.config=t.config||{};var e=this.config.em;this.em=e,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.onChange=t.onChange,this.onInputRender=t.onInputRender||{},this.customValue=t.customValue||{};var n=this.model;this.property=n.get("property"),this.input=null;var i=this.pfx;this.inputHolderId="#"+i+"input-holder",this.sector=n.collection&&n.collection.sector,n.view=this,n.get("value")||n.set("value",n.getDefaultValue()),e&&e.on("update:component:style:"+this.property,this.targetUpdated),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(n,"destroy remove",this.remove),this.listenTo(n,"change:value",this.modelValueChanged),this.listenTo(n,"targetUpdated",this.targetUpdated),this.listenTo(n,"change:visible",this.updateVisibility),this.listenTo(n,"change:status",this.updateStatus);var o=this.init&&this.init.bind(this);o&&o()},updateStatus:function(){var t=this.model.get("status"),e=this.pfx,n=this.ppfx,i=this.config,r=n+"four-color",o=n+"color-warn",s=this.$el.children("."+e+"label"),a=this.getClearEl().style;switch(s.removeClass(r+" "+o),a.display="none",t){case"updated":s.addClass(r),i.clearProperties&&(a.display="inline");break;case"computed":s.addClass(o)}},clear:function(t){t&&t.stopPropagation(),this.model.clearValue(),this.targetUpdated()},getClearEl:function(){return this.clearEl||(this.clearEl=this.el.querySelector("[data-clear-style]")),this.clearEl},getTarget:function(){return this.getTargetModel()},getTargetModel:function(){return this.propTarget&&this.propTarget.model},getHelperModel:function(){return this.propTarget&&this.propTarget.helper},inputValueChanged:function(t){t&&t.stopPropagation(),this.model.setValue(this.getInputValue(),1,{fromInput:1}),this.elementUpdated()},elementUpdated:function(){this.setStatus("updated")},setStatus:function(t){this.model.set("status",t);var e=this.model.parent;e&&e.set("status",t)},targetUpdated:function(){if(this.checkVisibility()){var t=this.config,e=t.em,n=this.model,i="",r="",o=this.getTargetValue({ignoreDefault:1}),s=n.getDefaultValue(),a=this.getComputedValue();o?(i=o,t.highlightChanged&&(r="updated")):a&&t.showComputed&&a!=s?(i=a,t.highlightComputed&&(r="computed")):(i=s,r=""),n.setValue(i,0,{fromTarget:1}),this.setStatus(r),e&&(e.trigger("styleManager:change",this),e.trigger("styleManager:change:"+n.get("property"),this))}},checkVisibility:function(){var t=1;return this.config.hideNotStylable&&(this.isTargetStylable()&&this.isComponentStylable()?this.show():(this.hide(),t=0),this.sector&&this.sector.trigger("updateVisibility")),t},getTargetValue:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.model,i=this.getTargetModel(),r=this.customValue;if(!i)return t;if((t=i.getStyle()[n.get("property")])||e.ignoreDefault||(t=n.getDefaultValue()),"function"==typeof r&&!e.ignoreCustomValue){var o=r(this,n.collection.indexOf(n));o&&(t=o)}return t},getComputedValue:function(){var t=this.propTarget,e=t.computed||{},n=t.computedDefault||{},i=this.config.avoidComputed||[],r=this.model.get("property"),s=i.indexOf(r)<0,a=e[r],l=n[(0,o.camelCase)(r)];return e&&s&&l!==a&&a},getInputValue:function(){var t=this.getInputEl();return t?t.value:""},modelValueChanged:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.config.em,r=this.model,o=r.getFullValue(),s=this.getTarget(),a=this.onChange;n.fromInput||this.setValue(o),s&&this.isTargetStylable()&&this.isComponentStylable()&&(n.fromTarget||(a&&!n.fromParent?a(s,this,n):this.updateTargetStyle(o,null,n)),i&&(i.trigger("component:update",s),i.trigger("component:styleUpdate",s),i.trigger("component:styleUpdate:"+r.get("property"),s)))},updateTargetStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=e||this.model.get("property"),r=this.getTarget(),o=r.getStyle();t?o[i]=t:delete o[i],r.setStyle(o,n);var s=this.getHelperModel();s&&s.setStyle(o,n)},isTargetStylable:function(t){var e=t||this.getTarget(),n=this.model,i=n.get("property"),o=n.get("toRequire"),s=e.get("unstylable"),a=e.get("stylable-require"),l=e.get("stylable");return(0,r.isArray)(l)&&(l=l.indexOf(i)>=0),(0,r.isArray)(s)&&(l=s.indexOf(i)<0),o&&(l=a&&a.indexOf(i)>=0||!t),l},isComponentStylable:function(){var t=this.em,e=t&&t.getSelected();return!e||this.isTargetStylable(e)},setRawValue:function(t){this.setValue(this.model.parseValue(t))},setValue:function(t){var e=this.model,n=(0,r.isUndefined)(t)?e.getDefaultValue():t,i=this.getInputEl();i&&(i.value=n)},getInputEl:function(){return this.input||(this.input=this.el.querySelector("input")),this.input},updateVisibility:function(){this.el.style.display=this.model.get("visible")?"block":"none"},show:function(){this.model.set("visible",1)},hide:function(){this.model.set("visible",0)},cleanValue:function(){this.setValue("")},render:function(){var t=this.pfx,e=this.model,n=this.el;n.innerHTML=this.template(e),n.className=t+"property "+t+e.get("type"),this.updateStatus();var i=this.onRender&&this.onRender.bind(this);i&&i(),this.setValue(e.get("value"),{targetUpdate:1})}})},function(t,e,n){t.exports=function(){"use strict";var t=navigator.userAgent,e=navigator.platform,n=/gecko\/\d/i.test(t),i=/MSIE \d/.test(t),r=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(t),o=/Edge\/(\d+)/.exec(t),s=i||r||o,a=s&&(i?document.documentMode||6:+(o||r)[1]),l=!o&&/WebKit\//.test(t),c=l&&/Qt\/\d+\.\d+/.test(t),u=!o&&/Chrome\//.test(t),h=/Opera\//.test(t),d=/Apple Computer/.test(navigator.vendor),f=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(t),p=/PhantomJS/.test(t),g=!o&&/AppleWebKit/.test(t)&&/Mobile\/\w+/.test(t),v=/Android/.test(t),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),y=g||/Mac/.test(e),b=/\bCrOS\b/.test(t),x=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=y&&(c||h&&(null==w||w<12.11)),k=n||s&&a>=9;function S(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var T,E=function(t,e){var n=t.className,i=S(e).exec(n);if(i){var r=n.slice(i.index+i[0].length);t.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function A(t,e){return M(t).appendChild(e)}function O(t,e,n,i){var r=document.createElement(t);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var o=0;o=e)return s+(e-o);s+=a-o,s+=n-s%n,o=a+1}}g?I=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:s&&(I=function(t){try{t.select()}catch(t){}});var z=function(){this.id=null};function H(t,e){for(var n=0;n=e)return i+Math.min(s,e-r);if(r+=o-i,i=o+1,(r+=n-r%n)>=e)return i}}var K=[""];function G(t){for(;K.length<=t;)K.push(Y(K)+" ");return K[t]}function Y(t){return t[t.length-1]}function X(t,e){for(var n=[],i=0;i"€"&&(t.toUpperCase()!=t.toLowerCase()||Q.test(t))}function et(t,e){return e?!!(e.source.indexOf("\\w")>-1&&tt(t))||e.test(t):tt(t)}function nt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var it=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function rt(t){return t.charCodeAt(0)>=768&&it.test(t)}function ot(t,e,n){for(;(n<0?e>0:en?-1:1;;){if(e==n)return e;var r=(e+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==e)return t(o)?e:n;t(o)?n=o:e=o+i}}function at(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");for(var n=t;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(e=t.first&&en?gt(n,at(t,n).text.length):function(t,e){var n=t.ch;return null==n||n>e?gt(t.line,e):n<0?gt(t.line,0):t}(e,at(t,e.line).text.length)}function kt(t,e){for(var n=[],i=0;i=e:o.to>e);(i||(i=[])).push(new Et(s,o.from,l?null:o.to))}}return i}(n,r,s),l=function(t,e,n){var i;if(t)for(var r=0;r=e:o.to>e);if(a||o.from==e&&"bookmark"==s.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(s.inclusiveLeft?o.from<=e:o.from0&&a)for(var x=0;xe)&&(!n||It(n,o.marker)<0)&&(n=o.marker)}return n}function Ht(t,e,n,i,r){var o=at(t,e),s=Tt&&o.markedSpans;if(s)for(var a=0;a=0&&h<=0||u<=0&&h>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?vt(c.to,n)>=0:vt(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?vt(c.from,i)<=0:vt(c.from,i)<0)))return!0}}}function Vt(t){for(var e;e=Rt(t);)t=e.find(-1,!0).line;return t}function $t(t,e){var n=at(t,e),i=Vt(n);return n==i?e:ht(i)}function Bt(t,e){if(e>t.lastLine())return e;var n,i=at(t,e);if(!Wt(t,i))return e;for(;n=jt(i);)i=n.find(1,!0).line;return ht(i)+1}function Wt(t,e){var n=Tt&&e.markedSpans;if(n)for(var i=void 0,r=0;re.maxLineLength&&(e.maxLineLength=n,e.maxLine=t)})}var Yt=null;function Xt(t,e,n){var i;Yt=null;for(var r=0;re)return r;o.to==e&&(o.from!=o.to&&"before"==n?i=r:Yt=r),o.from==e&&(o.from!=o.to&&"before"!=n?i=r:Yt=r)}return null!=i?i:Yt}var Jt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(n){return n<=247?t.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?e.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L"}var i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,o=/[LRr]/,s=/[Lb1n]/,a=/[1n]/;function l(t,e,n){this.level=t,this.from=e,this.to=n}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!i.test(t))return!1;for(var u=t.length,h=[],d=0;d-1&&(i[e]=r.slice(0,o).concat(r.slice(o+1)))}}}function ie(t,e){var n=ee(t,e);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function ae(t){t.prototype.on=function(t,e){te(this,t,e)},t.prototype.off=function(t,e){ne(this,t,e)}}function le(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function ce(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function ue(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function he(t){le(t),ce(t)}function de(t){return t.target||t.srcElement}function fe(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),y&&t.ctrlKey&&1==e&&(e=3),e}var pe,ge,ve=function(){if(s&&a<9)return!1;var t=O("div");return"draggable"in t||"dragDrop"in t}();function me(t){if(null==pe){var e=O("span","​");A(t,O("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(pe=e.offsetWidth<=1&&e.offsetHeight>2&&!(s&&a<8))}var n=pe?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function ye(t){if(null!=ge)return ge;var e=A(t,document.createTextNode("AخA")),n=T(e,0,1).getBoundingClientRect(),i=T(e,1,2).getBoundingClientRect();return M(t),!(!n||n.left==n.right)&&(ge=i.right-n.right<3)}var be=3!="\n\nb".split(/\n/).length?function(t){for(var e=0,n=[],i=t.length;e<=i;){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var o=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),s=o.indexOf("\r");-1!=s?(n.push(o.slice(0,s)),e+=s+1):(n.push(o),e=r+1)}return n}:function(t){return t.split(/\r\n?|\n/)},xe=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(t){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(t){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},we=function(){var t=O("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Ce=null,ke={},Se={};function Te(t){if("string"==typeof t&&Se.hasOwnProperty(t))t=Se[t];else if(t&&"string"==typeof t.name&&Se.hasOwnProperty(t.name)){var e=Se[t.name];"string"==typeof e&&(e={name:e}),(t=Z(e,t)).name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Te("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Te("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Ee(t,e){e=Te(e);var n=ke[e.name];if(!n)return Ee(t,"text/plain");var i=n(t,e);if(Me.hasOwnProperty(e.name)){var r=Me[e.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=e.name,e.helperType&&(i.helperType=e.helperType),e.modeProps)for(var s in e.modeProps)i[s]=e.modeProps[s];return i}var Me={};function Ae(t,e){var n=Me.hasOwnProperty(t)?Me[t]:Me[t]={};R(e,n)}function Oe(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var n={};for(var i in e){var r=e[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Pe(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e=n.state,t=n.mode;return n||{mode:t,state:e}}function _e(t,e,n){return!t.startState||t.startState(e,n)}var Le=function(t,e,n){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};Le.prototype.eol=function(){return this.pos>=this.string.length},Le.prototype.sol=function(){return this.pos==this.lineStart},Le.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Le.prototype.next=function(){if(this.pose},Le.prototype.eatSpace=function(){for(var t=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>t},Le.prototype.skipToEnd=function(){this.pos=this.string.length},Le.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},Le.prototype.backUp=function(t){this.pos-=t},Le.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}var r=function(t){return n?t.toLowerCase():t},o=this.string.substr(this.pos,t.length);if(r(o)==r(t))return!1!==e&&(this.pos+=t.length),!0},Le.prototype.current=function(){return this.string.slice(this.start,this.pos)},Le.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},Le.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},Le.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var Ne=function(t,e){this.state=t,this.lookAhead=e},De=function(t,e,n,i){this.state=e,this.doc=t,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function Ie(t,e,n,i){var r=[t.state.modeGen],o={};We(t,e.text,t.doc.mode,n,function(t,e){return r.push(t,e)},o,i);for(var s=n.state,a=function(i){n.baseTokens=r;var a=t.state.overlays[i],l=1,c=0;n.state=!0,We(t,e.text,a.mode,n,function(t,e){for(var n=l;ct&&r.splice(l,1,t,r[l+1],i),l+=2,c=Math.min(t,i)}if(e)if(a.opaque)r.splice(n,l-n,t,"overlay "+e),l=n+2;else for(;nt.options.maxHighlightLength&&Oe(t.doc.mode,i.state),o=Ie(t,e,i);r&&(i.state=r),e.stateAfter=i.save(!r),e.styles=o.styles,o.classes?e.styleClasses=o.classes:e.styleClasses&&(e.styleClasses=null),n===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Re(t,e,n){var i=t.doc,r=t.display;if(!i.mode.startState)return new De(i,!0,e);var o=function(t,e,n){for(var i,r,o=t.doc,s=n?-1:e-(t.doc.mode.innerMode?1e3:100),a=e;a>s;--a){if(a<=o.first)return o.first;var l=at(o,a-1),c=l.stateAfter;if(c&&(!n||a+(c instanceof Ne?c.lookAhead:0)<=o.modeFrontier))return a;var u=j(l.text,null,t.options.tabSize);(null==r||i>u)&&(r=a-1,i=u)}return r}(t,e,n),s=o>i.first&&at(i,o-1).stateAfter,a=s?De.fromSaved(i,s,o):new De(i,_e(i.mode),o);return i.iter(o,e,function(n){je(t,n.text,a);var i=a.line;n.stateAfter=i==e-1||i%5==0||i>=r.viewFrom&&ie.start)return o}throw new Error("Mode "+t.name+" failed to advance stream.")}De.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},De.prototype.baseToken=function(t){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=t;)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},De.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},De.fromSaved=function(t,e,n){return e instanceof Ne?new De(t,Oe(t.mode,e.state),n,e.lookAhead):new De(t,Oe(t.mode,e),n)},De.prototype.save=function(t){var e=!1!==t?Oe(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Ne(e,this.maxLookAhead):e};var Ve=function(t,e,n){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=n};function $e(t,e,n,i){var r,o=t.doc,s=o.mode;e=Ct(o,e);var a,l=at(o,e.line),c=Re(t,e.line,n),u=new Le(l.text,t.options.tabSize,c);for(i&&(a=[]);(i||u.post.options.maxHighlightLength?(a=!1,s&&je(t,e,i,h.pos),h.pos=e.length,l=null):l=Be(He(n,h,i.state,d),o),d){var f=d[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!a||u!=l){for(;c1&&!/ /.test(t))return t;for(var n=e,i="",r=0;rc&&h.from<=c);d++);if(h.to>=u)return t(n,i,r,o,s,a,l);t(n,i.slice(0,h.to-c),r,o,null,a,l),o=null,i=i.slice(h.to-c),c=h.to}}}function tn(t,e,n,i){var r=!i&&n.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!i&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function en(t,e,n){var i=t.markedSpans,r=t.text,o=0;if(i)for(var s,a,l,c,u,h,d,f=r.length,p=0,g=1,v="",m=0;;){if(m==p){l=c=u=h=a="",d=null,m=1/0;for(var y=[],b=void 0,x=0;xp||C.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&m>w.to&&(m=w.to,c=""),C.className&&(l+=" "+C.className),C.css&&(a=(a?a+";":"")+C.css),C.startStyle&&w.from==p&&(u+=" "+C.startStyle),C.endStyle&&w.to==m&&(b||(b=[])).push(C.endStyle,w.to),C.title&&!h&&(h=C.title),C.collapsed&&(!d||It(d.marker,C)<0)&&(d=w)):w.from>p&&m>w.from&&(m=w.from)}if(b)for(var k=0;k=f)break;for(var T=Math.min(f,m);;){if(v){var E=p+v.length;if(!d){var M=E>T?v.slice(0,T-p):v;e.addToken(e,M,s?s+l:l,u,p+M.length==m?c:"",h,a)}if(E>=T){v=v.slice(T-p),p=T;break}p=E,u=""}v=r.slice(o,o=n[g++]),s=Ye(n[g++],e.cm.options)}}else for(var A=1;An)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}function On(t,e,n,i){return Ln(t,_n(t,e),n,i)}function Pn(t,e){if(e>=t.display.viewFrom&&e=n.lineN&&e2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}(t,e.view,e.rect),e.hasHeights=!0),(o=function(t,e,n,i){var r,o=In(e.map,n,i),l=o.node,c=o.start,u=o.end,h=o.collapse;if(3==l.nodeType){for(var d=0;d<4;d++){for(;c&&rt(e.line.text.charAt(o.coverStart+c));)--c;for(;o.coverStart+u1}(t))return e;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:e.left*n,right:e.right*n,top:e.top*i,bottom:e.bottom*i}}(t.display.measure,r))}else{var f;c>0&&(h=i="right"),r=t.options.lineWrapping&&(f=l.getClientRects()).length>1?f["right"==i?f.length-1:0]:l.getBoundingClientRect()}if(s&&a<9&&!c&&(!r||!r.left&&!r.right)){var p=l.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+ei(t.display),top:p.top,bottom:p.bottom}:Dn}for(var g=r.top-e.rect.top,v=r.bottom-e.rect.top,m=(g+v)/2,y=e.view.measure.heights,b=0;be)&&(r=(o=l-a)-1,e>=l&&(s="right")),null!=r){if(i=t[c+2],a==l&&n==(i.insertLeft?"left":"right")&&(s=n),"left"==n&&0==r)for(;c&&t[c-2]==t[c-3]&&t[c-1].insertLeft;)i=t[2+(c-=3)],s="left";if("right"==n&&r==l-a)for(;c=0&&(n=t[r]).left==n.right;r--);return n}function Rn(t){if(t.measure&&(t.measure.cache={},t.measure.heights=null,t.rest))for(var e=0;e=i.text.length?(l=i.text.length,c="before"):l<=0&&(l=0,c="after"),!a)return s("before"==c?l-1:l,"before"==c);function u(t,e,n){var i=a[e],r=1==i.level;return s(n?t-1:t,r!=n)}var h=Xt(a,l,c),d=Yt,f=u(l,h,"before"==c);return null!=d&&(f.other=u(l,d,"before"!=c)),f}function Kn(t,e){var n=0;e=Ct(t.doc,e),t.options.lineWrapping||(n=ei(t.display)*e.ch);var i=at(t.doc,e.line),r=qt(i)+Cn(t.display);return{left:n,right:n,top:r,bottom:r+i.height}}function Gn(t,e,n,i,r){var o=gt(t,e,n);return o.xRel=r,i&&(o.outside=!0),o}function Yn(t,e,n){var i=t.doc;if((n+=t.display.viewOffset)<0)return Gn(i.first,0,null,!0,-1);var r=dt(i,n),o=i.first+i.size-1;if(r>o)return Gn(i.first+i.size-1,at(i,o).text.length,null,!0,1);e<0&&(e=0);for(var s=at(i,r);;){var a=Qn(t,s,r,e,n),l=zt(s,a.ch+(a.xRel>0?1:0));if(!l)return a;var c=l.find(1);if(c.line==r)return c;s=at(i,r=c.line)}}function Xn(t,e,n,i){i-=$n(e);var r=e.text.length,o=st(function(e){return Ln(t,n,e-1).bottom<=i},r,0);return r=st(function(e){return Ln(t,n,e).top>i},o,r),{begin:o,end:r}}function Jn(t,e,n,i){n||(n=_n(t,e));var r=Bn(t,e,Ln(t,n,i),"line").top;return Xn(t,e,n,r)}function Zn(t,e,n,i){return!(t.bottom<=n)&&(t.top>n||(i?t.left:t.right)>e)}function Qn(t,e,n,i,r){r-=qt(e);var o=_n(t,e),s=$n(e),a=0,l=e.text.length,c=!0,u=Zt(e,t.doc.direction);if(u){var h=(t.options.lineWrapping?function(t,e,n,i,r,o,s){var a=Xn(t,e,i,s),l=a.begin,c=a.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,h=null,d=0;d=c||f.to<=l)){var p=1!=f.level,g=Ln(t,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,v=gv)&&(u=f,h=v)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}:function(t,e,n,i,r,o,s){var a=st(function(a){var l=r[a],c=1!=l.level;return Zn(qn(t,gt(n,c?l.to:l.from,c?"before":"after"),"line",e,i),o,s,!0)},0,r.length-1),l=r[a];if(a>0){var c=1!=l.level,u=qn(t,gt(n,c?l.from:l.to,c?"after":"before"),"line",e,i);Zn(u,o,s,!0)&&u.top>s&&(l=r[a-1])}return l})(t,e,n,o,u,i,r);c=1!=h.level,a=c?h.from:h.to-1,l=c?h.to:h.from-1}var d,f,p=null,g=null,v=st(function(e){var n=Ln(t,o,e);return n.top+=s,n.bottom+=s,!!Zn(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=e,g=n),!0)},a,l),m=!1;if(g){var y=i-g.left=x.bottom}return v=ot(e.text,v,1),Gn(n,v,f,m,i-d)}function ti(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==Nn){Nn=O("pre");for(var e=0;e<49;++e)Nn.appendChild(document.createTextNode("x")),Nn.appendChild(O("br"));Nn.appendChild(document.createTextNode("x"))}A(t.measure,Nn);var n=Nn.offsetHeight/50;return n>3&&(t.cachedTextHeight=n),M(t.measure),n||1}function ei(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=O("span","xxxxxxxxxx"),n=O("pre",[e]);A(t.measure,n);var i=e.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function ni(t){for(var e=t.display,n={},i={},r=e.gutters.clientLeft,o=e.gutters.firstChild,s=0;o;o=o.nextSibling,++s)n[t.options.gutters[s]]=o.offsetLeft+o.clientLeft+r,i[t.options.gutters[s]]=o.clientWidth;return{fixedPos:ii(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:e.wrapper.clientWidth}}function ii(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function ri(t){var e=ti(t.display),n=t.options.lineWrapping,i=n&&Math.max(5,t.display.scroller.clientWidth/ei(t.display)-3);return function(r){if(Wt(t.doc,r))return 0;var o=0;if(r.widgets)for(var s=0;s=t.display.viewTo)return null;if((e-=t.display.viewFrom)<0)return null;for(var n=t.display.view,i=0;i=t.display.viewTo||a.to().linee||e==n&&s.to==e)&&(i(Math.max(s.from,e),Math.min(s.to,n),1==s.level?"rtl":"ltr",o),r=!0)}r||i(e,n,"ltr")}(g,n||0,null==i?d:i,function(t,e,r,h){var v="ltr"==r,m=f(t,v?"left":"right"),y=f(e-1,v?"right":"left"),b=null==n&&0==t,x=null==i&&e==d,w=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var k=(c?b:x)&&w,S=(c?x:b)&&C,T=k?a:(v?m:y).left,E=S?l:(v?y:m).right;u(T,m.top,E-T,m.bottom)}else{var M,A,O,P;v?(M=c&&b&&w?a:m.left,A=c?l:p(t,r,"before"),O=c?a:p(e,r,"after"),P=c&&x&&C?l:y.right):(M=c?p(t,r,"before"):a,A=!c&&b&&w?l:m.right,O=!c&&x&&C?a:y.left,P=c?p(e,r,"after"):l),u(M,m.top,A-M,m.bottom),m.bottom0?e.blinker=setInterval(function(){return e.cursorDiv.style.visibility=(n=!n)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function pi(t){t.state.focused||(t.display.input.focus(),vi(t))}function gi(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,mi(t))},100)}function vi(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(ie(t,"focus",t,e),t.state.focused=!0,N(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),fi(t))}function mi(t,e){t.state.delayingBlurEvent||(t.state.focused&&(ie(t,"blur",t,e),t.state.focused=!1,E(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function yi(t){for(var e=t.display,n=e.lineDiv.offsetTop,i=0;i.005||u<-.005)&&(ut(r.line,o),bi(r.line),r.rest))for(var h=0;h=s&&(o=dt(e,qt(at(e,l))-t.wrapper.clientHeight),s=l)}return{from:o,to:Math.max(s,o+1)}}function wi(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var i=ii(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,o=i+"px",s=0;so&&(e.bottom=e.top+o);var a=t.doc.height+kn(n),l=e.topa-i;if(e.topr+o){var u=Math.min(e.top,(c?a:e.bottom)-o);u!=r&&(s.scrollTop=u)}var h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:n.scroller.scrollLeft,d=En(t)-(t.options.fixedGutter?n.gutters.offsetWidth:0),f=e.right-e.left>d;return f&&(e.right=e.left+d),e.left<10?s.scrollLeft=0:e.leftd+h-3&&(s.scrollLeft=e.right+(f?0:10)-d),s}function Si(t,e){null!=e&&(Mi(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function Ti(t){Mi(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function Ei(t,e,n){null==e&&null==n||Mi(t),null!=e&&(t.curOp.scrollLeft=e),null!=n&&(t.curOp.scrollTop=n)}function Mi(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var n=Kn(t,e.from),i=Kn(t,e.to);Ai(t,n,i,e.margin)}}function Ai(t,e,n,i){var r=ki(t,{left:Math.min(e.left,n.left),top:Math.min(e.top,n.top)-i,right:Math.max(e.right,n.right),bottom:Math.max(e.bottom,n.bottom)+i});Ei(t,r.scrollLeft,r.scrollTop)}function Oi(t,e){Math.abs(t.doc.scrollTop-e)<2||(n||ar(t,{top:e}),Pi(t,e,!0),n&&ar(t),nr(t,100))}function Pi(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e),(t.display.scroller.scrollTop!=e||n)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function _i(t,e,n,i){e=Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth),(n?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!i||(t.doc.scrollLeft=e,wi(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function Li(t){var e=t.display,n=e.gutters.offsetWidth,i=Math.round(t.doc.height+kn(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Tn(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:n}}var Ni=function(t,e,n){this.cm=n;var i=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,t(i),t(r),te(i,"scroll",function(){i.clientHeight&&e(i.scrollTop,"vertical")}),te(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,s&&a<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Ni.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,n=t.scrollHeight>t.clientHeight+1,i=t.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=e?i+"px":"0";var r=t.viewHeight-(e?i:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=t.barLeft+"px";var o=t.viewWidth-t.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:e?i:0}},Ni.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Ni.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Ni.prototype.zeroWidthHack=function(){var t=y&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new z,this.disableVert=new z},Ni.prototype.enableZeroWidthBar=function(t,e,n){t.style.pointerEvents="auto",e.set(1e3,function i(){var r=t.getBoundingClientRect(),o="vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);o!=t?t.style.pointerEvents="none":e.set(1e3,i)})},Ni.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var Di=function(){};function Ii(t,e){e||(e=Li(t));var n=t.display.barWidth,i=t.display.barHeight;Fi(t,e);for(var r=0;r<4&&n!=t.display.barWidth||i!=t.display.barHeight;r++)n!=t.display.barWidth&&t.options.lineWrapping&&yi(t),Fi(t,Li(t)),n=t.display.barWidth,i=t.display.barHeight}function Fi(t,e){var n=t.display,i=n.scrollbars.update(e);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=e.gutterWidth+"px"):n.gutterFiller.style.display=""}Di.prototype.update=function(){return{bottom:0,right:0}},Di.prototype.setScrollLeft=function(){},Di.prototype.setScrollTop=function(){},Di.prototype.clear=function(){};var Ri={native:Ni,null:Di};function ji(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&E(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Ri[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),te(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?_i(t,e):Oi(t,e)},t),t.display.scrollbars.addClass&&N(t.display.wrapper,t.display.scrollbars.addClass)}var zi=0;function Hi(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++zi},function(t){on?on.ops.push(t):t.ownsGroup=on={ops:[t],delayedCallbacks:[]}}(t.curOp)}function Vi(t){var e=t.curOp;!function(t,e){var n=t.ownsGroup;if(n)try{!function(t){var e=t.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new rr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Bi(t){t.updatedDisplay=t.mustUpdate&&or(t.cm,t.update)}function Wi(t){var e=t.cm,n=e.display;t.updatedDisplay&&yi(e),t.barMeasure=Li(e),n.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=On(e,n.maxLine,n.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+t.adjustWidthTo+Tn(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+t.adjustWidthTo-En(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=n.input.prepareSelection())}function Ui(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft1&&(s=!0)),null!=c.scrollLeft&&(_i(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-h)>1&&(s=!0)),!s)break}return r}(e,Ct(i,t.scrollToPos.from),Ct(i,t.scrollToPos.to),t.scrollToPos.margin);!function(t,e){if(!re(t,"scrollCursorIntoView")){var n=t.display,i=n.sizer.getBoundingClientRect(),r=null;if(e.top+i.top<0?r=!0:e.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(r=!1),null!=r&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(e.top-n.viewOffset-Cn(t.display))+"px;\n height: "+(e.bottom-e.top+Tn(t)+n.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}(e,r)}var o=t.maybeHiddenMarkers,s=t.maybeUnhiddenMarkers;if(o)for(var a=0;ae)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Tt&&$t(t.doc,e)r.viewFrom?Qi(t):(r.viewFrom+=i,r.viewTo+=i);else if(e<=r.viewFrom&&n>=r.viewTo)Qi(t);else if(e<=r.viewFrom){var o=tr(t,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):Qi(t)}else if(n>=r.viewTo){var s=tr(t,e,e,-1);s?(r.view=r.view.slice(0,s.index),r.viewTo=s.lineN):Qi(t)}else{var a=tr(t,e,e,-1),l=tr(t,n,n+i,1);a&&l?(r.view=r.view.slice(0,a.index).concat(rn(t,a.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):Qi(t)}var c=r.externalMeasured;c&&(n=r.lineN&&e=i.viewTo)){var o=i.view[ai(t,e)];if(null!=o.node){var s=o.changes||(o.changes=[]);-1==H(s,n)&&s.push(n)}}}function Qi(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function tr(t,e,n,i){var r,o=ai(t,e),s=t.display.view;if(!Tt||n==t.doc.first+t.doc.size)return{index:o,lineN:n};for(var a=t.display.viewFrom,l=0;l0){if(o==s.length-1)return null;r=a+s[o].size-e,o++}else r=a-e;e+=r,n+=r}for(;$t(t.doc,n)!=n;){if(o==(i<0?0:s.length-1))return null;n+=i*s[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function er(t){for(var e=t.display.view,n=0,i=0;i=t.display.viewTo)){var n=+new Date+t.options.workTime,i=Re(t,e.highlightFrontier),r=[];e.iter(i.line,Math.min(e.first+e.size,t.display.viewTo+500),function(o){if(i.line>=t.display.viewFrom){var s=o.styles,a=o.text.length>t.options.maxHighlightLength?Oe(e.mode,i.state):null,l=Ie(t,o,i,!0);a&&(i.state=a),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var h=!s||s.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!h&&dn)return nr(t,t.options.workDelay),!0}),e.highlightFrontier=i.line,e.modeFrontier=Math.max(e.modeFrontier,i.line),r.length&&Ki(t,function(){for(var e=0;e=n.viewFrom&&e.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==er(t))return!1;Ci(t)&&(Qi(t),e.dims=ni(t));var r=i.first+i.size,o=Math.max(e.visible.from-t.options.viewportMargin,i.first),s=Math.min(r,e.visible.to+t.options.viewportMargin);n.viewFroms&&n.viewTo-s<20&&(s=Math.min(r,n.viewTo)),Tt&&(o=$t(t.doc,o),s=Bt(t.doc,s));var a=o!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=e.wrapperHeight||n.lastWrapWidth!=e.wrapperWidth;!function(t,e,n){var i=t.display;0==i.view.length||e>=i.viewTo||n<=i.viewFrom?(i.view=rn(t,e,n),i.viewFrom=e):(i.viewFrom>e?i.view=rn(t,e,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,ai(t,n)))),i.viewTo=n}(t,o,s),n.viewOffset=qt(at(t.doc,n.viewFrom)),t.display.mover.style.top=n.viewOffset+"px";var c=er(t);if(!a&&0==c&&!e.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var u=function(t){if(t.hasFocus())return null;var e=L();if(!e||!_(t.display.lineDiv,e))return null;var n={activeElt:e};if(window.getSelection){var i=window.getSelection();i.anchorNode&&i.extend&&_(t.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}(t);return c>4&&(n.lineDiv.style.display="none"),function(t,e,n){var i=t.display,r=t.options.lineNumbers,o=i.lineDiv,s=o.firstChild;function a(e){var n=e.nextSibling;return l&&y&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),n}for(var c=i.view,u=i.viewFrom,h=0;h-1&&(f=!1),cn(t,d,u,n)),f&&(M(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(pt(t.options,u)))),s=d.node.nextSibling}else{var p=vn(t,d,u,n);o.insertBefore(p,s)}u+=d.size}for(;s;)s=a(s)}(t,n.updateLineNumbers,e.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(t){if(t&&t.activeElt&&t.activeElt!=L()&&(t.activeElt.focus(),t.anchorNode&&_(document.body,t.anchorNode)&&_(document.body,t.focusNode))){var e=window.getSelection(),n=document.createRange();n.setEnd(t.anchorNode,t.anchorOffset),n.collapse(!1),e.removeAllRanges(),e.addRange(n),e.extend(t.focusNode,t.focusOffset)}}(u),M(n.cursorDiv),M(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=e.wrapperHeight,n.lastWrapWidth=e.wrapperWidth,nr(t,400)),n.updateLineNumbers=null,!0}function sr(t,e){for(var n=e.viewport,i=!0;(i&&t.options.lineWrapping&&e.oldDisplayWidth!=En(t)||(n&&null!=n.top&&(n={top:Math.min(t.doc.height+kn(t.display)-Mn(t),n.top)}),e.visible=xi(t.display,t.doc,n),!(e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)))&&or(t,e);i=!1){yi(t);var r=Li(t);li(t),Ii(t,r),cr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function ar(t,e){var n=new rr(t,e);if(or(t,n)){yi(t),sr(t,n);var i=Li(t);li(t),Ii(t,i),cr(t,i),n.finish()}}function lr(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style.marginLeft=e+"px"}function cr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Tn(t)+"px"}function ur(t){var e=t.display.gutters,n=t.options.gutters;M(e);for(var i=0;i-1&&!t.lineNumbers&&(t.gutters=t.gutters.slice(0),t.gutters.splice(e,1))}rr.prototype.signal=function(t,e){se(t,e)&&this.events.push(arguments)},rr.prototype.finish=function(){for(var t=0;ta.clientWidth,u=a.scrollHeight>a.clientHeight;if(r&&c||o&&u){if(o&&y&&l)t:for(var d=e.target,f=s.view;d!=a;d=d.parentNode)for(var p=0;p=0&&vt(t,i.to())<=0)return n}return-1};var yr=function(t,e){this.anchor=t,this.head=e};function br(t,e){var n=t[e];t.sort(function(t,e){return vt(t.from(),e.from())}),e=H(t,n);for(var i=1;i=0){var s=xt(o.from(),r.from()),a=bt(o.to(),r.to()),l=o.empty()?r.from()==r.head:o.from()==o.head;i<=e&&--e,t.splice(--i,2,new yr(l?a:s,l?s:a))}}return new mr(t,e)}function xr(t,e){return new mr([new yr(t,e||t)],0)}function wr(t){return t.text?gt(t.from.line+t.text.length-1,Y(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function Cr(t,e){if(vt(t,e.from)<0)return t;if(vt(t,e.to)<=0)return wr(e);var n=t.line+e.text.length-(e.to.line-e.from.line)-1,i=t.ch;return t.line==e.to.line&&(i+=wr(e).ch-e.to.ch),gt(n,i)}function kr(t,e){for(var n=[],i=0;i1&&t.remove(a.line+1,p-1),t.insert(a.line+1,m)}an(t,"change",t,e)}function Or(t,e,n){!function t(i,r,o){if(i.linked)for(var s=0;sa-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(o=function(t,e){return e?(Dr(t.done),Y(t.done)):t.done.length&&!Y(t.done).ranges?Y(t.done):t.done.length>1&&!t.done[t.done.length-2].ranges?(t.done.pop(),Y(t.done)):void 0}(r,r.lastOp==i)))s=Y(o.changes),0==vt(e.from,e.to)&&0==vt(e.from,s.to)?s.to=wr(e):o.changes.push(Nr(t,e));else{var l=Y(r.done);for(l&&l.ranges||Rr(t.sel,r.done),o={changes:[Nr(t,e)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=a,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=e.origin,s||ie(t,"historyAdded")}function Fr(t,e,n,i){var r=t.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||function(t,e,n,i){var r=e.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}(t,o,Y(r.done),e))?r.done[r.done.length-1]=e:Rr(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&Dr(r.undone)}function Rr(t,e){var n=Y(e);n&&n.ranges&&n.equals(t)||e.push(t)}function jr(t,e,n,i){var r=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,n),Math.min(t.first+t.size,i),function(n){n.markedSpans&&((r||(r=e["spans_"+t.id]={}))[o]=n.markedSpans),++o})}function zr(t){if(!t)return null;for(var e,n=0;n-1&&(Y(a)[h]=c[h],delete c[h])}}}return i}function $r(t,e,n,i){if(i){var r=t.anchor;if(n){var o=vt(e,r)<0;o!=vt(n,r)<0?(r=e,e=n):o!=vt(e,n)<0&&(e=n)}return new yr(r,e)}return new yr(n||e,e)}function Br(t,e,n,i,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Gr(t,new mr([$r(t.sel.primary(),e,n,r)],0),i)}function Wr(t,e,n){for(var i=[],r=t.cm&&(t.cm.display.shift||t.extend),o=0;o=e.ch:a.to>e.ch))){if(r&&(ie(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--s;continue}break}if(!l.atomic)continue;if(n){var c=l.find(i<0?1:-1),u=void 0;if((i<0?l.inclusiveRight:l.inclusiveLeft)&&(c=eo(t,c,-i,c&&c.line==e.line?o:null)),c&&c.line==e.line&&(u=vt(c,n))&&(i<0?u<0:u>0))return Qr(t,c,e,i,r)}var h=l.find(i<0?-1:1);return(i<0?l.inclusiveLeft:l.inclusiveRight)&&(h=eo(t,h,i,h.line==e.line?o:null)),h?Qr(t,h,e,i,r):null}}return e}function to(t,e,n,i,r){var o=i||1,s=Qr(t,e,n,o,r)||!r&&Qr(t,e,n,o,!0)||Qr(t,e,n,-o,r)||!r&&Qr(t,e,n,-o,!0);return s||(t.cantEdit=!0,gt(t.first,0))}function eo(t,e,n,i){return n<0&&0==e.ch?e.line>t.first?Ct(t,gt(e.line-1)):null:n>0&&e.ch==(i||at(t,e.line)).text.length?e.line0)){var u=[l,1],h=vt(c.from,a.from),d=vt(c.to,a.to);(h<0||!s.inclusiveLeft&&!h)&&u.push({from:c.from,to:a.from}),(d>0||!s.inclusiveRight&&!d)&&u.push({from:a.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}(t,e.from,e.to);if(i)for(var r=i.length-1;r>=0;--r)oo(t,{from:i[r].from,to:i[r].to,text:r?[""]:e.text,origin:e.origin});else oo(t,e)}}function oo(t,e){if(1!=e.text.length||""!=e.text[0]||0!=vt(e.from,e.to)){var n=kr(t,e);Ir(t,e,n,t.cm?t.cm.curOp.id:NaN),lo(t,e,n,Ot(t,e));var i=[];Or(t,function(t,n){n||-1!=H(i,t.history)||(fo(t.history,e),i.push(t.history)),lo(t,e,null,Ot(t,e))})}}function so(t,e,n){var i=t.cm&&t.cm.state.suppressEdits;if(!i||n){for(var r,o=t.history,s=t.sel,a="undo"==e?o.done:o.undone,l="undo"==e?o.undone:o.done,c=0;c=0;--f){var p=d(f);if(p)return p.v}}}}function ao(t,e){if(0!=e&&(t.first+=e,t.sel=new mr(X(t.sel.ranges,function(t){return new yr(gt(t.anchor.line+e,t.anchor.ch),gt(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Ji(t.cm,t.first,t.first-e,e);for(var n=t.cm.display,i=n.viewFrom;it.lastLine())){if(e.from.lineo&&(e={from:e.from,to:gt(o,at(t,o).text.length),text:[e.text[0]],origin:e.origin}),e.removed=lt(t,e.from,e.to),n||(n=kr(t,e)),t.cm?function(t,e,n){var i=t.doc,r=t.display,o=e.from,s=e.to,a=!1,l=o.line;t.options.lineWrapping||(l=ht(Vt(at(i,o.line))),i.iter(l,s.line+1,function(t){if(t==r.maxLine)return a=!0,!0})),i.sel.contains(e.from,e.to)>-1&&oe(t),Ar(i,e,n,ri(t)),t.options.lineWrapping||(i.iter(l,o.line+e.text.length,function(t){var e=Kt(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,a=!1)}),a&&(t.curOp.updateMaxLine=!0)),function(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontiern;i--){var r=at(t,i).stateAfter;if(r&&(!(r instanceof Ne)||i+r.lookAhead1||!(this.children[0]instanceof go))){var a=[];this.collapse(a),this.children=[new go(a)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var s=r.lines.length%25+25,a=s;a10);t.parent.maybeSpill()}},iterN:function(t,e,n){for(var i=0;i0||0==s&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=P("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Ht(t,e.line,e,n,o)||e.line!=n.line&&Ht(t,n.line,e,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Tt=!0}o.addToHistory&&Ir(t,{from:e,to:n,origin:"markText"},t.sel,NaN);var a,l=e.line,c=t.cm;if(t.iter(l,n.line+1,function(t){c&&o.collapsed&&!c.options.lineWrapping&&Vt(t)==c.display.maxLine&&(a=!0),o.collapsed&&l!=e.line&&ut(t,0),function(t,e){t.markedSpans=t.markedSpans?t.markedSpans.concat([e]):[e],e.marker.attachLine(t)}(t,new Et(o,l==e.line?e.ch:null,l==n.line?n.ch:null)),++l}),o.collapsed&&t.iter(e.line,n.line+1,function(e){Wt(t,e)&&ut(e,0)}),o.clearOnEnter&&te(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(St=!0,(t.history.done.length||t.history.undone.length)&&t.clearHistory()),o.collapsed&&(o.id=++bo,o.atomic=!0),c){if(a&&(c.curOp.updateMaxLine=!0),o.collapsed)Ji(c,e.line,n.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=e.line;u<=n.line;u++)Zi(c,u,"text");o.atomic&&Jr(c.doc),an(c,"markerAdded",c,o)}return o}xo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Hi(t),se(this,"clear")){var n=this.find();n&&an(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;ot.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&Ji(t,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Jr(t.doc)),t&&an(t,"markerCleared",t,this,i,r),e&&Vi(t),this.parent&&this.parent.clear()}},xo.prototype.find=function(t,e){var n,i;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)ro(this,i[l]);a?Kr(this,a):this.cm&&Ti(this.cm)}),undo:Xi(function(){so(this,"undo")}),redo:Xi(function(){so(this,"redo")}),undoSelection:Xi(function(){so(this,"undo",!0)}),redoSelection:Xi(function(){so(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,n=0,i=0;i=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,n){t=Ct(this,t),e=Ct(this,e);var i=[],r=t.line;return this.iter(t.line,e.line+1,function(o){var s=o.markedSpans;if(s)for(var a=0;a=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r}),i},getAllMarks:function(){var t=[];return this.iter(function(e){var n=e.markedSpans;if(n)for(var i=0;it)return e=t,!0;t-=o,++n}),Ct(this,gt(n,e))},indexFromPos:function(t){var e=(t=Ct(this,t)).ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var u=t.dataTransfer.getData("Text");if(u){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Yr(e.doc,xr(n,n)),h)for(var d=0;d=0;e--)co(t.doc,"",i[e].from,i[e].to,"+delete");Ti(t)})}function Ko(t,e,n){var i=ot(t.text,e+n,n);return i<0||i>t.text.length?null:i}function Go(t,e,n){var i=Ko(t,e.ch,n);return null==i?null:new gt(e.line,i,n<0?"after":"before")}function Yo(t,e,n,i,r){if(t){var o=Zt(n,e.doc.direction);if(o){var s,a=r<0?Y(o):o[0],l=r<0==(1==a.level),c=l?"after":"before";if(a.level>0||"rtl"==e.doc.direction){var u=_n(e,n);s=r<0?n.text.length-1:0;var h=Ln(e,u,s).top;s=st(function(t){return Ln(e,u,t).top==h},r<0==(1==a.level)?a.from:a.to-1,s),"before"==c&&(s=Ko(n,s,1))}else s=r<0?a.to:a.from;return new gt(i,s,c)}}return new gt(i,r<0?n.text.length:0,r<0?"before":"after")}jo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},jo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},jo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},jo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},jo.default=y?jo.macDefault:jo.pcDefault;var Xo={selectAll:no,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),B)},killLine:function(t){return qo(t,function(e){if(e.empty()){var n=at(t.doc,e.head.line).text.length;return e.head.ch==n&&e.head.line0)r=new gt(r.line,r.ch+1),t.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),gt(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var s=at(t.doc,r.line-1).text;s&&(r=new gt(r.line,1),t.replaceRange(o.charAt(0)+t.doc.lineSeparator()+s.charAt(s.length-1),gt(r.line-1,s.length-1),r,"+transpose"))}n.push(new yr(r,r))}t.setSelections(n)})},newlineAndIndent:function(t){return Ki(t,function(){for(var e=t.listSelections(),n=e.length-1;n>=0;n--)t.replaceRange(t.doc.lineSeparator(),e[n].anchor,e[n].head,"+input");e=t.listSelections();for(var i=0;i-1&&(vt((r=c.ranges[r]).from(),e)<0||e.xRel>0)&&(vt(r.to(),e)>0||e.xRel<0)?function(t,e,n,i){var r=t.display,o=!1,c=Gi(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,ne(r.wrapper.ownerDocument,"mouseup",c),ne(r.wrapper.ownerDocument,"mousemove",u),ne(r.scroller,"dragstart",h),ne(r.scroller,"drop",c),o||(le(e),i.addNew||Br(t.doc,n,null,null,i.extend),l||s&&9==a?setTimeout(function(){r.wrapper.ownerDocument.body.focus(),r.input.focus()},20):r.input.focus())}),u=function(t){o=o||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},h=function(){return o=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!i.moveOnDrag,r.scroller.dragDrop&&r.scroller.dragDrop(),te(r.wrapper.ownerDocument,"mouseup",c),te(r.wrapper.ownerDocument,"mousemove",u),te(r.scroller,"dragstart",h),te(r.scroller,"drop",c),gi(t),setTimeout(function(){return r.input.focus()},20)}(t,i,e,o):function(t,e,n,i){var r=t.display,o=t.doc;le(e);var s,a,l=o.sel,c=l.ranges;if(i.addNew&&!i.extend?(a=o.sel.contains(n),s=a>-1?c[a]:new yr(n,n)):(s=o.sel.primary(),a=o.sel.primIndex),"rectangle"==i.unit)i.addNew||(s=new yr(n,n)),n=si(t,e,!0,!0),a=-1;else{var u=ds(t,n,i.unit);s=i.extend?$r(s,u.anchor,u.head,i.extend):u}i.addNew?-1==a?(a=c.length,Gr(o,br(c.concat([s]),a),{scroll:!1,origin:"*mouse"})):c.length>1&&c[a].empty()&&"char"==i.unit&&!i.extend?(Gr(o,br(c.slice(0,a).concat(c.slice(a+1)),0),{scroll:!1,origin:"*mouse"}),l=o.sel):Ur(o,a,s,W):(a=0,Gr(o,new mr([s],0),W),l=o.sel);var h=n;function d(e){if(0!=vt(h,e))if(h=e,"rectangle"==i.unit){for(var r=[],c=t.options.tabSize,u=j(at(o,n.line).text,n.ch,c),d=j(at(o,e.line).text,e.ch,c),f=Math.min(u,d),p=Math.max(u,d),g=Math.min(n.line,e.line),v=Math.min(t.lastLine(),Math.max(n.line,e.line));g<=v;g++){var m=at(o,g).text,y=q(m,f,c);f==p?r.push(new yr(gt(g,y),gt(g,y))):m.length>y&&r.push(new yr(gt(g,y),gt(g,q(m,p,c))))}r.length||r.push(new yr(n,n)),Gr(o,br(l.ranges.slice(0,a).concat(r),a),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,w=ds(t,e,i.unit),C=x.anchor;vt(w.anchor,C)>0?(b=w.head,C=xt(x.from(),w.anchor)):(b=w.anchor,C=bt(x.to(),w.head));var k=l.ranges.slice(0);k[a]=function(t,e){var n=e.anchor,i=e.head,r=at(t.doc,n.line);if(0==vt(n,i)&&n.sticky==i.sticky)return e;var o=Zt(r);if(!o)return e;var s=Xt(o,n.ch,n.sticky),a=o[s];if(a.from!=n.ch&&a.to!=n.ch)return e;var l,c=s+(a.from==n.ch==(1!=a.level)?0:1);if(0==c||c==o.length)return e;if(i.line!=n.line)l=(i.line-n.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=Xt(o,i.ch,i.sticky),h=u-s||(i.ch-n.ch)*(1==a.level?-1:1);l=u==c-1||u==c?h<0:h>0}var d=o[c+(l?-1:0)],f=l==(1==d.level),p=f?d.from:d.to,g=f?"after":"before";return n.ch==p&&n.sticky==g?e:new yr(new gt(n.line,p,g),i)}(t,new yr(Ct(o,C),b)),Gr(o,br(k,a),W)}}var f=r.wrapper.getBoundingClientRect(),p=0;function g(e){t.state.selectingText=!1,p=1/0,le(e),r.input.focus(),ne(r.wrapper.ownerDocument,"mousemove",v),ne(r.wrapper.ownerDocument,"mouseup",m),o.history.lastSelOrigin=null}var v=Gi(t,function(e){0!==e.buttons&&fe(e)?function e(n){var s=++p,a=si(t,n,!0,"rectangle"==i.unit);if(a)if(0!=vt(a,h)){t.curOp.focus=L(),d(a);var l=xi(r,o);(a.line>=l.to||a.linef.bottom?20:0;c&&setTimeout(Gi(t,function(){p==s&&(r.scroller.scrollTop+=c,e(n))}),50)}}(e):g(e)}),m=Gi(t,g);t.state.selectingText=m,te(r.wrapper.ownerDocument,"mousemove",v),te(r.wrapper.ownerDocument,"mouseup",m)}(t,i,e,o)}(e,i,o,t):de(t)==n.scroller&&le(t):2==r?(i&&Br(e.doc,i),setTimeout(function(){return n.input.focus()},20)):3==r&&(k?gs(e,t):gi(e)))}}function ds(t,e,n){if("char"==n)return new yr(e,e);if("word"==n)return t.findWordAt(e);if("line"==n)return new yr(gt(e.line,0),Ct(t.doc,gt(e.line+1,0)));var i=n(t,e);return new yr(i.from,i.to)}function fs(t,e,n,i){var r,o;if(e.touches)r=e.touches[0].clientX,o=e.touches[0].clientY;else try{r=e.clientX,o=e.clientY}catch(e){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;i&&le(e);var s=t.display,a=s.lineDiv.getBoundingClientRect();if(o>a.bottom||!se(t,n))return ue(e);o-=a.top-s.viewOffset;for(var l=0;l=r){var u=dt(t.doc,o),h=t.options.gutters[l];return ie(t,n,t,u,h,e),ue(e)}}}function ps(t,e){return fs(t,e,"gutterClick",!0)}function gs(t,e){wn(t.display,e)||function(t,e){return!!se(t,"gutterContextMenu")&&fs(t,e,"gutterContextMenu",!1)}(t,e)||re(t,e,"contextmenu")||t.display.input.onContextMenu(e)}function vs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),zn(t)}us.prototype.compare=function(t,e,n){return this.time+400>t&&0==vt(e,this.pos)&&n==this.button};var ms={toString:function(){return"CodeMirror.Init"}},ys={},bs={};function xs(t){ur(t),Ji(t),wi(t)}function ws(t,e,n){var i=n&&n!=ms;if(!e!=!i){var r=t.display.dragFunctions,o=e?te:ne;o(t.display.scroller,"dragstart",r.start),o(t.display.scroller,"dragenter",r.enter),o(t.display.scroller,"dragover",r.over),o(t.display.scroller,"dragleave",r.leave),o(t.display.scroller,"drop",r.drop)}}function Cs(t){t.options.lineWrapping?(N(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(E(t.display.wrapper,"CodeMirror-wrap"),Gt(t)),oi(t),Ji(t),zn(t),setTimeout(function(){return Ii(t)},100)}function ks(t,e){var i=this;if(!(this instanceof ks))return new ks(t,e);this.options=e=e?R(e):{},R(ys,e,!1),hr(e);var r=e.value;"string"==typeof r&&(r=new Eo(r,e.mode,null,e.lineSeparator,e.direction)),this.doc=r;var o=new ks.inputStyles[e.inputStyle](this),c=this.display=new function(t,e,i){var r=this;this.input=i,r.scrollbarFiller=O("div",null,"CodeMirror-scrollbar-filler"),r.scrollbarFiller.setAttribute("cm-not-content","true"),r.gutterFiller=O("div",null,"CodeMirror-gutter-filler"),r.gutterFiller.setAttribute("cm-not-content","true"),r.lineDiv=P("div",null,"CodeMirror-code"),r.selectionDiv=O("div",null,null,"position: relative; z-index: 1"),r.cursorDiv=O("div",null,"CodeMirror-cursors"),r.measure=O("div",null,"CodeMirror-measure"),r.lineMeasure=O("div",null,"CodeMirror-measure"),r.lineSpace=P("div",[r.measure,r.lineMeasure,r.selectionDiv,r.cursorDiv,r.lineDiv],null,"position: relative; outline: none");var o=P("div",[r.lineSpace],"CodeMirror-lines");r.mover=O("div",[o],null,"position: relative"),r.sizer=O("div",[r.mover],"CodeMirror-sizer"),r.sizerWidth=null,r.heightForcer=O("div",null,null,"position: absolute; height: "+V+"px; width: 1px;"),r.gutters=O("div",null,"CodeMirror-gutters"),r.lineGutter=null,r.scroller=O("div",[r.sizer,r.heightForcer,r.gutters],"CodeMirror-scroll"),r.scroller.setAttribute("tabIndex","-1"),r.wrapper=O("div",[r.scrollbarFiller,r.gutterFiller,r.scroller],"CodeMirror"),s&&a<8&&(r.gutters.style.zIndex=-1,r.scroller.style.paddingRight=0),l||n&&m||(r.scroller.draggable=!0),t&&(t.appendChild?t.appendChild(r.wrapper):t(r.wrapper)),r.viewFrom=r.viewTo=e.first,r.reportedViewFrom=r.reportedViewTo=e.first,r.view=[],r.renderedView=null,r.externalMeasured=null,r.viewOffset=0,r.lastWrapHeight=r.lastWrapWidth=0,r.updateLineNumbers=null,r.nativeBarWidth=r.barHeight=r.barWidth=0,r.scrollbarsClipped=!1,r.lineNumWidth=r.lineNumInnerWidth=r.lineNumChars=null,r.alignWidgets=!1,r.cachedCharWidth=r.cachedTextHeight=r.cachedPaddingH=null,r.maxLine=null,r.maxLineLength=0,r.maxLineChanged=!1,r.wheelDX=r.wheelDY=r.wheelStartX=r.wheelStartY=null,r.shift=!1,r.selForContextMenu=null,r.activeTouch=null,i.init(r)}(t,r,o);for(var u in c.wrapper.CodeMirror=this,ur(this),vs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),ji(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new z,keySeq:null,specialChars:null},e.autofocus&&!m&&c.input.focus(),s&&a<11&&setTimeout(function(){return i.display.input.reset(!0)},20),function(t){var e=t.display;te(e.scroller,"mousedown",Gi(t,hs)),te(e.scroller,"dblclick",s&&a<11?Gi(t,function(e){if(!re(t,e)){var n=si(t,e);if(n&&!ps(t,e)&&!wn(t.display,e)){le(e);var i=t.findWordAt(n);Br(t.doc,i.anchor,i.head)}}}):function(e){return re(t,e)||le(e)}),k||te(e.scroller,"contextmenu",function(e){return gs(t,e)});var n,i={end:0};function r(){e.activeTouch&&(n=setTimeout(function(){return e.activeTouch=null},1e3),(i=e.activeTouch).end=+new Date)}function o(t,e){if(null==e.left)return!0;var n=e.left-t.left,i=e.top-t.top;return n*n+i*i>400}te(e.scroller,"touchstart",function(r){if(!re(t,r)&&!function(t){if(1!=t.touches.length)return!1;var e=t.touches[0];return e.radiusX<=1&&e.radiusY<=1}(r)&&!ps(t,r)){e.input.ensurePolled(),clearTimeout(n);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-i.end<=300?i:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),te(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),te(e.scroller,"touchend",function(n){var i=e.activeTouch;if(i&&!wn(e,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var s,a=t.coordsChar(e.activeTouch,"page");s=!i.prev||o(i,i.prev)?new yr(a,a):!i.prev.prev||o(i,i.prev.prev)?t.findWordAt(a):new yr(gt(a.line,0),Ct(t.doc,gt(a.line+1,0))),t.setSelection(s.anchor,s.head),t.focus(),le(n)}r()}),te(e.scroller,"touchcancel",r),te(e.scroller,"scroll",function(){e.scroller.clientHeight&&(Oi(t,e.scroller.scrollTop),_i(t,e.scroller.scrollLeft,!0),ie(t,"scroll",t))}),te(e.scroller,"mousewheel",function(e){return vr(t,e)}),te(e.scroller,"DOMMouseScroll",function(e){return vr(t,e)}),te(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){re(t,e)||he(e)},over:function(e){re(t,e)||(function(t,e){var n=si(t,e);if(n){var i=document.createDocumentFragment();ui(t,n,i),t.display.dragCursor||(t.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),A(t.display.dragCursor,i)}}(t,e),he(e))},start:function(e){return function(t,e){if(s&&(!t.state.draggingText||+new Date-Mo<100))he(e);else if(!re(t,e)&&!wn(t.display,e)&&(e.dataTransfer.setData("Text",t.getSelection()),e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setDragImage&&!d)){var n=O("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(n.width=n.height=1,t.display.wrapper.appendChild(n),n._top=n.offsetTop),e.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}(t,e)},drop:Gi(t,Ao),leave:function(e){re(t,e)||Oo(t)}};var l=e.input.getField();te(l,"keyup",function(e){return ss.call(t,e)}),te(l,"keydown",Gi(t,os)),te(l,"keypress",Gi(t,as)),te(l,"focus",function(e){return vi(t,e)}),te(l,"blur",function(e){return mi(t,e)})}(this),Lo(),Hi(this),this.curOp.forceUpdate=!0,Pr(this,r),e.autofocus&&!m||this.hasFocus()?setTimeout(F(vi,this),20):mi(this),bs)bs.hasOwnProperty(u)&&bs[u](i,e[u],ms);Ci(this),e.finishInit&&e.finishInit(this);for(var f=0;f150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=e>o.first?j(at(o,e-1).text,null,s):0:"add"==n?c=l+t.options.indentUnit:"subtract"==n?c=l-t.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var h="",d=0;if(t.options.indentWithTabs)for(var f=Math.floor(c/s);f;--f)d+=s,h+="\t";if(d1)if(Es&&Es.text.join("\n")==e){if(i.ranges.length%Es.text.length==0){c=[];for(var u=0;u=0;h--){var d=i.ranges[h],f=d.from(),p=d.to();d.empty()&&(n&&n>0?f=gt(f.line,f.ch-n):t.state.overwrite&&!a?p=gt(p.line,Math.min(at(o,p.line).text.length,p.ch+Y(l).length)):Es&&Es.lineWise&&Es.text.join("\n")==e&&(f=p=gt(f.line,0))),s=t.curOp.updateInput;var g={from:f,to:p,text:c?c[h%c.length]:l,origin:r||(a?"paste":t.state.cutIncoming?"cut":"+input")};ro(t.doc,g),an(t,"inputRead",t,g)}e&&!a&&Ps(t,e),Ti(t),t.curOp.updateInput=s,t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=!1}function Os(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");if(n)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||Ki(e,function(){return As(e,n,0,null,"paste")}),!0}function Ps(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var n=t.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=t.getModeAt(r.head),s=!1;if(o.electricChars){for(var a=0;a-1){s=Ts(t,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(at(t.doc,r.head.line).text.slice(0,r.head.ch))&&(s=Ts(t,r.head.line,"smart"));s&&an(t,"electricInput",t,r.head.line)}}}function _s(t){for(var e=[],n=[],i=0;i=e.text.length?(n.ch=e.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=Xt(r,n.ch,n.sticky),s=r[o];if("ltr"==t.doc.direction&&s.level%2==0&&(i>0?s.to>n.ch:s.from=s.from&&d>=u.begin)){var f=h?"before":"after";return new gt(n.line,d,f)}}var p=function(t,e,i){for(var o=function(t,e){return e?new gt(n.line,l(t,1),"before"):new gt(n.line,t,"after")};t>=0&&t0==(1!=s.level),c=a?i.begin:l(i.end,-1);if(s.from<=c&&c0?u.end:l(u.begin,-1);return null==v||i>0&&v==e.text.length||!(g=p(i>0?0:r.length-1,i,c(v)))?null:g}(t.cm,a,e,n):Go(a,e,n))){if(i||!function(){var i=e.line+n;return!(i=t.first+t.size)&&(e=new gt(i,e.ch,e.sticky),a=at(t,i))}())return!1;e=Yo(r,t.cm,a,e.line,n)}else e=o;return!0}if("char"==i)l();else if("column"==i)l(!0);else if("word"==i||"group"==i)for(var c=null,u="group"==i,h=t.cm&&t.cm.getHelper(e,"wordChars"),d=!0;!(n<0)||l(!d);d=!1){var f=a.text.charAt(e.ch)||"\n",p=et(f,h)?"w":u&&"\n"==f?"n":!u||/\s/.test(f)?null:"p";if(!u||d||p||(p="s"),c&&c!=p){n<0&&(n=1,l(),e.sticky="after");break}if(p&&(c=p),n>0&&!l(!d))break}var g=to(t,e,o,s,!0);return mt(o,g)&&(g.hitSide=!0),g}function Is(t,e,n,i){var r,o,s=t.doc,a=e.left;if("page"==i){var l=Math.min(t.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*ti(t.display),3);r=(n>0?e.bottom:e.top)+n*c}else"line"==i&&(r=n>0?e.bottom+3:e.top-3);for(;(o=Yn(t,a,r)).outside;){if(n<0?r<=0:r>=s.height){o.hitSide=!0;break}r+=5*n}return o}var Fs=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new z,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Rs(t,e){var n=Pn(t,e.line);if(!n||n.hidden)return null;var i=at(t.doc,e.line),r=An(n,i,e.line),o=Zt(i,t.doc.direction),s="left";if(o){var a=Xt(o,e.ch);s=a%2?"right":"left"}var l=In(r.map,e.ch,s);return l.offset="right"==l.collapse?l.end:l.start,l}function js(t,e){return e&&(t.bad=!0),t}function zs(t,e,n){var i;if(e==t.display.lineDiv){if(!(i=t.display.lineDiv.childNodes[n]))return js(t.clipPos(gt(t.display.viewTo-1)),!0);e=null,n=0}else for(i=e;;i=i.parentNode){if(!i||i==t.display.lineDiv)return null;if(i.parentNode&&i.parentNode==t.display.lineDiv)break}for(var r=0;r=e.display.viewTo||o.line=e.display.viewFrom&&Rs(e,r)||{node:l[0].measure.map[2],offset:0},u=o.linei.firstLine()&&(s=gt(s.line-1,at(i.doc,s.line-1).length)),a.ch==at(i.doc,a.line).text.length&&a.liner.viewTo-1)return!1;s.line==r.viewFrom||0==(t=ai(i,s.line))?(e=ht(r.view[0].line),n=r.view[0].node):(e=ht(r.view[t].line),n=r.view[t-1].node.nextSibling);var l,c,u=ai(i,a.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ht(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!n)return!1;for(var h=i.doc.splitLines(function(t,e,n,i,r){var o="",s=!1,a=t.doc.lineSeparator(),l=!1;function c(){s&&(o+=a,l&&(o+=a),s=l=!1)}function u(t){t&&(c(),o+=t)}function h(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)return void u(n);var o,d=e.getAttribute("cm-marker");if(d){var f=t.findMarks(gt(i,0),gt(r+1,0),function(t){return function(e){return e.id==t}}(+d));return void(f.length&&(o=f[0].find(0))&&u(lt(t.doc,o.from,o.to).join(a)))}if("false"==e.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;p&&c();for(var g=0;g1&&d.length>1;)if(Y(h)==Y(d))h.pop(),d.pop(),l--;else{if(h[0]!=d[0])break;h.shift(),d.shift(),e++}for(var f=0,p=0,g=h[0],v=d[0],m=Math.min(g.length,v.length);fs.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)f--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(f).replace(/\u200b+$/,"");var w=gt(e,f),C=gt(l,d.length?Y(d).length-p:0);return h.length>1||h[0]||vt(w,C)?(co(i.doc,h,w,C,"+input"),!0):void 0},Fs.prototype.ensurePolled=function(){this.forceCompositionEnd()},Fs.prototype.reset=function(){this.forceCompositionEnd()},Fs.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Fs.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},Fs.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Ki(this.cm,function(){return Ji(t.cm)})},Fs.prototype.setUneditable=function(t){t.contentEditable="false"},Fs.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Gi(this.cm,As)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},Fs.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},Fs.prototype.onContextMenu=function(){},Fs.prototype.resetPosition=function(){},Fs.prototype.needsContentAttribute=!0;var Vs=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new z,this.hasSelection=!1,this.composing=null};Vs.prototype.init=function(t){var e=this,n=this,i=this.cm;this.createField(t);var r=this.textarea;function o(t){if(!re(i,t)){if(i.somethingSelected())Ms({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var e=_s(i);Ms({lineWise:!0,text:e.text}),"cut"==t.type?i.setSelections(e.ranges,null,B):(n.prevInput="",r.value=e.text.join("\n"),I(r))}"cut"==t.type&&(i.state.cutIncoming=!0)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),te(r,"input",function(){s&&a>=9&&e.hasSelection&&(e.hasSelection=null),n.poll()}),te(r,"paste",function(t){re(i,t)||Os(t,i)||(i.state.pasteIncoming=!0,n.fastPoll())}),te(r,"cut",o),te(r,"copy",o),te(t.scroller,"paste",function(e){wn(t,e)||re(i,e)||(i.state.pasteIncoming=!0,n.focus())}),te(t.lineSpace,"selectstart",function(e){wn(t,e)||le(e)}),te(r,"compositionstart",function(){var t=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:t,range:i.markText(t,i.getCursor("to"),{className:"CodeMirror-composing"})}}),te(r,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},Vs.prototype.createField=function(t){this.wrapper=Ns(),this.textarea=this.wrapper.firstChild},Vs.prototype.prepareSelection=function(){var t=this.cm,e=t.display,n=t.doc,i=ci(t);if(t.options.moveInputWithCursor){var r=qn(t,n.sel.primary().head,"div"),o=e.wrapper.getBoundingClientRect(),s=e.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+s.top-o.top)),i.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+s.left-o.left))}return i},Vs.prototype.showSelection=function(t){var e=this.cm,n=e.display;A(n.cursorDiv,t.cursors),A(n.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},Vs.prototype.reset=function(t){if(!this.contextMenuPending&&!this.composing){var e=this.cm;if(e.somethingSelected()){this.prevInput="";var n=e.getSelection();this.textarea.value=n,e.state.focused&&I(this.textarea),s&&a>=9&&(this.hasSelection=n)}else t||(this.prevInput=this.textarea.value="",s&&a>=9&&(this.hasSelection=null))}},Vs.prototype.getField=function(){return this.textarea},Vs.prototype.supportsTouch=function(){return!1},Vs.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||L()!=this.textarea))try{this.textarea.focus()}catch(t){}},Vs.prototype.blur=function(){this.textarea.blur()},Vs.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Vs.prototype.receivedFocus=function(){this.slowPoll()},Vs.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},Vs.prototype.fastPoll=function(){var t=!1,e=this;e.pollingFast=!0,e.polling.set(20,function n(){var i=e.poll();i||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,n))})},Vs.prototype.poll=function(){var t=this,e=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!e.state.focused||xe(n)&&!i&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=n.value;if(r==i&&!e.somethingSelected())return!1;if(s&&a>=9&&this.hasSelection===r||y&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(i.length,r.length);l1e3||r.indexOf("\n")>-1?n.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Vs.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Vs.prototype.onKeyPress=function(){s&&a>=9&&(this.hasSelection=null),this.fastPoll()},Vs.prototype.onContextMenu=function(t){var e=this,n=e.cm,i=n.display,r=e.textarea,o=si(n,t),c=i.scroller.scrollTop;if(o&&!h){var u=n.options.resetSelectionOnContextMenu;u&&-1==n.doc.sel.contains(o)&&Gi(n,Gr)(n.doc,xr(o),B);var d=r.style.cssText,f=e.wrapper.style.cssText;e.wrapper.style.cssText="position: absolute";var p,g=e.wrapper.getBoundingClientRect();if(r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-g.top-5)+"px; left: "+(t.clientX-g.left-5)+"px;\n z-index: 1000; background: "+(s?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(p=window.scrollY),i.input.focus(),l&&window.scrollTo(null,p),i.input.reset(),n.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=!0,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),s&&a>=9&&m(),k){he(t);var v=function(){ne(window,"mouseup",v),setTimeout(y,20)};te(window,"mouseup",v)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=n.somethingSelected(),o="​"+(t?r.value:"");r.value="⇚",r.value=o,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function y(){if(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=d,s&&a<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=c),null!=r.selectionStart){(!s||s&&a<9)&&m();var t=0,o=function(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Gi(n,no)(n):t++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},Vs.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t},Vs.prototype.setUneditable=function(){},Vs.prototype.needsContentAttribute=!1,function(t){var e=t.optionHandlers;function n(n,i,r,o){t.defaults[n]=i,r&&(e[n]=o?function(t,e,n){n!=ms&&r(t,e,n)}:r)}t.defineOption=n,t.Init=ms,n("value","",function(t,e){return t.setValue(e)},!0),n("mode",null,function(t,e){t.doc.modeOption=e,Tr(t)},!0),n("indentUnit",2,Tr,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(t){Er(t),zn(t),Ji(t)},!0),n("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var n=[],i=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var o=t.text.indexOf(e,r);if(-1==o)break;r=o+e.length,n.push(gt(i,o))}i++});for(var r=n.length-1;r>=0;r--)co(t.doc,e,n[r],gt(n[r].line,n[r].ch+e.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,e,n){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),n!=ms&&t.refresh()}),n("specialCharPlaceholder",Je,function(t){return t.refresh()},!0),n("electricChars",!0),n("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),n("rtlMoveVisually",!x),n("wholeLineUpdateBefore",!0),n("theme","default",function(t){vs(t),xs(t)},!0),n("keyMap","default",function(t,e,n){var i=Uo(e),r=n!=ms&&Uo(n);r&&r.detach&&r.detach(t,i),i.attach&&i.attach(t,r||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Cs,!0),n("gutters",[],function(t){hr(t.options),xs(t)},!0),n("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?ii(t.display)+"px":"0",t.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(t){return Ii(t)},!0),n("scrollbarStyle","native",function(t){ji(t),Ii(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),n("lineNumbers",!1,function(t){hr(t.options),xs(t)},!0),n("firstLineNumber",1,xs,!0),n("lineNumberFormatter",function(t){return t},xs,!0),n("showCursorWhenSelecting",!1,li,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("readOnly",!1,function(t,e){"nocursor"==e&&(mi(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),n("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),n("dragDrop",!0,ws),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,li,!0),n("singleCursorHeightPerLine",!0,li,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Er,!0),n("addModeClass",!1,Er,!0),n("pollInterval",100),n("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),n("historyEventDelay",1250),n("viewportMargin",10,function(t){return t.refresh()},!0),n("maxHighlightLength",1e4,Er,!0),n("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),n("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),n("autofocus",null),n("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0)}(ks),function(t){var e=t.optionHandlers,n=t.helpers={};t.prototype={constructor:t,focus:function(){window.focus(),this.display.input.focus()},setOption:function(t,n){var i=this.options,r=i[t];i[t]==n&&"mode"!=t||(i[t]=n,e.hasOwnProperty(t)&&Gi(this,e[t])(this,n,r),ie(this,"optionChange",this,t))},getOption:function(t){return this.options[t]},getDoc:function(){return this.doc},addKeyMap:function(t,e){this.state.keyMaps[e?"push":"unshift"](Uo(t))},removeKeyMap:function(t){for(var e=this.state.keyMaps,n=0;nn&&(Ts(this,r.head.line,t,!0),n=r.head.line,i==this.doc.sel.primIndex&&Ti(this));else{var o=r.from(),s=r.to(),a=Math.max(n,o.line);n=Math.min(this.lastLine(),s.line-(s.ch?0:1))+1;for(var l=a;l0&&Ur(this.doc,i,new yr(o,c[i].to()),B)}}}),getTokenAt:function(t,e){return $e(this,t,e)},getLineTokens:function(t,e){return $e(this,gt(t),e,!0)},getTokenTypeAt:function(t){t=Ct(this.doc,t);var e,n=Fe(this,at(this.doc,t.line)),i=0,r=(n.length-1)/2,o=t.ch;if(0==o)e=n[2];else for(;;){var s=i+r>>1;if((s?n[2*s-1]:0)>=o)r=s;else{if(!(n[2*s+1]o&&(t=o,r=!0),i=at(this.doc,t)}else i=t;return Bn(this,i,{top:0,left:0},e||"page",n||r).top+(r?this.doc.height-qt(i):0)},defaultTextHeight:function(){return ti(this.display)},defaultCharWidth:function(){return ei(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,n,i,r){var o=this.display,s=(t=qn(this,Ct(this.doc,t))).bottom,a=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),o.sizer.appendChild(e),"over"==i)s=t.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?s=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(s=t.bottom),a+e.offsetWidth>c&&(a=c-e.offsetWidth)}e.style.top=s+"px",e.style.left=e.style.right="","right"==r?(a=o.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?a=0:"middle"==r&&(a=(o.sizer.clientWidth-e.offsetWidth)/2),e.style.left=a+"px"),n&&function(t,e){var n=ki(t,e);null!=n.scrollTop&&Oi(t,n.scrollTop),null!=n.scrollLeft&&_i(t,n.scrollLeft)}(this,{left:a,top:s,right:a+e.offsetWidth,bottom:s+e.offsetHeight})},triggerOnKeyDown:Yi(os),triggerOnKeyPress:Yi(as),triggerOnKeyUp:ss,triggerOnMouseDown:Yi(hs),execCommand:function(t){if(Xo.hasOwnProperty(t))return Xo[t].call(null,this)},triggerElectric:Yi(function(t){Ps(this,t)}),findPosH:function(t,e,n,i){var r=1;e<0&&(r=-1,e=-e);for(var o=Ct(this.doc,t),s=0;s0&&a(n.charAt(i-1));)--i;for(;r.5)&&oi(this),ie(this,"refresh",this)}),swapDoc:Yi(function(t){var e=this.doc;return e.cm=null,Pr(this,t),zn(this),this.display.input.reset(),Ei(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,an(this,"swapDoc",this,e),e}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ae(t),t.registerHelper=function(e,i,r){n.hasOwnProperty(e)||(n[e]=t[e]={_global:[]}),n[e][i]=r},t.registerGlobalHelper=function(e,i,r,o){t.registerHelper(e,i,o),n[e]._global.push({pred:r,val:o})}}(ks);var $s="iter insert remove copy getEditor constructor".split(" ");for(var Bs in Eo.prototype)Eo.prototype.hasOwnProperty(Bs)&&H($s,Bs)<0&&(ks.prototype[Bs]=function(t){return function(){return t.apply(this.doc,arguments)}}(Eo.prototype[Bs]));return ae(Eo),ks.inputStyles={textarea:Vs,contenteditable:Fs},ks.defineMode=function(t){ks.defaults.mode||"null"==t||(ks.defaults.mode=t),function(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),ke[t]=e}.apply(this,arguments)},ks.defineMIME=function(t,e){Se[t]=e},ks.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),ks.defineMIME("text/plain","null"),ks.defineExtension=function(t,e){ks.prototype[t]=e},ks.defineDocExtension=function(t,e){Eo.prototype[t]=e},ks.fromTextArea=function(t,e){if((e=e?R(e):{}).value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var n=L();e.autofocus=n==t||null!=t.getAttribute("autofocus")&&n==document.body}function i(){t.value=a.getValue()}var r;if(t.form&&(te(t.form,"submit",i),!e.leaveSubmitMethodAlone)){var o=t.form;r=o.submit;try{var s=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=s}}catch(t){}}e.finishInit=function(e){e.save=i,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,i(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(ne(t.form,"submit",i),"function"==typeof t.form.submit&&(t.form.submit=r))}},t.style.display="none";var a=ks(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return a},function(t){t.off=ne,t.on=te,t.wheelEventPixels=gr,t.Doc=Eo,t.splitLines=be,t.countColumn=j,t.findColumn=q,t.isWordChar=tt,t.Pass=$,t.signal=ie,t.Line=Ue,t.changeEnd=wr,t.scrollbarModel=Ri,t.Pos=gt,t.cmpPos=vt,t.modes=ke,t.mimeModes=Se,t.resolveMode=Te,t.getMode=Ee,t.modeExtensions=Me,t.extendMode=Ae,t.copyState=Oe,t.startState=_e,t.innerMode=Pe,t.commands=Xo,t.keyMap=jo,t.keyName=Wo,t.isModifierKey=$o,t.lookupKey=Vo,t.normalizeKeyMap=Ho,t.StringStream=Le,t.SharedTextMarker=Co,t.TextMarker=xo,t.LineWidget=mo,t.e_preventDefault=le,t.e_stopPropagation=ce,t.e_stop=he,t.addClass=N,t.contains=_,t.rmClass=E,t.keyNames=Do}(ks),ks.version="5.38.0",ks}()},function(t,e,n){"use strict";var i=o(n(1)),r=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}var s=n(13),a=r.default.$;t.exports=i.default.extend({},s,{init:function(t){i.default.bindAll(this,"startDraw","draw","endDraw","rollback"),this.config=t||{},this.hType=this.config.newFixedH?"height":"min-height",this.allowDraw=1},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(t){var n=e.ctrlKey||e.metaKey,i=e.shiftKey,r=this.editor,s=r.getConfig("multipleSelection"),a=this.em;if(n&&s)r.selectToggle(t);else if(i&&s){a.clearSelection(r.Canvas.getWindow());var l=t.collection,c=l.indexOf(t),u=(r.getSelectedAll(),void 0),h=void 0;if(r.getSelectedAll().forEach(function(t){var e=t.collection,n=e.indexOf(t);e===l&&(nc&&(h=(0,o.isUndefined)(h)?n:Math.min(h,n)))}),!(0,o.isUndefined)(u))for(;u!==c;)r.selectAdd(l.at(u)),u++;if(!(0,o.isUndefined)(h))for(;h!==c;)r.selectAdd(l.at(h)),h--;r.selectAdd(t)}else r.select(t);this.initResize(t)}},updateBadge:function(t,e){var n=c(t),i=this.canvas,r=i.getConfig().customBadgeLabel;this.cacheEl=t;var o=n.data("model");if(o&&o.get("badgable")){var s=this.getBadge(),a=o.getIcon()+o.getName();a=r?r(o):a,s.innerHTML=a;var l=s.style;l.display="block";var u=i.getCanvasView().getPosition();if(u){var h=s?s.offsetHeight:0,d=s?s.offsetWidth:0,f=e.top-h1&&void 0!==arguments[1]?arguments[1]:{},i=n.el,r=n.config,o=n.resizer,a=r.keyHeight,l=r.keyWidth,h=r.currentUnit;g("add",0,n),p=e.get("StyleManager").getModelToStyle(c);var d=getComputedStyle(i),f=p.getStyle(),v=f[l]||d[l],m=f[a]||d[a];o.startDim.w=parseFloat(v),o.startDim.h=parseFloat(m),u=0,h&&(r.unitHeight=(0,s.getUnitFromValue)(m),r.unitWidth=(0,s.getUnitFromValue)(v))},onMove:function(){n.trigger("change:canvasOffset")},onEnd:function(t,e){g("remove",0,e),n.trigger("change:canvasOffset"),u=1},updateTarget:function(t,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(p){var r=i.store,o=i.selectedHandler,s=i.config,a=s.keyHeight,l=s.keyWidth,c=["tc","bc"].indexOf(o)>=0,u=["cl","cr"].indexOf(o)>=0,h=p.getStyle();c||(h[l]=n.w+s.unitWidth),u||(h[a]=n.h+s.unitHeight),p.setStyle(h,{avoidStore:1});e&&e.trigger("update:component:style:"+a+" update:component:style:"+l),r&&p.trigger("change:style",p,h,{})}}},"object"==(void 0===h?"undefined":r(h))&&(f=i({},f,h)),n.runCommand("resize",{el:d,options:f})):n.stopCommand("resize")},updateToolbar:function(t){var e=this.config.em,n=t==e?e.getSelected():t,i=this.canvas.getToolbarEl(),r=i.style;if(n){var o=n.get("toolbar");this.ppfx;if(e.get("Config").showToolbar&&o&&o.length){if(r.opacity="",r.display="",!this.toolbar){i.innerHTML="",this.toolbar=new l(o);var s=new a({collection:this.toolbar,editor:this.editor});i.appendChild(s.render().el)}this.toolbar.reset(o);var c=n.view;c&&this.updateToolbarPos(c.el)}else r.display="none"}else r.opacity=0},updateToolbarPos:function(t,e){var n=this.canvas.getToolbarEl(),i=n.style,r=i.display;i.display="block";var o=this.canvas.getTargetToElementDim(n,t,{elPos:e,event:"toolbarPosUpdate"});if(o){var s=o.left+o.elementWidth-o.targetWidth;i.top=o.top+"px",i.left=(s<0?0:s)+"px",i.display=r}},getCanvasPosition:function(){return this.canvas.getCanvasView().getPosition()},clean:function(){this.selEl&&this.selEl.removeClass(this.hoverClass)},getBadge:function(){return this.canvas.getBadgeEl()},onFrameScroll:function(t){var e=this.cacheEl;if(e){var n=this.getElementPos(e);this.updateBadge(e,n);var i=this.em.getSelected();i&&this.updateToolbarPos(i.view.el)}},updateAttached:function(t){var e=this.em.getSelected();if(e){var n=e.view;this.updateToolbarPos(n.el),this.showFixedElementOffset(n.el)}},getElementPos:function(t,e){return this.canvas.getCanvasView().getElementPos(t)},hideBadge:function(){this.getBadge().style.display="none"},cleanPrevious:function(t){t&&t.set({status:"",state:""})},getContentWindow:function(){return this.frameEl.contentWindow},run:function(t){this.editor=t&&t.get("Editor"),this.enable(),this.onSelect()},stop:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.em;this.stopSelectComponent(),!n.preserveSelected&&i.setSelected(null),this.clean(),this.hideBadge(),this.hideFixedElementOffset(),this.canvas.getToolbarEl().style.display="none",i.off("component:update",this.updateAttached,this),i.off("change:canvasOffset",this.updateAttached,this)}}},function(t,e,n){"use strict";var i=n(1),r=n(0),o=r.$;t.exports=r.View.extend({events:{change:"onChange"},attributes:function(){return this.model.get("attributes")},initialize:function(t){var e=this.model,n=(e.get("name"),e.target);this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=n,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+e.get("type"),this.inputhClass=this.ppfx+"input-holder",e.off("change:value",this.onValueChange),this.listenTo(e,"change:value",this.onValueChange),e.view=this,this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},getValueForTarget:function(){return this.model.get("value")},setInputValue:function(t){this.getInputEl().value=t},onValueChange:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.model;this.target,i.get("name");if(n.fromTarget)this.setInputValue(i.get("value"));else{var r=this.getValueForTarget();i.setTargetValue(r,n)}},renderLabel:function(){var t=this.getLabel();this.$el.html('
    '+t+"
    ")},getLabel:function(){var t=this.model,e=t.get("label")||t.get("name");return e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var t=this.model,e=t.get("placeholder")||t.get("default")||"",n=t.get("type")||"text",i=t.get("min"),r=t.get("max"),s=this.getModelValue(),a=o('');s&&a.prop("value",s),i&&a.prop("min",i),r&&a.prop("max",r),this.$input=a}return this.$input.get(0)},getModelValue:function(){var t=void 0,e=this.model,n=this.target,r=e.get("name");if(e.get("changeProp"))t=n.get(r);else{var o=n.get("attributes");t=e.get("value")||o[r]}return(0,i.isUndefined)(t)?"":t},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var t=this.getInputEl(),e=this.el.querySelector("."+this.inputhClass);e.insertBefore(t,e.childNodes[0])}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})},function(t,e,n){"use strict";var i=n(0).Model.extend({idAttribute:"name",defaults:{name:"",label:"",type:1,active:!0,private:!1,protected:!1},initialize:function(){var t=this.get("name"),e=this.get("label");t?e||this.set("label",t):this.set("name",e),this.set("name",i.escapeName(this.get("name")))},getFullName:function(){var t="";switch(this.get("type")){case 1:t=".";break;case 2:t="#"}return t+this.get("name")}},{TYPE_CLASS:1,TYPE_ID:2,escapeName:function(t){return(""+t).trim().replace(/([^a-z0-9\w-]+)/gi,"-")}});t.exports=i},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var i=r(n(1));r(n(0));function r(t){return t&&t.__esModule?t:{default:t}}var o=n(7);t.exports=i.default.extend({},o,{init:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0},t),this},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.parseValue(t);this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},setValueFromInput:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.setValue(t,e,i({},n,{fromInput:1}))},parseValue:function(t){var e={value:t},n="!important";if((0,r.isString)(t)&&-1!==t.indexOf(n)&&(e.value=t.replace(n,"").trim(),e.important=1),!this.get("functionName"))return e;var i=[],o=""+e.value,s=o.indexOf("(")+1,a=o.lastIndexOf(")");return i.push(s),a>=0&&i.push(a),e.value=String.prototype.substring.apply(o,i),e},getDefaultValue:function(){return this.get("defaults")},getFullValue:function(t){var e=this.get("functionName"),n=(0,r.isUndefined)(t)?this.get("value"):t;return e&&!(0,r.isUndefined)(n)&&(n=e+"("+n+")"),this.get("important")&&(n+=" !important"),n||""}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e/,f=/^\w+$/;function p(t,n){n=n||e;var i=h.test(t)?n.getElementsByClassName(t.slice(1)):f.test(t)?n.getElementsByTagName(t):n.querySelectorAll(t);return i}function g(n){if(!t){var i=(t=e.implementation.createHTMLDocument(null)).createElement("base");i.href=e.location.href,t.head.appendChild(i)}return t.body.innerHTML=n,t.body.childNodes}function v(t){"loading"!==e.readyState?setTimeout(t):e.addEventListener("DOMContentLoaded",t)}function m(t,i){if(!t)return this;if(t.cash&&t!==n)return t;var r,o=t,s=0;if(c(t))o=u.test(t)?e.getElementById(t.slice(1)):d.test(t)?g(t):p(t,i);else if(l(t))return v(t),this;if(!o)return this;if(o.nodeType||o===n)this[0]=o,this.length=1;else for(r=this.length=o.length;s=0&&o.splice(i,1)):(x(o,function(n){t.removeEventListener(e,n)}),o=[]))}function R(t,e){return"&"+encodeURIComponent(t)+"="+encodeURIComponent(e).replace(/%20/g,"+")}function j(t){var e=t.type;if(!e)return null;switch(e.toLowerCase()){case"select-one":return function(t){var e=t.selectedIndex;return e>=0?t.options[e].value:null}(t);case"select-multiple":return function(t){var e=[];return x(t.options,function(t){t.selected&&e.push(t.value)}),e.length?e:null}(t);case"radio":case"checkbox":return t.checked?t.value:null;default:return t.value?t.value:null}}function z(t,e,n){var i=c(e);i||!e.length?x(t,i?function(t){return t.insertAdjacentHTML(n?"afterbegin":"beforeend",e)}:function(t,i){return function(t,e,n){if(n){var i=t.childNodes[0];t.insertBefore(e,i)}else t.appendChild(e)}(t,0===i?e:e.cloneNode(!0),n)}):x(e,function(e){return z(t,e,n)})}y.prefixedProp=D,y.camelCase=N,b.extend({css:function(t,e){if(c(t))return t=D(t),arguments.length>1?this.each(function(n){return n.style[t]=e}):n.getComputedStyle(this[0])[t];for(var i in t)this.css(i,t[i]);return this}}),x(["Width","Height"],function(t){var e=t.toLowerCase();b[e]=function(){return this[0].getBoundingClientRect()[e]},b["inner"+t]=function(){return this[0]["client"+t]},b["outer"+t]=function(e){return this[0]["offset"+t]+(e?I(this,"margin"+("Width"===t?"Left":"Top"))+I(this,"margin"+("Width"===t?"Right":"Bottom")):0)}}),b.extend({off:function(t,e){return this.each(function(n){return F(n,t,e)})},on:function(t,e,n,i){var r;if(!c(t)){for(var o in t)this.on(o,e,t[o]);return this}return l(e)&&(n=e,e=null),"ready"===t?(v(n),this):(e&&(r=n,n=function(t){for(var n=t.target;!w(n,e);){if(n===this)return n=!1;n=n.parentNode}n&&r.call(n,t)}),this.each(function(e){var r=n;i&&(r=function(){n.apply(this,arguments),F(e,t,r)}),function(t,e,n){var i=M(t,"_cashEvents")||E(t,"_cashEvents",{});i[e]=i[e]||[],i[e].push(n),t.addEventListener(e,n)}(e,t,r)}))},one:function(t,e,n){return this.on(t,e,n,!0)},ready:v,trigger:function(t,n){var i=e.createEvent("HTMLEvents");return i.data=n,i.initEvent(t,!0,!1),this.each(function(t){return t.dispatchEvent(i)})}}),b.extend({serialize:function(){var t="";return x(this[0].elements||this,function(e){if(!e.disabled&&"FIELDSET"!==e.tagName){var n=e.name;switch(e.type.toLowerCase()){case"file":case"reset":case"submit":case"button":break;case"select-multiple":var i=j(e);null!==i&&x(i,function(e){t+=R(n,e)});break;default:var r=j(e);null!==r&&(t+=R(n,r))}}}),t.substr(1)},val:function(t){return void 0===t?j(this[0]):this.each(function(e){return e.value=t})}}),b.extend({after:function(t){return y(t).insertAfter(this),this},append:function(t){return z(this,t),this},appendTo:function(t){return z(y(t),this),this},before:function(t){return y(t).insertBefore(this),this},clone:function(){return y(this.map(function(t){return t.cloneNode(!0)}))},empty:function(){return this.html(""),this},html:function(t){if(void 0===t)return this[0].innerHTML;var e=t.nodeType?t[0].outerHTML:t;return this.each(function(t){return t.innerHTML=e})},insertAfter:function(t){var e=this;return y(t).each(function(t,n){var i=t.parentNode,r=t.nextSibling;e.each(function(t){i.insertBefore(0===n?t:t.cloneNode(!0),r)})}),this},insertBefore:function(t){var e=this;return y(t).each(function(t,n){var i=t.parentNode;e.each(function(e){i.insertBefore(0===n?e:e.cloneNode(!0),t)})}),this},prepend:function(t){return z(this,t,!0),this},prependTo:function(t){return z(y(t),this,!0),this},remove:function(){return this.each(function(t){return t.parentNode.removeChild(t)})},text:function(t){return void 0===t?this[0].textContent:this.each(function(e){return e.textContent=t})}});var H=e.documentElement;return b.extend({position:function(){var t=this[0];return{left:t.offsetLeft,top:t.offsetTop}},offset:function(){var t=this[0].getBoundingClientRect();return{top:t.top+n.pageYOffset-H.clientTop,left:t.left+n.pageXOffset-H.clientLeft}},offsetParent:function(){return y(this[0].offsetParent)}}),b.extend({children:function(t){var e=[];return this.each(function(t){s.apply(e,t.children)}),e=k(e),t?e.filter(function(e){return w(e,t)}):e},closest:function(t){return!t||this.length<1?y():this.is(t)?this.filter(t):this.parent().closest(t)},is:function(t){if(!t)return!1;var e=!1,n=C(t);return this.each(function(i){return!(e=n(i,t))}),e},find:function(t){if(!t||t.nodeType)return y(t&&this.has(t).length?t:null);var e=[];return this.each(function(n){s.apply(e,p(t,n))}),k(e)},has:function(t){var e=c(t)?function(e){return 0!==p(t,e).length}:function(e){return e.contains(t)};return this.filter(e)},next:function(){return y(this[0].nextElementSibling)},not:function(t){if(!t)return this;var e=C(t);return this.filter(function(n){return!e(n,t)})},parent:function(){var t=[];return this.each(function(e){e&&e.parentNode&&t.push(e.parentNode)}),k(t)},parents:function(t){var n,i=[];return this.each(function(r){for(n=r;n&&n.parentNode&&n!==e.body.parentNode;)n=n.parentNode,(!t||t&&w(n,t))&&i.push(n)}),k(i)},prev:function(){return y(this[0].previousElementSibling)},siblings:function(){var t=this.parent().children(),e=this[0];return t.filter(function(t){return t!==e})}}),y})?i.call(e,n,e,t):i)||(t.exports=r)},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n&&n.el||"",r=t.Canvas,o=this.dragger,s=n.options||{},a=r.getCanvasView();return s.prefix=t.getConfig().stylePrefix,s.mousePosFetcher=r.getMouseRelativePos,s.posFetcher=a.getElementPos.bind(a),o||(o=t.Utils.Dragger.init(s),this.dragger=o),o.setOptions(s),o.focus(i),s.event&&o.start(s.event),o},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n||{},r=i.el||"",o=t.Canvas,s=this.canvasResizer,a=i.options||{},l=o.getCanvasView();return a.ratioDefault=1,a.appendTo=o.getResizerEl(),a.prefix=t.getConfig().stylePrefix,a.posFetcher=l.getElementPos.bind(l),a.mousePosFetcher=o.getMouseRelativePos,s&&!i.forceNew||(this.canvasResizer=t.Utils.Resizer.init(a),s=this.canvasResizer),s.setOptions(a),s.blur(),s.focus(r),s},stop:function(){var t=this.canvasResizer;t&&t.blur()}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(1));t.exports={getPanels:function(t){return this.panels||(this.panels=t.Panels.getPanelsEl()),this.panels},tglPointers:function(t,e){var n=t.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");i.default.each(n,function(t){t.style.pointerEvents=e?"":"all"})},run:function(t,e){e&&e.set&&e.set("active",!1),t.stopCommand("sw-visibility"),t.getModel().stopDefault();var n=this.getPanels(t),i=t.Canvas.getElement(),r=t.getEl(),o=t.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=o+"off-prv fa fa-eye-slash",r.appendChild(this.helper),this.helper.onclick=function(){t.stopCommand("preview")}),this.helper.style.display="inline-block",this.tglPointers(t),n.style.display="none";var s=i.style;s.width="100%",s.height="100%",s.top="0",s.left="0",s.padding="0",s.margin="0",t.trigger("change:canvasOffset")},stop:function(t,e){var n=this.getPanels(t);t.runCommand("sw-visibility"),t.getModel().runDefault(),n.style.display="block",t.Canvas.getElement().setAttribute("style",""),this.helper&&(this.helper.style.display="none"),t.trigger("change:canvasOffset"),this.tglPointers(t,1)}}},function(t,e,n){"use strict";t.exports={isEnabled:function(){var t=document;return t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement?1:0},enable:function(t){var e="";return t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?(e="webkit",t.webkitRequestFullscreen()):t.mozRequestFullScreen?(e="moz",t.mozRequestFullScreen()):t.msRequestFullscreen?t.msRequestFullscreen():console.warn("Fullscreen not supported"),e},disable:function(){var t=document;t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen()},fsChanged:function(t,e){document;var n=(t||"")+"fullscreenchange";this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(n,this.fsChanged))},run:function(t,e){this.sender=e;var n=this.enable(t.getContainer());this.fsChanged=this.fsChanged.bind(this,n),document.addEventListener(n+"fullscreenchange",this.fsChanged),t&&t.trigger("change:canvasOffset")},stop:function(t,e){e&&e.set&&e.set("active",!1),this.disable(),t&&t.trigger("change:canvasOffset")}}},function(t,e,n){"use strict";t.exports={run:function(t){for(var e=t.getSelected(),n=e&&e.parent();n&&!n.get("selectable");)n=n.parent();n&&t.select(n)}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)).default.$;t.exports={getOffsetMethod:function(t){return"get"+(t||"")+"OffsetViewerEl"},run:function(t,e,n){var r=n||{},o=r.state||"",s=t.getConfig();if(s.showOffsets&&(s.showOffsetsSelected||"Fixed"!=o)){var a=t.Canvas,l=r.el||"",c=r.elPos||a.getElementPos(l),u=window.getComputedStyle(l),h=this.ppfx,d=o+"State",f=a[this.getOffsetMethod(o)]();f.style.display="block";var p=this["marginT"+o],g=this["marginB"+o],v=this["marginL"+o],m=this["marginR"+o],y=this["padT"+o],b=this["padB"+o],x=this["padL"+o],w=this["padR"+o];if(!this[d]){var C=o.toLowerCase(),k=C+"margin-v",S=C+"padding-v",T=i('
    \n '},init:function(){var t=this.em;this.modal=t.get("Modal"),this.am=t.get("AssetManager"),this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},onRender:function(){if(!this.$input){var t=this.model.getDefaultValue();this.$input=o('')}this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.setValue(this.componentValue,0)},setValue:function(t,e){r.prototype.setValue.apply(this,arguments),this.setPreviewView(t&&t!=this.model.getDefaultValue()),this.setPreview(t)},setPreviewView:function(t){var e=this.$previewBox;e&&e[t?"addClass":"removeClass"](this.pfx+"show")},spreadUrl:function(t){this.model.set("value",t),this.setPreviewView(1)},setPreview:function(t){var e=this.$preview;t=t&&t.indexOf("url(")<0?"url("+t+")":t,e&&e.css("background-image",t)},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.model.getDefaultValue());for(var t=arguments.length,e=Array(t),n=0;n\n
    \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return t+"field "+t+"field-color"},holderClass:function(){return this.ppfx+"input-holder"},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.model.get("defaults"),i=(0,o.isUndefined)(t)?(0,o.isUndefined)(n)?"":n:t,r=this.getInputEl(),s=this.getColorEl(),a="none"!=i?i:"";r.value=i,s.get(0).style.backgroundColor=a,e.fromTarget&&(s.spectrum("set",a),this.noneColor="none"==i)},getColorEl:function(){if(!this.colorEl){var t=this,e=this.ppfx,n=this.model,r=c('
    '),o=r.get(0).style,s=this.em&&this.em.config?this.em.config.el:"",a=this.em&&this.em.getConfig&&this.em.getConfig("colorPicker")||{},l=function(t){return(1==t.getAlpha()?t.toHexString():t.toRgbString()).replace(/ /g,"")},u=0,h=void 0;this.$el.find("[data-colorp-c]").append(r),r.spectrum(i({containerClassName:e+"one-bg "+e+"two-color",appendTo:s||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[]},a,{move:function(t){var e=l(t);o.backgroundColor=e,n.setValueFromInput(e,0)},change:function(e){u=1;var i=l(e);o.backgroundColor=i,n.setValueFromInput(i),t.noneColor=0},show:function(t){u=0,h=l(t)},hide:function(e){!u&&h&&(t.noneColor&&(h=""),o.backgroundColor=h,r.spectrum("set",h),n.setValueFromInput(h,0))}})),this.colorEl=r}return this.colorEl},render:function(){return l.prototype.render.call(this),this.getColorEl(),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{};e=i({},e,{silent:1}),this.inputInst.setValue(t,e)},onRender:function(){if(!this.input){var t=this.ppfx,e=new r({target:this.target,model:this.model,ppfx:t}).render();this.el.querySelector("."+t+"fields").appendChild(e.el),this.$input=e.inputEl,this.$color=e.colorEl,this.input=this.$input.get(0),this.inputInst=e}}})},function(t,e,n){"use strict";var i=o(n(0)),r=o(n(5));function o(t){return t&&t.__esModule?t:{default:t}}i.default.$;t.exports=r.default.extend({templateInput:function(){var t=this.pfx,e=this.ppfx;return'\n
    \n \n
    \n
    \n
    \n
    \n '},initialize:function(){for(var t=arguments.length,e=Array(t),n=0;n"+e+""});var i=this.el.querySelector("#"+t+"input-holder");i.innerHTML="",this.input=i.firstChild}}})},function(t,e,n){"use strict";t.exports=n(5).extend({templateInput:function(){this.pfx;var t=this.ppfx;return'\n
    \n
    \n '},onRender:function(){var t=this.pfx,e=this.ppfx,n=e+"radio-item-label",i=this.model,r=i.get("property"),o=i.get("list")||i.get("options")||[];if(!this.input&&o&&o.length){var s="";o.forEach(function(i){var o=i.className?i.className+" "+t+"icon "+n:"",a=r+"-"+i.value,l=i.name||i.value,c=i.title?'title="'+i.title+'"':"";s+='\n
    \n \n \n
    \n "});var a=this.el.querySelector("."+e+"field");a.innerHTML='
    '+s+"
    ",this.input=a.firstChild}},getInputValue:function(){var t=this.getCheckedEl();return t?t.value:""},getCheckedEl:function(){var t=this.getInputEl();return t?t.querySelector("input:checked"):""},setValue:function(t){var e=this.model,n=t||e.get("value")||e.getDefaultValue(),i=this.getInputEl(),r=i?i.querySelector('[value="'+n+'"]'):"";if(r)r.checked=!0;else{var o=this.getCheckedEl();o&&(o.checked=!1)}}})},function(t,e,n){"use strict";var i=n(0),r=i.$;t.exports=i.View.extend({events:{change:"handleChange"},template:function(){return''},inputClass:function(){return this.ppfx+"field"},holderClass:function(){return this.ppfx+"input-holder"},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.ppfx||"";this.opts=t,this.ppfx=e,this.em=t.target||{},this.listenTo(this.model,"change:value",this.handleModelChange)},elementUpdated:function(){this.model.trigger("el:change")},setValue:function(t){var e=this.model,n=t||e.get("defaults"),i=this.getInputEl();i&&(i.value=n)},handleModelChange:function(t,e,n){this.setValue(e,n)},handleChange:function(t){t.stopPropagation();var e=this.getInputEl().value;this.model.set({value:e},{fromInput:1}),this.elementUpdated()},getInputEl:function(){if(!this.inputEl){var t=this.model.get("defaults")||"";this.inputEl=r('')}return this.inputEl.get(0)},render:function(){var t=this.$el;return t.addClass(this.inputClass()),t.html(this.template()),t.find("."+this.holderClass()).append(this.getInputEl()),this}})},function(t,e,n){"use strict";var i=n(43),r=n(168);t.exports=i.extend({templateInput:function(){var t=this.pfx;this.ppfx;return'\n
    \n \n
    \n
    \n '},init:function(){var t=this.model;this.pfx;t.set("stackIndex",null),this.events["click [data-add-layer]"]="addLayer",this.listenTo(t,"change:stackIndex",this.indexChanged),this.listenTo(t,"updateValue",this.inputValueChanged),this.delegateEvents()},clear:function(t){t&&t.stopPropagation(),this.model.get("layers").reset(),this.model.clearValue(),this.targetUpdated()},targetUpdated:function(){if(this.model.get("detached"))this.checkVisibility();else{for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]&&arguments[0];return this.get("properties").each(function(t){return t.clearValue()}),r.prototype.clearValue.apply(this,arguments)},updateValues:function(){var t=this.getFullValue().split(this.get("separator"));this.get("properties").each(function(e,n){var i=t.length;t[n]||t[n%i+(1!=i&&i%2?1:0)]})},getDefaultValue:function(t){var e=this.get("defaults");return e&&!t?e:(e="",this.get("properties").each(function(t,n){return e+=t.getDefaultValue()+" "}),e.trim())},getFullValue:function(){return this.get("detached")?"":this.get("properties").getFullValue()}})},function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=t.Model,i=t.View;e.default={types:[],initialize:function(t,e){var n=this;this.model=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,r=void 0,o=void 0;if(t&&t.type){var s=n.getBaseType();i=(o=n.getType(t.type))?o.model:s.model,r=o?o.view:s.view}else{var a=n.recognizeType(t);i=(o=a.type).model,r=o.view,t=a.attributes}var l=new i(t,e);return l.typeView=r,l};var i=this.init&&this.init.bind(this);i&&i()},recognizeType:function(t){for(var e=this.getTypes(),n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.model,r=void 0===n?{}:n,s=e.view,a=void 0===s?{}:s,l=this.getType(t);if(l)return new l.view(i({model:new l.model(r),config:o},a))},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0;r--)n.context=n.context.prev;return M(t,e,n)}function O(t){var e=t.current().toLowerCase();o=m.hasOwnProperty(e)?"atom":v.hasOwnProperty(e)?"keyword":"variable"}var P={top:function(t,e,n){if("{"==t)return T(n,e,"block");if("}"==t&&n.context.prev)return E(n);if(x&&/@component/i.test(t))return T(n,e,"atComponentBlock");if(/^@(-moz-)?document$/i.test(t))return T(n,e,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(t))return T(n,e,"atBlock");if(/^@(font-face|counter-style)/i.test(t))return n.stateArg=t,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(t))return"keyframes";if(t&&"@"==t.charAt(0))return T(n,e,"at");if("hash"==t)o="builtin";else if("word"==t)o="tag";else{if("variable-definition"==t)return"maybeprop";if("interpolation"==t)return T(n,e,"interpolation");if(":"==t)return"pseudo";if(y&&"("==t)return T(n,e,"parens")}return n.context.type},block:function(t,e,n){if("word"==t){var i=e.current().toLowerCase();return d.hasOwnProperty(i)?(o="property","maybeprop"):f.hasOwnProperty(i)?(o="string-2","maybeprop"):y?(o=e.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(o+=" error","maybeprop")}return"meta"==t?"block":y||"hash"!=t&&"qualifier"!=t?P.top(t,e,n):(o="error","block")},maybeprop:function(t,e,n){return":"==t?T(n,e,"prop"):M(t,e,n)},prop:function(t,e,n){if(";"==t)return E(n);if("{"==t&&y)return T(n,e,"propBlock");if("}"==t||"{"==t)return A(t,e,n);if("("==t)return T(n,e,"parens");if("hash"!=t||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(e.current())){if("word"==t)O(e);else if("interpolation"==t)return T(n,e,"interpolation")}else o+=" error";return"prop"},propBlock:function(t,e,n){return"}"==t?E(n):"word"==t?(o="property","maybeprop"):n.context.type},parens:function(t,e,n){return"{"==t||"}"==t?A(t,e,n):")"==t?E(n):"("==t?T(n,e,"parens"):"interpolation"==t?T(n,e,"interpolation"):("word"==t&&O(e),"parens")},pseudo:function(t,e,n){return"meta"==t?"pseudo":"word"==t?(o="variable-3",n.context.type):M(t,e,n)},documentTypes:function(t,e,n){return"word"==t&&l.hasOwnProperty(e.current())?(o="tag",n.context.type):P.atBlock(t,e,n)},atBlock:function(t,e,n){if("("==t)return T(n,e,"atBlock_parens");if("}"==t||";"==t)return A(t,e,n);if("{"==t)return E(n)&&T(n,e,y?"block":"top");if("interpolation"==t)return T(n,e,"interpolation");if("word"==t){var i=e.current().toLowerCase();o="only"==i||"not"==i||"and"==i||"or"==i?"keyword":c.hasOwnProperty(i)?"attribute":u.hasOwnProperty(i)?"property":h.hasOwnProperty(i)?"keyword":d.hasOwnProperty(i)?"property":f.hasOwnProperty(i)?"string-2":m.hasOwnProperty(i)?"atom":v.hasOwnProperty(i)?"keyword":"error"}return n.context.type},atComponentBlock:function(t,e,n){return"}"==t?A(t,e,n):"{"==t?E(n)&&T(n,e,y?"block":"top",!1):("word"==t&&(o="error"),n.context.type)},atBlock_parens:function(t,e,n){return")"==t?E(n):"{"==t||"}"==t?A(t,e,n,2):P.atBlock(t,e,n)},restricted_atBlock_before:function(t,e,n){return"{"==t?T(n,e,"restricted_atBlock"):"word"==t&&"@counter-style"==n.stateArg?(o="variable","restricted_atBlock_before"):M(t,e,n)},restricted_atBlock:function(t,e,n){return"}"==t?(n.stateArg=null,E(n)):"word"==t?(o="@font-face"==n.stateArg&&!p.hasOwnProperty(e.current().toLowerCase())||"@counter-style"==n.stateArg&&!g.hasOwnProperty(e.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(t,e,n){return"word"==t?(o="variable","keyframes"):"{"==t?T(n,e,"top"):M(t,e,n)},at:function(t,e,n){return";"==t?E(n):"{"==t||"}"==t?A(t,e,n):("word"==t?o="tag":"hash"==t&&(o="builtin"),"at")},interpolation:function(t,e,n){return"}"==t?E(n):"{"==t||";"==t?A(t,e,n):("word"==t?o="variable":"variable"!=t&&"("!=t&&")"!=t&&(o="error"),"interpolation")}};return{startState:function(t){return{tokenize:null,state:i?"block":"top",stateArg:null,context:new S(i?"block":"top",t||0,null)}},token:function(t,e){if(!e.tokenize&&t.eatSpace())return null;var n=(e.tokenize||function(t,e){var n=t.next();if(a[n]){var i=a[n](t,e);if(!1!==i)return i}return"@"==n?(t.eatWhile(/[\w\\\-]/),w("def",t.current())):"="==n||("~"==n||"|"==n)&&t.eat("=")?w(null,"compare"):'"'==n||"'"==n?(e.tokenize=C(n),e.tokenize(t,e)):"#"==n?(t.eatWhile(/[\w\\\-]/),w("atom","hash")):"!"==n?(t.match(/^\s*\w*/),w("keyword","important")):/\d/.test(n)||"."==n&&t.eat(/\d/)?(t.eatWhile(/[\w.%]/),w("number","unit")):"-"!==n?/[,+>*\/]/.test(n)?w(null,"select-op"):"."==n&&t.match(/^-?[_a-z][_a-z0-9-]*/i)?w("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?w(null,n):("u"==n||"U"==n)&&t.match(/rl(-prefix)?\(/i)||("d"==n||"D"==n)&&t.match("omain(",!0,!0)||("r"==n||"R"==n)&&t.match("egexp(",!0,!0)?(t.backUp(1),e.tokenize=k,w("property","word")):/[\w\\\-]/.test(n)?(t.eatWhile(/[\w\\\-]/),w("property","word")):w(null,null):/[\d.]/.test(t.peek())?(t.eatWhile(/[\w.%]/),w("number","unit")):t.match(/^-[\w\\\-]+/)?(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?w("variable-2","variable-definition"):w("variable-2","variable")):t.match(/^\w+-/)?w("meta","meta"):void 0})(t,e);return n&&"object"==typeof n&&(r=n[1],n=n[0]),o=n,"comment"!=r&&(e.state=P[e.state](r,t,e)),o},indent:function(t,e){var n=t.context,i=e&&e.charAt(0),r=n.indent;return"prop"!=n.type||"}"!=i&&")"!=i||(n=n.prev),n.prev&&("}"!=i||"block"!=n.type&&"top"!=n.type&&"interpolation"!=n.type&&"restricted_atBlock"!=n.type?(")"!=i||"parens"!=n.type&&"atBlock_parens"!=n.type)&&("{"!=i||"at"!=n.type&&"atBlock"!=n.type)||(r=Math.max(0,n.indent-s)):(n=n.prev,r=n.indent)),r},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:b,fold:"brace"}});var n=["domain","regexp","url","url-prefix"],i=e(n),r=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],o=e(r),s=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],a=e(s),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],c=e(l),u=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],h=e(u),d=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],f=e(d),p=e(["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),g=e(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),v=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],m=e(v),y=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],b=e(y),x=n.concat(r).concat(s).concat(l).concat(u).concat(d).concat(v).concat(y);function w(t,e){for(var n,i=!1;null!=(n=t.next());){if(i&&"/"==n){e.tokenize=null;break}i="*"==n}return["comment","comment"]}t.registerHelper("hintWords","css",x),t.defineMIME("text/css",{documentTypes:i,mediaTypes:o,mediaFeatures:a,mediaValueKeywords:c,propertyKeywords:h,nonStandardPropertyKeywords:f,fontProperties:p,counterDescriptors:g,colorKeywords:m,valueKeywords:b,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=w,w(t,e))}},name:"css"}),t.defineMIME("text/x-scss",{mediaTypes:o,mediaFeatures:a,mediaValueKeywords:c,propertyKeywords:h,nonStandardPropertyKeywords:f,colorKeywords:m,valueKeywords:b,fontProperties:p,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=w,w(t,e)):["operator","operator"]},":":function(t){return!!t.match(/\s*\{/,!1)&&[null,null]},$:function(t){return t.match(/^[\w-]+/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(t){return!!t.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),t.defineMIME("text/x-less",{mediaTypes:o,mediaFeatures:a,mediaValueKeywords:c,propertyKeywords:h,nonStandardPropertyKeywords:f,colorKeywords:m,valueKeywords:b,fontProperties:p,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=w,w(t,e)):["operator","operator"]},"@":function(t){return t.eat("{")?[null,"interpolation"]:!t.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),t.defineMIME("text/x-gss",{documentTypes:i,mediaTypes:o,mediaFeatures:a,propertyKeywords:h,nonStandardPropertyKeywords:f,fontProperties:p,counterDescriptors:g,colorKeywords:m,valueKeywords:b,supportsAtComponent:!0,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=w,w(t,e))}},name:"css",helperType:"gss"})}(n(6))},function(t,e,n){"use strict";t.exports=function(t){var e=t;return{compTypes:"",parseStyle:function(t){for(var e={},n=t.split(";"),i=0,r=n.length;i=0&&e<=k};function E(t){return function(e,n,i,r){n=y(n,r,4);var o=!T(e)&&m.keys(e),s=(o||e).length,a=t>0?0:s-1;return arguments.length<3&&(i=e[o?o[a]:a],a+=t),function(e,n,i,r,o,s){for(;o>=0&&o=0},m.invoke=function(t,e){var n=c.call(arguments,2),i=m.isFunction(e);return m.map(t,function(t){var r=i?e:t[e];return null==r?r:r.apply(t,n)})},m.pluck=function(t,e){return m.map(t,m.property(e))},m.where=function(t,e){return m.filter(t,m.matcher(e))},m.findWhere=function(t,e){return m.find(t,m.matcher(e))},m.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e&&null!=t)for(var a=0,l=(t=T(t)?t:m.values(t)).length;ao&&(o=i);else e=b(e,n),m.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},m.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e&&null!=t)for(var a=0,l=(t=T(t)?t:m.values(t)).length;ai||void 0===n)return 1;if(n0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return i[o=n(i,r)]===r?o:-1;if(r!=r)return(o=e(c.call(i,s,a),m.isNaN))>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&oe?(s&&(clearTimeout(s),s=null),a=c,o=t.apply(i,r),s||(i=r=null)):s||!1===n.trailing||(s=setTimeout(l,u)),o}},m.debounce=function(t,e,n){var i,r,o,s,a,l=function(){var c=m.now()-s;c=0?i=setTimeout(l,e-c):(i=null,n||(a=t.apply(o,r),i||(o=r=null)))};return function(){o=this,r=arguments,s=m.now();var c=n&&!i;return i||(i=setTimeout(l,e)),c&&(a=t.apply(o,r),o=r=null),a}},m.wrap=function(t,e){return m.partial(e,t)},m.negate=function(t){return function(){return!t.apply(this,arguments)}},m.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},m.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},m.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},m.once=m.partial(m.before,2);var L=!{toString:null}.propertyIsEnumerable("toString"),N=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function D(t,e){var n=N.length,i=t.constructor,r=m.isFunction(i)&&i.prototype||s,o="constructor";for(m.has(t,o)&&!m.contains(e,o)&&e.push(o);n--;)(o=N[n])in t&&t[o]!==r[o]&&!m.contains(e,o)&&e.push(o)}m.keys=function(t){if(!m.isObject(t))return[];if(f)return f(t);var e=[];for(var n in t)m.has(t,n)&&e.push(n);return L&&D(t,e),e},m.allKeys=function(t){if(!m.isObject(t))return[];var e=[];for(var n in t)e.push(n);return L&&D(t,e),e},m.values=function(t){for(var e=m.keys(t),n=e.length,i=Array(n),r=0;r":">",'"':""","'":"'","`":"`"},R=m.invert(F),j=function(t){var e=function(e){return t[e]},n="(?:"+m.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};m.escape=j(F),m.unescape=j(R),m.result=function(t,e,n){var i=null==t?void 0:t[e];return void 0===i&&(i=n),m.isFunction(i)?i.call(t):i};var z=0;m.uniqueId=function(t){var e=++z+"";return t?t+e:e},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var H=/(.)^/,V={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},$=/\\|'|\r|\n|\u2028|\u2029/g,B=function(t){return"\\"+V[t]};m.template=function(t,e,n){!e&&n&&(e=n),e=m.defaults({},e,m.templateSettings);var i=RegExp([(e.escape||H).source,(e.interpolate||H).source,(e.evaluate||H).source].join("|")+"|$","g"),r=0,o="__p+='";t.replace(i,function(e,n,i,s,a){return o+=t.slice(r,a).replace($,B),r=a+e.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(o+="';\n"+s+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var s=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var a=function(t){return s.call(this,t,m)},l=e.variable||"obj";return a.source="function("+l+"){\n"+o+"}",a},m.chain=function(t){var e=m(t);return e._chain=!0,e};var W=function(t,e){return t._chain?m(e).chain():e};m.mixin=function(t){m.each(m.functions(t),function(e){var n=m[e]=t[e];m.prototype[e]=function(){var t=[this._wrapped];return l.apply(t,arguments),W(this,n.apply(m,t))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=o[t];m.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],W(this,n)}}),m.each(["concat","join","slice"],function(t){var e=o[t];m.prototype[t]=function(){return W(this,e.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},void 0===(i=function(){return m}.apply(e,[]))||(t.exports=i)}).call(this)},function(t,e,n){!function(e){var n,i={},r={16:!1,18:!1,17:!1,91:!1},o="all",s={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,command:91},a={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,home:36,end:35,pageup:33,pagedown:34,",":188,".":190,"/":191,"`":192,"-":189,"=":187,";":186,"'":222,"[":219,"]":221,"\\":220},l=function(t){return a[t]||t.toUpperCase().charCodeAt(0)},c=[];for(n=1;n<20;n++)a["f"+n]=111+n;function u(t,e){for(var n=t.length;n--;)if(t[n]===e)return n;return-1}function h(t,e){if(t.length!=e.length)return!1;for(var n=0;n1&&(o=m(t),t=[t[t.length-1]]),t=t[0],(t=l(t))in i||(i[t]=[]),i[t].push({shortcut:r[s],scope:e,method:n,key:r[s],mods:o})}for(n in s)p[n]=!1;function g(){return o||"all"}function v(t){var e;return""==(e=(t=t.replace(/\s/g,"")).split(","))[e.length-1]&&(e[e.length-2]+=","),e}function m(t){for(var e=t.slice(0,t.length-1),n=0;n0,r)(!r[o]&&u(n.mods,+o)>-1||r[o]&&-1==u(n.mods,+o))&&(l=!1);(0!=n.mods.length||r[16]||r[18]||r[17]||r[91])&&!l||!1===n.method(t,n)&&(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.cancelBubble&&(t.cancelBubble=!0))}}(t)}),y(document,"keyup",function(t){var e,n=t.keyCode,i=u(c,n);if(i>=0&&c.splice(i,1),93!=n&&224!=n||(n=91),n in r)for(e in r[n]=!1,s)s[e]==n&&(p[e]=!1)}),y(window,"focus",function(){for(n in r)r[n]=!1;for(n in s)p[n]=!1});var b=e.key;e.key=p,e.key.setScope=function(t){o=t||"all"},e.key.getScope=g,e.key.deleteScope=function(t){var e,n,r;for(e in i)for(n=i[e],r=0;r1&&(c=m(r),t=r[r.length-1]),t=l(t),void 0===e&&(e=g()),!i[t])return;for(o=0;o\n \n <%= label %>\n \n
    \n '),events:{},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.config=t;var e=this.config.pStylePrefix||"";this.pfx=e,this.caretR="fa fa-caret-right",this.caretD="fa fa-caret-down",this.iconClass=e+"caret-icon",this.activeClass=e+"open",this.className=e+"block-category",this.events["click ."+e+"title"]="toggle",this.listenTo(this.model,"change:open",this.updateVisibility),this.delegateEvents()},updateVisibility:function(){this.model.get("open")?this.open():this.close()},open:function(){this.el.className=this.className+" "+this.activeClass,this.getIconEl().className=this.iconClass+" "+this.caretD,this.getBlocksEl().style.display=""},close:function(){this.el.className=this.className,this.getIconEl().className=this.iconClass+" "+this.caretR,this.getBlocksEl().style.display="none"},toggle:function(){var t=this.model;t.set("open",!t.get("open"))},getIconEl:function(){return this.iconEl||(this.iconEl=this.el.querySelector("."+this.iconClass)),this.iconEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.pfx+"blocks-c")),this.blocksEl},append:function(t){this.getBlocksEl().appendChild(t)},render:function(){return this.el.innerHTML=this.template({pfx:this.pfx,label:this.model.get("label")}),this.el.className=this.className,this.$el.css({order:this.model.get("order")}),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1),o=n(2);t.exports=i.default.View.extend({events:{mousedown:"startDrag",dragstart:"handleDragStart",drag:"handleDrag",dragend:"handleDragEnd"},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em,this.config=e,this.endDrag=this.endDrag.bind(this),this.ppfx=e.pStylePrefix||"",this.listenTo(this.model,"destroy remove",this.remove)},startDrag:function(t){var e=this.config;if(0===t.button&&e.getSorter&&!this.el.draggable){e.em.refreshCanvas();var n=e.getSorter();n.setDragHelper(this.el,t),n.setDropContent(this.model.get("content")),n.startSort(this.el),(0,o.on)(document,"mouseup",this.endDrag)}},handleDragStart:function(t){var e=this.em,n=this.model,i=n.get("content"),o=(0,r.isObject)(i),s=o?JSON.stringify(i):i;t.dataTransfer.setData("text",s),e.set("dragContent",i),e.trigger("block:drag:start",n,t)},handleDrag:function(t){this.em.trigger("block:drag",this.model,t)},handleDragEnd:function(){var t=this.em,e=this.model,n=t.get("dragResult");if(n){var i=n.get&&n.get("activeOnRender");(e.get("activate")||i)&&(n.trigger("active"),n.set("activeOnRender",0)),e.get("select")&&t.setSelected(n),e.get("resetId")&&n.onAll(function(t){return t.resetId()})}t.set({dragResult:null,dragContent:null}),t.trigger("block:drag:stop",n,e)},endDrag:function(t){(0,o.off)(document,"mouseup",this.endDrag);var e=this.config.getSorter();e.moved=0,e.endMove()},render:function(){var t=this.el,e=this.ppfx,n=e+"block",i=this.model.get("label");return t.className+=" "+n+" "+e+"one-bg "+e+"four-color-h",t.innerHTML='
    '+i+"
    ",t.title=t.textContent.trim(),(0,o.hasDnd)(this.em)&&t.setAttribute("draggable",!0),this}})},function(t,e,n){"use strict";var i=n(1),r=n(92),o=n(91);t.exports=n(0).View.extend({initialize:function(t,e){(0,i.bindAll)(this,"getSorter","onDrag","onDrop"),this.config=e||{},this.categories=t.categories||"",this.renderedCategories=[];var n=this.config.pStylePrefix||"";this.ppfx=n,this.noCatClass=n+"blocks-no-cat",this.blockContClass=n+"blocks-c",this.catsClass=n+"block-categories";var r=this.collection;this.listenTo(r,"add",this.addTo),this.listenTo(r,"reset",this.render),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var t=this.em.get("Utils"),e=this.canvas;this.sorter=new t.Sorter({container:e.getBody(),placer:e.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,onMove:this.onMove,document:e.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em,canvasRelative:1})}return this.sorter}},onDrag:function(t){this.em.stopDefault(),this.em.trigger("block:drag:start",t)},onMove:function(t){this.em.trigger("block:drag:move",t)},onDrop:function(t){var e=this.em;e.runDefault(),t&&t.get&&(t.get("activeOnRender")&&(t.trigger("active"),t.set("activeOnRender",0)),e.trigger("block:drag:stop",t))},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,s=new r({model:t,attributes:t.get("attributes")},this.config).render().el,a=t.get("category");if(a&&this.categories){(0,i.isString)(a)?a={id:a,label:a}:(0,i.isObject)(a)&&!a.id&&(a.id=a.label);var l=this.categories.add(a),c=l.get("id"),u=this.renderedCategories[c],h=this.getCategoriesEl();return t.set("category",l),!u&&h&&(u=new o({model:l},this.config).render(),this.renderedCategories[c]=u,h.appendChild(u.el)),void(u&&u.append(s))}n?n.appendChild(s):this.append(s)},getCategoriesEl:function(){return this.catsEl||(this.catsEl=this.el.querySelector("."+this.catsClass)),this.catsEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.noCatClass+" ."+this.blockContClass)),this.blocksEl},append:function(t){var e=this.getBlocksEl();e&&e.appendChild(t)},render:function(){var t=this,e=this.ppfx,n=document.createDocumentFragment();this.catsEl=null,this.blocksEl=null,this.renderedCategories=[],this.el.innerHTML='\n
    \n
    \n
    \n
    \n ',this.collection.each(function(e){return t.add(e,n)}),this.append(n);var i=this.blockContClass+"s "+e+"one-bg "+e+"two-color";return this.$el.addClass(i),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Collection.extend({model:n(44)})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(44);t.exports=i.default.Model.extend({defaults:{activate:0,select:0,resetId:0,label:"",content:"",category:"",attributes:{}},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];var t=this.get("category");if(t&&"string"==typeof t)new r({id:t,label:t})}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(95);t.exports=i.default.Collection.extend({model:r})},function(t,e,n){"use strict";t.exports={appendTo:"",blocks:[]}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t,e,r,o={},s=n(97),a=n(96),l=n(94),c=n(93),u=[];return{name:"BlockManager",init:function(n){var i=(o=n||{}).em;for(var h in s)h in o||(o[h]=s[h]);return t=new a([]),e=new a([]),u=new l,r=new c({collection:e,categories:u},o),t.listenTo(t,"add",function(t){e.add(t),i&&i.trigger("block:add",t)}),t.listenTo(t,"remove",function(t){e.remove(t),i&&i.trigger("block:remove",t)}),t.listenTo(t,"reset",function(t){e.reset(t.models)}),this},getConfig:function(){return o},onLoad:function(){var t=this.getAll();!t.length&&t.reset(o.blocks)},postRender:function(){var t=this.getConfig().appendTo;t&&((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())},add:function(e,n){var i=n||{};return i.id=e,t.add(i)},get:function(e){return t.get(e)},getAll:function(){return t},getAllVisible:function(){return e},remove:function(e){return t.remove(e)},getCategories:function(){return u},getContainer:function(){return r.el},render:function(t){var e=t||this.getAll().models;return r.rendered||(r.render(),r.rendered=1),r.collection.reset(e),this.getContainer()}}}},function(t,e,n){var i={"./CanvasClear":52,"./CanvasClear.js":52,"./CommandAbstract":38,"./CommandAbstract.js":38,"./ComponentDelete":51,"./ComponentDelete.js":51,"./ComponentEnter":50,"./ComponentEnter.js":50,"./ComponentExit":49,"./ComponentExit.js":49,"./ComponentNext":48,"./ComponentNext.js":48,"./ComponentPrev":47,"./ComponentPrev.js":47,"./CopyComponent":46,"./CopyComponent.js":46,"./CreateComponent":7,"./CreateComponent.js":7,"./DeleteComponent":36,"./DeleteComponent.js":36,"./Drag":21,"./Drag.js":21,"./ExportTemplate":37,"./ExportTemplate.js":37,"./Fullscreen":24,"./Fullscreen.js":24,"./ImageComponent":35,"./ImageComponent.js":35,"./InsertCustom":12,"./InsertCustom.js":12,"./MoveComponent":34,"./MoveComponent.js":34,"./OpenAssets":27,"./OpenAssets.js":27,"./OpenBlocks":28,"./OpenBlocks.js":28,"./OpenLayers":31,"./OpenLayers.js":31,"./OpenStyleManager":30,"./OpenStyleManager.js":30,"./OpenTraitManager":29,"./OpenTraitManager.js":29,"./PasteComponent":45,"./PasteComponent.js":45,"./Preview":23,"./Preview.js":23,"./Resize":22,"./Resize.js":22,"./SelectComponent":8,"./SelectComponent.js":8,"./SelectParent":25,"./SelectParent.js":25,"./SelectPosition":13,"./SelectPosition.js":13,"./ShowOffset":26,"./ShowOffset.js":26,"./SwitchVisibility":32,"./SwitchVisibility.js":32,"./TextComponent":33,"./TextComponent.js":33};function r(t){var e=o(t);return n(e)}function o(t){var e=i[t];if(!(e+1)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return e}r.keys=function(){return Object.keys(i)},r.resolve=o,t.exports=r,r.id=99},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{command:"",attributes:{}}})},function(t,e,n){"use strict";var i=n(0),r=n(100);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({events:function(){return this.model.get("events")||{mousedown:"handleClick"}},attributes:function(){return this.model.get("attributes")},initialize:function(t){this.editor=t.config.editor},handleClick:function(t){t.preventDefault(),t.stopPropagation(),this.execCommand(t)},execCommand:function(t){var e={event:t},n=this.model.get("command"),i=this.editor;"function"==typeof n&&n(i,null,e),"string"==typeof n&&i.runCommand(n,e)},render:function(){var t=this.editor.getConfig();return this.el.className+=" "+t.stylePrefix+"toolbar-item",this}})},function(t,e,n){"use strict";n(0);var i=n(59),r=n(102);t.exports=i.extend({itemView:r,initialize:function(t){this.config={editor:t.editor||""},this.listenTo(this.collection,"reset",this.render)}})},function(t,e,n){"use strict";t.exports={ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t={},e={},r={},o=n(104),s=n(38);return{name:"Commands",init:function(e){for(var i in t=e||{},o)i in t||(t[i]=o[i]);t.em;var s=t.pStylePrefix;for(var a in s&&(t.stylePrefix=s+t.stylePrefix),t.defaults){var l=t.defaults[a];l.id&&this.add(l.id,l)}var c=n(37);return r["select-comp"]=n(8),r["create-comp"]=n(7),r["delete-comp"]=n(36),r["image-comp"]=n(35),r["move-comp"]=n(34),r["text-comp"]=n(33),r["insert-custom"]=n(12),r["export-template"]=c,r["sw-visibility"]=n(32),r["open-layers"]=n(31),r["open-sm"]=n(30),r["open-tm"]=n(29),r["open-blocks"]=n(28),r["open-assets"]=n(27),r["show-offset"]=n(26),r["select-parent"]=n(25),r.fullscreen=n(24),r.preview=n(23),r.resize=n(22),r.drag=n(21),r["tlb-delete"]={run:function(t){return t.runCommand("core:component-delete")}},r["tlb-clone"]={run:function(t){t.runCommand("core:copy"),t.runCommand("core:paste")}},r["tlb-move"]={run:function(t,e,n){var i=void 0,r=t.getModel(),o=n&&n.event,s=t.getSelected(),a=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e div")},render:function(){return this.$el.attr({class:this.ppfx+"frame"}),this}})},function(t,e,n){"use strict";(function(e){var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(2);var o=n(106),s=i.default.$;t.exports=i.default.View.extend({initialize:function(t){e.bindAll(this,"renderBody","onFrameScroll","clearOff"),(0,r.on)(window,"scroll resize",this.clearOff),this.config=t.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new o({model:this.model.get("frame"),config:this.config})},isElInViewport:function(t){var e=(0,r.getElement)(t).getBoundingClientRect(),n=this.getFrameOffset(1),i=e.top,o=e.left;return i>=0&&o>=0&&i<=n.height&&o<=n.width},onFrameScroll:function(){var t=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+t.scrollTop+"px",this.toolsEl.style.left="-"+t.scrollLeft+"px",this.em.trigger("canvasScroll")},renderScripts:function(){var t=this.frame,e=this;t.el.onload=function(){!function n(i){if(i.length>0){var r=document.createElement("script");r.type="text/javascript",r.src=i.shift(),r.onerror=r.onload=n.bind(null,i),t.el.contentDocument.head.appendChild(r)}else e.renderBody()}(e.config.scripts.slice(0))}},renderBody:function(){var t=this.model.get("frame").get("wrapper"),e=this.config.em;if(t){var n=this.ppfx,i=s(this.frame.el.contentWindow.document.body),r=e.get("CssComposer"),o=e.get("Config"),a=this.config,l=o.protectedCss,c="";a.styles.forEach(function(t){c+=''});var u="\n "+(e.config.baseCss||"")+"\n\n ."+n+"dashed *[data-highlightable] {\n outline: 1px dashed rgba(170,170,170,0.7);\n outline-offset: -2px;\n }\n\n ."+n+"comp-selected {\n outline: 3px solid #3b97e3 !important;\n outline-offset: -3px;\n }\n\n ."+n+"comp-selected-parent {\n outline: 2px solid #ffca6f !important\n }\n\n ."+n+"no-select {\n user-select: none;\n -webkit-user-select:none;\n -moz-user-select: none;\n }\n\n ."+n+"freezed {\n opacity: 0.5;\n pointer-events: none;\n }\n\n ."+n+"no-pointer {\n pointer-events: none;\n }\n\n ."+n+"plh-image {\n background: #f5f5f5;\n border: none;\n height: 50px;\n width: 50px;\n display: block;\n outline: 3px solid #ffca6f;\n cursor: pointer;\n outline-offset: -2px\n }\n\n ."+n+"grabbing {\n cursor: grabbing;\n cursor: -webkit-grabbing;\n }\n\n "+(o.canvasCss||"")+"\n "+(l||"")+"\n ";c&&i.append(c),i.append(""),i.append(t.render()).append(r.render()),i.append(this.getJsContainer()),e.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var h=document,d=this.frame.el.contentDocument;[{event:"keydown keyup",class:"KeyboardEvent"}].forEach(function(t){return t.event.split(" ").forEach(function(e){d.addEventListener(e,function(e){return h.dispatchEvent(function(t,e){var n=void 0;try{n=new window[e](t.type,t)}catch(t){(n=document.createEvent(e)).initEvent(t.type,!0,!0)}return n.keyCodeVal=t.keyCode,["keyCode","which"].forEach(function(t){Object.defineProperty(n,t,{get:function(){return this.keyCodeVal}})}),n}(e,t.class))})})})}},offset:function(t){var e=t.getBoundingClientRect(),n=t.ownerDocument.body;return{top:e.top+n.scrollTop,left:e.left+n.scrollLeft,width:e.width,height:e.height}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.frmOff&&!t||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(t,e){var n=e||{},i=this.getFrameOffset(),r=this.getCanvasOffset(),o=this.offset(t),s=n.avoidFrameOffset?0:i.top,a=n.avoidFrameOffset?0:i.left;return{top:o.top+s-r.top,left:o.left+a-r.left,height:t.offsetHeight||t.clientHeight,width:t.offsetWidth||t.clientWidth}},getPosition:function(){var t=this.frame.el.contentDocument;if(t){var e=t.body,n=this.getFrameOffset(),i=this.getCanvasOffset();return{top:n.top+e.scrollTop-i.top,left:n.left+e.scrollLeft-i.left}}},updateScript:function(t){t.scriptContainer||(t.scriptContainer=s("
    "),this.getJsContainer().appendChild(t.scriptContainer.get(0)));var e=t.model,n=e.getId();t.el.id=n,t.scriptContainer.html("");var i=document.createElement("script");i.innerHTML="\n setTimeout(function() {\n var item = document.getElementById('"+n+"');\n if (!item) return;\n (function(){\n "+e.getScriptString()+";\n }.bind(item))()\n }, 1);",setTimeout(function(){return t.scriptContainer.get(0).appendChild(i)},0)},getJsContainer:function(){return this.jsContainer||(this.jsContainer=s('
    ').get(0)),this.jsContainer},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var t=this.frame;0===this.config.scripts.length?t.el.onload=this.renderBody:this.renderScripts()}var e=this.ppfx;this.$el.append('\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n ');var n=this.el,i=n.querySelector("#"+e+"tools");return this.hlEl=n.querySelector("."+e+"highlighter"),this.badgeEl=n.querySelector("."+e+"badge"),this.placerEl=n.querySelector("."+e+"placeholder"),this.ghostEl=n.querySelector("."+e+"ghost"),this.toolbarEl=n.querySelector("."+e+"toolbar"),this.resizerEl=n.querySelector("."+e+"resizer"),this.offsetEl=n.querySelector("."+e+"offset-v"),this.fixedOffsetEl=n.querySelector("."+e+"offset-fixed-v"),this.toolsEl=i,this.el.className=this.className,this}})}).call(this,n(1))},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({defaults:{wrapper:"",width:"",height:"",attributes:{}}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(108);t.exports=i.default.Model.extend({defaults:{frame:"",wrapper:"",rulers:!1},initialize:function(t){var e=this.conf||{};this.set("frame",new r(e.frame))}})},function(t,e,n){"use strict";t.exports={stylePrefix:"cv-",rulers:!1,scripts:[],styles:[],customBadgeLabel:""}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n";this.sorter.setDropContent(o),this.sorter.startSort(),e.trigger("canvas:dragenter",n,o)}}},{key:"handleDragOver",value:function(t){t.preventDefault(),this.em.trigger("canvas:dragover",t)}},{key:"handleDrop",value:function(t){t.preventDefault();var e=t.dataTransfer,n=this.getContentByData(e).content;t.target.style.border="",n?this.sorter.setDropContent(n):this.sorter.moved=0,this.endDrop(0,t)}},{key:"getContentByData",value:function(t){var e=this.em,n=t.types,i=t.files,r=e.get("dragContent"),s=t.getData("text");if(i.length){s=[];for(var a=0;a=0)s=t.getData("text/html").replace(/<\/?meta[^>]*>/g,"");else if((0,o.indexOf)(n,"text/uri-list")>=0)s={type:"link",attributes:{href:s},content:s};else if((0,o.indexOf)(n,"text/json")>=0){var u=t.getData("text/json");u&&(s=JSON.parse(u))}var h={content:s};return e.trigger("canvas:dragdata",t,h),h}}]),t}();e.default=s},function(t,e,n){"use strict";var i=n(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n(111));t.exports=function(){var t,e,o={},s=n(110),a=n(109),l=n(107);return{getCanvasView:function(){return l},name:"Canvas",init:function(e){for(var n in o=e||{},s)n in o||(o[n]=s[n]);var i=o.pStylePrefix;i&&(o.stylePrefix=i+o.stylePrefix),t=new a(e),l=new l({model:t,config:o});var r=o.em.get("DomComponents");return r&&this.setWrapper(r),this.startAutoscroll=this.startAutoscroll.bind(this),this.stopAutoscroll=this.stopAutoscroll.bind(this),this.autoscroll=this.autoscroll.bind(this),this},getConfig:function(){return o},setWrapper:function(e){t.set("wrapper",e)},getElement:function(){return l.el},getFrameEl:function(){return l.frame.el},getDocument:function(){return this.getFrameEl().contentDocument},getWindow:function(){return this.getFrameEl().contentWindow},getBody:function(){return l.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return l.toolsEl},getHighlighter:function(){return l.hlEl},getBadgeEl:function(){return l.badgeEl},getPlacerEl:function(){return l.placerEl},getGhostEl:function(){return l.ghostEl},getToolbarEl:function(){return l.toolbarEl},getResizerEl:function(){return l.resizerEl},getOffsetViewerEl:function(){return l.offsetEl},getFixedOffsetViewerEl:function(){return l.fixedOffsetEl},render:function(){return l.render().el},getOffset:function(){var t=this.offset(this.getFrameEl()),e=this.offset(this.getElement());return{top:t.top-e.top,left:t.left-e.left}},offset:function(t){return l.offset(t)},setCustomBadgeLabel:function(t){o.customBadgeLabel=t},getElementPos:function(t,e){return l.getElementPos(t,e)},getTargetToElementDim:function(t,e,n){var i=n||{},r=l.getPosition();if(r){var s=i.elPos||l.getElementPos(e),a=n.toRight||0,c=i.targetHeight||t.offsetHeight,u=i.targetWidth||t.offsetWidth,h=i.event||null,d=s.top-c,f=s.left;f+=a?s.width:0;var p=(f=a?f-u:f)s.top+s.height?s.top+s.height:g,left:p,elementTop:s.top,elementLeft:s.left,elementWidth:s.width,elementHeight:s.height,targetWidth:t.offsetWidth,targetHeight:t.offsetHeight,canvasTop:r.top,canvasLeft:r.left};return h&&o.em&&o.em.trigger(h,v),v}},getMouseRelativePos:function(t,e){var n=0,i=0,r=(e||{}).subWinOffset,o=t.target.ownerDocument,s=o.defaultView||o.parentWindow,a=s.frameElement,l=r?s.pageYOffset:0,c=r?s.pageXOffset:0;if(a){var u=a.getBoundingClientRect();n=u.top||0,i=u.left||0}return{y:t.clientY+n-l,x:t.clientX+i-c}},getMouseRelativeCanvas:function(t,e){var n=this.getFrameEl(),i=this.getBody(),r=n.offsetTop||0,o=n.offsetLeft||0,s=i.scrollTop||0,a=i.scrollLeft||0;return{y:t.clientY+r+s,x:t.clientX+o+a}},hasFocus:function(){return this.getDocument().hasFocus()},isInputFocused:function(){return"BODY"!==this.getFrameEl().contentDocument.activeElement.tagName},scrollTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,i.getElement)(t);this.getCanvasView().isElInViewport(n)&&!e.force||n.scrollIntoView(e)},startAutoscroll:function(){var t=this;this.dragging=1;var n=this.getScrollListeners();e=l.getFrameOffset(1),setTimeout(function(){(0,i.on)(n,"mousemove",t.autoscroll),(0,i.on)(n,"mouseup",t.stopAutoscroll)},0)},autoscroll:function(t){if(t.preventDefault(),this.dragging){var n=this.getFrameEl().contentWindow,i=n.document.body.scrollTop,r=t.clientY,o=e.height-50;r<50&&(i-=50-r),r>o&&(i+=r-o),n.scrollTo(0,i)}},stopAutoscroll:function(){this.dragging=0;var t=this.getScrollListeners();(0,i.off)(t,"mousemove",this.autoscroll),(0,i.off)(t,"mouseup",this.stopAutoscroll)},getScrollListeners:function(){return[this.getFrameEl().contentWindow,this.getElement()]},postRender:function(){(0,i.hasDnd)(o.em)&&(this.droppable=new r.default(o.em))},getFrameWrapperEl:function(){return l.frame.getWrapper()}}}},function(t,e,n){"use strict";var i=n(53);t.exports=n(0).View.extend({initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t;var e=t.config||{};this.level=t.level,this.config=e,this.preview=t.preview,this.ppfx=e.pStylePrefix||"",this.pfx=e.stylePrefix||"",this.parent=t.parent;var n=this.pfx,i=this.ppfx,r=this.parent,o=this.collection;this.listenTo(o,"add",this.addTo),this.listenTo(o,"reset resetNavigator",this.render),this.listenTo(o,"remove",this.removeChildren),this.className=n+"layers";var s=e.em;if(e.sortable&&!this.opt.sorter){var a=s.get("Utils");this.opt.sorter=new a.Sorter({container:e.sortContainer||this.el,containerSel:"."+this.className,itemSel:"."+n+"layer",ignoreViewChildren:1,onEndMove:function(t,e){var n=e.getSourceModel();s.setSelected(n,{forceChange:1})},avoidSelectOnEnd:1,nested:1,ppfx:i,pfx:n})}this.sorter=this.opt.sorter||"",this.$el.data("collection",o),r&&this.$el.data("model",r)},removeChildren:function(t){var e=t.viewLayer;e&&e.remove.apply(e)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var r=this.level,o=e||null,s=i;if(this.isCountable(t,this.config.hideTextnode)){var a=new s({level:r,model:t,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}).render().el;if(o)o.appendChild(a);else if(void 0!==n){var l="before";this.$el.children().length==n&&(n--,l="after"),n<0?this.$el.append(a):this.$el.children().eq(n)[l](a)}else this.$el.append(a);return a}},isCountable:function(t,e){var n=t.get("type"),i=t.get("tagName");return!(("textnode"==n||"br"==i)&&e||!t.get("layerable"))},render:function(){var t=this,e=document.createDocumentFragment(),n=this.el;return n.innerHTML="",this.collection.each(function(n){return t.addToCollection(n,e)}),n.appendChild(e),n.className=this.className,this}})},function(t,e,n){"use strict";t.exports={stylePrefix:"",appendTo:"",sortable:1,hidable:1,hideTextnode:1,root:"",showWrapper:1,showHover:1,scrollCanvas:{behavior:"smooth"},scrollLayers:1,highlightHover:1}},function(t,e,n){"use strict";t.exports=n(0).View.extend({})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return{build:function(e){var n=[];"string"==typeof e&&(e=[e]);for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=this.target,o=this.get("name");if(!(0,r.isUndefined)(t))if(this.get("changeProp"))n.set(o,t,e);else{var s=i({},n.get("attributes"));s[o]=t,n.set("attributes",s,e)}},setValueFromInput:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={value:t};this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},getInitValue:function(){var t=this.target,e=this.get("name"),n=void 0;if(t){var i=t.get("attributes");n=this.get("changeProp")?t.get(e):i[e]}return n||this.get("value")||this.get("default")}})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=n(140),s=n(139);t.exports=r.Collection.extend({model:o,initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em||"",this.listenTo(this,"add",this.handleAdd)},handleAdd:function(t){var e=this.target;e&&(t.target=e)},setTarget:function(t){this.target=t},add:function(t,e){var n=this.em;if((0,i.isString)(t)||(0,i.isArray)(t)){var o=n&&n.get&&n.get("TraitManager"),a=o&&o.getConfig(),l=s(a);(0,i.isString)(t)&&(t=[t]);for(var c=0,u=t.length;c2&&void 0!==arguments[2]?arguments[2]:{},r=t.components(),o=s.get("UndoManager"),a=s.handleUpdates.bind(s),l=this.handleChanges.bind(this),c=this.handleRemoves.bind(this);o&&o.add(t),o&&r&&o.add(r);[[t,"change:style change:content change:attributes change:src",a],[r,"add",l],[r,"remove",c],[t.get("classes"),"add remove",a]].forEach(function(t){s.stopListening(t[0],t[1],t[2]),s.listenTo(t[0],t[1],t[2])}),!i.avoidStore&&a("","",i),r.each(function(t){return n.handleChanges(t,e,i)})},handleRemoves:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!n.avoidStore&&s.handleUpdates(t,e,n)},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e="";if(!t&&o.stm&&(t=o.em.getCacheLoad()),t.components)try{e=JSON.parse(t.components)}catch(t){}else t.html&&(e=t.html);var n=e&&e.constructor===Object;return(e&&e.length||n)&&(this.clear(),this.getComponents().reset(),n?this.getWrapper().set(e).initComponents().initClasses().loadTraits():this.getComponents().add(e)),e},store:function(t){if(o.stm){var e={},n=this.storageKey();if(n.indexOf("html")>=0&&(e.html=o.em.getHtml()),n.indexOf("components")>=0){var i=o.storeWrapper?this.getWrapper():this.getComponents();e.components=JSON.stringify(i)}return t||o.stm.store(e),e}},getComponent:function(){return t},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(t){return this.getComponents().add(t)},render:function(){return e.render().el},clear:function(){return this.getComponents().reset(),this},setComponents:function(t){this.clear().addComponent(t)},addType:function(t,e){var n=this.getType(t);n?(n.model=e.model,n.view=e.view):(e.id=t,d.unshift(e))},getType:function(t){for(var e=d,n=0;n1&&void 0!==arguments[1]?arguments[1]:{};t&&(t.set({status:"selected"}),["component:selected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)}))},selectRemove:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t){this.em;t.set({status:"",state:""}),["component:deselected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)})}},componentHovered:function(){var t=o.em,e=t.get("componentHovered"),n=t.previous("componentHovered");n&&"hovered"==n.get("status")&&n.set({status:"",state:""}),e&&(0,r.isEmpty)(e.get("status"))&&e.set("status","hovered")}}}},function(t,e,n){"use strict";var i=n(9),r=n(69);t.exports=i.extend({getInputEl:function(){if(!this.$input){var t=this.model,e=this.getModelValue(),n=new r({model:t,target:this.config.em,contClass:this.ppfx+"field-color",ppfx:this.ppfx}).render();this.$input=n.colorEl,n.setValue(e,{fromTarget:1}),this.input=n}return this.$input.get(0)},renderField:function(){this.$input||(this.getInputEl(),this.$el.append(this.input.el))}})},function(t,e,n){"use strict";var i=n(9),r=n(42);t.exports=i.extend({getValueForTarget:function(){var t=this.model,e=t.get("value"),n=t.get("unit");return e?e+n:""},getInputEl:function(){if(!this.$input){var t=this.getModelValue(),e=new r({contClass:this.ppfx+"field-int",model:this.model,ppfx:this.ppfx});this.input=e.render(),this.$input=this.input.inputEl,this.$unit=this.input.unitEl,this.model.set("value",t),this.$input.val(t)}return this.$input.get(0)},renderField:function(){this.$input||(this.$el.append(this.tmpl),this.getInputEl(),this.$el.find("."+this.inputhClass).prepend(this.input.el))}})},function(t,e,n){"use strict";var i=n(9);t.exports=i.extend({initialize:function(t){i.prototype.initialize.apply(this,arguments);var e=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var t;this.$input||(t=1);for(var e=arguments.length,n=Array(e),r=0;r
    '},getInputEl:function(){if(!this.$input){var t=this.model,n=t.get("options")||[],i="",this.input=i,this.$input=r(this.input);var o=this.target,s=t.get("name"),a=t.get("value");if(t.get("changeProp"))a=a||o.get(s);else a=o.get("attributes")[s];a&&this.$input.val(a)}return this.$input.get(0)}})}).call(this,n(1))},function(t,e,n){"use strict";var i=n(59),r=n(9),o=n(147),s=n(146),a=n(145),l=n(144);t.exports=i.extend({itemView:r,itemsView:{text:r,number:a,select:o,checkbox:s,color:l},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.config=e,this.em=t.editor,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.className=this.pfx+"traits";this.listenTo(this.em,"component:toggled",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){var t=this.ppfx,e=this.em.getSelected();this.el.className=this.className+" "+t+"one-bg "+t+"two-color",e&&(this.collection=e.get("traits"),this.render())}})},function(t,e,n){"use strict";t.exports={stylePrefix:"trt-",appendTo:"",labelContainer:"Component settings",labelPlhText:"eg. Text here",labelPlhHref:"eg. https://google.com",optionsTarget:[{value:"",name:"This window"},{value:"_blank",name:"New window"}],textNoElement:"Select an element before using Trait Manager"}},function(t,e,n){"use strict";var i=n(1),r=n(149),o=n(148);t.exports=function(){var t={},e=void 0;return{TraitsView:o,name:"TraitManager",getConfig:function(){return t},init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=n,(0,i.defaults)(t,r);var s=t.pStylePrefix;return s&&(t.stylePrefix=""+s+t.stylePrefix),e=new o({collection:[],editor:t.em,config:t}),this},postRender:function(){var t=this.getConfig().appendTo;t&&((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())},getTraitsViewer:function(){return e},addType:function(t,n){var i=e.itemView;e.itemsView[t]=i.extend(n)},getType:function(t){return e.itemsView[t]},render:function(){return e.render().el}}}},function(t,e,n){"use strict";t.exports=n(60).extend({_createElement:function(t){return document.createTextNode("")},render:function(){var t=this.model,e=t.get("important");return this.el.textContent=t.getDeclaration({important:e}),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(60),o=n(151),s=i.default.$,a=function(t,e){return t+(e?"-"+e.replace("%","pc"):"")};t.exports=i.default.View.extend({initialize:function(t){var e=t.config||{};this.atRules={},this.config=e,this.em=e.em,this.pfx=e.stylePrefix||"",this.className=this.pfx+"rules";var n=this.collection;this.listenTo(n,"add",this.addTo),this.listenTo(n,"reset",this.render)},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){if(this.renderStarted){var n=e||null,i=void 0,s=void 0,l={model:t,config:this.config};if("keyframes"===t.get("atRuleType")){var c=t.getAtRule(),u=this.atRules[c];if(!u){var h=document.createElement("style");u=document.createTextNode(""),h.appendChild(document.createTextNode(c+"{")),h.appendChild(u),h.appendChild(document.createTextNode("}")),this.atRules[c]=u,i=h}s=new o(l),u.appendData(s.render().el.textContent)}else i=(s=new r(l)).render().el;var d=this.className,f=t.get("mediaText"),p=a(d),g=p;if(f&&(g=a(d,this.getMediaWidth(f))),i){var v=n||this.el,m=void 0;try{m=v.querySelector("#"+g)}catch(t){}m||(m=v.querySelector("#"+p)),m.appendChild(i)}return i}},getMediaWidth:function(t){return t&&t.replace("("+this.em.getConfig("mediaCondition")+": ","").replace(")","")},render:function(){var t=this;this.renderStarted=1,this.atRules={};var e=this.$el,n=document.createDocumentFragment(),i=this.className;return e.empty(),this.em.get("DeviceManager").getAll().map(function(t){return t.get("widthMedia")}).sort(function(t,e){return(e&&e.replace("px","")||Number.MAX_VALUE)-(t&&t.replace("px","")||Number.MAX_VALUE)}).forEach(function(t){s('
    ').appendTo(n)}),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",i),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(62);t.exports=i.default.Collection.extend({initialize:function(t,e){e&&e.em&&(this.editor=e.em),this.model=function(t,n){return!n.em&&e&&e.em&&(n.em=e.em),new r(t,n)}},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof t&&(t=this.editor.get("Parser").parseCss(t)),e.em=this.editor,i.default.Collection.prototype.add.apply(this,[t,e])}})},function(t,e,n){"use strict";t.exports={stylePrefix:"css-",staticRules:"",rules:[]}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n="change:style",i=o.get("UndoManager");i&&i.add(t);var r=o.handleUpdates.bind(o);o.stopListening(t,n,r),o.listenTo(t,n,r),!e.avoidStore&&r("","",e)},load:function(e){var n=e||"";!n&&s.stm&&(n=s.em.getCacheLoad());var i=n.styles||"";if(n.styles)try{i=JSON.parse(n.styles)}catch(t){}else n.css&&(i=s.em.get("Parser").parseCss(n.css));return(0,r.isArray)(i)?i.length&&t.reset(i):i&&t.reset(i),i},store:function(e){if(s.stm){var n={},i=this.storageKey();return i.indexOf("css")>=0&&(n.css=s.em.getCss()),i.indexOf("styles")>=0&&(n.styles=JSON.stringify(t)),e||s.stm.store(n),n}},add:function(e,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=n||"",c=r||"",u=i({},o),h=this.get(e,a,c,u);return h&&h.config&&!h.config.atRuleType?h:(u.state=a,u.mediaText=c,u.selectors="",(h=new l(u,s)).get("selectors").add(e),t.add(h),h)},get:function(e,n,i,r){var o=null;return t.each(function(t){o||t.compare(e,n,i,r)&&(o=t)}),o},getAll:function(){return t},clear:function(){return this.getAll().reset(),this},addCollection:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=t instanceof Array?t:[t],o=0,a=r.length;o1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager").add({name:t,type:d.TYPE_ID}),a=this.add(s,i,r);return a.setStyle(e,n),a},getIdRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_ID);return r&&this.get(r,n,i)},setClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager").add({name:t,type:d.TYPE_CLASS}),a=this.add(s,i,r);return a.setStyle(e,n),a},getClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_CLASS);return r&&this.get(r,n,i)},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));n(64),n(65),n(63);t.exports=i.default.View.extend({events:{submit:"handleSubmit"},template:function(t){var e=t.pfx,n=t.ppfx;return'\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n '},initialize:function(t){this.options=t,this.config=t.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"";var e=this.collection;this.listenTo(e,"reset",this.renderAssets),this.listenTo(e,"add",this.addToAsset),this.listenTo(e,"remove",this.removedAsset),this.listenTo(e,"deselectAll",this.deselectAll)},handleSubmit:function(t){t.preventDefault();var e=this.getAddInput(),n=e.value.trim(),i=this.config.handleAdd;n&&(e.value="",this.getAssetsEl().scrollTop=0,i?i.bind(this)(n):this.options.globalCollection.add(n,{at:0}))},getAssetsEl:function(){return this.el.querySelector("."+this.pfx+"assets")},getAddInput:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},removedAsset:function(t){this.collection.length||this.toggleNoAssets()},addToAsset:function(t){1==this.collection.length&&this.toggleNoAssets(1),this.addAsset(t)},addAsset:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.collection,i=this.config,r=new t.typeView({model:t,collection:n,config:i}).render().el;if(e)e.appendChild(r);else{var o=this.getAssetsEl();o&&o.insertBefore(r,o.firstChild)}return r},toggleNoAssets:function(t){var e=this.$el.find("."+this.pfx+"assets");if(t)e.empty();else{var n=this.config.noAssets;n&&e.append(n)}},deselectAll:function(){var t=this.pfx;this.$el.find("."+t+"highlight").removeClass(t+"highlight")},renderAssets:function(){var t=this,e=document.createDocumentFragment(),n=this.$el.find("."+this.pfx+"assets");n.empty(),this.toggleNoAssets(this.collection.length),this.collection.each(function(n){return t.addAsset(n,e)}),n.append(e)},render:function(){var t=this.options.fu.render().el;return this.$el.empty(),this.$el.append(t).append(this.template(this)),this.el.className=this.ppfx+"asset-manager",this.renderAssets(),this.rendered=1,this}})},function(t,e,n){"use strict";t.exports=n(0).Model.extend({idAttribute:"src",defaults:{type:"",src:""},getFilename:function(){return this.get("src").split("/").pop()},getExtension:function(){return this.getFilename().split(".").pop()}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{};return void 0===e.at&&(e.at=0),s.add(t,e)},get:function(t){return s.where({src:t})[0]},getAll:function(){return s},getAllVisible:function(){return a.collection},remove:function(t){var e=this.get(t);return this.getAll().remove(e),this},store:function(e){var n={},i=JSON.stringify(this.getAll().toJSON());return n[this.storageKey]=i,!e&&t.stm&&t.stm.store(n),n},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.storageKey,n=t[e]||[];if("string"==typeof n)try{n=JSON.parse(t[e])}catch(t){}return n&&n.length&&this.getAll().reset(n),n},getContainer:function(){return a.el},getAssetsEl:function(){return a.el.querySelector("[data-el=assets]")},render:function(t){var e=t||this.getAll().models;return a.rendered||a.render(),a.collection.reset(e),this.getContainer()},addType:function(t,e){this.getAll().addType(t,e)},getType:function(t){return this.getAll().getType(t)},getTypes:function(){return this.getAll().getTypes()},AssetsView:function(){return a},FileUploader:function(){return l},onLoad:function(){this.getAll().reset(t.assets)},postRender:function(e){t.dropzone&&l.initDropzone(e)},setTarget:function(t){a.collection.target=t},onSelect:function(t){a.collection.onSelect=t},onClick:function(e){t.onClick=e},onDblClick:function(e){t.onDblClick=e}}}},function(t,e,n){"use strict";var i=o(n(1)),r=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}var s=n(16);t.exports=r.default.View.extend({template:i.default.template('\n
    \n \n <%= label %>\n
    '),events:{"click [data-sector-title]":"toggle"},initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.caretR="fa-caret-right",this.caretD="fa-caret-down";var e=this.model;this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"updateVisibility",this.updateVisibility),this.listenTo(e,"destroy remove",this.remove)},updateVisibility:function(){var t;this.model.get("properties").each(function(e){e.get("visible")&&(t=1)}),this.el.style.display=t?"block":"none"},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.getPropertiesEl().style.display="",this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.getPropertiesEl().style.display="none",this.$caret.removeClass(this.caretD).addClass(this.caretR)},getPropertiesEl:function(){return this.$el.find("."+this.pfx+"properties").get(0)},toggle:function(t){var e=this.model.get("open")?0:1;this.model.set("open",e)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var t=this.model.get("properties");if(t){var e=new s({collection:t,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(e.render().el)}}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=t.target||{},this.config=e;var n={};(0,o.extend)(n,r.default.Events);var s=document.body,a=document.createElement("el-"+(new Date).getTime());s.appendChild(a),n.computedDefault=i({},window.getComputedStyle(a)),s.removeChild(a),this.propTarget=n;var l=this.collection;this.listenTo(l,"add",this.addTo),this.listenTo(l,"reset",this.render),this.listenTo(this.target,"component:toggled component:update:classes component:update:state change:device",this.targetUpdated)},addTo:function(t){this.addToCollection(t)},targetUpdated:function(){var t=this.target,e=this.propTarget,n=t.getSelected();if(n){var i=t.get("Config").devicePreviewMode?"":n.get("state"),r=n.getEl();if(e.helper=null,r){var o=i?":"+i:null;e.computed=window.getComputedStyle(r,o)}n=t.get("StyleManager").getModelToStyle(n),i&&function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.get("CssComposer"),r=i.getAll(),o=i.getClassRule("hc-state");o?(r.remove(o),r.add(o)):o=i.setClassRule("hc-state"),o.set("important",1),o.setStyle(n),e.helper=o}(n.getStyle()),e.model=n,e.trigger("update")}},addToCollection:function(t,e){var n=e||null,i=new s({model:t,id:this.pfx+t.get("name").replace(" ","_").toLowerCase(),name:t.get("name"),properties:t.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}).render().el;return n?n.appendChild(i):this.$el.append(i),i},render:function(){var t=this,e=document.createDocumentFragment(),n=this.$el,i=this.pfx,r=this.ppfx;return n.empty(),this.collection.each(function(n){return t.addToCollection(n,e)}),n.append(e),n.addClass(i+"sectors "+r+"one-bg "+r+"two-color"),this}})},function(t,e,n){"use strict";n(0);t.exports=function(){return{build:function(t){var e=[];"string"==typeof t&&(t=[t]);for(var n=0,i=t.length;n\n \n
    \n '},getSliderEl:function(){return this.slider||(this.slider=this.el.querySelector("input[type=range]")),this.slider},inputValueChanged:function(){var t=this.model,e=t.get("step");this.getInputEl().value=this.getSliderEl().value;var n=this.getInputValue()-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()},inputValueChangedSoft:function(){this.getInputEl().value=this.getSliderEl().value,this.model.set("value",this.getInputValue(),{avoidStore:1}),this.elementUpdated()},setValue:function(t){this.getSliderEl().value=t,this.inputInst.setValue(t,{silent:1})},onRender:function(){r.prototype.onRender.apply(this,arguments),this.model.get("showInput")||(this.inputInst.el.style.display="none")}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \n \n
    '+("Layer "+t.get("index"))+'
    \n
    \n \t
    \n
    \n
    \n ⨯\n
    \n
    \n
    \n '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model;this.stackModel=t.stackModel||{},this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.sorter=t.sorter||null,this.propsConfig=t.propsConfig||{},this.customPreview=t.onPreview,this.listenTo(e,"destroy remove",this.remove),this.listenTo(e,"change:active",this.updateVisibility),this.listenTo(e.get("properties"),"change",this.updatePreview),e.get("preview")||this.$el.addClass(this.pfx+"no-preview"),e.view=this,e.set({droppable:0,draggable:1}),this.$el.data("model",e)},initSorter:function(t){this.sorter&&this.sorter.startSort(this.el)},remove:function(t){t&&t.stopPropagation&&t.stopPropagation();var e=this.model,n=e.collection,r=this.stackModel;i.default.View.prototype.remove.apply(this,arguments),n.contains(e)&&n.remove(e),r&&r.set&&(r.set({stackIndex:null},{silent:!0}),r.trigger("updateValue"))},onPreview:function(t){var e=t.split(" "),n=[];return this.model.get("properties").each(function(t,i){var r=e[i]||"";if(r&&"integer"==t.get("type")){var o=parseInt(r,10),s=r.replace(o,"");r=(o=(o=(o=isNaN(o)?0:o)>3?3:o)<-3?-3:o)+s}n.push(r)}),n.join(" ")},updatePreview:function(){var t=this.stackModel,e=this.customPreview,n=this.getPreviewEl(),i=this.model.getFullValue(),r=e?e(i):this.onPreview(i);r&&t&&n&&(n.style[t.get("property")]=r)},getPropertiesWrapper:function(){return this.propsWrapEl||(this.propsWrapEl=this.el.querySelector("[data-properties]")),this.propsWrapEl},getPreviewEl:function(){return this.previewEl||(this.previewEl=this.el.querySelector("[data-preview]")),this.previewEl},active:function(){var t=this.model,e=t.collection;e.active(e.indexOf(t))},updateVisibility:function(){var t=this.pfx,e=this.getPropertiesWrapper(),n=this.model.get("active");e.style.display=n?"":"none",this.$el[n?"addClass":"removeClass"](t+"active")},render:function(){var t=n(16),e=this.propsConfig,i=this.pfx+"layer",r=this.model,o=this.el,s=new t({collection:r.get("properties"),config:this.config,target:e.target,customValue:e.customValue,propTarget:e.propTarget,onChange:e.onChange}).render().el;return o.innerHTML=this.template(r),o.className=i,this.getPropertiesWrapper().appendChild(s),this.updateVisibility(),this.updatePreview(),this}})},function(t,e,n){"use strict";var i=n(0),r=n(167);t.exports=i.View.extend({initialize:function(t){this.config=t.config||{},this.stackModel=t.stackModel,this.preview=t.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.propsConfig=t.propsConfig;var e=this.pfx,n=this.ppfx,i=this.collection;this.className=e+"layers "+n+"field",this.listenTo(i,"add",this.addTo),this.listenTo(i,"deselectAll",this.deselectAll),this.listenTo(i,"reset",this.render);var r=this.config.em||"",o=r?r.get("Utils"):"";this.sorter=o?new o.Sorter({container:this.el,ignoreViewChildren:1,containerSel:"."+e+"layers",itemSel:"."+e+"layer",pfx:this.config.pStylePrefix}):"",i.view=this,this.$el.data("model",i),this.$el.data("collection",i)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var i=e||null,o=this.stackModel,s=this.config,a=this.sorter,l=this.propsConfig;void 0!==this.preview&&t.set("preview",this.preview);var c=new r({model:t,config:s,sorter:a,stackModel:o,propsConfig:l}).render().el;if(i)i.appendChild(c);else if(void 0!==n){var u="before";this.$el.children().length==n&&(n--,u="after"),n<0?this.$el.append(c):this.$el.children().eq(n)[u](c)}else this.$el.append(c);return c},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=function(t,e){var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},r=[],o=!!/msie/i.exec(window.navigator.userAgent),s=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div").style;return e.cssText="background-color:rgba(0,0,0,.5)",t(e.backgroundColor,"rgba")||t(e.backgroundColor,"hsla")}(),a=["
    ","
    ","
    ▼
    ","
    "].join(""),l=function(){var t="";if(o)for(var e=1;e<=6;e++)t+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",t,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}();function c(e,n,i,r){for(var o=[],a=0;a')}else{o.push(t("
    ').get(0),E=i('
    ').get(0),M=h+k+"-el"+" "+(h+k),A=h+S+"-el"+" "+(h+S);p=i('
    ').get(0),g=i('
    ').get(0),v=i('
    ').get(0),m=i('
    ').get(0),y=i('
    ').get(0),b=i('
    ').get(0),x=i('
    ').get(0),w=i('
    ').get(0),this["marginT"+o]=p,this["marginB"+o]=g,this["marginL"+o]=v,this["marginR"+o]=m,this["padT"+o]=y,this["padB"+o]=b,this["padL"+o]=x,this["padR"+o]=w,T.appendChild(p),T.appendChild(g),T.appendChild(v),T.appendChild(m),E.appendChild(y),E.appendChild(b),E.appendChild(x),E.appendChild(w),f.appendChild(T),f.appendChild(E),this[d]="1"}var O=u.marginLeft.replace("px",""),P=parseInt(u.marginTop.replace("px","")),_=parseInt(u.marginBottom.replace("px","")),L=p.style,N=g.style,D=v.style,I=m.style,F=y.style,R=b.style,j=x.style,z=w.style,H=parseInt(c.left);L.height=u.marginTop,L.width=u.width,L.top=c.top-u.marginTop.replace("px","")+"px",L.left=H+"px",N.height=u.marginBottom,N.width=u.width,N.top=c.top+c.height+"px",N.left=H+"px";var V=c.height+P+_+"px",$=c.top-P+"px";D.height=V,D.width=u.marginLeft,D.top=$,D.left=H-O+"px",I.height=V,I.width=u.marginRight,I.top=$,I.left=H+c.width+"px";var B=parseInt(u.paddingTop.replace("px",""));F.height=u.paddingTop,F.width=u.width,F.top=c.top+"px",F.left=H+"px";var W=parseInt(u.paddingBottom.replace("px",""));R.height=u.paddingBottom,R.width=u.width,R.top=c.top+c.height-W+"px",R.left=H+"px";var U=c.height-W-B+"px",q=c.top+B+"px";j.height=U,j.width=u.paddingLeft,j.top=q,j.left=c.left+"px";var K=parseInt(u.paddingRight.replace("px",""));z.height=U,z.width=u.paddingRight,z.top=q,z.left=c.left+c.width-K+"px"}},stop:function(t,e,n){var i=(n||{}).state||"",r=this.getOffsetMethod(i);t.Canvas[r]().style.display="none"}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=t.Modal,r=t.AssetManager,o=r.getConfig(),s=r.getContainer(),a=n.modalTitle||o.modalTitle||"",l=n.types,c=n.accept;if(r.setTarget(n.target),r.onClick(n.onClick),r.onDblClick(n.onDblClick),r.onSelect(n.onSelect),!this.rendered||l){var u=r.getAll();l&&(u=u.filter(function(t){return-1!==l.indexOf(t.get("type"))})),r.render(u),this.rendered=1}if(c){var h=s.querySelector("input#"+o.stylePrefix+"uploadFile");h&&h.setAttribute("accept",c)}i.setTitle(a),i.setContent(s),i.open()}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=t.BlockManager,i=t.Panels;if(!this.blocks){n.render();var r="views-container",o=document.createElement("div"),s=i.getPanel(r)||i.addPanel({id:r});o.appendChild(n.getContainer()),s.set("appendContent",o).trigger("change:appendContent"),this.blocks=o}this.blocks.style.display="block"},stop:function(){var t=this.blocks;t&&(t.style.display="none")}}},function(t,e,n){"use strict";var i=n(0).$;t.exports={run:function(t,e){this.sender=e;var n=t.Config.stylePrefix,r=t.TraitManager;if(!this.$cn){var o=r.getTraitsViewer(),s=r.getConfig();this.$cn=i("
    "),this.$cn2=i("
    "),this.$cn.append(this.$cn2),this.$header=i("
    ").append('
    '+s.textNoElement+"
    "),this.$cn.append(this.$header),this.$cn2.append('
    '+s.labelContainer+"
    "),this.$cn2.append(o.render().el);var a=t.Panels;(a.getPanel("views-container")?a.getPanel("views-container"):a.addPanel({id:"views-container"})).set("appendContent",this.$cn.get(0)).trigger("change:appendContent"),this.target=t.getModel(),this.listenTo(this.target,"component:toggled",this.toggleTm)}this.toggleTm()},toggleTm:function(){var t=this.sender;t&&t.get&&!t.get("active")||(1===this.target.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));n(77);var r=i.default.$;t.exports={run:function(t,e){if(this.sender=e,!this.$cn){var n=t.getConfig(),i=t.Panels;this.$cn=r("
    "),this.$cn2=r("
    "),this.$cn.append(this.$cn2);var o=t.DeviceManager;if(o&&n.showDevices)i.addPanel({id:"devices-c"}).set("appendContent",o.render()).trigger("change:appendContent");var s=t.SelectorManager;s&&this.$cn2.append(s.render([])),this.$cn2.append(t.StyleManager.render());var a=t.StyleManager.getConfig(),l=a.stylePrefix;this.$header=r('
    '+a.textNoElement+"
    "),this.$cn.append(this.$header),i.getPanel("views-container")?this.panel=i.getPanel("views-container"):this.panel=i.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=t.editor,this.listenTo(this.target,"component:toggled",this.toggleSm)}this.toggleSm()},toggleSm:function(){var t=this.target,e=this.sender;e&&e.get&&!e.get("active")||(1===t.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));n(54),i.default.$;t.exports={run:function(t){var e=t.LayerManager,n=t.Panels;if(!this.layers){var i="views-container",r=document.createElement("div"),o=n.getPanel(i)||n.addPanel({id:i});r.appendChild(e.render()),o.set("appendContent",r).trigger("change:appendContent"),this.layers=r}this.layers.style.display="block"},stop:function(){var t=this.layers;t&&(t.style.display="none")}}},function(t,e,n){"use strict";t.exports={run:function(t){t.Canvas.getBody().className=this.ppfx+"dashed"},stop:function(t){t.Canvas.getBody().className=""}}},function(t,e,n){"use strict";var i=r(n(1));r(n(0));function r(t){return t&&t.__esModule?t:{default:t}}var o=n(7);t.exports=i.default.extend({},o,{beforeDraw:function(t){t.type="text",t.style||(t.style={}),t.style.padding="10px"},afterDraw:function(t){t&&t.set&&(t.trigger("focus"),this.sender&&this.sender.set("active",!1))}})},function(t,e,n){"use strict";var i=s(n(1)),r=s(n(0)),o=n(2);function s(t){return t&&t.__esModule?t:{default:t}}var a=n(8),l=n(13),c=r.default.$;t.exports=i.default.extend({},l,a,{init:function(t){a.init.apply(this,arguments),i.default.bindAll(this,"initSorter","rollback","onEndMove"),this.opt=t,this.hoverClass=this.ppfx+"highlighter-warning",this.badgeClass=this.ppfx+"badge-warning",this.noSelClass=this.ppfx+"no-select"},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n2&&void 0!==arguments[2]&&arguments[2];e&&e.set&&e.set("active",0);var n=t.getConfig(),r=t.Modal,o=n.stylePrefix;if(this.cm=t.CodeManager||null,!this.$editors){var s=this.buildEditor("htmlmixed","hopscotch","HTML"),a=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=s.el,this.cssEditor=a.el;var l=i('
    ');l.append(s.$el).append(a.$el),this.$editors=l}r.setTitle(n.textViewCode),r.setContent(this.$editors),r.open(),this.htmlEditor.setContent(t.getHtml()),this.cssEditor.setContent(t.getCss())},stop:function(t){var e=t.Modal;e&&e.close()},buildEditor:function(t,e,n){var i=document.createElement("textarea");!this.codeMirror&&(this.codeMirror=this.cm.getViewer("CodeMirror"));var r=this.codeMirror.clone().set({label:n,codeName:t,theme:e,input:i}),o=new this.cm.EditorView({model:r,config:this.cm.getConfig()}).render().$el;return r.init(i),{el:r,$el:o}}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=i.default.$;t.exports=i.default.View.extend({initialize:function(t){this.config=t||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=r(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(t){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(t){var e=t.getBoundingClientRect();return{top:e.top+t.ownerDocument.body.scrollTop,left:e.left+t.ownerDocument.body.scrollLeft}},init:function(t){},callRun:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;if(t.trigger("run:"+n+":before",e),!e||!e.abort){var i=this.run(t,t,e);return t.trigger("run:"+n,i,e),i}t.trigger("abort:"+n,e)},callStop:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;t.trigger("stop:"+n+":before",e);var i=this.stop(t,t,e);return t.trigger("stop:"+n,i,e),i},run:function(t,e){},stop:function(t,e){}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return this.opts.contClass||t+"field "+t+"field-integer"},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];o.prototype.initialize.apply(this,arguments),(0,i.bindAll)(this,"moveIncrement","upIncrement"),this.doc=document,this.listenTo(this.model,"change:unit",this.handleModelChange)},setValue:function(t,e){var n=e||{},i=this.validateInputValue(t,{deepCheck:1}),r={value:i.value};(i.unit||i.force)&&(r.unit=i.unit),this.model.set(r,n),n.silent&&this.handleModelChange()},handleChange:function(t){t.stopPropagation(),this.setValue(this.getInputEl().value),this.elementUpdated()},handleUnitChange:function(t){t.stopPropagation();var e=this.getUnitEl().value;this.model.set("unit",e),this.elementUpdated()},elementUpdated:function(){this.model.trigger("el:change")},handleModelChange:function(){var t=this.model;this.getInputEl().value=t.get("value");var e=this.getUnitEl();e&&(e.value=t.get("unit")||"")},getUnitEl:function(){if(!this.unitEl){var t=this.model,e=t.get("units")||[];if(e.length){var n=[];e.forEach(function(e){var i=e==t.get("unit")?"selected":"";n.push("")});var i=document.createElement("div");i.innerHTML='",this.unitEl=i.firstChild}}return this.unitEl},upArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10);n=this.normalizeValue(n+e);var i=this.validateInputValue(n);t.set("value",i.value),this.elementUpdated()},downArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10),i=this.normalizeValue(n-e),r=this.validateInputValue(i);t.set("value",r.value),this.elementUpdated()},downIncrement:function(t){t.preventDefault(),this.moved=0;var e=this.model.get("value");e=this.normalizeValue(e),this.current={y:t.pageY,val:e},(0,r.on)(this.doc,"mousemove",this.moveIncrement),(0,r.on)(this.doc,"mouseup",this.upIncrement)},moveIncrement:function(t){this.moved=1;var e=this.model,n=e.get("step"),i=this.current,r=this.normalizeValue(i.val+(i.y-t.pageY)*n);return this.prValue=this.validateInputValue(r).value,e.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(){var t=this.model,e=t.get("step");if((0,r.off)(this.doc,"mouseup",this.upIncrement),(0,r.off)(this.doc,"mousemove",this.moveIncrement),this.prValue&&this.moved){var n=this.prValue-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()}},normalizeValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.model.get("step"),i=0;if(isNaN(t))return e;if(t=parseFloat(t),Math.floor(t)!==t){var r=n.toString().split(".")[1];i=r?r.length:0}return i?parseFloat(t.toFixed(i)):t},validateInputValue:function(t,n){var r=0,o=n||{},s=this.model,a=(0,i.isUndefined)(t)?"":t,l=s.get("units")||[],c=s.get("unit")||l.length&&l[0]||"",u=s.get("max"),h=s.get("min");if(o.deepCheck){var d=s.get("fixedValues")||[];if(a){var f=new RegExp("^"+d.join("|"),"g");if(d.length&&f.test(a))a=a.match(f)[0],c="",r=1;else{var p=a+"";a+="",a=parseFloat(a.replace(",",".")),a=isNaN(a)?"":a;var g=p.replace(a,"");e.indexOf(l,g)>=0&&(c=g)}}}return(0,i.isUndefined)(u)||""===u||(a=a>u?u:a),(0,i.isUndefined)(h)||""===h||(a=a\n \n
    \n '},inputValueChanged:function(){if(!this.model.get("detached")){for(var t=arguments.length,e=Array(t),n=0;n'),this.input=this.$input.get(0)),this.props||(this.props=t.get("properties")),!this.$props)){this.props.each(function(e,n){e&&"composite"==e.get("type")&&(this.props.remove(e),console.warn("Nested composite types not yet allowed.")),e.parent=t},this);var i=new(n(16))(this.getPropsConfig());this.$props=i.render().$el,this.properties=i.properties,this.$el.find("#"+this.pfx+"input-holder").append(this.$props)}},getPropsConfig:function(t){var e=this,n=this.model,i={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(t,e,i){n.set("value",n.getFullValue(),i)},customValue:function(t,n){return e.valueOnIndex(n,t)}};return n.get("detached")&&delete i.onChange,i},valueOnIndex:function(t,e){var n=void 0,i=this.getTargetValue({ignoreDefault:1});i?n=i.split(" ")[t]:n=e&&e.getTargetValue({ignoreCustomValue:1,ignoreDefault:1});return e&&(n=e.model.parseValue(n).value),n}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({defaults:{id:"",label:"",open:!0,attributes:{}}})},function(t,e,n){"use strict";var i=n(1);t.exports={run:function(t){var e=t.getModel(),n=e.get("clipboard"),r=t.getSelected();n&&r&&!e.isEditing()&&(t.getSelectedAll().forEach(function(e){if(e){var r=e.collection,o=r.indexOf(e)+1,s=n.filter(function(t){return t.get("copyable")}),a=void 0;a=(0,i.contains)(n,e)&&e.get("copyable")?r.add(e.clone(),{at:o}):r.add(s.map(function(t){return t.clone()}),{at:o}),(a=(0,i.isArray)(a)?a:[a]).forEach(function(e){return t.trigger("component:clone",e)})}}),r.emitUpdate())}}},function(t,e,n){"use strict";t.exports={run:function(t){var e=t.getModel(),n=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=0?r:t)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.collection,i=n.indexOf(t),r=n.at(i+1);e.push(r||t)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.parent();n&&e.push(n)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.components(),i=n&&n.at(0);i&&e.push(i)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";var i=n(1);t.exports={run:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var r=n.component||t.getSelectedAll();return r=(0,i.isArray)(r)?[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e
    ':"")+'\n
    \n
    \n
    \n \n '+t.getIcon()+'\n '+h+'\n
    \n
    \n
    \n
    '+(r||"")+'
    \n
    \n \n
    \n
    '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t,this.level=t.level,this.config=t.config,this.em=t.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=t.sorter||"",this.pfx=this.config.stylePrefix;var e=this.pfx,n=this.ppfx,i=this.model,r=i.get("components");i.set("open",!1),this.listenTo(r,"remove add change reset",this.checkChildren),this.listenTo(i,"change:status",this.updateStatus),this.listenTo(i,"change:open",this.updateOpening),this.listenTo(i,"change:style:display",this.updateVisibility),this.className=e+"layer no-select "+n+"two-color",this.inputNameCls=n+"layer-name",this.clsTitleC=e+"layer-title-c",this.clsTitle=e+"layer-title",this.clsCaret=e+"layer-caret",this.clsCount=e+"layer-count",this.clsMove=e+"layer-move",this.clsChildren=e+"layer-children",this.clsNoChild=e+"layer-no-chld",this.$el.data("model",i),this.$el.data("collection",r),i.viewLayer=this},getVisibilityEl:function(){return this.eyeEl||(this.eyeEl=this.$el.children("."+this.pfx+"layer-vis")),this.eyeEl},updateVisibility:function(){var t=this.pfx+"layer-hidden",e="none"==this.model.getStyle().display?"addClass":"removeClass";this.$el[e](t),this.getVisibilityEl()[e]("fa-eye-slash")},toggleVisibility:function(t){t&&t.stopPropagation();var e=this.model,n=e.getStyle();"none"==n.display?delete n.display:n.display="none",e.setStyle(n)},handleEdit:function(t){t&&t.stopPropagation();var e=this.getInputName();e.contentEditable=!0,e.focus()},handleEditEnd:function(t){t&&t.stopPropagation();var e=this.getInputName(),n=e.textContent;e.contentEditable=!1,this.model.set({name:n})},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var t=this.opt.opened||{},e=this.model;e.get("open")?(this.$el.addClass("open"),this.getCaret().addClass("fa-chevron-down"),t[e.cid]=e):(this.$el.removeClass("open"),this.getCaret().removeClass("fa-chevron-down"),delete t[e.cid])},toggleOpening:function(t){t.stopPropagation(),this.model.get("components").length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(t){t.stopPropagation();var e=this.em,n=this.config;if(e){var i=this.model;e.setSelected(i,{fromLayers:1});var r=n.scrollCanvas;r&&e.get("Canvas").scrollTo(i,r)}},handleHover:function(t){t.stopPropagation();var e=this.em,n=this.config,i=this.model;e&&n.showHover&&e.setHovered(i,{fromLayers:1})},startSort:function(t){t.stopPropagation();var e=this.sorter;0===t.button&&e&&e.startSort(t.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(t){s.prototype.updateStatus.apply(this,[{avoidHover:!this.config.highlightHover}])},isVisible:function(){var t=this.model.get("style").display;if(!t||"none"!=t)return 1},checkChildren:function(){var t=this.model,e=this.countChildren(t),n=(this.pfx,this.clsNoChild),i=this.$el.children("."+this.clsTitleC).children("."+this.clsTitle);this.cnt||(this.cnt=this.$el.children("."+this.clsCount)),e?(i.removeClass(n),this.cnt.html(e)):(i.addClass(n),this.cnt.empty(),t.set("open",0))},countChildren:function(t){var e=0;return t.get("components").each(function(t){var n=this.opt.isCountable,i=this.config.hideTextnode;n&&!n(t,i)||e++},this),e},getCaret:function(){if(!this.caret||!this.caret.length){this.pfx;this.caret=this.$el.children("."+this.clsTitleC).find("."+this.clsCaret)}return this.caret},setRoot:function(t){t=(0,i.isString)(t)?this.em.getWrapper().find(t)[0]:t;var e=(0,r.getModel)(t,a);e&&(this.stopListening(),this.model=e,this.initialize(this.opt),this.render())},render:function(){var t=this.model,e=this.pfx,r=this.isVisible(),o=this.$el.empty(),s=this.level+1;(0,i.isUndefined)(l)&&(l=n(113));var a=new l({collection:t.get("components"),config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:t,level:s}).render().$el;return this.config.showWrapper||1!==s?(o.html(this.template(t)),o.find("."+this.clsChildren).append(a)):o.append(a),t.get("draggable")&&this.config.sortable||o.children("."+this.clsMove).remove(),!r&&(this.className+=" "+e+"hide"),o.attr("class",this.className),this.updateOpening(),this.updateStatus(),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return(n=i({},r.default,e)).stylePrefix=e.pStylePrefix,t=n.em,this},getConfig:function(){return n},onLoad:function(){e=new o.default({level:0,config:n,opened:n.opened||{},model:t.get("DomComponents").getWrapper()}),t&&t.on("component:selected",this.componentChanged),this.componentChanged()},postRender:function(){var t=n.appendTo,e=n.root;(e&&this.setRoot(e),t)&&((0,s.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())},setRoot:function(t){return e.setRoot(t),this},getRoot:function(){return e.model},getAll:function(){return e},componentChanged:function(e){if(!(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).fromLayers){var i=t.get("opened"),r=t.getSelected(),o=n.scrollLayers,s=r&&r.collection?r.collection.parent:null;for(var a in i)i[a].set("open",0);for(;s;)s.set("open",1),i[s.cid]=s,s=s.collection?s.collection.parent:null;if(r&&o){var l=r.viewLayer&&r.viewLayer.el;l&&l.scrollIntoView(o)}}},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=n(2),r=n(3);t.exports=r.extend({events:{dblclick:"enableEditing",input:"onInput"},initialize:function(t){r.prototype.initialize.apply(this,arguments),this.disableEditing=this.disableEditing.bind(this);var e=this.model,n=this.em;this.listenTo(e,"focus active",this.enableEditing),this.listenTo(e,"change:content",this.updateContent),this.rte=n&&n.get("RichTextEditor")},enableEditing:function(t){t&&t.stopPropagation&&t.stopPropagation();var e=this.rte;if(!this.rteEnabled&&this.model.get("editable")){if(e)try{this.activeRte=e.enable(this,this.activeRte)}catch(t){console.error(t)}this.rteEnabled=1,this.toggleEvents(1)}},disableEditing:function(){var t=this.model,e=t.get("editable"),n=this.rte;if(n&&e){try{n.disable(this,this.activeRte)}catch(t){console.error(t)}var i=this.getChildrenContainer().innerHTML,r=t.get("components");if(r.length&&r.reset(),t.set("content",""),n.customRte)t.set("content",i);else{t.trigger("change:content",t),r.add(i),r.each(function(t){return function t(e){e.set({editable:0,highlightable:0,removable:0,draggable:0,copyable:0,toolbar:""}),e.get("components").each(function(e){return t(e)})}(t)}),r.trigger("resetNavigator")}}this.rteEnabled=0,this.toggleEvents()},onInput:function(t){var e=this.em;e&&e.trigger("change:canvasOffset")},disablePropagation:function(t){t.stopPropagation()},toggleEvents:function(t){var e=t?"on":"off",n={on:i.on,off:i.off};this.em.setEditing(t);var r=[this.el.ownerDocument,document];n.off(r,"mousedown",this.disableEditing),n[e](r,"mousedown",this.disableEditing),this.$el.off("mousedown",this.disablePropagation),this.$el[e]("mousedown",this.disablePropagation)}})},function(t,e,n){"use strict";n(0);var i=n(55);t.exports=i.extend({render:function(){for(var t=arguments.length,e=Array(t),n=0;n1&&void 0!==arguments[1]&&arguments[1];var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=this.config.em,i=this.collection.indexOf(t);this.addToCollection(t,null,i),n&&!e.temporary&&n.trigger("component:add",t)},addToCollection:function(t,e,i){this.compView||(this.compView=n(3));for(var o=e||null,s=this.compView,a=this.opts.componentTypes,l=t.get("type"),c=0;c1&&void 0!==arguments[1]?arguments[1]:{};this.listenTo(this,"add",this.onAdd),this.config=e.config,this.em=e.em,this.model=function(t,n){var i,r=e.componentTypes;n.em=e.em,n.config=e.config,n.componentTypes=r;for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof t){var n=this.em.get("CssComposer"),i=this.em.get("Parser").parseHtml(t);if(t=i.html,i.css&&n){var o=e.avoidUpdateStyle;n.addCollection(i.css,{extend:1,avoidUpdateStyle:o})}}return r.Collection.prototype.add.apply(this,[t,e])},onAdd:function(t,e,n){var r=this.em,o=t.getStyle(),s=r&&r.getConfig("avoidInlineStyle");if(!(0,i.isEmpty)(o)&&!s&&r&&r.get&&r.getConfig("forceClass")){var a=t.cid;r.get("CssComposer").setClassRule(a,o);t.setStyle({}),t.addClass(a)}}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(t,e){this.config=e||{}},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,i=this.itemView,r=t.get(this.itemType);this.itemsView&&this.itemsView[r]&&(i=this.itemsView[r]);var o=new i({model:t,config:this.config},this.config).render().el;n?n.appendChild(o):this.$el.append(o)},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(e){this.add(e,t)},this),this.$el.append(t),this}})},function(t,e,n){"use strict";t.exports=n(0).View.extend({tagName:"style",initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{};var e=this.model;this.listenTo(e,"change:style change:state change:mediaText",this.render),this.listenTo(e,"destroy remove",this.remove),this.listenTo(e.get("selectors"),"change",this.render)},render:function(){var t=this.model.get("important");return this.el.innerHTML=this.model.toCSS({important:t}),this}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,r.isString)(e)&&(e=s(e));var a=this.getStyle(),l=i({},e);this.set("style",l,n);var c=(0,o.shallowDiff)(a,l);return(0,r.keys)(c).forEach(function(e){var n=t.em;t.trigger("change:style:"+e),n&&(n.trigger("styleable:change",t,e),n.trigger("styleable:change:"+e,t,e))}),l},addStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"string"==typeof t?t={prop:e}:n=e||{},t=this.extendStyle(t),this.setStyle(t,n)},removeStyle:function(t){var e=this.getStyle();delete e[t],this.setStyle(e)},styleToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.getStyle();for(var i in n){var o=t.important,s=(0,r.isArray)(o)?o.indexOf(i)>=0:o,a=n[i]+(s?" !important":"");a&&e.push(i+":"+a+";")}return e.join("")}}},function(t,e,n){"use strict";var i=n(1),r=a(i),o=a(n(0)),s=a(n(61));function a(t){return t&&t.__esModule?t:{default:t}}var l=n(19);t.exports=o.default.Model.extend(s.default).extend({defaults:{selectors:{},selectorsAdd:"",style:{},mediaText:"",state:"",stylable:!0,atRuleType:"",singleAtRule:0,important:0},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.config=t||{};var n=e.em,i=this.config.selectors||[];if(this.em=n,n){var r=n.get("SelectorManager"),o=[];i.forEach(function(t){o.push(r.add(t))}),i=o}this.set("selectors",new l(i))},getAtRule:function(){var t=this.get("atRuleType"),e=this.get("mediaText"),n=t?"@"+t:e?"@media":"";return n+(e&&n?" "+e:"")},selectorsToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.get("state"),i=this.get("selectorsAdd"),r=this.get("selectors").getFullString(),o=n?":"+n:"";return r&&e.push(""+r+o),i&&!t.skipAdd&&e.push(i),e.join(", ")},getDeclaration:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.selectorsToString(),i=this.styleToString(t),r=this.get("singleAtRule");return(n||r)&&i&&(e=r?i:n+"{"+i+"}"),e},toCSS:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.getAtRule(),i=this.getDeclaration(t);return i&&(e=i),n&&e&&(e=n+"{"+e+"}"),e},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n3&&void 0!==arguments[3]?arguments[3]:{},o=e||"",s=n||"",a=i.selectorsAdd||"",l=i.atRuleType||"";t instanceof Array||t.models||(t=[t]);var c=r.default.map(t.models||t,function(t){return t.get("name")}),u=r.default.map(this.get("selectors").models,function(t){return t.get("name")});if(c.length!==u.length)return!1;for(var h=0;h\n
    <%= title %>
    \n multiple/>\n
    \n \n '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=this.options.globalCollection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=void 0!==e.disableUpload?e.disableUpload:!e.upload&&!e.embedAsBase64,this.events["change #"+this.uploadId]="uploadFile";var n=e.uploadFile;n?this.uploadFile=n.bind(this):e.embedAsBase64&&(this.uploadFile=this.constructor.embedAsBase64),this.delegateEvents()},onUploadStart:function(){var t=this.config.em;t&&t.trigger("asset:upload:start")},onUploadEnd:function(t){var e=this.config.em;e&&e.trigger("asset:upload:end",t)},onUploadError:function(t){var e=this.config.em;console.error(t),this.onUploadEnd(t),e&&e.trigger("asset:upload:error",t)},onUploadResponse:function(t,e){var n=this.config.em,i=this.config,r=this.target,o="string"==typeof t?JSON.parse(t):t;n&&n.trigger("asset:upload:response",o),i.autoAdd&&r&&r.add(o.data,{at:0}),this.onUploadEnd(t),e&&e(o)},uploadFile:function(t,e){for(var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r=new FormData,s=this.config,a=s.params,l=0;l'+i.dropzoneContent+"
    "),h(),"draggable"in o&&[o,a].forEach(function(t){t.ondragover=d,t.ondragleave=f,t.ondrop=p})},render:function(){return this.$el.html(this.template({title:this.config.uploadText,uploadId:this.uploadId,disabled:this.disabled,pfx:this.pfx})),this.initDrop(),this.$el.attr("class",this.pfx+"file-uploader"),this}},{embedAsBase64:function(t,e){var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r={data:[]};if(FileReader){var o=[],s=/^(.+)\/(.+)$/,a=function(t){var e=new Promise(function(e,n){var i=new FileReader;i.addEventListener("load",function(r){var o=void 0,a=t.name,l=s.exec(t.type);if("image"===(o=l?l[1]:t.type)){var c={src:i.result,name:a,type:o,height:0,width:0},u=new Image;u.addEventListener("error",function(t){n(t)}),u.addEventListener("load",function(){c.height=u.height,c.width=u.width,e(c)}),u.src=c.src}else e(o?{src:i.result,name:a,type:o}:i.result)}),i.addEventListener("error",function(t){n(t)}),i.addEventListener("abort",function(t){n("Aborted")}),i.readAsDataURL(t)});o.push(e)},l=!0,c=!1,u=void 0;try{for(var h,d=i[Symbol.iterator]();!(l=(h=d.next()).done);l=!0){a(h.value)}}catch(t){c=!0,u=t}finally{try{!l&&d.return&&d.return()}finally{if(c)throw u}}Promise.all(o).then(function(t){r.data=t,n.onUploadResponse(r,e)},function(t){n.onUploadError(t)})}else this.onUploadError(new Error("Unsupported platform, FileReader is not defined"))}})},function(t,e,n){"use strict";(function(e){var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.View.extend({initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t,this.collection=t.collection;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.em=e.em,this.className=this.pfx+"asset",this.listenTo(this.model,"destroy remove",this.remove),this.model.view=this;var n=this.init&&this.init.bind(this);n&&n(t)},template:function(){var t=this.pfx;return'\n
    \n '+this.getPreview()+'\n
    \n
    \n '+this.getInfo()+'\n
    \n
    \n ⨯\n
    \n '},updateTarget:function(t){t&&t.set&&(t.set("attributes",e.clone(t.get("attributes"))),t.set("src",this.model.get("src")))},getPreview:function(){return""},getInfo:function(){return""},render:function(){var t=this.el;return t.innerHTML=this.template(this,this.model),t.className=this.className,this}})}).call(this,n(1))},function(t,e,n){"use strict";t.exports=n(64).extend({events:{"click [data-toggle=asset-remove]":"onRemove",click:"onClick",dblclick:"onDblClick"},getPreview:function(){var t=this.pfx;return'\n
    \n
    \n '},getInfo:function(){var t=this.pfx,e=this.model,n=e.get("name"),i=e.get("width"),r=e.get("height"),o=e.get("unitDim"),s=i&&r?i+"x"+r+o:"";return'\n
    '+(n=n||e.getFilename())+'
    \n
    '+s+"
    \n "},init:function(t){var e=this.pfx;this.className+=" "+e+"asset-image"},onClick:function(){var t=this.config.onClick,e=this.model;this.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),"function"==typeof t?t(e):this.updateTarget(this.collection.target)},onDblClick:function(){var t=this.em,e=this.config.onDblClick,n=this.model;"function"==typeof e?e(n):(this.updateTarget(this.collection.target),t&&t.get("Modal").close());var i=this.collection.onSelect;"function"==typeof i&&i(this.model)},onRemove:function(t){t.stopImmediatePropagation(),this.model.collection.remove(this.model)}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0,unit:void 0},t),this},parseValue:function(t){var e=o.prototype.parseValue.apply(this,arguments),n=this.input.validateInputValue(e.value,{deepCheck:1}),i=n.value,r=n.unit;return e.value=i,e.unit=r,e},getFullValue:function(){var t=this.get("value"),e=this.get("unit");return t=""+(t=(0,r.isUndefined)(t)?"":t)+(e=!(0,r.isUndefined)(e)&&t?e:""),o.prototype.getFullValue.apply(this,[t])}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:[];return this.set("options",t),this},addOption:function(t){if(t){var e=this.getOptions();this.setOptions([].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    ⨯
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n '),events:{change:"updateDevice"},initialize:function(t){this.config=t.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var t=this.em;if(t){var e=this.devicesEl,n=e?e.val():"";t.set("device",n)}},updateSelect:function(){var t=this.em,e=this.devicesEl;if(t&&t.getDeviceModel&&e){var n=t.getDeviceModel(),i=n?n.get("name"):"";e.val(i)}},getOptions:function(){var t="";return this.collection.each(function(e){var n=e.get("name");t+='"}),t},render:function(){var t=this.ppfx;return this.$el.html(this.template({ppfx:t,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+t+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=t+"devices-c",this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({idAttribute:"name",defaults:{name:"",width:"",height:"",widthMedia:null},initialize:function(){null==this.get("widthMedia")&&this.set("widthMedia",this.get("width"))}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(210);t.exports=i.default.Collection.extend({model:r})},function(t,e,n){"use strict";t.exports={devices:[],deviceLabel:"Device"}},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(212),o=n(211),s=n(209);return{name:"DeviceManager",init:function(n){for(var a in i=n||{},r)a in i||(i[a]=r[a]);return t=new o(i.devices),e=new s({collection:t,config:i}),this},add:function(e,n,i){var r=i||{};return r.name=e,r.width=n,t.add(r)},get:function(e){return t.get(e)},getAll:function(){return t},render:function(){return e.render().el}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=this.constructor;return this.then(function(n){return e.resolve(t()).then(function(){return n})},function(n){return e.resolve(t()).then(function(){return e.reject(n)})})}},function(t,e){var n,i,r=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{i="function"==typeof clearTimeout?clearTimeout:s}catch(t){i=s}}();var l,c=[],u=!1,h=-1;function d(){u&&l&&(u=!1,l.length?c=l.concat(c):h=-1,c.length&&f())}function f(){if(!u){var t=a(d);u=!0;for(var e=c.length;e;){for(l=c,c=[];++h1)for(var n=1;n=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(216),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(11))},function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(t){return t&&t.__esModule?t:{default:t}}(n(214));var o=setTimeout;function s(){}function a(t){if(!(this instanceof a))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],d(t,this)}function l(t,e){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,a._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null!==n){var i;try{i=n(t._value)}catch(t){return void u(e.promise,t)}c(e.promise,i)}else(1===t._state?c:u)(e.promise,t._value)})):t._deferreds.push(e)}function c(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"===(void 0===e?"undefined":i(e))||"function"==typeof e)){var n=e.then;if(e instanceof a)return t._state=3,t._value=e,void h(t);if("function"==typeof n)return void d(function(t,e){return function(){t.apply(e,arguments)}}(n,e),t)}t._state=1,t._value=e,h(t)}catch(e){u(t,e)}}function u(t,e){t._state=2,t._value=e,h(t)}function h(t){2===t._state&&0===t._deferreds.length&&a._immediateFn(function(){t._handled||a._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e1&&void 0!==arguments[1]?arguments[1]:{},n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.get("contentTypeJson"),a=this.get("headers")||{},l=this.get("params"),c=e.body||{},u=void 0,h=void 0;for(var d in l)c[d]=l[d];if((0,r.isUndefined)(a["X-Requested-With"])&&(a["X-Requested-With"]="XMLHttpRequest"),(0,r.isUndefined)(a["Content-Type"])&&s&&(a["Content-Type"]="application/json; charset=utf-8"),s)h=JSON.stringify(c);else for(var f in h=new FormData,c)h.append(f,c[f]);"post"===(u={method:e.method||"post",credentials:"include",headers:a}).method&&(u.body=h),this.onStart(),this.fetch(t,u).then(function(t){return 1==(t.status/200|0)?t.text():t.text().then(function(t){return Promise.reject(t)})}).then(function(t){return n.onResponse(t,i)}).catch(function(t){return n.onError(t,o)})}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{checkLocal:!0},store:function(t,e){for(var n in this.checkStorageEnvironment(),t)localStorage.setItem(n,t[n]);"function"==typeof e&&e()},load:function(t,e){this.checkStorageEnvironment();for(var n={},i=0,r=t.length;it.maximumStackLength&&(t.shift(),t.pointer--)}}}a.prototype={isRegistered:function(e){return e&&e.cid?this.registeredObjects[e.cid]:t.contains(this.registeredObjects,e)},register:function(t){return!this.isRegistered(t)&&(t&&t.cid?(this.registeredObjects[t.cid]=t,this.cidIndexes.push(t.cid)):this.registeredObjects.push(t),!0)},unregister:function(e){if(this.isRegistered(e)){if(e&&e.cid)delete this.registeredObjects[e.cid],this.cidIndexes.splice(t.indexOf(this.cidIndexes,e.cid),1);else{var n=t.indexOf(this.registeredObjects,e);this.registeredObjects.splice(n,1)}return!0}return!1},get:function(){return t.map(this.cidIndexes,function(t){return this.registeredObjects[t]},this).concat(this.registeredObjects)}};var d={add:{undo:function(t,e,n,i){t.remove(n,i)},redo:function(t,e,n,i){i.index&&(i.at=i.index),t.add(n,i)},on:function(e,n,i){return{object:n,before:void 0,after:e,options:t.clone(i)}}},remove:{undo:function(t,e,n,i){"index"in i&&(i.at=i.index),t.add(e,i)},redo:function(t,e,n,i){t.remove(e,i)},on:function(e,n,i){return{object:n,before:e,after:void 0,options:t.clone(i)}}},change:{undo:function(e,n,i,r){t.isEmpty(n)?t.each(t.keys(i),e.unset,e):(e.set(n),r&&r.unsetData&&r.unsetData.before&&r.unsetData.before.length&&t.each(r.unsetData.before,e.unset,e))},redo:function(e,n,i,r){t.isEmpty(i)?t.each(t.keys(n),e.unset,e):(e.set(i),r&&r.unsetData&&r.unsetData.after&&r.unsetData.after.length&&t.each(r.unsetData.after,e.unset,e))},on:function(e,n){var i=e.changedAttributes(),r=t.keys(i),o=t.pick(e.previousAttributes(),r),s=t.keys(o),a=(n||(n={})).unsetData={after:[],before:[]};return r.length!=s.length&&(r.length>s.length?t.each(r,function(t){t in o||a.before.push(t)},this):t.each(s,function(t){t in i||a.after.push(t)})),{object:e,before:o,after:i,options:t.clone(n)}}},reset:{undo:function(t,e,n){t.reset(e)},redo:function(t,e,n){t.reset(n)},on:function(e,n){return{object:e,before:n.previousModels,after:t.clone(e.models)}}}};function f(){}function p(e,n,i,r){if("object"==typeof n)return t.each(n,function(t,n){2===e?p(e,t,i,r):p(e,n,t,i)});switch(e){case 0:o(i,"undo","redo","on")&&t.all(t.pick(i,"undo","redo","on"),t.isFunction)&&(r[n]=i);break;case 1:r[n]&&t.isObject(i)&&(r[n]=t.extend({},r[n],i));break;case 2:delete r[n]}return this}f.prototype=d;var g=e.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(t){c("undo",this.attributes)},redo:function(t){c("redo",this.attributes)}}),v=e.Collection.extend({model:g,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(t){this.maximumStackLength=t}}),m=e.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(e){this.stack=new v,this.objectRegistry=new a,this.undoTypes=new f,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(t,e){this.stack.setMaxLength(e)},this),e&&e.track&&this.startTracking(),e&&e.register&&(t.isArray(e.register)||t.isArguments(e.register)?i(this.register,this,e.register):this.register(e.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(t){h(this.stack,t,r(arguments,1),this.undoTypes)},register:function(){l("on",arguments,this._addToStack,this)},unregister:function(){l("off",arguments,this._addToStack,this)},unregisterAll:function(){i(this.unregister,this,this.objectRegistry.get())},undo:function(t){u("undo",this,this.stack,t)},undoAll:function(){u("undo",this,this.stack,!1,!0)},redo:function(t){u("redo",this,this.stack,t)},redoAll:function(){u("redo",this,this.stack,!1,!0)},isAvailable:function(t){var e=this.stack,n=e.length;switch(t){case"undo":return n>0&&e.pointer>-1;case"redo":return n>0&&e.pointer0&&void 0!==arguments[0]?arguments[0]:{};n=i({},a,s),t=n.em,this.em=t,(e=new r.default({track:!0,register:[]})).changeUndoType("change",{condition:!1}),e.changeUndoType("add",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:void 0,after:t,options:i({},n)}}}),e.changeUndoType("remove",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:t,after:void 0,options:i({},n)}}});var l={on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!o&&(o=t.previousAttributes()),!n.avoidStore){var i={object:t,before:o,after:t.toJSON()};return o=null,i}},undo:function(t,e,n,i){t.set(e)},redo:function(t,e,n,i){t.set(n)}};return["style","attributes","content","src"].forEach(function(t){return e.addUndoType("change:"+t,l)}),e.on("undo redo",function(){return t.trigger("component:toggled change:canvasOffset")}),["undo","redo"].forEach(function(n){return e.on(n,function(){return t.trigger(n)})}),this},getConfig:function(){return n},add:function(t){return e.register(t),this},remove:function(t){return e.unregister(t),this},removeAll:function(){return e.unregisterAll(),this},start:function(){return e.startTracking(),this},stop:function(){return e.stopTracking(),this},undo:function(){return t.get("Canvas").isInputFocused()||e.undo(1),this},undoAll:function(){return e.undoAll(),this},redo:function(){return t.get("Canvas").isInputFocused()||e.redo(1),this},redoAll:function(){return e.redoAll(),this},hasUndo:function(){return e.isAvailable("undo")},hasRedo:function(){return e.isAvailable("redo")},getStack:function(){return e.stack},clear:function(){return e.clear(),this},getInstance:function(){return e}}}},function(t,e,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return e=r({},a,n),t=e.em,this.em=t,this},onLoad:function(){var t=e.defaults;for(var n in t){var i=t[n];this.add(n,i.keys,i.handler)}},add:function(t,e,r){var a=this.em,l=a.get("Commands"),c=a.getEditor(),u={id:t,keys:e,handler:r};return n[t]&&this.remove(t),n[t]=u,s(e,function(e,n){"object"==(void 0===(r=(0,o.isString)(r)?l.get(r):r)?"undefined":i(r))?r.run(c):r(c);var s=[t,n.shortcut,e];a.trigger.apply(a,["keymap:emit"].concat(s)),a.trigger.apply(a,["keymap:emit:"+t].concat(s))}),a.trigger("keymap:add",u),u},get:function(t){return n[t]},getAll:function(){return n},remove:function(t){var e=this.em,i=this.get(t);if(i)return delete n[t],s.unbind(i.keys),e&&e.trigger("keymap:remove",i),i}}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)).default.$;t.exports={setKey:function(t,e){},getElementRect:function(t){var e=this.opts.posFetcher||"";return e?e(t,{avoidFrameOffset:1}):function(t,e){var n=e||window,i=t.getBoundingClientRect();return{left:i.left+n.pageXOffset,top:i.top+n.pageYOffset,width:i.width,height:i.height}}(t)},init:function(t){return this.setOptions(t),this.handleMouseDown=this.handleMouseDown.bind(this),this.drag=this.drag.bind(this),this.move=this.move.bind(this),this.stop=this.stop.bind(this),this.setKey("up, right, down, left",this.handleKey),this},setOptions:function(t){this.opts=t||{}},focus:function(t){if(!t||t!==this.el){this.getDocumentEl(t),this.blur(),this.el=t,this.handlers=this.opts.dragHandlers||[t];var e=this.getElementRect(t);this.elRect=e,this.startTop=e.top,this.startLeft=e.left,this.getDocumentEl().on("mousedown",this.handleMouseDown)}},blur:function(){this.getDocumentEl().off("mousedown",this.handleMouseDown),this.el=null},start:function(t){this.startPos=this.getMousePos(t);var e=this.getDocumentEl();e.on("mousemove",this.drag),e.on("mouseup",this.stop);var n=this.opts.onStart;"function"==typeof n&&n(t,{docs:e,el:this.el,start:this.startPos,elRect:this.elRect}),this.drag(t)},stop:function(t){var e=this.getDocumentEl();e.off("mousemove",this.drag),e.off("mouseup",this.stop),this.lockedAxis=null;var n=this.opts.onEnd;"function"==typeof n&&n(t,{docs:e,delta:this.delta,end:{x:this.startLeft+this.delta.x,y:this.startTop+this.delta.y}})},handleMouseDown:function(t){var e=t.target;this.isHandler(e)&&this.start(t)},isHandler:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1},handleKey:function(t,e){switch(e.shortcut){case"up":this.move(0,-1);break;case"right":this.move(1,0);break;case"down":this.move(0,1);break;case"left":this.move(-1,0)}},getDocumentEl:function(t){t=t||this.el;if(!this.$doc){var e=[document];t&&e.push(t.ownerDocument),this.$doc=i(e)}return this.$doc},getMousePos:function(t){var e=this.opts.mousePosFetcher;return e?e(t):{x:t.clientX,y:t.clientY}},drag:function(t){var e=this.lockedAxis,n=this.getMousePos(t),i={x:n.x-this.startPos.x,y:n.y-this.startPos.y};if(t.shiftKey){if(!e){var r=i.x,o=i.y,s=Math.abs(r),a=Math.abs(o);o>=s||o<=-s?e="x":(r>a||r<-a)&&(e="y")}}else e=null;"x"===e&&(i.x=this.startPos.x),"y"===e&&(i.y=this.startPos.y),this.lockedAxis=e,this.delta=i,this.move(i.x,i.y);var l=this.opts.onDrag;"function"==typeof l&&l(t,{delta:i,current:{x:this.startLeft+i.x,y:this.startTop+i.y},lockedAxis:e}),0===t.which&&this.stop(t)},move:function(t,e){this.moveX(t),this.moveY(e)},moveX:function(t){var e=this.el,n=(this.opts,this.startLeft+t),i=this.opts.setX;"function"==typeof i?i(n,{el:e,start:this.startLeft,delta:t}):e.style.left=n+"px"},moveY:function(t){var e=this.el,n=(this.opts,this.startTop+t),i=this.opts.setY;"function"==typeof i?i(n,{el:e,start:this.startTop,delta:t}):e.style.top=n+"px"}}},function(t,e,n){"use strict";var i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.setOptions(e),(0,r.bindAll)(this,"handleKeyDown","handleMouseDown","move","stop"),this}return i(t,[{key:"getConfig",value:function(){return this.opts}},{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opts=(0,r.defaults)(t,s),this.setup()}},{key:"setup",value:function(){var t=this.opts,e=t.prefix||"",n=t.appendTo||document.body,i=this.container;for(i||((i=document.createElement("div")).className=e+"resizer-c",n.appendChild(i),this.container=i);i.firstChild;)i.removeChild(i.firstChild);var r={};for(var o in["tl","tc","tr","cl","cr","bl","bc","br"].forEach(function(e){return r[e]=t[e]?function(t,e){var n=e.prefix||"",i=document.createElement("i");return i.className=n+"resizer-h "+n+"resizer-h-"+t,i.setAttribute("data-"+n+"handler",t),i}(e,t):""}),r){var s=r[o];s&&i.appendChild(s)}this.handlers=r,this.mousePosFetcher=t.mousePosFetcher,this.updateTarget=t.updateTarget,this.posFetcher=t.posFetcher,this.onStart=t.onStart,this.onMove=t.onMove,this.onEnd=t.onEnd}},{key:"toggleFrames",value:function(t){if(this.opts.silentFrames){var e=document.querySelectorAll("iframe");(0,r.each)(e,function(e){return e.style.pointerEvents=t?"none":""})}}},{key:"isHandler",value:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1}},{key:"getFocusedEl",value:function(){return this.el}},{key:"getDocumentEl",value:function(){return[this.el.ownerDocument,document]}},{key:"getElementPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.posFetcher||"";return n?n(t,e):function(t,e){var n=e||window,i=t.getBoundingClientRect();return{left:i.left+n.pageXOffset,top:i.top+n.pageYOffset,width:i.width,height:i.height}}(t)}},{key:"focus",value:function(t){if(!t||t!==this.el){this.el=t;var e=this.opts,n=this.getElementPos(t,{target:"container"}),i=this.container.style;e.avoidContainerUpdate||(i.left=n.left+"px",i.top=n.top+"px",i.width=n.width+"px",i.height=n.height+"px",i.display="block"),(0,o.on)(this.getDocumentEl(),"mousedown",this.handleMouseDown)}}},{key:"blur",value:function(){this.container.style.display="none",this.el&&((0,o.off)(this.getDocumentEl(),"mousedown",this.handleMouseDown),this.el=null)}},{key:"start",value:function(t){if(0===t.button){t.preventDefault(),t.stopPropagation();var e=this.el,n=this.opts||{},i="data-"+n.prefix+"handler",s=this.getElementPos(e,{target:"el"});this.handlerAttr=t.target.getAttribute(i),this.clickedHandler=t.target,this.startDim={t:s.top,l:s.left,w:s.width,h:s.height},this.rectDim={t:s.top,l:s.left,w:s.width,h:s.height},this.startPos={x:t.clientX,y:t.clientY};var a=this.getDocumentEl();(0,o.on)(a,"mousemove",this.move),(0,o.on)(a,"keydown",this.handleKeyDown),(0,o.on)(a,"mouseup",this.stop),(0,r.isFunction)(this.onStart)&&this.onStart(t,{docs:a,config:n,el:e,resizer:this}),this.toggleFrames(1),this.move(t)}}},{key:"move",value:function(t){var e=this.onMove,n=this.mousePosFetcher,i=n?n(t):{x:t.clientX,y:t.clientY};this.currentPos=i,this.delta={x:i.x-this.startPos.x,y:i.y-this.startPos.y},this.keys={shift:t.shiftKey,ctrl:t.ctrlKey,alt:t.altKey},this.rectDim=this.calc(this),this.updateRect(0),e&&e(t),0===t.which&&this.stop(t)}},{key:"stop",value:function(t){var e=this.opts,n=this.getDocumentEl();(0,o.off)(n,"mousemove",this.move),(0,o.off)(n,"keydown",this.handleKeyDown),(0,o.off)(n,"mouseup",this.stop),this.updateRect(1),this.toggleFrames(),(0,r.isFunction)(this.onEnd)&&this.onEnd(t,{docs:n,config:e})}},{key:"updateRect",value:function(t){var e=this.el,n=this.opts,i=this.rectDim,o=this.container.style,s=this.updateTarget,a=this.getSelectedHandler(),l=n.unitHeight,c=n.unitWidth,u=n.keyWidth,h=n.keyHeight;if((0,r.isFunction)(s))s(e,i,{store:t,selectedHandler:a,resizer:this,config:n});else{var d=e.style;d[u]=i.w+c,d[h]=i.h+l}var f=this.getElementPos(e,{target:"container"});n.avoidContainerUpdate||(o.left=f.left+"px",o.top=f.top+"px",o.width=f.width+"px",o.height=f.height+"px")}},{key:"getSelectedHandler",value:function(){var t=this.handlers;if(this.selectedHandler)for(var e in t)if(t[e]===this.selectedHandler)return e}},{key:"handleKeyDown",value:function(t){27===t.keyCode&&(this.rectDim=this.startDim,this.stop(t))}},{key:"handleMouseDown",value:function(t){var e=t.target;this.isHandler(e)?(this.selectedHandler=e,this.start(t)):e!==this.el&&(this.selectedHandler="",this.blur())}},{key:"calc",value:function(t){var e=void 0,n=this.opts||{},i=n.step,r=this.startDim,s=n.minDim,a=n.maxDim,l=t.delta.x,c=t.delta.y,u=r.w,h=r.h,d={t:0,l:0,w:u,h:h};if(t){var f=t.handlerAttr;~f.indexOf("r")&&(e=(0,o.normalizeFloat)(u+l*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("b")&&(e=(0,o.normalizeFloat)(h+c*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.h=e),~f.indexOf("l")&&(e=(0,o.normalizeFloat)(u-l*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("t")&&(e=(0,o.normalizeFloat)(h-c*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.h=e);var p=n.ratioDefault?!t.keys.shift:t.keys.shift;if(f.indexOf("c")<0&&p){var g=r.w/r.h;d.w/d.h>g?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~f.indexOf("l")&&(d.l=r.w-d.w),~f.indexOf("t")&&(d.t=r.h-d.h),d}}}]),t}();t.exports={init:function(t){return new a(t)}}},function(t,e,n){"use strict";(function(e){var i=Object.assign||function(t){for(var e=1;es+c-10||ra+l-10)return 1},getCurrentPos:function(){var t=this.eventMove;return{x:t.pageX||0,y:t.pageY||0}},getDim:function(t){var e,n,i,r;if(this.canvasRelative&&this.em){var o=this.em.get("Canvas").getElementPos(t),s=window.getComputedStyle(t),a=parseFloat(s.marginTop),l=parseFloat(s.marginBottom),c=parseFloat(s.marginRight),u=parseFloat(s.marginLeft);e=o.top-a,n=o.left-u,i=o.height+a+l,r=o.width+u+c}else{var h=this.offset(t);e=this.relative?t.offsetTop:h.top-(this.wmargin?-1:1)*this.elT,n=this.relative?t.offsetLeft:h.left-(this.wmargin?-1:1)*this.elL,i=t.offsetHeight,r=t.offsetWidth}return[e,n,i,r]},getChildrenDim:function(t){var e=[];if(!t)return e;var n=this.getTargetModel(t);n&&n.view&&!this.ignoreViewChildren&&(t=n.view.getChildrenContainer());for(var i=t.children,r=0,o=i.length;rs||s>a+c-r||l+r>o||o>l+u-r)&&(i=1),!!i},findPosition:function(t,e,n){for(var i={index:0,method:"before"},r=0,o=0,s=0,a=0,l=0,c=0,u=0,h=0,d=0,f=t.length;do||a&&c>=a||r&&s0&&void 0!==arguments[0]?arguments[0]:{};this.config=e,this.set("Config",e),this.set("modules",[]),this.set("toLoad",[]),this.set("storables",[]),e.el&&e.fromElement&&(this.config.components=e.el.innerHTML),this.attrsOrig=e.el?[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:null,n=this.get("StorageManager");this.get("toLoad").forEach(function(t){t.onLoad()});var i=function(){t.get("modules").forEach(function(e){return e.postLoad&&e.postLoad(t)}),e&&e()};n&&n.canAutoload()?this.load(i):i()},updateChanges:function(){var t=this.get("StorageManager"),e=this.get("changesCount");this.config.noticeOnUnload&&e?window.onbeforeunload=function(t){return 1}:window.onbeforeunload=null,t.isAutosave()&&e>=t.getStepsBeforeSave()&&this.store()},loadModule:function(t){var e=this.config,n=new t,r=e[n.name.charAt(0).toLowerCase()+n.name.slice(1)]||e[n.name]||{};r.pStylePrefix=e.pStylePrefix||"";var o=this.get("StorageManager");if(n.storageKey&&n.store&&n.load&&o){r.stm=o;var s=this.get("storables");s.push(n),this.set("storables",s)}return r.em=this,n.init(i({},r)),!n.private&&this.set(n.name,n),n.onLoad&&this.get("toLoad").push(n),this.get("modules").push(n),this},init:function(t){this.set("Editor",t)},getEditor:function(){return this.get("Editor")},handleUpdates:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.temporary||(c&&clearInterval(c),c=setTimeout(function(){i.avoidStore||n.set("changesCount",n.get("changesCount")+1,i)},0))},componentHovered:function(t,e,n){var i=this.previous("componentHovered");i&&this.trigger("component:unhovered",i,n),e&&this.trigger("component:hovered",e,n)},getSelected:function(){return this.get("selected").last()},getSelectedAll:function(){return this.get("selected").models},setSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,r.isArray)(t),s=i?t:[t],a=this.get("selected");i&&this.removeSelected(a.filter(function(t){return!(0,r.contains)(s,t)})),s.forEach(function(t){var r=(0,o.getModel)(t,u);r&&!r.get("selectable")||(!i&&e.removeSelected(a.filter(function(t){return t!==r})),e.addSelected(r,n))})},addSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.getModel)(t,u);((0,r.isArray)(i)?i:[i]).forEach(function(t){t&&!t.get("selectable")||e.get("selected").push(t,n)})},removeSelected:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.get("selected").remove((0,o.getModel)(t,u),e)},toggleSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.getModel)(t,u);((0,r.isArray)(i)?i:[i]).forEach(function(t){e.get("selected").contains(t)?e.removeSelected(t,n):e.addSelected(t,n)})},setHovered:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,o.getModel)(t,u);n&&!n.get("hoverable")||(e.forceChange&&this.set("componentHovered",""),this.set("componentHovered",n,e))},setComponents:function(t){return this.get("DomComponents").setComponents(t)},getComponents:function(){var t=this.get("DomComponents"),e=this.get("CodeManager");if(t&&e){var n=t.getComponents();return e.getCode(n,"json")}},setStyle:function(t){for(var e=this.get("CssComposer").getAll(),n=0,i=e.length;n"+i+"<\/script>":""},getCss:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.config,n=e.wrappesIsBody,i=t.avoidProtected,o=(0,r.isUndefined)(t.keepUnusedStyles)?e.keepUnusedStyles:t.keepUnusedStyles,s=this.get("CssComposer"),a=this.get("DomComponents").getComponent();return(i?"":e.protectedCss)+this.get("CodeManager").getCode(a,"css",{cssc:s,wrappesIsBody:n,keepUnusedStyles:o})},getJs:function(){var t=this.get("DomComponents").getWrapper();return this.get("CodeManager").getCode(t,"js").trim()},store:function(t){var e=this,n=this.get("StorageManager"),i={};if(n)return this.get("storables").forEach(function(t){var e=t.store(1);for(var n in e)i[n]=e[n]}),n.store(i,function(n){t&&t(n),e.set("changesCount",0),e.trigger("storage:store",i)}),i},load:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.getCacheLoad(1,function(n){t.get("storables").forEach(function(t){return t.load(n)}),e&&e(n)})},getCacheLoad:function(t,e){var n=this,i=t?1:0;if(this.cacheLoad&&!i)return this.cacheLoad;var r=this.get("StorageManager"),o=[];if(!r)return{};this.get("storables").forEach(function(t){var e=t.storageKey;((e="function"==typeof e?e():e)instanceof Array?e:[e]).forEach(function(t){o.push(t)})}),r.load(o,function(t){n.cacheLoad=t,e&&e(t),setTimeout(function(){return n.trigger("storage:load",t)},0)})},getDeviceModel:function(){var t=this.get("device");return this.get("DeviceManager").get(t)},runDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&!this.defaultRunning&&(e.stop(this,this,t),e.run(this,this,t),this.defaultRunning=1)},stopDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&(e.stop(this,this,t),this.defaultRunning=0)},refreshCanvas:function(){this.set("canvasOffset",this.get("Canvas").getOffset())},clearSelection:function(t){(t||window).getSelection().removeAllRanges()},getCurrentMedia:function(){var t=this.config,e=this.getDeviceModel(),n=t.mediaCondition,i=t.devicePreviewMode,r=e&&e.get("widthMedia");return e&&r&&!i?"("+n+": "+r+")":""},getWrapper:function(){return this.get("DomComponents").getWrapper()},getDirtyCount:function(){return this.get("changesCount")},destroyAll:function(){var t=this.attributes,e=t.DomComponents,n=t.CssComposer,i=t.UndoManager,r=t.Panels,o=t.Canvas;e.clear(),n.clear(),i.clear().removeAll(),r.getPanels().reset(),o.getCanvasView().remove(),this.view.remove(),this.stopListening(),u(this.config.el).empty().attr(this.attrsOrig)},setEditing:function(t){return this.set("editing",t),this},isEditing:function(){return!!this.get("editing")},data:function(t,e,n){if(t["_gjs-data"]||(t["_gjs-data"]={}),(0,r.isUndefined)(n))return t["_gjs-data"][e];t["_gjs-data"][e]=n}})},function(t,e,n){"use strict";t.exports={stylePrefix:"gjs-",components:"",style:"",fromElement:0,noticeOnUnload:!0,showOffsets:!1,showOffsetsSelected:!1,forceClass:!0,height:"900px",width:"100%",baseCss:"\n * {\n box-sizing: border-box;\n }\n html, body, #wrapper {\n min-height: 100%;\n }\n body {\n margin: 0;\n height: 100%;\n background-color: #fff\n }\n #wrapper {\n overflow: auto;\n overflow-x: hidden;\n }\n\n * ::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1)\n }\n\n * ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2)\n }\n\n * ::-webkit-scrollbar {\n width: 10px\n }\n ",protectedCss:"* { box-sizing: border-box; } body {margin: 0;}",canvasCss:"",defaultCommand:"select-comp",showToolbar:1,allowScripts:0,showDevices:1,devicePreviewMode:0,mediaCondition:"max-width",tagVarStart:"{[ ",tagVarEnd:" ]}",keepEmptyTextNodes:0,jsInHtml:!0,nativeDnD:1,multipleSelection:1,exportWrapper:0,wrappesIsBody:1,avoidInlineStyle:0,avoidDefaults:0,clearStyles:0,el:"",undoManager:{},assetManager:{},canvas:{},layers:{},storageManager:{},rte:{},domComponents:{},modal:{},codeManager:{},panels:{},commands:{},cssComposer:{},selectorManager:{},deviceManager:{devices:[{name:"Desktop",width:""},{name:"Tablet",width:"768px",widthMedia:"992px"},{name:"Mobile landscape",width:"568px",widthMedia:"768px"},{name:"Mobile portrait",width:"320px",widthMedia:"480px"}]},styleManager:{sectors:[{name:"General",open:!1,buildProps:["float","display","position","top","right","left","bottom"]},{name:"Dimension",open:!1,buildProps:["width","height","max-width","min-height","margin","padding"]},{name:"Typography",open:!1,buildProps:["font-family","font-size","font-weight","letter-spacing","color","line-height","text-align","text-shadow"],properties:[{property:"text-align",list:[{value:"left",className:"fa fa-align-left"},{value:"center",className:"fa fa-align-center"},{value:"right",className:"fa fa-align-right"},{value:"justify",className:"fa fa-align-justify"}]}]},{name:"Decorations",open:!1,buildProps:["border-radius-c","background-color","border-radius","border","box-shadow","background"]},{name:"Extra",open:!1,buildProps:["transition","perspective","transform"]}]},blockManager:{},traitManager:{},textViewCode:"Code",keepUnusedStyles:0}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(20));t.exports=function(t){var e=t||{},r=n(233),o=n(232),s=n(89);for(var a in r)a in e||(e[a]=r[a]);e.pStylePrefix=e.stylePrefix;var l=new o(e),c=new s({model:l,config:e});return{$:i.default,editor:l,DomComponents:l.get("DomComponents"),LayerManager:l.get("LayerManager"),CssComposer:l.get("CssComposer"),StorageManager:l.get("StorageManager"),AssetManager:l.get("AssetManager"),BlockManager:l.get("BlockManager"),TraitManager:l.get("TraitManager"),SelectorManager:l.get("SelectorManager"),CodeManager:l.get("CodeManager"),Commands:l.get("Commands"),Keymaps:l.get("Keymaps"),Modal:l.get("Modal"),Panels:l.get("Panels"),StyleManager:l.get("StyleManager"),Canvas:l.get("Canvas"),UndoManager:l.get("UndoManager"),DeviceManager:l.get("DeviceManager"),RichTextEditor:l.get("RichTextEditor"),Utils:l.get("Utils"),Config:l.get("Config"),init:function(){return l.init(this),this},getConfig:function(t){return l.getConfig(t)},getHtml:function(t){return l.getHtml(t)},getCss:function(t){return l.getCss(t)},getJs:function(){return l.getJs()},getComponents:function(){return l.get("DomComponents").getComponents()},setComponents:function(t){return l.setComponents(t),this},addComponents:function(t,e){return this.getComponents().add(t,e)},getStyle:function(){return l.get("CssComposer").getAll()},setStyle:function(t){return l.setStyle(t),this},getSelected:function(){return l.getSelected()},getSelectedAll:function(){return l.getSelectedAll()},getSelectedToStyle:function(){var t=l.getSelected();if(t)return this.StyleManager.getModelToStyle(t)},select:function(t){return l.setSelected(t),this},selectAdd:function(t){return l.addSelected(t),this},selectRemove:function(t){return l.removeSelected(t),this},selectToggle:function(t){return l.toggleSelected(t),this},setDevice:function(t){return l.set("device",t),this},getDevice:function(){return l.get("device")},runCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callRun(this,e)),n},stopCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callStop(this,e)),n},store:function(t){return l.store(t)},load:function(t){return l.load(t)},getContainer:function(){return e.el},getDirtyCount:function(){return l.getDirtyCount()},refresh:function(){l.refreshCanvas()},setCustomRte:function(t){this.RichTextEditor.customRte=t},on:function(t,e){return l.on(t,e)},off:function(t,e){return l.off(t,e)},trigger:function(t){return l.trigger.apply(l,arguments)},destroy:function(){return l.destroyAll()},getEl:function(){return c.el},getModel:function(){return l},render:function(){var t=this;return l.on("loaded",function(){t.UndoManager.clear(),l.get("modules").forEach(function(t){t.postRender&&t.postRender(c)})}),c.render(),c.el}}}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},a=r.container;if(!a)throw new Error("'container' is required");(r=i({},n,r)).el=(0,s.isElement)(a)?a:document.querySelector(a);var l=new o.default(r).init();return r.plugins.forEach(function(e){var n=t.get(e);n?n(l,r.pluginsOpts[e]||{}):console.warn("Plugin "+e+" not found")}),l.getModel().loadOnStart(),r.autorender&&l.render(),e.push(l),l}}}()}])}); \ No newline at end of file diff --git a/docs/guides/Replace-Rich-Text-Editor.html b/docs/guides/Replace-Rich-Text-Editor.html new file mode 100644 index 000000000..45ce66318 --- /dev/null +++ b/docs/guides/Replace-Rich-Text-Editor.html @@ -0,0 +1,103 @@ + + + + + + Replace the built-in Rich Text Editor | GrapesJS + + + + + + + + + +

    Replace the built-in Rich Text Editor

    As you might have noticed the default Rich Text Editor (RTE) is really tiny and so doesn't seem like a complete solution as a text editor. Instead of showing how to add new commands inside the default one we'll show how to completely replace it with another one.

    In the following guide we'll integrate the CKEditor and to accomplish this task we just need to provide few functions to the GrapesJS API method setCustomRte as an interface.

    Interface

    Enable

    The first step is to indicate how to enable the third-party library and so for we gonna start with the enable() function. This method should take care of the first initialization of our custom RTE but also for the next time is called on the same element, this is why there is the rte argument.

    var editor = grapesjs.init({...});
    +editor.setCustomRte({
    +  /**
    +   * Enabling the custom RTE
    +   * @param  {HTMLElement} el This is the HTML node which was selected to be edited
    +   * @param  {Object} rte It's the instance you'd return from the first call of enable().
    +   *                      At the first call it'd be undefined. This is useful when you need
    +   *                      to check if the RTE is already enabled on the component
    +   * @return {Object} The return should be the RTE initialized instance
    +   */
    +  enable: function(el, rte) {
    +    // If already exists just focus
    +    if (rte) {
    +      this.focus(el, rte); // implemented later
    +      return rte;
    +    }
    +
    +    // CKEditor initialization
    +    rte = CKEDITOR.inline(el, {
    +      // Your configurations...
    +      toolbar: [...],
    +      // IMPORTANT
    +      // Generally, inline editors are attached exactly at the same position of
    +      // the selected element but in this case it'd work until you start to scroll
    +      // the canvas. For this reason you have to move the RTE's toolbar inside the
    +      // one from GrapesJS. For this purpose we used a plugin which simplify
    +      // this process and move all next CKEditor's toolbars inside our indicated
    +      // element
    +      sharedSpaces: {
    +        top: editor.RichTextEditor.getToolbarEl(),
    +      }
    +    });
    +
    +    this.focus(el, rte); // implemented later
    +    return rte;
    +  },
    +});
    +

    Disable

    Once we know how to enable the RTE let's implement the method which disable it, so let's create the disable() function.

    editor.setCustomRte({
    +  // ...
    +  /**
    +   * The signature of the function is the same of the enable
    +   */
    +  disable: function(el, rte) {
    +    el.contentEditable = false;
    +    if (rte && rte.focusManager) {
    +      rte.focusManager.blur(true);
    +    }
    +  },
    +});
    +

    Focus

    The focus() method is just a helper used inside enable() and not required by the interface

    editor.setCustomRte({
    +  // ...
    +  focus: function (el, rte) {
    +    // Do nothing if already focused
    +    if (rte && rte.focusManager.hasFocus) {
    +      return;
    +    }
    +    el.contentEditable = true;
    +    rte && rte.focus();
    +  },
    +});
    +

    Toolbar position

    Sometimes the default top-left position of the toolbar is not always what you need. For example, when you scroll the canvas and the toolbar reaches the top, you'd like to move it down. For this purpose, you can add a listener which applies your logic in this way:

    editor.on('rteToolbarPosUpdate', (pos) => {
    +  if (pos.top <= pos.canvasTop) {
    +    pos.top = pos.elementTop + pos.elementHeight;
    +  }
    +});
    +

    The built-in vs third-party

    The only one thing you have to keep in mind when using a custom RTE is that all the content and its behavior are handled by the library itself, the GrapesJS's component will just store the content as it is. +For example, when you create a link using the built-in RTE then you'll be able to select it and edit its href via Component Settings. With a custom RTE, it will be its own task to show the proper modal for the link editing. +Obviously, each third-party library has its own APIs and can present some limitations and drawbacks, so, a minimal knowledge of the library is a plus.

    Plugins

    For the CKEditor, you can find a complete plugin here grapesjs-plugin-ckeditor.

    Last Updated: 7/7/2018, 4:23:32 PM
    + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..9d91130a3 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,42 @@ + + + + + + Introduction | GrapesJS + + + + + + + + + +

    Introduction

    What is GrapesJS?

    At first look you might probably think it's just another kind of page/HTML builder, but actually is something more. GrapesJS is a multi-purpose, Web Builder Framework, which means it allows you easily create your, drag & drop enabled, builder of "THINGS". For "THINGS" we consider anything web structure related, so HTML at first, but don't just think about web pages, we use HTML-like structure basically everywhere: Newsletters (eg. MJML), Native Mobile Applications (eg. React Native), Native Desktop Applications (eg. Vuido), PDFs (eg. React PDF), etc. So, for everything you can imagine as a set of elements like <tag some="attribute">... other nested elements ...</tag> you can create easily a GrapesJS builder around it and then use it independently in some of your applications. +GrapesJS comes along with different features and tools which enable you to craft easy to use builders, which will allow your users to create complex HTML-like templates without any knowledge of coding.

    Why GrapesJS?

    Mainly, GrapesJS was designed to be used inside some CMS to speed up the creation of dynamic templates and replace common WYSIWYG editors, which are good for content editing but inappropriate for creating HTML structures. Then, with the same concept, instead of creating just an application we decided to create a framework that could be extended and used by everyone for any kind purpose.

    Quick Start

    To show up of what GrapesJS is capable of we have created some presets.

    You can actually use them as a starting point for your editors, so, just follow the instructions on their repositories to get a quick start for your builder.

    Download

    Latest version: npm

    You can download GrapesJS from one of this sources

    • CDNs +
      • unpkg +
        • https://unpkg.com/grapesjs
        • https://unpkg.com/grapesjs/dist/css/grapes.min.css
      • cdnjs +
        • https://cdnjs.cloudflare.com/ajax/libs/grapesjs/0.12.17/grapes.min.js
        • https://cdnjs.cloudflare.com/ajax/libs/grapesjs/0.12.17/css/grapes.min.css
    • npm +
      • npm i grapesjs
    • git +
      • git clone https://github.com/artf/grapesjs.git
    Last Updated: 7/14/2018, 1:29:46 AM
    + + + diff --git a/docs/input-custom-traits.png b/docs/input-custom-traits.png new file mode 100644 index 0000000000000000000000000000000000000000..37c731bf7296636b3dc3662d047061fe5e67f5f4 GIT binary patch literal 17206 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 g{r@L~1N#!#c?*kTAt$ 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 literal 0 HcmV?d00001 diff --git a/docs/modules/Assets.html b/docs/modules/Assets.html new file mode 100644 index 000000000..7f8f00a3a --- /dev/null +++ b/docs/modules/Assets.html @@ -0,0 +1,365 @@ + + + + + + Asset Manager | GrapesJS + + + + + + + + + +

    Asset Manager

    GrapesJS - Asset Manager

    In this section, you will see how to setup and take the full advantage of built-in Asset Manager in GrapesJS, which is intentionally lightweight and implements just an image in its core, but as you'll see next it's easy to extend and create your own asset types.

    Configuration

    To change default configurations you have to pass assetManager property with the main configuration object

    const editor = grapesjs.init({
    +  ...
    +  assetManager: {
    +    assets: [...],
    +    ...
    +  }
    +});
    +

    You can update most of them later by using getConfig inside of the module

    const amConfig = editor.AssetManager.getConfig();
    +

    Below the list of currently available options

      // Default assets
    +  // eg. [
    +  //  'https://...image1.png',
    +  //  'https://...image2.png',
    +  //  {type: 'image', src: 'https://...image3.png', someOtherCustomProp: 1},
    +  //  ..
    +  // ]
    +  assets: [],
    +
    +  // Content to add where there is no assets to show
    +  // eg. 'No <b>assets</b> here, drag to upload'
    +  noAssets: '',
    +
    +  // Upload endpoint, set `false` to disable upload
    +  // upload: 'https://endpoint/upload/assets',
    +  // upload: false,
    +  upload: 0,
    +
    +  // The name used in POST to pass uploaded files
    +  uploadName: 'files',
    +
    +  // Custom headers to pass with the upload request
    +  headers: {},
    +
    +  // Custom parameters to pass with the upload request, eg. csrf token
    +  params: {},
    +
    +  // If true, tries to add automatically uploaded assets.
    +  // To make it work the server should respond with a JSON containing assets
    +  // in a data key, eg:
    +  // {
    +  //  data: [
    +  //    'https://.../image.png',
    +  //    ...
    +  //    {src: 'https://.../image2.png'},
    +  //    ...
    +  //  ]
    +  // }
    +  autoAdd: 1,
    +
    +  // Text on upload input
    +  uploadText: 'Drop files here or click to upload',
    +
    +  // Label for the add button
    +  addBtnText: 'Add image',
    +
    +  // Custom uploadFile function
    +  // @example
    +  // uploadFile: (e) => {
    +  //   var files = e.dataTransfer ? e.dataTransfer.files : e.target.files;
    +  //   // ...send somewhere
    +  // }
    +  uploadFile: '',
    +
    +  // Handle the image url submit from the built-in 'Add image' form
    +  // @example
    +  // handleAdd: (textFromInput) => {
    +  //   // some check...
    +  //   editor.AssetManager.add(textFromInput);
    +  // }
    +  handleAdd: '',
    +
    +  // Enable an upload dropzone on the entire editor (not document) when dragging
    +  // files over it
    +  dropzone: 1,
    +
    +  // Open the asset manager once files are been dropped via the dropzone
    +  openAssetsOnDrop: 1,
    +
    +  // Any dropzone content to append inside dropzone element
    +  dropzoneContent: '',
    +
    +  // Default title for the asset manager modal
    +  modalTitle: 'Select Image',
    +

    Not always docs are in inline with its code, therefore we'd suggest to keep an eye at the current state of configurations by checking the dedicated source file Asset Manager Config

    Initialization

    The Asset Manager is ready to work by default, so just pass few urls to see them loaded

    const editor = grapesjs.init({
    +  ...
    +  assetManager: {
    +    assets: [
    +     'http://placehold.it/350x250/78c5d6/fff/image1.jpg',
    +     // Pass an object with your properties
    +     {
    +       type: 'image',
    +       src: 'http://placehold.it/350x250/459ba8/fff/image2.jpg',
    +       height: 350,
    +       width: 250
    +     },
    +     {
    +       // As the 'image' is the base type of assets, omitting it will
    +       // be set as `image` by default
    +       src: 'http://placehold.it/350x250/79c267/fff/image3.jpg',
    +       height: 350,
    +       width: 250
    +     },
    +    ],
    +  }
    +});
    +

    If you want a complete list of available properties check the source AssetImage Model

    The built-in Asset Manager modal is implemented and is showing up when requested. By default, you can make it appear by dragging Image Components in canvas, double clicking on images and all other stuff related to images (eg. CSS styling)

    Showing up of the modal is registered with a command, so you can make it appear with this

    // This command shows only assets with `image` type
    +editor.runCommand('open-assets');
    +

    Worth nothing that by doing this you can't do much with assets (if you double click on them nothing happens) and this is because you've not indicated any target. Try just to select an image in your canvas and run this in console (you should first make the editor globally available window.editor = editor; in your script)

    editor.runCommand('open-assets', {
    +  target: editor.getSelected()
    +});
    +

    Now you should be able to change the image of the component.

    Customization

    If you want to customize the Asset Manager after the initialization you have to use its APIs

    // Get the Asset Manager module first
    +const am = editor.AssetManager;
    +

    First of all, it's worth nothing that Asset Manager keeps 2 collections of assets:

    • global - which is just the one with all available assets, you can get it with am.getAll()
    • visible - this is the collection which is currently rendered by the Asset Manager, you get it with am.getAllVisible()

    This allows you to decide which assets to show and when. Let's say we'd like to have a category switcher, first of all you gonna add to the global collection all your assets (which you may already defined at init by config.assetManager.assets = [...])

    am.add([
    +  {
    +    // You can pass any custom property you want
    +    category: 'c1',
    +    src: 'http://placehold.it/350x250/78c5d6/fff/image1.jpg',
    +  }, {
    +    category: 'c1',
    +    src: 'http://placehold.it/350x250/459ba8/fff/image2.jpg',
    +  }, {
    +    category: 'c2',
    +    src: 'http://placehold.it/350x250/79c267/fff/image3.jpg',
    +  }
    +  // ...
    +]);
    +

    Now if you call the render(), without any argument, you will see all the assets rendered

    // without any argument
    +am.render();
    +
    +am.getAll().length // <- 3
    +am.getAllVisible().length // <- 3
    +

    Ok, now let's show only assets form the first category

    const assets = am.getAll();
    +
    +am.render(assets.filter(
    +  asset => asset.get('category') == 'c1'
    +));
    +
    +am.getAll().length // Still have 3 assets
    +am.getAllVisible().length // but only 2 are shown
    +

    Obviously, you can mix more arrays of assets

    am.render([...assets1, ...assets2, ...assets3]);
    +

    If you want to customize the asset manager container you can get its HTMLElement

    am.getContainer().insertAdjacentHTML('afterbegin', '<div><button type="button">Click</button></div>');
    +

    For more APIs methods check out the API Reference

    Define new Asset type

    Generally speaking, an asset is not only an image, it could be a video, svg-icon, or any other kind of document. Each type of the asset is applied in our templates/pages differently. If you need to change the image of the Component all you need is another url in src attribute, but in case of svg-icon, for instance, its not the same, you might want to replace the element with a new <svg> content. Besides this you also have to deal with the presentation/preview of the asset inside the panel/modal, like for example showing a thumbnail for big images or the possibility to preview videos.

    Defining a new asset it means we have to push on top of the 'Stack of Types' a new layer. This stack is iterated by the editor at any addition of the asset and tries to associate the correct type.

    am.add('https://.../image.png');
    +// string, url, ends with '.png' -> it's an 'image' type
    +
    +am.add('<svg ...');
    +// string and starts with '<svg...' -> 'svg' type
    +
    +am.add({type: 'video', src: '...'});
    +// an object, has 'video' type key -> 'video' type
    +

    Obviously, it's up to you tell the editor how to recognize your type and for this purpose you have to use isType() method. +Let's see now an example of how we'd start to defining a type like svg-icon

    am.addType('svg-icon', {
    +  // `value` is for example the argument passed in `am.add(VALUE);`
    +  isType(value) {
    +    // The condition is intentionally simple
    +    if (value.substring(0, 5) == '<svg ') {
    +      return {
    +        type: 'svg-icon',
    +        svgContent: value
    +      };
    +    }
    +    // Maybe you pass the `svg-icon` object already
    +    else if (typeof value == 'object' && value.type == 'svg-icon') {
    +      return value;
    +    }
    +  }
    +})
    +

    With this snippet you can already add SVGs, the asset manager will assign correctly the appropriate type.

    // Add some random SVG
    +am.add(`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
    +  <path d="M22,9 C22,8.4 21.5,8 20.75,8 L3.25,8 C2.5,8 2,8.4 2,9 L2,15 C2,15.6 2.5,16 3.25,16 L20.75,16 C21.5,16 22,15.6 22,15 L22,9 Z M21,15 L3,15 L3,9 L21,9 L21,15 Z"></path>
    +  <polygon points="4 10 5 10 5 14 4 14"></polygon>
    +</svg>`);
    +

    The default open-assets command shows only image assets, so to render svg-icon run this

    am.render(am.getAll().filter(
    +  asset => asset.get('type') == 'svg-icon'
    +));
    +

    You should see something like this

    The SVG asset is not correctly rendered and this is because we haven't yet configured its view

    am.addType('svg-icon', {
    +  view: {
    +    // `getPreview()` and `getInfo()` are just few helpers, you can
    +    // override the entire template with `template()`
    +    // Check the base `template()` here:
    +    // https://github.com/artf/grapesjs/blob/dev/src/asset_manager/view/AssetView.js
    +    getPreview() {
    +      return `<div style="text-align: center">${this.model.get('svgContent')}</div>`;
    +    },
    +    getInfo() {
    +      // You can use model's properties if you passed them:
    +      // am.add({
    +      //  type: 'svg-icon',
    +      //  svgContent: '<svg ...',
    +      //  name: 'Some name'
    +      //  })
    +      //  ... then
    +      //  this.model.get('name');
    +      return '<div>SVG description</div>';
    +    },
    +  },
    +  isType(value) {...}
    +})
    +

    This is the result

    Now we have to deal with how to assign our svgContent to the selected element

    am.addType('svg-icon', {
    +  view: {
    +    // In our case the target is the selected component
    +    updateTarget(target) {
    +      const svg = this.model.get('svgContent');
    +
    +      // Just to make things bit interesting, if it's an image type
    +      // I put the svg as a data uri, content otherwise
    +      if (target.get('type') == 'image') {
    +        // Tip: you can also use `data:image/svg+xml;utf8,<svg ...` but you
    +        // have to escape few chars
    +        target.set('src', `data:mime/type;base64,${btoa(svg)}`);
    +      } else {
    +        target.set('content', svg);
    +      }
    +    },
    +    ...
    +  },
    +  isType(value) {...}
    +})
    +

    Our custom svg-icon asset is ready to use, you can also add a model to the addType definition which should group the business logic of your asset but usually it's optional so you can skip this part.

    // Just an example of model use
    +am.addType('svg-icon', {
    +  model: {
    +    // With `default` you define model's default properties
    +    defaults: {
    +      type:  'svg-icon',
    +      svgContent: '',
    +      name: 'Default SVG Name',
    +    },
    +
    +    // You can call model's methods inside views:
    +    // const name = this.model.getName();
    +    getName() {
    +      return this.get('name');
    +    }
    +  },
    +  view: {...},
    +  isType(value) {...}
    +})
    +

    Extend Asset Types

    Extending asset types is basically the same as adding them, you can just choose what type to extend and how.

    // svgIconType will contain the definition (model, view, isType)
    +const svgIconType = am.getType('svg-icon');
    +
    +// Add new type and extend another one
    +am.addType('svg-icon2', {
    +  view: svgIconType.view.extend({
    +    getInfo() {
    +      return '<div>SVG2 description</div>';
    +    },
    +  }),
    +  // The `isType` is important, but if you omit it the default one will be added
    +  // isType(value) {
    +  //  if (value && value.type == id) {
    +  //    return {type: value.type};
    +  //  }
    +  // };
    +})
    +

    You can also extend the already defined types (to be sure to load assets with the old type extended create a plugin for your definitions)

    // Extend the original `image` and add a confirm dialog before removing it
    +am.addType('image', {
    +  // As you adding on top of an already defined type you can avoid indicating
    +  // `am.getType('image').view.extend({...` the editor will do it by default
    +  // but you can eventually extend some other type
    +  view: {
    +    // If you want to see more methods to extend check out
    +    // https://github.com/artf/grapesjs/blob/dev/src/asset_manager/view/AssetImageView.js
    +    onRemove(e) {
    +      e.stopPropagation();
    +      const model = this.model;
    +
    +      if (confirm('Are you sure?')) {
    +        model.collection.remove(model);
    +      }
    +    }
    +  },
    +})
    +

    Uploading assets

    Asset Manager includes an easy to use, drag and drop, uploader and integrates few UI helpers. The default uploader is already visible when you open the Asset Manager.

    You can click on the uploader to start select your files or just drag them directly from your computer to trigger the uploader. Obviously, before make it work you have to setup your server in order to receive your assets and specify the upload endpoint in configurations

    let editor = grapesjs.init({
    +  ...
    +  assetManager: {
    +    ...
    +    // Upload endpoint, set `false` to disable upload, default `false`
    +    upload: 'https://endpoint/upload/assets',
    +
    +    // The name used in POST to pass uploaded files, default: `'files'`
    +    uploadName: 'files',
    +    ...
    +  },
    +  ...
    +});
    +

    Listeners

    If you want to execute some action before/after the uploading process (eg. loading animation) or even on response, you can make use of these listeners

    // The upload is started
    +editor.on('asset:upload:start', () => {
    +  ...
    +  startAnimation();
    +});
    +
    +// The upload is ended (completed or not)
    +editor.on('asset:upload:end', () => {
    +  ...
    +  endAnimation();
    +});
    +
    +// Error handling
    +editor.on('asset:upload:error', (err) => {
    +  ...
    +  notifyError(err);
    +});
    +
    +// Do something on response
    +editor.on('asset:upload:response', (response) => {
    +  ...
    +});
    +

    Response

    When the uploading is over, by default (via config parameter autoAdd: 1), the editor expects to receive a JSON of uploaded assets in a data key as a response and tries to add them to the main collection. The JSON might look like this:

    {
    +  data: [
    +    'https://.../image.png',
    +    // ...
    +    {
    +      src: 'https://.../image2.png',
    +      type: 'image',
    +      height: 100,
    +      width: 200,
    +    },
    +    // ...
    +  ]
    +}
    +

    Setup Dropzone

    There is also another helper which improve the uploading of assets, a full-width editor dropzone.

    All you have to do is to activate it and possibly set a custom content (you might also want to hide the default uploader)

    const editor = grapesjs.init({
    +  ...
    +  assetManager: {
    +    ...,
    +    dropzone: 1,
    +    dropzoneContent: '<div class="dropzone-inner">Drop here your assets</div>'
    +  }
    +});
    +

    Events

    Currently available events you can listen to

    • asset:add - New asset added
    • asset:remove - Asset removed
    • asset:upload:start - Before the upload is started
    • asset:upload:end - After the upload is ended
    • asset:upload:error - On any error in upload, passes the error as an argument
    • asset:upload:response - On upload response, passes the result as an argument
    Last Updated: 7/12/2018, 6:13:47 PM
    + + + diff --git a/docs/modules/Blocks.html b/docs/modules/Blocks.html new file mode 100644 index 000000000..ae0e7bf35 --- /dev/null +++ b/docs/modules/Blocks.html @@ -0,0 +1,73 @@ + + + + + + Block Manager | GrapesJS + + + + + + + + + +

    Block Manager

    GrapesJS - Block Manager

    The Block is a group of Components and can be easily reused inside templates.

    To better understand the difference between components and blocks, the component is more atomic so, for example, a single image, a text box or a map fits perfectly in this concept. The block is what the end user will drag inside the canvas, so it could contain a single image (single Component) or the entire section like, for example, the footer with a lot of components inside (texts, images, inputs, etc).

    Check Components page to see the list of built-in components and how to create your own.

    Let's see how to add a new block to the editor using the Blocks API

    var editor = grapesjs.init({...});
    +var blockManager = editor.BlockManager;
    +
    +// 'my-first-block' is the ID of the block
    +blockManager.add('my-first-block', {
    +  label: 'Simple block',
    +  content: '<div class="my-block">This is a simple block</div>',
    +});
    +

    With this snippet a new block will be added to the collection. You can also update existent blocks

    blockManager.get('my-first-block').set({
    +  label: 'Updated simple block',
    +  attributes: {
    +    title: 'My title'
    +  }
    +})
    +

    As you see a simple HTML string is enough to create a block, the editor will do the rest. +If you want you could also pass an object representing the Component.

    blockManager.add('my-map-block', {
    +  label: 'Simple map block',
    +  content: {
    +    type: 'map', // Built-in 'map' component
    +    style: {
    +      height: '350px'
    +    },
    +    removable: false, // Once inserted it can't be removed
    +  }
    +})
    +

    From the v0.3.70 it's also possible to pass the HTML string with Component's properties as attributes.

    blockManager.add('the-row-block', {
    +  label: '2 Columns',
    +  content: '<div class="row" data-gjs-droppable=".row-cell" data-gjs-custom-name="Row">' +
    +      '<div class="row-cell" data-gjs-draggable=".row"></div>' +
    +      '<div class="row-cell" data-gjs-draggable=".row"></div>' +
    +    '</div>',
    +});
    +

    In the example above you're defining a row component which will accept only elements which match '.row-cell' selector and cells which could be dragged only inside '.row' elements. We're also defining the custom name which will be seen inside the Layers panel. +If you want to check the complete list of available Component's properties, check directly the Component model source: +https://github.com/artf/grapesjs/blob/dev/src/dom_components/model/Component.js

    Last Updated: 7/10/2018, 2:27:13 AM
    + + + diff --git a/docs/modules/Components-js.html b/docs/modules/Components-js.html new file mode 100644 index 000000000..d25519da7 --- /dev/null +++ b/docs/modules/Components-js.html @@ -0,0 +1,168 @@ + + + + + + Components & JS | GrapesJS + + + + + + + + + +

    Components & JS

    In this guide you'll see how to attach component related scripts and deal with external javascript libraries (for stuff like counters, galleries, slideshows, etc.)

    Basic scripts

    Let's see how to create a component with scripts using Blocks.

    editor.BlockManager.add('test-block', {
    +  label: 'Test block',
    +  attributes: {class: 'fa fa-text'},
    +  content: {
    +    script: "alert('Hi'); console.log('the element', this)",
    +    // Add some style just to make the component visible
    +    style: {
    +      width: '100px',
    +      height: '100px',
    +      'background-color': 'red',
    +    }
    +  }
    +});
    +

    Now if you drag the new block inside the canvas you'll see an alert popup and the message in console, as you might expected. +One thing worth noting is that this context is binded to the component element, so, for example, if you want to change some property you'd do this.innerHTML = 'inner content'.

    One thing you should take in account is how the script is binded to component once rendered in the canvas or in your final template. If you check now the generated HTML coded by the editor (via Export button or editor.getHtml()), you might see something like this:

    <div id="c764"></div>
    +<script>
    +  var items = document.querySelectorAll('#c764');
    +  for (var i = 0, len = items.length; i < len; i++) {
    +    (function(){
    +      // START component code
    +      alert('Hi');
    +      console.log('the element', this)
    +      // END component code
    +    }.bind(items[i]))();
    +  }
    +</script>
    +

    As you see the editor attaches a unique ID to all components with scripts and retrieves them via querySelectorAll. Dragging another test-block will generate this:

    <div id="c764"></div>
    +<div id="c765"></div>
    +<script>
    +  var items = document.querySelectorAll('#c764, #c765');
    +  for (var i = 0, len = items.length; i < len; i++) {
    +    (function(){
    +      // START component code
    +      alert('Hi');
    +      console.log('the element', this)
    +      // END component code
    +    }.bind(items[i]))();
    +  }
    +</script>
    +

    Keep in mind that all component scripts are executed only inside the iframe of the canvas (isolated, just like your final template), therefore are NOT part of the current document and all your external libraries (eg. JQuery) are not there, but you'll see further how to manage scripted components with dependencies.

    One thing you might be concerned about is a string used for the script, definitely not the best way to deal with a code, for this reason GrapesJS is able also to handle functions for you, so the previous example might look like this:

    editor.BlockManager.add('test-block', {
    +  ...
    +  content: {
    +    script: function () {
    +      alert('Hi');
    +      console.log('the element', this);
    +    },
    +    ...
    +  }
    +});
    +

    Much easier now, but be aware of a string conversion, you can't use variables outside of the function scope, let's see this scenario

    var myVar = 'John';
    +
    +editor.BlockManager.add('test-block', {
    +...
    +  script: function () {
    +    alert('Hi ' + myVar);
    +    console.log('the element', this);
    +  },
    +...
    +});
    +

    Unfortunately, this won't work as you'll get undefined myVar error. The final HTML, with script functions converted to string, will look like this:

    <div id="c764"></div>
    +<script>
    +  var items = document.querySelectorAll('#c764');
    +  for (var i = 0, len = items.length; i < len; i++) {
    +    (function(){
    +      // START component code
    +      alert('Hi ' + myVar); // <- ERROR: undefined myVar
    +      console.log('the element', this);
    +      // END component code
    +    }.bind(items[i]))();
    +  }
    +</script>
    +

    There is actually a solution to make your scripts behave dynamically, you can interpolate properties of the component model.

    editor.BlockManager.add('test-block', {
    +  ...
    +  content: {
    +    myModelPropName: 'John',
    +    script: function () {
    +      alert('Hi {[ myModelPropName ]}');
    +      console.log('the element', this);
    +    },
    +    ...
    +  }
    +});
    +

    The final HTML will be:

    <div id="c764"></div>
    +<script>
    +  var items = document.querySelectorAll('#c764');
    +  for (var i = 0, len = items.length; i < len; i++) {
    +    (function(){
    +      alert('Hi John');
    +      console.log('the element', this);
    +    }.bind(items[i]))();
    +  }
    +</script>
    +

    You can even change tags used for the interpolation

    var editor = grapesjs.init({
    +  ...
    +  // Default values
    +  tagVarStart: '{[ ',
    +  tagVarEnd: ' ]}',
    +  ...
    +});
    +

    You can use this technique with property Traits to create highly customizable components.

    Dependencies

    As we mentioned above, scripts are executed independently inside the iframe of the canvas, where you won't find any dependency, so exactly as the final HTML generated by the editor. +If you want to make use of external libraries you have basically 2 types of approaches, component related and template related.

    If you're building, for example, a slider component based on some third-party library you probably would like to include the external file only when the component is actually dragged inside the canvas, in this case, component related approaches is the perfect one as it's loading external libraries dynamically. +All you have to do is to require the dependency when is needed and then call your script.

    ...
    +script: function () {
    +  var el = this;
    +  var initMySLider = function() {
    +    CoolSliderJS.init(el);
    +  }
    +
    +  if (typeof CoolSliderJS == 'undefined') {
    +    var script = document.createElement('script');
    +    script.onload = initMySLider;
    +    script.src = 'https://.../coolslider.min.js';
    +    document.body.appendChild(script);
    +  }
    +},
    +...
    +

    Some dependency might be highly used along all your components (eg. JQuery) so instead requiring it inside each script you might want to inject it directly inside the canvas:

    var editor = grapesjs.init({
    +  ...
    +  canvas: {
    +    scripts: ['https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js']
    +  }
    +});
    +
    +...
    +  script: function () {
    +    // Do stuff using jquery
    +    $('...');
    +  },
    +...
    +

    Examples

    Examples of components using scripts inside

    Last Updated: 7/7/2018, 4:18:04 PM
    + + + diff --git a/docs/modules/Components.html b/docs/modules/Components.html new file mode 100644 index 000000000..20d91fa4a --- /dev/null +++ b/docs/modules/Components.html @@ -0,0 +1,196 @@ + + + + + + Component Manager | GrapesJS + + + + + + + + + +

    Component Manager

    The Component is the base element for the template composition and, usually, elements like images, text boxes, maps, etc. fit perfectly in this concept. The concept of the component was made to allow the developer to bind different behaviors to different elements. Like for example, opening the Asset Manager on double click of the image.

    Built-in components

    • Default (Basic)
    • Text
    • Image
    • Video
    • Link
    • Map
    • Table
    • Row (for the table)
    • Cell (for the table)

    How Components work?

    When we pass an HTML string to the editor like this:

    <div>
    +  <img src="https://path/image" />
    +  <span title="foo">bar</span>
    +</div>
    +

    The editor will create and store, for each DOM element, its object representation and all next changes to the template will be made on top of this structure, which will then reflect on canvas. So, each object, usually called Model (or state/store), will be the source of truth for the template, but what exactly does it mean? For instance, in more practical way, once the template is rendered on the canvas, if you try to remove one of the elements using the browser inspector and then ask the editor to print the HTML (using editor.getHtml()) you'll see, from the code, that the element will still be there, this because the editor relies on Models and not on the DOM inside the canvas. This approach allows us to be extremely flexible on how to generate the final code (from the Model) and how to render it inside the canvas (from the View).

    Manage Components

    Component recognition

    But now, how does the editor recognize which Component to bind to the img element and what to do with the span one? +Each Component inherits, from the base one, a particular static method

    /**
    + * @param {HTMLElement} el
    + * @return {Object}
    + */
    +isComponent: function(el) {
    +  ...
    +}
    +

    This method gives us the possibility to recognize and bind component types to each HTMLElement (div, img, iframe, etc.). Each HTML element introduced inside the canvas will be processed by isComponent of all available types and if it matches, the object represented the type should be returned. So, for example, with the image component this method looks like:

    // Image component
    +isComponent: function(el) {
    +  if(el.tagName == 'IMG')
    +    return {type: 'image'};
    +}
    +

    Let's try with something that might look a little bit tricky. What about a Google's Map?!? Google's maps are generally embedded as iframes, but the template can be composed by a lot of different iframes, how can I tell the editor that a particular iframe is actually a Google's Map. Well, this part is up to you to understand which is the right pattern to choose, you have the HTMLElement so you can make all checks you want and in this particular case this pattern is used:

    // Map component
    +isComponent: function(el) {
    +	if(el.tagName == 'IFRAME' && /maps\.google\.com/.test(el.src)) {
    +		return {type: 'map', src: el.src};
    +	}
    +},
    +

    So, as you see, in addition to tagName check, we also used the src property, but, as you'll see, you can actually override it with your own logic by extending the built-in component.

    Define new Component

    Let's see now an example, with another HTML element, which is not handled by default Component types. What about input elements?

    With the default GrapesJS configuration inputs are treated just like any other element, you can move it around, style it, etc., but usually we'd like to handle this type of element more specifically. In this case, we have to create a new Component type.

    Let's define just few specs for our new Input type:

    • Can be dropped only inside form elements
    • Can't drop other elements inside it
    • Can change the type of the input (text, password, email, etc.)
    • Can make it required for the form

    To define a new Component type you need to choose from which built-in Component inherit its properties, in our case we just gonna choose the default one. Let's see a complete example of the new type definition

    // Get DomComponents module
    +var comps = editor.DomComponents;
    +
    +// Get the model and the view from the default Component type
    +var defaultType = comps.getType('default');
    +var defaultModel = defaultType.model;
    +var defaultView = defaultType.view;
    +
    +var inputTypes = [
    +  {value: 'text', name: 'Text'},
    +  {value: 'email', name: 'Email'},
    +  {value: 'password', name: 'Password'},
    +  {value: 'number', name: 'Number'},
    +];
    +
    +// The `input` will be the Component type ID
    +comps.addType('input', {
    +  // Define the Model
    +  model: defaultModel.extend({
    +    // Extend default properties
    +    defaults: Object.assign({}, defaultModel.prototype.defaults, {
    +      // Can be dropped only inside `form` elements
    +      draggable: 'form, form *',
    +      // Can't drop other elements inside it
    +      droppable: false,
    +      // Traits (Settings)
    +      traits: ['name', 'placeholder', {
    +          // Change the type of the input (text, password, email, etc.)
    +          type: 'select',
    +          label: 'Type',
    +          name: 'type',
    +          options: inputTypes,
    +        },{
    +          // Can make it required for the form
    +          type: 'checkbox',
    +          label: 'Required',
    +          name: 'required',
    +      }],
    +    }),
    +  },
    +  // The second argument of .extend are static methods and we'll put inside our
    +  // isComponent() method. As you're putting a new Component type on top of the stack,
    +  // not declaring isComponent() might probably break stuff, especially if you extend
    +  // the default one.
    +  {
    +    isComponent: function(el) {
    +      if(el.tagName == 'INPUT'){
    +        return {type: 'input'};
    +      }
    +    },
    +  }),
    +
    +  // Define the View
    +  view: defaultType.view,
    +});
    +

    The code above is pretty much self-explanatory and as you see a lot of work is basically done on top of the Model properties. +The View is just extending the default one, so to cover also this part let's add some random behavior.

    comps.addType('input', {
    +  model: {...},
    +  view: defaultType.view.extend({
    +    // Bind events
    +    events: {
    +      // If you want to bind the event to children elements
    +      // 'click .someChildrenClass': 'methodName',
    +      click: 'handleClick',
    +      dblclick: function(){
    +        alert('Hi!');
    +      }
    +    },
    +
    +    // It doesn't make too much sense this method inside the component
    +    // but it's ok as an example
    +    randomHex: function() {
    +      return '#' + Math.floor(Math.random()*16777216).toString(16);
    +    },
    +
    +    handleClick: function(e) {
    +      this.model.set('style', {color: this.randomHex()}); // <- Affects the final HTML code
    +      this.el.style.backgroundColor = this.randomHex(); // <- Doesn't affect the final HTML code
    +      // Tip: updating the model will reflect the changes to the view, so, in this case,
    +      // if you put the model change after the DOM one this will override the backgroundColor
    +      // change made before
    +    },
    +
    +    // The render() should return 'this'
    +    render: function () {
    +      // Extend the original render method
    +      defaultType.view.prototype.render.apply(this, arguments);
    +      this.el.placeholder = 'Text here'; // <- Doesn't affect the final HTML code
    +      return this;
    +    },
    +  }),
    +});
    +

    From the example above you can notice few interesting things: how to bind events, how to update directly the DOM and how to update the model. The difference between updating the DOM and the model is that the HTML code (the one you get with editor.getHtml()) is generated from the Model so updating directly the DOM will not affect it, it's just the change for the canvas.

    Update Component type

    Here an example of how easily you can update/override the component

    var originalMap = comps.getType('map');
    +
    +comps.addType('map', {
    +  model: originalMap.model.extend({
    +    // Override how the component is rendered to HTML
    +    toHTML: function() {
    +      return '<div>My Custom Map</div>';
    +    },
    +  }, {
    +    isComponent: function(el) {
    +      // ... new logic for isComponent
    +		},
    +  }),
    +  view: originalMap.view
    +});
    +

    Components & JS

    If you want to know how to create Components with javascript attached (eg. counters, galleries, slideshows, etc.) check the dedicated page +Components & JS

    Hints

    <div id="gjs">
    + ...
    + <cutom-element></cutom-element>
    + ...
    +</div>
    +
    +<script>
    + var editor = grapesjs.init({
    +      container : '#gjs',
    +      fromElement: true,
    +  });
    +
    +  editor.DomComponents.addType('cutom-element-type', {...});
    +</script>
    +

    In the example above the editor will not get the new type from the HTML because the content is already parsed and appended, so it'll get it only with new components (eg. from Blocks)

    Solution 1: turn off autorender

    <script>
    + var editor = grapesjs.init({
    +      autorender: 0,
    +      container : '#gjs',
    +      fromElement: true,
    +  });
    +
    +  editor.DomComponents.addType('cutom-element-type', {...});
    +
    +  // after all new types
    +  editor.render();
    +</script>
    +

    Solution 2: put all the stuff inside a plugin (Creating plugins)

    Last Updated: 7/10/2018, 2:27:13 AM
    + + + diff --git a/docs/modules/Plugins.html b/docs/modules/Plugins.html new file mode 100644 index 000000000..8bbbac085 --- /dev/null +++ b/docs/modules/Plugins.html @@ -0,0 +1,77 @@ + + + + + + Plugins | GrapesJS + + + + + + + + + +

    Plugins

    Creating plugins in GrapesJS is pretty straightforward and here you'll get how to achieve it.

    Basic plugin

    Generally, you would make plugins in separated files to keep thing cleaner, so you'll probably get a similar structure:

    /your/path/to/grapesjs.min.js
    +/your/path/to/grapesjs-plugin.js
    +

    The order is important as before loading your plugin, GrapesJS have to be loaded first.

    So, in your grapesjs-plugin.js file:

    export default grapesjs.plugins.add('my-plugin-name', (editor, options) => {
    +  /*
    +  * Here you should rely on GrapesJS APIs, so check 'API Reference' for more info
    +  * For example, you could do something like this to add some new command:
    +  *
    +  * editor.Commands.add(...);
    +  */
    +})
    +

    The name my-plugin-name is an ID of your plugin and you'll use it to tell your editor to grab it.

    Here is a complete generic example:

    <script src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
    +<link rel="stylesheet" href="path/to/grapes.min.css">
    +<script src="path/to/grapes.min.js"></script>
    +<script src="path/to/grapesjs-plugin.js"></script>
    +
    +<div id="gjs"></div>
    +
    +<script type="text/javascript">
    +  var editor = grapesjs.init({
    +      container : '#gjs',
    +      plugins: ['my-plugin-name']
    +  });
    +</script>
    +

    Plugins with options

    It's also possible to pass custom parameters to plugins in the way to make them more flexible.

    <script type="text/javascript">
    +  var editor = grapesjs.init({
    +      container : '#gjs',
    +      plugins: ['my-plugin-name'],
    +      pluginsOpts: {
    +        'my-plugin-name': {
    +          customField: 'customValue'
    +        }
    +      }
    +  });
    +</script>
    +

    Inside you plugin you'll get those options via options argument

    export default grapesjs.plugins.add('my-plugin-name', (editor, options) => {
    +  console.log(options);
    +  //{ customField: 'customValue' }
    +})
    +

    Boilerplate

    If you want to start with a production-ready boilerplate, you might want to try grapesjs-plugin-boilerplate which you can clone and start developing a plugin immediately. For more informations check the repository

    Last Updated: 7/7/2018, 4:18:04 PM
    + + + diff --git a/docs/modules/Storage.html b/docs/modules/Storage.html new file mode 100644 index 000000000..6827a3dee --- /dev/null +++ b/docs/modules/Storage.html @@ -0,0 +1,197 @@ + + + + + + Storage Manager | GrapesJS + + + + + + + + + +

    Storage Manager

    The aim of this guide is to show how to setup correctly your storage configuration for common usages of the editor and explain also some additional advanced settings

    WARNING

    This guide requires GrapesJS v0.14.15 or higher

    Basic configuration

    The storage manager is a built-in module implemented inside GrapesJS which allows the persistence of your data. By default, GrapesJS saves the data locally by using the built-in LocalStorage which just leverages localStorage API. +You can initialize the editor with different storage configurations via storageManager option:

    const editor = grapesjs.init({
    +  ...
    +  // Default configurations
    +  storageManager: {
    +    id: 'gjs-',             // Prefix identifier that will be used on parameters
    +    type: 'local',          // Type of the storage
    +    autosave: true,         // Store data automatically
    +    autoload: true,         // Autoload stored data on init
    +    stepsBeforeSave: 1,     // If autosave enabled, indicates how many changes are necessary before store method is triggered
    +  },
    +});
    +

    The id option is used to prevent collisions (quite common with localStorage) in case of multiple editors on the same page, therefore you will see parameters passed like { 'gjs-components': '...', 'gjs-style': '...', }

    If you need to disable the storage manager you can pass any empty type:

    ...
    +storageManager: { type: null },
    +

    For all other available options check directly the configuration source file.

    Setup remote storage

    Switching up the remote storage is very simple, it's just a matter of specifying your endpoints for storing and loading, which generally might be also the same (if you rely on HTTP methods).

    const editor = grapesjs.init({
    +  ...
    +  storageManager: {
    +    type: 'remote',
    +    stepsBeforeSave: 3,
    +    urlStore: 'http://endpoint/store-template/some-id-123',
    +    urlLoad: 'http://endpoint/load-template/some-id-123',
    +    // For custom parameters/headers on requests
    +    params: { _some_token: '....' },
    +    headers: { Authorization: 'Basic ...' },
    +  }
    +});
    +

    As you can see we've left some default option unchanged, increased changes necessary for autosave triggering and passed remote endpoints.

    Store and load templates

    Even without a fully working endpoint, you can see what is sent from the editor by triggering the store and looking in the network panel of the inspector. GrapesJS sends mainly 4 types of parameters and it prefixes them with the gjs- key (you can disable it via storageManager.id). From the parameters, you will get the final result in 'gjs-html' and 'gjs-css' and this is what actually your end-users will gonna see on the final template/page. The other two, 'gjs-components' and 'gjs-style', are a JSON representation of your template and therefore those should be used for the template editing. So be careful, GrapesJS is able to start from any HTML/CSS but use this approach only for importing already existent HTML templates, once the user starts editing, rely always on JSON objects because the HTML doesn't contain information about your components. You can achieve it in a pretty straightforward way and if you load your page by server-side you don't even need to load asynchronously your data (so you can turn off the autoload).

    // Lets say, for instance, you start with your already defined HTML template and you'd like to
    +// import it on fly for the user
    +const LandingPage = {
    +  html: `<div>...</div>`,
    +  css: null,
    +  components: null,
    +  style: null,
    +};
    +// ...
    +const editor = grapesjs.init({
    +  ...
    +  // The `components` accepts HTML string or a JSON of components
    +  // Here, at first, we check and use components if are already defined, otherwise
    +  // the HTML string gonna be used
    +  components: LandingPage.components || LandingPage.html,
    +  // We might want to make the same check for styles
    +  style: LandingPage.style || LandingPage.css,
    +  // As we already initialize the editor with the template we can skip the `autoload`
    +  storageManager: {
    +    ...
    +    autoload: false,
    +  },
    +});
    +

    If for any reason you need to get the data from the remote storage you can trigger the load, at any time, manually

    editor.load(res => console.log('Load callback'));
    +

    Similarly, you have the same control over the storing. By default, the autosave is enabled and is triggered by how many changes are made to the template (change it via stepsBeforeSave option). As before, you can disable this behavior and trigger it manually when you need it

    ...
    +const editor = grapesjs.init({
    +  ...
    +  storageManager: {
    +    ...
    +    autosave: false,
    +  },
    +});
    +// Call load somewhere
    +editor.store(res => console.log('Store callback'));
    +

    If you need to check changes which yet need to be stored you can use editor.getDirtyCount(). At any, successful, store of the editor, it resets the count.

    Setup the server

    Server configuration might differ for any use case so generally, it's something up to you on how to make it work, but usually, the flow is pretty straightforward. Create two endpoints, one for storing (eg. mydomain.com/store-page/123) and the other one for loading (eg. mydomain.com/load-page/123), you can also create just one and distinguish them via HTTP methods (eg. mydomain.com/page/123, via GET you load the template, with POST you store it). +When you store, the editor doesn't expect any particular result but only a valid response from the server (status code 200). +When you load the template, return a JSON object with the data you have (don't forget to include the id prefix if it's used)

    {
    +  // `gjs-` is the id prefix
    +  'gjs-components': [{ tagName: 'div', ... }, {...}, ...],
    +  'gjs-style': [{...}, {...}, ...],
    +}
    +

    Be sure to have a correct Content-Type response header, eg. in PHP you would do something like this:

    header('Content-Type: application/json');
    +echo json_encode([
    +  'gjs-components': [...],
    +  'gjs-style': [...],
    +]);
    +

    Storage API

    The Storage module has also its own set of API that allows you to extend and add new functionalities.

    Define new storage

    One of the most useful methods of API is the possibility to add new storages. You might think, we have the local and remote storages, what else do we need, right? Well, let's take as an example the local one. As you already know, it relies on localStorage API which is really cool and easy to use but one of his specs might be a big limit, by default it has a limited amount of MB to use per site (something around 5MB-10MB, depends on the browser implementation). As an alternative, we can make use of IndexedDB which is also quite well supported and allows more space usage (each browser implements its own rules, for a better understanding on how browser storage limits work, check here). +IndexedDB configuration might be too much verbose for this guide so we decided to create the grapesjs-indexeddb plugin, so you can check its source and see how it's implemented. For this guide we gonna see something more simpler but with the same flow, it'll be just a simple javascript object which stores key-value data, not persistent at all but the concept is the same.

    const editor = grapesjs.init({
    +  ...
    +  storageManager: { type: 'simple-storage' },
    +});
    +
    +// Here our `simple-storage` implementation
    +const SimpleStorage = {};
    +
    +editor.StorageManager.add('simple-storage', {
    +  /**
    +   * Load the data
    +   * @param  {Array} keys Array containing values to load, eg, ['gjs-components', 'gjs-style', ...]
    +   * @param  {Function} clb Callback function to call when the load is ended
    +   * @param  {Function} clbErr Callback function to call in case of errors
    +   */
    +  load(keys, clb, clbErr) {
    +    const result = {};
    +
    +    keys.forEach(key => {
    +      const value = SimpleStorage[key];
    +      if (value) {
    +        result[key] = value;
    +      }
    +    });
    +
    +    // Might be called inside some async method
    +    clb(result);
    +  },
    +
    +  /**
    +   * Store the data
    +   * @param  {Object} data Data object to store
    +   * @param  {Function} clb Callback function to call when the load is ended
    +   * @param  {Function} clbErr Callback function to call in case of errors
    +   */
    +  store(data, clb, clbErr) {
    +    for (let key in data) {
    +      SimpleStorage[key] = data[key];
    +    }
    +    // Might be called inside some async method
    +    clb();
    +  }
    +});
    +

    Extend storage

    Among other needs, you might need to use existing storages to create more complex uses. For example, let's say we would like to mix the local and remote storages inside another one. This is how it would look like:

    const sm = editor.StorageManager;
    +
    +sm.add('local-remote', {
    +  store(data, clb, clbErr) {
    +    const remote = sm.get('remote');
    +    const local = sm.get('local');
    +    // ...
    +    remote.store(data, clb, err => {
    +      // eg. some error on remote side, store it locally
    +      local.store(data, clb, clbError);
    +    });
    +  },
    +
    +  load(keys, clb, clbErr) {
    +    // ...
    +  },
    +});
    +

    If you need to completely replace the storage, just use the same id in add method

    editor.StorageManager.add('local', {
    +  // New logic for the local storage
    +  load() {
    +    // ...
    +  },
    +
    +  store() {
    +    // ...
    +  },
    +});
    +

    Examples

    Here you can find some of the plugins extending the Storage Manager

    Events

    Another way to extend storage capabilities is to make use of GrapesJS's event hooks, you can check here the list of all available events for the Storage module. Let's see some of the cases where you might want to use them:

    • Loading animation on storage requests
    editor.on('storage:start', startLoading);
    +editor.on('storage:end', endLoading);
    +
    • Error handling
    editor.on('storage:error', (err) => {
    +    alert(`Error: ${err}`);
    +});
    +
    • Extend parameters to store
    editor.on('storage:start:store', (objectToStore) => {
    +    if (needToAddExtraParam) {
    +      objectToStore.customHtml = `<div>...${editor.getHtml()}...</div>`;
    +    }
    +});
    +
    • Do stuff post load
    editor.on('storage:end:load', (resultObject) => {
    +    if (resultObject.hasSomeKey) {
    +      // do stuff
    +    }
    +});
    +
    Last Updated: 7/10/2018, 2:27:13 AM
    + + + diff --git a/docs/modules/Style-manager.html b/docs/modules/Style-manager.html new file mode 100644 index 000000000..4d3931ed7 --- /dev/null +++ b/docs/modules/Style-manager.html @@ -0,0 +1,50 @@ + + + + + + Style Manager | GrapesJS + + + + + + + + + +

    Style Manager

    Coming soon

    Built-in properties

    Here you can find all the available built-in properties that you can use inside Style Manager via buildProps:

    float, position, text-align, display, font-family, font-weight, border, border-style, border-color, border-width, box-shadow, background-repeat, background-position, background-attachment, background-size, transition, transition-duration, transition-property, transition-timing-function, top, right, bottom, left, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, width, heigth, min-width, min-heigth, max-width, max-heigth, font-size, letter-spacing, line-height, text-shadow, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-left-radius, border-bottom-right-radius, perspective, transform, transform-rotate-x, transform-rotate-y, transform-rotate-z, transform-scale-x, transform-scale-y, transform-scale-z, color, background-color, background, background-image, cursor

    Example usage:

    ...
    +  styleManager : {
    +    sectors: [{
    +      name: 'Dimension',
    +      buildProps: ['width', 'min-height']
    +    },{
    +      name: 'Extra',
    +      buildProps: ['background-color', 'box-shadow']
    +    }]
    +  }
    +...
    +
    Last Updated: 7/12/2018, 2:18:43 AM
    + + + diff --git a/docs/modules/Traits.html b/docs/modules/Traits.html new file mode 100644 index 000000000..85ed1fc91 --- /dev/null +++ b/docs/modules/Traits.html @@ -0,0 +1,130 @@ + + + + + + Trait Manager | GrapesJS + + + + + + + + + +

    Trait Manager

    In GrapesJS, Traits could define different parameters and behaviors of a single component. The user generally will see traits as Settings of each component. A common use of traits is to customize element attributes (eg. placeholder for inputs) and in this case the editor comes already with some built-in, easy configurable, types.

    Built-in trait types

    • text
    • number
    • checkbox
    • select
    • color

    Add Traits to Components

    You can add traits to the component by extending them or while creating a new one. Let's see in this example how to make inputs more customizable by the editor. All components, by default, contain 2 traits: id and title (at the moment of writing). So, if you select an input and open the Settings panel you will see just this:

    In this case we gonna create a new Component (check here for more details about the creation of new components) with a new set of traits

    var editor = grapesjs.init({...});
    +var domComps = editor.DomComponents;
    +var dType = domComps.getType('default');
    +var dModel = dType.model;
    +var dView = dType.view;
    +
    +domComps.addType('input', {
    +    model: dModel.extend({
    +      defaults: Object.assign({}, dModel.prototype.defaults, {
    +        traits: [
    +          // strings are automatically converted to text types
    +          'name',
    +          'placeholder',
    +          {
    +            type: 'select',
    +            label: 'Type',
    +            name: 'type',
    +            options: [
    +              {value: 'text', name: 'Text'},
    +              {value: 'email', name: 'Email'},
    +              {value: 'password', name: 'Password'},
    +              {value: 'number', name: 'Number'},
    +            ]
    +          }, {
    +            type: 'checkbox',
    +            label: 'Required',
    +            name: 'required',
    +        }],
    +      }),
    +    }, {
    +      isComponent: function(el) {
    +        if(el.tagName == 'INPUT'){
    +          return {type: 'input'};
    +        }
    +      },
    +    }),
    +
    +    view: dView,
    +});
    +

    Now the result will be

    By default, traits modify attributes of the model (which than reflected in canvas) but you can also have traits which change the property

    ...
    +traits: [{
    +    type: 'text',
    +    label: 'Test',
    +    name: 'model-prop-name',
    +    changeProp: 1,
    +}],
    +...
    +

    In this way you're able to listen this changes and react with your own logic

    editor.DomComponents.addType('input', {
    +    model: dModel.extend({
    +      init() {
    +        this.listenTo(this, 'change:model-prop-name', this.doStuff);
    +      },
    +
    +      doStuff() {}
    +    }),
    +    ...
    +});
    +

    Define new Trait type

    If built-in types are not enough (eg. something with more complex UI) you can define a new one. +Let's see this simple textarea element which updates contents of the component.

    // Each new type extends the default Trait
    +editor.TraitManager.addType('content', {
    +  events:{
    +    'keyup': 'onChange',  // trigger parent onChange method on keyup
    +  },
    +
    +  /**
    +  * Returns the input element
    +  * @return {HTMLElement}
    +  */
    +  getInputEl: function() {
    +    if (!this.inputEl) {
    +      var input = document.createElement('textarea');
    +      input.value = this.target.get('content');
    +      this.inputEl = input;
    +    }
    +    return this.inputEl;
    +  },
    +
    +  /**
    +   * Triggered when the value of the model is changed
    +   */
    +  onValueChange: function () {
    +    this.target.set('content', this.model.get('value'));
    +  }
    +});
    +
    +// And then use it in your component
    +...
    +traits: [{
    +    type: 'content',
    +}],
    +...
    +
    Last Updated: 7/12/2018, 6:13:47 PM
    + + + diff --git a/docs/new-btn.png b/docs/new-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..45a38e33e80c1677e6d13d32204266060944f501 GIT binary patch literal 10208 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 Puk07kH5DtKy?OsXhDs+0 literal 0 HcmV?d00001 diff --git a/docs/new-panel.png b/docs/new-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..2eea4b302a853502929933aaa5012e79ee39e7f3 GIT binary patch literal 26108 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 F{{ex!&!+$Y literal 0 HcmV?d00001 diff --git a/docs/style-comp.jpg b/docs/style-comp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4038aff38230372abc204bf656a12d01baf2e364 GIT binary patch literal 43949 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 xIP>|RX
    ").append(t('').attr("title",r.noColorSelectedText)).html())}}return"
    "+o.join("")+"
    "}function u(i,u){var h=function(e,i){var r=t.extend({},n,e);return r.callbacks={move:f(r.move,i),change:f(r.change,i),show:f(r.show,i),hide:f(r.hide,i),beforeShow:f(r.beforeShow,i)},r}(u,i),v=h.flat,m=h.showSelectionPalette,y=h.localStorageKey,b=h.theme,x=h.callbacks,w=function(t,e,n){var i;return function(){var r=this,o=arguments;n&&clearTimeout(i),!n&&i||(i=setTimeout(function(){i=null,t.apply(r,o)},e))}}(Ht,10),C=!1,k=!1,T=0,E=0,M=0,A=0,O=0,P=0,_=0,L=0,N=0,D=0,I=1,F=[],R=[],j={},z=h.selectionPalette.slice(0),H=h.maxSelectionSize,V="sp-dragging",$=null,B=i.ownerDocument,W=(B.body,t(i)),U=!1,q=t(l,B).addClass(b),K=q.find(".sp-picker-container"),G=q.find(".sp-color"),Y=q.find(".sp-dragger"),X=q.find(".sp-hue"),J=q.find(".sp-slider"),Z=q.find(".sp-alpha-inner"),Q=q.find(".sp-alpha"),tt=q.find(".sp-alpha-handle"),et=q.find(".sp-input"),nt=q.find(".sp-palette"),it=q.find(".sp-initial"),rt=q.find(".sp-cancel"),ot=q.find(".sp-clear"),st=q.find(".sp-choose"),at=q.find(".sp-palette-toggle"),lt=W.is("input"),ct=lt&&"color"===W.attr("type")&&g(),ut=lt&&!v,ht=ut?t(a).addClass(b).addClass(h.className).addClass(h.replacerClassName):t([]),dt=ut?ht:W,ft=ht.find(".sp-preview-inner"),pt=h.color||lt&&W.val(),gt=!1,vt=h.preferredFormat,mt=!h.showButtons||h.clickoutFiresChange,yt=!pt,bt=h.allowEmpty&&!ct;function xt(){if(h.showPaletteOnly&&(h.showPalette=!0),at.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),h.palette){F=h.palette.slice(0),R=t.isArray(F[0])?F:[F],j={};for(var e=0;e1&&(delete window.localStorage[y],t.each(e,function(t,e){Ct(e)}))}catch(t){}try{z=window.localStorage[y].split(";")}catch(t){}}}function Ct(e){if(m){var n=S(e).toRgbString();if(!j[n]&&-1===t.inArray(n,z))for(z.push(n);z.length>H;)z.shift();if(y&&window.localStorage)try{window.localStorage[y]=z.join(";")}catch(t){}}}function kt(){var e=It(),n=t.map(R,function(t,n){return c(t,e,"sp-palette-row sp-palette-row-"+n,h)});wt(),z&&n.push(c(function(){var t=[];if(h.showPalette)for(var e=0;ed&&d>i?Math.abs(p.left+i-d):0),p.top-=Math.min(p.top,p.top+r>f&&f>r?Math.abs(r+o-0):0),p}(q,dt))),jt(),h.showPalette&&kt(),W.trigger("reflow.spectrum"))}function Vt(){Lt(),U=!0,W.attr("disabled",!0),dt.addClass("sp-disabled")}!function(){if(o&&q.find("*:not(input)").attr("unselectable","on"),xt(),ut&&W.after(ht).hide(),bt||ot.hide(),v)W.after(q).hide();else{var e="parent"===h.appendTo?W.parent():t(h.appendTo);1!==e.length&&(e=t("body")),e.append(q)}function n(e){return e.data&&e.data.ignore?(Dt(t(e.target).closest(".sp-thumb-el").data("color")),Ft()):(Dt(t(e.target).closest(".sp-thumb-el").data("color")),Ft(),zt(!0),h.hideAfterPaletteSelect&&Lt()),!1}wt(),dt.bind("click.spectrum touchstart.spectrum",function(e){U||At(),e.stopPropagation(),t(e.target).is("input")||e.preventDefault()}),(W.is(":disabled")||!0===h.disabled)&&Vt(),q.click(d),et.change(Mt),et.bind("paste",function(){setTimeout(Mt,1)}),et.keydown(function(t){13==t.keyCode&&Mt()}),rt.text(h.cancelText),rt.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),Nt(),Lt()}),ot.attr("title",h.clearText),ot.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),yt=!0,Ft(),v&&zt(!0)}),st.text(h.chooseText),st.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),o&&et.is(":focus")&&et.trigger("change"),et.hasClass("sp-validation-error")||(zt(!0),Lt())}),at.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),at.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),h.showPaletteOnly=!h.showPaletteOnly,h.showPaletteOnly||v||q.css("left","-="+(K.outerWidth(!0)+5)),xt()}),p(Q,function(t,e,n){I=t/O,yt=!1,n.shiftKey&&(I=Math.round(10*I)/10),Ft()},Tt,Et),p(X,function(t,e){L=parseFloat(e/A),yt=!1,h.showAlpha||(I=1),Ft()},Tt,Et),p(G,function(t,e,n){if(n.shiftKey){if(!$){var i=N*T,r=E-D*E,o=Math.abs(t-i)>Math.abs(e-r);$=o?"x":"y"}}else $=null;var s=!$||"y"===$;(!$||"x"===$)&&(N=parseFloat(t/T)),s&&(D=parseFloat((E-e)/E)),yt=!1,h.showAlpha||(I=1),Ft()},Tt,Et),pt?(Dt(pt),Rt(),vt=h.preferredFormat||S(pt).format,Ct(pt)):Rt(),v&&Ot();var i=o?"mousedown.spectrum":"click.spectrum touchstart.spectrum";nt.delegate(".sp-thumb-el",i,n),it.delegate(".sp-thumb-el:nth-child(1)",i,{ignore:!0},n)}();var $t={show:Ot,hide:Lt,toggle:At,reflow:Ht,option:function(n,i){return n===e?t.extend({},h):i===e?h[n]:(h[n]=i,"preferredFormat"===n&&(vt=h.preferredFormat),void xt())},enable:function(){U=!1,W.attr("disabled",!1),dt.removeClass("sp-disabled")},disable:Vt,offset:function(t){h.offset=t,Ht()},set:function(t){Dt(t),zt()},get:It,destroy:function(){W.show(),dt.unbind("click.spectrum touchstart.spectrum"),q.remove(),ht.remove(),r[$t.id]=null},container:q};return $t.id=r.push($t)-1,$t}function h(){}function d(t){t.stopPropagation()}function f(t,e){var n=Array.prototype.slice,i=n.call(arguments,2);return function(){return t.apply(e,i.concat(n.call(arguments)))}}function p(e,n,i,r){n=n||function(){},i=i||function(){},r=r||function(){};var s=document,a=!1,l={},c=0,u=0,h="ontouchstart"in window,d={};function f(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function p(t){if(a){if(o&&s.documentMode<9&&!t.button)return g();var i=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],r=i&&i.pageX||t.pageX,d=i&&i.pageY||t.pageY,p=Math.max(0,Math.min(r-l.left,u)),v=Math.max(0,Math.min(d-l.top,c));h&&f(t),n.apply(e,[p,v,t])}}function g(){a&&(t(s).unbind(d),t(s.body).removeClass("sp-dragging"),setTimeout(function(){r.apply(e,arguments)},0)),a=!1}d.selectstart=f,d.dragstart=f,d["touchmove mousemove"]=p,d["touchend mouseup"]=g,t(e).bind("touchstart mousedown",function(n){(n.which?3==n.which:2==n.button)||a||!1!==i.apply(e,arguments)&&(a=!0,c=t(e).height(),u=t(e).width(),l=t(e).offset(),t(s).bind(d),t(s.body).addClass("sp-dragging"),p(n),f(n))})}function g(){return t.fn.spectrum.inputTypeColorSupport()}t.fn.spectrum=function(e,n){if("string"==typeof e){var i=this,o=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=r[t(this).data("spectrum.id")];if(n){var s=n[e];if(!s)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?i=n.get():"container"==e?i=n.container:"option"==e?i=n.option.apply(n,o):"destroy"==e?(n.destroy(),t(this).removeData("spectrum.id")):s.apply(n,o)}}),i}return this.spectrum("destroy").each(function(){var n=u(this,t.extend({},e,t(this).data()));t(this).data("spectrum.id",n.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=p,t.fn.spectrum.defaults=n,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var n=t("")[0];e._cachedResult="color"===n.type&&""!==n.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!g()&&e.spectrum({preferredFormat:"hex6"})};var v=/^[\s,#]+/,m=/\s+$/,y=0,b=Math,x=b.round,w=b.min,C=b.max,k=b.random,S=function t(e,n){if(e=e||"",n=n||{},e instanceof t)return e;if(!(this instanceof t))return new t(e,n);var r=function(t){var e={r:0,g:0,b:0},n=1,r=!1,o=!1;"string"==typeof t&&(t=function(t){t=t.replace(v,"").replace(m,"").toLowerCase();var e,n=!1;if($[t])t=$[t],n=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};if(e=X.rgb.exec(t))return{r:e[1],g:e[2],b:e[3]};if(e=X.rgba.exec(t))return{r:e[1],g:e[2],b:e[3],a:e[4]};if(e=X.hsl.exec(t))return{h:e[1],s:e[2],l:e[3]};if(e=X.hsla.exec(t))return{h:e[1],s:e[2],l:e[3],a:e[4]};if(e=X.hsv.exec(t))return{h:e[1],s:e[2],v:e[3]};if(e=X.hsva.exec(t))return{h:e[1],s:e[2],v:e[3],a:e[4]};if(e=X.hex8.exec(t))return{a:function(t){return K(t)/255}(e[1]),r:K(e[2]),g:K(e[3]),b:K(e[4]),format:n?"name":"hex8"};if(e=X.hex6.exec(t))return{r:K(e[1]),g:K(e[2]),b:K(e[3]),format:n?"name":"hex"};if(e=X.hex3.exec(t))return{r:K(e[1]+""+e[1]),g:K(e[2]+""+e[2]),b:K(e[3]+""+e[3]),format:n?"name":"hex"};return!1}(t));"object"==(void 0===t?"undefined":i(t))&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(e=function(t,e,n){return{r:255*U(t,255),g:255*U(e,255),b:255*U(n,255)}}(t.r,t.g,t.b),r=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=Y(t.s),t.v=Y(t.v),e=function(t,e,n){t=6*U(t,360),e=U(e,100),n=U(n,100);var i=b.floor(t),r=t-i,o=n*(1-e),s=n*(1-r*e),a=n*(1-(1-r)*e),l=i%6;return{r:255*[n,s,o,o,a,n][l],g:255*[a,n,n,s,o,o][l],b:255*[o,o,a,n,n,s][l]}}(t.h,t.s,t.v),r=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=Y(t.s),t.l=Y(t.l),e=function(t,e,n){var i,r,o;function s(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=U(t,360),e=U(e,100),n=U(n,100),0===e)i=r=o=n;else{var a=n<.5?n*(1+e):n+e-n*e,l=2*n-a;i=s(l,a,t+1/3),r=s(l,a,t),o=s(l,a,t-1/3)}return{r:255*i,g:255*r,b:255*o}}(t.h,t.s,t.l),r=!0,o="hsl"),t.hasOwnProperty("a")&&(n=t.a));return n=W(n),{ok:r,format:t.format||o,r:w(255,C(e.r,0)),g:w(255,C(e.g,0)),b:w(255,C(e.b,0)),a:n}}(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=x(100*this._a)/100,this._format=n.format||r.format,this._gradientType=n.gradientType,this._r<1&&(this._r=x(this._r)),this._g<1&&(this._g=x(this._g)),this._b<1&&(this._b=x(this._b)),this._ok=r.ok,this._tc_id=y++};function T(t,e,n){t=U(t,255),e=U(e,255),n=U(n,255);var i,r,o=C(t,e,n),s=w(t,e,n),a=(o+s)/2;if(o==s)i=r=0;else{var l=o-s;switch(r=a>.5?l/(2-o-s):l/(o+s),o){case t:i=(e-n)/l+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,o.push(S(i));return o}function V(t,e){e=e||6;for(var n=S(t).toHsv(),i=n.h,r=n.s,o=n.v,s=[],a=1/e;e--;)s.push(S({h:i,s:r,v:o})),o=(o+a)%1;return s}S.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=W(t),this._roundA=x(100*this._a)/100,this},toHsv:function(){var t=E(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=E(this._r,this._g,this._b),e=x(360*t.h),n=x(100*t.s),i=x(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=T(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=T(this._r,this._g,this._b),e=x(360*t.h),n=x(100*t.s),i=x(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return M(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return A(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:x(this._r),g:x(this._g),b:x(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+x(this._r)+", "+x(this._g)+", "+x(this._b)+")":"rgba("+x(this._r)+", "+x(this._g)+", "+x(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:x(100*U(this._r,255))+"%",g:x(100*U(this._g,255))+"%",b:x(100*U(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+x(100*U(this._r,255))+"%, "+x(100*U(this._g,255))+"%, "+x(100*U(this._b,255))+"%)":"rgba("+x(100*U(this._r,255))+"%, "+x(100*U(this._g,255))+"%, "+x(100*U(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(B[M(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+A(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";t&&(n=S(t).toHex8String());return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(L,arguments)},brighten:function(){return this._applyModification(N,arguments)},darken:function(){return this._applyModification(D,arguments)},desaturate:function(){return this._applyModification(O,arguments)},saturate:function(){return this._applyModification(P,arguments)},greyscale:function(){return this._applyModification(_,arguments)},spin:function(){return this._applyModification(I,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(H,arguments)},complement:function(){return this._applyCombination(F,arguments)},monochromatic:function(){return this._applyCombination(V,arguments)},splitcomplement:function(){return this._applyCombination(z,arguments)},triad:function(){return this._applyCombination(R,arguments)},tetrad:function(){return this._applyCombination(j,arguments)}},S.fromRatio=function(t,e){if("object"==(void 0===t?"undefined":i(t))){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]="a"===r?t[r]:Y(t[r]));t=n}return S(t,e)},S.equals=function(t,e){return!(!t||!e)&&S(t).toRgbString()==S(e).toRgbString()},S.random=function(){return S.fromRatio({r:k(),g:k(),b:k()})},S.mix=function(t,e,n){n=0===n?0:n||50;var i,r=S(t).toRgb(),o=S(e).toRgb(),s=n/100,a=2*s-1,l=o.a-r.a,c=1-(i=((i=a*l==-1?a:(a+l)/(1+a*l))+1)/2),u={r:o.r*i+r.r*c,g:o.g*i+r.g*c,b:o.b*i+r.b*c,a:o.a*s+r.a*(1-s)};return S(u)},S.readability=function(t,e){var n=S(t),i=S(e),r=n.toRgb(),o=i.toRgb(),s=n.getBrightness(),a=i.getBrightness(),l=Math.max(r.r,o.r)-Math.min(r.r,o.r)+Math.max(r.g,o.g)-Math.min(r.g,o.g)+Math.max(r.b,o.b)-Math.min(r.b,o.b);return{brightness:Math.abs(s-a),color:l}},S.isReadable=function(t,e){var n=S.readability(t,e);return n.brightness>125&&n.color>500},S.mostReadable=function(t,e){for(var n=null,i=0,r=!1,o=0;o125&&s.color>500,l=s.brightness/125*3+s.color/500;(a&&!r||a&&r&&l>i||!a&&!r&&l>i)&&(r=a,i=l,n=S(e[o]))}return n};var $=S.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},B=S.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}($);function W(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function U(t,e){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");var n=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(t);return t=w(e,C(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),b.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function q(t){return w(1,C(0,t))}function K(t){return parseInt(t,16)}function G(t){return 1==t.length?"0"+t:""+t}function Y(t){return t<=1&&(t=100*t+"%"),t}var X=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",n="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+n),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=S,t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({defaults:{index:"",value:"",values:{},active:!1,preview:!1,properties:[]},initialize:function(){var t=n(18),e=this.get("properties"),i=this.get("value");if(this.set("properties",e instanceof t?e:new t(e)),!i){var r="",o=this.get("values");for(var s in o)r+=" "+o[s];this.set("value",r.trim())}},getPropertyValue:function(t){var e="";return this.get("properties").each(function(n){n.get("property")==t&&(e=n.getFullValue())}),e},getFullValue:function(){var t=[];return this.get("properties").each(function(e){return t.push(e.getFullValue())}),t.join(" ")}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;eB
    ",attributes:{title:"Bold"},result:function(t){return t.exec("bold")}},italic:{name:"italic",icon:"I",attributes:{title:"Italic"},result:function(t){return t.exec("italic")}},underline:{name:"underline",icon:"U",attributes:{title:"Underline"},result:function(t){return t.exec("underline")}},strikethrough:{name:"strikethrough",icon:"S",attributes:{title:"Strike-through"},result:function(t){return t.exec("strikeThrough")}},link:{icon:'⫘',name:"link",attributes:{style:"font-size:1.4rem;padding:0 4px 2px;",title:"Link"},result:function(t){return t.insertHTML(''+t.selection()+"")}}},l=function(){function t(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var r=n.el;if(r[s])return r[s];r[s]=this,this.setEl(r),this.updateActiveActions=this.updateActiveActions.bind(this);var o=n.actions||[];o.forEach(function(t,e){"string"==typeof t?t=a[t]:a[t.name]&&(t=i({},a[t.name],t)),o[e]=t});var l=o.length?o:Object.keys(a).map(function(t){return a[t]});n.classes=i({actionbar:"actionbar",button:"action",active:"active"},n.classes);var c=n.classes,u=n.actionbar;if(this.actionbar=u,this.settings=n,this.classes=c,this.actions=l,!u){var h=n.actionbarContainer;(u=document.createElement("div")).className=c.actionbar,h.appendChild(u),this.actionbar=u,l.forEach(function(t){return e.addAction(t)})}return n.styleWithCSS&&this.exec("styleWithCSS"),this.syncActions(),this}return r(t,[{key:"setEl",value:function(t){this.el=t,this.doc=t.ownerDocument}},{key:"updateActiveActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.btn,i=e.update,r=t.classes.active,o=e.name,s=t.doc;n.className=n.className.replace(r,"").trim(),s.queryCommandSupported(o)&&s.queryCommandState(o)&&(n.className+=" "+r),i&&i(t,e)})}},{key:"enable",value:function(){return this.enabled?this:(this.actionbarEl().style.display="",this.el.contentEditable=!0,(0,o.on)(this.el,"mouseup keyup",this.updateActiveActions),this.syncActions(),this.updateActiveActions(),this.el.focus(),this.enabled=1,this)}},{key:"disable",value:function(){return this.actionbarEl().style.display="none",this.el.contentEditable=!1,(0,o.off)(this.el,"mouseup keyup",this.updateActiveActions),this.enabled=0,this}},{key:"syncActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.event||"click";e.btn["on"+n]=function(n){e.result(t,e),t.updateActiveActions()}})}},{key:"addAction",value:function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).sync,n=document.createElement("span"),i=t.icon,r=t.attributes||{};for(var o in n.className=this.classes.button,t.btn=n,r)n.setAttribute(o,r[o]);"string"==typeof i?n.innerHTML=i:n.appendChild(i),this.actionbarEl().appendChild(n),e&&(this.actions.push(t),this.syncActions())}},{key:"getActions",value:function(){return this.actions}},{key:"selection",value:function(){return this.doc.getSelection()}},{key:"exec",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.doc.execCommand(t,!1,e)}},{key:"actionbarEl",value:function(){return this.actionbar}},{key:"insertHTML",value:function(t){var e=this.doc,n=e.getSelection();if(n&&n.rangeCount){var i=e.createElement("div"),r=n.getRangeAt(0);r.deleteContents(),i.innerHTML=t,Array.prototype.slice.call(i.childNodes).forEach(function(t){r.insertNode(t),t}),n.removeAllRanges(),n.addRange(r),this.el.focus()}}}]),t}();e.default=l},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(177)),r=n(2);t.exports=function(){var t={},e=n(176),o=void 0,s=void 0,a=void 0,l=function(){var t=o.style;t.top="-100px",t.left="-100px",t.display="none"};return{customRte:null,name:"RichTextEditor",init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var i in t=n,e)i in t||(t[i]=e[i]);var s=t.pStylePrefix;return s&&(t.stylePrefix=s+t.stylePrefix),this.pfx=t.stylePrefix,t.actions||[],(o=document.createElement("div")).className=s+"rte-toolbar "+s+"one-bg",a=this.initRte(document.createElement("div")),(0,r.on)(o,"mousedown",function(t){return t.stopPropagation()}),this},postRender:function(t){var e=t.model.get("Canvas");o.style.pointerEvents="all",l(),e.getToolsEl().appendChild(o)},initRte:function(e){var n=this.pfx,r=o,s=this.actionbar,l=this.actions||t.actions,c={actionbar:n+"actionbar",button:n+"action",active:n+"active"},u=new i.default({el:e,classes:c,actions:l,actionbar:s,actionbarContainer:r});return a&&a.setEl(e),u.actionbar&&(this.actionbar=u.actionbar),u.actions&&(this.actions=u.actions),u},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.name=t,a.addAction(e,{sync:1})},get:function(t){var e=void 0;return a.getActions().forEach(function(n){n.name==t&&(e=n)}),e},getAll:function(){return a.getActions()},remove:function(t){var e=this.getAll(),n=this.get(t);if(n){var i=n.btn,r=e.indexOf(n);i.parentNode.removeChild(i),e.splice(r,1)}return n},getToolbarEl:function(){return o},udpatePosition:function(){var e=t.em.get("Canvas").getTargetToElementDim(o,s,{event:"rteToolbarPosUpdate"});if(e){t.adjustToolbar&&e.top<=e.canvasTop&&(e.top=e.elementTop+e.elementHeight);var n=o.style;n.top=e.top+"px",n.left=e.left+"px"}},enable:function(e,n){s=e.el;var i=t.em,r=e.getChildrenContainer(),a=this.customRte;if(o.style.display="",n=a?a.enable(r,n):this.initRte(r).enable(),i){setTimeout(this.udpatePosition.bind(this),0);var l="change:canvasOffset canvasScroll";i.off(l,this.udpatePosition,this),i.on(l,this.udpatePosition,this),i.trigger("rte:enable",e,n)}return n},disable:function(e,n){var i=t.em,r=this.customRte,o=e.getChildrenContainer();r?r.disable(o,n):n&&n.disable(),l(),i&&i.trigger("rte:disable",e,n)}}}},function(t,e,n){"use strict";var i=n(0),r=n(78);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"";var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.render),this.listenTo(e,"remove",this.onRemove),this.className=this.pfx+"panels"},onRemove:function(t){var e=t.view;e&&e.remove()},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=this.config,o=t.get("el"),s=new r({el:o,model:t,config:i}),a=s.render().el,l=t.get("appendTo");if(o);else if(l){document.querySelector(l).appendChild(a)}else n?n.appendChild(a):this.$el.append(a);return s.initResize(),a},render:function(){var t=this,e=this.$el,n=document.createDocumentFragment();return e.empty(),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",this.className),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1);i.default.$;t.exports=i.default.View.extend({tagName:"span",events:{click:"clicked"},initialize:function(t){var e=this.model.get("className");this.config=t.config||{},this.em=this.config.em||{};var n=this.config.stylePrefix||"",i=this.config.pStylePrefix||"";this.pfx=n,this.ppfx=this.config.pStylePrefix||"",this.id=n+this.model.get("id"),this.activeCls=n+"active "+i+"four-color",this.disableCls=n+"active",this.btnsVisCls=n+"visible",this.className=n+"btn"+(e?" "+e:""),this.listenTo(this.model,"change:active updateActive",this.updateActive),this.listenTo(this.model,"checkActive",this.checkActive),this.listenTo(this.model,"change:bntsVis",this.updateBtnsVis),this.listenTo(this.model,"change:attributes",this.updateAttributes),this.listenTo(this.model,"change:className",this.updateClassName),this.listenTo(this.model,"change:disable",this.updateDisable),this.em&&this.em.get&&(this.commands=this.em.get("Commands"))},updateClassName:function(){var t=this.model.get("className");this.$el.attr("class",this.pfx+"btn"+(t?" "+t:""))},updateAttributes:function(){this.$el.attr(this.model.get("attributes"))},updateBtnsVis:function(){this.$buttons&&(this.model.get("bntsVis")?this.$buttons.addClass(this.btnsVisCls):this.$buttons.removeClass(this.btnsVisCls))},updateActive:function(){var t=this.model,e=t.get("context"),n={},i=this.em&&this.em.get?this.em.get("Editor"):null,o=t.get("command");this.commands&&(0,r.isString)(o)?n=this.commands.get(o)||{}:(0,r.isFunction)(o)?n={run:o}:null!==o&&(0,r.isObject)(o)&&(n=o),t.get("active")?(t.collection.deactivateAll(e),t.set("active",!0,{silent:!0}).trigger("checkActive"),n.run&&(n.run(i,t,t.get("options")),i.trigger("run:"+o)),!n.stop&&t.set("active",!1)):(this.$el.removeClass(this.activeCls),t.collection.deactivateAll(e),n.stop&&(n.stop(i,t,t.get("options")),i.trigger("stop:"+o)))},updateDisable:function(){this.model.get("disable")?this.$el.addClass(this.disableCls):this.$el.removeClass(this.disableCls)},checkActive:function(){this.model.get("active")?this.$el.addClass(this.activeCls):this.$el.removeClass(this.activeCls)},clicked:function(t){this.model.get("bntsVis")||this.model.get("disable")||this.toogleActive()},toogleActive:function(){var t=this.model.get("active");this.model.set("active",!t);this.em.get("Commands").get("select-comp");t?this.model.get("runDefaultCommand")&&this.em.runDefault():this.model.get("stopDefaultCommand")&&this.em.stopDefault()},render:function(){var t=this.model.get("label"),e=this.$el;return this.updateAttributes(),e.attr("class",this.className),t&&e.append(t),this}})},function(t,e,n){"use strict";(function(e){var i=n(0),r=n(180);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.parentM=this.opt.parentM||null,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset remove",this.render),this.className=this.pfx+"buttons"},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=new r({model:t,config:this.config,parentM:this.parentM}).render().el;return n?n.appendChild(i):this.$el.append(i),i},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",e.result(this,"className")),this}})}).call(this,n(1))},function(t,e,n){"use strict";var i=n(0),r=n(80);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{id:"",label:"",className:"",command:"",context:"",buttons:[],attributes:{},options:{},active:!1,dragDrop:!1,runDefaultCommand:!0,stopDefaultCommand:!1,disable:!1},initialize:function(t){if(this.get("buttons").length){var e=n(79);this.set("buttons",new e(this.get("buttons")))}}})},function(t,e,n){"use strict";var i="sw-visibility",r="export-template",o="open-layers",s="open-blocks",a="fullscreen",l="preview";t.exports={stylePrefix:"pn-",defaults:[{id:"commands",buttons:[{}]},{id:"options",buttons:[{active:!0,id:i,className:"fa fa-square-o",command:i,context:i,attributes:{title:"View components"}},{id:l,className:"fa fa-eye",command:l,context:l,attributes:{title:"Preview"}},{id:a,className:"fa fa-arrows-alt",command:a,context:a,attributes:{title:"Fullscreen"}},{id:r,className:"fa fa-code",command:r,attributes:{title:"View code"}}]},{id:"views",buttons:[{id:"open-sm",className:"fa fa-paint-brush",command:"open-sm",active:!0,attributes:{title:"Open Style Manager"}},{id:"open-tm",className:"fa fa-cog",command:"open-tm",attributes:{title:"Settings"}},{id:o,className:"fa fa-bars",command:o,attributes:{title:"Open Layer Manager"}},{id:s,className:"fa fa-th-large",command:s,attributes:{title:"Open Blocks"}}]}],em:null,delayBtnsShow:300}},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(184),o=n(80),s=n(182),a=(n(78),n(179));return{name:"Panels",init:function(n){for(var o in i=n||{},r)o in i||(i[o]=r[o]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new s(i.defaults),e=new a({collection:t,config:i}),this},getPanels:function(){return t},getPanelsEl:function(){return e.el},addPanel:function(e){return t.add(e)},removePanel:function(e){return t.remove(e)},getPanel:function(e){var n=t.where({id:e});return n.length?n[0]:null},addButton:function(t,e){var n=this.getPanel(t);return n?n.get("buttons").add(e):null},removeButton:function(t,e){var n=this.getPanel(t);return n&&n.get("buttons").remove(e)},getButton:function(t,e){var n=this.getPanel(t);if(n){var i=n.get("buttons").where({id:e});return i.length?i[0]:null}return null},render:function(){return e.render().el},active:function(){this.getPanels().each(function(t){t.get("buttons").each(function(t){t.get("active")&&t.trigger("updateActive")})})},disableButtons:function(){this.getPanels().each(function(t){t.get("buttons").each(function(t){t.get("disable")&&t.trigger("change:disable")})})},Panel:o}}},function(t,e,n){"use strict";var i=n(1),r=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=r.default.View.extend({template:(0,i.template)('\n
    \n \t
    <%= label %>
    \n \t
    \n
    '),initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix},render:function(){var t=this.model.toJSON();return t.pfx=this.pfx,this.$el.html(this.template(t)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").append(this.model.get("input")),this}})},function(t,e,n){!function(t){t.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e){return/^[;{}]$/.test(e)}}),t.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e,n,i){return this.jsonMode?/^[\[,{]$/.test(e)||/^}/.test(n):(";"!=e||!i.lexical||")"!=i.lexical.type)&&/^[;{}]$/.test(e)&&!/^;/.test(n)}});var e=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;t.extendMode("xml",{commentStart:"\x3c!--",commentEnd:"--\x3e",newlineAfterToken:function(t,n,i,r){var o=!1;return"html"==this.configuration&&(o=!!r.context&&e.test(r.context.tagName)),!o&&("tag"==t&&/>$/.test(n)&&r.context||/^-1&&a>-1&&a>s&&(t=t.substr(0,s)+t.substring(s+o.commentStart.length,a)+t.substr(a+o.commentEnd.length)),r.replaceRange(t,n,i)}})}),t.defineExtension("autoIndentRange",function(t,e){var n=this;this.operation(function(){for(var i=t.line;i<=e.line;i++)n.indentLine(i,"smart")})}),t.defineExtension("autoFormatRange",function(e,n){var i=this,r=i.getMode(),o=i.getRange(e,n).split("\n"),s=t.copyState(r,i.getTokenAt(e).state),a=i.getOption("tabSize"),l="",c=0,u=0===e.ch;function h(){l+="\n",u=!0,++c}for(var d=0;d!?|~^@]/,f=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function p(t,e,n){return i=t,r=n,e}function g(t,e){var n=t.next();if('"'==n||"'"==n)return e.tokenize=function(t){return function(e,n){var i,r=!1;if(a&&"@"==e.peek()&&e.match(f))return n.tokenize=g,p("jsonld-keyword","meta");for(;null!=(i=e.next())&&(i!=t||r);)r=!r&&"\\"==i;return r||(n.tokenize=g),p("string","string")}}(n),e.tokenize(t,e);if("."==n&&t.match(/^\d+(?:[eE][+\-]?\d+)?/))return p("number","number");if("."==n&&t.match(".."))return p("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return p(n);if("="==n&&t.eat(">"))return p("=>","operator");if("0"==n&&t.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return p("number","number");if(/\d/.test(n))return t.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),p("number","number");if("/"==n)return t.eat("*")?(e.tokenize=v,v(t,e)):t.eat("/")?(t.skipToEnd(),p("comment","comment")):qt(t,e,1)?(function(t){for(var e,n=!1,i=!1;null!=(e=t.next());){if(!n){if("/"==e&&!i)return;"["==e?i=!0:i&&"]"==e&&(i=!1)}n=!n&&"\\"==e}}(t),t.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),p("regexp","string-2")):(t.eat("="),p("operator","operator",t.current()));if("`"==n)return e.tokenize=m,m(t,e);if("#"==n)return t.skipToEnd(),p("error","error");if(d.test(n))return">"==n&&e.lexical&&">"==e.lexical.type||(t.eat("=")?"!"!=n&&"="!=n||t.eat("="):/[<>*+\-]/.test(n)&&(t.eat(n),">"==n&&t.eat(n))),p("operator","operator",t.current());if(u.test(n)){t.eatWhile(u);var i=t.current();if("."!=e.lastType){if(h.propertyIsEnumerable(i)){var r=h[i];return p(r.type,r.style,i)}if("async"==i&&t.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return p("async","keyword",i)}return p("variable","variable",i)}}function v(t,e){for(var n,i=!1;n=t.next();){if("/"==n&&i){e.tokenize=g;break}i="*"==n}return p("comment","comment")}function m(t,e){for(var n,i=!1;null!=(n=t.next());){if(!i&&("`"==n||"$"==n&&t.eat("{"))){e.tokenize=g;break}i=!i&&"\\"==n}return p("quasi","string-2",t.current())}var y="([{}])";function b(t,e){e.fatArrowAt&&(e.fatArrowAt=null);var n=t.string.indexOf("=>",t.start);if(!(n<0)){if(c){var i=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(t.string.slice(t.start,n));i&&(n=i.index)}for(var r=0,o=!1,s=n-1;s>=0;--s){var a=t.string.charAt(s),l=y.indexOf(a);if(l>=0&&l<3){if(!r){++s;break}if(0==--r){"("==a&&(o=!0);break}}else if(l>=3&&l<6)++r;else if(u.test(a))o=!0;else{if(/["'\/]/.test(a))return;if(o&&!r){++s;break}}}o&&!r&&(e.fatArrowAt=s)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function w(t,e,n,i,r,o){this.indented=t,this.column=e,this.type=n,this.prev=r,this.info=o,null!=i&&(this.align=i)}function C(t,e){for(var n=t.localVars;n;n=n.next)if(n.name==e)return!0;for(var i=t.context;i;i=i.prev)for(var n=i.vars;n;n=n.next)if(n.name==e)return!0}var k={state:null,column:null,marked:null,cc:null};function S(){for(var t=arguments.length-1;t>=0;t--)k.cc.push(arguments[t])}function T(){return S.apply(null,arguments),!0}function E(t,e){for(var n=e;n;n=n.next)if(n.name==t)return!0;return!1}function M(t){var e=k.state;if(k.marked="def",e.context)if("var"==e.lexical.info&&e.context&&e.context.block){var i=function t(e,n){if(n){if(n.block){var i=t(e,n.prev);return i?i==n.prev?n:new O(i,n.vars,!0):null}return E(e,n.vars)?n:new O(n.prev,new P(e,n.vars),!1)}return null}(t,e.context);if(null!=i)return void(e.context=i)}else if(!E(t,e.localVars))return void(e.localVars=new P(t,e.localVars));n.globalVars&&!E(t,e.globalVars)&&(e.globalVars=new P(t,e.globalVars))}function A(t){return"public"==t||"private"==t||"protected"==t||"abstract"==t||"readonly"==t}function O(t,e,n){this.prev=t,this.vars=e,this.block=n}function P(t,e){this.name=t,this.next=e}var _=new P("this",new P("arguments",null));function L(){k.state.context=new O(k.state.context,k.state.localVars,!1),k.state.localVars=_}function N(){k.state.context=new O(k.state.context,k.state.localVars,!0),k.state.localVars=null}function D(){k.state.localVars=k.state.context.vars,k.state.context=k.state.context.prev}function I(t,e){var n=function(){var n=k.state,i=n.indented;if("stat"==n.lexical.type)i=n.lexical.indented;else for(var r=n.lexical;r&&")"==r.type&&r.align;r=r.prev)i=r.indented;n.lexical=new w(i,k.stream.column(),t,null,n.lexical,e)};return n.lex=!0,n}function F(){var t=k.state;t.lexical.prev&&(")"==t.lexical.type&&(t.indented=t.lexical.indented),t.lexical=t.lexical.prev)}function R(t){return function e(n){return n==t?T():";"==t?S():T(e)}}function j(t,e){return"var"==t?T(I("vardef",e),yt,R(";"),F):"keyword a"==t?T(I("form"),$,j,F):"keyword b"==t?T(I("form"),j,F):"keyword d"==t?k.stream.match(/^\s*$/,!1)?T():T(I("stat"),W,R(";"),F):"debugger"==t?T(R(";")):"{"==t?T(I("}"),N,st,F,D):";"==t?T():"if"==t?("else"==k.state.lexical.info&&k.state.cc[k.state.cc.length-1]==F&&k.state.cc.pop()(),T(I("form"),$,j,F,kt)):"function"==t?T(Ot):"for"==t?T(I("form"),St,j,F):"class"==t||c&&"interface"==e?(k.marked="keyword",T(I("form"),Lt,F)):"variable"==t?c&&"declare"==e?(k.marked="keyword",T(j)):c&&("module"==e||"enum"==e||"type"==e)&&k.stream.match(/^\s*\w/,!1)?(k.marked="keyword","enum"==e?T(Wt):"type"==e?T(ut,R("operator"),ut,R(";")):T(I("form"),bt,R("{"),I("}"),st,F,F)):c&&"namespace"==e?(k.marked="keyword",T(I("form"),H,st,F)):c&&"abstract"==e?(k.marked="keyword",T(j)):T(I("stat"),Q):"switch"==t?T(I("form"),$,R("{"),I("}","switch"),N,st,F,F,D):"case"==t?T(H,R(":")):"default"==t?T(R(":")):"catch"==t?T(I("form"),L,z,j,F,D):"export"==t?T(I("stat"),Ft,F):"import"==t?T(I("stat"),jt,F):"async"==t?T(j):"@"==e?T(H,j):S(I("stat"),H,R(";"),F)}function z(t){if("("==t)return T(Pt,R(")"))}function H(t,e){return B(t,e,!1)}function V(t,e){return B(t,e,!0)}function $(t){return"("!=t?S():T(I(")"),H,R(")"),F)}function B(t,e,n){if(k.state.fatArrowAt==k.stream.start){var i=n?X:Y;if("("==t)return T(L,I(")"),rt(Pt,")"),F,R("=>"),i,D);if("variable"==t)return S(L,bt,R("=>"),i,D)}var r=n?q:U;return x.hasOwnProperty(t)?T(r):"function"==t?T(Ot,r):"class"==t||c&&"interface"==e?(k.marked="keyword",T(I("form"),_t,F)):"keyword c"==t||"async"==t?T(n?V:H):"("==t?T(I(")"),W,R(")"),F,r):"operator"==t||"spread"==t?T(n?V:H):"["==t?T(I("]"),Bt,F,r):"{"==t?ot(et,"}",null,r):"quasi"==t?S(K,r):"new"==t?T(function(t){return function(e){return"."==e?T(t?Z:J):"variable"==e&&c?T(gt,t?q:U):S(t?V:H)}}(n)):"import"==t?T(H):T()}function W(t){return t.match(/[;\}\)\],]/)?S():S(H)}function U(t,e){return","==t?T(H):q(t,e,!1)}function q(t,e,n){var i=0==n?U:q,r=0==n?H:V;return"=>"==t?T(L,n?X:Y,D):"operator"==t?/\+\+|--/.test(e)||c&&"!"==e?T(i):c&&"<"==e&&k.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?T(I(">"),rt(ut,">"),F,i):"?"==e?T(H,R(":"),r):T(r):"quasi"==t?S(K,i):";"!=t?"("==t?ot(V,")","call",i):"."==t?T(tt,i):"["==t?T(I("]"),W,R("]"),F,i):c&&"as"==e?(k.marked="keyword",T(ut,i)):"regexp"==t?(k.state.lastType=k.marked="operator",k.stream.backUp(k.stream.pos-k.stream.start-1),T(r)):void 0:void 0}function K(t,e){return"quasi"!=t?S():"${"!=e.slice(e.length-2)?T(K):T(H,G)}function G(t){if("}"==t)return k.marked="string-2",k.state.tokenize=m,T(K)}function Y(t){return b(k.stream,k.state),S("{"==t?j:H)}function X(t){return b(k.stream,k.state),S("{"==t?j:V)}function J(t,e){if("target"==e)return k.marked="keyword",T(U)}function Z(t,e){if("target"==e)return k.marked="keyword",T(q)}function Q(t){return":"==t?T(F,j):S(U,R(";"),F)}function tt(t){if("variable"==t)return k.marked="property",T()}function et(t,e){if("async"==t)return k.marked="property",T(et);if("variable"==t||"keyword"==k.style){return k.marked="property","get"==e||"set"==e?T(nt):(c&&k.state.fatArrowAt==k.stream.start&&(n=k.stream.match(/^\s*:\s*/,!1))&&(k.state.fatArrowAt=k.stream.pos+n[0].length),T(it));var n}else{if("number"==t||"string"==t)return k.marked=a?"property":k.style+" property",T(it);if("jsonld-keyword"==t)return T(it);if(c&&A(e))return k.marked="keyword",T(et);if("["==t)return T(H,at,R("]"),it);if("spread"==t)return T(V,it);if("*"==e)return k.marked="keyword",T(et);if(":"==t)return S(it)}}function nt(t){return"variable"!=t?S(it):(k.marked="property",T(Ot))}function it(t){return":"==t?T(V):"("==t?S(Ot):void 0}function rt(t,e,n){function i(r,o){if(n?n.indexOf(r)>-1:","==r){var s=k.state.lexical;return"call"==s.info&&(s.pos=(s.pos||0)+1),T(function(n,i){return n==e||i==e?S():S(t)},i)}return r==e||o==e?T():T(R(e))}return function(n,r){return n==e||r==e?T():S(t,i)}}function ot(t,e,n){for(var i=3;i"),ut):void 0}function ht(t){if("=>"==t)return T(ut)}function dt(t,e){return"variable"==t||"keyword"==k.style?(k.marked="property",T(dt)):"?"==e?T(dt):":"==t?T(ut):"["==t?T(H,at,R("]"),dt):void 0}function ft(t,e){return"variable"==t&&k.stream.match(/^\s*[?:]/,!1)||"?"==e?T(ft):":"==t?T(ut):S(ut)}function pt(t,e){return"<"==e?T(I(">"),rt(ut,">"),F,pt):"|"==e||"."==t||"&"==e?T(ut):"["==t?T(R("]"),pt):"extends"==e||"implements"==e?(k.marked="keyword",T(ut)):void 0}function gt(t,e){if("<"==e)return T(I(">"),rt(ut,">"),F,pt)}function vt(){return S(ut,mt)}function mt(t,e){if("="==e)return T(ut)}function yt(t,e){return"enum"==e?(k.marked="keyword",T(Wt)):S(bt,at,wt,Ct)}function bt(t,e){return c&&A(e)?(k.marked="keyword",T(bt)):"variable"==t?(M(e),T()):"spread"==t?T(bt):"["==t?ot(bt,"]"):"{"==t?ot(xt,"}"):void 0}function xt(t,e){return"variable"!=t||k.stream.match(/^\s*:/,!1)?("variable"==t&&(k.marked="property"),"spread"==t?T(bt):"}"==t?S():T(R(":"),bt,wt)):(M(e),T(wt))}function wt(t,e){if("="==e)return T(V)}function Ct(t){if(","==t)return T(yt)}function kt(t,e){if("keyword b"==t&&"else"==e)return T(I("form","else"),j,F)}function St(t,e){return"await"==e?T(St):"("==t?T(I(")"),Tt,R(")"),F):void 0}function Tt(t){return"var"==t?T(yt,R(";"),Mt):";"==t?T(Mt):"variable"==t?T(Et):S(H,R(";"),Mt)}function Et(t,e){return"in"==e||"of"==e?(k.marked="keyword",T(H)):T(U,Mt)}function Mt(t,e){return";"==t?T(At):"in"==e||"of"==e?(k.marked="keyword",T(H)):S(H,R(";"),At)}function At(t){")"!=t&&T(H)}function Ot(t,e){return"*"==e?(k.marked="keyword",T(Ot)):"variable"==t?(M(e),T(Ot)):"("==t?T(L,I(")"),rt(Pt,")"),F,lt,j,D):c&&"<"==e?T(I(">"),rt(vt,">"),F,Ot):void 0}function Pt(t,e){return"@"==e&&T(H,Pt),"spread"==t?T(Pt):c&&A(e)?(k.marked="keyword",T(Pt)):S(bt,at,wt)}function _t(t,e){return"variable"==t?Lt(t,e):Nt(t,e)}function Lt(t,e){if("variable"==t)return M(e),T(Nt)}function Nt(t,e){return"<"==e?T(I(">"),rt(vt,">"),F,Nt):"extends"==e||"implements"==e||c&&","==t?("implements"==e&&(k.marked="keyword"),T(c?ut:H,Nt)):"{"==t?T(I("}"),Dt,F):void 0}function Dt(t,e){return"async"==t||"variable"==t&&("static"==e||"get"==e||"set"==e||c&&A(e))&&k.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(k.marked="keyword",T(Dt)):"variable"==t||"keyword"==k.style?(k.marked="property",T(c?It:Ot,Dt)):"["==t?T(H,at,R("]"),c?It:Ot,Dt):"*"==e?(k.marked="keyword",T(Dt)):";"==t?T(Dt):"}"==t?T():"@"==e?T(H,Dt):void 0}function It(t,e){return"?"==e?T(It):":"==t?T(ut,wt):"="==e?T(V):S(Ot)}function Ft(t,e){return"*"==e?(k.marked="keyword",T($t,R(";"))):"default"==e?(k.marked="keyword",T(H,R(";"))):"{"==t?T(rt(Rt,"}"),$t,R(";")):S(j)}function Rt(t,e){return"as"==e?(k.marked="keyword",T(R("variable"))):"variable"==t?S(V,Rt):void 0}function jt(t){return"string"==t?T():"("==t?S(H):S(zt,Ht,$t)}function zt(t,e){return"{"==t?ot(zt,"}"):("variable"==t&&M(e),"*"==e&&(k.marked="keyword"),T(Vt))}function Ht(t){if(","==t)return T(zt,Ht)}function Vt(t,e){if("as"==e)return k.marked="keyword",T(zt)}function $t(t,e){if("from"==e)return k.marked="keyword",T(H)}function Bt(t){return"]"==t?T():S(rt(V,"]"))}function Wt(){return S(I("form"),bt,R("{"),I("}"),rt(Ut,"}"),F,F)}function Ut(){return S(bt,wt)}function qt(t,e,n){return e.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(e.lastType)||"quasi"==e.lastType&&/\{\s*$/.test(t.string.slice(0,t.pos-(n||0)))}return D.lex=!0,F.lex=!0,{startState:function(t){var e={tokenize:g,lastType:"sof",cc:[],lexical:new w((t||0)-o,0,"block",!1),localVars:n.localVars,context:n.localVars&&new O(null,null,!1),indented:t||0};return n.globalVars&&"object"==typeof n.globalVars&&(e.globalVars=n.globalVars),e},token:function(t,e){if(t.sol()&&(e.lexical.hasOwnProperty("align")||(e.lexical.align=!1),e.indented=t.indentation(),b(t,e)),e.tokenize!=v&&t.eatSpace())return null;var n=e.tokenize(t,e);return"comment"==i?n:(e.lastType="operator"!=i||"++"!=r&&"--"!=r?i:"incdec",function(t,e,n,i,r){var o=t.cc;for(k.state=t,k.stream=r,k.marked=null,k.cc=o,k.style=e,t.lexical.hasOwnProperty("align")||(t.lexical.align=!0);;){var s=o.length?o.pop():l?H:j;if(s(n,i)){for(;o.length&&o[o.length-1].lex;)o.pop()();return k.marked?k.marked:"variable"==n&&C(t,i)?"variable-2":e}}}(e,n,i,r,t))},indent:function(e,i){if(e.tokenize==v)return t.Pass;if(e.tokenize!=g)return 0;var r,a=i&&i.charAt(0),l=e.lexical;if(!/^\s*else\b/.test(i))for(var c=e.cc.length-1;c>=0;--c){var u=e.cc[c];if(u==F)l=l.prev;else if(u!=kt)break}for(;("stat"==l.type||"form"==l.type)&&("}"==a||(r=e.cc[e.cc.length-1])&&(r==U||r==q)&&!/^[,\.=+\-*:?[\(]/.test(i));)l=l.prev;s&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var h=l.type,f=a==h;return"vardef"==h?l.indented+("operator"==e.lastType||","==e.lastType?l.info.length+1:0):"form"==h&&"{"==a?l.indented:"form"==h?l.indented+o:"stat"==h?l.indented+(function(t,e){return"operator"==t.lastType||","==t.lastType||d.test(e.charAt(0))||/[,.]/.test(e.charAt(0))}(e,i)?s||o:0):"switch"!=l.info||f||0==n.doubleIndentSwitch?l.align?l.column+(f?0:1):l.indented+(f?0:o):l.indented+(/^(?:case|default)\b/.test(i)?o:2*o)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:a,jsonMode:l,expressionAllowed:qt,skipExpression:function(t){var e=t.cc[t.cc.length-1];e!=H&&e!=V||t.cc.pop()}}}),t.registerHelper("wordChars","javascript",/[\w$]/),t.defineMIME("text/javascript","javascript"),t.defineMIME("text/ecmascript","javascript"),t.defineMIME("application/javascript","javascript"),t.defineMIME("application/x-javascript","javascript"),t.defineMIME("application/ecmascript","javascript"),t.defineMIME("application/json",{name:"javascript",json:!0}),t.defineMIME("application/x-json",{name:"javascript",json:!0}),t.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),t.defineMIME("text/typescript",{name:"javascript",typescript:!0}),t.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(n(6))},function(t,e,n){!function(t){"use strict";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode("xml",function(i,r){var o,s,a=i.indentUnit,l={},c=r.htmlMode?e:n;for(var u in c)l[u]=c[u];for(var u in r)l[u]=r[u];function h(t,e){function n(n){return e.tokenize=n,n(t,e)}var i=t.next();return"<"==i?t.eat("!")?t.eat("[")?t.match("CDATA[")?n(f("atom","]]>")):null:t.match("--")?n(f("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),n(function t(e){return function(n,i){for(var r;null!=(r=n.next());){if("<"==r)return i.tokenize=t(e+1),i.tokenize(n,i);if(">"==r){if(1==e){i.tokenize=h;break}return i.tokenize=t(e-1),i.tokenize(n,i)}}return"meta"}}(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),e.tokenize=f("meta","?>"),"meta"):(o=t.eat("/")?"closeTag":"openTag",e.tokenize=d,"tag bracket"):"&"==i?(t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"))?"atom":"error":(t.eatWhile(/[^&<]/),null)}function d(t,e){var n=t.next();if(">"==n||"/"==n&&t.eat(">"))return e.tokenize=h,o=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return o="equals",null;if("<"==n){e.tokenize=h,e.state=v,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+" tag error":"tag error"}return/[\'\"]/.test(n)?(e.tokenize=function(t){var e=function(e,n){for(;!e.eol();)if(e.next()==t){n.tokenize=d;break}return"string"};return e.isInAttribute=!0,e}(n),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(t,e){return function(n,i){for(;!n.eol();){if(n.match(e)){i.tokenize=h;break}n.next()}return t}}function p(t){t.context&&(t.context=t.context.prev)}function g(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!l.contextGrabbers.hasOwnProperty(n)||!l.contextGrabbers[n].hasOwnProperty(e))return;p(t)}}function v(t,e,n){return"openTag"==t?(n.tagStart=e.column(),m):"closeTag"==t?y:v}function m(t,e,n){return"word"==t?(n.tagName=e.current(),s="tag",w):l.allowMissingTagName&&"endTag"==t?(s="tag bracket",w(t,0,n)):(s="error",m)}function y(t,e,n){if("word"==t){var i=e.current();return n.context&&n.context.tagName!=i&&l.implicitlyClosed.hasOwnProperty(n.context.tagName)&&p(n),n.context&&n.context.tagName==i||!1===l.matchClosing?(s="tag",b):(s="tag error",x)}return l.allowMissingTagName&&"endTag"==t?(s="tag bracket",b(t,0,n)):(s="error",x)}function b(t,e,n){return"endTag"!=t?(s="error",b):(p(n),v)}function x(t,e,n){return s="error",b(t,0,n)}function w(t,e,n){if("word"==t)return s="attribute",C;if("endTag"==t||"selfcloseTag"==t){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==t||l.autoSelfClosers.hasOwnProperty(i)?g(n,i):(g(n,i),n.context=new function(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}(n,i,r==n.indented)),v}return s="error",w}function C(t,e,n){return"equals"==t?k:(l.allowMissing||(s="error"),w(t,0,n))}function k(t,e,n){return"string"==t?S:"word"==t&&l.allowUnquoted?(s="string",w):(s="error",w(t,0,n))}function S(t,e,n){return"string"==t?S:w(t,0,n)}return h.isInText=!0,{startState:function(t){var e={tokenize:h,state:v,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;o=null;var n=e.tokenize(t,e);return(n||o)&&"comment"!=n&&(s=null,e.state=e.state(o||n,t,e),s&&(n="error"==s?n+" error":s)),n},indent:function(e,n,i){var r=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+a;if(r&&r.noIndent)return t.Pass;if(e.tokenize!=d&&e.tokenize!=h)return i?i.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==l.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+a*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(t){t.state==k&&(t.state=w)}}}),t.defineMIME("text/xml","xml"),t.defineMIME("application/xml","xml"),t.mimeModes.hasOwnProperty("text/html")||t.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(6))},function(t,e,n){!function(t){"use strict";var e={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]},n={};function i(t,e){var i=t.match(function(t){var e=n[t];return e||(n[t]=new RegExp("\\s+"+t+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}(e));return i?/^\s*(.*?)\s*$/.exec(i[2])[1]:""}function r(t,e){return new RegExp((e?"^":"")+"","i")}function o(t,e){for(var n in t)for(var i=e[n]||(e[n]=[]),r=t[n],o=r.length-1;o>=0;o--)i.unshift(r[o])}t.defineMode("htmlmixed",function(n,s){var a=t.getMode(n,{name:"xml",htmlMode:!0,multilineTagIndentFactor:s.multilineTagIndentFactor,multilineTagIndentPastTag:s.multilineTagIndentPastTag}),l={},c=s&&s.tags,u=s&&s.scriptTypes;if(o(e,l),c&&o(c,l),u)for(var h=u.length-1;h>=0;h--)l.script.unshift(["type",u[h].matches,u[h].mode]);function d(e,o){var s,c=a.token(e,o.htmlState),u=/\btag\b/.test(c);if(u&&!/[<>\s\/]/.test(e.current())&&(s=o.htmlState.tagName&&o.htmlState.tagName.toLowerCase())&&l.hasOwnProperty(s))o.inTag=s+" ";else if(o.inTag&&u&&/>$/.test(e.current())){var h=/^([\S]+) (.*)/.exec(o.inTag);o.inTag=null;var f=">"==e.current()&&function(t,e){for(var n=0;n-1?t.backUp(i.length-r):i.match(/<\/?$/)&&(t.backUp(i.length),t.match(e,!1)||t.match(i)),n}(t,v,e.localMode.token(t,e.localState))},o.localMode=p,o.localState=t.startState(p,a.indent(o.htmlState,""))}else o.inTag&&(o.inTag+=e.current(),e.eol()&&(o.inTag+=" "));return c}return{startState:function(){var e=t.startState(a);return{token:d,inTag:null,localMode:null,localState:null,htmlState:e}},copyState:function(e){var n;return e.localState&&(n=t.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:n,htmlState:t.copyState(a,e.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(e,n,i){return!e.localMode||/^\s*<\//.test(n)?a.indent(e.htmlState,n):e.localMode.indent?e.localMode.indent(e.localState,n,i):t.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||a}}}},"xml","javascript","css"),t.defineMIME("text/html","htmlmixed")}(n(6),n(189),n(188),n(81))},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},i="",r=this.em,o=r&&r.getConfig("avoidInlineStyle"),s=t.styleToString(),a=t.get("classes"),l=n.wrappesIsBody,c=t.get("wrapper");if(this.ids.push("#"+t.getId()),a.each(function(t){return e.compCls.push(t.getFullName())}),(!o||c)&&s){var u="#"+t.getId();i=(u=l&&c?"body":u)+"{"+s+"}"}return t.components().each(function(t){return i+=e.buildFromModel(t,n)}),i},build:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.cssc,o=n.em||"";this.em=o,this.compCls=[],this.ids=[];var s=this.buildFromModel(t,n),a=(0,i.isUndefined)(n.clearStyles)&&o?o.getConfig("clearStyles"):n.clearStyles;return r&&function(){var t=r.getAll(),i={},l=[];for(var c in t.each(function(t){var r=t.getAtRule();if(r){var o=i[r];o?o.push(t):i[r]=[t]}else s+=e.buildFromRule(t,l,n)}),i){var u="";i[c].forEach(function(t){return u+=e.buildFromRule(t,l,n)}),u&&(s+=c+"{"+u+"}")}o&&a&&t.remove(l)}(),s},buildFromRule:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r="",o=t.selectorsToString({skipAdd:1}),s=t.get("selectorsAdd"),a=t.get("singleAtRule"),l=void 0;if(t.get("selectors").each(function(t){var e=t.getFullName();(n.compCls.indexOf(e)>=0||n.ids.indexOf(e)>=0||i.keepUnusedStyles)&&(l=1)}),o&&l||s||a){var c=t.getDeclaration();c&&(r+=c)}else e.push(t);return r}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({build:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.get("components");return e.exportWrapper?e.wrappesIsBody?""+this.buildModels(n)+"":t.toHTML():this.buildModels(n)},buildModels:function(t){var e="";return t.each(function(t){e+=t.toHTML()}),e}})},function(t,e,n){"use strict";t.exports={stylePrefix:"cm-",inlineCss:!1}},function(t,e,n){"use strict";t.exports=function(){var t={},e=n(196),i=n(195),r=n(194),o=n(193),s=n(192),a=n(191),l=n(186),c={},u={},h={},d={};return{getConfig:function(){return t},config:t,EditorView:l,name:"CodeManager",init:function(n){for(var l in t=n||{},e)l in t||(t[l]=e[l]);var c=t.pStylePrefix;return c&&(t.stylePrefix=c+t.stylePrefix),u.html=new i,u.css=new r,u.json=new o,u.js=new s,d.CodeMirror=new a,this.loadDefaultGenerators().loadDefaultViewers(),this},addGenerator:function(t,e){return c[t]=e,this},getGenerator:function(t){return c[t]||null},getGenerators:function(){return c},addViewer:function(t,e){return h[t]=e,this},getViewer:function(t){return h[t]||null},getViewers:function(){return h},updateViewer:function(t,e){t.setContent(e)},getCode:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.em=t.em;var r=this.getGenerator(n);return r?r.build(e,i):""},loadDefaultGenerators:function(){for(var t in u)this.addGenerator(t,u[t]);return this},loadDefaultViewers:function(){for(var t in d)this.addViewer(t,d[t]);return this}}}},function(t,e,n){"use strict";t.exports=n(0).View.extend({template:function(t){var e=t.pfx,n=t.ppfx,i=t.content;return'
    \n
    \n
    '+t.title+'
    \n
    ⨯
    \n
    \n
    \n
    '+i+'
    \n
    \n
    \n
    \n
    \n '},events:{},initialize:function(t){var e=this.model,n=t.config||{},i=n.stylePrefix||"",r=n.backdrop;this.config=n,this.pfx=i,this.ppfx=n.pStylePrefix||"",this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"change:title",this.updateTitle),this.listenTo(e,"change:content",this.updateContent),this.events["click ."+i+"btn-close"]="hide",r&&(this.events["click ."+i+"backlayer"]="hide"),this.delegateEvents()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){var t=this.pfx;return this.$content||(this.$content=this.$el.find("."+t+"content #"+t+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var t=this.getContent(),e=t.children(),n=this.getCollector(),i=this.model.get("content");e.length&&n.append(e),t.empty().append(i)},updateTitle:function(){var t=this.getTitle();t&&(t.innerHTML=this.model.get("title"))},updateOpen:function(){this.el.style.display=this.model.get("open")?"":"none"},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var t=this.$el,e=this.pfx,n=(this.ppfx,this.model.toJSON());return n.pfx=this.pfx,n.ppfx=this.ppfx,t.html(this.template(n)),t.attr("class",e+"container"),this.updateOpen(),this}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{title:"",content:"",open:!1}})},function(t,e,n){"use strict";t.exports={stylePrefix:"mdl-",title:"",content:"",backdrop:!0}},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(200),o=n(199),s=n(198);return{name:"Modal",init:function(n){for(var a in i=n||{},r)a in i||(i[a]=r[a]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new o(i),e=new s({model:t,config:i}),this},postRender:function(t){var e=t.model.getConfig().el||t.el;this.render().appendTo(e)},open:function(){return e.show(),this},close:function(){return e.hide(),this},isOpen:function(){return!!t.get("open")},setTitle:function(e){return t.set("title",e),this},getTitle:function(){return t.get("title")},setContent:function(e){return t.set("content"," "),t.set("content",e),this},getContent:function(){return t.get("content")},getContentEl:function(){return e.getContent().get(0)},getModel:function(){return t},render:function(){return e.render().$el}}}},function(t,e,n){"use strict";var i=n(10);t.exports=n(0).View.extend({template:function(){var t=this.pfx;this.ppfx;return'\n \n '+(this.model.get("label")||"")+'\n \n ⨯\n \n '},events:{"click [data-tag-remove]":"removeTag","click [data-tag-status]":"changeStatus","dblclick [data-tag-name]":"startEditTag","focusout [data-tag-name]":"endEditTag"},initialize:function(t){this.config=t.config||{},this.coll=t.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=this.config.em,this.listenTo(this.model,"change:active",this.updateStatus)},getInputEl:function(){return this.inputEl||(this.inputEl=this.el.querySelector("[data-tag-name]")),this.inputEl},startEditTag:function(){var t=this.getInputEl();t.contentEditable=!0,t.focus()},endEditTag:function(){var t=this.model,e=this.getInputEl(),n=e.textContent,r=i.escapeName(n),o=this.target,s=o&&o.get("SelectorManager");e.contentEditable=!1,s&&(s.get(r)?e.innerText=t.get("label"):t.set({name:r,label:n}))},changeStatus:function(){this.model.set("active",!this.model.get("active"))},removeTag:function(t){var e=this,n=this.target,i=this.model,r=this.coll,o=(this.el,n&&n.getSelected());o&&(o.get,o.get("classes").remove(i)),r&&r.remove(i),setTimeout(function(){return e.remove()},0)},updateStatus:function(){var t="fa-check-square-o";this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-square-o").addClass(t),this.$el.removeClass("opac50")):(this.$chk.removeClass(t).addClass("fa-square-o"),this.$el.addClass("opac50"))},render:function(){var t=this.pfx,e=this.ppfx;return this.$el.html(this.template()),this.$el.attr("class",t+"tag "+e+"three-bg"),this.updateStatus(),this}})},function(t,e,n){"use strict";var i=o(n(1)),r=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}var s=n(202);t.exports=r.default.View.extend({template:i.default.template('\n
    \n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    <%= selectedLabel %>
    \n
    \n
    \n
    '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.em=this.target,this.listenTo(this.target,"component:toggled",this.componentChanged),this.listenTo(this.target,"component:update:classes",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(t){this.updateStateVis()},getStateOptions:function(){for(var t="",e=0;e'+this.states[e].label+"";return t},addNew:function(t){this.addToClasses(t)},startNewTag:function(t){this.$addBtn.get(0).style.display="none",this.$input.show().focus()},endNewTag:function(t){this.$addBtn.get(0).style.display="",this.$input.hide().val("")},onInputKeyUp:function(t){13===t.keyCode?this.addNewTag(this.$input.val()):27===t.keyCode&&this.endNewTag()},componentChanged:function(t){this.compTarget=this.target.getSelected();var e=this.compTarget,n=[];e&&(this.getStates().val(e.get("state")),n=e.get("classes").getValid()),this.collection.reset(n),this.updateStateVis()},updateStateVis:function(){var t=this.em,e=t&&t.getConfig("avoidInlineStyle");this.collection.length||e?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){var t=this.target.getSelected();if(this.compTarget=t,t&&t.get){var e=t.get("state"),n=this.collection,i=n.getFullString(n.getStyleable());i=i||"#"+t.getId(),i+=e?":"+e:"";var r=this.el.querySelector("#"+this.pfx+"sel");r&&(r.innerHTML=i)}},stateChanged:function(t){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.updateSelector())},addNewTag:function(t){var e=this.target,n=this.compTarget;if(t.trim()){if(e){var i=e.get("SelectorManager").add({label:t});if(n){var r=n.get("classes");r.length;r.add(i);r.length;this.collection.add(i),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(t,e){var n=e||null,i=new s({model:t,config:this.config,coll:this.collection}).render().el;return n?n.appendChild(i):this.getClasses().append(i),i},renderClasses:function(){var t=document.createDocumentFragment();return this.collection.each(function(e){this.addToClasses(e,t)},this),this.getClasses()&&this.getClasses().empty().append(t),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){var t=this.ppfx,e=this.config,n=this.$el;return n.html(this.template({selectedLabel:e.selectedLabel,statesLabel:e.statesLabel,label:e.label,pfx:this.pfx,ppfx:this.ppfx})),this.$input=n.find("input#"+this.newInputId),this.$addBtn=n.find("#"+this.addBtnId),this.$classes=n.find("#"+this.pfx+"tags-c"),this.$states=n.find("#"+this.stateInputId),this.$statesC=n.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),n.attr("class",this.className+" "+t+"one-bg "+t+"two-color"),this}})},function(t,e,n){"use strict";t.exports={stylePrefix:"clm-",appendTo:"",selectors:[],label:"Classes",statesLabel:"- State -",selectedLabel:"Selected",states:[{name:"hover",label:"Hover"},{name:"active",label:"Click"},{name:"nth-of-type(2n)",label:"Even/Odd"}]}},function(t,e,n){"use strict";var i=n(1);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=function(t){return(0,i.isString)(t)&&"#"==t[0]};t.exports=function(t){var e,s,a,l=t||{},c=n(204),u=n(10),h=n(19),d=n(203);return r(e={Selector:u,Selectors:h,name:"SelectorManager",getConfig:function(){return l}},"getConfig",function(){return l}),r(e,"init",function(t){for(var e in l=t||{},c)e in l||(l[e]=c[e]);var n=l.em,i=l.pStylePrefix;return i&&(l.stylePrefix=i+l.stylePrefix),a=new d({collection:new h([],{em:n,config:l}),config:l}),(s=new h(l.selectors)).on("add",function(t){return n.trigger("selector:add",t)}),this}),r(e,"postRender",function(){var t=this.getConfig().appendTo;t&&((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render([]))}),r(e,"add",function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,i.isObject)(t)?e=t:e.name=t,o(e.name)&&(e.name=e.name.substr(1),e.type=u.TYPE_ID),e.label&&!e.name&&(e.name=u.escapeName(e.label));var n=e.name,r=n?this.get(n,e.type):s.where(e)[0];return r||s.add(e)}),r(e,"addClass",function(t){var e=[];return(0,i.isString)(t)&&(t=t.trim().split(" ")),t.forEach(function(t){return e.push(s.add({name:t}))}),e}),r(e,"get",function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.TYPE_CLASS;return o(t)&&(t=t.substr(1),e=u.TYPE_ID),s.where({name:t,type:e})[0]}),r(e,"getAll",function(){return s}),r(e,"render",function(t){return t?new d({collection:new h(t),config:l}).render().el:a.render().el}),e}},function(t,e,n){"use strict";var i={4:"media",5:"font-face",6:"page",7:"keyframes",11:"counter-style",12:"supports",13:"document",14:"font-feature-values",15:"viewport"},r=(0,n(1).keys)(i),o=["5","6","11","15"];t.exports=function(t){return{parseSelector:function(){for(var t=[],e=[],n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split(","),i=0,r=n.length;i=0;if(p)u=1,h=i[c],d=this.parseCondition(l);else if(r.indexOf(c)>=0){var g=this.parseNode(l);d=this.parseCondition(l);for(var v=0,m=g.length;v<%= deviceLabel %>