Merge remote-tracking branch 'origin/temp-v8-UI' into dev-v8
This commit is contained in:
+1
-2
@@ -32,11 +32,10 @@ angular.module("umbraco.directives")
|
||||
var wrapper = $("#mainwrapper");
|
||||
var contentPanel = $("#contentwrapper");
|
||||
var umbNotification = $("#umb-notifications-wrapper");
|
||||
var apps = $("#applications");
|
||||
var bottomBar = contentPanel.find(".umb-bottom-bar");
|
||||
var navOffeset = $("#navOffset");
|
||||
|
||||
var leftPanelWidth = ui.element.width() + apps.width();
|
||||
var leftPanelWidth = ui.element.width();
|
||||
|
||||
contentPanel.css({ left: leftPanelWidth });
|
||||
bottomBar.css({ left: leftPanelWidth });
|
||||
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function AppHeaderDirective(eventsService, appState, userService) {
|
||||
|
||||
function link(scope, el, attr, ctrl) {
|
||||
|
||||
var evts = [];
|
||||
|
||||
// the null is important because we do an explicit bool check on this in the view
|
||||
// the avatar is by default the umbraco logo
|
||||
scope.authenticated = null;
|
||||
scope.user = null;
|
||||
scope.avatar = [
|
||||
{ value: "assets/img/application/logo.png" },
|
||||
{ value: "assets/img/application/logo@2x.png" },
|
||||
{ value: "assets/img/application/logo@3x.png" }
|
||||
];
|
||||
|
||||
// when a user logs out or timesout
|
||||
evts.push(eventsService.on("app.notAuthenticated", function() {
|
||||
scope.authenticated = false;
|
||||
scope.user = null;
|
||||
}));
|
||||
|
||||
// when the application is ready and the user is authorized setup the data
|
||||
evts.push(eventsService.on("app.ready", function(evt, data) {
|
||||
|
||||
scope.authenticated = true;
|
||||
scope.user = data.user;
|
||||
|
||||
if (scope.user.avatars) {
|
||||
scope.avatar = [];
|
||||
if (angular.isArray(scope.user.avatars)) {
|
||||
for (var i = 0; i < scope.user.avatars.length; i++) {
|
||||
scope.avatar.push({ value: scope.user.avatars[i] });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}));
|
||||
|
||||
evts.push(eventsService.on("app.userRefresh", function(evt) {
|
||||
userService.refreshCurrentUser().then(function(data) {
|
||||
scope.user = data;
|
||||
|
||||
if (scope.user.avatars) {
|
||||
scope.avatar = [];
|
||||
if (angular.isArray(scope.user.avatars)) {
|
||||
for (var i = 0; i < scope.user.avatars.length; i++) {
|
||||
scope.avatar.push({ value: scope.user.avatars[i] });
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
||||
// toggle the help dialog by raising the global app state to toggle the help drawer
|
||||
scope.helpClick = function () {
|
||||
var showDrawer = appState.getDrawerState("showDrawer");
|
||||
var drawer = { view: "help", show: !showDrawer };
|
||||
appState.setDrawerState("view", drawer.view);
|
||||
appState.setDrawerState("showDrawer", drawer.show);
|
||||
};
|
||||
|
||||
scope.avatarClick = function () {
|
||||
if(!scope.userDialog) {
|
||||
scope.userDialog = {
|
||||
view: "user",
|
||||
show: true,
|
||||
close: function (oldModel) {
|
||||
scope.userDialog.show = false;
|
||||
scope.userDialog = null;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
scope.userDialog.show = false;
|
||||
scope.userDialog = null;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
var directive = {
|
||||
transclude: true,
|
||||
restrict: "E",
|
||||
replace: true,
|
||||
templateUrl: "views/components/application/umb-app-header.html",
|
||||
link: link,
|
||||
scope: {}
|
||||
};
|
||||
|
||||
return directive;
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco.directives").directive("umbAppHeader", AppHeaderDirective);
|
||||
|
||||
})();
|
||||
+32
-64
@@ -10,51 +10,60 @@ function sectionsDirective($timeout, $window, navigationService, treeService, se
|
||||
templateUrl: 'views/components/application/umb-sections.html',
|
||||
link: function (scope, element, attr, ctrl) {
|
||||
|
||||
var sectionItemsWidth = [];
|
||||
var evts = [];
|
||||
var maxSections = 7;
|
||||
|
||||
//setup scope vars
|
||||
scope.maxSections = 7;
|
||||
scope.maxSections = maxSections;
|
||||
scope.overflowingSections = 0;
|
||||
scope.sections = [];
|
||||
scope.currentSection = appState.getSectionState("currentSection");
|
||||
scope.showTray = false; //appState.getGlobalState("showTray");
|
||||
scope.stickyNavigation = appState.getGlobalState("stickyNavigation");
|
||||
scope.needTray = false;
|
||||
scope.trayAnimation = function() {
|
||||
if (scope.showTray) {
|
||||
return 'slide';
|
||||
}
|
||||
else if (scope.showTray === false) {
|
||||
return 'slide';
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
function loadSections(){
|
||||
sectionService.getSectionsForUser()
|
||||
.then(function (result) {
|
||||
scope.sections = result;
|
||||
calculateHeight();
|
||||
// store the width of each section so we can hide/show them based on browser width
|
||||
// we store them because the sections get removed from the dom and then we
|
||||
// can't tell when to show them gain
|
||||
$timeout(function(){
|
||||
$("#applications .sections li").each(function(index) {
|
||||
sectionItemsWidth.push($(this).outerWidth());
|
||||
});
|
||||
});
|
||||
calculateWidth();
|
||||
});
|
||||
}
|
||||
|
||||
function calculateHeight(){
|
||||
function calculateWidth(){
|
||||
$timeout(function(){
|
||||
//total height minus room for avatar and help icon
|
||||
var height = $(window).height()-200;
|
||||
//total width minus room for avatar, search, and help icon
|
||||
var windowWidth = $(window).width()-200;
|
||||
var sectionsWidth = 0;
|
||||
scope.totalSections = scope.sections.length;
|
||||
scope.maxSections = Math.floor(height / 70);
|
||||
scope.maxSections = maxSections;
|
||||
scope.overflowingSections = 0;
|
||||
scope.needTray = false;
|
||||
|
||||
// detect how many sections we can show on the screen
|
||||
for (var i = 0; i < sectionItemsWidth.length; i++) {
|
||||
var sectionItemWidth = sectionItemsWidth[i];
|
||||
sectionsWidth += sectionItemWidth;
|
||||
|
||||
if(scope.totalSections > scope.maxSections){
|
||||
scope.needTray = true;
|
||||
scope.overflowingSections = scope.maxSections - scope.totalSections;
|
||||
if(sectionsWidth > windowWidth) {
|
||||
scope.needTray = true;
|
||||
scope.maxSections = i - 1;
|
||||
scope.overflowingSections = scope.maxSections - scope.totalSections;
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var evts = [];
|
||||
|
||||
//Listen for global state changes
|
||||
evts.push(eventsService.on("appState.globalState.changed", function(e, args) {
|
||||
if (args.key === "showTray") {
|
||||
@@ -84,40 +93,7 @@ function sectionsDirective($timeout, $window, navigationService, treeService, se
|
||||
});
|
||||
|
||||
//on page resize
|
||||
window.onresize = calculateHeight;
|
||||
|
||||
scope.avatarClick = function(){
|
||||
|
||||
if(scope.helpDialog) {
|
||||
closeHelpDialog();
|
||||
}
|
||||
|
||||
if(!scope.userDialog) {
|
||||
scope.userDialog = {
|
||||
view: "user",
|
||||
show: true,
|
||||
close: function(oldModel) {
|
||||
closeUserDialog();
|
||||
}
|
||||
};
|
||||
} else {
|
||||
closeUserDialog();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function closeUserDialog() {
|
||||
scope.userDialog.show = false;
|
||||
scope.userDialog = null;
|
||||
}
|
||||
|
||||
//toggle the help dialog by raising the global app state to toggle the help drawer
|
||||
scope.helpClick = function () {
|
||||
var showDrawer = appState.getDrawerState("showDrawer");
|
||||
var drawer = { view: "help", show: !showDrawer };
|
||||
appState.setDrawerState("view", drawer.view);
|
||||
appState.setDrawerState("showDrawer", drawer.show);
|
||||
};
|
||||
window.onresize = calculateWidth;
|
||||
|
||||
scope.sectionClick = function (event, section) {
|
||||
|
||||
@@ -154,14 +130,6 @@ function sectionsDirective($timeout, $window, navigationService, treeService, se
|
||||
};
|
||||
|
||||
scope.trayClick = function () {
|
||||
// close dialogs
|
||||
if (scope.userDialog) {
|
||||
closeUserDialog();
|
||||
}
|
||||
if (scope.helpDialog) {
|
||||
closeHelpDialog();
|
||||
}
|
||||
|
||||
if (appState.getGlobalState("showTray") === true) {
|
||||
navigationService.hideTray();
|
||||
} else {
|
||||
|
||||
+6
@@ -125,6 +125,12 @@ Use this directive to render an umbraco button. The directive can be used to gen
|
||||
|
||||
});
|
||||
|
||||
scope.clickButton = function(event) {
|
||||
if(scope.action) {
|
||||
scope.action({$event: event});
|
||||
}
|
||||
};
|
||||
|
||||
scope.$on('$destroy', function() {
|
||||
unbindStateWatcher();
|
||||
});
|
||||
|
||||
+184
-2
@@ -18,7 +18,13 @@
|
||||
$scope.page.isNew = $scope.isNew ? true : false;
|
||||
$scope.page.buttonGroupState = "init";
|
||||
$scope.allowOpen = true;
|
||||
|
||||
|
||||
// add all editors to an editors array to support split view
|
||||
$scope.editors = [];
|
||||
$scope.splitView = {
|
||||
"leftIsOpen": true,
|
||||
"rightIsOpen": false
|
||||
};
|
||||
|
||||
function init(content) {
|
||||
|
||||
@@ -45,7 +51,112 @@
|
||||
}));
|
||||
|
||||
// We don't get the info tab from the server from version 7.8 so we need to manually add it
|
||||
contentEditingHelper.addInfoTab($scope.content.tabs);
|
||||
//contentEditingHelper.addInfoTab($scope.content.tabs);
|
||||
|
||||
// prototype variants
|
||||
$scope.content.variants = [
|
||||
{
|
||||
"cultureDisplayName": "English (United States)",
|
||||
"culture": "en-US",
|
||||
"current": true,
|
||||
"segments" : [
|
||||
{
|
||||
"name": "Mobile"
|
||||
},
|
||||
{
|
||||
"name": "Job campign"
|
||||
}
|
||||
],
|
||||
"state": "Published"
|
||||
},
|
||||
{
|
||||
"cultureDisplayName": "Danish",
|
||||
"culture": "da-DK",
|
||||
"current": false,
|
||||
"segments" : [
|
||||
{
|
||||
"name": "Mobile"
|
||||
}
|
||||
],
|
||||
"state": "Published"
|
||||
},
|
||||
{
|
||||
"cultureDisplayName": "Spanish (Spain)",
|
||||
"culture": "es-ES",
|
||||
"current": false,
|
||||
"state": "Published (pending changes)"
|
||||
},
|
||||
{
|
||||
"cultureDisplayName": "French (France)",
|
||||
"culture": "fr-FR",
|
||||
"current": false,
|
||||
"segments" : [
|
||||
{
|
||||
"name": "Mobile"
|
||||
},
|
||||
{
|
||||
"name": "Job campign"
|
||||
}
|
||||
],
|
||||
"state": "Draft"
|
||||
},
|
||||
{
|
||||
"cultureDisplayName": "German (Germany)",
|
||||
"culture": "de-DE",
|
||||
"current": false,
|
||||
"state": "Draft"
|
||||
}
|
||||
];
|
||||
|
||||
// prototype content and info apps
|
||||
var contentApp = {
|
||||
"name": "Content",
|
||||
"alias": "content",
|
||||
"icon": "icon-document",
|
||||
"view": "views/content/apps/content/content.html"
|
||||
};
|
||||
|
||||
var infoApp = {
|
||||
"name": "Info",
|
||||
"alias": "info",
|
||||
"icon": "icon-info",
|
||||
"view": "views/content/apps/info/info.html"
|
||||
};
|
||||
|
||||
var listview = {
|
||||
"name": "Child items",
|
||||
"alias": "childItems",
|
||||
"icon": "icon-list",
|
||||
"view": "views/content/apps/listview/listview.html"
|
||||
};
|
||||
|
||||
$scope.content.apps = [];
|
||||
|
||||
if($scope.content.isContainer) {
|
||||
// add list view app
|
||||
$scope.content.apps.push(listview);
|
||||
|
||||
// remove the list view tab
|
||||
angular.forEach($scope.content.tabs, function(tab, index){
|
||||
if(tab.alias === "umbContainerView") {
|
||||
tab.hide = true;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$scope.content.apps.push(contentApp);
|
||||
$scope.content.apps.push(infoApp);
|
||||
|
||||
// set first app to active
|
||||
$scope.content.apps[0].active = true;
|
||||
|
||||
// create new editor for split view
|
||||
if($scope.editors.length === 0) {
|
||||
var editor = {};
|
||||
editor.content = $scope.content;
|
||||
$scope.editors.push(editor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -260,6 +371,10 @@
|
||||
}
|
||||
};
|
||||
|
||||
$scope.backToListView = function() {
|
||||
$location.path($scope.page.listViewPath);
|
||||
};
|
||||
|
||||
$scope.restore = function (content) {
|
||||
|
||||
$scope.page.buttonRestore = "busy";
|
||||
@@ -308,6 +423,73 @@
|
||||
|
||||
};
|
||||
|
||||
$scope.selectVariant = function(variant, variants, form) {
|
||||
// show the discard changes dialog it there are unsaved changes
|
||||
if(form.$dirty) {
|
||||
var notification = {
|
||||
view: "confirmroutechange",
|
||||
args: {
|
||||
onDiscard: function() {
|
||||
setSelectedVariant(variant, variants);
|
||||
notificationsService.remove(notification);
|
||||
form.$setPristine();
|
||||
}
|
||||
}
|
||||
};
|
||||
notificationsService.add(notification);
|
||||
return;
|
||||
}
|
||||
// switch variant if all changes are saved
|
||||
setSelectedVariant(variant, variants);
|
||||
};
|
||||
|
||||
function setSelectedVariant(selectedVariant, variants) {
|
||||
angular.forEach(variants, function(variant) {
|
||||
variant.current = false;
|
||||
});
|
||||
selectedVariant.current = true;
|
||||
}
|
||||
|
||||
$scope.closeSplitView = function(index, editor) {
|
||||
// hacky animation stuff - it will be much better when angular is upgraded
|
||||
editor.loading = true;
|
||||
editor.collapsed = true;
|
||||
$timeout(function(){
|
||||
$scope.editors.splice(index, 1);
|
||||
}, 400);
|
||||
};
|
||||
|
||||
$scope.openInSplitView = function(selectedVariant) {
|
||||
|
||||
console.log(selectedVariant);
|
||||
|
||||
var editor = {};
|
||||
// hacking animation states - these should hopefully be easier to do when we upgrade angular
|
||||
editor.collapsed = true;
|
||||
editor.loading = true;
|
||||
$scope.editors.push(editor);
|
||||
var editorIndex = $scope.editors.length - 1;
|
||||
$timeout(function(){
|
||||
$scope.editors[editorIndex].collapsed = false;
|
||||
}, 100);
|
||||
|
||||
// fake loading of content
|
||||
$timeout(function(){
|
||||
$scope.editors[editorIndex].content = angular.copy($scope.content);
|
||||
$scope.editors[editorIndex].content.name = "What a variant";
|
||||
// set selected variant on split view content
|
||||
console.log($scope.editors[editorIndex].content.variants);
|
||||
angular.forEach($scope.editors[editorIndex].content.variants, function(variant) {
|
||||
if(variant.culture === selectedVariant.culture) {
|
||||
variant.current = true;
|
||||
} else {
|
||||
variant.current = false;
|
||||
}
|
||||
});
|
||||
$scope.editors[editorIndex].loading = false;
|
||||
}, 500);
|
||||
};
|
||||
|
||||
function moveNode(node, target) {
|
||||
|
||||
contentResource.move({ "parentId": target.id, "id": node.id })
|
||||
|
||||
+76
-1
@@ -208,6 +208,51 @@ Use this directive to construct a header inside the main editor window.
|
||||
|
||||
function link(scope, el, attr, ctrl) {
|
||||
|
||||
scope.vm = {};
|
||||
scope.vm.dropdownOpen = false;
|
||||
scope.vm.currentVariant = "";
|
||||
|
||||
function onInit() {
|
||||
setCurrentVariant(scope.variants);
|
||||
setVariantStatusColor(scope.variants);
|
||||
}
|
||||
|
||||
function setCurrentVariant(variants) {
|
||||
angular.forEach(variants, function (variant) {
|
||||
if(variant.current) {
|
||||
scope.vm.currentVariant = variant;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setVariantStatusColor(variants) {
|
||||
angular.forEach(variants, function (variant) {
|
||||
angular.forEach(variant.states, function(state){
|
||||
switch (state.name) {
|
||||
case "Published":
|
||||
case "Published +":
|
||||
state.stateColor = "success";
|
||||
break;
|
||||
default:
|
||||
state.stateColor = "gray";
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
scope.goBack = function() {
|
||||
if(scope.onBack) {
|
||||
scope.onBack();
|
||||
}
|
||||
};
|
||||
|
||||
scope.selectVariant = function(event, variant) {
|
||||
if(scope.onSelectVariant) {
|
||||
scope.onSelectVariant({"variant": variant});
|
||||
scope.vm.dropdownOpen = false;
|
||||
}
|
||||
};
|
||||
|
||||
scope.openIconPicker = function() {
|
||||
scope.dialogModel = {
|
||||
view: "iconpicker",
|
||||
@@ -234,6 +279,29 @@ Use this directive to construct a header inside the main editor window.
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
scope.closeSplitView = function() {
|
||||
if(scope.onCloseSplitView) {
|
||||
scope.onCloseSplitView();
|
||||
}
|
||||
};
|
||||
|
||||
scope.openInSplitView = function(event, variant) {
|
||||
if(scope.onOpenInSplitView) {
|
||||
scope.vm.dropdownOpen = false;
|
||||
scope.onOpenInSplitView({"variant": variant});
|
||||
}
|
||||
};
|
||||
|
||||
scope.$watch('variants', function(newValue, oldValue){
|
||||
if(!newValue) return;
|
||||
if(newValue === oldValue) return;
|
||||
setCurrentVariant(newValue);
|
||||
setVariantStatusColor(newValue);
|
||||
}, true);
|
||||
|
||||
onInit();
|
||||
|
||||
}
|
||||
|
||||
var directive = {
|
||||
@@ -254,8 +322,15 @@ Use this directive to construct a header inside the main editor window.
|
||||
description: "=",
|
||||
hideDescription: "@",
|
||||
descriptionLocked: "@",
|
||||
variants: "=",
|
||||
onSelectVariant: "&",
|
||||
navigation: "=",
|
||||
key: "="
|
||||
key: "=",
|
||||
onBack: "&?",
|
||||
showBackButton: "@?",
|
||||
splitViewOpen: "=?",
|
||||
onOpenInSplitView: "&?",
|
||||
onCloseSplitView: "&?"
|
||||
},
|
||||
link: link
|
||||
};
|
||||
|
||||
@@ -40,7 +40,7 @@ angular.module('umbraco.directives')
|
||||
|
||||
$timeout(function(){
|
||||
// get list of all links in the list
|
||||
listItems = element.find("li a");
|
||||
listItems = element.find("li :tabbable");
|
||||
});
|
||||
|
||||
// Handle keydown events
|
||||
|
||||
@@ -11,13 +11,7 @@
|
||||
function MainController($scope, $rootScope, $location, $routeParams, $timeout, $http, $log, appState, treeService, notificationsService, userService, navigationService, historyService, updateChecker, assetsService, eventsService, umbRequestHelper, tmhDynamicLocale, localStorageService, tourService) {
|
||||
|
||||
//the null is important because we do an explicit bool check on this in the view
|
||||
//the avatar is by default the umbraco logo
|
||||
$scope.authenticated = null;
|
||||
$scope.avatar = [
|
||||
{ value: "assets/img/application/logo.png" },
|
||||
{ value: "assets/img/application/logo@2x.png" },
|
||||
{ value: "assets/img/application/logo@3x.png" }
|
||||
];
|
||||
$scope.touchDevice = appState.getGlobalState("touchDevice");
|
||||
|
||||
|
||||
@@ -62,15 +56,6 @@ function MainController($scope, $rootScope, $location, $routeParams, $timeout, $
|
||||
if ($scope.user.locale) {
|
||||
tmhDynamicLocale.set($scope.user.locale);
|
||||
}
|
||||
|
||||
if ($scope.user.avatars) {
|
||||
$scope.avatar = [];
|
||||
if (angular.isArray($scope.user.avatars)) {
|
||||
for (var i = 0; i < $scope.user.avatars.length; i++) {
|
||||
$scope.avatar.push({ value: $scope.user.avatars[i] });
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
||||
@@ -116,16 +101,6 @@ function MainController($scope, $rootScope, $location, $routeParams, $timeout, $
|
||||
tmhDynamicLocale.set($scope.user.locale);
|
||||
}
|
||||
|
||||
if ($scope.user.avatars) {
|
||||
|
||||
$scope.avatar = [];
|
||||
if (angular.isArray($scope.user.avatars)) {
|
||||
for (var i = 0; i < $scope.user.avatars.length; i++) {
|
||||
$scope.avatar.push({ value: $scope.user.avatars[i] });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}));
|
||||
|
||||
evts.push(eventsService.on("app.ysod", function (name, error) {
|
||||
|
||||
@@ -154,6 +154,10 @@ function NavigationController($scope, $rootScope, $location, $log, $routeParams,
|
||||
}, 300);
|
||||
}
|
||||
};
|
||||
|
||||
$scope.toggleTreeLanguageSelector = function() {
|
||||
$scope.treeLanguageSelectorIsOpen = !$scope.treeLanguageSelectorIsOpen;
|
||||
};
|
||||
|
||||
//ensure to unregister from all events!
|
||||
$scope.$on('$destroy', function () {
|
||||
|
||||
@@ -67,15 +67,14 @@
|
||||
}
|
||||
|
||||
.alert-form {
|
||||
background-color: @gray-10;
|
||||
background-color: @white;
|
||||
border: 1px solid @gray-3 !important;
|
||||
color: @gray-3;
|
||||
box-shadow: 0 -1px 6px 0 rgba(0,0,0,0.16);
|
||||
}
|
||||
|
||||
.alert-form.-no-border {
|
||||
border: none !important;
|
||||
margin-left: 1px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.alert-form h4 {
|
||||
|
||||
@@ -41,21 +41,31 @@ body {
|
||||
|
||||
#mainwrapper {
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body.umb-drawer-is-visible #mainwrapper{
|
||||
left: @drawerWidth;
|
||||
right: @drawerWidth;
|
||||
}
|
||||
|
||||
#contentwrapper, #contentcolumn {
|
||||
position: absolute;
|
||||
top: 0px; bottom: 0px; right: 0px; left: 80px;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
left: 0px;
|
||||
z-index: 10;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
#contentwrapper {
|
||||
top: @appHeaderHeight;
|
||||
}
|
||||
|
||||
#umb-notifications-wrapper {
|
||||
left: 80px;
|
||||
}
|
||||
@@ -75,67 +85,13 @@ body.umb-drawer-is-visible #mainwrapper{
|
||||
#leftcolumn {
|
||||
height: 100%;
|
||||
z-index: 1100;
|
||||
width: 80px;
|
||||
float: left;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
#applications {
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
left: 0px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
box-shadow: -10px 0px 25px rgba(0, 0, 0, 0.3)
|
||||
}
|
||||
|
||||
#applications-tray {
|
||||
z-index: 900;
|
||||
left: 80px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#search-form {
|
||||
display: block;
|
||||
margin: 0;
|
||||
z-index: 100;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
overflow: hidden;
|
||||
|
||||
.form-search {
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
margin-top: 17px;
|
||||
|
||||
.umb-search-field {
|
||||
width: auto;
|
||||
min-width: 160px;
|
||||
-webkit-flex: 1;
|
||||
-ms-flex: 1;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 500px) {
|
||||
#search-form .form-search {
|
||||
width: calc(100% - 80px);
|
||||
}
|
||||
top: @appHeaderHeight;
|
||||
}
|
||||
|
||||
#navigation {
|
||||
left: 80px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
@@ -151,8 +107,7 @@ body.umb-drawer-is-visible #mainwrapper{
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
padding-top: 100px;
|
||||
border-right: 1px solid @purple-l3;
|
||||
border-right: 1px solid @gray-9;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
@@ -216,12 +171,12 @@ body.umb-drawer-is-visible #mainwrapper{
|
||||
}
|
||||
|
||||
@media (min-width: 1101px) {
|
||||
#contentwrapper, #umb-notifications-wrapper {left: 440px;}
|
||||
#contentwrapper, #umb-notifications-wrapper {left: 360px;}
|
||||
#speechbubble {left: 360px;}
|
||||
}
|
||||
|
||||
//empty section modification
|
||||
.emptySection #contentwrapper, .emptySection #umb-notifications-wrapper {left: 80px;}
|
||||
.emptySection #umb-notifications-wrapper {left: 80px;}
|
||||
.emptySection #speechbubble {left: 0;}
|
||||
.emptySection #navigation {display: none}
|
||||
|
||||
@@ -232,59 +187,3 @@ body.umb-drawer-is-visible #mainwrapper{
|
||||
.login-only #speechbubble ul {
|
||||
padding-left:20px
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
|
||||
// make leftcolumn smaller on tablets
|
||||
#leftcolumn {
|
||||
width: 61px;
|
||||
}
|
||||
#applications ul.sections {
|
||||
width: 61px;
|
||||
}
|
||||
ul.sections.sections-tray {
|
||||
width: 61px;
|
||||
}
|
||||
#applications-tray {
|
||||
left: 60px;
|
||||
}
|
||||
#navigation {
|
||||
left: 60px;
|
||||
}
|
||||
#contentwrapper, #contentcolumn, #umb-notifications-wrapper {
|
||||
left: 30px;
|
||||
}
|
||||
#umbracoMainPageBody .umb-modal-left.fade.in {
|
||||
margin-left: 61px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 500px) {
|
||||
|
||||
// make leftcolumn smaller on mobiles
|
||||
#leftcolumn {
|
||||
width: 41px;
|
||||
}
|
||||
#applications ul.sections {
|
||||
width: 41px;
|
||||
}
|
||||
#applications ul.sections-tray {
|
||||
width: 41px;
|
||||
}
|
||||
ul.sections.sections-tray {
|
||||
width: 41px;
|
||||
}
|
||||
#applications-tray {
|
||||
left: 40px;
|
||||
}
|
||||
#navigation {
|
||||
left: 40px;
|
||||
}
|
||||
#contentwrapper, #contentcolumn, #umb-notifications-wrapper {
|
||||
left: 20px;
|
||||
}
|
||||
#umbracoMainPageBody .umb-modal-left.fade.in {
|
||||
margin-left: 41px;
|
||||
width: 85%!important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,9 +81,15 @@
|
||||
@import "forms/umb-validation-label.less";
|
||||
|
||||
// Umbraco Components
|
||||
@import "components/application/umb-app-header.less";
|
||||
@import "components/application/umb-tour.less";
|
||||
@import "components/application/umb-backdrop.less";
|
||||
@import "components/application/umb-drawer.less";
|
||||
@import "components/application/umb-language-picker.less";
|
||||
@import "components/application/umb-dashboard.less";
|
||||
|
||||
@import "components/html/umb-expansion-panel.less";
|
||||
@import "components/html/umb-alert.less";
|
||||
|
||||
@import "components/editor.less";
|
||||
@import "components/overlays.less";
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
.umb-app-header {
|
||||
background: @purple;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
max-width: 100%;
|
||||
height: @appHeaderHeight;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.umb-app-header__actions {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.umb-app-header__action a {
|
||||
color: @white;
|
||||
opacity: 0.6;
|
||||
font-size: 22px;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.umb-app-header__action a:hover,
|
||||
.umb-app-header__action a:focus {
|
||||
opacity: 1;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
.umb-dashboard {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.umb-dashboard__header {
|
||||
padding: 20px 20px 0 20px;
|
||||
border-bottom: 1px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-dashboard__content {
|
||||
padding: 20px;
|
||||
overflow: auto;
|
||||
}
|
||||
@@ -2,11 +2,12 @@
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
left: auto;
|
||||
right: 0;
|
||||
z-index: 10;
|
||||
width: @drawerWidth;
|
||||
box-shadow: 0 0 20px rgba(0,0,0,0.19), 0 0 6px rgba(0,0,0,0.23);
|
||||
background: @gray-9;
|
||||
box-shadow: inset 5px 0 20px rgba(0,0,0,.3);
|
||||
}
|
||||
|
||||
.umb-drawer-view {
|
||||
@@ -61,6 +62,7 @@
|
||||
overflow: hidden;
|
||||
border-radius: 3px;
|
||||
display: block;
|
||||
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16);
|
||||
}
|
||||
|
||||
.umb-help-badge:hover,
|
||||
@@ -137,6 +139,7 @@
|
||||
margin-bottom: 0;
|
||||
background: @white;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16);
|
||||
}
|
||||
|
||||
.umb-help-list:last-child {
|
||||
@@ -149,6 +152,10 @@
|
||||
border-bottom: 1px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-help-list-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.umb-help-list-item > a,
|
||||
.umb-help-list-item__content {
|
||||
display: flex;
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
.umb-language-picker {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.umb-language-picker__toggle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 15px 20px;
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-language-picker__toggle:hover {
|
||||
background: @gray-10;
|
||||
}
|
||||
|
||||
.umb-language-picker__expand {
|
||||
color: @gray-6;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.umb-language-picker__dropdown {
|
||||
width: 100%;
|
||||
background: @white;
|
||||
box-shadow: 0 5px 5px rgba(0,0,0,.2);
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.umb-language-picker__dropdown a {
|
||||
padding: 8px 20px;
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
|
||||
.umb-language-picker__dropdown a:hover,
|
||||
.umb-language-picker__dropdown a:focus {
|
||||
background: @gray-10;
|
||||
text-decoration: none;
|
||||
}
|
||||
@@ -3,41 +3,215 @@
|
||||
*/
|
||||
|
||||
.umb-editor-wrapper {
|
||||
background: @white;
|
||||
background: @gray-10;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
> form {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.umb-split-views {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
> form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.umb-editor-header {
|
||||
background: @gray-10;
|
||||
border-bottom: 1px solid @purple-l3;
|
||||
flex: 0 0 99px;
|
||||
.umb-split-view {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
flex-basis: auto;
|
||||
position: relative;
|
||||
background: transparent;
|
||||
transition: flex-grow 0.4s ease-in-out;
|
||||
}
|
||||
|
||||
.umb-split-view--collapsed {
|
||||
flex-grow: 0.00001;
|
||||
}
|
||||
|
||||
.umb-split-view + .umb-split-view {
|
||||
border-left: 2px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-split-view__content {
|
||||
animation: fadein 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes fadein {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
.umb-split-view--left {
|
||||
left: 0;
|
||||
right: auto;
|
||||
border-right: 1px solid @gray-10;
|
||||
}
|
||||
|
||||
.umb-split-view--right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
// header
|
||||
|
||||
.umb-editor-header {
|
||||
background: @white;
|
||||
// flex: 1 1 60px;
|
||||
position: absolute;
|
||||
padding: 0 20px;
|
||||
z-index: 1;
|
||||
// box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.16);
|
||||
border-bottom: 1px solid @gray-9;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
height: @editorHeaderHeight;
|
||||
}
|
||||
|
||||
.umb-editor-header__back {
|
||||
color: @gray-6;
|
||||
transition: color 0.1s ease-in-out;
|
||||
}
|
||||
|
||||
.umb-editor-header__name-wrapper {
|
||||
position: relative;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.umb-editor-header__name-wrapper ng-form {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
input.umb-editor-header__name-input {
|
||||
border-color: transparent;
|
||||
background-color: @white;
|
||||
font-size: 15px;
|
||||
color: @black;
|
||||
margin-bottom: 0;
|
||||
font-weight: bold;
|
||||
box-sizing: border-box;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
width: 100%;
|
||||
padding: 0 10px;
|
||||
background: @white;
|
||||
border: 1px solid @gray-8;
|
||||
&:hover {
|
||||
background-color: @gray-10;
|
||||
border: 1px solid @gray-8;
|
||||
}
|
||||
}
|
||||
|
||||
.umb-editor-header__actions-menu {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
a.umb-editor-header__close-split-view {
|
||||
font-size: 20px;
|
||||
color: @gray-6;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
a.umb-editor-header__close-split-view:hover {
|
||||
color: @black;
|
||||
}
|
||||
|
||||
/* variant switcher */
|
||||
.umb-variant-switcher__toggle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
text-decoration: none !important;
|
||||
font-size: 13px;
|
||||
color: @gray-4;
|
||||
background-color: @white;
|
||||
border: 1px solid @gray-8;
|
||||
border-left: none;
|
||||
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
|
||||
margin-left: -1px;
|
||||
&:hover {
|
||||
background-color: @gray-10;
|
||||
}
|
||||
}
|
||||
|
||||
.umb-variant-switcher__expand {
|
||||
color: @gray-7;
|
||||
margin-top: 3px;
|
||||
margin-left: 5px;
|
||||
margin-right: -5px;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.umb-variant-switcher_item--current .umb-variant-switcher__name-wrapper {
|
||||
background-color: @gray-10;
|
||||
border-left: 2px solid @turquoise;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__item:hover,
|
||||
.umb-variant-switcher__item:focus,
|
||||
.umb-variant-switcher__name-wrapper:hover,
|
||||
.umb-variant-switcher__name-wrapper:focus {
|
||||
background-color: @gray-10;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__item:hover .umb-variant-switcher__split-view {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__name-wrapper {
|
||||
font-size: 14px;
|
||||
flex: 1;
|
||||
cursor: pointer;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
border-left: 2px solid transparent;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__name {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__state {
|
||||
font-size: 13px;
|
||||
color: @gray-4;
|
||||
}
|
||||
|
||||
.umb-variant-switcher__split-view {
|
||||
font-size: 13px;
|
||||
display: none;
|
||||
padding: 8px 20px;
|
||||
}
|
||||
|
||||
// container
|
||||
|
||||
.umb-editor-container {
|
||||
position: relative;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
top: @editorHeaderHeight;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
bottom: @editorFooterHeight;
|
||||
left: 0;
|
||||
overflow: auto;
|
||||
flex: 1 1 100%;
|
||||
background: @gray-10;
|
||||
}
|
||||
|
||||
.umb-editor-wrapper.-no-footer .umb-editor-container {
|
||||
@@ -48,15 +222,6 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.umb-editor-drawer {
|
||||
margin: 0;
|
||||
padding: 10px 20px;
|
||||
background: @gray-10;
|
||||
border-top: 1px solid @purple-l3;
|
||||
flex: 1 0 31px;
|
||||
}
|
||||
|
||||
|
||||
.umb-editor-actions{
|
||||
list-style: none;
|
||||
margin: 0; padding: 0;
|
||||
@@ -65,3 +230,35 @@
|
||||
.umb-editor-actions li{
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
// editor footer
|
||||
|
||||
.umb-editor-footer {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
height: @editorFooterHeight;
|
||||
padding: 10px 20px;
|
||||
background: @white;
|
||||
// box-shadow: 0 -1px 3px 0 rgba(0, 0, 0, 0.16);
|
||||
border-top: 1px solid @gray-9;
|
||||
z-index: 1;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.umb-editor-footer-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.umb-editor-footer-content__right-side {
|
||||
margin-left: auto;
|
||||
flex: 0 0 auto;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.umb-editor-footer-content__left-side {
|
||||
margin-right: auto;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
+11
-19
@@ -1,20 +1,20 @@
|
||||
.umb-editor-sub-header {
|
||||
padding: 15px 0;
|
||||
margin-bottom: 30px;
|
||||
background: @white;
|
||||
padding: 10px 0;
|
||||
margin-bottom: 10px;
|
||||
background: @gray-10;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: -30px;
|
||||
margin-top: -20px;
|
||||
position: relative;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.umb-editor-sub-header.-umb-sticky-bar {
|
||||
box-shadow: 0 5px 0 rgba(0, 0, 0, 0.08), 0 1px 0 rgba(0, 0, 0, 0.16);
|
||||
transition: box-shadow 1s;
|
||||
top: 100px; /* height of header */
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
box-shadow: 0 6px 3px -3px rgba(0,0,0,.16);
|
||||
transition: box-shadow 1s;
|
||||
top: calc(@appHeaderHeight + @editorHeaderHeight);
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.umb-group-builder__property-preview .umb-editor-sub-header {
|
||||
@@ -36,24 +36,16 @@
|
||||
}
|
||||
|
||||
.umb-editor-sub-header__section {
|
||||
border-left: 1px solid @gray-8;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.umb-editor-sub-header__content-left .umb-editor-sub-header__section:first-child {
|
||||
border-left: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.umb-editor-sub-header__content-right .umb-editor-sub-header__section {
|
||||
border-left: none;
|
||||
border-right: 1px solid @gray-8;
|
||||
}
|
||||
|
||||
.umb-editor-sub-header__content-right .umb-editor-sub-header__section:last-child {
|
||||
border-right: none;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
.umb-alert {
|
||||
padding: 15px;
|
||||
box-sizing: border-box;
|
||||
background-color: @turquoise-washed;
|
||||
border: 1px solid @turquoise;
|
||||
}
|
||||
|
||||
.umb-alert--info {
|
||||
background-color: @turquoise-washed;
|
||||
border: 1px solid @turquoise;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
.umb-expansion-panel {
|
||||
//border: 1px solid @gray-8;
|
||||
background: @white;
|
||||
border-radius: 3px;
|
||||
margin-bottom: 16px;
|
||||
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.16);
|
||||
}
|
||||
|
||||
.umb-expansion-panel__header {
|
||||
padding: 10px 20px;
|
||||
font-weight: bold;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
justify-content: space-between;
|
||||
color: @black;
|
||||
}
|
||||
|
||||
.umb-expansion-panel__expand {
|
||||
color: @gray-8;
|
||||
}
|
||||
|
||||
.umb-expansion-panel__content {
|
||||
padding: 20px;
|
||||
border-top: 1px solid @gray-9;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
.umb-notifications {
|
||||
z-index: 1000;
|
||||
position: absolute;
|
||||
bottom: 52px;
|
||||
bottom: @editorFooterHeight;
|
||||
left: 0;
|
||||
right: 0;
|
||||
border-bottom: none;
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
/* ---------- OVERLAY RIGHT ---------- */
|
||||
.umb-overlay.umb-overlay-right {
|
||||
width: 500px;
|
||||
top: 0;
|
||||
top: @appHeaderHeight;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
border: none;
|
||||
@@ -128,7 +128,7 @@
|
||||
/* ---------- OVERLAY LEFT ---------- */
|
||||
.umb-overlay.umb-overlay-left {
|
||||
width: 500px;
|
||||
top: 0;
|
||||
top: @appHeaderHeight;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
border: none;
|
||||
|
||||
@@ -1,61 +1,63 @@
|
||||
.umb-badge {
|
||||
padding: 6px 8px;
|
||||
margin: 0 5px 0 0;
|
||||
color: @black;
|
||||
background-color: @turquoise-washed;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: @turquoise;
|
||||
color: @gray-4;
|
||||
background-color: @gray-8;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 100px;
|
||||
}
|
||||
|
||||
// Colors
|
||||
.umb-badge--primary {
|
||||
background-color: @turquoise-washed;
|
||||
border-color: @turquoise;
|
||||
background-color: @turquoise;
|
||||
color: @white;
|
||||
}
|
||||
|
||||
.umb-badge--secondary {
|
||||
background-color: @purple-washed;
|
||||
border-color: @purple;
|
||||
background-color: @purple;
|
||||
color: @white;
|
||||
}
|
||||
|
||||
.umb-badge--gray {
|
||||
background-color: @gray-10;
|
||||
border-color: @gray-8;
|
||||
background-color: @gray-8;
|
||||
color: @gray-4;
|
||||
}
|
||||
|
||||
.umb-badge--danger {
|
||||
background-color: @red-washed;
|
||||
border-color: @red;
|
||||
background-color: @red-l1;
|
||||
color: @white;
|
||||
}
|
||||
|
||||
.umb-badge--warning {
|
||||
background-color: @yellow-washed;
|
||||
border-color: @yellow;
|
||||
background-color: @yellow-d1;
|
||||
color: @white;
|
||||
}
|
||||
|
||||
.umb-badge--success {
|
||||
background-color: @green-washed;
|
||||
border-color: @green;
|
||||
background-color: @green;
|
||||
color: @white;
|
||||
}
|
||||
|
||||
// Size
|
||||
.umb-badge--xxs {
|
||||
font-size: 11px;
|
||||
padding: 0 7px;
|
||||
}
|
||||
|
||||
.umb-badge--xs {
|
||||
font-size: 13px;
|
||||
padding: 1px 6px;
|
||||
padding: 1px 10px;
|
||||
}
|
||||
|
||||
.umb-badge--s {
|
||||
font-size: 14px;
|
||||
padding: 3px 6px;
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
.umb-badge--m {
|
||||
font-size: 16px;
|
||||
padding: 6px 8px;
|
||||
padding: 6px 12px;
|
||||
}
|
||||
|
||||
.umb-badge--l {
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
.umb-box {
|
||||
border: 1px solid @gray-8;
|
||||
background: @white;
|
||||
border-radius: 3px;
|
||||
margin-bottom: 30px;
|
||||
margin-bottom: 8px;
|
||||
box-shadow: 0 1px 1px 0 rgba(0,0,0,.16);
|
||||
}
|
||||
|
||||
.umb-box-header {
|
||||
padding: 10px 20px;
|
||||
background-color: @gray-10;
|
||||
border-bottom: 1px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-box-header-title {
|
||||
font-size: 16px;
|
||||
font-size: 15px;
|
||||
color: @black;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
.umb-content-grid {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
grid-template-rows: auto;
|
||||
grid-gap: 15px;
|
||||
}
|
||||
|
||||
.umb-content-grid__item {
|
||||
background: @gray-10;
|
||||
background: @white;
|
||||
flex: 0 1 200px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
margin: 10px;
|
||||
//margin: 10px;
|
||||
user-select: none;
|
||||
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.umb-content-grid__item.-selected {
|
||||
@@ -19,7 +21,6 @@
|
||||
}
|
||||
|
||||
.umb-content-grid__icon-container {
|
||||
background: @gray-9;
|
||||
height: 75px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -29,8 +30,9 @@
|
||||
.umb-content-grid__icon,
|
||||
.umb-content-grid__icon[class^="icon-"],
|
||||
.umb-content-grid__icon[class*=" icon-"] {
|
||||
font-size: 40px;
|
||||
color: @gray-6;
|
||||
font-size: 20px;
|
||||
color: @gray-8;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.umb-content-grid__icon.-light {
|
||||
@@ -45,12 +47,10 @@
|
||||
|
||||
.umb-content-grid__item-name {
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 15px;
|
||||
color: @black;
|
||||
padding-bottom: 10px;
|
||||
line-height: 1.4em;
|
||||
border-bottom: 1px solid @gray-8;
|
||||
display: inline-block;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.umb-content-grid__item-name:hover {
|
||||
|
||||
@@ -2,14 +2,22 @@
|
||||
list-style: none;
|
||||
display: flex;
|
||||
margin: 0;
|
||||
border-left: 1px solid @gray-9;
|
||||
}
|
||||
|
||||
.umb-sub-views-nav-item {
|
||||
text-align: center;
|
||||
//margin-left: 20px;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
padding: 5px 10px;
|
||||
padding: 12px 10px 8px 10px;
|
||||
min-width: 70px;
|
||||
border-right: 1px solid @gray-9;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.umb-sub-views-nav-item:focus {
|
||||
@@ -33,8 +41,10 @@
|
||||
font-size: 24px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.umb-sub-views-nav-item-text {
|
||||
font-size: 12px;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
}
|
||||
50% {
|
||||
transform: scale(1);
|
||||
background: white;
|
||||
background: transparent;
|
||||
}
|
||||
100% {
|
||||
transform: scale(0.5);
|
||||
|
||||
@@ -328,8 +328,8 @@ a.umb-package-details__back-link {
|
||||
|
||||
.umb-package-details__main-content {
|
||||
flex: 1 1 auto;
|
||||
margin-right: 30px;
|
||||
width: calc(~'100%' - ~'@{sidebarwidth}' - ~'30px'); // Make sure that the main content area doesn't gets affected by inline styling
|
||||
margin-right: 20px;
|
||||
width: calc(~'100%' - ~'@{sidebarwidth}' - ~'20px'); // Make sure that the main content area doesn't gets affected by inline styling
|
||||
}
|
||||
|
||||
.umb-package-details__sidebar {
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
border: 1px solid @gray-8;
|
||||
background: @white;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-between;
|
||||
min-width: auto;
|
||||
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.umb-table.umb-table-inactive {
|
||||
@@ -44,7 +46,6 @@ input.umb-table__input {
|
||||
|
||||
// Table Head Styles
|
||||
.umb-table-head {
|
||||
background-color: @gray-10;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
@@ -119,9 +120,9 @@ input.umb-table__input {
|
||||
.umb-table-body__icon[class^="icon-"],
|
||||
.umb-table-body__icon[class*=" icon-"] {
|
||||
margin: 0 auto;
|
||||
font-size: 22px;
|
||||
line-height: 22px;
|
||||
color: @turquoise-d1;
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
color: @gray-7;
|
||||
}
|
||||
|
||||
.umb-table-body__checkicon,
|
||||
@@ -129,7 +130,7 @@ input.umb-table__input {
|
||||
.umb-table-body__checkicon[class*=" icon-"] {
|
||||
display: none;
|
||||
font-size: 18px;
|
||||
line-height: 22px;
|
||||
line-height: 20px;
|
||||
color: @green;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
.umb-nav-tabs {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.umb-nav-tabs.-padding-left {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.umb-tab-content {
|
||||
padding-top: 20px;
|
||||
position: relative;
|
||||
top: 22px;
|
||||
border-top: 1px solid @purple-l3;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
padding: 7px 0;
|
||||
}
|
||||
|
||||
.umb-permission--disabled {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.umb-permission:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ label.control-label, .control-label {
|
||||
padding: 0 10px 0 0 !important;
|
||||
font-weight: bold;
|
||||
color: @black;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
min-height: 100%;
|
||||
}
|
||||
.shadow {
|
||||
box-shadow: 3px 0px 7px @gray-8;
|
||||
box-shadow: 3px 0px 7px rgba(0,0,0,0.16);
|
||||
}
|
||||
|
||||
.umb-scrollable, .umb-auto-overflow {
|
||||
@@ -128,6 +128,12 @@ h5.-black {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.umb-property:last-of-type .umb-control-group {
|
||||
border: none;
|
||||
margin-bottom: 0 !important;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
/* BLOCK MODE */
|
||||
.block-form .umb-control-group {
|
||||
border-bottom: none;
|
||||
@@ -441,15 +447,6 @@ table thead a {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#search-form .form-search div {
|
||||
margin-top:3px;
|
||||
}
|
||||
#search-form .form-search div .btn {
|
||||
position:relative;
|
||||
top:0;
|
||||
left:0;
|
||||
}
|
||||
|
||||
/* DICTIONARY */
|
||||
#dictionaryItems tr {
|
||||
border-top:solid 1px @gray-8;
|
||||
|
||||
@@ -7,10 +7,12 @@
|
||||
}
|
||||
|
||||
.umb-modalcolumn-header {
|
||||
background: @gray-10;
|
||||
border-bottom: 1px solid @purple-l3;
|
||||
height: 94px;
|
||||
padding: 5px 20px 0px 20px;
|
||||
border-bottom: 1px solid @gray-9;
|
||||
height: @editorHeaderHeight;
|
||||
box-sizing: border-box;
|
||||
padding: 0 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
white-space: nowrap
|
||||
}
|
||||
|
||||
@@ -19,13 +21,12 @@
|
||||
white-space: nowrap;
|
||||
font-size: @fontSizeLarge;
|
||||
font-weight: 400;
|
||||
padding-top: 10px !important;
|
||||
}
|
||||
|
||||
.umb-modalcolumn-body {
|
||||
padding: 0px;
|
||||
background: @white;
|
||||
top: 100px;
|
||||
top: @editorHeaderHeight;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
|
||||
@@ -109,11 +109,7 @@
|
||||
}
|
||||
.nav-tabs > li > a,
|
||||
.nav-pills > li > a {
|
||||
padding-right: 8px;
|
||||
padding-left: 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 14px; // keeps the overall height an even number
|
||||
border-radius: 3px 3px 0 0;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
// TABS
|
||||
@@ -121,26 +117,24 @@
|
||||
|
||||
// Give the tabs something to sit on
|
||||
.nav-tabs {
|
||||
border-bottom: 1px solid @purple-l3;
|
||||
// border-bottom: 1px solid @gray-9;
|
||||
}
|
||||
// Make the list-items overlay the bottom border
|
||||
.nav-tabs > li {
|
||||
margin-bottom: -1px;
|
||||
// margin-bottom: -1px;
|
||||
}
|
||||
// Actual tabs (as links)
|
||||
.nav-tabs > li > a {
|
||||
color: @gray-3;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 4px;
|
||||
line-height: @baseLineHeight;
|
||||
border: 1px solid transparent;
|
||||
border-bottom: 2px solid transparent;
|
||||
padding-bottom: 15px;
|
||||
|
||||
&:hover {
|
||||
color: @black;
|
||||
}
|
||||
&:hover,
|
||||
&:focus {
|
||||
border-color: transparent transparent @purple-l3;
|
||||
// border-color: transparent transparent @purple-l3;
|
||||
}
|
||||
}
|
||||
// Active state, and it's :hover/:focus to override normal :hover/:focus
|
||||
@@ -148,9 +142,7 @@
|
||||
.nav-tabs > .active > a:hover,
|
||||
.nav-tabs > .active > a:focus {
|
||||
color: @black;
|
||||
background-color: @bodyBackground;
|
||||
border: 1px solid @purple-l3;
|
||||
border-bottom-color: transparent;
|
||||
border-bottom-color: @turquoise;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
@@ -175,10 +167,6 @@
|
||||
.show-validation .nav-tabs > li.active.error > a:focus {
|
||||
}
|
||||
|
||||
.umb-nav-tabs {
|
||||
margin: -8px 0 0 0;
|
||||
}
|
||||
|
||||
// PILLS
|
||||
// -----
|
||||
|
||||
@@ -244,9 +232,9 @@
|
||||
|
||||
// DROPDOWNS
|
||||
// ---------
|
||||
|
||||
.dropdown-menu {
|
||||
border-radius: 0;
|
||||
border-radius: @dropdownBorderRadius;
|
||||
box-shadow: 0 5px 20px rgba(0,0,0,.3);
|
||||
}
|
||||
|
||||
// fix dropdown with checkbox + long text in label
|
||||
|
||||
@@ -356,8 +356,6 @@
|
||||
.umb-panel-header-content-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 99px;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.umb-panel-header-content {
|
||||
@@ -372,15 +370,10 @@
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.umb-panel-header-left-side.-top-position {
|
||||
position: relative;
|
||||
top: -12px;
|
||||
}
|
||||
|
||||
.umb-panel-header-icon {
|
||||
cursor: pointer;
|
||||
margin-right: 5px;
|
||||
height: 55px;
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -388,7 +381,7 @@
|
||||
border: 1px solid @gray-8;
|
||||
animation: fadeIn 0.5s;
|
||||
border-radius: 3px;
|
||||
width: 55px;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.umb-panel-header-title-wrapper {
|
||||
@@ -425,7 +418,7 @@
|
||||
}
|
||||
|
||||
.umb-panel-header-icon .icon {
|
||||
font-size: 35px;
|
||||
font-size: 30px;
|
||||
color: @gray-7;
|
||||
}
|
||||
|
||||
@@ -435,26 +428,6 @@
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.umb-panel-header .umb-nav-tabs {
|
||||
bottom: -1px;
|
||||
}
|
||||
|
||||
input.umb-panel-header-name-input {
|
||||
border-color: @gray-8;
|
||||
font-size: 15px;
|
||||
color: @black;
|
||||
margin-bottom: 0;
|
||||
font-weight: bold;
|
||||
box-sizing: border-box;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
width: 100%;
|
||||
&:hover {
|
||||
background: @white;
|
||||
border: 1px solid @gray-7;
|
||||
}
|
||||
}
|
||||
|
||||
input.umb-panel-header-name-input.name-is-empty {
|
||||
border: 1px dashed @gray-8;
|
||||
background: @white;
|
||||
@@ -472,8 +445,8 @@ input.umb-panel-header-description {
|
||||
margin-bottom: 0;
|
||||
font-size: 13px;
|
||||
box-sizing: border-box;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
height: 22px;
|
||||
line-height: 22px;
|
||||
width: 100%;
|
||||
&:hover {
|
||||
background: @white;
|
||||
@@ -483,24 +456,7 @@ input.umb-panel-header-description {
|
||||
|
||||
.umb-panel-header-locked-description {
|
||||
font-size: 12px;
|
||||
margin-left: 2px;
|
||||
margin-top: 3px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.umb-editor-drawer-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.umb-editor-drawer-content__right-side {
|
||||
margin-left: auto;
|
||||
flex: 0 0 auto;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.umb-editor-drawer-content__left-side {
|
||||
margin-right: auto;
|
||||
padding-right: 10px;
|
||||
margin-top: 2px;
|
||||
height: 22px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
@@ -3,184 +3,113 @@
|
||||
|
||||
ul.sections {
|
||||
margin: 0;
|
||||
display: block;
|
||||
background: @purple;
|
||||
height: 100%;
|
||||
width: 80px;
|
||||
border-right: 1px solid @purple-d1;
|
||||
display: flex;
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
ul.sections li {
|
||||
display: block;
|
||||
border-left: 4px @purple solid;
|
||||
-webkit-transition: all .3s linear;
|
||||
-moz-transition: all .3s linear;
|
||||
transition: all .3s linear;
|
||||
ul.sections>li {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0 20px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul.sections li [class^="icon-"],
|
||||
ul.sections li [class*=" icon-"],
|
||||
ul.sections li img.icon-section {
|
||||
font-size: 30px;
|
||||
display: inline-block;
|
||||
margin: 1px 0 0 0;
|
||||
color: @purple-l2;
|
||||
-webkit-transition: all .3s linear;
|
||||
-moz-transition: all .3s linear;
|
||||
transition: all .3s linear;
|
||||
|
||||
&, &:before {
|
||||
line-height: 20px !important; /* set line-height to ensure all icons use same line-height */
|
||||
}
|
||||
}
|
||||
|
||||
ul.sections:hover li [class^="icon-"],
|
||||
ul.sections:hover li [class*=" icon-"],
|
||||
ul.sections:hover li img.icon-section {
|
||||
ul.sections>li>a {
|
||||
color: @white;
|
||||
}
|
||||
|
||||
ul.sections li a {
|
||||
display: block;
|
||||
height: @appHeaderHeight;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
color: @white;
|
||||
padding: 20px 4px 4px 0;
|
||||
border-bottom: 1px solid @purple-d1;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
ul.sections>li>a .section__name {
|
||||
opacity: 0.6;
|
||||
transition: opacity .1s linear;
|
||||
}
|
||||
|
||||
ul.sections>li>a::after {
|
||||
content: "";
|
||||
height: 4px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0 0 0 -4px;
|
||||
cursor: pointer; // make sure IE10 displays pointer cursor for expand and help sections.
|
||||
}
|
||||
|
||||
ul.sections a span {
|
||||
font-size: 11px;
|
||||
line-height: 1.4em;
|
||||
background-color: @turquoise;
|
||||
position: absolute;
|
||||
bottom: -4px;
|
||||
border-radius: 3px 3px 0 0;
|
||||
opacity: 0;
|
||||
-webkit-transition: all .3s linear;
|
||||
-moz-transition: all .3s linear;
|
||||
transition: all .3s linear;
|
||||
display: block;
|
||||
padding: 0 2px;
|
||||
transition: all .2s linear;
|
||||
}
|
||||
|
||||
ul.sections:hover a span {
|
||||
opacity: 1
|
||||
ul.sections>li.current>a::after {
|
||||
opacity: 1;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
|
||||
// Avatar, Section & Help icons
|
||||
// -------------------------
|
||||
|
||||
ul.sections li.avatar {
|
||||
height: 75px;
|
||||
padding: 22px 0 2px 0;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid @purple-d1;
|
||||
}
|
||||
|
||||
ul.sections li.avatar a {
|
||||
padding: 0;
|
||||
border: none
|
||||
}
|
||||
|
||||
ul.sections li.avatar a div {
|
||||
border-radius: 50%;
|
||||
width: 30px;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
ul.sections li.avatar a span {
|
||||
ul.sections>li.current>a .section__name,
|
||||
ul.sections>li>a:hover .section__name,
|
||||
ul.sections>li>a:focus .section__name {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.faded ul.sections li {
|
||||
opacity: 0.4
|
||||
}
|
||||
|
||||
ul.sections li.current {
|
||||
background-color: @purple-d1;
|
||||
}
|
||||
|
||||
ul.sections li.current,
|
||||
ul.sections li:hover {
|
||||
border-left: 4px @turquoise-d1 solid;
|
||||
}
|
||||
/* Sections tray */
|
||||
|
||||
ul.sections li.avatar.current,
|
||||
ul.sections li.avatar:hover {
|
||||
border-left: 4px @purple solid;
|
||||
}
|
||||
|
||||
ul.sections li.current a{
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
ul.sections li.current [class^="icon-"],
|
||||
ul.sections li.current [class*=" icon-"],
|
||||
ul.sections li.current img.icon-section {
|
||||
color: @white;
|
||||
}
|
||||
|
||||
ul.sections li.help {
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
width: calc(100% - 5px); //subtract 4px orange border + 1px border-right for sections
|
||||
}
|
||||
|
||||
ul.sections li.help a {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
@media (max-width: 500px) {
|
||||
ul.sections li [class^="icon-"],
|
||||
ul.sections li [class*=" icon-"] {
|
||||
font-size: 25px;
|
||||
}
|
||||
ul.sections li:not(.avatar) a {
|
||||
padding-top: 12px;
|
||||
padding-bottom: 6px;
|
||||
|
||||
.icon, .icon-section {
|
||||
display: inline-block;
|
||||
padding-left: 2px;
|
||||
}
|
||||
}
|
||||
ul.sections a span {
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
|
||||
// Section slide-out tray for additional apps
|
||||
// -------------------------
|
||||
li.expand a, li.expand{border: none !important;}
|
||||
|
||||
li.expand {
|
||||
> a > i.icon {
|
||||
transition: all .3s linear;
|
||||
}
|
||||
|
||||
&.open > a > i.icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
ul.sections>li.expand i {
|
||||
height: 5px;
|
||||
width: 5px;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
display: inline-block;
|
||||
margin: 0 5px 0 0;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
ul.sections-tray {
|
||||
padding-top: 99px;
|
||||
width: 80px;
|
||||
|
||||
& > li:first-child > a {
|
||||
border-top: 1px solid @purple-d1;
|
||||
}
|
||||
|
||||
& > li {
|
||||
// 5px (instead of 4px) because of vertical border
|
||||
border-left-width: 5px;
|
||||
|
||||
&.current, &:hover {
|
||||
border-left-width: 5px;
|
||||
}
|
||||
}
|
||||
position: absolute;
|
||||
top: @appHeaderHeight;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
background: @purple;
|
||||
z-index: 10000;
|
||||
border-radius: 0 0 3px 3px;
|
||||
}
|
||||
|
||||
ul.sections-tray>li>a {
|
||||
padding: 8px 24px;
|
||||
color: @white;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul.sections-tray>li>a::after {
|
||||
content: "";
|
||||
width: 4px;
|
||||
height: 100%;
|
||||
background-color: @turquoise;
|
||||
position: absolute;
|
||||
border-radius: 0 3px 3px 0;
|
||||
opacity: 0;
|
||||
transition: all .2s linear;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
ul.sections-tray>li.current>a::after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
ul.sections-tray>li>a .section__name {
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
ul.sections-tray>li>a:hover .section__name {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@@ -13,22 +13,20 @@ table {
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
table thead {
|
||||
background-color: @gray-10;
|
||||
}
|
||||
|
||||
|
||||
// BASELINE STYLES
|
||||
// ---------------
|
||||
|
||||
.table {
|
||||
width: 100%;
|
||||
margin-bottom: @baseLineHeight;
|
||||
border: 1px solid @gray-8;
|
||||
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16);
|
||||
background: @tableBackground;
|
||||
border-radius: @baseBorderRadius;
|
||||
font-size: 14px;
|
||||
// Cells
|
||||
th,
|
||||
td {
|
||||
padding: 10px 8px;
|
||||
padding: 10px 20px;
|
||||
line-height: @baseLineHeight;
|
||||
text-align: left;
|
||||
border-top: 1px solid @tableBorder;
|
||||
@@ -38,6 +36,9 @@ table thead {
|
||||
}
|
||||
// Bottom align for column headings
|
||||
thead th {
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
color: @gray-3;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
// Remove top border from thead by default
|
||||
|
||||
@@ -119,8 +119,10 @@
|
||||
|
||||
.umb-tree div > a.umb-options {
|
||||
visibility: hidden;
|
||||
flex: 1 0 auto;
|
||||
flex: 0 0 auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.umb-tree div:hover > a.umb-options {
|
||||
visibility: visible;
|
||||
}
|
||||
@@ -157,8 +159,9 @@
|
||||
|
||||
.umb-tree li > div a:not(.umb-options) {
|
||||
padding: 6px 0;
|
||||
display: flex;
|
||||
flex: 1 1 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.umb-tree li > div:hover a:not(.umb-options) {
|
||||
|
||||
@@ -124,9 +124,13 @@
|
||||
|
||||
// Scaffolding
|
||||
// -------------------------
|
||||
@bodyBackground: @white;
|
||||
@appHeaderHeight: 55px;
|
||||
@bodyBackground: @gray-10;
|
||||
@textColor: @gray-2;
|
||||
|
||||
@editorHeaderHeight: 70px;
|
||||
@editorFooterHeight: 50px;
|
||||
|
||||
|
||||
// Links
|
||||
// -------------------------
|
||||
@@ -171,10 +175,10 @@
|
||||
|
||||
// Tables
|
||||
// -------------------------
|
||||
@tableBackground: transparent; // overall background-color
|
||||
@tableBackground: @white; // overall background-color
|
||||
@tableBackgroundAccent: @gray-10; // for striping
|
||||
@tableBackgroundHover: @gray-10; // for hover
|
||||
@tableBorder: @gray-8; // table and cell border
|
||||
@tableBorder: @gray-9; // table and cell border
|
||||
|
||||
// Buttons
|
||||
// -------------------------
|
||||
@@ -223,7 +227,8 @@
|
||||
// Dropdowns
|
||||
// -------------------------
|
||||
@dropdownBackground: @white;
|
||||
@dropdownBorder: @gray-8;
|
||||
@dropdownBorder: none;
|
||||
@dropdownBorderRadius: @baseBorderRadius;
|
||||
@dropdownDividerTop: @gray-8;
|
||||
@dropdownDividerBottom: @white;
|
||||
|
||||
|
||||
@@ -1,51 +1,41 @@
|
||||
<div ng-controller="Umbraco.DashboardController">
|
||||
|
||||
<umb-load-indicator ng-if="page.loading"></umb-load-indicator>
|
||||
<form name="dashboardForm" val-form-manager>
|
||||
|
||||
<form
|
||||
ng-show="!page.loading"
|
||||
class="umb-dashboard"
|
||||
val-form-manager>
|
||||
<umb-load-indicator ng-show="page.loading"></umb-load-indicator>
|
||||
|
||||
<umb-editor-view
|
||||
footer="false"
|
||||
umb-tabs>
|
||||
<div class="umb-dashboard" ng-if="!page.loading">
|
||||
|
||||
<umb-editor-header
|
||||
name="dashboard.name"
|
||||
name-locked="page.nameLocked"
|
||||
tabs="dashboard.tabs"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true">
|
||||
</umb-editor-header>
|
||||
<div class="umb-dashboard__header" ng-show="dashboard.tabs.length > 1">
|
||||
<umb-tabs-nav ng-if="dashboard.tabs" model="dashboard.tabs" style="margin-bottom: 0;"></umb-tabs-nav>
|
||||
</div>
|
||||
|
||||
<umb-editor-container>
|
||||
<div class="umb-dashboard__content">
|
||||
|
||||
<umb-tabs-content view="true">
|
||||
<umb-tab id="tab{{tab.id}}" ng-repeat="tab in dashboard.tabs" rel="{{tab.id}}">
|
||||
<umb-tabs-content view="true">
|
||||
<umb-tab id="tab{{tab.id}}" ng-repeat="tab in dashboard.tabs" rel="{{tab.id}}">
|
||||
|
||||
<div ng-repeat="property in tab.properties" ng-switch on="property.serverSide">
|
||||
|
||||
<div class="clearfix" ng-switch-when="false">
|
||||
<h3 ng-show="property.caption">{{property.caption}}</h3>
|
||||
<div ng-include="property.path"></div>
|
||||
</div>
|
||||
|
||||
<div class="umb-dashboard-control clearfix" ng-switch-when="true">
|
||||
<h3 ng-show="property.caption">{{property.caption}}</h3>
|
||||
<iframe ng-src="dashboard/usercontrolproxy.aspx?ctrl={{ property.path}}"></iframe>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</umb-tab>
|
||||
</umb-tabs-content>
|
||||
|
||||
<div ng-repeat="property in tab.properties" ng-switch on="property.serverSide">
|
||||
</div>
|
||||
|
||||
<div class="span12 clearfix" ng-switch-when="false">
|
||||
<h3 ng-show="property.caption">{{property.caption}}</h3>
|
||||
<div ng-include="property.path"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="span12 umb-dashboard-control clearfix" ng-switch-when="true">
|
||||
<h3 ng-show="property.caption">{{property.caption}}</h3>
|
||||
|
||||
<iframe ng-src="dashboard/usercontrolproxy.aspx?ctrl={{ property.path}}"></iframe>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</umb-tab>
|
||||
</umb-tabs-content>
|
||||
|
||||
</umb-editor-container>
|
||||
|
||||
</umb-editor-view>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
+8
@@ -3,6 +3,14 @@ angular.module("umbraco").controller("Umbraco.Notifications.ConfirmRouteChangeCo
|
||||
function ($scope, $location, $log, notificationsService) {
|
||||
|
||||
$scope.discard = function(not){
|
||||
|
||||
// allow for a callback for discard click
|
||||
if(not.args.onDiscard) {
|
||||
not.args.onDiscard()
|
||||
return;
|
||||
}
|
||||
|
||||
// when no callback is added run the normal functionality of the discard button
|
||||
not.args.listener();
|
||||
|
||||
$location.search("");
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
<div>
|
||||
|
||||
<div class="umb-app-header">
|
||||
|
||||
<umb-sections
|
||||
ng-if="authenticated"
|
||||
sections="sections">
|
||||
</umb-sections>
|
||||
|
||||
<div class="flex items-center">
|
||||
<ul class="umb-app-header__actions">
|
||||
<li class="umb-app-header__action">
|
||||
<a href="#" hotkey="ctrl+space" ng-click="searchClick()" prevent-default style="font-size: 20px;">
|
||||
<i class="icon-search"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li data-element="section-help" class="umb-app-header__action">
|
||||
<a href="#" hotkey="ctrl+shift+h" ng-click="helpClick()" prevent-default>
|
||||
<i class="icon-help-alt"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<a href="#" ng-click="avatarClick()" hotkey="ctrl+shift+u" title="{{user.name}}" prevent-default>
|
||||
<umb-avatar
|
||||
size="xxs"
|
||||
color="secondary"
|
||||
name="{{user.name}}"
|
||||
img-src="{{avatar[0].value}}"
|
||||
img-srcset="{{avatar[1].value}} 2x, {{avatar[2].value}} 3x">
|
||||
</umb-avatar>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<umb-overlay
|
||||
data-element="overlay-user"
|
||||
ng-if="userDialog.show"
|
||||
model="userDialog"
|
||||
view="userDialog.view"
|
||||
position="right">
|
||||
</umb-overlay>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,88 +1,33 @@
|
||||
<div id="leftcolumn" ng-controller="Umbraco.NavigationController"
|
||||
ng-mouseleave="leaveTree($event)" ng-mouseenter="enterTree($event)">
|
||||
|
||||
<umb-sections sections="sections" ng-if="authenticated">
|
||||
</umb-sections>
|
||||
<div id="leftcolumn" ng-controller="Umbraco.NavigationController" ng-mouseleave="leaveTree($event)" ng-mouseenter="enterTree($event)">
|
||||
|
||||
<!-- navigation container -->
|
||||
<div id="navigation" ng-show="showNavigation" class="fill umb-modalcolumn" ng-animate="'slide'" nav-resize>
|
||||
|
||||
<div ng-swipe-left="nav.hideNavigation()" class="navigation-inner-container span6">
|
||||
<div ng-swipe-left="nav.hideNavigation()" class="navigation-inner-container">
|
||||
|
||||
<!-- the search -->
|
||||
<div ng-controller="Umbraco.SearchController" ng-if="authenticated">
|
||||
|
||||
<!-- Search form -->
|
||||
<div data-element="global-search" id="search-form">
|
||||
<div class="umb-modalcolumn-header">
|
||||
|
||||
<form class="form-search" novalidate>
|
||||
<i class="icon-search"></i>
|
||||
<input data-element="global-search-field"
|
||||
type="text"
|
||||
hotkey="ctrl+space"
|
||||
id="search-field"
|
||||
ng-model="searchTerm"
|
||||
class="umb-search-field search-query search-input"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_search"
|
||||
ng-keydown="navigateResults($event)"
|
||||
no-dirty-check />
|
||||
</form>
|
||||
</div>
|
||||
<!--
|
||||
<div ng-if="currentSection === 'content'" class="umb-language-picker">
|
||||
|
||||
<div class="umb-language-picker__toggle" ng-click="toggleTreeLanguageSelector()">
|
||||
<div>English (United States)</div>
|
||||
<ins class="umb-language-picker__expand" ng-class="{'icon-navigation-down': !treeLanguageSelectorIsOpen, 'icon-navigation-up': treeLanguageSelectorIsOpen}" class="icon-navigation-right"> </ins>
|
||||
</div>
|
||||
|
||||
<!-- Search results -->
|
||||
<div id="search-results" class="umb-modalcolumn-body" ng-show="showSearchResults">
|
||||
|
||||
<umb-load-indicator ng-if="isSearching"></umb-load-indicator>
|
||||
|
||||
<umb-empty-state ng-if="!hasResults && !isSearching"
|
||||
position="center">
|
||||
<localize key="general_searchNoResult"></localize>
|
||||
</umb-empty-state>
|
||||
|
||||
<ul class="umb-tree" ng-if="!isSearching && hasResults">
|
||||
<li class="root">
|
||||
<div>
|
||||
<h5 class="umb-tree-header"><localize key="general_searchResults">Search results</localize></h5>
|
||||
</div>
|
||||
|
||||
<div class="umb-search-group" ng-repeat="(key, group) in groups">
|
||||
<h6 class="umb-tree-header">{{key}}</h6>
|
||||
<ul>
|
||||
<li ng-repeat="result in group.results" ng-class="{'current':selectedItem == result}">
|
||||
<div class="umb-search-group-item">
|
||||
<a class="umb-search-group-item-link" ng-class="{'first':$first}" ng-click="searchHide()" ng-href="#/{{result.editorPath}}">
|
||||
|
||||
<div class="umb-search-group-item-name">
|
||||
<i class="icon umb-tree-icon sprTree {{result.icon}}"></i>
|
||||
{{result.name}}
|
||||
</div>
|
||||
|
||||
<small class="search-subtitle" ng-show="result.subTitle">
|
||||
{{result.subTitle}}
|
||||
</small>
|
||||
</a>
|
||||
|
||||
<a href ng-hide="!result.menuUrl" ng-click="searchShowMenu($event, {node: result})" class="umb-options"><i></i><i></i><i></i></a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<div class="umb-language-picker__dropdown" ng-if="treeLanguageSelectorIsOpen">
|
||||
<a href="">Spanish (Spain)</a>
|
||||
<a href="">French (France)</a>
|
||||
<a href="">Danish</a>
|
||||
<a href="">German (Germany)</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!-- the tree -->
|
||||
<div id="tree" class="umb-modalcolumn-body" ng-if="authenticated">
|
||||
<umb-tree cachekey="_"
|
||||
eventhandler="treeEventHandler"
|
||||
section="{{currentSection}}">
|
||||
<div id="tree" ng-if="authenticated">
|
||||
<umb-tree
|
||||
cachekey="_"
|
||||
eventhandler="treeEventHandler"
|
||||
section="{{currentSection}}">
|
||||
</umb-tree>
|
||||
</div>
|
||||
</div>
|
||||
@@ -91,18 +36,17 @@
|
||||
|
||||
<!-- The context menu -->
|
||||
<div id='contextMenu' class="umb-modalcolumn fill shadow" ng-swipe-left="nav.hideMenu()" ng-show="showContextMenu" ng-animate="'slide'">
|
||||
<umb-context-menu menu-dialog-title="{{menuDialogTitle}}"
|
||||
current-section="{{currentSection}}"
|
||||
current-node="menuNode"
|
||||
menu-actions="menuActions">
|
||||
<umb-context-menu
|
||||
menu-dialog-title="{{menuDialogTitle}}"
|
||||
current-section="{{currentSection}}"
|
||||
current-node="menuNode"
|
||||
menu-actions="menuActions">
|
||||
</umb-context-menu>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Tree dialogs -->
|
||||
<div id="dialog" class='umb-modalcolumn fill shadow'
|
||||
ng-swipe-left="nav.hideDialog()"
|
||||
ng-show="showContextMenuDialog" ng-animate="'slide'">
|
||||
<div id="dialog" class='umb-modalcolumn fill shadow' ng-swipe-left="nav.hideDialog()" ng-show="showContextMenuDialog" ng-animate="'slide'">
|
||||
<div class='umb-modalcolumn-header'>
|
||||
<h1>{{menuDialogTitle}}</h1>
|
||||
</div>
|
||||
@@ -112,4 +56,4 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,70 +1,33 @@
|
||||
<div>
|
||||
<div id="applications" ng-class="{faded:stickyNavigation}">
|
||||
<ul class="sections">
|
||||
<li data-element="section-user" id="section-avatar" class="avatar">
|
||||
<a href="#" ng-click="avatarClick()" hotkey="ctrl+shift+u" title="{{user.name}}" prevent-default>
|
||||
<umb-avatar
|
||||
size="xs"
|
||||
color="secondary"
|
||||
name="{{user.name}}"
|
||||
img-src="{{avatar[0].value}}"
|
||||
img-srcset="{{avatar[1].value}} 2x, {{avatar[2].value}} 3x">
|
||||
</umb-avatar>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li data-element="section-{{section.alias}}" ng-repeat="section in sections | limitTo: maxSections" ng-class="{current: section.alias == currentSection}">
|
||||
<a href="#/{{section.alias}}"
|
||||
ng-dblclick="sectionDblClick(section)"
|
||||
ng-click="sectionClick($event, section)"
|
||||
prevent-default>
|
||||
<section-icon icon="{{section.cssclass}}"></section-icon>
|
||||
<span>{{section.name}}</span>
|
||||
<span class="section__name">{{section.name}}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li data-element="section-expand" class="expand" ng-class="{ 'open': showTray === true }" ng-show="needTray">
|
||||
<a href ng-click="trayClick()">
|
||||
<i class="icon icon-arrow-right"></i>
|
||||
</a>
|
||||
<a href ng-click="trayClick()"><i></i><i></i><i></i></a>
|
||||
|
||||
<ul id="applications-tray" class="sections-tray shadow-depth-2" ng-if="showTray" on-outside-click="trayClick()">
|
||||
<li ng-repeat="section in sections | limitTo: overflowingSections" ng-class="{current: section.alias == currentSection}">
|
||||
<a href="#/{{section.alias}}"
|
||||
ng-dblclick="sectionDblClick(section)"
|
||||
ng-click="sectionClick($event, section)"
|
||||
prevent-default>
|
||||
<span class="section__name">{{section.name}}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</li>
|
||||
|
||||
<li data-element="section-help" class="help">
|
||||
<a href class="help" hotkey="ctrl+shift+h" ng-click="helpClick()" prevent-default>
|
||||
<i class="icon-help-alt"></i>
|
||||
<span><localize key="sections_help">Help</localize></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="applications-tray" ng-show="showTray" ng-animate="trayAnimation()" style="display: none;">
|
||||
<ul class="sections sections-tray">
|
||||
<li ng-repeat="section in sections | limitTo: overflowingSections" ng-class="{current: section.alias == currentSection}">
|
||||
<a href="#/{{section.alias}}"
|
||||
ng-dblclick="sectionDblClick(section)"
|
||||
ng-click="sectionClick($event, section)"
|
||||
prevent-default>
|
||||
<section-icon icon="{{section.cssclass}}"></section-icon>
|
||||
<span>{{section.name}}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<umb-overlay
|
||||
data-element="overlay-help"
|
||||
ng-if="helpDialog.show"
|
||||
model="helpDialog"
|
||||
view="helpDialog.view"
|
||||
position="left">
|
||||
</umb-overlay>
|
||||
|
||||
<umb-overlay
|
||||
data-element="overlay-user"
|
||||
ng-if="userDialog.show"
|
||||
model="userDialog"
|
||||
view="userDialog.view"
|
||||
position="left">
|
||||
</umb-overlay>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<div ng-if="state !== 'init'" class="umb-button__overlay"></div>
|
||||
|
||||
<a ng-if="type === 'link'" href="{{href}}" class="btn umb-button__button {{style}} umb-button--{{size}}" ng-click="action(model)" hotkey="{{shortcut}}" hotkey-when-hidden="{{shortcutWhenHidden}}">
|
||||
<a ng-if="type === 'link'" href="{{href}}" class="btn umb-button__button {{style}} umb-button--{{size}}" ng-click="clickButton($event)" hotkey="{{shortcut}}" hotkey-when-hidden="{{shortcutWhenHidden}}">
|
||||
<span class="umb-button__content" ng-class="{'-hidden': state !== 'init'}">
|
||||
<i ng-if="icon" class="{{icon}} umb-button__icon"></i>
|
||||
<localize ng-if="labelKey" key="{{labelKey}}">{{label}}</localize>
|
||||
@@ -16,7 +16,7 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<button ng-if="type === 'button'" type="button" class="btn umb-button__button {{style}} umb-button--{{size}}" ng-click="action(model)" hotkey="{{shortcut}}" hotkey-when-hidden="{{shortcutWhenHidden}}" ng-disabled="disabled">
|
||||
<button ng-if="type === 'button'" type="button" class="btn umb-button__button {{style}} umb-button--{{size}}" ng-click="clickButton($event)" hotkey="{{shortcut}}" hotkey-when-hidden="{{shortcutWhenHidden}}" ng-disabled="disabled">
|
||||
<span class="umb-button__content" ng-class="{'-hidden': state !== 'init'}">
|
||||
<i ng-if="icon" class="{{icon}} umb-button__icon"></i>
|
||||
<localize ng-if="labelKey" key="{{labelKey}}">{{label}}</localize>
|
||||
|
||||
@@ -1,108 +1,96 @@
|
||||
<div>
|
||||
|
||||
<umb-load-indicator ng-if="page.loading"></umb-load-indicator>
|
||||
<umb-load-indicator ng-if="page.loading"></umb-load-indicator>
|
||||
|
||||
<form name="contentForm"
|
||||
ng-submit="save()"
|
||||
novalidate
|
||||
val-form-manager>
|
||||
<form name="contentForm" ng-submit="save()" novalidate val-form-manager>
|
||||
|
||||
<umb-editor-view ng-if="!page.loading" umb-tabs>
|
||||
|
||||
<umb-editor-header
|
||||
menu="page.menu"
|
||||
name="content.name"
|
||||
tabs="content.tabs"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container>
|
||||
<umb-tabs-content class="form-horizontal" view="true">
|
||||
|
||||
<umb-tab id="tab{{tab.id}}" ng-repeat="tab in content.tabs" rel="{{tab.id}}">
|
||||
<umb-editor-view ng-if="!page.loading">
|
||||
|
||||
<div class="umb-split-views">
|
||||
<div class="umb-split-view" ng-class="{'umb-split-view--collapsed': editor.collapsed}" ng-repeat="editor in editors">
|
||||
|
||||
<!-- Other tabs than info -->
|
||||
<div ng-if="tab.id !== -1 && tab.alias !== '_umb_infoTab'">
|
||||
<umb-property data-element="property-{{property.alias}}" ng-repeat="property in tab.properties" property="property">
|
||||
<umb-editor model="property"></umb-editor>
|
||||
</umb-property>
|
||||
</div>
|
||||
|
||||
<!-- Info tab -->
|
||||
<div ng-if="tab.id === -1 && tab.alias === '_umb_infoTab'">
|
||||
<umb-content-node-info
|
||||
ng-if="content"
|
||||
node="content">
|
||||
</umb-content-node-info>
|
||||
<umb-load-indicator
|
||||
ng-if="editor.loading">
|
||||
</umb-load-indicator>
|
||||
|
||||
<div class="umb-split-view__content" ng-if="!editor.loading">
|
||||
<umb-editor-header
|
||||
menu="page.menu"
|
||||
name="editor.content.name"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true"
|
||||
navigation="editor.content.apps"
|
||||
variants="editor.content.variants"
|
||||
on-select-variant="selectVariant(variant, editor.content.variants, contentForm)"
|
||||
on-back="backToListView()"
|
||||
show-back-button="{{page.listViewPath}}"
|
||||
split-view-open="editors.length > 1"
|
||||
on-open-in-split-view="openInSplitView(variant)"
|
||||
on-close-split-view="closeSplitView($index, editor)">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container>
|
||||
<umb-editor-sub-views
|
||||
ng-if="!page.loading"
|
||||
sub-views="editor.content.apps"
|
||||
model="editor.content">
|
||||
</umb-editor-sub-views>
|
||||
</umb-editor-container>
|
||||
</div>
|
||||
|
||||
</umb-tab>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</umb-tabs-content>
|
||||
<umb-editor-footer>
|
||||
|
||||
</umb-editor-container>
|
||||
<umb-editor-footer-content-left>
|
||||
|
||||
<umb-breadcrumbs
|
||||
ng-if="ancestors && ancestors.length > 0"
|
||||
ancestors="ancestors"
|
||||
entity-type="content">
|
||||
</umb-breadcrumbs>
|
||||
|
||||
</umb-editor-footer-content-left>
|
||||
|
||||
|
||||
<umb-editor-footer>
|
||||
<umb-editor-footer-content-right>
|
||||
|
||||
<umb-editor-footer-content-left>
|
||||
<umb-button
|
||||
alias="preview"
|
||||
ng-if="!page.isNew && content.allowPreview"
|
||||
type="button"
|
||||
button-style="info"
|
||||
action="preview(content)"
|
||||
label="Preview page"
|
||||
label-key="buttons_showPage">
|
||||
</umb-button>
|
||||
|
||||
<umb-breadcrumbs
|
||||
ng-if="ancestors && ancestors.length > 0"
|
||||
ancestors="ancestors"
|
||||
entity-type="content">
|
||||
</umb-breadcrumbs>
|
||||
<umb-button-group
|
||||
ng-if="defaultButton && !content.trashed"
|
||||
default-button="defaultButton"
|
||||
sub-buttons="subButtons"
|
||||
state="page.buttonGroupState"
|
||||
direction="up"
|
||||
float="right">
|
||||
</umb-button-group>
|
||||
|
||||
</umb-editor-footer-content-left>
|
||||
|
||||
|
||||
<umb-editor-footer-content-right>
|
||||
|
||||
<umb-button
|
||||
alias="returnToListView"
|
||||
ng-if="page.listViewPath"
|
||||
type="link"
|
||||
href="#{{page.listViewPath}}"
|
||||
label="Return to list"
|
||||
label-key="buttons_returnToList">
|
||||
</umb-button>
|
||||
<umb-button
|
||||
alias="restore"
|
||||
ng-if="content.trashed"
|
||||
type="button"
|
||||
button-style="primary"
|
||||
action="restore(content)"
|
||||
state="page.buttonRestore"
|
||||
label="Restore">
|
||||
</umb-button>
|
||||
|
||||
<umb-button
|
||||
alias="preview"
|
||||
ng-if="!page.isNew && content.allowPreview"
|
||||
type="button"
|
||||
button-style="info"
|
||||
action="preview(content)"
|
||||
label="Preview page"
|
||||
label-key="buttons_showPage">
|
||||
</umb-button>
|
||||
</umb-editor-footer-content-right>
|
||||
|
||||
<umb-button-group
|
||||
ng-if="defaultButton && !content.trashed"
|
||||
default-button="defaultButton"
|
||||
sub-buttons="subButtons"
|
||||
state="page.buttonGroupState"
|
||||
direction="up"
|
||||
float="right">
|
||||
</umb-button-group>
|
||||
</umb-editor-footer>
|
||||
|
||||
<umb-button
|
||||
alias="restore"
|
||||
ng-if="content.trashed"
|
||||
type="button"
|
||||
button-style="primary"
|
||||
action="restore(content)"
|
||||
state="page.buttonRestore"
|
||||
label="Restore">
|
||||
</umb-button>
|
||||
</umb-editor-view>
|
||||
|
||||
</umb-editor-footer-content-right>
|
||||
|
||||
</umb-editor-footer>
|
||||
|
||||
</umb-editor-view>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<div class="umb-editor-drawer-content__left-side" ng-transclude></div>
|
||||
<div class="umb-editor-footer-content__left-side" ng-transclude></div>
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<div class="umb-editor-drawer-content__right-side" ng-transclude></div>
|
||||
<div class="umb-editor-footer-content__right-side" ng-transclude></div>
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<div data-element="editor-footer" class="umb-tab-buttons umb-editor-drawer">
|
||||
|
||||
<div class="umb-editor-drawer-content" ng-transclude>
|
||||
|
||||
</div>
|
||||
<div data-element="editor-footer" class="umb-editor-footer">
|
||||
|
||||
<div class="umb-editor-footer-content" ng-transclude></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,90 +1,109 @@
|
||||
<div data-element="editor-header" class="umb-editor-header umb-panel-header">
|
||||
<div data-element="editor-header" class="umb-editor-header">
|
||||
|
||||
<div class="flex items-center" style="height: 100%;">
|
||||
|
||||
<div class="umb-panel-header-content-wrapper">
|
||||
<div ng-if="showBackButton === 'true' && splitViewOpen !== true" style="margin-right: 15px;">
|
||||
<a class="umb-editor-header__back" href="#" ng-click="goBack()" prevent-default>
|
||||
<i class="fa fa-arrow-left" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="umb-panel-header-content">
|
||||
<div class="flex items-center" style="flex: 1;">
|
||||
|
||||
<div class="umb-panel-header-left-side" ng-class="{'-top-position': tabs || !icon && hideDescription}">
|
||||
|
||||
<ng-form data-element="editor-icon" name="iconForm">
|
||||
<div class="umb-panel-header-icon" ng-if="!hideIcon" ng-click="openIconPicker()" ng-class="{'-placeholder': $parent.icon==='' || $parent.icon===null}" title="{{$parent.icon}}">
|
||||
<i class="icon {{$parent.icon}}" ng-if="$parent.icon!=='' && $parent.icon!==null"></i>
|
||||
<div class="umb-panel-header-icon-text" ng-if="$parent.icon==='' || $parent.icon===null">
|
||||
<localize key="settings_addIcon"></localize>
|
||||
</div>
|
||||
</div>
|
||||
</ng-form>
|
||||
|
||||
<div class="umb-panel-header-title-wrapper">
|
||||
|
||||
<ng-form name="headerNameForm">
|
||||
<input
|
||||
data-element="editor-name-field"
|
||||
title="{{key}}"
|
||||
type="text"
|
||||
class="umb-panel-header-name-input"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_entername"
|
||||
name="headerName"
|
||||
ng-show="!nameLocked"
|
||||
ng-model="name"
|
||||
ng-class="{'name-is-empty': $parent.name===null || $parent.name===''}"
|
||||
umb-auto-focus
|
||||
val-server-field="Name"
|
||||
required />
|
||||
</ng-form>
|
||||
|
||||
<div class="umb-panel-header-name" ng-if="nameLocked" title="{{key}}">{{ name }}</div>
|
||||
|
||||
<umb-generate-alias
|
||||
data-element="editor-alias"
|
||||
class="umb-panel-header-alias"
|
||||
ng-if="!hideAlias"
|
||||
alias="$parent.alias"
|
||||
alias-from="$parent.name"
|
||||
enable-lock="true"
|
||||
server-validation-field="Alias">
|
||||
</umb-generate-alias>
|
||||
|
||||
|
||||
<input
|
||||
data-element="editor-description"
|
||||
type="text"
|
||||
class="umb-panel-header-description"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_enterDescription"
|
||||
ng-if="!hideDescription && !descriptionLocked"
|
||||
ng-model="$parent.description" />
|
||||
|
||||
<div class="umb-panel-header-locked-description" ng-show="descriptionLocked">{{ description }}</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="umb-editor-header__actions-menu">
|
||||
<umb-editor-menu
|
||||
data-element="editor-actions"
|
||||
ng-if="menu.currentNode"
|
||||
current-node="menu.currentNode"
|
||||
current-section="{{menu.currentSection}}">
|
||||
</umb-editor-menu>
|
||||
<ng-form data-element="editor-icon" name="iconForm">
|
||||
<div class="umb-panel-header-icon" ng-if="!hideIcon" ng-click="openIconPicker()" ng-class="{'-placeholder': $parent.icon==='' || $parent.icon===null}"
|
||||
title="{{$parent.icon}}">
|
||||
<i class="icon {{$parent.icon}}" ng-if="$parent.icon!=='' && $parent.icon!==null"></i>
|
||||
<div class="umb-panel-header-icon-text" ng-if="$parent.icon==='' || $parent.icon===null">
|
||||
<localize key="settings_addIcon"></localize>
|
||||
</div>
|
||||
</div>
|
||||
</ng-form>
|
||||
|
||||
<div style="flex: 1 1 auto;">
|
||||
|
||||
<div class="umb-editor-header__name-wrapper">
|
||||
<ng-form name="headerNameForm">
|
||||
<input
|
||||
data-element="editor-name-field"
|
||||
title="{{key}}"
|
||||
type="text"
|
||||
class="umb-editor-header__name-input"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_entername"
|
||||
name="headerName"
|
||||
ng-show="!nameLocked"
|
||||
ng-model="name"
|
||||
ng-class="{'name-is-empty': $parent.name===null || $parent.name===''}"
|
||||
umb-auto-focus
|
||||
val-server-field="Name"
|
||||
required />
|
||||
</ng-form>
|
||||
|
||||
<umb-generate-alias
|
||||
data-element="editor-alias"
|
||||
class="umb-panel-header-alias"
|
||||
ng-if="!hideAlias"
|
||||
alias="$parent.alias"
|
||||
alias-from="$parent.name"
|
||||
enable-lock="true"
|
||||
server-validation-field="Alias">
|
||||
</umb-generate-alias>
|
||||
|
||||
<a ng-if="variants.length > 0" class="umb-variant-switcher__toggle" href="" ng-click="vm.dropdownOpen = !vm.dropdownOpen">
|
||||
<span>{{vm.currentVariant.cultureDisplayName}}</span>
|
||||
<ins class="umb-variant-switcher__expand" ng-class="{'icon-navigation-down': !vm.dropdownOpen, 'icon-navigation-up': vm.dropdownOpen}"> </ins>
|
||||
</a>
|
||||
|
||||
<umb-dropdown ng-if="vm.dropdownOpen" style="width: 100%; max-height: 250px; overflow-y: scroll; margin-top: 5px;" on-close="vm.dropdownOpen = false" umb-keyboard-list>
|
||||
<umb-dropdown-item class="umb-variant-switcher__item" ng-class="{'umb-variant-switcher_item--current': variant.current}" ng-repeat="variant in variants">
|
||||
<a href="" class="umb-variant-switcher__name-wrapper" ng-click="selectVariant($event, variant)" prevent-default>
|
||||
<span class="umb-variant-switcher__name">{{variant.cultureDisplayName}}</span>
|
||||
<span class="umb-variant-switcher__state">{{variant.state}}</span>
|
||||
</a>
|
||||
<div ng-if="splitViewOpen !== true" class="umb-variant-switcher__split-view" ng-click="openInSplitView($event, variant)">Open in split view</div>
|
||||
</umb-dropdown-item>
|
||||
</umb-dropdown>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="umb-panel-header-name" ng-if="nameLocked" title="{{key}}">{{ name }}</div>
|
||||
|
||||
<input
|
||||
data-element="editor-description"
|
||||
type="text"
|
||||
class="umb-panel-header-description"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_enterDescription"
|
||||
ng-if="!hideDescription && !descriptionLocked"
|
||||
ng-model="$parent.description" />
|
||||
|
||||
<div class="umb-panel-header-locked-description" ng-show="descriptionLocked">{{ description }}</div>
|
||||
|
||||
</div>
|
||||
|
||||
<umb-editor-navigation
|
||||
data-element="editor-sub-views"
|
||||
ng-if="navigation"
|
||||
navigation="navigation">
|
||||
</umb-editor-navigation>
|
||||
|
||||
</div>
|
||||
|
||||
<umb-tabs-nav
|
||||
data-element="editor-tabs"
|
||||
ng-if="tabs"
|
||||
model="tabs">
|
||||
</umb-tabs-nav>
|
||||
<div ng-if="splitViewOpen" style="margin-left: 20px;">
|
||||
<a class="umb-editor-header__close-split-view" href="" ng-click="closeSplitView()">
|
||||
<i class="icon-delete"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div ng-if="navigation && splitViewOpen !== true" style="margin-left: 20px;">
|
||||
<umb-editor-navigation
|
||||
data-element="editor-sub-views"
|
||||
navigation="navigation">
|
||||
</umb-editor-navigation>
|
||||
</div>
|
||||
|
||||
<div ng-if="menu.currentNode && splitViewOpen !== true" style="margin-left: 20px;">
|
||||
<umb-editor-menu
|
||||
data-element="editor-actions"
|
||||
current-node="menu.currentNode"
|
||||
current-section="{{menu.currentSection}}">
|
||||
</umb-editor-menu>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -96,4 +115,4 @@
|
||||
view="dialogModel.view">
|
||||
</umb-overlay>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,16 +1,14 @@
|
||||
<div>
|
||||
<ul class="umb-sub-views-nav" ng-if="showNavigation">
|
||||
<li ng-repeat="item in navigation">
|
||||
<a data-element="sub-view-{{item.alias}}"
|
||||
tabindex="-1"
|
||||
class="umb-sub-views-nav-item"
|
||||
href=""
|
||||
ng-click="clickNavigationItem(item)"
|
||||
hotkey="{{$index+1}}"
|
||||
ng-class="{'is-active': item.active, '-has-error': item.hasError}">
|
||||
<i class="icon {{ item.icon }}"></i>
|
||||
<span class="umb-sub-views-nav-item-text">{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul class="umb-sub-views-nav" ng-if="showNavigation">
|
||||
<li ng-repeat="item in navigation">
|
||||
<a data-element="sub-view-{{item.alias}}"
|
||||
tabindex="-1"
|
||||
class="umb-sub-views-nav-item"
|
||||
href=""
|
||||
ng-click="clickNavigationItem(item)"
|
||||
hotkey="{{$index+1}}"
|
||||
ng-class="{'is-active': item.active, '-has-error': item.hasError}">
|
||||
<i class="icon {{ item.icon }}"></i>
|
||||
<span class="umb-sub-views-nav-item-text">{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -8,13 +8,12 @@
|
||||
|
||||
<i ng-if="item.selected" class="icon-check umb-content-grid__checkmark"></i>
|
||||
|
||||
<div class="umb-content-grid__icon-container">
|
||||
<i class="umb-content-grid__icon {{ item.icon }}" ng-class="{'-light': !item.published && item.updater != null}"></i>
|
||||
</div>
|
||||
|
||||
<div class="umb-content-grid__content">
|
||||
|
||||
<div class="umb-content-grid__item-name" ng-click="clickItemName(item, $event, $index)" ng-class="{'-light': !item.published && item.updater != null}">{{ item.name }}</div>
|
||||
<div class="umb-content-grid__item-name" ng-click="clickItemName(item, $event, $index)" ng-class="{'-light': !item.published && item.updater != null}">
|
||||
<i class="umb-content-grid__icon {{ item.icon }}"></i>
|
||||
{{ item.name }}
|
||||
</div>
|
||||
|
||||
<ul class="umb-content-grid__details-list" ng-class="{'-light': !item.published&& item.updater != null}">
|
||||
<li class="umb-content-grid__details-item" ng-repeat="property in contentProperties">
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function ContentAppContentController($scope) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
function onInit() {
|
||||
angular.forEach($scope.model.tabs, function(group){
|
||||
group.open = true;
|
||||
});
|
||||
}
|
||||
|
||||
onInit();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Content.Apps.ContentController", ContentAppContentController);
|
||||
})();
|
||||
@@ -0,0 +1,18 @@
|
||||
<div class="form-horizontal" ng-controller="Umbraco.Editors.Content.Apps.ContentController as vm">
|
||||
|
||||
<div class="umb-expansion-panel" ng-repeat="group in model.tabs | filter: { hide : '!' + true }">
|
||||
|
||||
<div class="umb-expansion-panel__header" ng-click="group.open = !group.open">
|
||||
<div>{{ group.label }}</div>
|
||||
<ins class="umb-expansion-panel__expand" ng-class="{'icon-navigation-down': !group.open, 'icon-navigation-up': group.open}" class="icon-navigation-right"> </ins>
|
||||
</div>
|
||||
|
||||
<div class="umb-expansion-panel__content" ng-show="group.open">
|
||||
<umb-property data-element="property-{{group.alias}}" ng-repeat="property in group.properties" property="property">
|
||||
<umb-editor model="property"></umb-editor>
|
||||
</umb-property>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,4 @@
|
||||
<umb-content-node-info
|
||||
ng-if="model"
|
||||
node="model">
|
||||
</umb-content-node-info>
|
||||
@@ -0,0 +1,23 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function ContentAppListViewController($scope) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
vm.listViewGroup = {};
|
||||
|
||||
function onInit() {
|
||||
angular.forEach($scope.model.tabs, function(group){
|
||||
if(group.alias === "umbContainerView") {
|
||||
vm.listViewGroup = group;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onInit();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Content.Apps.ListViewController", ContentAppListViewController);
|
||||
})();
|
||||
@@ -0,0 +1,7 @@
|
||||
<div ng-controller="Umbraco.Editors.Content.Apps.ListViewController as vm">
|
||||
|
||||
<umb-property ng-repeat="property in vm.listViewGroup.properties" property="property">
|
||||
<umb-editor model="property"></umb-editor>
|
||||
</umb-property>
|
||||
|
||||
</div>
|
||||
@@ -1,12 +1,15 @@
|
||||
<div class="umb-dialog umb-pane" ng-controller="Umbraco.Editors.Content.DeleteController">
|
||||
<div class="umb-dialog-body" auto-scale="90">
|
||||
|
||||
|
||||
<p class="umb-abstract">
|
||||
<localize key="defaultdialogs_confirmdelete">Are you sure you want to delete</localize> <strong>{{currentNode.name}}</strong> ?
|
||||
</p>
|
||||
|
||||
<umb-confirm on-confirm="performDelete" on-cancel="cancel">
|
||||
</umb-confirm>
|
||||
<div class="umb-alert umb-alert--info">
|
||||
<localize key="defaultdialogs_variantdeletewarning">This will delete the node and all its languages. If you only want to delete one language go and unpublish it instead.</localize>
|
||||
</div>
|
||||
|
||||
<umb-confirm on-confirm="performDelete" on-cancel="cancel"></umb-confirm>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -20,33 +20,38 @@
|
||||
|
||||
|
||||
<umb-editor-container class="form-horizontal">
|
||||
|
||||
<umb-box>
|
||||
|
||||
<umb-property property="properties.selectedEditor">
|
||||
<div>
|
||||
<select name="selectedEditor"
|
||||
ng-model="content.selectedEditor"
|
||||
required
|
||||
ng-options="e.alias as e.name for e in content.availableEditors"></select>
|
||||
<span class="help-inline" val-msg-for="selectedEditor" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
</div>
|
||||
<umb-box-content>
|
||||
|
||||
</umb-property>
|
||||
<umb-property property="properties.selectedEditor">
|
||||
<div>
|
||||
<select name="selectedEditor"
|
||||
ng-model="content.selectedEditor"
|
||||
required
|
||||
ng-options="e.alias as e.name for e in content.availableEditors"></select>
|
||||
<span class="help-inline" val-msg-for="selectedEditor" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
</div>
|
||||
|
||||
<umb-property property="properties.selectedEditorId">
|
||||
<div>{{content.selectedEditor}}</div>
|
||||
</umb-property>
|
||||
</umb-property>
|
||||
|
||||
<umb-property property="properties.selectedEditorId">
|
||||
<div>{{content.selectedEditor}}</div>
|
||||
</umb-property>
|
||||
|
||||
<umb-property
|
||||
property="preValue"
|
||||
ng-repeat="preValue in preValues">
|
||||
<umb-property
|
||||
property="preValue"
|
||||
ng-repeat="preValue in preValues">
|
||||
<umb-editor model="preValue" is-pre-value="true"></umb-editor>
|
||||
</umb-property>
|
||||
|
||||
</umb-box-content>
|
||||
|
||||
<umb-editor model="preValue" is-pre-value="true"></umb-editor>
|
||||
</umb-property>
|
||||
</umb-box>
|
||||
|
||||
</umb-editor-container>
|
||||
|
||||
|
||||
<umb-editor-footer>
|
||||
|
||||
<umb-editor-footer-content-right>
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function LanguagesEditController($timeout, $location, $routeParams, notificationsService, localizationService) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
vm.page = {};
|
||||
vm.language = {};
|
||||
vm.availableLanguages = [];
|
||||
vm.breadcrumbs = [];
|
||||
vm.labels = {};
|
||||
vm.initIsDefault = false;
|
||||
vm.showDefaultLanguageInfo = false;
|
||||
|
||||
vm.save = save;
|
||||
vm.back = back;
|
||||
vm.goToPage = goToPage;
|
||||
vm.toggleMandatory = toggleMandatory;
|
||||
vm.toggleDefault = toggleDefault;
|
||||
|
||||
function init() {
|
||||
|
||||
// localize labels
|
||||
var labelKeys = [
|
||||
"treeHeaders_languages",
|
||||
"languages_mandatoryLanguage",
|
||||
"languages_mandatoryLanguageHelp",
|
||||
"languages_defaultLanguage",
|
||||
"languages_defaultLanguageHelp",
|
||||
"languages_addLanguage"
|
||||
];
|
||||
|
||||
localizationService.localizeMany(labelKeys).then(function (values) {
|
||||
vm.labels.languages = values[0];
|
||||
vm.labels.mandatoryLanguage = values[1];
|
||||
vm.labels.mandatoryLanguageHelp = values[2];
|
||||
vm.labels.defaultLanguage = values[3];
|
||||
vm.labels.defaultLanguageHelp = values[4];
|
||||
vm.labels.addLanguage = values[5];
|
||||
|
||||
if($routeParams.create) {
|
||||
vm.page.name = vm.labels.addLanguage;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(!$routeParams.create) {
|
||||
|
||||
vm.loading = true;
|
||||
|
||||
// fake loading the language
|
||||
$timeout(function () {
|
||||
vm.language = {
|
||||
"name": "English (United States)",
|
||||
"culture": "en-US",
|
||||
"isDefault": false,
|
||||
"isMandatory": false
|
||||
};
|
||||
vm.page.name = vm.language.name;
|
||||
|
||||
/* we need to store the initial default state so we can disabel the toggle if it is the default.
|
||||
we need to prevent from not having a default language. */
|
||||
vm.initIsDefault = angular.copy(vm.language.isDefault);
|
||||
|
||||
vm.loading = false;
|
||||
makeBreadcrumbs();
|
||||
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
function save() {
|
||||
vm.page.saveButtonState = "busy";
|
||||
// fake saving the language
|
||||
$timeout(function(){
|
||||
vm.page.saveButtonState = "success";
|
||||
notificationsService.success(localizationService.localize("speechBubbles_languageSaved"));
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
function back() {
|
||||
$location.path("settings/languages/overview");
|
||||
}
|
||||
|
||||
function goToPage(ancestor) {
|
||||
$location.path(ancestor.path);
|
||||
}
|
||||
|
||||
function toggleMandatory() {
|
||||
if(!vm.language.isDefault) {
|
||||
vm.language.isMandatory = !vm.language.isMandatory;
|
||||
}
|
||||
}
|
||||
|
||||
function toggleDefault() {
|
||||
|
||||
// it shouldn't be possible to uncheck the default language
|
||||
if(vm.initIsDefault) {
|
||||
return;
|
||||
}
|
||||
|
||||
vm.language.isDefault = !vm.language.isDefault;
|
||||
if(vm.language.isDefault) {
|
||||
vm.language.isMandatory = true;
|
||||
vm.showDefaultLanguageInfo = true;
|
||||
} else {
|
||||
vm.showDefaultLanguageInfo = false;
|
||||
}
|
||||
}
|
||||
|
||||
function makeBreadcrumbs() {
|
||||
vm.breadcrumbs = [
|
||||
{
|
||||
"name": vm.labels.languages,
|
||||
"path": "/settings/languages/overview"
|
||||
},
|
||||
{
|
||||
"name": vm.language.name
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Languages.EditController", LanguagesEditController);
|
||||
|
||||
})();
|
||||
@@ -0,0 +1,96 @@
|
||||
<div data-element="editor-languages" ng-controller="Umbraco.Editors.Languages.EditController as vm" class="clearfix">
|
||||
|
||||
<form name="editLanguageForm" no-validate val-form-manager>
|
||||
|
||||
<umb-editor-view>
|
||||
|
||||
<umb-editor-header
|
||||
name="vm.page.name"
|
||||
name-locked="true"
|
||||
on-back="vm.back()"
|
||||
show-back-button="true"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container>
|
||||
|
||||
<umb-load-indicator ng-if="vm.loading"></umb-load-indicator>
|
||||
|
||||
<umb-box ng-if="!vm.loading" class="block-form">
|
||||
<umb-box-content>
|
||||
|
||||
<umb-control-group label="@general_language">
|
||||
<select
|
||||
class="input-block-level"
|
||||
ng-model="vm.newLanguage.culture"
|
||||
ng-options="key as value for (key, value) in vm.availableCultures">
|
||||
</select>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="@general_settings">
|
||||
|
||||
<div class="umb-permission" ng-click="vm.toggleDefault()" ng-class="{'umb-permission--disabled': vm.initIsDefault}">
|
||||
<umb-toggle
|
||||
class="umb-permission__toggle"
|
||||
checked="vm.language.isDefault">
|
||||
</umb-toggle>
|
||||
<div class="umb-permission__content" >
|
||||
<div>{{vm.labels.defaultLanguage}}</div>
|
||||
<div class="umb-permission__description">{{vm.labels.defaultLanguageHelp}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="umb-permission" ng-click="vm.toggleMandatory()" ng-class="{'umb-permission--disabled': vm.language.isDefault}">
|
||||
<umb-toggle
|
||||
class="umb-permission__toggle"
|
||||
checked="vm.language.isMandatory">
|
||||
</umb-toggle>
|
||||
<div class="umb-permission__content">
|
||||
<div>{{vm.labels.mandatoryLanguage}}</div>
|
||||
<div class="umb-permission__description">{{vm.labels.mandatoryLanguageHelp}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="umb-alert umb-alert--info" style="margin-top: 20px;" ng-if="vm.showDefaultLanguageInfo">
|
||||
<localize key="languages_changingDefaultLanguageWarning"></localize>
|
||||
</div>
|
||||
|
||||
</umb-control-group>
|
||||
|
||||
</umb-box-content>
|
||||
</umb-box>
|
||||
|
||||
</umb-editor-container>
|
||||
|
||||
<umb-editor-footer>
|
||||
|
||||
<umb-editor-footer-content-left>
|
||||
<umb-breadcrumbs
|
||||
ancestors="vm.breadcrumbs"
|
||||
allow-on-open="true"
|
||||
on-open="vm.goToPage(ancestor)">
|
||||
</umb-breadcrumbs>
|
||||
</umb-editor-footer-content-left>
|
||||
|
||||
<umb-editor-footer-content-right>
|
||||
<umb-button
|
||||
type="button"
|
||||
action="vm.save()"
|
||||
state="vm.page.saveButtonState"
|
||||
button-style="success"
|
||||
shortcut="ctrl+s"
|
||||
label="Save"
|
||||
label-key="buttons_save"
|
||||
disabled="vm.loading">
|
||||
</umb-button>
|
||||
</umb-editor-footer-content-right>
|
||||
|
||||
</umb-editor-footer>
|
||||
|
||||
</umb-editor-view>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,115 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function LanguagesOverviewController($timeout, $location, notificationsService, localizationService) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
vm.page = {};
|
||||
vm.languages = [];
|
||||
vm.labels = {};
|
||||
|
||||
vm.addLanguage = addLanguage;
|
||||
vm.editLanguage = editLanguage;
|
||||
vm.deleteLanguage = deleteLanguage;
|
||||
|
||||
function init() {
|
||||
|
||||
vm.loading = true;
|
||||
|
||||
// localize labels
|
||||
var labelKeys = [
|
||||
"treeHeaders_languages",
|
||||
"general_mandatory",
|
||||
"general_default",
|
||||
];
|
||||
|
||||
localizationService.localizeMany(labelKeys).then(function (values) {
|
||||
vm.labels.languages = values[0];
|
||||
vm.labels.mandatory = values[1];
|
||||
vm.labels.general = values[2];
|
||||
// set page name
|
||||
vm.page.name = vm.labels.languages;
|
||||
});
|
||||
|
||||
$timeout(function () {
|
||||
|
||||
vm.languages = [
|
||||
{
|
||||
"id": 1,
|
||||
"cultureDisplayName": "English (United States)",
|
||||
"culture": "en-US",
|
||||
"isDefault": true,
|
||||
"isMandatory": true
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"cultureDisplayName": "Danish",
|
||||
"culture": "da-DK",
|
||||
"isDefault": false,
|
||||
"isMandatory": true
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"cultureDisplayName": "Spanish (Spain)",
|
||||
"culture": "es-ES",
|
||||
"isDefault": false,
|
||||
"isMandatory": false
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"cultureDisplayName": "French (France)",
|
||||
"culture": "fr-FR",
|
||||
"isDefault": false,
|
||||
"isMandatory": false
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"cultureDisplayName": "German (Germany)",
|
||||
"culture": "de-DE",
|
||||
"isDefault": false,
|
||||
"isMandatory": true
|
||||
}
|
||||
];
|
||||
|
||||
vm.loading = false;
|
||||
|
||||
}, 1000);
|
||||
|
||||
/*
|
||||
$timeout(function () {
|
||||
navigationService.syncTree({ tree: "languages", path: "-1" });
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
function addLanguage() {
|
||||
$location.search('create', null);
|
||||
$location.path("/settings/languages/edit/-1").search("create", "true");
|
||||
}
|
||||
|
||||
function editLanguage(language) {
|
||||
$location.search('create', null);
|
||||
$location.path("/settings/languages/edit/" + language.id);
|
||||
}
|
||||
|
||||
function deleteLanguage(language, event) {
|
||||
var confirmed = confirm("Are you sure you want to delete " + language.cultureDisplayName + "?");
|
||||
if(confirmed) {
|
||||
language.deleteButtonState = "busy";
|
||||
$timeout(function(){
|
||||
var index = vm.languages.indexOf(language);
|
||||
vm.languages.splice(index, 1);
|
||||
}, 1000);
|
||||
}
|
||||
event.preventDefault()
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Languages.OverviewController", LanguagesOverviewController);
|
||||
|
||||
})();
|
||||
@@ -0,0 +1,58 @@
|
||||
<div data-element="editor-languages" ng-controller="Umbraco.Editors.Languages.OverviewController as vm" class="clearfix">
|
||||
|
||||
<umb-editor-view footer="false">
|
||||
|
||||
<umb-editor-header
|
||||
name="vm.page.name"
|
||||
name-locked="true"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container>
|
||||
|
||||
<umb-load-indicator ng-if="vm.loading"></umb-load-indicator>
|
||||
|
||||
<umb-editor-sub-header>
|
||||
|
||||
<umb-editor-sub-header-content-left>
|
||||
<umb-button
|
||||
button-style="success"
|
||||
type="button"
|
||||
action="vm.addLanguage()"
|
||||
label-key="languages_addLanguage">
|
||||
</umb-button>
|
||||
</umb-editor-sub-header-content-left>
|
||||
|
||||
</umb-editor-sub-header>
|
||||
|
||||
<table class="table table-hover" ng-if="!vm.loading">
|
||||
<tbody>
|
||||
<tr ng-repeat="language in vm.languages" ng-click="vm.editLanguage(language)" style="cursor: pointer;">
|
||||
<td>
|
||||
<i class="icon-globe" style="color: #BBBABF; margin-right: 5px;"></i>
|
||||
<span class="bold">{{ language.cultureDisplayName }}</span>
|
||||
<span ng-if="language.isDefault">- {{vm.labels.general}}</span>
|
||||
</td>
|
||||
<td><span ng-if="language.isMandatory">{{vm.labels.mandatory}}</span></td>
|
||||
<td style="text-align: right;">
|
||||
<umb-button
|
||||
ng-if="!language.isDefault"
|
||||
type="button"
|
||||
size="xxs"
|
||||
button-style="danger"
|
||||
state="language.deleteButtonState"
|
||||
action="vm.deleteLanguage(language, $event)"
|
||||
label-key="general_delete">
|
||||
</umb-button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</umb-editor-container>
|
||||
|
||||
</umb-editor-view>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,19 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function MediaAppContentController($scope) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
function onInit() {
|
||||
angular.forEach($scope.model.tabs, function(group){
|
||||
group.open = true;
|
||||
});
|
||||
}
|
||||
|
||||
onInit();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Media.Apps.ContentController", MediaAppContentController);
|
||||
})();
|
||||
@@ -0,0 +1,17 @@
|
||||
<div class="form-horizontal" ng-controller="Umbraco.Editors.Media.Apps.ContentController as vm">
|
||||
<div class="umb-expansion-panel" ng-repeat="group in model.tabs | filter: { hide : '!' + true }">
|
||||
|
||||
<div class="umb-expansion-panel__header" ng-click="group.open = !group.open">
|
||||
<div>{{ group.label }}</div>
|
||||
<ins class="umb-expansion-panel__expand" ng-class="{'icon-navigation-down': !group.open, 'icon-navigation-up': group.open}" class="icon-navigation-right"> </ins>
|
||||
</div>
|
||||
|
||||
<div class="umb-expansion-panel__content" ng-show="group.open">
|
||||
<umb-property data-element="property-{{group.alias}}" ng-repeat="property in group.properties" property="property">
|
||||
<umb-editor model="property"></umb-editor>
|
||||
</umb-property>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,4 @@
|
||||
<umb-media-node-info
|
||||
ng-if="model"
|
||||
node="model">
|
||||
</umb-media-node-info>
|
||||
@@ -0,0 +1,23 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function MediaAppListViewController($scope) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
vm.listViewGroup = {};
|
||||
|
||||
function onInit() {
|
||||
angular.forEach($scope.model.tabs, function(group){
|
||||
if(group.alias === "Contents") {
|
||||
vm.listViewGroup = group;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onInit();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Media.Apps.ListViewController", MediaAppListViewController);
|
||||
})();
|
||||
@@ -0,0 +1,8 @@
|
||||
<div ng-controller="Umbraco.Editors.Media.Apps.ListViewController as vm">
|
||||
|
||||
<umb-property ng-repeat="property in vm.listViewGroup.properties" property="property">
|
||||
<umb-editor model="property"></umb-editor>
|
||||
</umb-property>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -10,35 +10,22 @@
|
||||
|
||||
<umb-editor-header
|
||||
name="content.name"
|
||||
tabs="content.tabs"
|
||||
menu="page.menu"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true">
|
||||
hide-alias="true"
|
||||
navigation="content.apps"
|
||||
on-back="backToListView()"
|
||||
show-back-button="{{page.listViewPath}}">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container>
|
||||
|
||||
<umb-tabs-content view="true" class="form-horizontal">
|
||||
<umb-tab id="tab{{tab.id}}" rel="{{tab.id}}" ng-repeat="tab in content.tabs">
|
||||
|
||||
<!-- Other tabs than info -->
|
||||
<div ng-if="tab.id !== -1 && tab.alias !== '_umb_infoTab'">
|
||||
<umb-property data-element="property-{{property.alias}}" property="property" ng-repeat="property in tab.properties">
|
||||
<umb-editor model="property"></umb-editor>
|
||||
</umb-property>
|
||||
</div>
|
||||
|
||||
<!-- Info tab -->
|
||||
<div ng-if="tab.id === -1 && tab.alias === '_umb_infoTab'">
|
||||
<umb-media-node-info
|
||||
ng-if="content"
|
||||
node="content">
|
||||
</umb-media-node-info>
|
||||
</div>
|
||||
|
||||
</umb-tab>
|
||||
</umb-tabs-content>
|
||||
<umb-editor-sub-views
|
||||
ng-if="!page.loading"
|
||||
sub-views="content.apps"
|
||||
model="content">
|
||||
</umb-editor-sub-views>
|
||||
|
||||
</umb-editor-container>
|
||||
|
||||
|
||||
@@ -54,7 +54,9 @@ function mediaEditController($scope, $routeParams, appState, mediaResource, enti
|
||||
editorState.set($scope.content);
|
||||
|
||||
// We don't get the info tab from the server from version 7.8 so we need to manually add it
|
||||
contentEditingHelper.addInfoTab($scope.content.tabs);
|
||||
//contentEditingHelper.addInfoTab($scope.content.tabs);
|
||||
|
||||
init($scope.content);
|
||||
|
||||
$scope.page.loading = false;
|
||||
|
||||
@@ -94,12 +96,62 @@ function mediaEditController($scope, $routeParams, appState, mediaResource, enti
|
||||
}
|
||||
|
||||
// We don't get the info tab from the server from version 7.8 so we need to manually add it
|
||||
contentEditingHelper.addInfoTab($scope.content.tabs);
|
||||
//contentEditingHelper.addInfoTab($scope.content.tabs);
|
||||
|
||||
init($scope.content);
|
||||
|
||||
$scope.page.loading = false;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function init(content) {
|
||||
|
||||
// prototype content and info apps
|
||||
var contentApp = {
|
||||
"name": "Content",
|
||||
"alias": "content",
|
||||
"icon": "icon-document",
|
||||
"view": "views/media/apps/content/content.html"
|
||||
};
|
||||
|
||||
var infoApp = {
|
||||
"name": "Info",
|
||||
"alias": "info",
|
||||
"icon": "icon-info",
|
||||
"view": "views/media/apps/info/info.html"
|
||||
};
|
||||
|
||||
var listview = {
|
||||
"name": "Child items",
|
||||
"alias": "childItems",
|
||||
"icon": "icon-list",
|
||||
"view": "views/media/apps/listview/listview.html"
|
||||
};
|
||||
|
||||
$scope.content.apps = [];
|
||||
|
||||
if($scope.content.contentTypeAlias === "Folder") {
|
||||
// add list view app
|
||||
$scope.content.apps.push(listview);
|
||||
|
||||
// remove the list view tab
|
||||
angular.forEach($scope.content.tabs, function(tab, index){
|
||||
if(tab.alias === "Contents") {
|
||||
tab.hide = true;
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
$scope.content.apps.push(contentApp);
|
||||
}
|
||||
|
||||
$scope.content.apps.push(infoApp);
|
||||
|
||||
// set first app to active
|
||||
$scope.content.apps[0].active = true;
|
||||
|
||||
}
|
||||
|
||||
$scope.save = function () {
|
||||
|
||||
@@ -152,6 +204,10 @@ function mediaEditController($scope, $routeParams, appState, mediaResource, enti
|
||||
|
||||
};
|
||||
|
||||
$scope.backToListView = function() {
|
||||
$location.path($scope.page.listViewPath);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div ng-controller="Umbraco.PropertyEditors.GridController" class="umb-grid umb-editor clearfix" id="umb-grid">
|
||||
|
||||
<umb-editor-sub-header>
|
||||
<umb-editor-sub-header style="background-color: white;">
|
||||
|
||||
<umb-editor-sub-header-content-right>
|
||||
<umb-button
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<umb-editor-sub-header-content-left>
|
||||
|
||||
<umb-editor-sub-header-section ng-if="(listViewAllowedTypes && listViewAllowedTypes.length > 0 && !isAnythingSelected()) && currentNodePermissions.canCreate">
|
||||
<div class="btn-group" ng-show="listViewAllowedTypes.length > 1">
|
||||
<div class="btn-group btn-success" ng-show="listViewAllowedTypes.length > 1">
|
||||
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<localize key="actions_create">Create</localize>
|
||||
<span class="caret"></span>
|
||||
@@ -26,7 +26,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="btn-group" ng-show="listViewAllowedTypes.length === 1">
|
||||
<a class="btn" href="#/{{entityType}}/{{entityType}}/edit/{{contentId}}?doctype={{listViewAllowedTypes[0].alias}}&create=true">
|
||||
<a class="btn btn-success" href="#/{{entityType}}/{{entityType}}/edit/{{contentId}}?doctype={{listViewAllowedTypes[0].alias}}&create=true">
|
||||
<i class="icon-{{listViewAllowedTypes[0].cssClass}}"></i>
|
||||
<localize key="actions_create">Create</localize> {{ listViewAllowedTypes[0].name }}
|
||||
</a>
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
name="vm.userGroup.name"
|
||||
alias="vm.userGroup.alias"
|
||||
icon="vm.userGroup.icon"
|
||||
hide-description="true">
|
||||
hide-description="true"
|
||||
on-back="vm.goToPage(vm.breadcrumbs[0])"
|
||||
show-back-button="true">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container>
|
||||
@@ -145,27 +147,28 @@
|
||||
|
||||
<div class="umb-package-details__sidebar">
|
||||
|
||||
<div class="umb-package-details__section">
|
||||
<umb-box>
|
||||
<umb-box-header title-key="sections_users"></umb-box-header>
|
||||
<umb-box-content>
|
||||
|
||||
<umb-user-preview
|
||||
ng-repeat="user in vm.userGroup.users"
|
||||
name="user.name"
|
||||
avatars="user.avatars"
|
||||
allow-remove="true"
|
||||
on-remove="vm.removeSelectedItem($index, vm.userGroup.users)">
|
||||
</umb-user-preview>
|
||||
|
||||
<div class="umb-package-details__section-title"><localize key="sections_users">Users</localize></div>
|
||||
<a href=""
|
||||
style="max-width: 100%;"
|
||||
class="umb-node-preview-add"
|
||||
ng-click="vm.openUserPicker()"
|
||||
prevent-default>
|
||||
<localize key="general_add">Add</localize>
|
||||
</a>
|
||||
|
||||
<umb-user-preview
|
||||
ng-repeat="user in vm.userGroup.users"
|
||||
name="user.name"
|
||||
avatars="user.avatars"
|
||||
allow-remove="true"
|
||||
on-remove="vm.removeSelectedItem($index, vm.userGroup.users)">
|
||||
</umb-user-preview>
|
||||
|
||||
<a href=""
|
||||
style="max-width: 100%;"
|
||||
class="umb-node-preview-add"
|
||||
ng-click="vm.openUserPicker()"
|
||||
prevent-default>
|
||||
<localize key="general_add">Add</localize>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</umb-box-content>
|
||||
</umb-box>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -190,13 +193,6 @@
|
||||
|
||||
<umb-editor-footer-content-right>
|
||||
|
||||
<umb-button
|
||||
type="button"
|
||||
action="vm.goToPage(vm.breadcrumbs[0])"
|
||||
label="Return to list"
|
||||
label-key="buttons_returnToList">
|
||||
</umb-button>
|
||||
|
||||
<umb-button
|
||||
type="button"
|
||||
action="vm.save()"
|
||||
|
||||
@@ -298,103 +298,106 @@
|
||||
</umb-editor-sub-header>
|
||||
|
||||
<div class="flex justify-center">
|
||||
<form name="addUserForm" no-validate val-form-manager style="max-width: 500px;" class="block-form">
|
||||
<div>
|
||||
<div ng-if="vm.usersViewState === 'inviteUser'">
|
||||
<h3 class="bold" style="margin-bottom: 0;">
|
||||
<localize key="user_inviteUser">Invite User</localize>
|
||||
</h3>
|
||||
<p style="line-height: 1.6em; margin-bottom: 15px;">
|
||||
<localize key="user_inviteUserHelp"></localize>
|
||||
</p>
|
||||
</div>
|
||||
<div ng-if="vm.usersViewState === 'createUser'">
|
||||
<h3 class="bold" style="margin-bottom: 0;">
|
||||
<localize key="user_createUser">Create user</localize>
|
||||
</h3>
|
||||
<p style="line-height: 1.6em; margin-bottom: 15px;">
|
||||
<localize key="user_createUserHelp"></localize>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<umb-box style="max-width: 600px;">
|
||||
<umb-box-content>
|
||||
<form name="addUserForm" no-validate val-form-manager class="block-form">
|
||||
<div>
|
||||
<div ng-if="vm.usersViewState === 'inviteUser'">
|
||||
<h3 class="bold" style="margin-bottom: 0;">
|
||||
<localize key="user_inviteUser">Invite User</localize>
|
||||
</h3>
|
||||
<p style="line-height: 1.6em; margin-bottom: 15px;">
|
||||
<localize key="user_inviteUserHelp"></localize>
|
||||
</p>
|
||||
</div>
|
||||
<div ng-if="vm.usersViewState === 'createUser'">
|
||||
<h3 class="bold" style="margin-bottom: 0;">
|
||||
<localize key="user_createUser">Create user</localize>
|
||||
</h3>
|
||||
<p style="line-height: 1.6em; margin-bottom: 15px;">
|
||||
<localize key="user_createUserHelp"></localize>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<umb-control-group label="@general_name" label-for="name" required="true">
|
||||
<input type="text" name="name" localize="placeholder" placeholder="@placeholders_entername" class="input-block-level" ng-model="vm.newUser.name"
|
||||
umb-auto-focus required val-server-field="Name" />
|
||||
<span class="help-inline" val-msg-for="name" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="name" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
<umb-control-group label="@general_name" label-for="name" required="true">
|
||||
<input type="text" name="name" localize="placeholder" placeholder="@placeholders_entername" class="input-block-level" ng-model="vm.newUser.name"
|
||||
umb-auto-focus required val-server-field="Name" />
|
||||
<span class="help-inline" val-msg-for="name" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="name" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="@general_username" label-for="username" required="true" ng-if="!vm.usernameIsEmail">
|
||||
<input type="text" name="username" localize="placeholder" placeholder="@placeholders_enterusername" class="input-block-level"
|
||||
ng-model="vm.newUser.username" val-server-field="Username" ng-required="vm.usernameIsEmail" />
|
||||
<span class="help-inline" val-msg-for="username" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="username" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
<umb-control-group label="@general_username" label-for="username" required="true" ng-if="!vm.usernameIsEmail">
|
||||
<input type="text" name="username" localize="placeholder" placeholder="@placeholders_enterusername" class="input-block-level"
|
||||
ng-model="vm.newUser.username" val-server-field="Username" ng-required="vm.usernameIsEmail" />
|
||||
<span class="help-inline" val-msg-for="username" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="username" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="@general_email" label-for="email" required="true">
|
||||
<input type="email" name="email" localize="placeholder" placeholder="@placeholders_enteremail" class="input-block-level"
|
||||
ng-model="vm.newUser.email" required val-email val-server-field="Email" />
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
<umb-control-group label="@general_email" label-for="email" required="true">
|
||||
<input type="email" name="email" localize="placeholder" placeholder="@placeholders_enteremail" class="input-block-level"
|
||||
ng-model="vm.newUser.email" required val-email val-server-field="Email" />
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="@user_usergroup" description="@user_groupsHelp" required="true">
|
||||
|
||||
<umb-user-group-preview
|
||||
ng-repeat="group in vm.newUser.userGroups"
|
||||
icon="group.icon"
|
||||
name="group.name"
|
||||
sections="group.sections"
|
||||
content-start-node="group.contentStartNode"
|
||||
media-start-node="group.mediaStartNode"
|
||||
allow-remove="true"
|
||||
on-remove="vm.removeSelectedUserGroup($index, vm.newUser.userGroups)">
|
||||
</umb-user-group-preview>
|
||||
<umb-control-group label="@user_usergroup" description="@user_groupsHelp" required="true">
|
||||
|
||||
<umb-user-group-preview
|
||||
ng-repeat="group in vm.newUser.userGroups"
|
||||
icon="group.icon"
|
||||
name="group.name"
|
||||
sections="group.sections"
|
||||
content-start-node="group.contentStartNode"
|
||||
media-start-node="group.mediaStartNode"
|
||||
allow-remove="true"
|
||||
on-remove="vm.removeSelectedUserGroup($index, vm.newUser.userGroups)">
|
||||
</umb-user-group-preview>
|
||||
|
||||
<a href="" style="max-width: 100%;" class="umb-node-preview-add" ng-click="vm.openUserGroupPicker($event)" prevent-default>
|
||||
<localize key="general_add">Add</localize>
|
||||
</a>
|
||||
<a href="" style="max-width: 100%;" class="umb-node-preview-add" ng-click="vm.openUserGroupPicker($event)" prevent-default>
|
||||
<localize key="general_add">Add</localize>
|
||||
</a>
|
||||
|
||||
</umb-control-group>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="@general_message" ng-if="vm.usersViewState === 'inviteUser'" label-for="message" required="true">
|
||||
<textarea
|
||||
name="message"
|
||||
type="text"
|
||||
class="input-block-level"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_enterMessage"
|
||||
ng-model="vm.newUser.message"
|
||||
rows="4"
|
||||
required val-server-field="Message">
|
||||
</textarea>
|
||||
<span class="help-inline" val-msg-for="message" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="message" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
<umb-control-group label="@general_message" ng-if="vm.usersViewState === 'inviteUser'" label-for="message" required="true">
|
||||
<textarea
|
||||
name="message"
|
||||
type="text"
|
||||
class="input-block-level"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_enterMessage"
|
||||
ng-model="vm.newUser.message"
|
||||
rows="4"
|
||||
required val-server-field="Message">
|
||||
</textarea>
|
||||
<span class="help-inline" val-msg-for="message" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="message" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-button
|
||||
ng-if="vm.usersViewState === 'inviteUser'"
|
||||
button-style="success"
|
||||
state="vm.page.createButtonState"
|
||||
type="button"
|
||||
action="vm.inviteUser(addUserForm)"
|
||||
label-key="user_sendInvite"
|
||||
size="m">
|
||||
</umb-button>
|
||||
<umb-button
|
||||
ng-if="vm.usersViewState === 'inviteUser'"
|
||||
button-style="success"
|
||||
state="vm.page.createButtonState"
|
||||
type="button"
|
||||
action="vm.inviteUser(addUserForm)"
|
||||
label-key="user_sendInvite"
|
||||
size="m">
|
||||
</umb-button>
|
||||
|
||||
<umb-button
|
||||
ng-if="vm.usersViewState === 'createUser'"
|
||||
button-style="success"
|
||||
state="vm.page.createButtonState"
|
||||
type="button"
|
||||
action="vm.createUser(addUserForm)"
|
||||
label-key="user_createUser"
|
||||
size="m">
|
||||
</umb-button>
|
||||
|
||||
</form>
|
||||
<umb-button
|
||||
ng-if="vm.usersViewState === 'createUser'"
|
||||
button-style="success"
|
||||
state="vm.page.createButtonState"
|
||||
type="button"
|
||||
action="vm.createUser(addUserForm)"
|
||||
label-key="user_createUser"
|
||||
size="m">
|
||||
</umb-button>
|
||||
|
||||
</form>
|
||||
</umb-box-content>
|
||||
</umb-box>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -47,13 +47,12 @@ describe('edit media controller tests', function () {
|
||||
expect(scope.content.id).toBe(1234);
|
||||
});
|
||||
|
||||
it('it should have a tabs collection', function () {
|
||||
expect(scope.content.tabs.length).toBe(2);
|
||||
it('it should have an apps collection', function () {
|
||||
expect(scope.content.apps.length).toBe(2);
|
||||
});
|
||||
|
||||
it('it should have added an info tab', function () {
|
||||
expect(scope.content.tabs[1].id).toBe(-1);
|
||||
expect(scope.content.tabs[1].alias).toBe("_umb_infoTab");
|
||||
it('it should have added an info app', function () {
|
||||
expect(scope.content.apps[1].alias).toBe("info");
|
||||
});
|
||||
|
||||
it('all other tabs than the info tab should have a properties collection', function () {
|
||||
|
||||
@@ -54,12 +54,11 @@
|
||||
<body ng-class="{'touch':touchDevice, 'emptySection':emptySection, 'umb-drawer-is-visible':drawer.show}" ng-controller="Umbraco.MainController" id="umbracoMainPageBody">
|
||||
|
||||
<div ng-hide="!authenticated" ng-cloak>
|
||||
|
||||
<!-- help dialog controller by the help button - this also forces the backoffice UI to shift 400px -->
|
||||
<umb-drawer data-element="drawer" ng-if="drawer.show" model="drawer.model" view="drawer.view"></umb-drawer>
|
||||
|
||||
<div id="mainwrapper" class="clearfix" ng-click="closeDialogs($event)">
|
||||
|
||||
<umb-app-header></umb-app-header>
|
||||
|
||||
<umb-navigation></umb-navigation>
|
||||
|
||||
<section id="contentwrapper">
|
||||
@@ -74,6 +73,9 @@
|
||||
<umb-notifications></umb-notifications>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- help dialog controller by the help button - this also forces the backoffice UI to shift 400px -->
|
||||
<umb-drawer data-element="drawer" ng-if="drawer.show" model="drawer.model" view="drawer.view"></umb-drawer>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -546,6 +546,7 @@
|
||||
<key alias="scheduledPublishing">Scheduled Publishing</key>
|
||||
<key alias="search">Search</key>
|
||||
<key alias="server">Server</key>
|
||||
<key alias="settings">Settings</key>
|
||||
<key alias="show">Show</key>
|
||||
<key alias="showPageOnSend">Show page on Send</key>
|
||||
<key alias="size">Size</key>
|
||||
|
||||
@@ -403,6 +403,7 @@
|
||||
<key alias="account">account</key>
|
||||
<key alias="selectEditor">Select editor</key>
|
||||
<key alias="selectSnippet">Select snippet</key>
|
||||
<key alias="variantdeletewarning">This will delete the node and all its languages. If you only want to delete one language go and unpublish it instead.</key>
|
||||
</area>
|
||||
<area alias="dictionaryItem">
|
||||
<key alias="description">
|
||||
@@ -621,6 +622,7 @@
|
||||
<key alias="searchNoResult">Sorry, we can not find what you are looking for</key>
|
||||
<key alias="noItemsInList">No items have been added</key>
|
||||
<key alias="server">Server</key>
|
||||
<key alias="settings">Settings</key>
|
||||
<key alias="show">Show</key>
|
||||
<key alias="showPageOnSend">Show page on Send</key>
|
||||
<key alias="size">Size</key>
|
||||
@@ -1646,6 +1648,15 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="tabHasNoSortOrder">tab has no sort order</key>
|
||||
</area>
|
||||
|
||||
<area alias="languages">
|
||||
<key alias="addLanguage">Add language</key>
|
||||
<key alias="mandatoryLanguage">Mandatory</key>
|
||||
<key alias="mandatoryLanguageHelp">Properties on this language has to be filled out before the node can be published.</key>
|
||||
<key alias="defaultLanguage">Default language</key>
|
||||
<key alias="defaultLanguageHelp">An Umbraco site can only have one default langugae set.</key>
|
||||
<key alias="changingDefaultLanguageWarning">Switching default language may result in default content missing.</key>
|
||||
</area>
|
||||
|
||||
<area alias="modelsBuilder">
|
||||
<key alias="buildingModels">Building models</key>
|
||||
<key alias="waitingMessage">this can take a bit of time, don't worry</key>
|
||||
|
||||
Reference in New Issue
Block a user