v8: Macro partial view picker (#4412)

This commit is contained in:
Bjarne Fyrstenborg
2019-02-14 16:15:01 +01:00
committed by Sebastiaan Janssen
parent 280a6d79b4
commit 0d36151e53
10 changed files with 197 additions and 85 deletions

View File

@@ -1,19 +1,30 @@
<div ng-controller="Umbraco.Editors.Macros.CreateController as vm">
<div class="umbracoDialog umb-dialog-body with-footer" ng-cloak>
<div class="umb-pane">
<h5><localize key="create_createUnder">Create an item under</localize> {{currentNode.name}}</h5>
</div>
<div class="umb-pane">
<h5><localize key="create_createUnder">Create an item under</localize> {{currentNode.name}}</h5>
<div class="umb-pane">
<form novalidate name="createMacroForm"
ng-submit="vm.createItem()"
val-form-manager>
<div ng-show="error">
<div class="alert alert-error">
<div><strong>{{error.errorMsg}}</strong></div>
<div>{{error.data.message}}</div>
</div>
</div>
<umb-control-group label="@macro_enterMacroName" hide-label="false">
<input type="text" name="itemKey" ng-model="vm.itemKey" class="umb-textstring textstring input-block-level" umb-auto-focus required />
</umb-control-group>
<button type="submit" class="btn btn-primary"><localize key="general_create">Create</localize></button>
</form>
</div>
</div>
<div class="umb-pane">
<form name="createDictionaryForm"
ng-submit="vm.createItem()"
val-form-manager>
<umb-control-group label="Enter a item-name" hide-label="true">
<input type="text" name="itemKey" ng-model="vm.itemKey" class="umb-textstring textstring input-block-level" required />
</umb-control-group>
<button type="submit" class="btn btn-primary"><localize key="general_create">Create</localize></button>
</form>
</div>
</div>

View File

@@ -13,29 +13,32 @@ function MacrosCreateController($scope, $location, macroResource, navigationServ
function createItem() {
var node = $scope.currentNode;
if (formHelper.submitForm({ scope: $scope, formCtrl: this.createMacroForm })) {
macroResource.createMacro(vm.itemKey).then(function (data) {
navigationService.hideMenu();
var node = $scope.currentNode;
// set new item as active in tree
var currPath = node.path ? node.path : "-1";
navigationService.syncTree({ tree: "macros", path: currPath + "," + data, forceReload: true, activate: true });
// reset form state
formHelper.resetForm({ scope: $scope });
// navigate to edit view
var currentSection = appState.getSectionState("currentSection");
$location.path("/" + currentSection + "/macros/edit/" + data);
}, function (err) {
if (err.data && err.data.message) {
notificationsService.error(err.data.message);
macroResource.createMacro(vm.itemKey).then(function (data) {
navigationService.hideMenu();
}
});
// set new item as active in tree
var currPath = node.path ? node.path : "-1";
navigationService.syncTree({ tree: "macros", path: currPath + "," + data, forceReload: true, activate: true });
// reset form state
formHelper.resetForm({ scope: $scope });
// navigate to edit view
var currentSection = appState.getSectionState("currentSection");
$location.path("/" + currentSection + "/macros/edit/" + data);
}, function (err) {
if (err.data && err.data.message) {
notificationsService.error(err.data.message);
navigationService.hideMenu();
}
});
}
}
vm.createItem = createItem;

View File

@@ -95,6 +95,11 @@ function MacrosEditController($scope, $q, $routeParams, macroResource, editorSta
function bindMacro(data) {
vm.macro = data;
if (vm.macro && vm.macro.view) {
vm.macro.node = { icon: 'icon-article', name: vm.macro.view };
}
editorState.set(vm.macro);
navigationService.syncTree({ tree: "macros", path: vm.macro.path, forceReload: true }).then(function (syncArgs) {
@@ -109,21 +114,24 @@ function MacrosEditController($scope, $q, $routeParams, macroResource, editorSta
vm.promises['parameterEditors'] = getParameterEditors();
vm.promises['macro'] = getMacro();
vm.views = [];
vm.node = null;
$q.all(vm.promises).then(function (values) {
var keys = Object.keys(values);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (keys[i] === 'partialViews') {
if (key === 'partialViews') {
vm.views = values[key];
}
if (keys[i] === 'parameterEditors') {
if (key === 'parameterEditors') {
vm.parameterEditors = values[key];
}
if (keys[i] === 'macro') {
if (key === 'macro') {
bindMacro(values[key]);
}
}

View File

@@ -0,0 +1,66 @@
/**
* @ngdoc controller
* @name Umbraco.Editors.Macros.SettingsController
* @function
*
* @description
* The controller for editing macros settings
*/
function MacrosSettingsController($scope, editorService, localizationService) {
const vm = this;
//vm.openViewPicker = openViewPicker;
//vm.removeMacroView = removeMacroView;
$scope.model.openViewPicker = openViewPicker;
$scope.model.removeMacroView = removeMacroView;
function openViewPicker() {
const controlPicker = {
title: "Select view",
section: "settings",
treeAlias: "partialViewMacros",
entityType: "partialView",
onlyInitialized: false,
filter: function (i) {
if (i.name.indexOf(".cshtml") === -1 && i.name.indexOf(".vbhtml") === -1) {
return true;
}
},
filterCssClass: "not-allowed",
select: function (node) {
const id = unescape(node.id);
//vm.macro.view = id;
$scope.model.macro.view = "~/Views/MacroPartials/" + id;
$scope.model.macro.node = {
icon: node.icon,
name: $scope.model.macro.view
};
//$scope.model.submit($scope.model);
editorService.close();
},
close: function () {
editorService.close();
}
};
editorService.treePicker(controlPicker);
}
function removeMacroView() {
//vm.macro.view = null;
$scope.model.macro.node = null;
$scope.model.macro.view = null;
}
function init() {
}
init();
}
angular.module("umbraco").controller("Umbraco.Editors.Macros.SettingsController", MacrosSettingsController);

View File

@@ -1,43 +1,61 @@
<umb-box>
<umb-box-header title="Info"></umb-box-header>
<umb-box-content>
<umb-control-group label="Id">
{{model.macro.id}}<br/>
{{model.macro.key}}
</umb-control-group>
</umb-box-content>
</umb-box>
<umb-box>
<umb-box-header title="Macro partial view"></umb-box-header>
<umb-box-content>
<umb-control-group label="Macro partial view">
<select class="input-block-level" ng-model="model.macro.view" ng-options="i as i for i in model.views" required>
</select>
</umb-control-group>
</umb-box-content>
</umb-box>
<umb-box>
<umb-box-header title="Editor settings"></umb-box-header>
<umb-box-content>
<umb-control-group label="Use in rich text editor and the grid">
<umb-toggle checked="model.macro.useInEditor" on-click="model.toggle('useInEditor')" ></umb-toggle>
</umb-control-group>
<umb-control-group label="Render in rich text editor and the grid" ng-if="model.macro.useInEditor">
<umb-toggle checked="model.macro.renderInEditor && model.macro.useInEditor" on-click="model.toggle('renderInEditor')" ></umb-toggle>
</umb-control-group>
</umb-box-content>
</umb-box>
<umb-box>
<umb-box-header title="Cache settings"></umb-box-header>
<umb-box-content>
<umb-control-group label="Cache period">
<input type="number" min="0" ng-model="model.macro.cachePeriod"/>
</umb-control-group>
<umb-control-group label="Cache by page">
<umb-toggle checked="model.macro.cacheByPage" on-click="model.toggle('cacheByPage')"></umb-toggle>
</umb-control-group>
<umb-control-group label="Cache personalized">
<umb-toggle checked="model.macro.cacheByUser" on-click="model.toggle('cacheByUser')"></umb-toggle>
</umb-control-group>
</umb-box-content>
</umb-box>
<div ng-controller="Umbraco.Editors.Macros.SettingsController">
<umb-box>
<umb-box-header title="Info"></umb-box-header>
<umb-box-content>
<umb-control-group label="Id">
{{model.macro.id}}<br/>
{{model.macro.key}}
</umb-control-group>
</umb-box-content>
</umb-box>
<umb-box>
<umb-box-header title="Macro partial view"></umb-box-header>
<umb-box-content>
<umb-control-group label="Macro partial view">
<umb-node-preview ng-if="model.macro.node"
icon="model.macro.node.icon"
name="model.macro.node.name"
allow-edit="true"
allow-remove="true"
on-edit="model.openViewPicker()"
on-remove="model.removeMacroView()">
</umb-node-preview>
<a href=""
ng-show="!model.macro.node"
class="umb-node-preview-add"
ng-click="model.openViewPicker()"
prevent-default>
<localize key="general_add">Add</localize>
</a>
</umb-control-group>
</umb-box-content>
</umb-box>
<umb-box>
<umb-box-header title="Editor settings"></umb-box-header>
<umb-box-content>
<umb-control-group label="Use in rich text editor and the grid">
<umb-toggle checked="model.macro.useInEditor" on-click="model.toggle('useInEditor')" ></umb-toggle>
</umb-control-group>
<umb-control-group label="Render in rich text editor and the grid" ng-if="model.macro.useInEditor">
<umb-toggle checked="model.macro.renderInEditor && model.macro.useInEditor" on-click="model.toggle('renderInEditor')" ></umb-toggle>
</umb-control-group>
</umb-box-content>
</umb-box>
<umb-box>
<umb-box-header title="Cache settings"></umb-box-header>
<umb-box-content>
<umb-control-group label="Cache period">
<input type="number" min="0" ng-model="model.macro.cachePeriod"/>
</umb-control-group>
<umb-control-group label="Cache by page">
<umb-toggle checked="model.macro.cacheByPage" on-click="model.toggle('cacheByPage')"></umb-toggle>
</umb-control-group>
<umb-control-group label="Cache personalized">
<umb-toggle checked="model.macro.cacheByUser" on-click="model.toggle('cacheByUser')"></umb-toggle>
</umb-control-group>
</umb-box-content>
</umb-box>
</div>

View File

@@ -37,7 +37,7 @@
</div>
<umb-control-group label="Enter a folder name" hide-label="false">
<input type="text" name="folderName" ng-model="model.folderName" class="umb-textstring textstring input-block-level" required />
<input type="text" name="folderName" ng-model="model.folderName" class="umb-textstring textstring input-block-level" umb-auto-focus required />
</umb-control-group>
<button type="submit" class="btn btn-primary"><localize key="general_create">Create</localize></button>

View File

@@ -1,6 +1,9 @@
<div class="umbracoDialog umb-dialog-body with-footer" ng-controller="Umbraco.Editors.RelationTypes.CreateController as vm" ng-cloak>
<div class="umb-pane">
<form name="createRelationTypeForm" val-form-manager ng-submit="vm.createRelationType()">
<form novalidate name="createRelationTypeForm"
val-form-manager
ng-submit="vm.createRelationType()">
<!-- Name -->
<umb-control-group label="@relationType_name">
<input type="text" name="relationTypeName" ng-model="vm.relationType.name" class="umb-textstring textstring input-block-level" umb-auto-focus required />

View File

@@ -1300,6 +1300,7 @@ Mange hilsner fra Umbraco robotten
<area alias="macro">
<key alias="addParameter">Tilføj parameter</key>
<key alias="editParameter">Rediger parameter</key>
<key alias="enterMacroName">Indtast makronavn</key>
<key alias="parameters">Parametre</key>
<key alias="parametersDescription">Definer de parametre, der skal være tilgængelige, når du bruger denne makro.</key>
</area>

View File

@@ -1579,6 +1579,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<area alias="macro">
<key alias="addParameter">Add parameter</key>
<key alias="editParameter">Edit parameter</key>
<key alias="enterMacroName">Enter macro name</key>
<key alias="parameters">Parameters</key>
<key alias="parametersDescription">Define the parameters that should be available when using this macro.</key>
</area>

View File

@@ -492,8 +492,8 @@
<key alias="enterMessage">Enter a message...</key>
<key alias="usernameHint">Your username is usually your email</key>
<key alias="anchor">#value or ?key=value</key>
<key alias="enterAlias">Enter alias...</key>
<key alias="generatingAlias">Generating alias...</key>
<key alias="enterAlias">Enter alias...</key>
<key alias="generatingAlias">Generating alias...</key>
</area>
<area alias="editcontenttype">
<key alias="allowedchildnodetypes">Allowed child node types</key>
@@ -1589,6 +1589,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<area alias="macro">
<key alias="addParameter">Add parameter</key>
<key alias="editParameter">Edit parameter</key>
<key alias="enterMacroName">Enter macro name</key>
<key alias="parameters">Parameters</key>
<key alias="parametersDescription">Define the parameters that should be available when using this macro.</key>
</area>