From 8e7630cd9c027c17931342eab580c8e826a76276 Mon Sep 17 00:00:00 2001 From: Maarten Kieft Date: Thu, 17 May 2018 12:09:15 +0200 Subject: [PATCH 01/24] Make Base AnchestorOrSelf function public By making this function public, developers can use it to iterate over the tree on different property / function than the ones which are created. It makes umbraco easier to extend. Now we have to copy existing code in order to do this. --- src/Umbraco.Web/PublishedContentExtensions.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web/PublishedContentExtensions.cs b/src/Umbraco.Web/PublishedContentExtensions.cs index 6091c6c7dc..d44ea4e3b9 100644 --- a/src/Umbraco.Web/PublishedContentExtensions.cs +++ b/src/Umbraco.Web/PublishedContentExtensions.cs @@ -502,10 +502,10 @@ namespace Umbraco.Web where T : class, IPublishedContent { return new PublishedContentOrderedSet(source); - } - + } + #endregion - + #region Dynamic Linq Extensions [Obsolete("This method uses dynamics which will be removed in future versions, use strongly typed syntax instead")] @@ -517,7 +517,7 @@ namespace Umbraco.Web } [Obsolete("This method uses dynamics which will be removed in future versions, use strongly typed syntax instead")] - [EditorBrowsable(EditorBrowsableState.Never)] + [EditorBrowsable(EditorBrowsableState.Never)] public static IQueryable Where(this IEnumerable list, string predicate) { // wrap in DynamicPublishedContentList so that the ContentSet is correct @@ -530,7 +530,7 @@ namespace Umbraco.Web } [Obsolete("This method uses dynamics which will be removed in future versions, use strongly typed syntax instead")] - [EditorBrowsable(EditorBrowsableState.Never)] + [EditorBrowsable(EditorBrowsableState.Never)] public static IEnumerable> GroupBy(this IEnumerable list, string predicate) { var dList = new DynamicPublishedContentList(list); @@ -538,7 +538,7 @@ namespace Umbraco.Web } [Obsolete("This method uses dynamics which will be removed in future versions, use strongly typed syntax instead")] - [EditorBrowsable(EditorBrowsableState.Never)] + [EditorBrowsable(EditorBrowsableState.Never)] public static IQueryable Select(this IEnumerable list, string predicate, params object[] values) { var dList = new DynamicPublishedContentList(list); @@ -560,8 +560,8 @@ namespace Umbraco.Web if (content == null) throw new ArgumentNullException("content"); return new HtmlString(content.Where(predicate) ? valueIfTrue : valueIfFalse); } - - [Obsolete("This method uses dynamics which will be removed in future versions, use strongly typed syntax instead: Where(x => x.IsVisible())")] + + [Obsolete("This method uses dynamics which will be removed in future versions, use strongly typed syntax instead: Where(x => x.IsVisible())")] [EditorBrowsable(EditorBrowsableState.Never)] public static bool Where(this IPublishedContent content, string predicate) { @@ -1199,7 +1199,7 @@ namespace Umbraco.Web return content.AncestorsOrSelf(maxLevel).FirstOrDefault(); } - internal static IEnumerable AncestorsOrSelf(this IPublishedContent content, bool orSelf, Func func) + public static IEnumerable AncestorsOrSelf(this IPublishedContent content, bool orSelf, Func func) { var ancestorsOrSelf = content.EnumerateAncestors(orSelf); return func == null ? ancestorsOrSelf : ancestorsOrSelf.Where(func); From 76c924fbaa3da89d9865d9ec405e6dbb123852e3 Mon Sep 17 00:00:00 2001 From: Lars-Erik Aabech Date: Mon, 21 May 2018 17:06:12 +0200 Subject: [PATCH 02/24] Events emitted from the grid on init, row added and item added w/DOM element and scope. --- .../propertyeditors/grid/grid.controller.js | 26 ++++++++++++++++++- .../src/views/propertyeditors/grid/grid.html | 6 +++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js index 5d612f087c..b59fc6ecad 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js @@ -1,6 +1,21 @@ angular.module("umbraco") .controller("Umbraco.PropertyEditors.GridController", - function ($scope, $http, assetsService, localizationService, $rootScope, dialogService, gridService, mediaResource, imageHelper, $timeout, umbRequestHelper, angularHelper) { + function ( + $scope, + $http, + assetsService, + localizationService, + $rootScope, + dialogService, + gridService, + mediaResource, + imageHelper, + $timeout, + umbRequestHelper, + angularHelper, + $element, + eventsService + ) { // Grid status variables var placeHolder = ""; @@ -335,6 +350,8 @@ angular.module("umbraco") $scope.showRowConfigurations = false; + eventsService.emit("grid.rowAdded", { scope: $scope, element: $element, row: row }); + }; $scope.removeRow = function (section, $index) { @@ -584,6 +601,8 @@ angular.module("umbraco") cell.controls.push(newControl); + eventsService.emit("grid.itemAdded", { scope: $scope, element: $element, cell: cell, item: newControl }); + }; $scope.addTinyMce = function (cell) { @@ -873,8 +892,13 @@ angular.module("umbraco") // ********************************************* // Init grid // ********************************************* + + eventsService.emit("grid.initializing", { scope: $scope, element: $element }); + $scope.initContent(); + eventsService.emit("grid.initialized", { scope: $scope, element: $element }); + }); //Clean the grid value before submitting to the server, we don't need diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html index c2513b9760..de9860f435 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html @@ -75,7 +75,8 @@ '-active': row.active, '-active-child': row.hasActiveChild}" on-outside-click="clickOutsideRow($index, section.rows)" - bind-click-on="{{row.active}}"> + bind-click-on="{{row.active}}" + data-rowid="{{row.$uniqueId}}">
@@ -175,7 +176,8 @@ ng-class="{'-active': control.active}" on-outside-click="clickOutsideControl($index, area.controls, area)" bind-click-on="{{control.active}}" - umb-set-dirty-on-change="{{control.value}}"> + umb-set-dirty-on-change="{{control.value}}" + data-itemid="{{control.$uniqueId}}">
From 6fb4f8fc8bd9355163ba031a25b76fae1f0a1c60 Mon Sep 17 00:00:00 2001 From: Mundairson Date: Tue, 22 May 2018 01:10:41 +0100 Subject: [PATCH 03/24] Corrected some spelling and grammar. --- .../BackOfficeTours/getting-started.json | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json b/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json index 836b7a965c..4c20538fec 100644 --- a/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json +++ b/src/Umbraco.Web.UI/config/BackOfficeTours/getting-started.json @@ -24,7 +24,7 @@ "element": "#applications", "elementPreventClick": true, "title": "Main Menu", - "content": "This is the main menu in Umbraco backoffice. Here you can navigate betweeen the different sections, see your user profile and open the help drawer", + "content": "This is the main menu in Umbraco backoffice. Here you can navigate between the different sections, see your user profile and open the help drawer.", "backdropOpacity": 0.6 }, { @@ -38,7 +38,7 @@ "element": "#tree", "elementPreventClick": true, "title": "The Tree", - "content": "

This is the Tree and is the main navigation inside a section.

In the Content section the tree is called the Content tree and here you can navigate the content of your website.

" + "content": "

This is the Tree and it is the main navigation inside a section.

In the Content section the tree is called the Content tree and here you can navigate the content of your website.

" }, { "element": "[data-element='editor-container']", @@ -67,7 +67,7 @@ { "element": "[data-element~='overlay-user'] [data-element='button-overlayClose']", "title": "User profile", - "content": "Let's close the user profile again", + "content": "Let's close the user profile again.", "event": "click" }, { @@ -108,7 +108,7 @@ "steps": [ { "title": "Create your first Document Type", - "content": "

Step 1 of any site is to create a Document Type.
A Document Type is a template for content. For each type of content you want to create you'll create a Document Type. This will define were content based on this Document Type can be created, how many properties it holds and what the input method should be for these properties.

When you have at least one Document type in place you can start creating content and this content can the be used in a template.

In this tour you will learn how to set up a basic Document Type with a property to enter a short text.

", + "content": "

Step 1 of any site is to create a Document Type.
A Document Type is a template for content. For each type of content you want to create you'll create a Document Type. This will define where content based on this Document Type can be created, how many properties it holds and what the input method should be for these properties.

When you have at least one Document Type in place you can start creating content and this content can then be used in a template.

In this tour you will learn how to set up a basic Document Type with a property to enter a short text.

", "type": "intro" }, { @@ -121,14 +121,14 @@ { "element": "#tree [data-element='tree-item-documentTypes']", "title": "Create Document Type", - "content": "

Hover the Document Type tree and click the three small dots to open the context menu.

", + "content": "

Hover over the Document Type tree and click the three small dots to open the context menu.

", "event": "click", "eventElement": "#tree [data-element='tree-item-documentTypes'] [data-element='tree-item-options']" }, { "element": "#dialog [data-element='action-documentType']", "title": "Create Document Type", - "content": "

Click Document Type to create a new document type with a template. The template will be automatically created and set as the default template for this Document Type

You will use the template in a later tour render content.

", + "content": "

Click Document Type to create a new document type with a template. The template will be automatically created and set as the default template for this Document Type.

You will use the template in a later tour to render content.

", "event": "click" }, { @@ -157,7 +157,7 @@ { "element": "[data-element='property-add']", "title": "Add a property", - "content": "

Properties are the different input fields on a content page.

On our Home Page we wan't to add a welcome text.

Click Add property to open the property dialog.

", + "content": "

Properties are the different input fields on a content page.

On our Home Page we want to add a welcome text.

Click Add property to open the property dialog.

", "event": "click" }, { @@ -181,7 +181,7 @@ "element": "[data-element~='overlay-editor-picker']", "elementPreventClick": true, "title": "Editor picker", - "content": "

In the editor picker dialog we can pick one of the many build in editor.

You can choose from preconfigured data types (Reuse) or create a new configuration (Available editors)

" + "content": "

In the editor picker dialog we can pick one of the many built in editors.

You can choose from preconfigured data types (Reuse) or create a new configuration (Available editors).

" }, { "element": "[data-element~='overlay-editor-picker'] [data-element='editor-Textarea']", @@ -193,7 +193,7 @@ "element": "[data-element~='overlay-editor-settings']", "elementPreventClick": true, "title": "Editor settings", - "content": "Each property editor can have individual settings. For the textarea editor you can set a charachter limit but in this case it is not needed" + "content": "Each property editor can have individual settings. For the textarea editor you can set a character limit but in this case it is not needed." }, { "element": "[data-element~='overlay-editor-settings'] [data-element='button-overlaySubmit']", @@ -245,7 +245,7 @@ { "element": "[data-element='tree-root']", "title": "Open context menu", - "content": "

Open the context menu by hovering the root of the content section.

Now click the three small dots to the right.

", + "content": "

Open the context menu by hovering over the root of the content section.

Now click the three small dots to the right.

", "event": "click", "eventElement": "[data-element='tree-root'] [data-element='tree-item-options']" }, @@ -264,7 +264,7 @@ { "element": "[data-element='editor-content'] [data-element='property-welcomeText']", "title": "Add a welcome text", - "content": "

Add content to the Welcome Text field

If you don't have any ideas here is a start:

I am learning Umbraco. High Five I Rock #H5IR
.

" + "content": "

Add content to the Welcome Text field.

If you don't have any ideas here is a start:

I am learning Umbraco. High Five I Rock #H5IR
.

" }, { "element": "[data-element='editor-content'] [data-element='button-saveAndPublish']", @@ -291,13 +291,13 @@ "steps": [ { "title": "Render your content in a template", - "content": "

Templating in Umbraco builds on the concept of Razor Views from asp.net MVC. - This tour is a sneak peak on how to write templates in Umbraco.

In this tour you will learn how to render content from the Home Page document type so you can see the content added to our Home content page.

", + "content": "

Templating in Umbraco builds on the concept of Razor Views from ASP.NET MVC. This tour is a sneak peak on how to write templates in Umbraco.

In this tour you will learn how to render content from the Home Page document type so you can see the content added to our Home content page.

", "type": "intro" }, { "element": "#applications [data-element='section-settings']", "title": "Navigate to the Settings section", - "content": "

In the Settings section you will find all the templates

It is of course also possible to edit all your code files in your favorite code editor.

", + "content": "

In the Settings section you will find all the templates.

It is of course also possible to edit all your code files in your favorite code editor.

", "event": "click", "backdropOpacity": 0.6 }, @@ -346,7 +346,7 @@ "steps": [ { "title": "View your Umbraco site", - "content": "

Our three main components to a page is done: Document type, Template, and Content - it is now time to see the result.

In this tour you will learn how to see your published website.

", + "content": "

Our three main components to a page are done: Document type, Template, and Content. It is now time to see the result.

In this tour you will learn how to see your published website.

", "type": "intro" }, { @@ -359,7 +359,7 @@ { "element": "#tree [data-element='tree-item-Home']", "title": "Open the Home page", - "content": "

Click the Home page to open it

", + "content": "

Click the Home page to open it.

", "event": "click", "eventElement": "#tree [data-element='tree-item-Home'] a.umb-tree-item__label" }, @@ -408,7 +408,7 @@ { "element": "#tree [data-element='tree-root']", "title": "Create a new folder", - "content": "

First create a folder for your images. Hover the media root node and click the three small dots on the right side of the item.

", + "content": "

First create a folder for your images. Hover over the media root node and click the three small dots on the right side of the item.

", "event": "click", "eventElement": "#tree [data-element='tree-root'] [data-element='tree-item-options']" }, @@ -427,19 +427,19 @@ { "element": "[data-element='editor-media'] [data-element='button-save']", "title": "Save the folder", - "content": "

Click the Save button to create the new folder

", + "content": "

Click the Save button to create the new folder.

", "event": "click" }, { "element": "[data-element='editor-media'] [data-element='dropzone']", "title": "Upload images", - "content": "

In the upload area you can upload your media items.

Click the Click here to choose files-button and select a couple of images on your computer and upload them.

", + "content": "

In the upload area you can upload your media items.

Click the Click here to choose files button and select a couple of images on your computer and upload them.

", "view": "uploadimages" }, { "element": "[data-element='editor-media'] [data-element='media-grid-item-0']", "title": "View media item details", - "content": "Hover the media item and Click the purple bar to view details about the media item", + "content": "Hover over the media item and Click the purple bar to view details about the media item.", "event": "click", "eventElement": "[data-element='editor-media'] [data-element='media-grid-item-0'] [data-element='media-grid-item-edit']" }, From cd0c9a39f35dfbce4e86d26174784f65c9b23769 Mon Sep 17 00:00:00 2001 From: Seb Date: Wed, 23 May 2018 18:01:17 +0200 Subject: [PATCH 04/24] Created an innerState variable in the isolated scope of "umb-button" directive in order to ensure not to create a "state" property in the directive isolated scope. --- .../components/buttons/umbbutton.directive.js | 140 +++++++++--------- .../views/components/buttons/umb-button.html | 14 +- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbbutton.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbbutton.directive.js index 4b0bdb6c71..eab83a0d22 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbbutton.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbbutton.directive.js @@ -67,97 +67,97 @@ Use this directive to render an umbraco button. The directive can be used to gen @param {boolean=} disabled Set to true to disable the button. **/ -(function() { - 'use strict'; +(function () { + 'use strict'; - function ButtonDirective($timeout) { + function ButtonDirective($timeout) { - function link(scope, el, attr, ctrl) { + function link(scope, el, attr, ctrl) { - scope.style = null; + scope.style = null; + scope.innerState = "init"; - function activate() { + function activate() { - scope.blockElement = false; + scope.blockElement = false; - if (!scope.state) { - scope.state = "init"; - } + if (scope.buttonStyle) { - if (scope.buttonStyle) { + // make it possible to pass in multiple styles + if (scope.buttonStyle.startsWith("[") && scope.buttonStyle.endsWith("]")) { - // make it possible to pass in multiple styles - if(scope.buttonStyle.startsWith("[") && scope.buttonStyle.endsWith("]")) { - - // when using an attr it will always be a string so we need to remove square brackets - // and turn it into and array - var withoutBrackets = scope.buttonStyle.replace(/[\[\]']+/g,''); - // split array by , + make sure to catch whitespaces - var array = withoutBrackets.split(/\s?,\s?/g); - - angular.forEach(array, function(item){ - scope.style = scope.style + " " + "btn-" + item; - if(item === "block") { + // when using an attr it will always be a string so we need to remove square brackets + // and turn it into and array + var withoutBrackets = scope.buttonStyle.replace(/[\[\]']+/g, ''); + // split array by , + make sure to catch whitespaces + var array = withoutBrackets.split(/\s?,\s?/g); + + angular.forEach(array, function (item) { + scope.style = scope.style + " " + "btn-" + item; + if (item === "block") { + scope.blockElement = true; + } + }); + + } else { + scope.style = "btn-" + scope.buttonStyle; + if (scope.buttonStyle === "block") { scope.blockElement = true; } - }); - - } else { - scope.style = "btn-" + scope.buttonStyle; - if(scope.buttonStyle === "block") { - scope.blockElement = true; } + } } - } + activate(); - activate(); + var unbindStateWatcher = scope.$watch('state', function (newValue, oldValue) { + if (newValue) { + scope.innerState = newValue; + } - var unbindStateWatcher = scope.$watch('state', function(newValue, oldValue) { + if (newValue === 'success' || newValue === 'error') { + $timeout(function () { + scope.innerState = 'init'; + }, 2000); + } - if (newValue === 'success' || newValue === 'error') { - $timeout(function() { - scope.state = 'init'; - }, 2000); + }); + + scope.$on('$destroy', function () { + unbindStateWatcher(); + }); + + } + + var directive = { + transclude: true, + restrict: 'E', + replace: true, + templateUrl: 'views/components/buttons/umb-button.html', + link: link, + scope: { + action: "&?", + href: "@?", + type: "@", + buttonStyle: "@?", + state: "=?", + shortcut: "@?", + shortcutWhenHidden: "@", + label: "@?", + labelKey: "@?", + icon: "@?", + disabled: "=", + size: "@?", + alias: "@?" } + }; - }); + return directive; - scope.$on('$destroy', function() { - unbindStateWatcher(); - }); + } - } - - var directive = { - transclude: true, - restrict: 'E', - replace: true, - templateUrl: 'views/components/buttons/umb-button.html', - link: link, - scope: { - action: "&?", - href: "@?", - type: "@", - buttonStyle: "@?", - state: "=?", - shortcut: "@?", - shortcutWhenHidden: "@", - label: "@?", - labelKey: "@?", - icon: "@?", - disabled: "=", - size: "@?", - alias: "@?" - } - }; - - return directive; - - } - - angular.module('umbraco.directives').directive('umbButton', ButtonDirective); + angular.module('umbraco.directives').directive('umbButton', ButtonDirective); })(); diff --git a/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-button.html b/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-button.html index aadba077e8..5373985d4d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-button.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-button.html @@ -1,15 +1,15 @@
-
+
-
+
-
+
-
+
- + {{label}} {{label}} @@ -17,7 +17,7 @@
From 6f6252b6167cd0e633ace457bdeb1b913758f44d Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 29 May 2018 17:18:25 +0200 Subject: [PATCH 07/24] Restructures contribution guidelines into multiple files to make them easier to digest for new contributors ref: https://github.com/umbraco/issues-community/issues/2 --- CODE_OF_CONDUCT.md | 80 -------------- BUILD.md => docs/BUILD.md | 0 docs/CODE_OF_CONDUCT.md | 32 ++++++ docs/CONTRIBUTING.md | 100 ++++++++++++++++++ .../CONTRIBUTING_DETAILED.md | 64 ++--------- docs/CONTRIBUTION_GUIDELINES.md | 32 ++++++ .../PULL_REQUEST_TEMPLATE.md | 0 README.md => docs/README.md | 94 ++++++++-------- docs/REVIEW_PROCESS.md | 25 +++++ .../contributing => docs/img}/clonefork.png | Bin .../img}/createpullrequest.png | Bin .../img}/defaultbranch.png | Bin .../img}/forkrepository.png | Bin .../contributing => docs/img}/gulpbuild.png | Bin 14 files changed, 242 insertions(+), 185 deletions(-) delete mode 100644 CODE_OF_CONDUCT.md rename BUILD.md => docs/BUILD.md (100%) create mode 100644 docs/CODE_OF_CONDUCT.md create mode 100644 docs/CONTRIBUTING.md rename CONTRIBUTING.md => docs/CONTRIBUTING_DETAILED.md (73%) create mode 100644 docs/CONTRIBUTION_GUIDELINES.md rename PULL_REQUEST_TEMPLATE.md => docs/PULL_REQUEST_TEMPLATE.md (100%) rename README.md => docs/README.md (98%) create mode 100644 docs/REVIEW_PROCESS.md rename {tools/contributing => docs/img}/clonefork.png (100%) rename {tools/contributing => docs/img}/createpullrequest.png (100%) rename {tools/contributing => docs/img}/defaultbranch.png (100%) rename {tools/contributing => docs/img}/forkrepository.png (100%) rename {tools/contributing => docs/img}/gulpbuild.png (100%) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 3baa5dbe66..0000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,80 +0,0 @@ -# Code of Conduct - -## 1. Purpose - -A primary goal of Umbraco CMS is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). - -This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. - -We invite all those who participate in Umbraco CMS to help us create safe and positive experiences for everyone. - -## 2. Open Source Citizenship - -A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. - -Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. - -If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. - -## 3. Expected Behavior - -The following behaviors are expected and requested of all community members: - -* Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. -* Exercise consideration and respect in your speech and actions. -* Attempt collaboration before conflict. -* Refrain from demeaning, discriminatory, or harassing behavior and speech. -* Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. -* Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. - -## 4. Unacceptable Behavior - -The following behaviors are considered harassment and are unacceptable within our community: - -* Violence, threats of violence or violent language directed against another person. -* Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. -* Posting or displaying sexually explicit or violent material. -* Posting or threatening to post other people’s personally identifying information ("doxing"). -* Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. -* Inappropriate photography or recording. -* Inappropriate physical contact. You should have someone’s consent before touching them. -* Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. -* Deliberate intimidation, stalking or following (online or in person). -* Advocating for, or encouraging, any of the above behavior. -* Sustained disruption of community events, including talks and presentations. - -## 5. Consequences of Unacceptable Behavior - -Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. - -Anyone asked to stop unacceptable behavior is expected to comply immediately. - -If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). - -## 6. Reporting Guidelines - -If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. Please contact Sebastiaan Janssen - [sj@umbraco.dk](mailto:sj@umbraco.dk). - -Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. - -## 7. Addressing Grievances - -If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify Umbraco with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. - -## 8. Scope - -We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business. - -This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. - -## 9. Contact info - -Sebastiaan Janssen - [sj@umbraco.dk](mailto:sj@umbraco.dk) - -## 10. License and attribution - -This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). - -Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). - -Retrieved on November 22, 2016 from [http://citizencodeofconduct.org/](http://citizencodeofconduct.org/) diff --git a/BUILD.md b/docs/BUILD.md similarity index 100% rename from BUILD.md rename to docs/BUILD.md diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..d21ee5ea02 --- /dev/null +++ b/docs/CODE_OF_CONDUCT.md @@ -0,0 +1,32 @@ +# Code Of Conduct + +Our informal code of conduct concentrates on the values we, as Umbraco HQ, have set for ourselves and for our community. We expect you to be a friend. +Instead of listing out all the exact "do's" and "don't's" we want to challenge you to think about our values and apply them: + +If there's a need to talk to Umbraco HQ about anything, please make sure to send a mail to [Sebastiaan Janssen - sj@umbraco.dk](mailto:sj@umbraco.dk). + +## Be a Friend + +We welcome and thank you for registering at Our Umbraco. Find below the values that govern Umbraco and which you accept by using Our Umbraco. + +## Trust + +Assume positive intent and try to understand before being understood. + +## Respect + +Treat others as you would like to be treated. + +This also goes for treating the HQ with respect. For example: don’t promote products on [our.umbraco.org](https://our.umbraco.org) that directly compete with our commercial offerings which enables us to work for a sustainable Umbraco. + +## Open + +Be honest and straightforward. Tell it as it is. Share thoughts and knowledge and engage in collaboration. + +## Hungry + +Don't rest on your laurels and never accept the status quo. Contribute and give back to fellow Umbracians. + +## Friendly + +Don’t judge upon mistakes made but rather upon the speed and quality with which mistakes are corrected. Friendly posts and contributions generate smiles and builds long lasting relationships. \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000000..5fbc3376ed --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,100 @@ +# Contributing to Umbraco CMS + +👍🎉 First off, thanks for taking the time to contribute! 🎉👍 + +The following is a set of guidelines for contributing to Umbraco CMS. + +These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. + +Remember, we're a friendly bunch and are happy with whatever contribution you might provide. Below are guidelines for success that we've gathered over the years. If you choose to ignore them then we still love you 💖. + +## Contributing code changes + +This document gives you a quick overview on how to get started, we will link to in-depth documentation throughout if you need some more background info. + + +## Guidelines for contributions we welcome + +Not all changes are wanted so on occassion we might close a PR without merging it. We will give you feedback why we can't accept your changes and we'll be nice about it, thanking you for spending your valueable time. + +We have [documented what we consider small and large changes](CONTRIBUTION_GUIDELINES.md), make sure to talk to us before making large changes. + +Remember, if an issue is in the `Up for grabs` list or you've asked for some feedback before you sent us a PR, your PR will not be closed as unwanted. + +## How do I begin? + +Great question! The short version goes like this: + + * **Fork** - create a fork of [`Umbraco-CMS` on GitHub](https://github.com/umbraco/Umbraco-CMS) + + ![Fork the repository](img/forkrepository.png) + + * **Clone** - when GitHub has created your fork, you can clone it in your favorite Git tool + + ![Clone the fork](img/clonefork.png) + + * **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](#building-umbraco-from-source-code) + * **Change** - make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](#questions) + * **Commit** - done? Yay! 🎉 It is recommended to create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-U4-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `U4-12345` + * **Push** - great, now you can push the changes up to your fork on GitHub + * **Create pull request** - exciting! You're ready to show us your changes (or not quite ready, you just need some feedback to progress). GitHub has picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go. + + ![Create a pull request](img/createpullrequest.png) + +### Further reading + +At this point you might want to [read on about contributing in depth](CONTRIBUTING_DETAILED.md). + +### Reviews + +You've sent us your first contribution, congratulations! Now what? + +The [pull request team](#the-pr-team) can now start reviewing your proposed changes and give you feedback on them. If it's not perfect, we'll either fix up what we need or we can request you to make some additional changes. + +We have [a process in place which you can read all about](REVIEW_PROCESS.md). The very abbreviated version is: + +- Your PR will get a reply within 48 hours +- An in-depth reply will be added within at most 2 weeks +- The PR will be either merged or rejected within at most 4 weeks +- Sometimes it is difficult to meet these timelines and we'll talk to you + +## Making changes + +If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco! + +## Styleguides + +To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up. + +That said, the Umbraco development team likes to follow the hints that ReSharper gives us (no problem if you don't have this installed) and we've added a `.editorconfig` file so that Visual Studio knows what to do with whitespace, line endings, etc. + +## The PR team + +The pull request team consists of a member of Umbraco HQ, [Sebastiaan](https://github.com/nul800sebastiaan), who gets assistance from the following community members + +- [Anders Bjerner](https://github.com/abjerner) +- [Dave Woestenborghs](https://github.com/dawoe) +- [Emma Burstow](https://github.com/emaburst) +- [Kyle Weems](https://github.com/cssquirrel) +- [Poornima Nayar](https://github.com/poornimanayar) + +## Questions? + +You can get in touch with [the PR team](#the-pr-team) in multiple ways, we love open conversations and we are a friendly bunch. No question you have is stupid. Any questions you have usually helps out multiple people with the same question. Ask away: + +- If there's an existing issue on the issue tracker then that's a good place to leave questions and discuss how to start or move forward +- Unsure where to start? Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"](https://our.umbraco.org/forum/contributing-to-umbraco-cms/) forum, the team monitors that one closely +- We're also [active in the Gitter chatroom](https://gitter.im/umbraco/Umbraco-CMS) + +## Code of Conduct + +This project and everyone participating in it is governed by the [our Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [Sebastiaan Janssen - sj@umbraco.dk](mailto:sj@umbraco.dk). + + +## Contributing to Umbraco, in depth + +There are other ways to contribute, + +## Credits + +This contribution guide borrows heavily from the excellent work on [the Atom contribution guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md). A big [#h5yr](http://h5yr.com/) to them! diff --git a/CONTRIBUTING.md b/docs/CONTRIBUTING_DETAILED.md similarity index 73% rename from CONTRIBUTING.md rename to docs/CONTRIBUTING_DETAILED.md index f8d8aac342..219e8a9e0e 100644 --- a/CONTRIBUTING.md +++ b/docs/CONTRIBUTING_DETAILED.md @@ -1,17 +1,11 @@ -# Contributing to Umbraco CMS +# Contributing in detail -👍🎉 First off, thanks for taking the time to contribute! 🎉👍 +There's more than one way to contribute to Umbraco, there's some more suggestions below. -The following is a set of guidelines for contributing to Umbraco CMS. - -These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. - -Remember, we're a friendly bunch and are happy with whatever contribution you might provide. Below are guidelines for success that we've gathered over the years. If you choose to ignore them then we still love you 💖. +When contributing code to Umbraco there's plenty of things you'll want to know, skip down to [What should I know before I get started](#what-should-i-know-before-i-get-started) for the answers to your burning questions. #### Table Of Contents -[Code of Conduct](#code-of-conduct) - [How Can I Contribute?](#how-can-i-contribute) * [Reporting Bugs](#reporting-bugs) * [Suggesting Enhancements](#suggesting-enhancements) @@ -26,16 +20,6 @@ Remember, we're a friendly bunch and are happy with whatever contribution you mi * [Building Umbraco from source code](#building-umbraco-from-source-code) * [Keeping your Umbraco fork in sync with the main repository](#keeping-your-umbraco-fork-in-sync-with-the-main-repository) -[How do I even begin?](#how-do-i-even-begin) - -[Problems?](#problems) - -[Credits](#credits) - -## Code of Conduct - -This project and everyone participating in it is governed by the [our Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [Sebastiaan Janssen - sj@umbraco.dk](mailto:sj@umbraco.dk). - ## How Can I Contribute? ### Reporting Bugs @@ -135,7 +119,7 @@ To find the general areas of something you're looking to fix or improve, have a We like to use [Gitflow as much as possible](https://jeffkreeftmeijer.com/git-flow/), don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to something, usually `dev-v7`. Whatever the default is, that's where we'd like you to target your contributions. -![What branch do you want me to target?](tools/contributing/defaultbranch.png) +![What branch do you want me to target?](img/defaultbranch.png) ### Building Umbraco from source code @@ -143,7 +127,7 @@ The easiest way to get started is to run `build.bat` which will build both the b Alternatively, you can open `src\umbraco.sln` in Visual Studio 2017 ([the community edition is free](https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=Community&rel=15) for you to use to contribute to Open Source projects). In Visual Studio, find the Task Runner Explorer (in the View menu under Other Windows) and run the build task under the gulpfile. -![Gulp build in Visual Studio](tools/contributing/gulpbuild.png) +![Gulp build in Visual Studio](img/gulpbuild.png) After this build completes, you should be able to hit `F5` in Visual Studio to build and run the project. A IISExpress webserver will start and the Umbraco installer will pop up in your browser, follow the directions there to get a working Umbraco install up and running. @@ -168,40 +152,4 @@ git rebase upstream/dev-v7 In this command we're syncing with the `dev-v7` branch, but you can of course choose another one if needed. -(More info on how this works: [http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated](http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated)) - -## How do I even begin? - -Great question! The short version goes like this: - - * **Fork** - create a fork of [`Umbraco-CMS` on GitHub](https://github.com/umbraco/Umbraco-CMS) - - ![Fork the repository](tools/contributing/forkrepository.png) - - * **Clone** - when GitHub has created your fork, you can clone it in your favorite Git tool - - ![Clone the fork](tools/contributing/clonefork.png) - - * **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](#building-umbraco-from-source-code) - * **Change** - make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will happily give feedback - * **Commit** - done? Yay! 🎉 It is recommended to create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-U4-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `U4-12345` - * **Push** - great, now you can push the changes up to your fork on GitHub - * **Create pull request** - exciting! You're ready to show us your changes (or not quite ready, you just need some feedback to progress). GitHub has picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go. - - ![Create a pull request](tools/contributing/createpullrequest.png) - -The Umbraco development team can now start reviewing your proposed changes and give you feedback on them. If it's not perfect, we'll either fix up what we need or we can request you to make some additional changes. - -If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco! - -Not all changes are wanted so on occassion we might close a PR without merging it. We will give you feedback why we can't accept your changes at this and we'll be nice about it, thanking you for spending your valueable time. - -Remember, if an issue is in the `Up for grabs` list or you've asked for some feedback before you send us a PR, your PR will not be closed as unwanted. - -## Problems? - -Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"](https://our.umbraco.org/forum/contributing-to-umbraco-cms/) forum, the team monitors that one closely! - -## Credits - -This contribution guide borrows heavily from the excellent work on [the Atom contribution guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md). A big [#h5yr](http://h5yr.com/) to them! +(More info on how this works: [http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated](http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated)) \ No newline at end of file diff --git a/docs/CONTRIBUTION_GUIDELINES.md b/docs/CONTRIBUTION_GUIDELINES.md new file mode 100644 index 0000000000..50941f3caf --- /dev/null +++ b/docs/CONTRIBUTION_GUIDELINES.md @@ -0,0 +1,32 @@ +# Contributing to Umbraco CMS + +When you’re considering creating a pull request for Umbraco CMS, we will categorize them in two different sizes, small and large. + +The process for both sizes is very similar, as [explained in the contribution document](CONTRIBUTING.md#how-do-i-begin). + +## Small PRs +Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files. + +We’re usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly. See the process above. + +### Up for grabs + +Umbraco HQ will regularly mark newly created issues on the issue tracker with the `Up for grabs` tag. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. These issues are usually small enough to fit in the "Small PRs" category and we encourage anyone to pick them up and help out. +Just leave a comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has. + +## Large PRs +New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGet’s packages.config, NPM’s packages.json, etc.). + +We would love to follow the same process for larger PRs but this is not always possible due to time limitations and priorities that need to be aligned. We don’t want to put up any barriers, but this document should set the correct expectations. + +Please make sure to describe your idea in an issue, it helps to put in mockup screenshots or videos. + +If the change makes sense for HQ to include in Umbraco CMS we will leave you some feedback on how we’d like to see it being implemented. + +If a larger pull request is encouraged by Umbraco HQ, the process will be similar to what is described in the [small PRs process](#small-prs) above, we’ll get feedback to you within 14 days. Finalizing and merging the PR might take longer though as it will likely need to be picked up by the development team to make sure everything is in order. We’ll keep you posted on the progress. + +### Pull request or package? + +If it doesn’t fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and to fix bugs. + +Eventually, a package could "graduate" to be included in the CMS. \ No newline at end of file diff --git a/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from PULL_REQUEST_TEMPLATE.md rename to docs/PULL_REQUEST_TEMPLATE.md diff --git a/README.md b/docs/README.md similarity index 98% rename from README.md rename to docs/README.md index 8aee632cad..8231e53420 100644 --- a/README.md +++ b/docs/README.md @@ -1,47 +1,47 @@ -[![Build status](https://ci.appveyor.com/api/projects/status/6by6harxtxt0ocdx/branch/dev-v7?svg=true)](https://ci.appveyor.com/project/Umbraco/umbraco-cms-b2cri/branch/dev-v7) - -Umbraco CMS -=========== -The friendliest, most flexible and fastest growing ASP.NET CMS used by more than 443,000 websites worldwide: [https://umbraco.com](https://umbraco.com) - -[![ScreenShot](vimeo.png)](https://vimeo.com/172382998/) - -## Umbraco CMS -Umbraco is a free open source Content Management System built on the ASP.NET platform. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social. - -## Watch an introduction video - -[![ScreenShot](http://umbraco.com/images/whatisumbraco.png)](https://umbraco.tv/videos/umbraco-v7/content-editor/basics/introduction/cms-explanation/) - -## Umbraco - The Friendly CMS - -For the first time on the Microsoft platform, there is a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box. - -Umbraco is not only loved by developers, but is a content editors dream. Enjoy intuitive editing tools, media management, responsive views and approval workflows to send your content live. - -Used by more than 443,000 active websites including Carlsberg, Segway, Amazon and Heinz and **The Official ASP.NET and IIS.NET website from Microsoft** ([https://asp.net](https://asp.net) / [https://iis.net](https://iis.net)), you can be sure that the technology is proven, stable and scales. Backed by the team at Umbraco HQ, and supported by a dedicated community of over 220,000 craftspeople globally, you can trust that Umbraco is a safe choice and is here to stay. - -To view more examples, please visit [https://umbraco.com/why-umbraco/#caseStudies](https://umbraco.com/why-umbraco/#caseStudies) - -## Why Open Source? -As an Open Source platform, Umbraco is more than just a CMS. We are transparent with our roadmap for future versions, our incremental sprint planning notes are publicly accessible and community contributions and packages are available for all to use. - -## Trying out Umbraco CMS - -[Umbraco Cloud](https://umbraco.com) is the easiest and fastest way to use Umbraco yet with full support for all your custom .NET code and intergrations. You're up and running in less than a minute and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14 day trial, no credit card needed. - -If you want to DIY you can [download Umbraco](https://our.umbraco.org/download) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host yourself and handling deployments and upgrades is all down to you. - -## Community - -Our friendly community is available 24/7 at the community hub we call ["Our Umbraco"](https://our.umbraco.org). Our Umbraco feature forums for questions and answers, documentation, downloadable plugins for Umbraco and a rich collection of community resources. - -## Contribute to Umbraco - -Umbraco is contribution focused and community driven. If you want to contribute back to Umbraco please check out our [guide to contributing](CONTRIBUTING.md). - -## Found a bug? - -Another way you can contribute to Umbraco is by providing issue reports. For information on how to submit an issue report refer to our [online guide for reporting issues](https://our.umbraco.org/contribute/report-an-issue-or-request-a-feature). - -To view existing issues, please visit [http://issues.umbraco.org](http://issues.umbraco.org). +[![Build status](https://ci.appveyor.com/api/projects/status/6by6harxtxt0ocdx/branch/dev-v7?svg=true)](https://ci.appveyor.com/project/Umbraco/umbraco-cms-b2cri/branch/dev-v7) + +Umbraco CMS +=========== +The friendliest, most flexible and fastest growing ASP.NET CMS used by more than 443,000 websites worldwide: [https://umbraco.com](https://umbraco.com) + +[![ScreenShot](vimeo.png)](https://vimeo.com/172382998/) + +## Umbraco CMS +Umbraco is a free open source Content Management System built on the ASP.NET platform. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social. + +## Watch an introduction video + +[![ScreenShot](http://umbraco.com/images/whatisumbraco.png)](https://umbraco.tv/videos/umbraco-v7/content-editor/basics/introduction/cms-explanation/) + +## Umbraco - The Friendly CMS + +For the first time on the Microsoft platform, there is a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box. + +Umbraco is not only loved by developers, but is a content editors dream. Enjoy intuitive editing tools, media management, responsive views and approval workflows to send your content live. + +Used by more than 443,000 active websites including Carlsberg, Segway, Amazon and Heinz and **The Official ASP.NET and IIS.NET website from Microsoft** ([https://asp.net](https://asp.net) / [https://iis.net](https://iis.net)), you can be sure that the technology is proven, stable and scales. Backed by the team at Umbraco HQ, and supported by a dedicated community of over 220,000 craftspeople globally, you can trust that Umbraco is a safe choice and is here to stay. + +To view more examples, please visit [https://umbraco.com/why-umbraco/#caseStudies](https://umbraco.com/why-umbraco/#caseStudies) + +## Why Open Source? +As an Open Source platform, Umbraco is more than just a CMS. We are transparent with our roadmap for future versions, our incremental sprint planning notes are publicly accessible and community contributions and packages are available for all to use. + +## Trying out Umbraco CMS + +[Umbraco Cloud](https://umbraco.com) is the easiest and fastest way to use Umbraco yet with full support for all your custom .NET code and intergrations. You're up and running in less than a minute and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14 day trial, no credit card needed. + +If you want to DIY you can [download Umbraco](https://our.umbraco.org/download) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host yourself and handling deployments and upgrades is all down to you. + +## Community + +Our friendly community is available 24/7 at the community hub we call ["Our Umbraco"](https://our.umbraco.org). Our Umbraco feature forums for questions and answers, documentation, downloadable plugins for Umbraco and a rich collection of community resources. + +## Contribute to Umbraco + +Umbraco is contribution focused and community driven. If you want to contribute back to Umbraco please check out our [guide to contributing](CONTRIBUTING.md). + +## Found a bug? + +Another way you can contribute to Umbraco is by providing issue reports. For information on how to submit an issue report refer to our [online guide for reporting issues](https://our.umbraco.org/contribute/report-an-issue-or-request-a-feature). + +To view existing issues, please visit [http://issues.umbraco.org](http://issues.umbraco.org). diff --git a/docs/REVIEW_PROCESS.md b/docs/REVIEW_PROCESS.md new file mode 100644 index 0000000000..917d25b090 --- /dev/null +++ b/docs/REVIEW_PROCESS.md @@ -0,0 +1,25 @@ +# Review process + +You're an awesome person and have sent us your contribution in the form of a pull request! It's now time to relax for a bit and wait for our response. + +In order to set some expectations, here's what happens next. + +## Review process + +You will get an initial reply within 48 hours (workdays) to acknowledge that we’ve seen your PR and we’ll pick it up as soon as we can. + +You will get feedback within at most 14 days after opening the PR. You’ll most likely get feedback sooner though. Then there are a few possible outcomes: + +- Your proposed change is awesome! We merge it in and it will be included in the next minor release of Umbraco +- If the change is a high priority bug fix, we will cherry-pick it into the next patch release as well so that we can release it as soon as possible +- Your proposed change is awesome but needs a bit more work, we’ll give you feedback on the changes we’d like to see +- Your proposed change is awesome but.. not something we’re looking to include at this point. We’ll close your PR and the related issue (we’ll be nice about it!) + +## Are you still available? + +We understand you have other things to do and can't just drop everything to help us out. +So if we’re asking for your help to improve the PR we’ll wait for two weeks to give you a fair chance to make changes. We’ll ask for an update if we don’t hear back from you after that time. + +If we don’t hear back from you for 4 weeks, we’ll close the PR so that it doesn’t just hang around forever. You’re very welcome to re-open it once you have some more time to spend on it. + +There will be times that we really like your proposed changes and we’ll finish the final improvements we’d like to see ourselves. You still get the credits and your commits will live on in the git repository. \ No newline at end of file diff --git a/tools/contributing/clonefork.png b/docs/img/clonefork.png similarity index 100% rename from tools/contributing/clonefork.png rename to docs/img/clonefork.png diff --git a/tools/contributing/createpullrequest.png b/docs/img/createpullrequest.png similarity index 100% rename from tools/contributing/createpullrequest.png rename to docs/img/createpullrequest.png diff --git a/tools/contributing/defaultbranch.png b/docs/img/defaultbranch.png similarity index 100% rename from tools/contributing/defaultbranch.png rename to docs/img/defaultbranch.png diff --git a/tools/contributing/forkrepository.png b/docs/img/forkrepository.png similarity index 100% rename from tools/contributing/forkrepository.png rename to docs/img/forkrepository.png diff --git a/tools/contributing/gulpbuild.png b/docs/img/gulpbuild.png similarity index 100% rename from tools/contributing/gulpbuild.png rename to docs/img/gulpbuild.png From fa88efbf5ee7da291f6b71c18c76f18dedeb6c85 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 29 May 2018 17:24:14 +0200 Subject: [PATCH 08/24] Small corrections --- docs/CONTRIBUTING.md | 8 +++----- docs/CONTRIBUTING_DETAILED.md | 4 ++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 5fbc3376ed..e712db2155 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -33,7 +33,7 @@ Great question! The short version goes like this: ![Clone the fork](img/clonefork.png) - * **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](#building-umbraco-from-source-code) + * **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](BUILD.md) * **Change** - make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](#questions) * **Commit** - done? Yay! 🎉 It is recommended to create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-U4-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `U4-12345` * **Push** - great, now you can push the changes up to your fork on GitHub @@ -58,10 +58,6 @@ We have [a process in place which you can read all about](REVIEW_PROCESS.md). Th - The PR will be either merged or rejected within at most 4 weeks - Sometimes it is difficult to meet these timelines and we'll talk to you -## Making changes - -If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco! - ## Styleguides To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up. @@ -78,6 +74,8 @@ The pull request team consists of a member of Umbraco HQ, [Sebastiaan](https://g - [Kyle Weems](https://github.com/cssquirrel) - [Poornima Nayar](https://github.com/poornimanayar) +These wonderful volunteers will provide you with a first reply to your PR, review and test out your changes and might ask more questions. After that they'll let Umbraco HQ know if everything seems okay. + ## Questions? You can get in touch with [the PR team](#the-pr-team) in multiple ways, we love open conversations and we are a friendly bunch. No question you have is stupid. Any questions you have usually helps out multiple people with the same question. Ask away: diff --git a/docs/CONTRIBUTING_DETAILED.md b/docs/CONTRIBUTING_DETAILED.md index 219e8a9e0e..557aaa0b28 100644 --- a/docs/CONTRIBUTING_DETAILED.md +++ b/docs/CONTRIBUTING_DETAILED.md @@ -84,6 +84,10 @@ The most successful pull requests usually look a like this: Again, these are guidelines, not strict requirements. +## Making changes after the PR was opened + +If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco! + ## Styleguides To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up. From 7853245fe43a0cad5a5137952f7187b8f79bcd7e Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 29 May 2018 17:33:06 +0200 Subject: [PATCH 09/24] Small corrections --- docs/CONTRIBUTION_GUIDELINES.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/CONTRIBUTION_GUIDELINES.md b/docs/CONTRIBUTION_GUIDELINES.md index 50941f3caf..2e4a9ed334 100644 --- a/docs/CONTRIBUTION_GUIDELINES.md +++ b/docs/CONTRIBUTION_GUIDELINES.md @@ -7,12 +7,13 @@ The process for both sizes is very similar, as [explained in the contribution do ## Small PRs Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files. -We’re usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly. See the process above. +We’re usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly [as per the described process](REVIEW_PROCESS.md). ### Up for grabs Umbraco HQ will regularly mark newly created issues on the issue tracker with the `Up for grabs` tag. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. These issues are usually small enough to fit in the "Small PRs" category and we encourage anyone to pick them up and help out. -Just leave a comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has. + +If you do start working on something, make sure leave a small comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has. ## Large PRs New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGet’s packages.config, NPM’s packages.json, etc.). From 5d978a62fd6ae937d96fa0ddcdf54c6b7f69883f Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 30 May 2018 10:19:21 +0200 Subject: [PATCH 10/24] Small corrections --- docs/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index e712db2155..3771aaf0ab 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -70,7 +70,7 @@ The pull request team consists of a member of Umbraco HQ, [Sebastiaan](https://g - [Anders Bjerner](https://github.com/abjerner) - [Dave Woestenborghs](https://github.com/dawoe) -- [Emma Burstow](https://github.com/emaburst) +- [Emma Burstow](https://github.com/emmaburstow) - [Kyle Weems](https://github.com/cssquirrel) - [Poornima Nayar](https://github.com/poornimanayar) From 3743fc1c29d9b57add4e8920793f9ae48a83cf57 Mon Sep 17 00:00:00 2001 From: Peter Duncanson Date: Thu, 31 May 2018 13:37:24 +0100 Subject: [PATCH 11/24] Added Gulp Images to compress images as part of the front end build process --- src/Umbraco.Web.UI.Client/gulpfile.js | 12 ++++++++++++ src/Umbraco.Web.UI.Client/package.json | 1 + 2 files changed, 13 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/gulpfile.js b/src/Umbraco.Web.UI.Client/gulpfile.js index bb3ff65cf0..afaaadf050 100644 --- a/src/Umbraco.Web.UI.Client/gulpfile.js +++ b/src/Umbraco.Web.UI.Client/gulpfile.js @@ -7,6 +7,7 @@ var sort = require('gulp-sort'); var connect = require('gulp-connect'); var open = require('gulp-open'); var runSequence = require('run-sequence'); +const imagemin = require('gulp-imagemin'); var _ = require('lodash'); var MergeStream = require('merge-stream'); @@ -206,6 +207,17 @@ gulp.task('dependencies', function () { //css, fonts and image files stream.add( gulp.src(sources.globs.assets) + .pipe(imagemin([ + imagemin.gifsicle({interlaced: true}), + imagemin.jpegtran({progressive: true}), + imagemin.optipng({optimizationLevel: 5}), + imagemin.svgo({ + plugins: [ + {removeViewBox: true}, + {cleanupIDs: false} + ] + }) + ])) .pipe(gulp.dest(root + targets.assets)) ); diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index a25176927c..6e390b8b24 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -27,6 +27,7 @@ "gulp": "^3.9.1", "gulp-concat": "^2.6.0", "gulp-connect": "5.0.0", + "gulp-imagemin": "^4.1.0", "gulp-less": "^3.5.0", "gulp-ngdocs": "^0.3.0", "gulp-open": "^2.1.0", From 867ccaf2b1e4b9c83c2e7eae8a49c4d086ff4e35 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 31 May 2018 15:26:12 +0200 Subject: [PATCH 12/24] Small corrections --- docs/CONTRIBUTING.md | 3 +-- docs/CONTRIBUTING_DETAILED.md | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 0fbb011b36..e59fad239f 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,5 +1,4 @@ _Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/CONTRIBUTING.md) to go to the v8 branch_ - # Contributing to Umbraco CMS 👍🎉 First off, thanks for taking the time to contribute! 🎉👍 @@ -93,7 +92,7 @@ This project and everyone participating in it is governed by the [our Code of Co ## Contributing to Umbraco, in depth -There are other ways to contribute, +There are other ways to contribute, and there's a few more things that you might be wondering about. We will answer the [most common questions and ways to contribute in our detailed documentation](CONTRIBUTING_DETAILED.md). ## Credits diff --git a/docs/CONTRIBUTING_DETAILED.md b/docs/CONTRIBUTING_DETAILED.md index 557aaa0b28..bffac4801b 100644 --- a/docs/CONTRIBUTING_DETAILED.md +++ b/docs/CONTRIBUTING_DETAILED.md @@ -36,7 +36,7 @@ Before creating bug reports, please check [this list](#before-submitting-a-bug-r * **Use the Google**. Whatever you're experiencing, Google it plus "Umbraco" - usually you can get some pretty good hints from the search results, including open issues and further troubleshooting hints. * If you do find and existing issue has **and the issue is still open**, add a comment to the existing issue if you have additional information. If you have the same problem and no new info to add, just "star" the issue. -Explain the problem and include additional details to help maintainers reproduce the problem. The following is a long description which we've boiled down into a few very simple question in the issue tracker when you create a new issue. We're listing the following hints to indicate that the most successful reports usually have a lot of this ground covered: +Explain the problem and include additional details to help maintainers reproduce the problem. The following is a long description which we've boiled down into a few very simple questions in the issue tracker when you create a new issue. We're listing the following hints to indicate that the most successful reports usually have a lot of this ground covered: * **Use a clear and descriptive title** for the issue to identify the problem. * **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by explaining which steps you took in the backoffice to get to a certain undesireable result, e.g. you created a document type, inherting 3 levels deep, added a certain datatype, tried to save it and you got an error. @@ -58,7 +58,7 @@ Include details about your configuration and environment: ### Suggesting Enhancements -This section guides you through submitting an enhancement suggestion for Atom, including completely new features and minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand your suggestion 📝 and find related suggestions 🔎. +This section guides you through submitting an enhancement suggestion for Umbraco, including completely new features and minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand your suggestion 📝 and find related suggestions 🔎. Most of the suggestions in the [reporting bugs](#reporting-bugs) section also count for suggesting enhancements. From cde7f0fa18e66446cbed17f277be155efefb2a0b Mon Sep 17 00:00:00 2001 From: Chris Houston Date: Thu, 31 May 2018 14:50:01 -0400 Subject: [PATCH 13/24] Updated references to CodeGarden in the installer and the umbraco.config test file to mention May instead of June :) --- .../UmbracoExamine/TestFiles/umbraco.config | 13 +++++++------ .../src/installer/installer.service.js | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Tests/UmbracoExamine/TestFiles/umbraco.config b/src/Umbraco.Tests/UmbracoExamine/TestFiles/umbraco.config index 9da1de847a..94af72c3c4 100644 --- a/src/Umbraco.Tests/UmbracoExamine/TestFiles/umbraco.config +++ b/src/Umbraco.Tests/UmbracoExamine/TestFiles/umbraco.config @@ -429,9 +429,10 @@ Umbraco.

2009-06-22T00:00:00 - Come join the annual umbraco developer conference in Wonderful -Copenhagen on June 22nd - 23rd. Two days for insights, eye-openers, + + Come join the annual Umbraco developer conference in Wonderful +Odense on May 22nd - 24th. Two days for insights, eye-openers, great conversations and friendly people.

The who's who of umbraco will be gathered and share their @@ -441,8 +442,8 @@ huge industrial venue in central Copenhagen where we'll have one huge room, three rooms for breakout sessions and a Café that serves your taste of espresso.

-

Come join the annual umbraco developer conference in Wonderful -Copenhagen on June 22nd - 23rd. Two days for insights, eye-openers, +

Come join the annual Umbraco developer conference in Wonderful +Odense on May 22nd - 24th. Two days for insights, eye-openers, great conversations and friendly people.

We've planned a program that fits both experienced umbraco users @@ -613,4 +614,4 @@ www.yourcompany.co.uk]]> 0 - \ No newline at end of file + diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js index 7d586cae82..efbb13fad4 100644 --- a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js +++ b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js @@ -29,9 +29,9 @@ angular.module("umbraco.install").factory('installerService', function($rootScop "There's a pretty big chance, you've visited a website powered by Umbraco today", "'Umbraco-spotting' is the game of spotting big brands running Umbraco", "At least 4 people have the Umbraco logo tattooed on them", - "'Umbraco' is the danish name for an allen key", + "'Umbraco' is the Danish name for an allen key", "Umbraco has been around since 2005, that's a looong time in IT", - "More than 600 people from all over the world meet each year in Denmark in June for our annual conference CodeGarden", + "More than 600 people from all over the world meet each year in Denmark in May for our annual conference CodeGarden", "While you are installing Umbraco someone else on the other side of the planet is probably doing it too", "You can extend Umbraco without modifying the source code using either JavaScript or C#", "Umbraco has been installed in more than 198 countries" From ccc8868f68714478ebccf62875a7aa8d9fcd1250 Mon Sep 17 00:00:00 2001 From: Claus Date: Fri, 1 Jun 2018 13:06:13 +0200 Subject: [PATCH 14/24] fixes U4-11338 Language dropdown fails when invalid cultures are present --- .../Trees/LanguageTreeController.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web/Trees/LanguageTreeController.cs b/src/Umbraco.Web/Trees/LanguageTreeController.cs index 5481b7d40c..4374e1a364 100644 --- a/src/Umbraco.Web/Trees/LanguageTreeController.cs +++ b/src/Umbraco.Web/Trees/LanguageTreeController.cs @@ -5,9 +5,12 @@ using System.Net.Http.Formatting; using System.Web.Services.Description; using umbraco; using umbraco.BusinessLogic.Actions; +using umbraco.cms.presentation; using Umbraco.Core; using Umbraco.Core.Models; using umbraco.presentation.actions; +using Umbraco.Core.Logging; +using Umbraco.Core.Services; using Umbraco.Web.Models.Trees; using Umbraco.Web.Mvc; using Umbraco.Web.WebApi.Filters; @@ -42,9 +45,18 @@ namespace Umbraco.Web.Trees var languages = Services.LocalizationService.GetAllLanguages(); foreach (var language in languages) { - nodes.Add( - CreateTreeNode( - language.Id.ToString(CultureInfo.InvariantCulture), "-1", queryStrings, language.CultureInfo.DisplayName, "icon-flag-alt", false, + string displayName; + try + { + displayName = language.CultureInfo.DisplayName; + } + catch (CultureNotFoundException ex) + { + Logger.Error(string.Format("Could not find the specified culture: '{0}'. Please make sure this culture is installed on your machine.", language.IsoCode), ex); + displayName = "Unknown Locale (" + language.IsoCode + ")"; + } + nodes.Add(CreateTreeNode( + language.Id.ToString(CultureInfo.InvariantCulture), "-1", queryStrings, displayName, "icon-flag-alt", false, //TODO: Rebuild the language editor in angular, then we dont need to have this at all (which is just a path to the legacy editor) "/" + queryStrings.GetValue("application") + "/framed/" + Uri.EscapeDataString("settings/editLanguage.aspx?id=" + language.Id))); From 6188629da675f18b04b42c2ee06b7de7a8a082a3 Mon Sep 17 00:00:00 2001 From: Jan Skovgaard Date: Fri, 1 Jun 2018 22:03:10 +0200 Subject: [PATCH 15/24] Convert the default boring checkbox to the shiny new and beautiful toggle based on the umb-toggle directive --- .../prevalueeditors/boolean.controller.js | 28 ++++++++++++++++++- .../src/views/prevalueeditors/boolean.html | 10 ++++--- .../boolean/boolean.controller.js | 18 ++++++++---- .../propertyeditors/boolean/boolean.html | 7 +++-- 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.controller.js b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.controller.js index a7bf0ac280..e397722f7d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.controller.js @@ -1,4 +1,30 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.BooleanController", function ($scope) { - $scope.htmlId = "bool-" + String.CreateGuid(); + + function updateToggleValue() { + $scope.toggleValue = false; + + if ($scope.model && $scope.model.value && ($scope.model.value.toString() === "1" || angular.lowercase($scope.model.value) === "true")) { + $scope.toggleValue = true; + } + } + + if($scope.model.value === null){ + $scope.model.value = "0"; + } + + updateToggleValue(); + + $scope.toggle = function(){ + if($scope.model.value === 1 || $scope.model.value === "1"){ + $scope.model.value = "0"; + updateToggleValue(); + + return; + } + + $scope.model.value = "1"; + + updateToggleValue(); + } }); diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.html b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.html index 880647a0df..2aeb1222b6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.html +++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/boolean.html @@ -1,4 +1,6 @@ - +

+ + +
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.controller.js index 422f761851..6c16a32790 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.controller.js @@ -4,7 +4,7 @@ function booleanEditorController($scope, $rootScope, assetsService) { $scope.renderModel = { value: false }; - + if ($scope.model.config && $scope.model.config.default && $scope.model.config.default.toString() === "1" && $scope.model && !$scope.model.value) { $scope.renderModel.value = true; } @@ -16,10 +16,6 @@ function booleanEditorController($scope, $rootScope, assetsService) { setupViewModel(); - $scope.$watch("renderModel.value", function (newVal) { - $scope.model.value = newVal === true ? "1" : "0"; - }); - //here we declare a special method which will be called whenever the value has changed from the server //this is instead of doing a watch on the model.value = faster $scope.model.onValueChanged = function (newVal, oldVal) { @@ -27,5 +23,17 @@ function booleanEditorController($scope, $rootScope, assetsService) { setupViewModel(); }; + // Update the value when the toggle is clicked + $scope.toggle = function(){ + if($scope.renderModel.value){ + $scope.model.value = "0"; + setupViewModel(); + return; + } + + $scope.model.value = "1"; + setupViewModel(); + }; + } angular.module("umbraco").controller("Umbraco.PropertyEditors.BooleanController", booleanEditorController); diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html index b2373f2d12..10f388a0d0 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.html @@ -1,3 +1,6 @@
- -
\ No newline at end of file + + +
From 697cc7a420ec2bf005047eea15951f1535adda08 Mon Sep 17 00:00:00 2001 From: Dave Woestenborghs Date: Mon, 4 Jun 2018 08:45:09 +0200 Subject: [PATCH 16/24] U4-11412 hide cancel button in umb-confirm when handler is not defined --- .../src/views/components/umb-confirm.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html b/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html index 504122012a..13920b3af9 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html @@ -3,8 +3,8 @@ - \ No newline at end of file + From 03019e9676a2277b61c3f9a18b3d0063a6bf7ca8 Mon Sep 17 00:00:00 2001 From: Dave Woestenborghs Date: Mon, 4 Jun 2018 08:52:48 +0200 Subject: [PATCH 17/24] U4-11412 only show cancel and confirm button when a handler is attached --- .../common/directives/components/umbconfirm.directive.js | 9 +++++++++ .../src/views/components/umb-confirm.html | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js index 0c618d9de3..11feb4e790 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js @@ -18,7 +18,16 @@ function confirmDirective() { caption: '@' }, link: function (scope, element, attr, ctrl) { + scope.showCancel = false; + scope.showConfirm = false; + if (scope.onConfirm) { + scope.showConfirm = true; + } + + if (scope.onCancel) { + scope.showCancel = true; + } } }; } diff --git a/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html b/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html index 13920b3af9..5eb55144b2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/umb-confirm.html @@ -3,8 +3,8 @@
- Cancel - Ok + Cancel + Ok
From fe2ff696c5a8a3a05d39bfe09f60b4ae7f2b599a Mon Sep 17 00:00:00 2001 From: Dave Woestenborghs Date: Mon, 4 Jun 2018 09:06:25 +0200 Subject: [PATCH 18/24] U4-11412 documented umbConfirm directive --- .../components/umbconfirm.directive.js | 55 ++++++++++++++++--- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js index 11feb4e790..507032e4b4 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbconfirm.directive.js @@ -1,12 +1,51 @@ /** - * @ngdoc directive - * @name umbraco.directives.directive:umbConfirm - * @function - * @description - * A confirmation dialog - * - * @restrict E - */ +@ngdoc directive +@name umbraco.directives.directive:umbConfirm +@restrict E +@scope + +@description +A confirmation dialog + + +

Markup example

+
+	
+ + + +
+
+ +

Controller example

+
+	(function () {
+		"use strict";
+
+		function Controller() {
+
+            var vm = this;
+
+            vm.onConfirm = function() {
+                alert('Confirm clicked');
+            };
+
+            vm.onCancel = function() {
+                alert('Cancel clicked');
+            }
+
+
+        }
+
+		angular.module("umbraco").controller("My.Controller", Controller);
+
+	})();
+
+ +@param {string} caption (attribute): The caption shown above the buttons +@param {callback} on-confirm (attribute): The call back when the "OK" button is clicked. If not set the button will not be shown +@param {callback} on-cancel (atribute): The call back when the "Cancel" button is clicked. If not set the button will not be shown +**/ function confirmDirective() { return { restrict: "E", // restrict to an element From 42a68726857faf352a3873ee9c0c0171a83d4ebd Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Mon, 4 Jun 2018 13:51:12 +0200 Subject: [PATCH 19/24] Move image to the new location --- docs/README.md | 2 +- vimeo.png => docs/img/vimeo.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename vimeo.png => docs/img/vimeo.png (100%) diff --git a/docs/README.md b/docs/README.md index 5f9e7dc513..64282ea2e8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ Umbraco CMS =========== The friendliest, most flexible and fastest growing ASP.NET CMS used by more than 443,000 websites worldwide: [https://umbraco.com](https://umbraco.com) -[![ScreenShot](vimeo.png)](https://vimeo.com/172382998/) +[![ScreenShot](img/vimeo.png)](https://vimeo.com/172382998/) ## Umbraco CMS Umbraco is a free open source Content Management System built on the ASP.NET platform. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social. diff --git a/vimeo.png b/docs/img/vimeo.png similarity index 100% rename from vimeo.png rename to docs/img/vimeo.png From 89530217847e36682db031e01deb762fda0b61ba Mon Sep 17 00:00:00 2001 From: Mundairson Date: Tue, 5 Jun 2018 10:58:45 +0100 Subject: [PATCH 20/24] Corrected the VersionCheckPeriod property's XML comment. --- src/Umbraco.Core/Configuration/GlobalSettings.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Configuration/GlobalSettings.cs b/src/Umbraco.Core/Configuration/GlobalSettings.cs index 395502d1b2..2ac8e7d2ac 100644 --- a/src/Umbraco.Core/Configuration/GlobalSettings.cs +++ b/src/Umbraco.Core/Configuration/GlobalSettings.cs @@ -35,7 +35,7 @@ namespace Umbraco.Core.Configuration private static Version _version; private static readonly object Locker = new object(); //make this volatile so that we can ensure thread safety with a double check lock - private static volatile string _reservedUrlsCache; + private static volatile string _reservedUrlsCache; private static string _reservedPathsCache; private static HashSet _reservedList = new HashSet(); private static string _reservedPaths; @@ -190,7 +190,7 @@ namespace Umbraco.Core.Configuration /// This will return the MVC area that we will route all custom routes through like surface controllers, etc... /// We will use the 'Path' (default ~/umbraco) to create it but since it cannot contain '/' and people may specify a path of ~/asdf/asdf/admin /// we will convert the '/' to '-' and use that as the path. its a bit lame but will work. - /// + /// /// We also make sure that the virtual directory (SystemDirectories.Root) is stripped off first, otherwise we'd end up with something /// like "MyVirtualDirectory-Umbraco" instead of just "Umbraco". /// @@ -205,7 +205,7 @@ namespace Umbraco.Core.Configuration var path = Path; if (path.StartsWith(SystemDirectories.Root)) // beware of TrimStart, see U4-2518 path = path.Substring(SystemDirectories.Root.Length); - return path.TrimStart('~').TrimStart('/').Replace('/', '-').Trim().ToLower(); + return path.TrimStart('~').TrimStart('/').Replace('/', '-').Trim().ToLower(); } } @@ -312,7 +312,7 @@ namespace Umbraco.Core.Configuration SetMembershipProvidersLegacyEncoding(UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider, value); } } - + /// /// Saves a setting into the configuration file. /// @@ -503,7 +503,7 @@ namespace Umbraco.Core.Configuration } /// - /// Returns a string value to determine if umbraco should skip version-checking. + /// Returns the number of days that should take place between version checks. /// /// The version check period in days (0 = never). public static int VersionCheckPeriod From 379ac8a3cb83dad203238fc2b4c60231c84bbd79 Mon Sep 17 00:00:00 2001 From: Mundairson Date: Tue, 5 Jun 2018 12:25:06 +0100 Subject: [PATCH 21/24] Refactored the extension method to call the native method. --- src/Umbraco.Core/StringExtensions.cs | 25 ++++++++++--------- .../Strings/StringExtensionsTests.cs | 23 +++++++++++++++++ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index 141a8fe28b..e4f313795b 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -8,14 +8,12 @@ using System.Linq; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; -using System.Web; -using System.Xml; -using Newtonsoft.Json; -using Umbraco.Core.Configuration; using System.Web.Security; -using Umbraco.Core.Strings; +using Newtonsoft.Json; using Umbraco.Core.CodeAnnotations; +using Umbraco.Core.Configuration; using Umbraco.Core.IO; +using Umbraco.Core.Strings; namespace Umbraco.Core { @@ -472,13 +470,16 @@ namespace Umbraco.Core return ch.ToString(CultureInfo.InvariantCulture) == ch.ToString(CultureInfo.InvariantCulture).ToUpperInvariant(); } - /// Is null or white space. - /// The str. - /// The is null or white space. - public static bool IsNullOrWhiteSpace(this string str) - { - return (str == null) || (str.Trim().Length == 0); - } + /// Indicates whether a specified string is null, empty, or + /// consists only of white-space characters. + /// The value to check. + /// Returns if the value is null, + /// empty, or consists only of white-space characters, otherwise + /// returns . + public static bool IsNullOrWhiteSpace(this string value) => string.IsNullOrWhiteSpace(value); + //{ + // return (value == null) || (value.Trim().Length == 0); + //} public static string IfNullOrWhiteSpace(this string str, string defaultValue) { diff --git a/src/Umbraco.Tests/Strings/StringExtensionsTests.cs b/src/Umbraco.Tests/Strings/StringExtensionsTests.cs index f5f69e37cd..836930c48a 100644 --- a/src/Umbraco.Tests/Strings/StringExtensionsTests.cs +++ b/src/Umbraco.Tests/Strings/StringExtensionsTests.cs @@ -161,6 +161,29 @@ namespace Umbraco.Tests.Strings Assert.AreEqual(expected, output); } + [TestCase("", true)] + [TestCase(" ", true)] + [TestCase("\r\n\r\n", true)] + [TestCase("\r\n", true)] + [TestCase(@" + Hello + ", false)] + [TestCase(null, true)] + [TestCase("a", false)] + [TestCase("abc", false)] + [TestCase("abc ", false)] + [TestCase(" abc", false)] + [TestCase(" abc ", false)] + public void IsNullOrWhiteSpace(string value, bool expected) + { + // Act + bool result = value.IsNullOrWhiteSpace(); + + // Assert + Assert.AreEqual(expected, result); + } + + // FORMAT STRINGS // note: here we just ensure that the proper helper gets called properly From e7c1d3dd2e509c1d87c8c004ed6fe08b7ba0f062 Mon Sep 17 00:00:00 2001 From: Mundairson Date: Tue, 5 Jun 2018 12:25:37 +0100 Subject: [PATCH 22/24] Removed old version. --- src/Umbraco.Core/StringExtensions.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index e4f313795b..ce9ac77712 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -477,9 +477,6 @@ namespace Umbraco.Core /// empty, or consists only of white-space characters, otherwise /// returns . public static bool IsNullOrWhiteSpace(this string value) => string.IsNullOrWhiteSpace(value); - //{ - // return (value == null) || (value.Trim().Length == 0); - //} public static string IfNullOrWhiteSpace(this string str, string defaultValue) { From faf98002350f56f1dd9cfc5cef32c7364b35e295 Mon Sep 17 00:00:00 2001 From: Wojciech Kmiecik Date: Tue, 5 Jun 2018 17:17:14 +0200 Subject: [PATCH 23/24] fix U4-10936 when ceratin chrome extensions are enabled --- .../src/common/services/iconhelper.service.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/iconhelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/iconhelper.service.js index 04194838ab..a57fd606aa 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/iconhelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/iconhelper.service.js @@ -166,7 +166,13 @@ function iconHelper($q, $timeout) { var c = ".icon-"; for (var i = document.styleSheets.length - 1; i >= 0; i--) { - var classes = document.styleSheets[i].rules || document.styleSheets[i].cssRules; + var classes = null; + try { + classes = document.styleSheets[i].rules || document.styleSheets[i].cssRules; + } catch (e) { + console.warn("Can't read the css rules of: " + document.styleSheets[i].href, e); + continue; + } if (classes !== null) { for(var x=0;x Date: Wed, 6 Jun 2018 14:17:56 -0400 Subject: [PATCH 24/24] Fixes issue: U4-11416 - Better formatting for the video tiles in the developer section. (#2673) --- src/Umbraco.Web.UI.Client/src/less/belle.less | 1 + .../src/less/getstarted.less | 88 +++++++++++++++++++ .../developer/developerdashboardvideos.html | 33 ++++--- 3 files changed, 104 insertions(+), 18 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/less/getstarted.less diff --git a/src/Umbraco.Web.UI.Client/src/less/belle.less b/src/Umbraco.Web.UI.Client/src/less/belle.less index fb31889fd0..90521e1ec7 100644 --- a/src/Umbraco.Web.UI.Client/src/less/belle.less +++ b/src/Umbraco.Web.UI.Client/src/less/belle.less @@ -176,6 +176,7 @@ @import "hacks.less"; @import "healthcheck.less"; +@import "getstarted.less"; // cleanup properties.less when it is done @import "properties.less"; diff --git a/src/Umbraco.Web.UI.Client/src/less/getstarted.less b/src/Umbraco.Web.UI.Client/src/less/getstarted.less new file mode 100644 index 0000000000..807d0e863f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/less/getstarted.less @@ -0,0 +1,88 @@ +.umb-getstarted { + display: flex; + flex-wrap: wrap; + margin-left: -10px; + margin-right: -10px; +} + +.umb-getstartedcards { + display: flex; + flex-wrap: wrap; + margin: 0 auto; + max-width: 100%; + + @media (min-width: 500px) { + margin: 0 -10px; + } +} + +.umb-getstartedcard { + width: 100%; + padding: 0.5em; + text-align: center; + display: flex; + align-items: center; + border: 1px solid #d8d7d9; + background-color: #fff; + margin: 0 0 0.5em; + + @media (min-width: 500px) { + display: block; + align-items: unset; + padding: 1em 1em 0 1em; + margin: 0 10px 20px; + width: auto; + flex-basis: 35%; + max-width: 35%; + } + + @media (min-width: 768px) { + width: auto; + flex-basis: 14%; + max-width: 14%; + } + + @media (min-width: 1930px) { + width: auto; + flex-basis: 7%; + max-width: 7%; + } +} + + +.umb-getstartedcard img { + height: 3em; + max-width: 100%; + + @media (min-width: 500px) { + height: auto; + } +} + +.umb-getstartedcards { + margin: 0 auto; + max-width: 100%; +} + +.umb-getstartedbody { + font-weight: bold; + margin: 0.5em; + + @media (min-width: 500px) { + padding: 10px; + margin: auto; + } +} + +.umb-getstartedbody p { + margin: 0; + + @media (min-width: 500px) { + margin: inherit; + } +} + +.umb-getstartedcard:hover { + border: 1px solid @turquoise; + cursor: pointer; +} diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/developer/developerdashboardvideos.html b/src/Umbraco.Web.UI.Client/src/views/dashboard/developer/developerdashboardvideos.html index 0ad779cf3e..84de8029f2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/developer/developerdashboardvideos.html +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/developer/developerdashboardvideos.html @@ -1,18 +1,15 @@ -

Hours of Umbraco training videos are only a click away

-

Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco, then visit umbraco.tv for even more Umbraco videos.

- - +

Hours of Umbraco training videos are only a click away

+

Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco, then visit umbraco.tv for even more Umbraco videos.

+ +