API Moved frontend assets into admin/ "module"
We've removed the ability to directly reference JS and CSS files for form fields and other SilverStripe features in favour of a common bundle built by Webpack. The logical next step is to make the framework module free of frontend dependencies, which should simplify its operation, and avoid another time intensive "npm install" on a module.
@ -3,26 +3,26 @@ client/dist/
|
||||
admin/client/dist/
|
||||
|
||||
# Ignore legacy files
|
||||
client/src/legacy/AssetUploadField.js
|
||||
client/src/legacy/ConfirmedPasswordField.js
|
||||
client/src/legacy/DateField.js
|
||||
client/src/legacy/GridField.js
|
||||
client/src/legacy/HtmlEditorField.js
|
||||
client/src/legacy/InlineFormAction.js
|
||||
client/src/legacy/PermissionCheckboxSetField.js
|
||||
client/src/legacy/SelectionGroup.js
|
||||
client/src/legacy/TabSet.js
|
||||
client/src/legacy/TinyMCE_SSPlugin.js
|
||||
client/src/legacy/ToggleCompositeField.js
|
||||
client/src/legacy/ToggleField.js
|
||||
client/src/legacy/TreeDropdownField.js
|
||||
client/src/legacy/UploadField.js
|
||||
client/src/legacy/UploadField_downloadtemplate.js
|
||||
client/src/legacy/UploadField_select.js
|
||||
client/src/legacy/UploadField_uploadtemplate.js
|
||||
client/src/i18n.js
|
||||
client/src/i18nx.js
|
||||
client/src/jQuery.js
|
||||
admin/client/src/legacy/AssetUploadField.js
|
||||
admin/client/src/legacy/ConfirmedPasswordField.js
|
||||
admin/client/src/legacy/DateField.js
|
||||
admin/client/src/legacy/GridField.js
|
||||
admin/client/src/legacy/HtmlEditorField.js
|
||||
admin/client/src/legacy/InlineFormAction.js
|
||||
admin/client/src/legacy/PermissionCheckboxSetField.js
|
||||
admin/client/src/legacy/SelectionGroup.js
|
||||
admin/client/src/legacy/TabSet.js
|
||||
admin/client/src/legacy/TinyMCE_SSPlugin.js
|
||||
admin/client/src/legacy/ToggleCompositeField.js
|
||||
admin/client/src/legacy/ToggleField.js
|
||||
admin/client/src/legacy/TreeDropdownField.js
|
||||
admin/client/src/legacy/UploadField.js
|
||||
admin/client/src/legacy/UploadField_downloadtemplate.js
|
||||
admin/client/src/legacy/UploadField_select.js
|
||||
admin/client/src/legacy/UploadField_uploadtemplate.js
|
||||
admin/client/src/i18n.js
|
||||
admin/client/src/i18nx.js
|
||||
admin/client/src/jQuery.js
|
||||
admin/client/src/legacy/LeftAndMain.js
|
||||
admin/client/src/legacy/LeftAndMain.*.js
|
||||
admin/client/src/legacy/CMSSecurity.js
|
||||
|
@ -106,7 +106,7 @@ class HTMLEditorField_Embed extends HTMLEditorField_File
|
||||
}
|
||||
|
||||
// Default media
|
||||
return FRAMEWORK_DIR . '/client/dist/images/src/default_media.png';
|
||||
return FRAMEWORK_ADMIN_DIR . '/client/dist/images/src/default_media.png';
|
||||
}
|
||||
|
||||
public function getName()
|
||||
|
@ -60,7 +60,7 @@ class UploadField_SelectHandler extends RequestHandler
|
||||
public function index()
|
||||
{
|
||||
// Requires a separate JS file, because we can't reach into the iframe with entwine.
|
||||
Requirements::javascript(FRAMEWORK_DIR . '/admin/client/dist/js/UploadField_select.js');
|
||||
Requirements::javascript(FRAMEWORK_ADMIN_DIR . '/client/dist/js/UploadField_select.js');
|
||||
return $this->renderWith('SilverStripe\\Admin\\CMSDialog');
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ HTMLEditorConfig::get('cms')
|
||||
->enablePlugins(array(
|
||||
'contextmenu' => null,
|
||||
'image' => null,
|
||||
'ssbuttons' => FRAMEWORK_DIR . '/client/dist/js/TinyMCE_SSPlugin.js'
|
||||
'ssbuttons' => FRAMEWORK_ADMIN_DIR . '/client/dist/js/TinyMCE_SSPlugin.js'
|
||||
));
|
||||
|
||||
CMSMenu::remove_menu_class('SilverStripe\\Admin\\CMSProfileController');
|
||||
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
2
admin/client/dist/js/TinyMCE_SSPlugin.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
!function(t){function e(i){if(n[i])return n[i].exports;var a=n[i]={exports:{},id:i,loaded:!1};return t[i].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){(function(t){"use strict";!function(){var e={getInfo:function n(){return{longname:"Special buttons for SilverStripe CMS",author:"Sam Minnée",authorurl:"http://www.siverstripe.com/",infourl:"http://www.silverstripe.com/",version:"1.0"}},init:function i(e){e.addButton("sslink",{icon:"link",title:"Insert Link",cmd:"sslink"}),e.addMenuItem("sslink",{icon:"link",text:"Insert Link",cmd:"sslink"}),e.addButton("ssmedia",{icon:"image",title:"Insert Media",cmd:"ssmedia"}),e.addMenuItem("ssmedia",{icon:"image",text:"Insert Media",cmd:"ssmedia"}),e.addCommand("sslink",function(e){t("#"+this.id).entwine("ss").openLinkDialog()}),e.addCommand("ssmedia",function(e){t("#"+this.id).entwine("ss").openMediaDialog()}),e.on("BeforeExecCommand",function(t){var n=t.command,i=t.ui,a=t.value;"mceAdvLink"==n||"mceLink"==n?(t.preventDefault(),e.execCommand("sslink",i,a)):"mceAdvImage"!=n&&"mceImage"!=n||(t.preventDefault(),e.execCommand("ssmedia",i,a))}),e.on("SaveContent",function(e){var n=t(e.content),i=function a(t){return Object.keys(t).map(function(e){return t[e]?e+'="'+t[e]+'"':null}).filter(function(t){return null!==t}).join(" ")};n.find(".ss-htmleditorfield-file.embed").each(function(){var e=t(this),n={width:e.attr("width"),"class":e.attr("cssclass"),thumbnail:e.data("thumbnail")},a="[embed "+i(n)+"]"+e.data("url")+"[/embed]";e.replaceWith(a)}),n.find("img").each(function(){var e=t(this),n={src:e.attr("src"),id:e.data("id"),width:e.attr("width"),height:e.attr("height"),"class":e.attr("class"),title:e.attr("title"),alt:e.attr("alt")},a="[image "+i(n)+"]";e.replaceWith(a)}),e.content="",n.each(function(){void 0!==this.outerHTML&&(e.content+=this.outerHTML)})}),e.on("BeforeSetContent",function(e){for(var n,i=e.content,a=function d(t){return t.match(/([^\s\/'"=,]+)\s*=\s*(('([^']+)')|("([^"]+)")|([^\s,\]]+))/g).reduce(function(t,e){var n=e.match(/^([^\s\/'"=,]+)\s*=\s*(?:(?:'([^']+)')|(?:"([^"]+)")|(?:[^\s,\]]+))$/),i=n[1],a=n[2]||n[3]||n[4];return t[i]=a,t},{})},s=/\[embed(.*?)\](.+?)\[\/\s*embed\s*\]/gi;n=s.exec(i);){var r=a(n[1]),c;c=t("<img/>").attr({src:r.thumbnail,width:r.width,height:r.height,"class":r["class"],"data-url":n[2]}).addClass("ss-htmleditorfield-file embed"),r.cssclass=r["class"],Object.keys(r).forEach(function(t){return c.attr("data-"+t,r[t])}),i=i.replace(n[0],t("<div/>").append(c).html())}for(var s=/\[image(.*?)\]/gi;n=s.exec(i);){var r=a(n[1]),c=t("<img/>").attr({src:r.src,width:r.width,height:r.height,"class":r["class"],alt:r.alt,title:r.title,"data-id":r.id});i=i.replace(n[0],t("<div/>").append(c).html())}e.content=i})}};tinymce.PluginManager.add("ssbuttons",function(t){e.init(t)})}()}).call(e,n(1))},function(t,e){t.exports=jQuery}]);
|
||||
//# sourceMappingURL=TinyMCE_SSPlugin.js.map
|
@ -17,13 +17,13 @@ require('../legacy/ModelAdmin.js');
|
||||
|
||||
// Fields used by core legacy UIs, or available to users
|
||||
// To do: determine better way of using webpack to pull in optional javascript
|
||||
require('../../../../client/src/legacy/AssetUploadField.js');
|
||||
require('../../../../client/src/legacy/ConfirmedPasswordField.js');
|
||||
require('../../../../client/src/legacy/UploadField.js');
|
||||
require('../../../../client/src/legacy/SelectionGroup.js');
|
||||
require('../../../../client/src/legacy/DateField.js');
|
||||
require('../../../../client/src/legacy/ToggleCompositeField.js');
|
||||
require('../legacy/AssetUploadField.js');
|
||||
require('../legacy/ConfirmedPasswordField.js');
|
||||
require('../legacy/UploadField.js');
|
||||
require('../legacy/SelectionGroup.js');
|
||||
require('../legacy/DateField.js');
|
||||
require('../legacy/ToggleCompositeField.js');
|
||||
require('../legacy/MemberDatetimeOptionsetField.js');
|
||||
|
||||
require('../../../../client/src/styles/legacy/CheckboxSetField.scss');
|
||||
require('../../../../client/src/styles/legacy/DatetimeField.scss');
|
||||
require('../styles/legacy/CheckboxSetField.scss');
|
||||
require('../styles/legacy/DatetimeField.scss');
|
||||
|
@ -48,25 +48,25 @@ require('../../../../thirdparty//jstree/themes/apple/style.css');
|
||||
|
||||
require('../../../thirdparty/jquery-hoverIntent/jquery.hoverIntent.js');
|
||||
require('../../../../thirdparty/jquery-changetracker/lib/jquery.changetracker.js');
|
||||
require('../../../../client/src/legacy/TreeDropdownField.js');
|
||||
require('../legacy/TreeDropdownField.js');
|
||||
|
||||
require('../../../../client/src/legacy/DateField.js');
|
||||
require('../legacy/DateField.js');
|
||||
|
||||
|
||||
// TODO Move UploadField.js deps into the file once figuring out why uploads fail then
|
||||
require('../../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../../admin/client/src/legacy/ssui.core.js');
|
||||
require('../legacy/ssui.core.js');
|
||||
require('imports?define=>false&this=>window!blueimp-load-image/load-image.js');
|
||||
require('blueimp-file-upload/jquery.iframe-transport.js');
|
||||
require('blueimp-file-upload/cors/jquery.xdr-transport.js');
|
||||
require('blueimp-file-upload/jquery.fileupload.js');
|
||||
require('blueimp-file-upload/jquery.fileupload-ui.js');
|
||||
require('../../../../client/src/legacy/UploadField.js');
|
||||
require('../legacy/UploadField.js');
|
||||
|
||||
require('../../../../client/src/legacy/HtmlEditorField.js');
|
||||
require('../../../../client/src/legacy/TabSet.js');
|
||||
require('../legacy/HtmlEditorField.js');
|
||||
require('../legacy/TabSet.js');
|
||||
require('../legacy/ssui.core.js');
|
||||
require('../../../../client/src/legacy/GridField.js');
|
||||
require('../legacy/GridField.js');
|
||||
require('json-js');
|
||||
require('chosen-js');
|
||||
|
||||
|
BIN
admin/client/src/images/default_media.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
@ -1,7 +1,7 @@
|
||||
import $ from 'jQuery';
|
||||
|
||||
// entwine also required, but can't be included more than once without error
|
||||
require('../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
|
||||
$.fn.extend({
|
||||
ssDatepicker: function(opts) {
|
@ -1,8 +1,8 @@
|
||||
import $ from 'jQuery';
|
||||
import i18n from 'i18n';
|
||||
|
||||
require('../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||
require('../../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../../thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||
|
||||
require('../styles/legacy/GridField.scss');
|
||||
|
@ -3,7 +3,7 @@
|
||||
*/
|
||||
import $ from 'jQuery';
|
||||
|
||||
require('../../../../admin/client/src/legacy/ssui.core.js');
|
||||
require('../legacy/ssui.core.js');
|
||||
|
||||
var windowWidth, windowHeight;
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
import $ from 'jQuery';
|
||||
|
||||
require('./LeftAndMain.js');
|
||||
require('../../../../client/src/legacy/PermissionCheckboxSetField.js');
|
||||
require('PermissionCheckboxSetField.js');
|
||||
|
||||
var refreshAfterImport = function(e) {
|
||||
// Check for a message <div>, an indication that the form has been submitted.
|
||||
|
@ -1,10 +1,10 @@
|
||||
import $ from 'jQuery';
|
||||
|
||||
require('../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../thirdparty/jquery-cookie/jquery.cookie.js');
|
||||
require('../../../thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||
require('../../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../../thirdparty/jquery-cookie/jquery.cookie.js');
|
||||
require('../../../../thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||
|
||||
require('../../../thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
require('../../../../thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
|
||||
$.entwine('ss', function($){
|
||||
/**
|
@ -1,9 +1,9 @@
|
||||
import $ from 'jQuery';
|
||||
|
||||
// entwine also required, but can't be included more than once without error
|
||||
require('../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
require('../../../../thirdparty/jquery-ui/jquery-ui.js');
|
||||
|
||||
require('../../../thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
require('../../../../thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
|
||||
$.entwine('ss', function($){
|
||||
$('.ss-toggle').entwine({
|
@ -1,10 +1,10 @@
|
||||
import $ from 'jQuery';
|
||||
import i18n from 'i18n';
|
||||
|
||||
require('../../../thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||
require('../../../thirdparty/jstree/jquery.jstree.js');
|
||||
require('../../../../thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||
require('../../../../thirdparty/jstree/jquery.jstree.js');
|
||||
|
||||
require('../../../thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
require('../../../../thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
require('../styles/legacy/TreeDropdownField.scss');
|
||||
|
||||
$.entwine('ss', function($){
|
@ -2,7 +2,7 @@
|
||||
@import "variables";
|
||||
|
||||
// Compatibilty with compass
|
||||
@import "../../../../client/src/styles/_compasscompat";
|
||||
@import "legacy/_compasscompat";
|
||||
|
||||
// Thirdparty
|
||||
@import "chosen";
|
||||
|
@ -1,7 +1,7 @@
|
||||
// TODO we need a seperated file for styles that are used in both cms and front end (such as buttons)
|
||||
@import "../../../../admin/client/src/styles/legacy/themes/default.scss";
|
||||
@import "../../../../admin/client/src/styles/legacy/_mixins.scss";
|
||||
@import "../_elementMixins";
|
||||
@import "themes/default.scss";
|
||||
@import "_mixins.scss";
|
||||
@import "_elementMixins";
|
||||
|
||||
.ss-uploadfield-view-allowed-extensions {
|
||||
margin-top: -36px;
|
||||
@ -317,7 +317,7 @@ body.cms.ss-uploadfield-edit-iframe {
|
||||
width: 100%;
|
||||
height: 22px;
|
||||
padding: 15px 0;
|
||||
background: url("../../../../admin/client/src/images/spinner.gif") no-repeat 50% 50%;
|
||||
background: url("../../images/spinner.gif") no-repeat 50% 50%;
|
||||
|
||||
iframe {
|
||||
/* Old IE needs this or it'll give the iframe a white background, covering the spinner */
|
||||
@ -358,7 +358,7 @@ body.cms.ss-uploadfield-edit-iframe {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background: rgba(236, 239, 241, .9) url('../../../../admin/client/src/images/drag_drop_opt.svg') center center no-repeat;
|
||||
background: rgba(236, 239, 241, .9) url('../../images/drag_drop_opt.svg') center center no-repeat;
|
||||
background-size: 312px 325px;
|
||||
z-index: 100;
|
||||
}
|
||||
@ -385,7 +385,7 @@ body.cms.ss-uploadfield-edit-iframe {
|
||||
.ss-uploadfield-files {
|
||||
.ss-uploadfield-item-editform {
|
||||
&.loading {
|
||||
background-image: url("../../../../admin/client/src/images/spinner@2x.gif");
|
||||
background-image: url("../../images/spinner@2x.gif");
|
||||
background-size: 43px 43px;
|
||||
}
|
||||
}
|
@ -6,9 +6,9 @@
|
||||
* @todo Add radial gradient to default delete button state
|
||||
* @todo Create SASS mixin-function to simply swap the from/to, to to/from colours in grsdient mixins?
|
||||
*/
|
||||
@import "../../../../admin/client/src/styles/legacy/themes/default";
|
||||
@import "../../../../admin/client/src/styles/legacy/mixins";
|
||||
@import "../elementMixins";
|
||||
@import "themes/default";
|
||||
@import "mixins";
|
||||
@import "elementMixins";
|
||||
|
||||
|
||||
// Extends basic table styles, requires .table .table-hover
|
||||
@ -197,7 +197,7 @@
|
||||
}
|
||||
|
||||
a.view-link {
|
||||
background: url(../../../../admin/client/src/sprites/btn-icon/magnifier.png) no-repeat 0 1px;
|
||||
background: url(../../sprites/btn-icon/magnifier.png) no-repeat 0 1px;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
@import "../../../../admin/client/src/styles/legacy/_mixins.scss";
|
||||
@import "_mixins.scss";
|
||||
|
||||
div.TreeDropdownField {
|
||||
width: 400px;
|
||||
@ -26,9 +26,9 @@ div.TreeDropdownField {
|
||||
@extend .treedropdownfield-title;
|
||||
|
||||
//Style search box to match chosen search
|
||||
background:url('../../../../admin/client/src/images/chosen-sprite.png') no-repeat 100% -22px; //For browers that only support 1 background
|
||||
background:url('../../images/chosen-sprite.png') no-repeat 100% -22px; //For browers that only support 1 background
|
||||
background:
|
||||
url('../../../../admin/client/src/images/chosen-sprite.png') no-repeat 100% -22px,
|
||||
url('../../images/chosen-sprite.png') no-repeat 100% -22px,
|
||||
linear-gradient(to bottom, #eeeeee 1%, #ffffff 15%);
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
@ -1,6 +1,6 @@
|
||||
// TODO we need a seperated file for styles that are used in both cms and front end (such as buttons)
|
||||
@import "../../../../admin/client/src/styles/legacy/themes/default.scss";
|
||||
@import "../../../../admin/client/src/styles/legacy/_mixins.scss";
|
||||
@import "themes/default.scss";
|
||||
@import "_mixins.scss";
|
||||
|
||||
.ss-uploadfield,
|
||||
.ss-insert-media {
|
||||
@ -264,7 +264,7 @@
|
||||
width: 100%;
|
||||
height: 22px;
|
||||
margin: 15px 0 0;
|
||||
background: url(../../../../admin/client/src/images/spinner.gif) no-repeat 50% 0;
|
||||
background: url(../../images/spinner.gif) no-repeat 50% 0;
|
||||
|
||||
iframe {
|
||||
/* Old IE needs this or it'll give the iframe a white background, covering the spinner */
|
||||
@ -310,7 +310,7 @@
|
||||
|
||||
.loader {
|
||||
height: 94px; // Approxmiately matches the height of the field once a file is attached, avoids a 'jump' in size
|
||||
background: transparent url(../../../../admin/client/src/images/spinner.gif) no-repeat 50% 50%;
|
||||
background: transparent url(../../images/spinner.gif) no-repeat 50% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@ -330,7 +330,7 @@
|
||||
.ss-uploadfield-files {
|
||||
.ss-uploadfield-item-editform {
|
||||
&.loading {
|
||||
background-image: url("../../../../admin/client/src/images/spinner@2x.gif");
|
||||
background-image: url("../../images/spinner@2x.gif");
|
||||
background-size: 43px 43px;
|
||||
}
|
||||
}
|
||||
@ -339,7 +339,7 @@
|
||||
|
||||
.ss-upload {
|
||||
.loader {
|
||||
background-image: url("../../../../admin/client/src/images/spinner@2x.gif");
|
||||
background-image: url("../../images/spinner@2x.gif");
|
||||
background-size: 43px 43px;
|
||||
}
|
||||
}
|
@ -369,7 +369,7 @@ form.small .field, .field.small {
|
||||
border: none;
|
||||
}
|
||||
&.loading {
|
||||
background: transparent url("../../../../client/src/images/network-save.gif") no-repeat $grid-x center;
|
||||
background: transparent url("../../images/network-save.gif") no-repeat $grid-x center;
|
||||
.ui-button-text {
|
||||
padding-left: 16px /* icon */ + ($grid-x/2);
|
||||
}
|
||||
@ -392,7 +392,7 @@ input.loading, button.loading,
|
||||
input.ui-state-default.loading, .ui-widget-content input.ui-state-default.loading,
|
||||
.ui-widget-header input.ui-state-default.loading {
|
||||
.ui-icon {
|
||||
background: transparent url("../../../../client/src/images/network-save.gif") no-repeat 0 0;
|
||||
background: transparent url("../../images/network-save.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
color: lighten($color-text-dark, 20%);
|
||||
@ -403,7 +403,7 @@ input.ui-state-default.loading, .ui-widget-content input.ui-state-default.loadin
|
||||
input.loading,
|
||||
button.loading {
|
||||
&.ss-ui-action-constructive .ui-icon {
|
||||
background: transparent url("../../../../client/src/images/network-save-constructive.gif") no-repeat 0 0;
|
||||
background: transparent url("../../images/network-save-constructive.gif") no-repeat 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -580,7 +580,7 @@ button.loading {
|
||||
}
|
||||
|
||||
.ss-ui-loading-icon {
|
||||
background: url("../../../../client/src/images/network-save.gif") no-repeat;
|
||||
background: url("../../images/network-save.gif") no-repeat;
|
||||
display: block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
|
BIN
client/dist/images/network-save-constructive.gif
vendored
Before Width: | Height: | Size: 1.7 KiB |
BIN
client/dist/images/network-save.gif
vendored
Before Width: | Height: | Size: 1.7 KiB |
BIN
client/dist/images/sitetree_ss_default_icons.png
vendored
Before Width: | Height: | Size: 6.8 KiB |
BIN
client/dist/images/smilies/confused.gif
vendored
Before Width: | Height: | Size: 700 B |
BIN
client/dist/images/smilies/cool.gif
vendored
Before Width: | Height: | Size: 703 B |
BIN
client/dist/images/smilies/grin.gif
vendored
Before Width: | Height: | Size: 688 B |
BIN
client/dist/images/smilies/sad.gif
vendored
Before Width: | Height: | Size: 704 B |
BIN
client/dist/images/smilies/smile.gif
vendored
Before Width: | Height: | Size: 699 B |
BIN
client/dist/images/smilies/tongue.gif
vendored
Before Width: | Height: | Size: 706 B |
1219
client/dist/js/HtmlEditorField.js
vendored
@ -1,1219 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define('ss.HtmlEditorField', ['jQuery', 'i18n'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(require('jQuery'), require('i18n'));
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(global.jQuery, global.i18n);
|
||||
global.ssHtmlEditorField = mod.exports;
|
||||
}
|
||||
})(this, function (_jQuery, _i18n) {
|
||||
'use strict';
|
||||
|
||||
var _jQuery2 = _interopRequireDefault(_jQuery);
|
||||
|
||||
var _i18n2 = _interopRequireDefault(_i18n);
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
|
||||
var ss = typeof window.ss !== 'undefined' ? window.ss : {};
|
||||
|
||||
ss.editorWrappers = {};
|
||||
ss.editorWrappers.tinyMCE = function () {
|
||||
var editorID;
|
||||
|
||||
return {
|
||||
init: function init(ID) {
|
||||
editorID = ID;
|
||||
|
||||
this.create();
|
||||
},
|
||||
|
||||
destroy: function destroy() {
|
||||
tinymce.EditorManager.execCommand('mceRemoveEditor', false, editorID);
|
||||
},
|
||||
|
||||
getInstance: function getInstance() {
|
||||
return tinymce.EditorManager.get(editorID);
|
||||
},
|
||||
|
||||
onopen: function onopen() {},
|
||||
|
||||
onclose: function onclose() {},
|
||||
|
||||
getConfig: function getConfig() {
|
||||
var selector = "#" + editorID,
|
||||
config = (0, _jQuery2.default)(selector).data('config'),
|
||||
self = this;
|
||||
|
||||
config.selector = selector;
|
||||
|
||||
config.setup = function (ed) {
|
||||
ed.on('change', function () {
|
||||
self.save();
|
||||
});
|
||||
};
|
||||
return config;
|
||||
},
|
||||
|
||||
save: function save() {
|
||||
var instance = this.getInstance();
|
||||
instance.save();
|
||||
|
||||
(0, _jQuery2.default)(instance.getElement()).trigger("change");
|
||||
},
|
||||
|
||||
create: function create() {
|
||||
var config = this.getConfig();
|
||||
|
||||
if (typeof config.baseURL !== 'undefined') {
|
||||
tinymce.EditorManager.baseURL = config.baseURL;
|
||||
}
|
||||
tinymce.init(config);
|
||||
},
|
||||
|
||||
repaint: function repaint() {},
|
||||
|
||||
isDirty: function isDirty() {
|
||||
return this.getInstance().isDirty();
|
||||
},
|
||||
|
||||
getContent: function getContent() {
|
||||
return this.getInstance().getContent();
|
||||
},
|
||||
|
||||
getDOM: function getDOM() {
|
||||
return this.getInstance().getElement();
|
||||
},
|
||||
|
||||
getContainer: function getContainer() {
|
||||
return this.getInstance().getContainer();
|
||||
},
|
||||
|
||||
getSelectedNode: function getSelectedNode() {
|
||||
return this.getInstance().selection.getNode();
|
||||
},
|
||||
|
||||
selectNode: function selectNode(node) {
|
||||
this.getInstance().selection.select(node);
|
||||
},
|
||||
|
||||
setContent: function setContent(html, opts) {
|
||||
this.getInstance().setContent(html, opts);
|
||||
},
|
||||
|
||||
insertContent: function insertContent(html, opts) {
|
||||
this.getInstance().insertContent(html, opts);
|
||||
},
|
||||
|
||||
replaceContent: function replaceContent(html, opts) {
|
||||
this.getInstance().execCommand('mceReplaceContent', false, html, opts);
|
||||
},
|
||||
|
||||
insertLink: function insertLink(attrs, opts) {
|
||||
this.getInstance().execCommand("mceInsertLink", false, attrs, opts);
|
||||
},
|
||||
|
||||
removeLink: function removeLink() {
|
||||
this.getInstance().execCommand('unlink', false);
|
||||
},
|
||||
|
||||
cleanLink: function cleanLink(href, node) {
|
||||
var settings = this.getConfig,
|
||||
cb = settings['urlconverter_callback'];
|
||||
if (cb) href = eval(cb + "(href, node, true);");
|
||||
|
||||
if (href.match(new RegExp('^' + tinyMCE.settings['document_base_url'] + '(.*)$'))) {
|
||||
href = RegExp.$1;
|
||||
}
|
||||
|
||||
if (href.match(/^javascript:\s*mctmp/)) href = '';
|
||||
|
||||
return href;
|
||||
},
|
||||
|
||||
createBookmark: function createBookmark() {
|
||||
return this.getInstance().selection.getBookmark();
|
||||
},
|
||||
|
||||
moveToBookmark: function moveToBookmark(bookmark) {
|
||||
this.getInstance().selection.moveToBookmark(bookmark);
|
||||
this.getInstance().focus();
|
||||
},
|
||||
|
||||
blur: function blur() {
|
||||
this.getInstance().selection.collapse();
|
||||
},
|
||||
|
||||
addUndo: function addUndo() {
|
||||
this.getInstance().undoManager.add();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE;
|
||||
|
||||
_jQuery2.default.entwine('ss', function ($) {
|
||||
$('textarea.htmleditor').entwine({
|
||||
|
||||
Editor: null,
|
||||
|
||||
onadd: function onadd() {
|
||||
var edClass = this.data('editor') || 'default',
|
||||
ed = ss.editorWrappers[edClass]();
|
||||
this.setEditor(ed);
|
||||
|
||||
ed.init(this.attr('id'));
|
||||
|
||||
this._super();
|
||||
},
|
||||
|
||||
onremove: function onremove() {
|
||||
this.getEditor().destroy();
|
||||
this._super();
|
||||
},
|
||||
|
||||
'from .cms-edit-form': {
|
||||
onbeforesubmitform: function onbeforesubmitform() {
|
||||
this.getEditor().save();
|
||||
this._super();
|
||||
}
|
||||
},
|
||||
|
||||
openLinkDialog: function openLinkDialog() {
|
||||
this.openDialog('link');
|
||||
},
|
||||
|
||||
openMediaDialog: function openMediaDialog() {
|
||||
this.openDialog('media');
|
||||
},
|
||||
|
||||
openDialog: function openDialog(type) {
|
||||
var capitalize = function capitalize(text) {
|
||||
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
|
||||
};
|
||||
|
||||
var self = this,
|
||||
url = $('#cms-editor-dialogs').data('url' + capitalize(type) + 'form'),
|
||||
dialog = $('.htmleditorfield-' + type + 'dialog');
|
||||
|
||||
if (dialog.length) {
|
||||
dialog.getForm().setElement(this);
|
||||
dialog.html('');
|
||||
dialog.addClass('loading');
|
||||
dialog.open();
|
||||
} else {
|
||||
dialog = $('<div class="htmleditorfield-dialog htmleditorfield-' + type + 'dialog loading">');
|
||||
$('body').append(dialog);
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
complete: function complete() {
|
||||
dialog.removeClass('loading');
|
||||
},
|
||||
success: function success(html) {
|
||||
dialog.html(html);
|
||||
dialog.getForm().setElement(self);
|
||||
dialog.trigger('ssdialogopen');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('.htmleditorfield-dialog').entwine({
|
||||
onadd: function onadd() {
|
||||
if (!this.is('.ui-dialog-content')) {
|
||||
this.ssdialog({
|
||||
autoOpen: true,
|
||||
buttons: {
|
||||
'insert': {
|
||||
text: _i18n2.default._t('HtmlEditorField.INSERT', 'Insert'),
|
||||
'data-icon': 'accept',
|
||||
class: 'ss-ui-action-constructive media-insert',
|
||||
click: function click() {
|
||||
$(this).find('form').submit();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this._super();
|
||||
},
|
||||
|
||||
getForm: function getForm() {
|
||||
return this.find('form');
|
||||
},
|
||||
open: function open() {
|
||||
this.ssdialog('open');
|
||||
},
|
||||
close: function close() {
|
||||
this.ssdialog('close');
|
||||
},
|
||||
toggle: function toggle(bool) {
|
||||
if (this.is(':visible')) this.close();else this.open();
|
||||
},
|
||||
onscroll: function onscroll() {
|
||||
this.animate({
|
||||
scrollTop: this.find('form').height()
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-form').entwine({
|
||||
Selection: null,
|
||||
|
||||
Bookmark: null,
|
||||
|
||||
Element: null,
|
||||
|
||||
setSelection: function setSelection(node) {
|
||||
return this._super($(node));
|
||||
},
|
||||
|
||||
onadd: function onadd() {
|
||||
var titleEl = this.find(':header:first');
|
||||
this.getDialog().attr('title', titleEl.text());
|
||||
|
||||
this._super();
|
||||
},
|
||||
onremove: function onremove() {
|
||||
this.setSelection(null);
|
||||
this.setBookmark(null);
|
||||
this.setElement(null);
|
||||
|
||||
this._super();
|
||||
},
|
||||
|
||||
getDialog: function getDialog() {
|
||||
return this.closest('.htmleditorfield-dialog');
|
||||
},
|
||||
|
||||
fromDialog: {
|
||||
onssdialogopen: function onssdialogopen() {
|
||||
var ed = this.getEditor();
|
||||
|
||||
this.setSelection(ed.getSelectedNode());
|
||||
this.setBookmark(ed.createBookmark());
|
||||
|
||||
ed.blur();
|
||||
|
||||
this.find(':input:not(:submit)[data-skip-autofocus!="true"]').filter(':visible:enabled').eq(0).focus();
|
||||
|
||||
this.redraw();
|
||||
this.updateFromEditor();
|
||||
},
|
||||
|
||||
onssdialogclose: function onssdialogclose() {
|
||||
var ed = this.getEditor();
|
||||
|
||||
ed.moveToBookmark(this.getBookmark());
|
||||
|
||||
this.setSelection(null);
|
||||
this.setBookmark(null);
|
||||
|
||||
this.resetFields();
|
||||
}
|
||||
},
|
||||
|
||||
getEditor: function getEditor() {
|
||||
return this.getElement().getEditor();
|
||||
},
|
||||
|
||||
modifySelection: function modifySelection(callback) {
|
||||
var ed = this.getEditor();
|
||||
|
||||
ed.moveToBookmark(this.getBookmark());
|
||||
callback.call(this, ed);
|
||||
|
||||
this.setSelection(ed.getSelectedNode());
|
||||
this.setBookmark(ed.createBookmark());
|
||||
|
||||
ed.blur();
|
||||
},
|
||||
|
||||
updateFromEditor: function updateFromEditor() {},
|
||||
redraw: function redraw() {},
|
||||
resetFields: function resetFields() {
|
||||
this.find('.tree-holder').empty();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-linkform').entwine({
|
||||
onsubmit: function onsubmit(e) {
|
||||
this.insertLink();
|
||||
this.getDialog().close();
|
||||
return false;
|
||||
},
|
||||
resetFields: function resetFields() {
|
||||
this._super();
|
||||
|
||||
this[0].reset();
|
||||
},
|
||||
redraw: function redraw() {
|
||||
this._super();
|
||||
|
||||
var linkType = this.find(':input[name=LinkType]:checked').val();
|
||||
|
||||
this.addAnchorSelector();
|
||||
|
||||
this.resetFileField();
|
||||
|
||||
this.find('.step2').nextAll('.field').not('.field[id$="' + linkType + '_Holder"]').hide();
|
||||
this.find('.field[id$="LinkType_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
this.find('.field[id$="' + linkType + '_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
|
||||
if (linkType == 'internal' || linkType == 'anchor') {
|
||||
this.find('.field[id$="Anchor_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
}
|
||||
|
||||
if (linkType == 'email') {
|
||||
this.find('.field[id$="Subject_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
} else {
|
||||
this.find('.field[id$="TargetBlank_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
}
|
||||
|
||||
if (linkType == 'anchor') {
|
||||
this.find('.field[id$="AnchorSelector_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
}
|
||||
this.find('.field[id$="Description_Holder"]').attr('style', 'display: -webkit-flex; display: flex');
|
||||
},
|
||||
|
||||
getLinkAttributes: function getLinkAttributes() {
|
||||
var href,
|
||||
target = null,
|
||||
subject = this.find(':input[name=Subject]').val(),
|
||||
anchor = this.find(':input[name=Anchor]').val();
|
||||
|
||||
if (this.find(':input[name=TargetBlank]').is(':checked')) {
|
||||
target = '_blank';
|
||||
}
|
||||
|
||||
switch (this.find(':input[name=LinkType]:checked').val()) {
|
||||
case 'internal':
|
||||
href = '[sitetree_link,id=' + this.find(':input[name=internal]').val() + ']';
|
||||
|
||||
if (anchor) {
|
||||
href += '#' + anchor;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'anchor':
|
||||
href = '#' + anchor;
|
||||
break;
|
||||
|
||||
case 'file':
|
||||
var fileid = this.find('.ss-uploadfield .ss-uploadfield-item').attr('data-fileid');
|
||||
href = fileid ? '[file_link,id=' + fileid + ']' : '';
|
||||
break;
|
||||
|
||||
case 'email':
|
||||
href = 'mailto:' + this.find(':input[name=email]').val();
|
||||
if (subject) {
|
||||
href += '?subject=' + encodeURIComponent(subject);
|
||||
}
|
||||
target = null;
|
||||
break;
|
||||
|
||||
default:
|
||||
href = this.find(':input[name=external]').val();
|
||||
|
||||
if (href.indexOf('://') == -1) href = 'http://' + href;
|
||||
break;
|
||||
}
|
||||
|
||||
return {
|
||||
href: href,
|
||||
target: target,
|
||||
title: this.find(':input[name=Description]').val()
|
||||
};
|
||||
},
|
||||
insertLink: function insertLink() {
|
||||
this.modifySelection(function (ed) {
|
||||
ed.insertLink(this.getLinkAttributes());
|
||||
});
|
||||
},
|
||||
removeLink: function removeLink() {
|
||||
this.modifySelection(function (ed) {
|
||||
ed.removeLink();
|
||||
});
|
||||
|
||||
this.resetFileField();
|
||||
this.close();
|
||||
},
|
||||
|
||||
resetFileField: function resetFileField() {
|
||||
var fileField = this.find('.ss-uploadfield[id$="file_Holder"]'),
|
||||
fileUpload = fileField.data('fileupload'),
|
||||
currentItem = fileField.find('.ss-uploadfield-item[data-fileid]');
|
||||
|
||||
if (currentItem.length) {
|
||||
fileUpload._trigger('destroy', null, { context: currentItem });
|
||||
fileField.find('.ss-uploadfield-addfile').removeClass('borderTop');
|
||||
}
|
||||
},
|
||||
|
||||
addAnchorSelector: function addAnchorSelector() {
|
||||
if (this.find(':input[name=AnchorSelector]').length) return;
|
||||
|
||||
var self = this;
|
||||
var anchorSelector = $('<select id="Form_EditorToolbarLinkForm_AnchorSelector" name="AnchorSelector"></select>');
|
||||
this.find(':input[name=Anchor]').parent().append(anchorSelector);
|
||||
|
||||
this.updateAnchorSelector();
|
||||
|
||||
anchorSelector.change(function (e) {
|
||||
self.find(':input[name="Anchor"]').val($(this).val());
|
||||
});
|
||||
},
|
||||
|
||||
getAnchors: function getAnchors() {
|
||||
var linkType = this.find(':input[name=LinkType]:checked').val();
|
||||
var dfdAnchors = $.Deferred();
|
||||
|
||||
switch (linkType) {
|
||||
case 'anchor':
|
||||
var collectedAnchors = [];
|
||||
var ed = this.getEditor();
|
||||
|
||||
|
||||
if (ed) {
|
||||
var raw = ed.getContent().match(/\s+(name|id)\s*=\s*(["'])([^\2\s>]*?)\2|\s+(name|id)\s*=\s*([^"']+)[\s +>]/gim);
|
||||
if (raw && raw.length) {
|
||||
for (var i = 0; i < raw.length; i++) {
|
||||
var indexStart = raw[i].indexOf('id=') == -1 ? 7 : 5;
|
||||
collectedAnchors.push(raw[i].substr(indexStart).replace(/"$/, ''));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dfdAnchors.resolve(collectedAnchors);
|
||||
break;
|
||||
|
||||
case 'internal':
|
||||
var pageId = this.find(':input[name=internal]').val();
|
||||
|
||||
if (pageId) {
|
||||
$.ajax({
|
||||
url: $.path.addSearchParams(this.attr('action').replace('LinkForm', 'getanchors'), { 'PageID': parseInt(pageId) }),
|
||||
success: function success(body, status, xhr) {
|
||||
dfdAnchors.resolve($.parseJSON(body));
|
||||
},
|
||||
error: function error(xhr, status) {
|
||||
dfdAnchors.reject(xhr.responseText);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
dfdAnchors.resolve([]);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
dfdAnchors.reject(_i18n2.default._t('HtmlEditorField.ANCHORSNOTSUPPORTED', 'Anchors are not supported for this link type.'));
|
||||
break;
|
||||
}
|
||||
|
||||
return dfdAnchors.promise();
|
||||
},
|
||||
|
||||
updateAnchorSelector: function updateAnchorSelector() {
|
||||
var self = this;
|
||||
var selector = this.find(':input[name=AnchorSelector]');
|
||||
var dfdAnchors = this.getAnchors();
|
||||
|
||||
selector.empty();
|
||||
selector.append($('<option value="" selected="1">' + _i18n2.default._t('HtmlEditorField.LOOKINGFORANCHORS', 'Looking for anchors...') + '</option>'));
|
||||
|
||||
dfdAnchors.done(function (anchors) {
|
||||
selector.empty();
|
||||
selector.append($('<option value="" selected="1">' + _i18n2.default._t('HtmlEditorField.SelectAnchor') + '</option>'));
|
||||
|
||||
if (anchors) {
|
||||
for (var j = 0; j < anchors.length; j++) {
|
||||
selector.append($('<option value="' + anchors[j] + '">' + anchors[j] + '</option>'));
|
||||
}
|
||||
}
|
||||
}).fail(function (message) {
|
||||
selector.empty();
|
||||
selector.append($('<option value="" selected="1">' + message + '</option>'));
|
||||
});
|
||||
|
||||
if ($.browser.msie) selector.hide().show();
|
||||
},
|
||||
|
||||
updateFromEditor: function updateFromEditor() {
|
||||
var htmlTagPattern = /<\S[^><]*>/g,
|
||||
fieldName,
|
||||
data = this.getCurrentLink();
|
||||
|
||||
if (data) {
|
||||
for (fieldName in data) {
|
||||
var el = this.find(':input[name=' + fieldName + ']'),
|
||||
selected = data[fieldName];
|
||||
|
||||
if (typeof selected == 'string') selected = selected.replace(htmlTagPattern, '');
|
||||
|
||||
if (el.is(':checkbox')) {
|
||||
el.prop('checked', selected).change();
|
||||
} else if (el.is(':radio')) {
|
||||
el.val([selected]).change();
|
||||
} else if (fieldName == 'file') {
|
||||
el = this.find(':input[name="' + fieldName + '[Uploads][]"]');
|
||||
|
||||
el = el.parents('.ss-uploadfield');
|
||||
|
||||
(function attach(el, selected) {
|
||||
if (!el.getConfig()) {
|
||||
setTimeout(function () {
|
||||
attach(el, selected);
|
||||
}, 50);
|
||||
} else {
|
||||
el.attachFiles([selected]);
|
||||
}
|
||||
})(el, selected);
|
||||
} else {
|
||||
el.val(selected).change();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
getCurrentLink: function getCurrentLink() {
|
||||
var selectedEl = this.getSelection(),
|
||||
href = "",
|
||||
target = "",
|
||||
title = "",
|
||||
action = "insert",
|
||||
style_class = "";
|
||||
|
||||
var linkDataSource = null;
|
||||
if (selectedEl.length) {
|
||||
if (selectedEl.is('a')) {
|
||||
linkDataSource = selectedEl;
|
||||
} else {
|
||||
linkDataSource = selectedEl = selectedEl.parents('a:first');
|
||||
}
|
||||
}
|
||||
if (linkDataSource && linkDataSource.length) this.modifySelection(function (ed) {
|
||||
ed.selectNode(linkDataSource[0]);
|
||||
});
|
||||
|
||||
if (!linkDataSource.attr('href')) linkDataSource = null;
|
||||
|
||||
if (linkDataSource) {
|
||||
href = linkDataSource.attr('href');
|
||||
target = linkDataSource.attr('target');
|
||||
title = linkDataSource.attr('title');
|
||||
style_class = linkDataSource.attr('class');
|
||||
href = this.getEditor().cleanLink(href, linkDataSource);
|
||||
action = "update";
|
||||
}
|
||||
|
||||
if (href.match(/^mailto:(.*)$/)) {
|
||||
return {
|
||||
LinkType: 'email',
|
||||
email: RegExp.$1,
|
||||
Description: title
|
||||
};
|
||||
} else if (href.match(/^(assets\/.*)$/) || href.match(/^\[file_link\s*(?:\s*|%20|,)?id=([0-9]+)\]?(#.*)?$/)) {
|
||||
return {
|
||||
LinkType: 'file',
|
||||
file: RegExp.$1,
|
||||
Description: title,
|
||||
TargetBlank: target ? true : false
|
||||
};
|
||||
} else if (href.match(/^#(.*)$/)) {
|
||||
return {
|
||||
LinkType: 'anchor',
|
||||
Anchor: RegExp.$1,
|
||||
Description: title,
|
||||
TargetBlank: target ? true : false
|
||||
};
|
||||
} else if (href.match(/^\[sitetree_link(?:\s*|%20|,)?id=([0-9]+)\]?(#.*)?$/i)) {
|
||||
return {
|
||||
LinkType: 'internal',
|
||||
internal: RegExp.$1,
|
||||
Anchor: RegExp.$2 ? RegExp.$2.substr(1) : '',
|
||||
Description: title,
|
||||
TargetBlank: target ? true : false
|
||||
};
|
||||
} else if (href) {
|
||||
return {
|
||||
LinkType: 'external',
|
||||
external: href,
|
||||
Description: title,
|
||||
TargetBlank: target ? true : false
|
||||
};
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-linkform input[name=LinkType]').entwine({
|
||||
onclick: function onclick(e) {
|
||||
this.parents('form:first').redraw();
|
||||
this._super();
|
||||
},
|
||||
onchange: function onchange() {
|
||||
this.parents('form:first').redraw();
|
||||
|
||||
var linkType = this.parent().find(':checked').val();
|
||||
if (linkType === 'anchor' || linkType === 'internal') {
|
||||
this.parents('form.htmleditorfield-linkform').updateAnchorSelector();
|
||||
}
|
||||
this._super();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-linkform input[name=internal]').entwine({
|
||||
onvalueupdated: function onvalueupdated() {
|
||||
this.parents('form.htmleditorfield-linkform').updateAnchorSelector();
|
||||
this._super();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-linkform :submit[name=action_remove]').entwine({
|
||||
onclick: function onclick(e) {
|
||||
this.parents('form:first').removeLink();
|
||||
this._super();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform').entwine({
|
||||
toggleCloseButton: function toggleCloseButton() {
|
||||
var updateExisting = Boolean(this.find('.ss-htmleditorfield-file').length);
|
||||
this.find('.overview .action-delete')[updateExisting ? 'hide' : 'show']();
|
||||
},
|
||||
onsubmit: function onsubmit() {
|
||||
this.modifySelection(function (ed) {
|
||||
this.find('.ss-htmleditorfield-file').each(function () {
|
||||
$(this).insertHTML(ed);
|
||||
});
|
||||
});
|
||||
|
||||
this.getDialog().close();
|
||||
return false;
|
||||
},
|
||||
updateFromEditor: function updateFromEditor() {
|
||||
var self = this,
|
||||
node = this.getSelection();
|
||||
|
||||
if (node.is('img')) {
|
||||
var idOrUrl = node.data('id') || node.data('url') || node.attr('src');
|
||||
this.showFileView(idOrUrl).done(function (filefield) {
|
||||
filefield.updateFromNode(node);
|
||||
self.toggleCloseButton();
|
||||
self.redraw();
|
||||
});
|
||||
}
|
||||
this.redraw();
|
||||
},
|
||||
redraw: function redraw(updateExisting) {
|
||||
this._super();
|
||||
|
||||
var node = this.getSelection(),
|
||||
hasItems = Boolean(this.find('.ss-htmleditorfield-file').length),
|
||||
editingSelected = node.is('img'),
|
||||
insertingURL = this.hasClass('insertingURL'),
|
||||
header = this.find('.header-edit');
|
||||
|
||||
header[hasItems ? 'show' : 'hide']();
|
||||
|
||||
this.closest('ui-dialog').find('ui-dialog-buttonpane .media-insert').button(hasItems ? 'enable' : 'disable').toggleClass('ui-state-disabled', !hasItems);
|
||||
|
||||
this.find('.htmleditorfield-default-panel')[editingSelected || insertingURL ? 'hide' : 'show']();
|
||||
this.find('.htmleditorfield-web-panel')[editingSelected || !insertingURL ? 'hide' : 'show']();
|
||||
|
||||
var mediaFormHeading = this.find('.htmleditorfield-mediaform-heading.insert');
|
||||
|
||||
if (editingSelected) {
|
||||
mediaFormHeading.hide();
|
||||
} else if (insertingURL) {
|
||||
mediaFormHeading.show().text(_i18n2.default._t("HtmlEditorField.INSERTURL")).prepend('<button class="back-button font-icon-left-open no-text" title="' + _i18n2.default._t("HtmlEditorField.BACK") + '"></button>');
|
||||
|
||||
this.find('.htmleditorfield-web-panel input.remoteurl').focus();
|
||||
} else {
|
||||
mediaFormHeading.show().text(_i18n2.default._t("HtmlEditorField.INSERTFROM")).find('.back-button').remove();
|
||||
}
|
||||
|
||||
this.find('.htmleditorfield-mediaform-heading.update')[editingSelected ? 'show' : 'hide']();
|
||||
this.find('.ss-uploadfield-item-actions')[editingSelected ? 'hide' : 'show']();
|
||||
this.find('.ss-uploadfield-item-name')[editingSelected ? 'hide' : 'show']();
|
||||
this.find('.ss-uploadfield-item-preview')[editingSelected ? 'hide' : 'show']();
|
||||
this.find('.btn-toolbar .media-update')[editingSelected ? 'show' : 'hide']();
|
||||
this.find('.ss-uploadfield-item-editform').toggleEditForm(editingSelected);
|
||||
this.find('.htmleditorfield-from-cms .field.treedropdown').css('left', $('.htmleditorfield-mediaform-heading:visible').outerWidth());
|
||||
this.closest('.ui-dialog').addClass('ss-uploadfield-dropzone');
|
||||
this.closest('.ui-dialog').find('.ui-dialog-buttonpane .media-insert .ui-button-text').text([editingSelected ? _i18n2.default._t('HtmlEditorField.UPDATE', 'Update') : _i18n2.default._t('HtmlEditorField.INSERT', 'Insert')]);
|
||||
},
|
||||
resetFields: function resetFields() {
|
||||
this.find('.ss-htmleditorfield-file').remove();
|
||||
this.find('.ss-gridfield-items .ui-selected').removeClass('ui-selected');
|
||||
this.find('li.ss-uploadfield-item').remove();
|
||||
this.redraw();
|
||||
|
||||
this._super();
|
||||
},
|
||||
getFileView: function getFileView(idOrUrl) {
|
||||
return this.find('.ss-htmleditorfield-file[data-id=' + idOrUrl + ']');
|
||||
},
|
||||
showFileView: function showFileView(idOrUrl) {
|
||||
var self = this,
|
||||
params = Number(idOrUrl) == idOrUrl ? { ID: idOrUrl } : { FileURL: idOrUrl };
|
||||
|
||||
var item = $('<div class="ss-htmleditorfield-file loading" />');
|
||||
this.find('.content-edit').prepend(item);
|
||||
|
||||
var dfr = $.Deferred();
|
||||
|
||||
$.ajax({
|
||||
url: $.path.addSearchParams(this.attr('action').replace(/MediaForm/, 'viewfile'), params),
|
||||
success: function success(html, status, xhr) {
|
||||
var newItem = $(html).filter('.ss-htmleditorfield-file');
|
||||
item.replaceWith(newItem);
|
||||
self.redraw();
|
||||
dfr.resolve(newItem);
|
||||
},
|
||||
error: function error() {
|
||||
item.remove();
|
||||
dfr.reject();
|
||||
}
|
||||
});
|
||||
|
||||
return dfr.promise();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform div.ss-upload .upload-url').entwine({
|
||||
onclick: function onclick() {
|
||||
var form = this.closest('form');
|
||||
|
||||
form.addClass('insertingURL');
|
||||
form.redraw();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .htmleditorfield-mediaform-heading .back-button').entwine({
|
||||
onclick: function onclick() {
|
||||
var form = this.closest('form');
|
||||
|
||||
form.removeClass('insertingURL');
|
||||
form.redraw();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-gridfield-items').entwine({
|
||||
onselectableselected: function onselectableselected(e, ui) {
|
||||
var form = this.closest('form'),
|
||||
item = $(ui.selected);
|
||||
if (!item.is('.ss-gridfield-item')) return;
|
||||
form.closest('form').showFileView(item.data('id'));
|
||||
form.redraw();
|
||||
|
||||
form.parent().trigger('scroll');
|
||||
},
|
||||
onselectableunselected: function onselectableunselected(e, ui) {
|
||||
var form = this.closest('form'),
|
||||
item = $(ui.unselected);
|
||||
if (!item.is('.ss-gridfield-item')) return;
|
||||
form.getFileView(item.data('id')).remove();
|
||||
form.redraw();
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-form.htmleditorfield-mediaform div.ss-assetuploadfield').entwine({
|
||||
onfileuploadstop: function onfileuploadstop(e) {
|
||||
var form = this.closest('form');
|
||||
|
||||
var editFieldIDs = [];
|
||||
form.find('div.content-edit').find('div.ss-htmleditorfield-file').each(function () {
|
||||
editFieldIDs.push($(this).data('id'));
|
||||
});
|
||||
|
||||
var uploadedFiles = $('.ss-uploadfield-files', this).children('.ss-uploadfield-item');
|
||||
uploadedFiles.each(function () {
|
||||
var uploadedID = $(this).data('fileid');
|
||||
if (uploadedID && $.inArray(uploadedID, editFieldIDs) == -1) {
|
||||
$(this).remove();
|
||||
form.showFileView(uploadedID);
|
||||
}
|
||||
});
|
||||
|
||||
form.parent().trigger('scroll');
|
||||
|
||||
form.redraw();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-form.htmleditorfield-mediaform input.remoteurl').entwine({
|
||||
onadd: function onadd() {
|
||||
this._super();
|
||||
this.validate();
|
||||
},
|
||||
|
||||
onkeyup: function onkeyup() {
|
||||
this.validate();
|
||||
},
|
||||
|
||||
onchange: function onchange() {
|
||||
this.validate();
|
||||
},
|
||||
|
||||
getAddButton: function getAddButton() {
|
||||
return this.closest('.CompositeField').find('button.add-url');
|
||||
},
|
||||
|
||||
validate: function validate() {
|
||||
var val = this.val(),
|
||||
orig = val;
|
||||
|
||||
val = $.trim(val);
|
||||
val = val.replace(/^https?:\/\//i, '');
|
||||
if (orig !== val) this.val(val);
|
||||
|
||||
this.getAddButton().button(!!val ? 'enable' : 'disable');
|
||||
return !!val;
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-form.htmleditorfield-mediaform .add-url').entwine({
|
||||
getURLField: function getURLField() {
|
||||
return this.closest('.CompositeField').find('input.remoteurl');
|
||||
},
|
||||
|
||||
onclick: function onclick(e) {
|
||||
var urlField = this.getURLField(),
|
||||
container = this.closest('.CompositeField'),
|
||||
form = this.closest('form');
|
||||
|
||||
if (urlField.validate()) {
|
||||
container.addClass('loading');
|
||||
form.showFileView('http://' + urlField.val()).done(function () {
|
||||
container.removeClass('loading');
|
||||
|
||||
form.parent().trigger('scroll');
|
||||
});
|
||||
form.redraw();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-htmleditorfield-file').entwine({
|
||||
getAttributes: function getAttributes() {},
|
||||
|
||||
getExtraData: function getExtraData() {},
|
||||
|
||||
getHTML: function getHTML() {
|
||||
return $('<div>').append($('<a/>').attr({ href: this.data('url') }).text(this.find('.name').text())).html();
|
||||
},
|
||||
|
||||
insertHTML: function insertHTML(ed) {
|
||||
ed.replaceContent(this.getHTML());
|
||||
},
|
||||
|
||||
updateFromNode: function updateFromNode(node) {},
|
||||
|
||||
updateDimensions: function updateDimensions(constrainBy, maxW, maxH) {
|
||||
var widthEl = this.find(':input[name=Width]'),
|
||||
heightEl = this.find(':input[name=Height]'),
|
||||
w = widthEl.val(),
|
||||
h = heightEl.val(),
|
||||
aspect;
|
||||
|
||||
if (w && h) {
|
||||
if (constrainBy) {
|
||||
aspect = heightEl.getOrigVal() / widthEl.getOrigVal();
|
||||
|
||||
if (constrainBy == 'Width') {
|
||||
if (maxW && w > maxW) w = maxW;
|
||||
h = Math.floor(w * aspect);
|
||||
} else if (constrainBy == 'Height') {
|
||||
if (maxH && h > maxH) h = maxH;
|
||||
w = Math.ceil(h / aspect);
|
||||
}
|
||||
} else {
|
||||
if (maxW && w > maxW) w = maxW;
|
||||
if (maxH && h > maxH) h = maxH;
|
||||
}
|
||||
|
||||
widthEl.val(w);
|
||||
heightEl.val(h);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-htmleditorfield-file.image').entwine({
|
||||
getAttributes: function getAttributes() {
|
||||
var width = this.find(':input[name=Width]').val(),
|
||||
height = this.find(':input[name=Height]').val();
|
||||
return {
|
||||
'src': this.find(':input[name=URL]').val(),
|
||||
'alt': this.find(':input[name=AltText]').val(),
|
||||
'width': width ? parseInt(width, 10) : null,
|
||||
'height': height ? parseInt(height, 10) : null,
|
||||
'title': this.find(':input[name=Title]').val(),
|
||||
'class': this.find(':input[name=CSSClass]').val(),
|
||||
'data-id': this.find(':input[name=FileID]').val()
|
||||
};
|
||||
},
|
||||
getExtraData: function getExtraData() {
|
||||
return {
|
||||
'CaptionText': this.find(':input[name=CaptionText]').val()
|
||||
};
|
||||
},
|
||||
getHTML: function getHTML() {},
|
||||
|
||||
insertHTML: function insertHTML(ed) {
|
||||
var form = this.closest('form');
|
||||
var node = form.getSelection();
|
||||
if (!ed) ed = form.getEditor();
|
||||
|
||||
var attrs = this.getAttributes(),
|
||||
extraData = this.getExtraData();
|
||||
|
||||
var replacee = node && node.is('img') ? node : null;
|
||||
if (replacee && replacee.parent().is('.captionImage')) replacee = replacee.parent();
|
||||
|
||||
var img = node && node.is('img') ? node : $('<img />');
|
||||
img.attr(attrs);
|
||||
|
||||
var container = img.parent('.captionImage'),
|
||||
caption = container.find('.caption');
|
||||
|
||||
if (extraData.CaptionText) {
|
||||
if (!container.length) {
|
||||
container = $('<div></div>');
|
||||
}
|
||||
|
||||
container.attr('class', 'captionImage ' + attrs['class']).css('width', attrs.width);
|
||||
|
||||
if (!caption.length) {
|
||||
caption = $('<p class="caption"></p>').appendTo(container);
|
||||
}
|
||||
|
||||
caption.attr('class', 'caption ' + attrs['class']).text(extraData.CaptionText);
|
||||
} else {
|
||||
container = caption = null;
|
||||
}
|
||||
|
||||
var replacer = container ? container : img;
|
||||
|
||||
if (replacee && replacee.not(replacer).length) {
|
||||
replacee.replaceWith(replacer);
|
||||
}
|
||||
|
||||
if (container) {
|
||||
container.prepend(img);
|
||||
}
|
||||
|
||||
if (!replacee) {
|
||||
ed.repaint();
|
||||
ed.insertContent($('<div />').append(replacer).html(), { skip_undo: 1 });
|
||||
}
|
||||
|
||||
ed.addUndo();
|
||||
ed.repaint();
|
||||
},
|
||||
updateFromNode: function updateFromNode(node) {
|
||||
this.find(':input[name=AltText]').val(node.attr('alt'));
|
||||
this.find(':input[name=Title]').val(node.attr('title'));
|
||||
this.find(':input[name=CSSClass]').val(node.attr('class'));
|
||||
this.find(':input[name=Width]').val(node.width());
|
||||
this.find(':input[name=Height]').val(node.height());
|
||||
this.find(':input[name=CaptionText]').val(node.siblings('.caption:first').text());
|
||||
this.find(':input[name=FileID]').val(node.data('id'));
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-htmleditorfield-file.flash').entwine({
|
||||
getAttributes: function getAttributes() {
|
||||
var width = this.find(':input[name=Width]').val(),
|
||||
height = this.find(':input[name=Height]').val();
|
||||
return {
|
||||
'src': this.find(':input[name=URL]').val(),
|
||||
'width': width ? parseInt(width, 10) : null,
|
||||
'height': height ? parseInt(height, 10) : null,
|
||||
'data-fileid': this.find(':input[name=FileID]').val()
|
||||
};
|
||||
},
|
||||
getHTML: function getHTML() {
|
||||
var attrs = this.getAttributes();
|
||||
|
||||
var el = tinyMCE.activeEditor.plugins.media.dataToImg({
|
||||
'type': 'flash',
|
||||
'width': attrs.width,
|
||||
'height': attrs.height,
|
||||
'params': { 'src': attrs.src },
|
||||
'video': { 'sources': [] }
|
||||
});
|
||||
|
||||
return $('<div />').append(el).html();
|
||||
},
|
||||
updateFromNode: function updateFromNode(node) {}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-htmleditorfield-file.embed').entwine({
|
||||
getAttributes: function getAttributes() {
|
||||
var width = this.find(':input[name=Width]').val(),
|
||||
height = this.find(':input[name=Height]').val();
|
||||
return {
|
||||
'src': this.find('.thumbnail-preview').attr('src'),
|
||||
'width': width ? parseInt(width, 10) : null,
|
||||
'height': height ? parseInt(height, 10) : null,
|
||||
'class': this.find(':input[name=CSSClass]').val(),
|
||||
'alt': this.find(':input[name=AltText]').val(),
|
||||
'title': this.find(':input[name=Title]').val(),
|
||||
'data-fileid': this.find(':input[name=FileID]').val()
|
||||
};
|
||||
},
|
||||
getExtraData: function getExtraData() {
|
||||
var width = this.find(':input[name=Width]').val(),
|
||||
height = this.find(':input[name=Height]').val();
|
||||
return {
|
||||
'CaptionText': this.find(':input[name=CaptionText]').val(),
|
||||
'Url': this.find(':input[name=URL]').val(),
|
||||
'thumbnail': this.find('.thumbnail-preview').attr('src'),
|
||||
'width': width ? parseInt(width, 10) : null,
|
||||
'height': height ? parseInt(height, 10) : null,
|
||||
'cssclass': this.find(':input[name=CSSClass]').val()
|
||||
};
|
||||
},
|
||||
getHTML: function getHTML() {
|
||||
var el,
|
||||
attrs = this.getAttributes(),
|
||||
extraData = this.getExtraData(),
|
||||
imgEl = $('<img />').attr(attrs).addClass('ss-htmleditorfield-file embed');
|
||||
|
||||
$.each(extraData, function (key, value) {
|
||||
imgEl.attr('data-' + key, value);
|
||||
});
|
||||
|
||||
if (extraData.CaptionText) {
|
||||
el = $('<div style="width: ' + attrs['width'] + 'px;" class="captionImage ' + attrs['class'] + '"><p class="caption">' + extraData.CaptionText + '</p></div>').prepend(imgEl);
|
||||
} else {
|
||||
el = imgEl;
|
||||
}
|
||||
return $('<div />').append(el).html();
|
||||
},
|
||||
updateFromNode: function updateFromNode(node) {
|
||||
this.find(':input[name=AltText]').val(node.attr('alt'));
|
||||
this.find(':input[name=Title]').val(node.attr('title'));
|
||||
this.find(':input[name=Width]').val(node.width());
|
||||
this.find(':input[name=Height]').val(node.height());
|
||||
this.find(':input[name=Title]').val(node.attr('title'));
|
||||
this.find(':input[name=CSSClass]').val(node.data('cssclass'));
|
||||
this.find(':input[name=FileID]').val(node.data('fileid'));
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-htmleditorfield-file .dimensions :input').entwine({
|
||||
OrigVal: null,
|
||||
onmatch: function onmatch() {
|
||||
this._super();
|
||||
|
||||
this.setOrigVal(parseInt(this.val(), 10));
|
||||
},
|
||||
onunmatch: function onunmatch() {
|
||||
this._super();
|
||||
},
|
||||
onfocusout: function onfocusout(e) {
|
||||
this.closest('.ss-htmleditorfield-file').updateDimensions(this.attr('name'));
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .ss-uploadfield-item .ss-uploadfield-item-cancel').entwine({
|
||||
onclick: function onclick(e) {
|
||||
var form = this.closest('form'),
|
||||
file = this.closest('ss-uploadfield-item');
|
||||
form.find('.ss-gridfield-item[data-id=' + file.data('id') + ']').removeClass('ui-selected');
|
||||
this.closest('.ss-uploadfield-item').remove();
|
||||
form.redraw();
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
$('div.ss-assetuploadfield .ss-uploadfield-item-edit, div.ss-assetuploadfield .ss-uploadfield-item-name').entwine({
|
||||
getEditForm: function getEditForm() {
|
||||
return this.closest('.ss-uploadfield-item').find('.ss-uploadfield-item-editform');
|
||||
},
|
||||
|
||||
fromEditForm: {
|
||||
onchange: function onchange(e) {
|
||||
var form = $(e.target);
|
||||
form.removeClass('edited');
|
||||
form.addClass('edited');
|
||||
}
|
||||
},
|
||||
|
||||
onclick: function onclick(e) {
|
||||
var editForm = this.getEditForm();
|
||||
|
||||
if (this.closest('.ss-uploadfield-item').hasClass('ss-htmleditorfield-file')) {
|
||||
editForm.parent('ss-uploadfield-item').removeClass('ui-state-warning');
|
||||
|
||||
editForm.toggleEditForm();
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
this._super(e);
|
||||
}
|
||||
});
|
||||
|
||||
$('div.ss-assetuploadfield .ss-uploadfield-item-editform').entwine({
|
||||
toggleEditForm: function toggleEditForm(bool) {
|
||||
var itemInfo = this.prev('.ss-uploadfield-item-info'),
|
||||
status = itemInfo.find('.ss-uploadfield-item-status');
|
||||
var text = "";
|
||||
|
||||
if (bool === true || bool !== false && this.height() === 0) {
|
||||
text = _i18n2.default._t('UploadField.Editing', "Editing ...");
|
||||
this.height('auto');
|
||||
itemInfo.find('.toggle-details-icon').addClass('opened');
|
||||
status.removeClass('ui-state-success-text').removeClass('ui-state-warning-text');
|
||||
} else {
|
||||
this.height(0);
|
||||
itemInfo.find('.toggle-details-icon').removeClass('opened');
|
||||
if (!this.hasClass('edited')) {
|
||||
text = _i18n2.default._t('UploadField.NOCHANGES', 'No Changes');
|
||||
status.addClass('ui-state-success-text');
|
||||
} else {
|
||||
text = _i18n2.default._t('UploadField.CHANGESSAVED', 'Changes Made');
|
||||
this.removeClass('edited');
|
||||
status.addClass('ui-state-success-text');
|
||||
}
|
||||
}
|
||||
status.attr('title', text).text(text);
|
||||
}
|
||||
});
|
||||
|
||||
$('form.htmleditorfield-mediaform .field[id$="ParentID_Holder"] .TreeDropdownField').entwine({
|
||||
onadd: function onadd() {
|
||||
this._super();
|
||||
|
||||
var self = this;
|
||||
this.bind('change', function () {
|
||||
var fileList = self.closest('form').find('.grid-field');
|
||||
fileList.setState('ParentID', self.getValue());
|
||||
fileList.reload();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
173
client/dist/js/TinyMCE_SSPlugin.js
vendored
@ -1,173 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define('ss.TinyMCE_SSPlugin', [], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory();
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory();
|
||||
global.ssTinyMCE_SSPlugin = mod.exports;
|
||||
}
|
||||
})(this, function () {
|
||||
'use strict';
|
||||
|
||||
(function () {
|
||||
|
||||
var ssbuttons = {
|
||||
getInfo: function getInfo() {
|
||||
return {
|
||||
longname: 'Special buttons for SilverStripe CMS',
|
||||
author: 'Sam Minnée',
|
||||
authorurl: 'http://www.siverstripe.com/',
|
||||
infourl: 'http://www.silverstripe.com/',
|
||||
version: "1.0"
|
||||
};
|
||||
},
|
||||
|
||||
init: function init(ed) {
|
||||
ed.addButton('sslink', {
|
||||
icon: 'link',
|
||||
title: 'Insert Link',
|
||||
cmd: 'sslink'
|
||||
});
|
||||
ed.addMenuItem('sslink', {
|
||||
icon: 'link',
|
||||
text: 'Insert Link',
|
||||
cmd: 'sslink'
|
||||
});
|
||||
ed.addButton('ssmedia', {
|
||||
icon: 'image',
|
||||
title: 'Insert Media',
|
||||
cmd: 'ssmedia'
|
||||
});
|
||||
ed.addMenuItem('ssmedia', {
|
||||
icon: 'image',
|
||||
text: 'Insert Media',
|
||||
cmd: 'ssmedia'
|
||||
});
|
||||
|
||||
ed.addCommand('sslink', function (ed) {
|
||||
jQuery('#' + this.id).entwine('ss').openLinkDialog();
|
||||
});
|
||||
|
||||
ed.addCommand('ssmedia', function (ed) {
|
||||
jQuery('#' + this.id).entwine('ss').openMediaDialog();
|
||||
});
|
||||
|
||||
ed.on('BeforeExecCommand', function (e) {
|
||||
var cmd = e.command;
|
||||
var ui = e.ui;
|
||||
var val = e.value;
|
||||
if (cmd == 'mceAdvLink' || cmd == 'mceLink') {
|
||||
e.preventDefault();
|
||||
ed.execCommand('sslink', ui, val);
|
||||
} else if (cmd == 'mceAdvImage' || cmd == 'mceImage') {
|
||||
e.preventDefault();
|
||||
ed.execCommand('ssmedia', ui, val);
|
||||
}
|
||||
});
|
||||
|
||||
ed.on('SaveContent', function (o) {
|
||||
var content = jQuery(o.content);
|
||||
var attrsFn = function attrsFn(attrs) {
|
||||
return Object.keys(attrs).map(function (name) {
|
||||
return attrs[name] ? name + '="' + attrs[name] + '"' : null;
|
||||
}).filter(function (el) {
|
||||
return el !== null;
|
||||
}).join(' ');
|
||||
};
|
||||
|
||||
content.find('.ss-htmleditorfield-file.embed').each(function () {
|
||||
var el = jQuery(this);
|
||||
var attrs = {
|
||||
width: el.attr('width'),
|
||||
class: el.attr('cssclass'),
|
||||
thumbnail: el.data('thumbnail')
|
||||
};
|
||||
var shortCode = '[embed ' + attrsFn(attrs) + ']' + el.data('url') + '[/embed]';
|
||||
el.replaceWith(shortCode);
|
||||
});
|
||||
|
||||
content.find('img').each(function () {
|
||||
var el = jQuery(this);
|
||||
var attrs = {
|
||||
src: el.attr('src'),
|
||||
id: el.data('id'),
|
||||
width: el.attr('width'),
|
||||
height: el.attr('height'),
|
||||
class: el.attr('class'),
|
||||
|
||||
title: el.attr('title'),
|
||||
alt: el.attr('alt')
|
||||
};
|
||||
var shortCode = '[image ' + attrsFn(attrs) + ']';
|
||||
el.replaceWith(shortCode);
|
||||
});
|
||||
|
||||
o.content = '';
|
||||
content.each(function () {
|
||||
if (this.outerHTML !== undefined) {
|
||||
o.content += this.outerHTML;
|
||||
}
|
||||
});
|
||||
});
|
||||
ed.on('BeforeSetContent', function (o) {
|
||||
var matches;
|
||||
var content = o.content;
|
||||
var attrFromStrFn = function attrFromStrFn(str) {
|
||||
return str.match(/([^\s\/'"=,]+)\s*=\s*(('([^']+)')|("([^"]+)")|([^\s,\]]+))/g).reduce(function (coll, val) {
|
||||
var match = val.match(/^([^\s\/'"=,]+)\s*=\s*(?:(?:'([^']+)')|(?:"([^"]+)")|(?:[^\s,\]]+))$/),
|
||||
key = match[1],
|
||||
value = match[2] || match[3] || match[4];
|
||||
coll[key] = value;
|
||||
return coll;
|
||||
}, {});
|
||||
};
|
||||
|
||||
var shortTagRegex = /\[embed(.*?)\](.+?)\[\/\s*embed\s*\]/gi;
|
||||
while (matches = shortTagRegex.exec(content)) {
|
||||
var attrs = attrFromStrFn(matches[1]);
|
||||
var el;
|
||||
|
||||
el = jQuery('<img/>').attr({
|
||||
'src': attrs['thumbnail'],
|
||||
'width': attrs['width'],
|
||||
'height': attrs['height'],
|
||||
'class': attrs['class'],
|
||||
'data-url': matches[2]
|
||||
}).addClass('ss-htmleditorfield-file embed');
|
||||
attrs['cssclass'] = attrs['class'];
|
||||
|
||||
Object.keys(attrs).forEach(function (key) {
|
||||
return el.attr('data-' + key, attrs[key]);
|
||||
});
|
||||
content = content.replace(matches[0], jQuery('<div/>').append(el).html());
|
||||
}
|
||||
|
||||
var shortTagRegex = /\[image(.*?)\]/gi;
|
||||
while (matches = shortTagRegex.exec(content)) {
|
||||
var attrs = attrFromStrFn(matches[1]);
|
||||
var el = jQuery('<img/>').attr({
|
||||
'src': attrs['src'],
|
||||
'width': attrs['width'],
|
||||
'height': attrs['height'],
|
||||
'class': attrs['class'],
|
||||
'alt': attrs['alt'],
|
||||
'title': attrs['title'],
|
||||
'data-id': attrs['id']
|
||||
});
|
||||
content = content.replace(matches[0], jQuery('<div/>').append(el).html());
|
||||
}
|
||||
|
||||
o.content = content;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
tinymce.PluginManager.add("ssbuttons", function (editor) {
|
||||
ssbuttons.init(editor);
|
||||
});
|
||||
})();
|
||||
});
|
207
client/dist/js/i18n.js
vendored
@ -1,207 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define('ss.i18n', ['exports'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(exports);
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(mod.exports);
|
||||
global.ssI18n = mod.exports;
|
||||
}
|
||||
})(this, function (exports) {
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
|
||||
var _createClass = function () {
|
||||
function defineProperties(target, props) {
|
||||
for (var i = 0; i < props.length; i++) {
|
||||
var descriptor = props[i];
|
||||
descriptor.enumerable = descriptor.enumerable || false;
|
||||
descriptor.configurable = true;
|
||||
if ("value" in descriptor) descriptor.writable = true;
|
||||
Object.defineProperty(target, descriptor.key, descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
return function (Constructor, protoProps, staticProps) {
|
||||
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps) defineProperties(Constructor, staticProps);
|
||||
return Constructor;
|
||||
};
|
||||
}();
|
||||
|
||||
var i18n = function () {
|
||||
function i18n() {
|
||||
_classCallCheck(this, i18n);
|
||||
|
||||
this.currentLocale = null;
|
||||
this.defaultLocale = 'en_US';
|
||||
this.lang = {};
|
||||
}
|
||||
|
||||
_createClass(i18n, [{
|
||||
key: 'setLocale',
|
||||
value: function setLocale(locale) {
|
||||
this.currentLocale = locale;
|
||||
}
|
||||
}, {
|
||||
key: 'getLocale',
|
||||
value: function getLocale() {
|
||||
return this.currentLocale !== null ? this.currentLocale : this.defaultLocale;
|
||||
}
|
||||
}, {
|
||||
key: '_t',
|
||||
value: function _t(entity, fallbackString, priority, context) {
|
||||
var langName = this.getLocale().replace(/_[\w]+/i, '');
|
||||
var defaultlangName = this.defaultLocale.replace(/_[\w]+/i, '');
|
||||
|
||||
if (this.lang && this.lang[this.getLocale()] && this.lang[this.getLocale()][entity]) {
|
||||
return this.lang[this.getLocale()][entity];
|
||||
} else if (this.lang && this.lang[langName] && this.lang[langName][entity]) {
|
||||
return this.lang[langName][entity];
|
||||
} else if (this.lang && this.lang[this.defaultLocale] && this.lang[this.defaultLocale][entity]) {
|
||||
return this.lang[this.defaultLocale][entity];
|
||||
} else if (this.lang && this.lang[defaultlangName] && this.lang[defaultlangName][entity]) {
|
||||
return this.lang[defaultlangName][entity];
|
||||
} else if (fallbackString) {
|
||||
return fallbackString;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'addDictionary',
|
||||
value: function addDictionary(locale, dict) {
|
||||
if (typeof this.lang[locale] === 'undefined') {
|
||||
this.lang[locale] = {};
|
||||
}
|
||||
|
||||
for (var entity in dict) {
|
||||
this.lang[locale][entity] = dict[entity];
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'getDictionary',
|
||||
value: function getDictionary(locale) {
|
||||
return this.lang[locale];
|
||||
}
|
||||
}, {
|
||||
key: 'stripStr',
|
||||
value: function stripStr(str) {
|
||||
return str.replace(/^\s*/, '').replace(/\s*$/, '');
|
||||
}
|
||||
}, {
|
||||
key: 'stripStrML',
|
||||
value: function stripStrML(str) {
|
||||
var parts = str.split('\n');
|
||||
|
||||
for (var i = 0; i < parts.length; i += 1) {
|
||||
parts[i] = stripStr(parts[i]);
|
||||
}
|
||||
|
||||
return stripStr(parts.join(' '));
|
||||
}
|
||||
}, {
|
||||
key: 'sprintf',
|
||||
value: function sprintf(s) {
|
||||
for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
params[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
if (params.length === 0) {
|
||||
return s;
|
||||
}
|
||||
|
||||
var regx = new RegExp('(.?)(%s)', 'g');
|
||||
|
||||
var i = 0;
|
||||
|
||||
return s.replace(regx, function (match, subMatch1, subMatch2, offset, string) {
|
||||
if (subMatch1 === '%') {
|
||||
return match;
|
||||
}
|
||||
|
||||
return subMatch1 + params[i++];
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'inject',
|
||||
value: function inject(s, map) {
|
||||
var regx = new RegExp('\{([A-Za-z0-9_]*)\}', 'g');
|
||||
|
||||
return s.replace(regx, function (match, key, offset, string) {
|
||||
return map[key] ? map[key] : match;
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'detectLocale',
|
||||
value: function detectLocale() {
|
||||
var rawLocale;
|
||||
var detectedLocale;
|
||||
|
||||
rawLocale = jQuery('body').attr('lang');
|
||||
|
||||
if (!rawLocale) {
|
||||
var metas = document.getElementsByTagName('meta');
|
||||
|
||||
for (var i = 0; i < metas.length; i++) {
|
||||
if (metas[i].attributes['http-equiv'] && metas[i].attributes['http-equiv'].nodeValue.toLowerCase() == 'content-language') {
|
||||
rawLocale = metas[i].attributes['content'].nodeValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!rawLocale) {
|
||||
rawLocale = this.defaultLocale;
|
||||
}
|
||||
|
||||
var rawLocaleParts = rawLocale.match(/([^-|_]*)[-|_](.*)/);
|
||||
|
||||
if (rawLocale.length == 2) {
|
||||
for (var compareLocale in i18n.lang) {
|
||||
if (compareLocale.substr(0, 2).toLowerCase() == rawLocale.toLowerCase()) {
|
||||
detectedLocale = compareLocale;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (rawLocaleParts) {
|
||||
detectedLocale = rawLocaleParts[1].toLowerCase() + '_' + rawLocaleParts[2].toUpperCase();
|
||||
}
|
||||
|
||||
return detectedLocale;
|
||||
}
|
||||
}, {
|
||||
key: 'addEvent',
|
||||
value: function addEvent(obj, evType, fn, useCapture) {
|
||||
if (obj.addEventListener) {
|
||||
obj.addEventListener(evType, fn, useCapture);
|
||||
return true;
|
||||
} else if (obj.attachEvent) {
|
||||
return obj.attachEvent('on' + evType, fn);
|
||||
} else {
|
||||
console.log('Handler could not be attached');
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
return i18n;
|
||||
}();
|
||||
|
||||
var _i18n = new i18n();
|
||||
|
||||
window.ss = typeof window.ss !== 'undefined' ? window.ss : {};
|
||||
window.ss.i18n = window.i18n = _i18n;
|
||||
|
||||
exports.default = _i18n;
|
||||
});
|
105
client/dist/js/i18nx.js
vendored
@ -1,105 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define('ss.i18nx', ['exports'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(exports);
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(mod.exports);
|
||||
global.ssI18nx = mod.exports;
|
||||
}
|
||||
})(this, function (exports) {
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
|
||||
var _createClass = function () {
|
||||
function defineProperties(target, props) {
|
||||
for (var i = 0; i < props.length; i++) {
|
||||
var descriptor = props[i];
|
||||
descriptor.enumerable = descriptor.enumerable || false;
|
||||
descriptor.configurable = true;
|
||||
if ("value" in descriptor) descriptor.writable = true;
|
||||
Object.defineProperty(target, descriptor.key, descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
return function (Constructor, protoProps, staticProps) {
|
||||
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps) defineProperties(Constructor, staticProps);
|
||||
return Constructor;
|
||||
};
|
||||
}();
|
||||
|
||||
var i18nx = function () {
|
||||
function i18nx() {
|
||||
_classCallCheck(this, i18nx);
|
||||
|
||||
this.currentLocale = 'en_US';
|
||||
this.defaultLocale = 'en_US';
|
||||
}
|
||||
|
||||
_createClass(i18nx, [{
|
||||
key: '_t',
|
||||
value: function _t(entity, fallbackString, priority, context) {
|
||||
return fallbackString;
|
||||
}
|
||||
}, {
|
||||
key: 'sprintf',
|
||||
value: function sprintf(s) {
|
||||
for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
params[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
if (params.length === 0) {
|
||||
return s;
|
||||
}
|
||||
|
||||
var regx = new RegExp('(.?)(%s)', 'g');
|
||||
|
||||
var i = 0;
|
||||
|
||||
return s.replace(regx, function (match, subMatch1, subMatch2, offset, string) {
|
||||
if (subMatch1 === '%') {
|
||||
return match;
|
||||
}
|
||||
|
||||
return subMatch1 + params[i += 1];
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'inject',
|
||||
value: function inject(s, map) {
|
||||
var regx = new RegExp('\{([A-Za-z0-9_]*)\}', 'g');
|
||||
|
||||
return s.replace(regx, function (match, key, offset, string) {
|
||||
return map[key] ? map[key] : match;
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'addDictionary',
|
||||
value: function addDictionary() {}
|
||||
}, {
|
||||
key: 'getDictionary',
|
||||
value: function getDictionary() {}
|
||||
}]);
|
||||
|
||||
return i18nx;
|
||||
}();
|
||||
|
||||
;
|
||||
|
||||
var _i18nx = new i18nx();
|
||||
|
||||
exports.default = _i18nx;
|
||||
});
|
19
client/dist/js/jQuery.js
vendored
@ -1,19 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define('ss.jQuery', ['module'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(module);
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(mod);
|
||||
global.ssJQuery = mod.exports;
|
||||
}
|
||||
})(this, function (module) {
|
||||
'use strict';
|
||||
|
||||
var jQuery = typeof window.jQuery !== 'undefined' ? window.jQuery : null;
|
||||
|
||||
module.exports = jQuery;
|
||||
});
|
3
client/dist/styles/AssetUploadField.css
vendored
3
client/dist/styles/Form.css
vendored
@ -1,3 +0,0 @@
|
||||
form *{font-size:12px}form fieldset{margin:0;padding:0;border-style:none}form .field{clear:both;padding:0.2em;margin:0 0 0 10em;vertical-align:middle}form p.checkbox{margin:0 0 0 8.5em}form .field.form-group--no-label{margin-left:0}form label.left{float:left;width:10em;margin-left:-10em}form input.maxlength{width:auto}form .validation,form .error,form .required{border:1px solid #f00;background:#fcc;padding:0.5em;width:50%}form .field span.readonly{border:1px #CCC dotted;background-color:#F7F7F7;display:block;width:98%;padding:3px;margin:5px 0}form .indicator.inline{display:inline;margin-left:5px;vertical-align:middle}form .indicator.block{display:inline}form button.minorAction{background:none;padding:0;border:0;color:#0074C6;text-decoration:underline}form .message{margin:1em 0;padding:0.5em;font-weight:bold;border:1px black solid;background-color:#B9FFB9;border-color:#00FF00}form .message.notice{background-color:#FCFFDF;border-color:#FF9300}form .message.warning{background-color:#FFD2A6;border-color:#FF9300}form .message.bad{background-color:#FF8080;border-color:#FF0000}form .message.required,form .message.validation{display:block;margin-top:5px;color:#FF9300;width:240px;border-color:#FF9300}form .message.validation{color:#FF4040;width:240px;border-color:#FF4040}.typography .ss-tabset ul{margin:0}
|
||||
|
||||
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxlZ2FjeS9Gb3JtLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FHRSxjQUFnQixDQUhsQixjQU9FLFNBQ0EsVUFDQSxpQkFBbUIsQ0FUckIsWUFhRSxXQUNBLGNBQ0Esa0JBQ0EscUJBQXVCLENBaEJ6QixnQkFvQkUsa0JBQW9CLENBcEJ0QixpQ0F3QkUsYUFBZSxDQXhCakIsZ0JBNEJFLFdBQ0EsV0FDQSxpQkFBbUIsQ0E5QnJCLHFCQWtDRSxVQUFZLENBbENkLDRDQXNDRSxzQkFDQSxnQkFDQSxjQUNBLFNBQVcsQ0F6Q2IsMEJBNkNFLHVCQUNBLHlCQUNBLGNBQ0EsVUFDQSxZQUNBLFlBQWEsQ0FsRGYsdUJBc0RFLGVBQ0EsZ0JBQ0EscUJBQXVCLENBeER6QixzQkE0REUsY0FBZ0IsQ0E1RGxCLHdCQWlFRSxnQkFDQSxVQUNBLFNBQ0EsY0FDQSx5QkFBMkIsQ0FyRTdCLGNBNEVFLGFBQ0EsY0FDQSxpQkFDQSx1QkFDQSx5QkFDQSxvQkFBc0IsQ0FqRnhCLHFCQW9GRyx5QkFDQSxvQkFBc0IsQ0FyRnpCLHNCQXlGRyx5QkFDQSxvQkFBc0IsQ0ExRnpCLGtCQThGRyx5QkFDQSxvQkFBc0IsQ0EvRnpCLGdEQW1HRyxjQUNBLGVBQ0EsY0FDQSxZQUNBLG9CQUFzQixDQXZHekIseUJBMkdHLGNBQ0EsWUFDQSxvQkFBc0IsQ0FDdEIsMEJBS0YsUUFBVSxDQUNWIiwiZmlsZSI6ImxlZ2FjeS9Gb3JtLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImZvcm0ge1xuXG5cdCoge1xuXHRcdGZvbnQtc2l6ZTogMTJweDtcblx0fVxuXG5cdGZpZWxkc2V0IHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0XHRib3JkZXItc3R5bGU6IG5vbmU7XG5cdH1cblxuXHQuZmllbGQge1xuXHRcdGNsZWFyOiBib3RoO1xuXHRcdHBhZGRpbmc6IDAuMmVtO1xuXHRcdG1hcmdpbjogMCAwIDAgMTBlbTtcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHR9XG5cblx0cC5jaGVja2JveCB7XG5cdFx0bWFyZ2luOiAwIDAgMCA4LjVlbTtcblx0fVxuXG5cdC5maWVsZC5mb3JtLWdyb3VwLS1uby1sYWJlbCB7XG5cdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdH1cblxuXHRsYWJlbC5sZWZ0IHtcblx0XHRmbG9hdDogbGVmdDtcblx0XHR3aWR0aDogMTBlbTtcblx0XHRtYXJnaW4tbGVmdDogLTEwZW07XG5cdH1cblxuXHRpbnB1dC5tYXhsZW5ndGgge1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0LnZhbGlkYXRpb24sIC5lcnJvciwgLnJlcXVpcmVkIHtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZjAwO1xuXHRcdGJhY2tncm91bmQ6ICNmY2M7XG5cdFx0cGFkZGluZzogMC41ZW07XG5cdFx0d2lkdGg6IDUwJTtcblx0fVxuXG5cdC5maWVsZCBzcGFuLnJlYWRvbmx5IHtcblx0XHRib3JkZXI6IDFweCAjQ0NDIGRvdHRlZDtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGN0Y3O1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiA5OCU7XG5cdFx0cGFkZGluZzogM3B4O1xuXHRcdG1hcmdpbjo1cHggMDtcblx0fVxuXG5cdC5pbmRpY2F0b3IuaW5saW5lIHtcblx0XHRkaXNwbGF5OiBpbmxpbmU7XG5cdFx0bWFyZ2luLWxlZnQ6IDVweDtcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHR9XG5cblx0LmluZGljYXRvci5ibG9jayB7XG5cdFx0ZGlzcGxheTogaW5saW5lO1xuXHR9XG5cblx0Ly8gRW11bGF0aW5nIGxpbmsgc3R5bGluZyBmb3IgYWN0aW9ucyByZXF1aXJpbmcgbGVzc2VyIGF0dGVudGlvbiwgZS5nLiBcImNhbmNlbFwiIEZvcm1BY3Rpb25zXG5cdGJ1dHRvbi5taW5vckFjdGlvbiB7XG5cdFx0YmFja2dyb3VuZDogbm9uZTtcblx0XHRwYWRkaW5nOiAwO1xuXHRcdGJvcmRlcjogMDtcblx0XHRjb2xvcjogIzAwNzRDNjtcblx0XHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXNzYWdlc1xuXHQgKi9cblx0Lm1lc3NhZ2Uge1xuXHRcdG1hcmdpbjogMWVtIDA7XG5cdFx0cGFkZGluZzogMC41ZW07XG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG5cdFx0Ym9yZGVyOiAxcHggYmxhY2sgc29saWQ7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI0I5RkZCOTtcblx0XHRib3JkZXItY29sb3I6ICMwMEZGMDA7XG5cblx0XHQmLm5vdGljZSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGRkRGO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjRkY5MzAwO1xuXHRcdH1cblxuXHRcdCYud2FybmluZyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEMkE2O1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjRkY5MzAwO1xuXHRcdH1cblxuXHRcdCYuYmFkIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNGRjgwODA7XG5cdFx0XHRib3JkZXItY29sb3I6ICNGRjAwMDA7XG5cdFx0fVxuXG5cdFx0Ji5yZXF1aXJlZCwgJi52YWxpZGF0aW9uIHtcblx0XHRcdGRpc3BsYXk6YmxvY2s7XG5cdFx0XHRtYXJnaW4tdG9wOjVweDtcblx0XHRcdGNvbG9yOiNGRjkzMDA7XG5cdFx0XHR3aWR0aDoyNDBweDtcblx0XHRcdGJvcmRlci1jb2xvcjogI0ZGOTMwMDtcblx0XHR9XG5cblx0XHQmLnZhbGlkYXRpb24ge1xuXHRcdFx0Y29sb3I6I0ZGNDA0MDtcblx0XHRcdHdpZHRoOjI0MHB4O1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjRkY0MDQwO1xuXHRcdH1cblx0fVxufVxuXG4udHlwb2dyYXBoeSAuc3MtdGFic2V0IHVsIHtcblx0bWFyZ2luOiAwO1xufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */
|
3
client/dist/styles/GridField_print.css
vendored
@ -1,3 +0,0 @@
|
||||
h3{font-family:Arial, sans-serif}table{border-collapse:collapse;font-family:Arial, sans-serif;color:#333;font-size:12pt}table th{border-bottom:2px solid #333;padding:5px 10px;font-weight:bold;text-align:left}table th:first-child{padding-left:0px}table td{border-top:1px solid #aaa;border-bottom:1px solid #aaa;text-align:left;padding:5px 10px}table td:first-child{padding-left:0px}
|
||||
|
||||
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxlZ2FjeS9HcmlkRmllbGRfcHJpbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxHQUNDLDZCQUErQixDQUMvQixNQUVBLHlCQUNBLDhCQUNBLFdBQ0EsY0FBZ0IsQ0FKakIsU0FTRSw2QkFDQSxpQkFDQSxpQkFDQSxlQUFpQixDQVpuQixxQkFjRyxnQkFBa0IsQ0FkckIsU0FtQkUsMEJBQ0EsNkJBQ0EsZ0JBQ0EsZ0JBQWtCLENBdEJwQixxQkF3QkcsZ0JBQWtCLENBQ2xCIiwiZmlsZSI6ImxlZ2FjeS9HcmlkRmllbGRfcHJpbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiaDMge1xuXHRmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7XG59XG50YWJsZSB7XG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cdGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjtcblx0Y29sb3I6ICMzMzM7XG5cdGZvbnQtc2l6ZTogMTJwdDtcblx0dHJ7XG5cblx0fVxuXHR0aHtcblx0XHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzMzMztcblx0XHRwYWRkaW5nOiA1cHggMTBweDtcblx0XHRmb250LXdlaWdodDogYm9sZDtcblx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRcdCY6Zmlyc3QtY2hpbGR7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDBweDtcblx0XHR9XG5cblx0fVxuXHR0ZHtcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2FhYTtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYTtcblx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRcdHBhZGRpbmc6IDVweCAxMHB4O1xuXHRcdCY6Zmlyc3QtY2hpbGR7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDBweDtcblx0XHR9XG5cdH1cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */
|
3
client/dist/styles/Security_login.css
vendored
@ -1,3 +0,0 @@
|
||||
#Remember{margin:0.5em 0 0.5em 11em !important}p#Remember label{display:inline-block;margin:0}#Remember input{float:left;margin:0 5px 0 0}#MemberLoginForm_LoginForm .btn-toolbar{padding-left:12em}#ForgotPassword{margin-top:1em}
|
||||
|
||||
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxlZ2FjeS9TZWN1cml0eV9sb2dpbi5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQ0Msb0NBQXNDLENBQ3RDLGlCQUVDLHFCQUNBLFFBQVUsQ0FDVixnQkFFQSxXQUNBLGdCQUFrQixDQUNsQix3Q0FFRCxpQkFBbUIsQ0FDbkIsZ0JBRUEsY0FBZ0IsQ0FDaEIiLCJmaWxlIjoibGVnYWN5L1NlY3VyaXR5X2xvZ2luLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNSZW1lbWJlciB7XG5cdG1hcmdpbjogMC41ZW0gMCAwLjVlbSAxMWVtICFpbXBvcnRhbnQ7XG59XG5cdHAjUmVtZW1iZXIgbGFiZWwge1xuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRtYXJnaW46IDA7XG5cdH1cblx0I1JlbWVtYmVyIGlucHV0IHtcblx0XHRmbG9hdDogbGVmdDtcblx0XHRtYXJnaW46IDAgNXB4IDAgMDtcblx0fVxuI01lbWJlckxvZ2luRm9ybV9Mb2dpbkZvcm0gLmJ0bi10b29sYmFyIHtcblx0cGFkZGluZy1sZWZ0OiAxMmVtO1xufVxuI0ZvcmdvdFBhc3N3b3JkIHtcblx0bWFyZ2luLXRvcDogMWVtO1xufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */
|
3
client/dist/styles/UploadField.css
vendored
@ -1,3 +0,0 @@
|
||||
.ss-uploadfield.form-group::after,.ss-insert-media.form-group::after{visibility:hidden}.ss-uploadfield .clear{clear:both}.ss-uploadfield .description{margin-left:0}.ss-uploadfield .middleColumn{min-width:510px;max-width:696px;width:100%;margin-left:0;clear:both;padding:0;background:#fff;border:1px solid #b3b3b3;border-radius:4px;background-image:-webkit-gradient(linear, left top, left bottom, from(#efefef), color-stop(10%, #fff), color-stop(90%, #fff), color-stop(90%, #efefef));background-image:-webkit-linear-gradient(#efefef, #fff 10%, #fff 90%, #efefef);background-image:-o-linear-gradient(#efefef, #fff 10%, #fff 90%, #efefef);background-image:linear-gradient(#efefef, #fff 10%, #fff 90%, #efefef)}.ss-uploadfield .ss-uploadfield-item{margin:0;padding:15px;overflow:auto}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview{height:60px;line-height:60px;width:80px;text-align:center;font-weight:bold;float:left;overflow:hidden;background:#f0f2f4}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview span{height:60px;width:80px;display:table-cell;vertical-align:middle}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview.ss-uploadfield-dropzone{-webkit-box-shadow:0 0 4px 0 gray inset;box-shadow:0 0 4px 0 gray inset;border:2px dashed gray;background:#D2D5D8;margin-right:15px;position:relative}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview.ss-uploadfield-dropzone::after{background:none}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview img{display:block;margin:0 auto;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAJElEQVQYV2O8dOnSfwYkoKenx4jMZ6SDAmT7QGx0K1EcRBsFAJfOHd3Le79RAAAAAElFTkSuQmCC) repeat}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview img[src$="_32.png"]{background:transparent}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info{margin-left:95px}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name{display:block;line-height:13px;height:26px;margin:0;text-align:left}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .name{max-width:240px;font-weight:bold;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;display:inline;float:left}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .size{color:#a9b2b9;padding:0 0 0 5px;display:inline;float:left}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .ss-uploadfield-item-status{float:right;padding:0 0 0 5px;text-align:right;max-width:75%}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .ss-uploadfield-item-status.ui-state-error-text{color:red;font-weight:bold;width:150px}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .ss-uploadfield-item-status.ui-state-warning-text{color:#b7a403}.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .ss-uploadfield-item-status.ui-state-success-text{color:#1F9433}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-preview{width:auto;height:auto;margin-right:15px}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-info{margin-left:0}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-info .ss-uploadfield-item-name{float:left;width:70%;height:auto}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-info .ss-uploadfield-item-name .name{float:left;width:100%;margin-bottom:5px}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-info .ss-uploadfield-item-name .ss-uploadfield-item-status{float:left;width:100%;padding:0;text-align:left}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-info .ss-uploadfield-item-actions{float:right;width:5%;min-height:0;margin:0}.ss-uploadfield .ss-uploadfield-item.ui-state-error .ss-uploadfield-item-info .ss-uploadfield-item-actions .ss-uploadfield-item-cancel{position:relative;top:auto}.ss-uploadfield .ss-uploadfield-files{margin:0;padding:0;overflow:auto;position:relative}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item,.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item.ui-state-error{border:0;border-bottom:1px solid #b3b3b3;background:none;color:#66727d}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item:last-child,.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item.ui-state-error:last-child{border-bottom:0}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-actions{min-height:28px;overflow:hidden;margin:6px 0 -6px 0;position:relative}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-progress{position:absolute;left:0;right:42px;width:auto;margin:11px 0 0;height:15px}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-progress div{border-radius:25px;height:13px;padding:0;margin:0;overflow:hidden}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-progressbar{border:1px solid gray;background-color:#92a6b3;background-image:-webkit-gradient(linear, left top, left bottom, from(#92a6b3), color-stop(11%, #90aab8), color-stop(22%, #96b1bf), color-stop(33%, #9eb4c1), color-stop(44%, #a7bac7), to(#c1d5dc));background-image:-webkit-linear-gradient(top, #92a6b3 0%, #90aab8 11%, #96b1bf 22%, #9eb4c1 33%, #a7bac7 44%, #c1d5dc 100%);background-image:-o-linear-gradient(top, #92a6b3 0%, #90aab8 11%, #96b1bf 22%, #9eb4c1 33%, #a7bac7 44%, #c1d5dc 100%);background-image:linear-gradient(to bottom, #92a6b3 0%, #90aab8 11%, #96b1bf 22%, #9eb4c1 33%, #a7bac7 44%, #c1d5dc 100%)}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-progressbarvalue{border:0;width:0%;background:#60b3dd url(../images/progressbar_blue.gif) repeat-x left center}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-cancel,.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-start{position:absolute;top:10px;right:0}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-cancel button,.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-start button{display:block;overflow:hidden;text-indent:-9999px;padding:0;margin:0;border:0;width:16px;height:16px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;position:relative}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-cancel button span,.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-start button span{position:absolute;left:0;top:0;margin:0}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-cancel button span.ui-button-text,.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-start button span.ui-button-text{display:none}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-start{right:20px}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-editform{height:0;overflow:hidden;clear:both}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-editform.loading{width:100%;height:22px;margin:15px 0 0;background:url(../admin/client/dist/images/spinner.gif) no-repeat 50% 0}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-editform.loading iframe{padding-top:0;margin-top:22px;border:none}.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-editform iframe{margin-top:8px;padding-top:8px;border-top:1px solid #D2D5D8;width:100%}.ss-uploadfield .ss-uploadfield-addfile.borderTop{border-top:1px solid #b3b3b3}.ss-upload .clear{clear:both}.ss-upload .ss-uploadfield-fromcomputer input{position:absolute;top:0;margin:0;filter:alpha(opacity=0);-webkit-transform:translate(-200%, 0);-ms-transform:translate(-200%, 0);-o-transform:translate(-200%, 0);transform:translate(-200%, 0);direction:ltr;cursor:pointer;left:0;width:100%;height:100%}.ss-upload .loader{height:94px;background:transparent url(../admin/client/dist/images/spinner.gif) no-repeat 50% 50%}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){.ss-uploadfield .ss-uploadfield-files .ss-uploadfield-item-editform.loading{background-image:url(../admin/client/dist/images/spinner@2x.gif);-webkit-background-size:43px 43px;background-size:43px 43px}.ss-upload .loader{background-image:url(../admin/client/dist/images/spinner@2x.gif);-webkit-background-size:43px 43px;background-size:43px 43px}}
|
||||
|
||||
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxlZ2FjeS9VcGxvYWRGaWVsZC5zY3NzIiwiLi4vLi4vLi4vYWRtaW4vY2xpZW50L3NyYy9zdHlsZXMvbGVnYWN5L19taXhpbnMuc2NzcyIsIi4uLy4uLy4uL2FkbWluL2NsaWVudC9zcmMvc3R5bGVzL2xlZ2FjeS90aGVtZXMvX2RlZmF1bHQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxxRUFHRSxpQkFBbUIsQ0FDbkIsdUJBTUEsVUFBWSxDQUhkLDZCQU9FLGFBQWUsQ0FQakIsOEJBYUUsZ0JBQ0EsZ0JBQ0EsV0FDQSxjQUNBLFdBQ0EsVUFDQSxnQkFDQSx5QkFDQSxrQkFDQSx3SkFBQSxBQUFpQywrRUFBakMsQUFBaUMsMEVBQWpDLEFBQWlDLHNFQUFBLENBdEJuQyxxQ0F5QkUsU0FDQSxhQUNBLGFBQWUsQ0EzQmpCLGtFQThCRyxZQUNBLGlCQUNBLFdBQ0Esa0JBQ0EsaUJBQ0EsV0FDQSxnQkFDRyxrQkFBb0IsQ0FyQzFCLHVFQXVDUSxZQUNBLFdBQ0EsbUJBQ0EscUJBQXVCLENBMUMvQiwwRkE4Q0ksd0NBQUEsQUFDQSxnQ0FBQSx1QkFDQSxtQkFDQSxrQkFDQSxpQkFBbUIsQ0FsRHZCLGlHQXFESyxlQUFpQixDQXJEdEIsc0VBeURRLGNBQ0EsY0FDSix5S0FBMEssQ0EzRDlLLHNGQThEVSxzQkFBd0IsQ0E5RGxDLCtEQW1FRyxnQkFBa0IsQ0FuRXJCLHlGQXNFSSxjQUNBLGlCQUNBLFlBQ0EsU0FDQSxlQUFpQixDQTFFckIsK0ZBNEVLLGdCQUNBLGlCQ3pFSixnQkFDQSxtQkFDQSx1QkFDQSwwQkR3RUksZUFDQSxVQUFXLENBaEZoQiwrRkFtRkssY0FDQSxrQkFDQSxlQUNBLFVBQVcsQ0F0RmhCLHFIQXlGSyxZQUNBLGtCQUNBLGlCQUNBLGFBQWUsQ0E1RnBCLHlJQStGTSxVQUNBLGlCQUNBLFdBQVksQ0FqR2xCLDJJQXFHTSxhQUFhLENBckduQiwySUF5R00sYUUxQzZCLENGL0RuQyxpRkFtSEksV0FDQSxZQUNBLGlCQUFtQixDQXJIdkIsOEVBeUhJLGFBQWUsQ0F6SG5CLHdHQTRISyxXQUNBLFVBQ0EsV0FBYSxDQTlIbEIsOEdBa0lNLFdBQ0EsV0FDQSxpQkFBbUIsQ0FwSXpCLG9JQXdJTSxXQUNBLFdBQ0EsVUFDQSxlQUFpQixDQTNJdkIsMkdBZ0pLLFlBQ0EsU0FDQSxhQUNBLFFBQVUsQ0FuSmYsdUlBc0pNLGtCQUNBLFFBQVUsQ0F2SmhCLHNDQStKRSxTQUNBLFVBQ0EsY0FDQSxpQkFBbUIsQ0FsS3JCLHFJQXNLRyxTQUNBLGdDQUNBLGdCQUNBLGFFMUhpQixDRi9DcEIsMkpBNEtJLGVBQWlCLENBNUtyQixtRUFnTEcsZ0JBQ0EsZ0JBQ0Esb0JBQ0EsaUJBQW1CLENBbkx0QixvRUFzTEcsa0JBQ0EsT0FDQSxXQUNBLFdBQ0EsZ0JBQ0EsV0FBYSxDQTNMaEIsd0VBOExJLG1CQUNBLFlBQ0EsVUFDQSxTQUNBLGVBQWlCLENBbE1yQix1RUFzTUcsc0JBQ0EseUJBQ0EscU1BQUEsQUFBaUMsNEhBQWpDLEFBQWlDLHVIQUFqQyxBQUFpQyx5SEFBQSxDQXhNcEMsNEVBMk1HLFNBQ0EsU0FDQSwyRUFBNEUsQ0E3TS9FLG1JQWlORyxrQkFDQSxTQUNBLE9BQVMsQ0FuTlosaUpBc05JLGNBQ0EsZ0JBQ0Esb0JBQ0EsVUFDQSxTQUNBLFNBQ0EsV0FDQSxZQUNBLGVBQ0Esd0JBQUEsQUFDQSxnQkFBQSxpQkFBbUIsQ0FoT3ZCLDJKQW9PSyxrQkFDQSxPQUNBLE1BQ0EsUUFBVSxDQXZPZix5TEEwT00sWUFBYyxDQTFPcEIsaUVBZ1BHLFVBQVksQ0FoUGYsb0VBdVBHLFNBQ0EsZ0JBQ0EsVUFBWSxDQXpQZiw0RUE0UEksV0FDQSxZQUNBLGdCQUNBLHVFQUF3RSxDQS9QNUUsbUZBbVFLLGNBQWlCLGdCQUNqQixXQUFhLENBcFFsQiwyRUF5UUksZUFDQSxnQkFDQSw2QkFDQSxVQUFZLENBNVFoQixrREFrUkcsNEJBQTZCLENBQzdCLGtCQU9ELFVBQVksQ0FIZCw4Q0FRRSxrQkFDQSxNQUNBLFNBQ0Esd0JBQ0Esc0NBQUEsQUFDQSxrQ0FEQSxBQUNBLGlDQURBLEFBQ0EsOEJBQUEsY0FDQSxlQUNBLE9BQ0EsV0FDQSxXQUFhLENBakJmLG1CQXFCRSxZQUNBLHFGQUFzRixDQUN0RixtVkFlRCw0RUFJSSxpRUFDQSxrQ0FBQSxBQUEyQix5QkFBQSxDQUMzQixtQkFPRixpRUFDQSxrQ0FBQSxBQUEyQix5QkFBQSxDQUMzQixDQUFBIiwiZmlsZSI6ImxlZ2FjeS9VcGxvYWRGaWVsZC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPIHdlIG5lZWQgYSBzZXBlcmF0ZWQgZmlsZSBmb3Igc3R5bGVzIHRoYXQgYXJlIHVzZWQgaW4gYm90aCBjbXMgYW5kIGZyb250IGVuZCAoc3VjaCBhcyBidXR0b25zKVxuQGltcG9ydCBcIi4uLy4uLy4uLy4uL2FkbWluL2NsaWVudC9zcmMvc3R5bGVzL2xlZ2FjeS90aGVtZXMvZGVmYXVsdC5zY3NzXCI7XG5AaW1wb3J0IFwiLi4vLi4vLi4vLi4vYWRtaW4vY2xpZW50L3NyYy9zdHlsZXMvbGVnYWN5L19taXhpbnMuc2Nzc1wiO1xuXG4uc3MtdXBsb2FkZmllbGQsXG4uc3MtaW5zZXJ0LW1lZGlhIHtcblx0Ji5mb3JtLWdyb3VwOjphZnRlciB7XG5cdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR9XG59XG5cbi5zcy11cGxvYWRmaWVsZCB7XG5cblx0LmNsZWFyIHtcblx0XHRjbGVhcjogYm90aDtcblx0fVxuXG5cdC5kZXNjcmlwdGlvbiB7XG5cdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdH1cblxuXHQubWlkZGxlQ29sdW1uIHtcblx0XHQvLyBUT0RPIC5taWRkbGVDb2x1bW4gc3R5bGluZyBzaG91bGQgcHJvYmFibHkgYmUgdGhlbWUgc3BlY2lmaWMgKGVnIGNtcyB1aSB3aWxsIGxvb2sgZGlmZmVyZW50IHRoYW4gYmxhY2tjYW5keSlcblx0XHQvLyBzbyB3ZSBzaG91bGQgbW92ZSB0aGlzIHN0eWxlIGludG8gdGhlIGNtcyBhbmQgYmxhY2sgY2FuZHkgZmlsZXNcblx0XHRtaW4td2lkdGg6IDUxMHB4O1xuXHRcdG1heC13aWR0aDogJGdyaWQteCAqIDg3OyAvLyBDYXBwZWQgd2lkdGggdG8gbGluZSB1cCB3aXRoIHRleHQgZmllbGRzXG5cdFx0d2lkdGg6MTAwJTtcblx0XHRtYXJnaW4tbGVmdDowO1xuXHRcdGNsZWFyOmJvdGg7XG5cdFx0cGFkZGluZzogMDtcblx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNvbG9yLW1lZGl1bS1zZXBhcmF0b3IsIDIwJSk7XG5cdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xuXHRcdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgjZWZlZmVmLCAjZmZmIDEwJSwgI2ZmZiA5MCUsICNlZmVmZWYpO1xuXHR9XG5cdC5zcy11cGxvYWRmaWVsZC1pdGVtIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMTVweDtcblx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLXByZXZpZXcge1xuXHRcdFx0aGVpZ2h0OiA2MHB4O1xuXHRcdFx0bGluZS1oZWlnaHQ6IDYwcHg7XG5cdFx0XHR3aWR0aDogODBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYmFja2dyb3VuZDogI2YwZjJmNDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBoZWlnaHQ6IDYwcHg7XG4gICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuXG5cdFx0XHQmLnNzLXVwbG9hZGZpZWxkLWRyb3B6b25lIHtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAwIDRweCAwICRjb2xvci1tZWRpdW0tc2VwYXJhdG9yIGluc2V0O1xuXHRcdFx0XHRib3JkZXI6IDJweCBkYXNoZWQgJGNvbG9yLW1lZGl1bS1zZXBhcmF0b3I7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICRjb2xvci1saWdodC1zZXBhcmF0b3I7XG5cdFx0XHRcdG1hcmdpbi1yaWdodDogMTVweDtcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHRcdCY6OmFmdGVyIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpbWcge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG5cdFx0XHRcdGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQUlDQVlBQUFERUQ3NkxBQUFBSkVsRVFWUVlWMk84ZE9uU2Z3WWtvS2VueDRqTVo2U0RBbVQ3UUd4MEsxRWNSQnNGQUpmT0hkM0xlNzlSQUFBQUFFbEZUa1N1UW1DQykgcmVwZWF0O1xuICAgICAgICAvLyBObyBjaGVja2VyIGJhY2tncm91bmQgZm9yIGljb25zXG4gICAgICAgICZbc3JjJD1cIl8zMi5wbmdcIl0ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICB9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLWluZm8ge1xuXHRcdFx0bWFyZ2luLWxlZnQ6IDk1cHg7XG5cblx0XHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLW5hbWUge1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDEzcHg7XG5cdFx0XHRcdGhlaWdodDogMjZweDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRcdFx0XHQubmFtZSB7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAyNDBweDtcblx0XHRcdFx0XHRmb250LXdlaWdodDogYm9sZDtcblx0XHRcdFx0XHRAaW5jbHVkZSBoaWRlLXRleHQtb3ZlcmZsb3c7XG5cdFx0XHRcdFx0ZGlzcGxheTppbmxpbmU7XG5cdFx0XHRcdFx0ZmxvYXQ6bGVmdDtcblx0XHRcdFx0fVxuXHRcdFx0XHQuc2l6ZSB7XG5cdFx0XHRcdFx0Y29sb3I6IGxpZ2h0ZW4oJGNvbG9yLXRleHQsIDI1JSk7XG5cdFx0XHRcdFx0cGFkZGluZzogMCAwIDAgNXB4O1xuXHRcdFx0XHRcdGRpc3BsYXk6aW5saW5lO1xuXHRcdFx0XHRcdGZsb2F0OmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tc3RhdHVzIHtcblx0XHRcdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHRcdFx0cGFkZGluZzogMCAwIDAgNXB4O1xuXHRcdFx0XHRcdHRleHQtYWxpZ246cmlnaHQ7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiA3NSU7XG5cblx0XHRcdFx0XHQmLnVpLXN0YXRlLWVycm9yLXRleHQge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICRjb2xvci1idXR0b24tZGVzdHJ1Y3RpdmU7XG5cdFx0XHRcdFx0XHRmb250LXdlaWdodDogYm9sZDtcblx0XHRcdFx0XHRcdHdpZHRoOjE1MHB4OyAvL0FsbG9jYXRlcyB0aGUgc3RhdHVzIG1lc3NhZ2UgZW5vdWdoIHJvb20gdG8gYmUgdXNlZnVsLiBXaWxsIHdyYXAgaWYgaXQgaXMgbG9uZ2VyXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji51aS1zdGF0ZS13YXJuaW5nLXRleHQge1xuXHRcdFx0XHRcdFx0Y29sb3I6IGRhcmtlbigkY29sb3Itd2FybmluZywgMTAlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLnVpLXN0YXRlLXN1Y2Nlc3MtdGV4dCB7XG5cdFx0XHRcdFx0XHRjb2xvcjogJGNvbG9yLWJ1dHRvbi1jb25zdHJ1Y3RpdmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9VcGxvYWQvVmFsaWRhdGlvbiBlcnJvclxuXHRcdCYudWktc3RhdGUtZXJyb3Jcblx0XHR7XG5cdFx0XHQuc3MtdXBsb2FkZmllbGQtaXRlbS1wcmV2aWV3IHtcblx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdGhlaWdodDogYXV0bztcblx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAxNXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQuc3MtdXBsb2FkZmllbGQtaXRlbS1pbmZvIHtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDA7XG5cblx0XHRcdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tbmFtZSB7XG5cdFx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdFx0d2lkdGg6IDcwJTtcblx0XHRcdFx0XHRoZWlnaHQ6IGF1dG87XG5cblx0XHRcdFx0XHQubmFtZVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tc3RhdHVzIHtcblx0XHRcdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuc3MtdXBsb2FkZmllbGQtaXRlbS1hY3Rpb25zIHtcblx0XHRcdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHRcdFx0d2lkdGg6IDUlO1xuXHRcdFx0XHRcdG1pbi1oZWlnaHQ6IDA7XG5cdFx0XHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRcdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tY2FuY2VsIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHRcdHRvcDogYXV0bztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuc3MtdXBsb2FkZmllbGQtZmlsZXMge1xuXHRcdG1hcmdpbjogMDtcblx0XHRwYWRkaW5nOiAwO1xuXHRcdG92ZXJmbG93OiBhdXRvO1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLFxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLnVpLXN0YXRlLWVycm9yIHtcblx0XHRcdGJvcmRlcjogMDtcblx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBsaWdodGVuKCRjb2xvci1tZWRpdW0tc2VwYXJhdG9yLCAyMCUpO1xuXHRcdFx0YmFja2dyb3VuZDogbm9uZTtcblx0XHRcdGNvbG9yOiAkY29sb3ItdGV4dDtcblxuXHRcdFx0JjpsYXN0LWNoaWxkIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdH1cblx0XHR9XG5cdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tYWN0aW9ucyB7XG5cdFx0XHRtaW4taGVpZ2h0OiAyOHB4O1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdG1hcmdpbjogNnB4IDAgLTZweCAwO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdH1cblx0XHQuc3MtdXBsb2FkZmllbGQtaXRlbS1wcm9ncmVzcyB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRsZWZ0OiAwO1xuXHRcdFx0cmlnaHQ6IDQycHg7XG5cdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdG1hcmdpbjogMTFweCAwIDA7XG5cdFx0XHRoZWlnaHQ6IDE1cHg7XG5cblx0XHRcdGRpdiB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDI1cHg7XG5cdFx0XHRcdGhlaWdodDogMTNweDtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQuc3MtdXBsb2FkZmllbGQtaXRlbS1wcm9ncmVzc2JhciB7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItbWVkaXVtLXNlcGFyYXRvcjtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICM5MmE2YjM7XG5cdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjOTJhNmIzIDAlLCM5MGFhYjggMTElLCM5NmIxYmYgMjIlLCM5ZWI0YzEgMzMlLCNhN2JhYzcgNDQlLCNjMWQ1ZGMgMTAwJSk7XG5cdFx0fVxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLXByb2dyZXNzYmFydmFsdWUge1xuXHRcdFx0Ym9yZGVyOiAwO1xuXHRcdFx0d2lkdGg6IDAlO1xuXHRcdFx0YmFja2dyb3VuZDogIzYwYjNkZCB1cmwoLi4vaW1hZ2VzL3Byb2dyZXNzYmFyX2JsdWUuZ2lmKSByZXBlYXQteCBsZWZ0IGNlbnRlcjtcblx0XHR9XG5cdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tY2FuY2VsLFxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLXN0YXJ0IHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMTBweDtcblx0XHRcdHJpZ2h0OiAwO1xuXG5cdFx0XHRidXR0b24ge1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdFx0dGV4dC1pbmRlbnQ6IC05OTk5cHg7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0Ym9yZGVyOiAwO1xuXHRcdFx0XHR3aWR0aDogMTZweDtcblx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0Ly8gYmFja2dyb3VuZDogc3ByaXRlKCRzcHJpdGVzMTYsIGNyb3NzLWNpcmNsZSkgbm8tcmVwZWF0O1xuXG5cdFx0XHRcdHNwYW4ge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0XHQmLnVpLWJ1dHRvbi10ZXh0IHtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLXN0YXJ0IHtcblx0XHRcdHJpZ2h0OiAyMHB4O1xuXHRcdFx0YnV0dG9uIHtcblx0XHRcdFx0Ly8gYmFja2dyb3VuZDogc3ByaXRlKCRzcHJpdGVzMTYsIG5hdmlnYXRpb24pIG5vLXJlcGVhdDtcblx0XHRcdH1cblx0XHR9XG5cdFx0LnNzLXVwbG9hZGZpZWxkLWl0ZW0tZWRpdGZvcm0ge1xuXHRcdFx0LyogZG9uJ3QgdXNlIGRpc3BsYXkgbm9uZSwgZm9yIGl0IHdpbGwgYnJlYWsgalF1ZXJ5KCdpZnJhbWUnKS5jb250ZW50cygpLmhlaWdodCgpICovXG5cdFx0XHRoZWlnaHQ6IDA7XG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0Y2xlYXI6IGJvdGg7XG5cblx0XHRcdCYubG9hZGluZyB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRoZWlnaHQ6IDIycHg7XG5cdFx0XHRcdG1hcmdpbjogMTVweCAwIDA7XG5cdFx0XHRcdGJhY2tncm91bmQ6IHVybCguLi9hZG1pbi9jbGllbnQvZGlzdC9pbWFnZXMvc3Bpbm5lci5naWYpIG5vLXJlcGVhdCA1MCUgMDtcblxuXHRcdFx0XHRpZnJhbWUge1xuXHRcdFx0XHRcdC8qIE9sZCBJRSBuZWVkcyB0aGlzIG9yIGl0J2xsIGdpdmUgdGhlIGlmcmFtZSBhIHdoaXRlIGJhY2tncm91bmQsIGNvdmVyaW5nIHRoZSBzcGlubmVyICovXG5cdFx0XHRcdFx0cGFkZGluZy10b3A6IDA7IG1hcmdpbi10b3A6IDIycHg7XG5cdFx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmcmFtZSB7XG5cdFx0XHRcdG1hcmdpbi10b3A6ICRncmlkLXk7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiAkZ3JpZC15O1xuXHRcdFx0XHRib3JkZXItdG9wOiAxcHggc29saWQgJGNvbG9yLWxpZ2h0LXNlcGFyYXRvcjtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC5zcy11cGxvYWRmaWVsZC1hZGRmaWxlIHtcblx0XHQmLmJvcmRlclRvcCB7XG5cdFx0XHRib3JkZXItdG9wOiAxcHggc29saWQgbGlnaHRlbigkY29sb3ItbWVkaXVtLXNlcGFyYXRvciwgMjAlKTtcblx0XHR9XG5cdH1cbn1cblxuLnNzLXVwbG9hZCB7XG5cblx0LmNsZWFyIHtcblx0XHRjbGVhcjogYm90aDtcblx0fVxuXG5cdC5zcy11cGxvYWRmaWVsZC1mcm9tY29tcHV0ZXIgaW5wdXQge1xuXHRcdC8vIHNpbmNlIHdlIGNhbid0IHJlYWxseSBzdHlsZSB0aGUgZmlsZSBpbnB1dCwgd2UgdXNlIHRoaXMgaGFjayB0byBtYWtlIGl0IGFzIGJpZyBhcyB0aGUgYnV0dG9uIGFuZCBoaWRlIGl0XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRtYXJnaW46IDA7XG5cdFx0ZmlsdGVyOiBhbHBoYShvcGFjaXR5ID0gMCk7XG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIwMCUsIDApO1xuXHRcdGRpcmVjdGlvbjogbHRyO1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblx0fVxuXG5cdC5sb2FkZXIge1xuXHRcdGhlaWdodDogOTRweDsgLy8gQXBwcm94bWlhdGVseSBtYXRjaGVzIHRoZSBoZWlnaHQgb2YgdGhlIGZpZWxkIG9uY2UgYSBmaWxlIGlzIGF0dGFjaGVkLCBhdm9pZHMgYSAnanVtcCcgaW4gc2l6ZVxuXHRcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9hZG1pbi9jbGllbnQvZGlzdC9pbWFnZXMvc3Bpbm5lci5naWYpIG5vLXJlcGVhdCA1MCUgNTAlO1xuXHR9XG59XG5cbi8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBcIkAyeFwiIG1lZGlhIHF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbkBtZWRpYVxuXHRvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksXG5cdG9ubHkgc2NyZWVuIGFuZCAoICAgbWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcblx0b25seSBzY3JlZW4gYW5kICggICAgIC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksXG5cdG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICBtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcblx0b25seSBzY3JlZW4gYW5kICggICAgICAgICAgICAgICAgbWluLXJlc29sdXRpb246IDE5MmRwaSksXG5cdG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAyZHBweCkge1xuXG5cdC5zcy11cGxvYWRmaWVsZCB7XG5cdFx0LnNzLXVwbG9hZGZpZWxkLWZpbGVzIHtcblx0XHRcdC5zcy11cGxvYWRmaWVsZC1pdGVtLWVkaXRmb3JtIHtcblx0XHRcdFx0Ji5sb2FkaW5nIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vYWRtaW4vY2xpZW50L2Rpc3QvaW1hZ2VzL3NwaW5uZXJAMnguZ2lmKTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDQzcHggNDNweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC5zcy11cGxvYWQge1xuXHRcdC5sb2FkZXIge1xuXHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2FkbWluL2NsaWVudC9kaXN0L2ltYWdlcy9zcGlubmVyQDJ4LmdpZik7XG5cdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDQzcHggNDNweDtcblx0XHR9XG5cdH1cblxufVxuIiwiLy8qKlxuLy8gKiBUaGlzIGZpbGUgY29udGFpbnMgZ2VuZXJpYyBtaXhpbnMgd2hpY2ggd2UgdXNlIHRocm91Z2hvdXRcbi8vICogdGhlIGFkbWluIHBhbmVscy5cbi8vICpcbi8vICogTWl4aW5zIHNob3VsZCBiZSBzdG9yZWQgaGVyZSByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGZpbGVzXG4vLyAqIHNvIHRoYXQgd2UgY2FuIGtlZXAuXG4vLyAqL1xuXG4vLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICogSGlkZXMgdGhlIG92ZXJmbG93aW5nIHRleHQgZnJvbSBhIGNvbnRhaW5lclxuLy8gKlxuLy8gKiBOb3RlOiB5b3UgbXVzdCBkZWZpbmUgYSB3aWR0aCBvbiB0aGUgZWxlbWVudCB3aXRoIHRoaXNcbi8vICogb3ZlcmZsb3cuXG4vLyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdC1vLXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdy1ub25le1xuXHQtbW96LWJveC1zaGFkb3c6IG5vbmU7XG5cdC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG5cbi8vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL0NsZWFyZml4IG1peGluIGNsZWFycyB0aGUgZmxvYXQgb2YgaXQncyBwYXJlbnQgZWxlbWVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovXG5AbWl4aW4gY2xlYXJmaXh7XG5cdCY6YWZ0ZXJ7XG5cdFx0Y29udGVudDogXCIuXCI7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0aGVpZ2h0OiAwO1xuXHRcdGNsZWFyOiBib3RoO1xuXHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0fVxuXHQqOmZpcnN0LWNoaWxkICZ7IHpvb206MTt9XG59XG5cblxuXG4vLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICogQ2xlYXIgdGhlIHByb3BlcnRpZXMgb2Ygc3ViIGZvcm0gZmllbGRzLlxuLy8gKlxuLy8gKiBPZnRlbiBuZWVkZWQgZm9yIG5lc3RlZCBmb3JtIGZpZWxkcyBhbmRcbi8vICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbkBtaXhpbiBjbGVhci1mb3JtLWZpZWxkLXN0eWxlcyB7XG5cdC5maWVsZCB7XG5cdFx0cGFkZGluZzogMDtcblx0XHRib3JkZXI6IDA7XG5cdH1cblxuXHRsYWJlbCB7XG5cdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0d2lkdGg6IGF1dG87XG5cblx0XHQmLmxlZnQge1xuXHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRkaXNwbGF5OiBpbmhlcml0O1xuXHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IGluaGVyaXQ7XG5cdFx0fVxuXHR9XG5cblx0Lm1pZGRsZUNvbHVtbiB7XG5cdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdH1cblxuXHRpbnB1dC50ZXh0LFxuXHR0ZXh0YXJlYSxcblx0c2VsZWN0LFxuXHQuVHJlZURyb3Bkb3duRmllbGQge1xuXHRcdHdpZHRoOiBhdXRvO1xuXHRcdG1heC13aWR0aDogYXV0bztcblx0fVxufVxuXG4vLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICogRG91YmxlIHRvbmUgYm9yZGVyc1xuLy8gKlxuLy8gKiBodHRwOi8vZGF2ZXJ1cGVydC5jb20vMjAxMS8wNi90d28tdG9uZS1ib3JkZXJzLXdpdGgtY3NzMy9cbi8vICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbkBtaXhpbiBkb3VibGVib3JkZXIoJHNpZGUsICRpbm5lckNvbG9yLCAkb3V0ZXJDb2xvcikge1xuICAgICRzaGFkb3c6IFwiMCAwIDBcIjtcbiAgICBib3JkZXItI3skc2lkZX06IDFweCBzb2xpZCAkaW5uZXJDb2xvcjtcbiAgICBAaWYgKCRzaWRlID09IFwidG9wXCIpIHsgJHNoYWRvdzogMCAtMXB4IDA7IH1cbiAgICBAaWYgKCRzaWRlID09IFwicmlnaHRcIikgeyAkc2hhZG93OiAxcHggMCAwOyB9XG4gICAgQGlmICgkc2lkZSA9PSBcImJvdHRvbVwiKSB7ICRzaGFkb3c6IDAgMXB4IDA7IH1cbiAgICBAaWYgKCRzaWRlID09IFwibGVmdFwiKSB7ICRzaGFkb3c6IC0xcHggMCAwOyB9XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAkc2hhZG93ICRvdXRlckNvbG9yO1xuICAgIC1tb3otYm94LXNoYWRvdzogJHNoYWRvdyAkb3V0ZXJDb2xvcjtcbiAgICAtby1ib3gtc2hhZG93OiAkc2hhZG93ICRvdXRlckNvbG9yO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3cgJG91dGVyQ29sb3I7XG59XG5cblxuLypNaXhpbiB1c2VkIHRvIGdlbmVyYXRlIHNsaWdodGx5IHNtYWxsZXIgdGV4dCBhbmQgZm9ybXNcblVzZWQgaW4gc2lkZSBwYW5lbHMgYW5kIGFjdGlvbiB0YWJzXG4qL1xuQG1peGluIHRpZ2h0U3BhY2luZ3tcblx0aDMsaDQsaDUge1xuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRcdGxpbmUtaGVpZ2h0OiAkZ3JpZC15ICogMjtcblx0fVxuXHRoMyB7XG5cdFx0Zm9udC1zaXplOiAkZm9udC1zaXplLXJvb3Q7XG5cdH1cblxuXHRoNCB7XG5cdFx0Zm9udC1zaXplOiAkZm9udC1zaXplLXJvb3QgLTE7XG5cdFx0bWFyZ2luOiA1cHggMDtcblx0fVxuXG5cdC51aS13aWRnZXQtY29udGVudCB7XG5cdFx0YmFja2dyb3VuZDogbm9uZTtcblx0fVxuXG5cdC5maWVsZCB7XG5cdFx0Lypcblx0XHQgKiBGaWVsZHMgYXJlIG1vcmUgY29tcHJlc3NlZCBpbiBzb21lIGFyZWFzIGNvbXBhcmVkIHRvIHRoZVxuXHRcdCAqIG1haW4gY29udGVudCBlZGl0aW5nIHdpbmRvdyBzbyB0aGUgYmVsb3cgYWx0ZXJzIHRoZSBpbnRlcm5hbFxuXHRcdCAqIHNwYWNpbmcgb2YgdGhlIGZpZWxkcyBzbyB3ZSBjYW4gbW92ZSB0aGF0IHNwYWNpbmcgdG8gYmV0d2VlblxuXHRcdCAqIHRoZSBmb3JtIGZpZWxkcyByYXRoZXIgdGhhbiBwYWRkaW5nXG5cdFx0ICovXG5cdFx0Ym9yZGVyLWJvdHRvbTpub25lO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0bGFiZWwge1xuXHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdHBhZGRpbmc6IDAgJGdyaWQteCA0cHggMDtcblx0XHRcdCYuZXh0cmEtZGV0YWlsc3tcblx0XHRcdFx0b3ZlcmZsb3c6aGlkZGVuO1xuXHRcdFx0XHRtYXJnaW4tdG9wOjEwcHg7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRjb2xvcjogbGlnaHRlbigkY29sb3ItdGV4dCwgMzUlKTtcblx0XHRcdFx0Zm9udC1zdHlsZTppdGFsaWM7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0XHRcdFx0Zm9udC1zaXplOjFlbTtcblx0XHRcdFx0ZmxvYXQ6bGVmdDtcblx0XHRcdFx0dGV4dC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdCYuZmlsbHtcblx0XHRcdFx0XHQmOmJlZm9yZXtcblx0XHRcdFx0XHRcdGNvbG9yOiNmZmY7XG5cdFx0XHRcdFx0XHRjb250ZW50OiAnPyc7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6MTJweDtcblx0XHRcdFx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6M3B4O1xuXHRcdFx0XHRcdFx0cGFkZGluZy1yaWdodDozcHg7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OmJsb2NrO1xuXHRcdFx0XHRcdFx0ZmxvYXQ6bGVmdDtcblx0XHRcdFx0XHRcdHRleHQtc2hhZG93OiBub25lO1xuXHRcdFx0XHRcdFx0Ym9yZGVyLXJhZGl1czogNTBweDtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6bGlnaHRlbigkY29sb3ItdGV4dCwgNDUlKTtcblx0XHRcdFx0XHRcdHdpZHRoOjIxcHg7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6MTVweDtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDo1cHg7XG5cdFx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOjVweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQubWlkZGxlQ29sdW1uIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHR9XG5cblx0XHRpbnB1dC50ZXh0LFxuXHRcdHNlbGVjdCxcblx0XHR0ZXh0YXJlYSB7XG5cdFx0XHRwYWRkaW5nOiA1cHg7XG5cdFx0XHRmb250LXNpemU6IDExcHg7XG5cdFx0fVxuXG5cdFx0Ji5jaGVja2JveCB7XG5cdFx0XHRwYWRkaW5nOiAwIDhweCAwO1xuXG5cdFx0XHRpbnB1dCB7XG5cdFx0XHRcdG1hcmdpbjogMnB4IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmZvcm1fX2ZpZWxkZ3JvdXAge1xuXHRcdC5mb3JtX19maWVsZGdyb3VwLWl0ZW0ge1xuXHRcdFx0cGFkZGluZzogMDtcblxuXHRcdFx0LmZpZWxkIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qIFJlc3R5bGUgZm9yIHNtYWxsZXIgYXJlYSovXG5cdC5jbXMtY29udGVudC1maWVsZHN7XG5cdFx0b3ZlcmZsb3c6dmlzaWJsZTtcblx0fVxuXHQuY2hvc2VuLWNvbnRhaW5lci1zaW5nbGV7XG5cdFx0d2lkdGg6MTAwJSAhaW1wb3J0YW50O1xuXHRcdC5jaG9zZW4tc2luZ2xle1xuXHRcdFx0cGFkZGluZzogMCAwIDAgNXB4O1xuXHRcdFx0ZmxvYXQ6bm9uZTtcblx0XHR9XG5cdH1cblx0LmNtcy1jb250ZW50LWFjdGlvbnMsIC5jbXMtcHJldmlldy1jb250cm9sc3tcblx0XHRwYWRkaW5nOjA7XG5cdFx0aGVpZ2h0OmF1dG87XG5cdFx0Ym9yZGVyOm5vbmU7XG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0fVxuXHQuY21zLWVkaXQtZm9ybXtcblx0XHR3aWR0aDoxMDAlO1xuXHR9XG5cdC5Db21wb3NpdGVGaWVsZHtcblx0XHRtYXJnaW46MDtcblx0XHRwYWRkaW5nOjA7XG5cdFx0ZmxvYXQ6bm9uZTtcblx0fVxuXHQucGFyZW50LW1vZGV7XG5cdFx0cGFkZGluZy10b3A6MDtcblx0fVxuXHQudHJlZWRyb3Bkb3duLCAuU2VsZWN0aW9uR3JvdXAgbGkuc2VsZWN0ZWQgZGl2LmZpZWxke1xuXHRcdG1hcmdpbjoxMHB4IDAgMCAwO1xuXHRcdC8vQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAwICNmZmYsIDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpO1xuXHRcdC50cmVlZHJvcGRvd25maWVsZC10aXRsZXtcblx0XHRcdHBvc2l0aW9uOmFic29sdXRlO1xuXHRcdFx0ei1pbmRleDoyO1xuXHRcdFx0cGFkZGluZzo1cHg7XG5cdFx0fVxuXHRcdC50cmVlZHJvcGRvd25maWVsZC1wYW5lbHtcblx0XHRcdG1hcmdpbi10b3A6MTFweDtcblx0XHR9XG5cdFx0LnRyZWVkcm9wZG93bmZpZWxkLXRvZ2dsZS1wYW5lbC1saW5re1xuXHRcdFx0YmFja2dyb3VuZDpub25lO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6bm9uZTtcblx0XHRcdHBhZGRpbmc6NXB4IDNweDtcblx0XHRcdC51aS1pY29ue1xuXHRcdFx0XHRmbG9hdDpyaWdodDtcblx0XHRcdFx0b3BhY2l0eTowLjc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC5jbXMtYWRkLWZvcm0gdWwuU2VsZWN0aW9uR3JvdXB7XG5cdFx0cGFkZGluZy1sZWZ0OjA7XG5cdFx0cGFkZGluZy1yaWdodDowO1xuXHRcdG92ZXJmbG93OnZpc2libGU7XG5cdFx0Ym9yZGVyLWJvdHRvbTpub25lO1xuXHR9XG59XG5cbi8vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gKiBDb21wYXNzIHJlcGxhY2VtZW50IG1peGlucy5cbi8vICpcbi8vICogTWl4aW5zIHRoYXQgd2VyZSBidWlsdC1pbiB3aXRoIGNvbXBhc3Ncbi8vICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuQG1peGluIGxlZ2FjeS1waWUtY2xlYXJmaXgge1xuXHQmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlxcMDAyMFwiO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogMDtcbiAgICBjbGVhcjogYm90aDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmF1bHQgdGhlbWUgZGVmaW5pdGlvbnMgZm9yIHRoZSBhZG1pbiBpbnRlcmZhY2UuXG4gKiBQbGVhc2UgcHV0IG1vc3RseSBTQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zIGluIGhlcmUsXG4gKiBhbmQgbGVhdmUgdGhlIGFjdHVhbCBzdHlsaW5nIHRvIF9zdHlsZS5zY3NzIGFuZCBhdXhpbGxpYXJ5IGZpbGVzLlxuICovXG5cbkBpbXBvcnQgXCIuLi8uLi92YXJpYWJsZXMuc2Nzc1wiO1xuXG4vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbG91cnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJGNvbG9yLWJhc2U6ICNiMGJlYzcgIWRlZmF1bHQ7XG4kY29sb3Itd2lkZ2V0LWJnOiBsaWdodGVuKCRjb2xvci1iYXNlLCAyMCUpICFkZWZhdWx0O1xuXG4vLyBNZW51IHRoZW1lIGNvbG91cnNcbiRjb2xvci10aGVtZS1iYXNlOiBcdCNkOGU0ZWIgIWRlZmF1bHQ7XG5cbiRjb2xvci10aGVtZS1iZzogXHRsaWdodGVuKCRjb2xvci10aGVtZS1iYXNlLCA1JSk7XG4kY29sb3ItdGhlbWUtaWNvbnM6IGRhcmtlbigkY29sb3ItdGhlbWUtYmFzZSwgMjYlKTtcbiRjb2xvci10aGVtZS1hY3RpdmU6ICRjb2xvci10aGVtZS1iYXNlO1xuXG4vLyBDTVMgNCBtZW51XG4kYmFzZS1tZW51OiAjZDhlNGViO1xuJGJhc2UtbWVudS1iZzogbGlnaHRlbigkYmFzZS1tZW51LDUlKTtcbiRiYXNlLW1lbnUtaWNvbjogZGFya2VuKCRiYXNlLW1lbnUsIDI2JSk7XG5cbi8vb2ZmaWNhbCBzaWx2ZXJzdHJpcGUgYnJhbmQgY29sb3JcbiRjb2xvci1icmFuZC1iZzogIzAwNWE5MyAhZGVmYXVsdDtcbiRjb2xvci1icmFuZDogIzQzYzdmNCAhZGVmYXVsdDtcblxuLyogS2VlcCBhcyBzb2xpZCBjb2xvdXJzIHRyYW5zcGFyZW50IGJvcmRlcnMgd29udCB3b3JrIGluIGllICovXG4kY29sb3ItZGFya2VyLWJnOiAjZjBmMmY0ICFkZWZhdWx0O1xuJGNvbG9yLWRhcmstYmc6ICMxNDIxMzYgIWRlZmF1bHQ7XG4kY29sb3ItZGFyay1zZXBhcmF0b3I6ICMxOTQzNWMgIWRlZmF1bHQ7XG4kY29sb3ItbWVkaXVtLXNlcGFyYXRvcjogIzgwODA4MCAhZGVmYXVsdDtcbiRjb2xvci1zZXBhcmF0b3I6ICNDMUM3Q0MgIWRlZmF1bHQ7IC8vIFZlcnRpY2FsIGRpdmlkZXJzXG4kY29sb3ItbGlnaHQtc2VwYXJhdG9yOiAjRDJENUQ4ICFkZWZhdWx0OyAvLyBIb3Jpb250YWwgZGl2aWRlcnNcblxuJGNvbG9yLXRhYjogI2Q5ZDlkOSAhZGVmYXVsdDtcbiRjb2xvci1kYXJrLWdyZXk6ICM3QjhDOTEgIWRlZmF1bHQ7XG5cbi8qIE9ubHkgZm9yIHVzZSBhcyBzaGFkb3dzIGFzIHRoZXkgd29udCB3b3JrIGluIG9sZGVyIGJyb3dzZXJzICovXG4kY29sb3Itc2hhZG93LWxpZ2h0OiByZ2JhKDIwMSwgMjA1LCAyMDYsIDAuOCkgIWRlZmF1bHQ7XG4kY29sb3Itc2hhZG93LWRhcms6IHJnYmEoMTA3LCAxMjAsIDEyMywgMC41KSAhZGVmYXVsdDtcbiRjb2xvci1zaGFkb3ctYmxhY2s6IHJnYmEoMCwgMCwgMCwgMC42KSAhZGVmYXVsdDtcbiRjb2xvci1zaGFkb3ctYmxhY2tlcjogcmdiYSgwLCAwLCAwLCAwLjkpICFkZWZhdWx0O1xuJGJveC1zaGFkb3ctc2hpbmU6IHJnYmEoMjQ4LCAyNDgsIDI0OCwgMC45KTtcbiRib3gtc2hhZG93LXNoaW5lLW1pbmltYWw6IHJnYmEoMjQ1LCAyNDUsIDI0NSwgMC44KTtcblxuJGNvbG9yLWhpZ2hsaWdodDogI0ZGRkY2NiAhZGVmYXVsdDtcbiRjb2xvci1oaWdobGlnaHQtb3BhY2l0eTogcmdiYSgyNTUsIDI1NSwgMTAyLCAwLjMpICFkZWZhdWx0O1xuXG4kY29sb3ItbWVudS1idXR0b246ICMzMzhEQzEgIWRlZmF1bHQ7XG4kY29sb3ItbWVudS1iYWNrZ3JvdW5kOiAjYzZkN2RmICFkZWZhdWx0O1xuJGNvbG9yLW1lbnUtYm9yZGVyOiAjOGM5OWExICFkZWZhdWx0O1xuJGNvbG9yLXBhbmVsLWJhY2tncm91bmQ6ICNjNmQ3ZGYgIWRlZmF1bHQ7XG5cbiRjb2xvci10ZXh0LWRlZmF1bHQ6ICM0ZjU4NjEgIWRlZmF1bHQ7IC8qIG5ldyBpbiBTaWx2ZXJTdHJpcGUgNCAqL1xuJGNvbG9yLXRleHQ6ICM2NjcyN2QgIWRlZmF1bHQ7XG4kY29sb3ItdGV4dC1saWdodDogd2hpdGUgIWRlZmF1bHQ7XG4kY29sb3ItdGV4dC1saWdodC1saW5rOiB3aGl0ZSAhZGVmYXVsdDtcbiRjb2xvci10ZXh0LWRpc2FibGVkOiAjYWFhICFkZWZhdWx0O1xuJGNvbG9yLXRleHQtZGFyazogIzFmMWYxZiAhZGVmYXVsdDtcbiRjb2xvci10ZXh0LWRhcmstbGluazogIzNFQkFFMCAhZGVmYXVsdDtcbiRjb2xvci10ZXh0LWJsdWUtbGluazogIzAwNzFjNCAhZGVmYXVsdDtcbiRjb2xvci10ZXh0LXNoYWRvdzogd2hpdGUgIWRlZmF1bHQ7XG5cblxuJGNvbG9yLWJ1dHRvbi1nZW5lcmljOiAjZTZlNmU2ICFkZWZhdWx0O1xuJGNvbG9yLWJ1dHRvbi1nZW5lcmljLWJvcmRlcjogI2QwZDNkNSAhZGVmYXVsdDtcblxuJGNvbG9yLWJ1dHRvbi1oaWdobGlnaHQ6ICNlNmU2ZTYgIWRlZmF1bHQ7XG4kY29sb3ItYnV0dG9uLWhpZ2hsaWdodC1ib3JkZXI6ICM3MDgyODQgIWRlZmF1bHQ7XG5cbiRjb2xvci1idXR0b24tY29uc3RydWN0aXZlOiAjMUY5NDMzICFkZWZhdWx0O1xuJGNvbG9yLWJ1dHRvbi1jb25zdHJ1Y3RpdmUtYm9yZGVyOiAjMUY5NDMzICFkZWZhdWx0O1xuXG4kY29sb3ItYnV0dG9uLWRlc3RydWN0aXZlOiAjZjAwICFkZWZhdWx0O1xuXG4kY29sb3ItYnV0dG9uLWRpc2FibGVkOiAjZWVlZGVkICFkZWZhdWx0O1xuXG4kY29sb3Itbm90aWNlOiAjOTNDREU4ICFkZWZhdWx0O1x0XHQvLyBibHVlXG4kY29sb3Itd2FybmluZzogI0U5RDEwNCAhZGVmYXVsdDtcdFx0Ly8geWVsbG93XG4kY29sb3ItZXJyb3I6ICNlNjgyODggIWRlZmF1bHQ7XHRcdFx0Ly8gcmVkXG4kY29sb3ItZ29vZDogIzcyYzM0YiAhZGVmYXVsdDtcdFx0XHQvLyBncmVlblxuLyokY29sb3Itb3B0aW9uYWw6ICNhMWQyZWIgIWRlZmF1bHQ7ICovXHQvLyBvcmFuZ2VcblxuJGNvbG9yLWNtcy1iYXRjaGFjdGlvbnMtbWVudS1iYWNrZ3JvdW5kOiAjZjVmNWY1ICFkZWZhdWx0O1xuJGNvbG9yLWNtcy1iYXRjaGFjdGlvbnMtbWVudS1zZWxlY3RlZC1iYWNrZ3JvdW5kOiAjZmZmY2RjICFkZWZhdWx0O1xuXG4vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFRleHR1cmVzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJHRhYi1wYW5lbC10ZXh0dXJlLWNvbG9yOiAjZjZmN2Y4ICFkZWZhdWx0O1xuJHRhYi1wYW5lbC10ZXh0dXJlLWJhY2tncm91bmQ6ICR0YWItcGFuZWwtdGV4dHVyZS1jb2xvciB1cmwoLi4vaW1hZ2VzL3RleHR1cmVzL2JnX2Ntc19tYWluX2NvbnRlbnQucG5nKSByZXBlYXQgdG9wIGxlZnQgIWRlZmF1bHQ7XG5cblxuLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBHcmlkIFVuaXRzIChweClcbiAqXG4gKiBXZSBoYXZlIGEgdmVydGljYWwgcmh5dGhtIHRoYXQgdGhlIGdyaWQgaXMgYmFzZWQgb2ZmXG4gKiBib3RoIHggKD1ob3Jpem9udGFsKSBhbmQgeSAoPXZlcnRpY2FsKS4gQWxsIGludGVybmFsIHBhZGRpbmcgYW5kXG4gKiBtYXJnaW5zIGFyZSBzY2FsZWQgdG8gdGhpcyBhbmQgYWNjb3VudGluZyBmb3IgcGFyYWdyYXBoc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4kZ3JpZC15OiA4cHggIWRlZmF1bHQ7XG4kZ3JpZC14OiA4cHggIWRlZmF1bHQ7XG5cbi8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQXBwbGljYXRpb24gTG9nbyAoQ01TIExvZ28pIE11c3QgYmUgMjRweCB4IDI0cHhcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJGFwcGxpY2F0aW9uLWxvZ28tc21hbGw6IHVybChcIi4uL2ltYWdlcy9sb2dvX3NtYWxsLnBuZ1wiKSAhZGVmYXVsdDtcbiRhcHBsaWNhdGlvbi1sb2dvLXNtYWxsLTJ4OiB1cmwoXCIuLi9pbWFnZXMvbG9nb19zbWFsbEAyeC5wbmdcIikgIWRlZmF1bHQ7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
|
1
client/dist/styles/debug.css
vendored
@ -1 +0,0 @@
|
||||
body{background:#eee!important;margin:0;overflow-x:hidden;padding:0;font-family:Helvetica,Arial,sans-serif}.info{padding:18px;background-color:#003050;position:relative;line-height:24px;background-image:-webkit-gradient(linear,left top,left bottom,from(#002137),color-stop(10%,#003050),color-stop(90%,#003050),color-stop(90%,#002137));background-image:-webkit-linear-gradient(#002137,#003050 10%,#003050 90%,#002137);background-image:linear-gradient(#002137,#003050 10%,#003050 90%,#002137);z-index:9999}.info,.info h1{margin:0 0 6px;color:#fff}.info h1{padding:0 32px 0 0;font-size:24px;text-shadow:0 1px #002137;line-height:30px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmdJREFUeNpiYCASxJ17p8BAAmAh0sD5QAyiFYk1mJGAoQFQQwWgQoKLjIQ+kG0w0EABqIEByOKLjYWZ/////48Yg5lwuPI+uqF/f/88TqyhKGEMdWU/ECegK/r358/Va8tnx5AceVBD9wOxAbqCX18+zbm+am7HpaktD9AcEQCNUBDYAAz7CxhhDFTYAKTqkSX+//37+N3tq4Xboh33ALmfYcEAVJsA9ZkAmhtABifCLIAZ/B5Z4Z9vX1ddXjK15srMzkdAA38iudQB6jNcAJRiFEEpBxbGAsiRtNxWLh3I/ITkSpC3QUGRTyBoYfGUiJFBmJiY/wIN/IAl2S1AdgAoQr88fdjHysMjwyks3ohkBCioEsFBEXv2zUdGRiY+JEmQIQ+hLoQZdgBo2BMmFpaYnx/e9a1yVu0AhT0QM0cefjSPhYs7DEm/IAs0TFewcvOmodmKnuSevLp0uouVi3sDMEJ3AX31GZ60uLjV0DLSJ7DB9/dsalHxDrcGukYbV+B9enJ/xu5Un2tA5i1YhCKVIwbIqQkUN+Ccd7Ip7+nlRZP9QakB3UCQwrc3LoVsDrY4BdTwF8nQAiB1HogdkNX//v5tOUpZwQgMZCDFZ906S51fQVUGmjk+7Un3vwRKRkgGYi1HYMkUmKJSQMGEUQgBLWBGyur/gIp+I6VjA2g6Rs8cDNAIbYalKIzkBvIuKDnjCGqMHAdKdi8vnCgE+uwESoQykAYc0MuRlfaKVdCg+o232MRT6AugRyjQ0BKgga/RDSUJgCI39vTrRxGHHszWzahQBfLZGagFgIaJAzE/NAXhBQABBgBJL0aZBy/F5wAAAABJRU5ErkJggg==) no-repeat right 3px}.info h3{color:#7da4be;font-size:16px;line-height:18px;font-weight:400}.info p{margin:0;font-size:14px;color:#fff}.info a{color:#fff;font-weight:700;text-decoration:none}.info a:active,.info a:hover{color:#fff;text-decoration:underline}.header{margin:0;border-bottom:6px solid #ccdef3;height:23px;background-color:#666673;padding:4px 0 2px 6px}.build,.options,.trace{padding:6px 12px;background:#eee!important;position:relative;z-index:9999}.build li,.options li,.trace li{font-size:14px;margin:6px 0}a{color:#666}a:hover{color:#222}a:active{color:#111}p{margin-bottom:6px}pre{margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0,0,0,.08);color:#333;padding:11px;overflow:auto;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}pre span{color:#999}pre .error{color:red}h2{margin:0 0 12px}h3{margin:0 0 6px;color:#333;font-size:18px;line-height:24px}ul{margin:0 0 18px;padding:0 0 0 18px}fieldset{border:1px solid #b2b2b2;margin-bottom:18px;padding:17px}.pass{color:#060;background:#e2f9e3;border:1px solid #8dd38d;border-radius:4px}.fail,.pass{margin-top:18px;padding:2px 20px 2px 40px}.fail{color:#c80700;background:#ffe9e9;border:1px solid #c80700;border-radius:4px}
|
BIN
client/dist/styles/images/progressbar_blue.gif
vendored
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 6.8 KiB |
@ -121,11 +121,11 @@ or via SilverStripe templates (`<img>` tags).
|
||||
failing silently, so check your `Requirements` are pointing to files that exist.
|
||||
|
||||
```
|
||||
framework/javascript => framework/client/dist/
|
||||
framework/javascript/lang => framework/client/lang/
|
||||
framework/images => framework/client/dist/images/
|
||||
framework/css => framework/client/dist/css/
|
||||
framework/scss => framework/client/src/styles/
|
||||
framework/javascript => admin/client/dist/
|
||||
framework/javascript/lang => admin/client/lang/
|
||||
framework/images => admin/client/dist/images/
|
||||
framework/css => admin/client/dist/css/
|
||||
framework/scss => admin/client/src/styles/
|
||||
admin/javascript/ => admin/client/src/
|
||||
admin/javascript/src/ => admin/client/src/legacy/ (mostly)
|
||||
admin/javascript/lang/ => admin/client/lang/
|
||||
|
@ -15,13 +15,9 @@ const PATHS = {
|
||||
ADMIN_SPRITES_SRC: './admin/client/src/sprites',
|
||||
ADMIN_SPRITES_DIST: './admin/client/dist/images/sprites',
|
||||
FRAMEWORK: '.',
|
||||
FRAMEWORK_CSS_SRC: './client/src/styles',
|
||||
FRAMEWORK_CSS_DIST: './client/dist/styles',
|
||||
FRAMEWORK_THIRDPARTY: './thirdparty',
|
||||
INSTALL_CSS_SRC: './dev/install/client/src/styles',
|
||||
INSTALL_CSS_DIST: './dev/install/client/dist/styles',
|
||||
FRAMEWORK_JS_SRC: './client/src',
|
||||
FRAMEWORK_JS_DIST: './client/dist/js',
|
||||
};
|
||||
|
||||
// Used for autoprefixing css properties (same as Bootstrap Aplha.2 defaults)
|
||||
@ -48,10 +44,11 @@ const config = [
|
||||
leaktools: `${PATHS.ADMIN_JS_SRC}/legacy/leaktools.js`,
|
||||
MemberImportForm: `${PATHS.ADMIN_JS_SRC}/legacy/MemberImportForm.js`,
|
||||
CMSSecurity: `${PATHS.ADMIN_JS_SRC}/legacy/CMSSecurity.js`,
|
||||
UploadField_select: `${PATHS.FRAMEWORK_JS_SRC}/legacy/UploadField_select.js`,
|
||||
UploadField_select: `${PATHS.ADMIN_JS_SRC}/legacy/UploadField_select.js`,
|
||||
TinyMCE_SSPlugin: `${PATHS.ADMIN_JS_SRC}/legacy/TinyMCE_SSPlugin.js`,
|
||||
},
|
||||
resolve: {
|
||||
modulesDirectories: [PATHS.ADMIN_JS_SRC, PATHS.FRAMEWORK_JS_SRC, PATHS.MODULES],
|
||||
modulesDirectories: [PATHS.ADMIN_JS_SRC, PATHS.MODULES],
|
||||
},
|
||||
output: {
|
||||
path: 'admin/client/dist',
|
||||
@ -168,16 +165,16 @@ const config = [
|
||||
{
|
||||
name: 'css',
|
||||
entry: {
|
||||
'admin/client/dist/styles/editor':
|
||||
[`${PATHS.ADMIN_CSS_DIST}/editor`]:
|
||||
`${PATHS.ADMIN_CSS_SRC}/editor.scss`,
|
||||
'client/dist/styles/GridField_print':
|
||||
`${PATHS.FRAMEWORK_CSS_SRC}/legacy/GridField_print.scss`,
|
||||
'client/dist/styles/debug':
|
||||
`${PATHS.FRAMEWORK_CSS_SRC}/legacy/debug.scss`,
|
||||
'client/dist/styles/AssetUploadField':
|
||||
`${PATHS.FRAMEWORK_CSS_SRC}/legacy/AssetUploadField.scss`,
|
||||
'client/dist/styles/UploadField':
|
||||
`${PATHS.FRAMEWORK_CSS_SRC}/legacy/UploadField.scss`,
|
||||
[`${PATHS.ADMIN_CSS_DIST}/GridField_print`]:
|
||||
`${PATHS.ADMIN_CSS_SRC}/legacy/GridField_print.scss`,
|
||||
[`${PATHS.ADMIN_CSS_DIST}/debug`]:
|
||||
`${PATHS.ADMIN_CSS_SRC}/legacy/debug.scss`,
|
||||
[`${PATHS.ADMIN_CSS_DIST}/AssetUploadField`]:
|
||||
`${PATHS.ADMIN_CSS_SRC}/legacy/AssetUploadField.scss`,
|
||||
[`${PATHS.ADMIN_CSS_DIST}/UploadField`]:
|
||||
`${PATHS.ADMIN_CSS_SRC}/legacy/UploadField.scss`,
|
||||
[`${PATHS.INSTALL_CSS_DIST}/install`]:
|
||||
`${PATHS.INSTALL_CSS_SRC}/install.scss`,
|
||||
},
|
||||
@ -198,7 +195,7 @@ const config = [
|
||||
},
|
||||
{
|
||||
test: /\.(png|gif|jpg|svg)$/,
|
||||
loader: 'url?limit=10000&name=client/dist/styles/images/[name].[ext]',
|
||||
loader: `url?limit=10000&name=${PATHS.ADMIN_CSS_DIST}/images/[name].[ext]`,
|
||||
},
|
||||
{
|
||||
test: /\.(woff|eot|ttf)$/,
|
||||
|