Compare commits

...

10 Commits

Author SHA1 Message Date
elitsa 517ea19763 Testing the arrows for expanding and collapsing a tree 2018-08-21 16:38:12 +02:00
Sebastiaan Janssen 39e8a9fa67 Bump version to 7.12.1 2018-08-15 15:47:21 +02:00
Warren Buckley 1dbf509020 Merge pull request #2855 from umbraco/temp7-156
fixes: 156: Update nested content css/markup so it doesn't collide with the old package
2018-08-15 14:03:47 +01:00
Mads Rasmussen 8ce93055ef update colors to use variables and match the new color scheme 2018-08-15 13:00:40 +02:00
Mads Rasmussen ee4b2adbd4 prefix all nested content css classes with "umb" 2018-08-15 11:59:06 +02:00
Mads Rasmussen 6c0d14e0f4 add type="button" to toggle so it doesn't auto-submits a form 2018-08-14 13:14:49 +02:00
Sebastiaan Janssen fd888cab4b Fixes U4-9095 - the textService.Localize always returns some string, either the translation or [alias] - so we need to make sure it actually translated something 2018-08-09 14:36:08 +02:00
Shannon Deminick 50597b5715 Merge pull request #2843 from umbraco/temp7-eslint
Temp7 eslint
2018-08-09 15:19:12 +10:00
Mads Rasmussen f35110309a fix comma-dangle error 2018-08-08 19:52:31 +02:00
Mads Rasmussen c73860d144 start eslint from scratch so we slowly can add more rules for easier merging to v8 2018-08-08 19:52:00 +02:00
45 changed files with 10660 additions and 214 deletions
+2 -2
View File
@@ -11,5 +11,5 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.12.0")]
[assembly: AssemblyInformationalVersion("7.12.0")]
[assembly: AssemblyFileVersion("7.12.1")]
[assembly: AssemblyInformationalVersion("7.12.1")]
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.12.0");
private static readonly Version Version = new Version("7.12.1");
/// <summary>
/// Gets the current version of Umbraco.
+1 -30
View File
@@ -3,37 +3,8 @@
"browser": true
},
"plugins": [
"angular"
],
"rules": {
"eqeqeq": 2,
"curly": 2,
"no-unused-vars": 1,
"no-eval": 1,
"no-delete-var": 1,
"quotes": 1,
"dot-notation": 1,
"no-use-before-define": 0,
"angular/ng_controller_as": 1,
"angular/ng_controller_as_vm": 1,
"strict": 0,
"no-irregular-whitespace": 0,
"no-mixed-spaces-and-tabs": 0,
"no-multi-spaces": 0,
"key-spacing": 0,
"semi-spacing": 0,
"space-infix-ops": 0,
"comma-spacing": 0,
"no-trailing-spaces": 0,
"eol-last": 0,
"no-underscore-dangle": 0,
"camelcase": 0
"comma-dangle": ["error", "never"]
},
"globals": {
+8
View File
@@ -12,6 +12,9 @@ const imagemin = require('gulp-imagemin');
var _ = require('lodash');
var MergeStream = require('merge-stream');
// js
const eslint = require('gulp-eslint');
//Less + css
var postcss = require('gulp-postcss');
var less = require('gulp-less');
@@ -30,6 +33,11 @@ Helper functions
function processJs(files, out) {
return gulp.src(files)
// check for js errors
.pipe(eslint())
// outputs the lint results to the console
.pipe(eslint.format())
// sort files in stream by path or any custom sort comparator
.pipe(sort())
.pipe(concat(out))
.pipe(wrap('(function(){\n%= body %\n})();'))
File diff suppressed because it is too large Load Diff
+1
View File
@@ -27,6 +27,7 @@
"gulp": "^3.9.1",
"gulp-concat": "^2.6.0",
"gulp-connect": "5.0.0",
"gulp-eslint": "^5.0.0",
"gulp-imagemin": "^4.1.0",
"gulp-less": "^3.5.0",
"gulp-ngdocs": "^0.3.0",
@@ -12,7 +12,7 @@ var canvasdesignerConfig = {
{
type: "background",
category: "Color",
name: "Background",
name: "Background"
},
{
type: "color",
@@ -45,12 +45,12 @@ var canvasdesignerConfig = {
{
type: "background",
category: "Color",
name: "Background",
name: "Background"
},
{
type: "border",
category: "Color",
name: "Border",
name: "Border"
},
{
type: "color",
@@ -83,7 +83,7 @@ var canvasdesignerConfig = {
{
type: "googlefontpicker",
category: "Font",
name: "Font familly",
name: "Font familly"
}
]
},
@@ -105,7 +105,7 @@ var canvasdesignerConfig = {
name: "Margin",
enable: ["top", "bottom"],
schema: "#header"
},
}
]
},
{
@@ -124,7 +124,7 @@ var canvasdesignerConfig = {
type: "color",
category: "Font",
name: "Font color",
css: "color",
css: "color"
}
]
},
@@ -137,7 +137,7 @@ var canvasdesignerConfig = {
type: "color",
category: "Font",
name: "Font color",
css: "color",
css: "color"
}
]
},
@@ -150,7 +150,7 @@ var canvasdesignerConfig = {
type: "color",
category: "Font",
name: "Font color",
css: "color",
css: "color"
},
{
type: "slider",
@@ -163,7 +163,7 @@ var canvasdesignerConfig = {
{
type: "margin",
category: "Position",
name: "Margin",
name: "Margin"
}
]
@@ -177,7 +177,7 @@ var canvasdesignerConfig = {
type: "color",
category: "Font",
name: "Font color",
css: "color",
css: "color"
},
{
type: "slider",
@@ -190,7 +190,7 @@ var canvasdesignerConfig = {
{
type: "margin",
category: "Position",
name: "Margin",
name: "Margin"
}
]
@@ -216,7 +216,7 @@ var canvasdesignerConfig = {
{
type: "background",
category: "Color",
name: "Background",
name: "Background"
},
{
type: "padding",
@@ -305,7 +305,7 @@ var canvasdesignerConfig = {
name: "Background Hover",
css: "background",
schema: ".button-alt:hover"
},
}
]
}
]
@@ -73,7 +73,7 @@ angular.module("Umbraco.canvasdesigner")
topbordertype: 'solid',
bottombordersize: '',
bottombordercolor: '',
bottombordertype: 'solid',
bottombordertype: 'solid'
};
}
@@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner")
fontFamily: '',
fontType: '',
fontWeight: '',
fontStyle: '',
fontStyle: ''
}
}
@@ -74,7 +74,7 @@ angular.module("Umbraco.canvasdesigner")
fontType: "safe",
fontFamily: value,
fontWeight: "normal",
fontStyle: "normal",
fontStyle: "normal"
});
});
@@ -121,7 +121,7 @@ angular.module("Umbraco.canvasdesigner")
fontFamily: $scope.selectedFont.fontFamily,
fontType: $scope.selectedFont.fontType,
fontWeight: $scope.selectedFont.fontWeight,
fontStyle: $scope.selectedFont.fontStyle,
fontStyle: $scope.selectedFont.fontStyle
});
}
});
@@ -161,7 +161,7 @@ angular.module("Umbraco.canvasdesigner")
fontFamily: $scope.selectedFont.fontFamily,
fontType: $scope.selectedFont.fontType,
fontWeight: $scope.selectedFont.fontWeight,
fontStyle: $scope.selectedFont.fontStyle,
fontStyle: $scope.selectedFont.fontStyle
});
}
@@ -178,7 +178,7 @@ angular.module("Umbraco.canvasdesigner")
fontFamily: $scope.selectedFont.fontFamily,
fontType: $scope.selectedFont.fontType,
fontWeight: $scope.selectedFont.fontWeight,
fontStyle: $scope.selectedFont.fontStyle,
fontStyle: $scope.selectedFont.fontStyle
});
};
@@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner")
$scope.selectedmargin = {
name: "",
value: 0,
value: 0
};
$scope.setSelectedmargin = function (margintype) {
@@ -50,7 +50,7 @@ angular.module("Umbraco.canvasdesigner")
leftmarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 1 ? $scope.item.defaultValue[1] : '',
rightmarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 2 ? $scope.item.defaultValue[2] : '',
topmarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 3 ? $scope.item.defaultValue[3] : '',
bottommarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '',
bottommarginvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : ''
};
}
@@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner")
$scope.selectedpadding = {
name: "",
value: 0,
value: 0
};
$scope.setSelectedpadding = function (paddingtype) {
@@ -50,7 +50,7 @@ angular.module("Umbraco.canvasdesigner")
leftpaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 1 ? $scope.item.defaultValue[1] : '',
rightpaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 2 ? $scope.item.defaultValue[2] : '',
toppaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 3 ? $scope.item.defaultValue[3] : '',
bottompaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '',
bottompaddingvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : ''
};
}
@@ -12,7 +12,7 @@ angular.module("Umbraco.canvasdesigner")
$scope.selectedradius = {
name: "",
value: 0,
value: 0
};
$scope.setSelectedradius = function (radiustype) {
@@ -50,7 +50,7 @@ angular.module("Umbraco.canvasdesigner")
topleftradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 1 ? $scope.item.defaultValue[1] : '',
toprightradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 2 ? $scope.item.defaultValue[2] : '',
bottomleftradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 3 ? $scope.item.defaultValue[3] : '',
bottomrightradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : '',
bottomrightradiusvalue: $scope.item.defaultValue && $scope.item.defaultValue.length > 4 ? $scope.item.defaultValue[4] : ''
};
}
@@ -48,7 +48,7 @@ angular.module('spectrumcolorpicker', [])
scope.colorselected = initColor;
scope.$apply();
});
},
}
});
@@ -103,7 +103,7 @@
backdropOpacity: "=?",
highlightElement: "=?",
highlightPreventClick: "=?",
disableEventsOnClick: "=?",
disableEventsOnClick: "=?"
}
};
@@ -53,7 +53,7 @@ angular.module("umbraco.directives")
var $container = element.find(".crop-container");
//default constraints for drag n drop
var constraints = {left: {max: scope.dimensions.margin, min: scope.dimensions.margin}, top: {max: scope.dimensions.margin, min: scope.dimensions.margin}, };
var constraints = {left: {max: scope.dimensions.margin, min: scope.dimensions.margin}, top: {max: scope.dimensions.margin, min: scope.dimensions.margin} };
scope.constraints = constraints;
@@ -39,7 +39,7 @@ angular.module("umbraco.directives")
'<div ng-class="getNodeCssClass(node)" ng-swipe-right="options(node, $event)" ng-dblclick="load(node)" >' +
//NOTE: This ins element is used to display the search icon if the node is a container/listview and the tree is currently in dialog
//'<ins ng-if="tree.enablelistviewsearch && node.metaData.isContainer" class="umb-tree-node-search icon-search" ng-click="searchNode(node, $event)" alt="searchAltText"></ins>' +
'<ins data-element="tree-item-expand" ng-class="{\'icon-navigation-right\': !node.expanded || node.metaData.isContainer, \'icon-navigation-down\': node.expanded && !node.metaData.isContainer}" ng-click="load(node)">&nbsp;</ins>' +
'<ins data-element="tree-item-expand" ng-class="{\'icon-navigation-right\': !node.expanded || enablelistviewexpand === \'true\', \'icon-navigation-down\': node.expanded || true}" ng-click="load(node)">&nbsp;</ins>' +
'<i class="icon umb-tree-icon sprTree" ng-click="select(node, $event)"></i>' +
'<a class="umb-tree-item__label" href="#/{{node.routePath}}" ng-click="select(node, $event)"></a>' +
//NOTE: These are the 'option' elipses
@@ -17,7 +17,7 @@
restrict: 'E',
replace: true,
transclude: true,
templateUrl: 'views/components/umb-dropdown-item.html',
templateUrl: 'views/components/umb-dropdown-item.html'
};
return directive;
@@ -57,7 +57,7 @@
},
stop: function(e, ui) {
updateTabsSortOrder();
},
}
};
scope.sortableOptionsProperty = {
@@ -12,7 +12,7 @@ angular.module("umbraco.directives")
restrict: 'A',
replace: false,
scope: {
node: '=umbLaunchMiniEditor',
node: '=umbLaunchMiniEditor'
},
link: function(scope, element, attrs) {
@@ -7,6 +7,6 @@
$http.get(url),
'Failed to retrieve content types'
);
},
}
};
});
@@ -329,7 +329,7 @@ angular.module('umbraco.services').factory("editorState", function() {
},
set: function (value) {
throw "Use editorState.set to set the value of the current entity";
},
}
});
return state;
@@ -504,7 +504,7 @@
canDelete: _.contains(intersectPermissions, 'D'), //Magic Char = D
canMove: _.contains(intersectPermissions, 'M'), //Magic Char = M
canPublish: _.contains(intersectPermissions, 'U'), //Magic Char = U
canUnpublish: _.contains(intersectPermissions, 'U'), //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish)
canUnpublish: _.contains(intersectPermissions, 'U') //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish)
};
}
@@ -641,7 +641,7 @@ function navigationService($rootScope, $routeParams, $log, $location, $q, $timeo
//These will show up on the dialog controller's $scope under dialogOptions
currentNode: args.node,
currentAction: args.action,
currentAction: args.action
});
//save the currently assigned dialog so it can be removed before a new one is created
@@ -1,16 +1,13 @@
.nested-content
{
.umb-nested-content {
text-align: center;
}
.nested-content--not-supported
{
.umb-nested-content--not-supported {
opacity: 0.3;
pointer-events: none;
}
.nested-content-overlay
{
.umb-nested-content-overlay {
position: absolute;
top: 0;
left: 0;
@@ -19,47 +16,39 @@
z-index: 1000;
}
.nested-content__item
{
.umb-nested-content__item {
position: relative;
text-align: left;
border-top: solid 1px transparent;
background: white;
background: @white;
}
.nested-content__item--active:not(.nested-content__item--single)
{
background: #f8f8f8;
.umb-nested-content__item--active:not(.umb-nested-content__item--single) {
background: @gray-10;
}
.nested-content__item.ui-sortable-placeholder
{
background: #f8f8f8;
border: 1px dashed #d9d9d9;
.umb-nested-content__item.ui-sortable-placeholder {
background: @gray-10;
border: 1px dashed @gray-8;
visibility: visible !important;
height: 55px;
margin-top: -1px;
}
.nested-content__item--single > .nested-content__content
{
.umb-nested-content__item--single > .umb-nested-content__content {
border: 0;
}
.nested-content__item--single > .nested-content__content > .umb-pane
{
.umb-nested-content__item--single > .umb-nested-content__content > .umb-pane {
margin: 0;
}
.nested-content__header-bar
{
.umb-nested-content__header-bar {
padding: 15px 20px;
border-bottom: 1px dashed #e0e0e0;
border-bottom: 1px dashed @gray-8;
text-align: right;
cursor: pointer;
background-color: white;
background-color: @white;
-moz-user-select: none;
-khtml-user-select: none;
@@ -67,24 +56,21 @@
-o-user-select: none;
}
.nested-content__heading {
.umb-nested-content__heading {
line-height: 20px;
position: relative;
&.-with-icon
{
&.-with-icon {
padding-left: 20px;
}
i
{
color: #999; /* same icon color as the icons in the item type picker */
i {
color: @gray-2;
position: absolute;
left: 0;
}
.nested-content__item-name
{
.umb-nested-content__item-name {
max-height: 20px;
text-align: left;
white-space: nowrap;
@@ -94,22 +80,16 @@
}
}
.nested-content__icons
{
.umb-nested-content__icons {
opacity: 0;
transition: opacity .15s ease-in-out;
-moz-transition: opacity .15s ease-in-out;
-webkit-transition: opacity .15s ease-in-out;
position: absolute;
right: 0px;
top: 2px;
background-color: white;
background-color: @white;
padding: 5px;
&:before
{
&:before {
content: ' ';
position: absolute;
display: block;
@@ -117,126 +97,118 @@
left: -30px;
top: 0;
bottom: 0;
background: -webkit-linear-gradient(90deg, rgba(255,255,255,0), white);
background: -moz-linear-gradient(90deg, rgba(255,255,255,0), white);
background: linear-gradient(90deg, rgba(255,255,255,0), white);
}
}
.nested-content__header-bar:hover .nested-content__icons,
.nested-content__item--active > .nested-content__header-bar .nested-content__icons
{
.umb-nested-content__header-bar:hover .umb-nested-content__icons,
.umb-nested-content__item--active > .umb-nested-content__header-bar .umb-nested-content__icons {
opacity: 1;
}
.nested-content__icon,
.nested-content__icon.nested-content__icon--disabled:hover
{
.umb-nested-content__icon,
.umb-nested-content__icon.umb-nested-content__icon--disabled:hover {
display: inline-block;
padding: 4px 6px;
margin: 2px;
cursor: pointer;
background: #fff;
border: 1px solid #b6b6b6;
background: @white;
border: 1px solid @gray-7;
border-radius: 200px;
text-decoration: none !important;
}
.nested-content__icon:hover,
.nested-content__icon--active
.umb-nested-content__icon:hover,
.umb-nested-content__icon--active
{
color: white;
background: #2e8aea;
border-color: #2e8aea;
color: @white;
background: @turquoise-d1;
border-color: @turquoise-d1;
text-decoration: none;
}
.nested-content__icon .icon,
.nested-content__icon.nested-content__icon--disabled:hover .icon
{
.umb-nested-content__icon .icon,
.umb-nested-content__icon.umb-nested-content__icon--disabled:hover .icon {
display: block;
font-size: 16px !important;
color: #5f5f5f;
color: @gray-3;
}
.nested-content__icon:hover .icon,
.nested-content__icon--active .icon
{
color: white;
.umb-nested-content__icon:hover .icon,
.umb-nested-content__icon--active .icon {
color: @white;
}
.nested-content__icon--disabled
{
.umb-nested-content__icon--disabled {
opacity: 0.3;
}
.nested-content__footer-bar
{
.umb-nested-content__footer-bar {
text-align: center;
padding-top: 20px;
}
.nested-content__content
{
border-bottom: 1px dashed #e0e0e0;
.umb-nested-content__content {
border-bottom: 1px dashed @gray-8;
}
.nested-content__content .umb-control-group {
.umb-nested-content__content .umb-control-group {
padding-bottom: 0;
}
.nested-content__item.ui-sortable-helper .nested-content__content
{
.umb-nested-content__item.ui-sortable-helper .umb-nested-content__content {
display: none !important;
}
.nested-content__help-text
{
.umb-nested-content__help-text {
display: inline-block;
padding: 10px 20px 10px 20px;
clear: both;
font-size: 14px;
color: #555;
background: #f8f8f8;
color: @gray-3;
background: @gray-10;
border-radius: 15px;
}
.nested-content__doctypepicker table input, .nested-content__doctypepicker table select {
.umb-nested-content__doctypepicker table input,
.umb-nested-content__doctypepicker table select {
width: 100%;
padding-right: 0;
}
.nested-content__doctypepicker table td.icon-navigation, .nested-content__doctypepicker i.nested-content__help-icon {
.umb-nested-content__doctypepicker table td.icon-navigation,
.umb-nested-content__doctypepicker i.umb-nested-content__help-icon {
vertical-align: middle;
color: #CCC;
color: @gray-7;
}
.nested-content__doctypepicker table td.icon-navigation:hover, .nested-content__doctypepicker i.nested-content__help-icon:hover {
color: #343434;
.umb-nested-content__doctypepicker table td.icon-navigation:hover,
.umb-nested-content__doctypepicker i.umb-nested-content__help-icon:hover {
color: @gray-2;
}
.nested-content__doctypepicker i.nested-content__help-icon {
.umb-nested-content__doctypepicker i.umb-nested-content__help-icon {
margin-left: 10px;
}
.form-horizontal .nested-content--narrow .controls-row
.form-horizontal .umb-nested-content--narrow .controls-row
{
margin-left: 40% !important;
}
.form-horizontal .nested-content--narrow .controls-row .umb-textstring,
.form-horizontal .nested-content--narrow .controls-row .umb-textarea
.form-horizontal .umb-nested-content--narrow .controls-row .umb-textstring,
.form-horizontal .umb-nested-content--narrow .controls-row .umb-textarea
{
width: 95%;
}
.form-horizontal .nested-content--narrow .controls-row .umb-dropdown {
.form-horizontal .umb-nested-content--narrow .controls-row .umb-dropdown {
width: 99%;
}
.usky-grid.nested-content__node-type-picker .cell-tools-menu {
.usky-grid.umb-nested-content__node-type-picker .cell-tools-menu {
position: relative;
transform: translate(-50%, -25%);
}
@@ -16,7 +16,7 @@ function LegacyDeleteController($scope, legacyResource, treeService, navigationS
legacyResource.deleteItem({
nodeId: $scope.currentNode.id,
nodeType: $scope.currentNode.nodeType,
alias: $scope.currentNode.name,
alias: $scope.currentNode.name
}).then(function () {
$scope.currentNode.loading = false;
//TODO: Need to sync tree, etc...
@@ -106,7 +106,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController",
hasChildren: false,
name: searchText,
metaData: {
listViewNode: child,
listViewNode: child
},
cssClass: "icon umb-tree-icon sprTree icon-search",
cssClasses: ["not-published"]
@@ -181,7 +181,7 @@
modalClass: "login-overlay",
animation: "slide",
show: true,
callback: callback,
callback: callback
});
}
@@ -31,7 +31,7 @@ angular.module("umbraco").controller('Umbraco.Dialogs.Template.QueryBuilderContr
sort:{
property:{
alias: "",
name: "",
name: ""
},
direction: "ascending"
}
@@ -93,7 +93,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
},
name: searchText,
metaData: {
listViewNode: child,
listViewNode: child
},
cssClass: "icon-search",
cssClasses: ["not-published"]
@@ -47,7 +47,7 @@ angular.module("umbraco")
pageSize: 100,
totalItems: 0,
totalPages: 0,
filter: '',
filter: ''
};
//preload selected item
@@ -50,7 +50,7 @@
sort: {
property: {
alias: "",
name: "",
name: ""
},
direction: "ascending", //This is the value for sorting sent to server
translation: {
@@ -1,4 +1,4 @@
<button ng-click="click()" class="umb-toggle dib" ng-class="{'umb-toggle--checked': checked}">
<button ng-click="click()" type="button" class="umb-toggle dib" ng-class="{'umb-toggle--checked': checked}">
<span ng-if="!labelPosition && showLabels === 'true' || labelPosition === 'left' && showLabels === 'true'">
<span ng-if="!checked" class="umb-toggle__label umb-toggle__label--left">{{ displayLabelOff }}</span>
@@ -28,7 +28,7 @@ function DataTypeEditController($scope, $routeParams, $location, appState, navig
label: preVals[i].label,
view: preVals[i].view,
value: preVals[i].value,
config: preVals[i].config,
config: preVals[i].config
});
}
}
@@ -350,7 +350,7 @@
});
},
readOnly: true
},
}
]);
@@ -28,7 +28,7 @@ angular.module("umbraco")
name: "1 column layout",
sections: [
{
grid: 12,
grid: 12
}
]
},
@@ -36,7 +36,7 @@ angular.module("umbraco")
name: "2 column layout",
sections: [
{
grid: 4,
grid: 4
},
{
grid: 8
@@ -57,10 +57,10 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie
totalPages: 0,
items: []
};
//when this is null, we don't check permissions
$scope.currentNodePermissions = null;
$scope.currentNodePermissions = null;
if ($scope.entityType === "content") {
//Just ensure we do have an editorState
if (editorState.current) {
@@ -75,9 +75,9 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie
"canDelete": _.contains(currentUserPermissions, 'D'), //Magic Char = D
"canMove": _.contains(currentUserPermissions, 'M'), //Magic Char = M
"canPublish": _.contains(currentUserPermissions, 'U'), //Magic Char = U
"canUnpublish": _.contains(currentUserPermissions, 'U'), //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish)
"canUnpublish": _.contains(currentUserPermissions, 'U') //Magic Char = Z (however UI says it can't be set, so if we can publish 'U' we can unpublish)
};
}
}
}
//when this is null, we don't check permissions
@@ -229,10 +229,10 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop
$scope.sortableOptions = {
axis: 'y',
cursor: "move",
handle: ".nested-content__icon--move",
handle: ".umb-nested-content__icon--move",
start: function (ev, ui) {
// Yea, yea, we shouldn't modify the dom, sue me
$("#nested-content--" + $scope.model.id + " .umb-rte textarea").each(function () {
$("#umb-nested-content--" + $scope.model.id + " .umb-rte textarea").each(function () {
tinymce.execCommand('mceRemoveEditor', false, $(this).attr('id'));
$(this).css("visibility", "hidden");
});
@@ -244,7 +244,7 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop
$scope.setDirty();
},
stop: function (ev, ui) {
$("#nested-content--" + $scope.model.id + " .umb-rte textarea").each(function () {
$("#umb-nested-content--" + $scope.model.id + " .umb-rte textarea").each(function () {
tinymce.execCommand('mceAddEditor', true, $(this).attr('id'));
$(this).css("visibility", "visible");
});
@@ -1,4 +1,4 @@
<div id="{{model.alias}}" class="nested-content__doctypepicker" ng-controller="Umbraco.PropertyEditors.NestedContent.DocTypePickerController">
<div id="{{model.alias}}" class="umb-nested-content__doctypepicker" ng-controller="Umbraco.PropertyEditors.NestedContent.DocTypePickerController">
<div>
<table class="table table-striped">
<thead>
@@ -45,11 +45,11 @@
<a class="btn" ng-click="add()">
<localize key="general_add">Add</localize>
</a>
<i class="icon icon-help-alt medium nested-content__help-icon" ng-click="showHelpText = !showHelpText"></i>
<i class="icon icon-help-alt medium umb-nested-content__help-icon" ng-click="showHelpText = !showHelpText"></i>
</div>
</div>
<br/>
<div class="nested-content__help-text" ng-show="showHelpText">
<div class="umb-nested-content__help-text" ng-show="showHelpText">
<p>
<b><localize key="editcontenttype_tab">Tab</localize>:</b><br/>
Select the tab who's properties should be displayed. If left blank, the first tab on the doc type will be used.
@@ -1,11 +1,11 @@
<div class="umb-pane">
<div ng-repeat="property in tab.properties" style="position: relative;">
<umb-property property="property" ng-class="{'nested-content--not-supported': property.notSupported}">
<umb-property property="property" ng-class="{'umb-nested-content--not-supported': property.notSupported}">
<umb-editor model="property"></umb-editor>
</umb-property>
<div ng-if="property.notSupported" class="nested-content-overlay"></div>
<div ng-if="property.notSupported" class="umb-nested-content-overlay"></div>
<p ng-if="property.notSupported">{{property.notSupportedMessage}}</p>
@@ -1,48 +1,48 @@
<div id="nested-content--{{model.id}}" class="nested-content"
<div id="umb-nested-content--{{model.id}}" class="umb-nested-content"
ng-controller="Umbraco.PropertyEditors.NestedContent.PropertyEditorController"
ng-class="{'nested-content--narrow':!wideMode, 'nested-content--wide':wideMode}">
ng-class="{'umb-nested-content--narrow':!wideMode, 'umb-nested-content--wide':wideMode}">
<ng-form>
<div class="nested-content__items" ng-hide="nodes.length == 0" ui-sortable="sortableOptions" ng-model="nodes">
<div class="umb-nested-content__items" ng-hide="nodes.length == 0" ui-sortable="sortableOptions" ng-model="nodes">
<div class="nested-content__item" ng-repeat="node in nodes" ng-class="{ 'nested-content__item--active' : $parent.realCurrentNode.key == node.key, 'nested-content__item--single' : $parent.singleMode }">
<div class="umb-nested-content__item" ng-repeat="node in nodes" ng-class="{ 'umb-nested-content__item--active' : $parent.realCurrentNode.key == node.key, 'umb-nested-content__item--single' : $parent.singleMode }">
<div class="nested-content__header-bar" ng-click="$parent.editNode($index)" ng-hide="$parent.singleMode">
<div class="umb-nested-content__header-bar" ng-click="$parent.editNode($index)" ng-hide="$parent.singleMode">
<div class="nested-content__heading" ng-class="{'-with-icon': showIcons}"><i ng-if="showIcons" class="icon" ng-class="$parent.getIcon($index)"></i><span class="nested-content__item-name" ng-bind="$parent.getName($index)"></span></div>
<div class="umb-nested-content__heading" ng-class="{'-with-icon': showIcons}"><i ng-if="showIcons" class="icon" ng-class="$parent.getIcon($index)"></i><span class="umb-nested-content__item-name" ng-bind="$parent.getName($index)"></span></div>
<div class="nested-content__icons">
<a class="nested-content__icon nested-content__icon--edit" title="{{editIconTitle}}" ng-class="{ 'nested-content__icon--active' : $parent.realCurrentNode.id == node.id }" ng-click="$parent.editNode($index); $event.stopPropagation();" ng-show="$parent.maxItems > 1" prevent-default>
<div class="umb-nested-content__icons">
<a class="umb-nested-content__icon umb-nested-content__icon--edit" title="{{editIconTitle}}" ng-class="{ 'umb-nested-content__icon--active' : $parent.realCurrentNode.id == node.id }" ng-click="$parent.editNode($index); $event.stopPropagation();" ng-show="$parent.maxItems > 1" prevent-default>
<i class="icon icon-edit"></i>
</a>
<a class="nested-content__icon nested-content__icon--move" title="{{moveIconTitle}}" ng-click="$event.stopPropagation();" ng-show="$parent.nodes.length > 1" prevent-default>
<a class="umb-nested-content__icon umb-nested-content__icon--move" title="{{moveIconTitle}}" ng-click="$event.stopPropagation();" ng-show="$parent.nodes.length > 1" prevent-default>
<i class="icon icon-navigation"></i>
</a>
<a class="nested-content__icon nested-content__icon--delete" title="{{deleteIconTitle}}" ng-class="{ 'nested-content__icon--disabled': $parent.nodes.length <= $parent.minItems }" ng-click="$parent.deleteNode($index); $event.stopPropagation();" prevent-default>
<a class="umb-nested-content__icon umb-nested-content__icon--delete" title="{{deleteIconTitle}}" ng-class="{ 'umb-nested-content__icon--disabled': $parent.nodes.length <= $parent.minItems }" ng-click="$parent.deleteNode($index); $event.stopPropagation();" prevent-default>
<i class="icon icon-trash"></i>
</a>
</div>
</div>
<div class="nested-content__content" ng-if="$parent.realCurrentNode.key == node.key && !$parent.sorting">
<div class="umb-nested-content__content" ng-if="$parent.realCurrentNode.key == node.key && !$parent.sorting">
<umb-nested-content-editor ng-model="node" tab-alias="ncTabAlias" />
</div>
</div>
</div>
<div class="nested-content__help-text" ng-show="nodes.length == 0">
<div class="umb-nested-content__help-text" ng-show="nodes.length == 0">
<localize key="grid_addElement"></localize>
</div>
<div class="nested-content__footer-bar" ng-hide="nodes.length >= maxItems">
<a class="nested-content__icon" ng-click="openNodeTypePicker($event)" prevent-default>
<div class="umb-nested-content__footer-bar" ng-hide="nodes.length >= maxItems">
<a class="umb-nested-content__icon" ng-click="openNodeTypePicker($event)" prevent-default>
<i class="icon icon-add"></i>
</a>
</div>
<div class="usky-grid nested-content__node-type-picker" ng-if="overlayMenu.show">
<div class="usky-grid umb-nested-content__node-type-picker" ng-if="overlayMenu.show">
<div class="cell-tools-menu" ng-style="overlayMenu.style" style="margin: 0;" delayed-mouseleave="closeNodeTypePicker()" on-delayed-mouseleave="closeNodeTypePicker()">
<h5>
<localize key="grid_insertControl" />
@@ -183,7 +183,7 @@ angular.module("umbraco")
tagsHound.get(query, function (suggestions) {
cb(removeCurrentTagsFromSuggestions(suggestions));
});
},
}
}).bind("typeahead:selected", function (obj, datum, name) {
angularHelper.safeApply($scope, function () {
addTag(datum["value"]);
@@ -156,7 +156,7 @@
});
},
readOnly: true
},
}
]);
// initial cursor placement
@@ -266,7 +266,7 @@
});
},
readOnly: true
},
}
]);
+3 -3
View File
@@ -1034,9 +1034,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
<WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>7120</DevelopmentServerPort>
<DevelopmentServerPort>7121</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:7120</IISUrl>
<IISUrl>http://localhost:7121</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
@@ -1089,4 +1089,4 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
<Exec WorkingDirectory="$(ProjectDir)\..\..\" Command="powershell -ExecutionPolicy RemoteSigned -Command &quot;&amp;{ $env:PSModulePath = \&quot;$pwd\build\Modules\;$env:PSModulePath\&quot; ; Import-Module Umbraco.Build -Force -DisableNameChecking ; build-umbraco compile-belle }&quot;" />
</Target>
<Import Project="..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets" Condition="Exists('..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets')" />
</Project>
</Project>
@@ -51,17 +51,24 @@ namespace Umbraco.Web.Trees
internal static string GetRootNodeDisplayName(this TreeAttribute attribute, ILocalizedTextService textService)
{
var label = $"[{attribute.Alias}]";
// try to look up a the localized tree header matching the tree alias
var localizedLabel = textService.Localize("treeHeaders/" + attribute.Alias);
if (string.IsNullOrEmpty(localizedLabel) == false)
return localizedLabel;
// otherwise return the header if it's defined
if (string.IsNullOrEmpty(attribute.Title) == false)
return attribute.Title;
// if all fails, return this to signal that a label was not found
return "[" + attribute.Alias + "]";
// if the localizedLabel returns [alias] then return the title attribute from the trees.config file, if it's defined
if (localizedLabel != null && localizedLabel.Equals(label, StringComparison.InvariantCultureIgnoreCase))
{
if (string.IsNullOrEmpty(attribute.Title) == false)
label = attribute.Title;
}
else
{
// the localizedLabel translated into something that's not just [alias], so use the translation
label = localizedLabel;
}
return label;
}
internal static Attempt<Type> TryGetControllerTree(this ApplicationTree appTree)