move design view logic from edit.controller to design.controller

This commit is contained in:
Mads Rasmussen
2015-06-23 13:58:43 +02:00
parent 7b547a3ad1
commit da18a89540
5 changed files with 401 additions and 379 deletions

View File

@@ -349,7 +349,7 @@
/* ---------- SORTING ---------- */
// sorting tabs
.editors-document-type-canvas.is-in-sorting-mode {
.is-in-sorting-mode {
.edt-tab {
min-height: 0;
cursor: move;
@@ -367,7 +367,7 @@
// sorting properties
.editors-document-type-canvas.is-in-sorting-mode {
.is-in-sorting-mode {
.edt-property {
height: 40px;

View File

@@ -9,7 +9,6 @@
function DocumentTypeEditController($scope, $rootScope, $routeParams, $log, contentTypeResource, entityResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, dataTypeHelper) {
$scope.page = {actions: [], menu: [], subViews: [] };
$scope.sortingMode = false;
$scope.currentNode = null; //the editors affiliated node
$scope.page.navigation = [
@@ -23,14 +22,14 @@ function DocumentTypeEditController($scope, $rootScope, $routeParams, $log, cont
"name": "Compositions",
"icon": "merge",
"action": function() {
$scope.openCompositionsDialog();
$scope.page.openCompositionsDialog();
}
},
{
"name": "Reorder",
"icon": "navigation",
"action": function() {
$scope.toggleSortingMode();
$scope.page.toggleSortingMode();
}
}
]
@@ -92,77 +91,6 @@ function DocumentTypeEditController($scope, $rootScope, $routeParams, $log, cont
});
};
/* ---------- TOOLBAR ---------- */
$scope.toggleSortingMode = function() {
$scope.sortingMode = !$scope.sortingMode;
};
$scope.openCompositionsDialog = function() {
$scope.dialogModel = {};
$scope.dialogModel.title = "Compositions";
$scope.dialogModel.availableCompositeContentTypes = $scope.contentType.availableCompositeContentTypes;
$scope.dialogModel.compositeContentTypes = $scope.contentType.compositeContentTypes;
$scope.dialogModel.view = "views/documentType/dialogs/compositions/compositions.html";
$scope.showDialog = true;
$scope.dialogModel.close = function(){
$scope.showDialog = false;
$scope.dialogModel = null;
};
$scope.dialogModel.selectCompositeContentType = function(compositeContentType) {
if( $scope.contentType.compositeContentTypes.indexOf(compositeContentType.alias) === -1 ) {
//merge composition with content type
contentTypeHelper.mergeCompositeContentType($scope.contentType, compositeContentType);
} else {
// split composition from content type
contentTypeHelper.splitCompositeContentType($scope.contentType, compositeContentType);
}
}
};
/* ---------- TABS ---------- */
$scope.addTab = function(tab){
$scope.activateTab(tab);
// push new init tab to the scope
contentTypeHelper.addInitTab($scope.contentType);
};
$scope.removeTab = function(tabIndex) {
$scope.contentType.groups.splice(tabIndex, 1);
};
$scope.activateTab = function(tab) {
// set all other tabs that are inactive to active
angular.forEach($scope.contentType.groups, function(group){
// skip init tab
if(group.tabState !== "init") {
group.tabState = "inActive";
}
});
tab.tabState = "active";
};
$scope.updateTabTitle = function(tab) {
if(tab.properties.length === 0) {
contentTypeHelper.addInitProperty(tab);
}
};
function init(contentType){
@@ -230,155 +158,7 @@ function DocumentTypeEditController($scope, $rootScope, $routeParams, $log, cont
}
}
/* ---------- PROPERTIES ---------- */
$scope.toggleGroupSize = function(group){
if(group.columns !== 12){
group.columns = 12;
}else{
group.columns = 6;
}
};
$scope.editPropertyTypeSettings = function(property) {
if(!property.inherited) {
$scope.dialogModel = {};
$scope.dialogModel.title = "Edit property type settings";
$scope.dialogModel.property = property;
$scope.dialogModel.view = "views/documentType/dialogs/editPropertySettings/editPropertySettings.html";
$scope.showDialog = true;
// set indicator on property to tell the dialog is open - is used to set focus on the element
property.dialogIsOpen = true;
// set property to active
property.propertyState = "active";
$scope.dialogModel.changePropertyEditor = function(property) {
$scope.choosePropertyType(property);
};
$scope.dialogModel.editDataType = function(property) {
$scope.configDataType(property);
};
$scope.dialogModel.submit = function(model){
property.dialogIsOpen = false;
$scope.showDialog = false;
$scope.dialogModel = null;
// push new init property to scope
contentTypeHelper.addInitPropertyOnActiveTab($scope.contentType);
};
$scope.dialogModel.close = function(model){
$scope.showDialog = false;
$scope.dialogModel = null;
// push new init property to scope
contentTypeHelper.addInitPropertyOnActiveTab($scope.contentType);
};
}
};
$scope.choosePropertyType = function(property) {
$scope.dialogModel = {};
$scope.dialogModel.title = "Choose property type";
$scope.dialogModel.view = "views/documentType/dialogs/property.html";
$scope.showDialog = true;
property.dialogIsOpen = true;
$scope.dialogModel.selectDataType = function(selectedDataType) {
contentTypeResource.getPropertyTypeScaffold(selectedDataType.id).then(function(propertyType){
property.config = propertyType.config;
property.editor = propertyType.editor;
property.view = propertyType.view;
property.dataTypeId = selectedDataType.id;
property.dataTypeIcon = selectedDataType.icon;
property.dataTypeName = selectedDataType.name;
property.propertyState = "active";
console.log(property);
// open data type configuration
$scope.editPropertyTypeSettings(property);
// push new init tab to scope
contentTypeHelper.addInitTab($scope.contentType);
});
};
$scope.dialogModel.close = function(model){
$scope.editPropertyTypeSettings(property);
};
};
$scope.configDataType = function(property) {
$scope.dialogModel = {};
$scope.dialogModel.title = "Edit data type";
$scope.dialogModel.dataType = {};
$scope.dialogModel.property = property;
$scope.dialogModel.view = "views/documentType/dialogs/editDataType/editDataType.html";
$scope.dialogModel.multiActions = [
{
label: "Save",
action: function(dataType) {
saveDataType(dataType, false);
}
},
{
label: "Save as new",
action: function(dataType) {
saveDataType(dataType, true);
}
}
];
$scope.showDialog = true;
function saveDataType(dataType, isNew) {
var preValues = dataTypeHelper.createPreValueProps(dataType.preValues);
dataTypeResource.save(dataType, preValues, isNew).then(function(dataType) {
contentTypeResource.getPropertyTypeScaffold(dataType.id).then(function(propertyType){
property.config = propertyType.config;
property.editor = propertyType.editor;
property.view = propertyType.view;
property.dataTypeId = dataType.id;
property.dataTypeIcon = dataType.icon;
property.dataTypeName = dataType.name;
// open settings dialog
$scope.editPropertyTypeSettings(property);
});
});
}
$scope.dialogModel.close = function(model){
$scope.editPropertyTypeSettings(property);
};
};
/** Syncs the content type to it's tree node - this occurs on first load and after saving */
function syncTreeNode(dt, path, initialLoad) {
@@ -389,49 +169,6 @@ function DocumentTypeEditController($scope, $rootScope, $routeParams, $log, cont
}
$scope.deleteProperty = function(tab, propertyIndex) {
tab.properties.splice(propertyIndex, 1);
};
/* ---------- SORTING OPTIONS ---------- */
$scope.sortableOptionsTab = {
distance: 10,
tolerance: "pointer",
opacity: 0.7,
scroll: true,
cursor: "move",
placeholder: "ui-sortable-tabs-placeholder",
zIndex: 6000,
handle: ".edt-tab-handle",
items: ".edt-tab-sortable",
start: function (e, ui) {
ui.placeholder.height(ui.item.height());
},
stop: function(e, ui){
}
};
$scope.sortableOptionsEditor = {
distance: 10,
tolerance: "pointer",
connectWith: ".edt-property-list",
opacity: 0.7,
scroll: true,
cursor: "move",
placeholder: "ui-sortable-properties-placeholder",
zIndex: 6000,
handle: ".edt-property-handle",
items: ".edt-property-sortable",
start: function (e, ui) {
ui.placeholder.height(ui.item.height());
},
stop: function(e, ui){
}
};
}
angular.module("umbraco").controller("Umbraco.Editors.DocumentType.EditController", DocumentTypeEditController);

View File

@@ -15,7 +15,7 @@
<umb-editor-container class="editors-document-type-container">
<div class="editors-document-type-canvas" ng-class="{'is-in-sorting-mode': sortingMode}">
<div class="editors-document-type-canvas">
<umb-editor-sub-views></umb-editor-sub-views>
@@ -36,13 +36,4 @@
</form>
<!-- overlay for change property editor -->
<umb-overlay
ng-style="{'width': '500px'}"
ng-if="showDialog"
model="dialogModel"
animation="slide-in-right"
position="right"
view="dialogModel.view">
</umb-overlay>
</div>

View File

@@ -0,0 +1,282 @@
/**
* @ngdoc controller
* @name Umbraco.Editors.DocumentType.ListViewController
* @function
*
* @description
* The controller for the content type editor list view section
*/
function DesignController($scope, contentTypeResource, dataTypeResource, contentTypeHelper, dataTypeHelper) {
$scope.sortingMode = false;
/* ---------- TOOLBAR ---------- */
$scope.page.toggleSortingMode = function() {
$scope.sortingMode = !$scope.sortingMode;
};
$scope.page.openCompositionsDialog = function() {
$scope.dialogModel = {};
$scope.dialogModel.title = "Compositions";
$scope.dialogModel.availableCompositeContentTypes = $scope.contentType.availableCompositeContentTypes;
$scope.dialogModel.compositeContentTypes = $scope.contentType.compositeContentTypes;
$scope.dialogModel.view = "views/documentType/dialogs/compositions/compositions.html";
$scope.showDialog = true;
$scope.dialogModel.close = function(){
$scope.showDialog = false;
$scope.dialogModel = null;
};
$scope.dialogModel.selectCompositeContentType = function(compositeContentType) {
if( $scope.contentType.compositeContentTypes.indexOf(compositeContentType.alias) === -1 ) {
//merge composition with content type
contentTypeHelper.mergeCompositeContentType($scope.contentType, compositeContentType);
} else {
// split composition from content type
contentTypeHelper.splitCompositeContentType($scope.contentType, compositeContentType);
}
}
};
/* ---------- TABS ---------- */
$scope.addTab = function(tab){
$scope.activateTab(tab);
// push new init tab to the scope
contentTypeHelper.addInitTab($scope.contentType);
};
$scope.removeTab = function(tabIndex) {
$scope.contentType.groups.splice(tabIndex, 1);
};
$scope.activateTab = function(tab) {
// set all other tabs that are inactive to active
angular.forEach($scope.contentType.groups, function(group){
// skip init tab
if(group.tabState !== "init") {
group.tabState = "inActive";
}
});
tab.tabState = "active";
};
$scope.updateTabTitle = function(tab) {
if(tab.properties.length === 0) {
contentTypeHelper.addInitProperty(tab);
}
};
/* ---------- PROPERTIES ---------- */
$scope.toggleGroupSize = function(group){
if(group.columns !== 12){
group.columns = 12;
}else{
group.columns = 6;
}
};
$scope.editPropertyTypeSettings = function(property) {
if(!property.inherited) {
$scope.dialogModel = {};
$scope.dialogModel.title = "Edit property type settings";
$scope.dialogModel.property = property;
$scope.dialogModel.view = "views/documentType/dialogs/editPropertySettings/editPropertySettings.html";
$scope.showDialog = true;
// set indicator on property to tell the dialog is open - is used to set focus on the element
property.dialogIsOpen = true;
// set property to active
property.propertyState = "active";
$scope.dialogModel.changePropertyEditor = function(property) {
$scope.choosePropertyType(property);
};
$scope.dialogModel.editDataType = function(property) {
$scope.configDataType(property);
};
$scope.dialogModel.submit = function(model){
property.dialogIsOpen = false;
$scope.showDialog = false;
$scope.dialogModel = null;
// push new init property to scope
contentTypeHelper.addInitPropertyOnActiveTab($scope.contentType);
};
$scope.dialogModel.close = function(model){
$scope.showDialog = false;
$scope.dialogModel = null;
// push new init property to scope
contentTypeHelper.addInitPropertyOnActiveTab($scope.contentType);
};
}
};
$scope.choosePropertyType = function(property) {
$scope.dialogModel = {};
$scope.dialogModel.title = "Choose property type";
$scope.dialogModel.view = "views/documentType/dialogs/property.html";
$scope.showDialog = true;
property.dialogIsOpen = true;
$scope.dialogModel.selectDataType = function(selectedDataType) {
contentTypeResource.getPropertyTypeScaffold(selectedDataType.id).then(function(propertyType){
property.config = propertyType.config;
property.editor = propertyType.editor;
property.view = propertyType.view;
property.dataTypeId = selectedDataType.id;
property.dataTypeIcon = selectedDataType.icon;
property.dataTypeName = selectedDataType.name;
property.propertyState = "active";
console.log(property);
// open data type configuration
$scope.editPropertyTypeSettings(property);
// push new init tab to scope
contentTypeHelper.addInitTab($scope.contentType);
});
};
$scope.dialogModel.close = function(model){
$scope.editPropertyTypeSettings(property);
};
};
$scope.configDataType = function(property) {
$scope.dialogModel = {};
$scope.dialogModel.title = "Edit data type";
$scope.dialogModel.dataType = {};
$scope.dialogModel.property = property;
$scope.dialogModel.view = "views/documentType/dialogs/editDataType/editDataType.html";
$scope.dialogModel.multiActions = [
{
label: "Save",
action: function(dataType) {
saveDataType(dataType, false);
}
},
{
label: "Save as new",
action: function(dataType) {
saveDataType(dataType, true);
}
}
];
$scope.showDialog = true;
function saveDataType(dataType, isNew) {
var preValues = dataTypeHelper.createPreValueProps(dataType.preValues);
dataTypeResource.save(dataType, preValues, isNew).then(function(dataType) {
contentTypeResource.getPropertyTypeScaffold(dataType.id).then(function(propertyType){
property.config = propertyType.config;
property.editor = propertyType.editor;
property.view = propertyType.view;
property.dataTypeId = dataType.id;
property.dataTypeIcon = dataType.icon;
property.dataTypeName = dataType.name;
// open settings dialog
$scope.editPropertyTypeSettings(property);
});
});
}
$scope.dialogModel.close = function(model){
$scope.editPropertyTypeSettings(property);
};
};
$scope.deleteProperty = function(tab, propertyIndex) {
tab.properties.splice(propertyIndex, 1);
};
/* ---------- SORTING OPTIONS ---------- */
$scope.sortableOptionsTab = {
distance: 10,
tolerance: "pointer",
opacity: 0.7,
scroll: true,
cursor: "move",
placeholder: "ui-sortable-tabs-placeholder",
zIndex: 6000,
handle: ".edt-tab-handle",
items: ".edt-tab-sortable",
start: function (e, ui) {
ui.placeholder.height(ui.item.height());
},
stop: function(e, ui){
}
};
$scope.sortableOptionsEditor = {
distance: 10,
tolerance: "pointer",
connectWith: ".edt-property-list",
opacity: 0.7,
scroll: true,
cursor: "move",
placeholder: "ui-sortable-properties-placeholder",
zIndex: 6000,
handle: ".edt-property-handle",
items: ".edt-property-sortable",
start: function (e, ui) {
ui.placeholder.height(ui.item.height());
},
stop: function(e, ui){
}
};
}
angular.module("umbraco").controller("Umbraco.Editors.DocumentType.DesignController", DesignController);

View File

@@ -1,147 +1,159 @@
<!-- TABS -->
<ul ui-sortable="sortableOptionsTab" ng-model="contentType.groups" class="content-type-groups-list no-style-list">
<div ng-controller="Umbraco.Editors.DocumentType.DesignController" ng-class="{'is-in-sorting-mode': sortingMode}">
<ul ui-sortable="sortableOptionsTab" ng-model="contentType.groups" class="content-type-groups-list no-style-list">
<li ng-repeat="tab in contentType.groups" ng-class="{'edt-tab-sortable': sortingMode && !tab.inherited}">
<li ng-repeat="tab in contentType.groups" ng-class="{'edt-tab-sortable': sortingMode && !tab.inherited}">
<!-- TAB INIT STATE -->
<div class="edt-tab umb-card edt-tab-placeholder" ng-click="addTab(tab)" ng-show="tab.tabState=='init' && !sortingMode" ng-class="{'tab-state-init animated fadeIn': tab.tabState=='init'}">
<!-- TAB INIT STATE -->
<div class="edt-tab umb-card edt-tab-placeholder" ng-click="addTab(tab)" ng-show="tab.tabState=='init' && !sortingMode" ng-class="{'tab-state-init animated fadeIn': tab.tabState=='init'}">
<div class="tab-title-wrapper">
<div class="tab-title">
<span class="tab-title-text"></span>
</div>
</div>
<div class="edt-tab-center-text">
<span ng-if="contentType.groups.length === 1">Add new tab</span>
<span ng-if="contentType.groups.length > 1">Add another tab</span>
</div>
</div>
<!-- TAB ACTIVE OR INACTIVE STATE -->
<div class="edt-tab umb-card" ng-class="{'tab-state-active':tab.tabState=='active', 'tab-state-inactive': tab.tabState=='inActive', 'tab-is-inherited': tab.inherited, 'edt-tab-handle': sortingMode && !tab.inherited}" ng-click="activateTab(tab)" ng-if="tab.tabState !== 'init'">
<div class="tab-remove" ng-if="!sortingMode && tab.properties.length <= 1">
<i class="icon icon-trash" ng-click="removeTab($index)"></i>
</div>
<div class="tab-title-wrapper">
<div class="tab-title">
<i class="icon icon-navigation" ng-if="sortingMode && !tab.inherited"></i>
<input class="tab-title-input" type="text" placeholder="Enter name..." ng-model="tab.name" ng-class="{'tab-title-placeholder': tab.name == ''}" ng-change="updateTabTitle(tab)" umb-blur="updateTabTitle(tab)" ng-disabled="tab.inherited" umb-auto-focus umb-auto-resize />
<div class="tab-title-wrapper">
<div class="tab-title">
<span class="tab-title-text"></span>
</div>
</div>
<div class="edt-tab-inherited-from" ng-if="tab.inherited">
<i class="icon icon-merge"></i> Inherited from {{ tab.inheritedFromName }}
<span ng-repeat="contentTypeName in tab.parentTabContentTypeNames">
{{ contentTypeName }}
<span ng-if="!$last">, </span>
</span>
<div class="edt-tab-center-text">
<span ng-if="contentType.groups.length === 1">Add new tab</span>
<span ng-if="contentType.groups.length > 1">Add another tab</span>
</div>
</div>
<div class="edt-property-group">
<ul class="edt-property-list no-style-list" ui-sortable="sortableOptionsEditor"
ng-model="tab.properties" class="no-style-list">
<li ng-class="{'edt-property-sortable': sortingMode && !property.inherited}" ng-repeat="property in tab.properties">
<!-- TAB ACTIVE OR INACTIVE STATE -->
<div class="edt-tab umb-card" ng-class="{'tab-state-active':tab.tabState=='active', 'tab-state-inactive': tab.tabState=='inActive', 'tab-is-inherited': tab.inherited, 'edt-tab-handle': sortingMode && !tab.inherited}" ng-click="activateTab(tab)" ng-if="tab.tabState !== 'init'">
<!-- Init property / Property placeholder / add new property -->
<div class="edt-property" ng-show="property.propertyState=='init'" ng-class="{'property-state-init animated fadeIn': property.propertyState=='init'}" ng-click="editPropertyTypeSettings(property)">
<div class="tab-remove" ng-if="!sortingMode && tab.properties.length <= 1">
<i class="icon icon-trash" ng-click="removeTab($index)"></i>
</div>
<div class="edt-property-meta">
<div class="placeholder-input-small"></div>
<div class="placeholder-input"></div>
<div class="placeholder-text-group">
<div class="placeholder-text-line-full"></div>
<div class="placeholder-text-line-full"></div>
<div class="placeholder-text-line-short"></div>
<div class="tab-title-wrapper">
<div class="tab-title">
<i class="icon icon-navigation" ng-if="sortingMode && !tab.inherited"></i>
<input class="tab-title-input" type="text" placeholder="Enter name..." ng-model="tab.name" ng-class="{'tab-title-placeholder': tab.name == ''}" ng-change="updateTabTitle(tab)" umb-blur="updateTabTitle(tab)" ng-disabled="tab.inherited" umb-auto-focus umb-auto-resize />
</div>
<div class="edt-tab-inherited-from" ng-if="tab.inherited">
<i class="icon icon-merge"></i> Inherited from {{ tab.inheritedFromName }}
<span ng-repeat="contentTypeName in tab.parentTabContentTypeNames">
{{ contentTypeName }}
<span ng-if="!$last">, </span>
</span>
</div>
</div>
<div class="edt-property-group">
<ul class="edt-property-list no-style-list" ui-sortable="sortableOptionsEditor"
ng-model="tab.properties" class="no-style-list">
<li ng-class="{'edt-property-sortable': sortingMode && !property.inherited}" ng-repeat="property in tab.properties">
<!-- Init property / Property placeholder / add new property -->
<div class="edt-property" ng-show="property.propertyState=='init'" ng-class="{'property-state-init animated fadeIn': property.propertyState=='init'}" ng-click="editPropertyTypeSettings(property)">
<div class="edt-property-meta">
<div class="placeholder-input-small"></div>
<div class="placeholder-input"></div>
<div class="placeholder-text-group">
<div class="placeholder-text-line-full"></div>
<div class="placeholder-text-line-full"></div>
<div class="placeholder-text-line-short"></div>
</div>
</div>
<div class="edt-property-preview">
<span class="placeholder-text">Add property</span>
</div>
<div class="edt-property-actions"></div>
</div>
<div class="edt-property-preview">
<span class="placeholder-text">Add property</span>
</div>
<div class="edt-property" ng-show="property.propertyState!=='init'" ng-class="{'active': property.dialogIsOpen, 'property-state-active animated fadeIn': property.propertyState=='active', 'property-is-inherited': property.inherited, 'edt-property-handle': sortingMode && !property.inherited}">
<div class="edt-property-actions"></div>
<!-- property meta text -->
<div class="edt-property-meta">
</div>
<div class="edt-property-inherited-from" ng-if="property.inherited"><i class="icon icon-merge"></i> Inherited from {{property.contentTypeName}}</div>
<div class="edt-property" ng-show="property.propertyState!=='init'" ng-class="{'active': property.dialogIsOpen, 'property-state-active animated fadeIn': property.propertyState=='active', 'property-is-inherited': property.inherited, 'edt-property-handle': sortingMode && !property.inherited}">
<div ng-if="!sortingMode">
<!-- property meta text -->
<div class="edt-property-meta">
<div class="edt-property-meta-alias">{{ property.alias }}</div>
<div class="edt-property-inherited-from" ng-if="property.inherited"><i class="icon icon-merge"></i> Inherited from {{property.contentTypeName}}</div>
<div class="edt-property-meta-label invisible-field">
<textarea placeholder="Label..." ng-model="property.label" ng-disabled="property.inherited" umb-auto-resize></textarea>
</div>
<div ng-if="!sortingMode">
<div class="edt-property-meta-description invisible-field">
<textarea ng-model="property.description" placeholder="Enter your description..." ng-disabled="property.inherited" umb-auto-resize></textarea>
</div>
<div class="edt-property-meta-alias">{{ property.alias }}</div>
<div class="edt-property-meta-label invisible-field">
<textarea placeholder="Label..." ng-model="property.label" ng-disabled="property.inherited" umb-auto-resize></textarea>
</div>
<div class="edt-property-meta-description invisible-field">
<textarea ng-model="property.description" placeholder="Enter your description..." ng-disabled="property.inherited" umb-auto-resize></textarea>
<div ng-if="sortingMode">
<i class="icon icon-navigation"></i>
<span class="property-name">{{ property.label }}</span>
<span class="item-alias">({{ property.alias }})</span>
</div>
</div>
<div ng-if="sortingMode">
<i class="icon icon-navigation"></i>
<span class="property-name">{{ property.label }}</span>
<span class="item-alias">({{ property.alias }})</span>
<div tabindex="-1" class="edt-property-preview" ng-click="editPropertyTypeSettings(property)">
<span class="edt-property-preview-overlay"></span>
<span class="edt-property-preview-label">
<span ng-if="property.dataTypeName !== undefined">{{property.dataTypeName}}</span>
<span ng-if="property.dataTypeName == undefined">Preview</span>
</span>
<umb-property-editor model="property" ng-if="property.view !== undefined"></umb-property-editor>
</div>
</div>
<!-- row tools -->
<div tabindex="-1" class="edt-property-actions">
<div ng-if="!property.inherited">
<div tabindex="-1" class="edt-property-preview" ng-click="editPropertyTypeSettings(property)">
<!-- delete property -->
<a href="" class="property-action property-action-delete" ng-click="deleteProperty(tab, $index)">
<i class="icon icon-trash"></i>
</a>
<span class="edt-property-preview-overlay"></span>
<!-- settings for property -->
<a href="" class="property-action property-action-edit" ng-click="editPropertyTypeSettings(property)">
<i class="icon icon-settings"></i>
</a>
<span class="edt-property-preview-label">
<span ng-if="property.dataTypeName !== undefined">{{property.dataTypeName}}</span>
<span ng-if="property.dataTypeName == undefined">Preview</span>
</span>
<umb-property-editor model="property" ng-if="property.view !== undefined"></umb-property-editor>
</div>
<!-- row tools -->
<div tabindex="-1" class="edt-property-actions">
<div ng-if="!property.inherited">
<!-- delete property -->
<a href="" class="property-action property-action-delete" ng-click="deleteProperty(tab, $index)">
<i class="icon icon-trash"></i>
</a>
<!-- settings for property -->
<a href="" class="property-action property-action-edit" ng-click="editPropertyTypeSettings(property)">
<i class="icon icon-settings"></i>
</a>
</div>
</div>
</div>
</div>
</li>
</li>
</ul>
</div>
</ul>
</div>
</div>
<br>
<br>
</li>
</li>
</ul>
</ul>
<!-- overlay for change property editor -->
<umb-overlay
ng-style="{'width': '500px'}"
ng-if="showDialog"
model="dialogModel"
animation="slide-in-right"
position="right"
view="dialogModel.view">
</umb-overlay>
</div>