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.
This commit is contained in:
Ingo Schommer 2016-09-13 21:28:47 +12:00
parent e5df794a04
commit ee10dbb680
75 changed files with 96 additions and 1836 deletions

View File

@ -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

View File

@ -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()

View File

@ -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');
}

View File

@ -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');

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View 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

View File

@ -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');

View File

@ -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');

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@ -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) {

View File

@ -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');

View File

@ -3,7 +3,7 @@
*/
import $ from 'jQuery';
require('../../../../admin/client/src/legacy/ssui.core.js');
require('../legacy/ssui.core.js');
var windowWidth, windowHeight;

View File

@ -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.

View File

@ -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($){
/**

View File

@ -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({

View File

@ -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($){

View File

@ -2,7 +2,7 @@
@import "variables";
// Compatibilty with compass
@import "../../../../client/src/styles/_compasscompat";
@import "legacy/_compasscompat";
// Thirdparty
@import "chosen";

View File

@ -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;
}
}

View File

@ -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;
}
}
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 688 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 B

View File

@ -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();
});
}
});
});
});

View File

@ -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
View File

@ -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;
});

View File

@ -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;
});

View File

@ -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;
});

File diff suppressed because one or more lines are too long

View File

@ -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 */

View File

@ -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== */

View File

@ -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 */

View File

@ -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= */

View File

@ -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}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -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/

View File

@ -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)$/,