Merge branch 'dev-v7' into 7.3.0

Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
This commit is contained in:
Shannon
2015-01-07 15:54:08 +11:00
39 changed files with 465 additions and 200 deletions

View File

@@ -15,4 +15,4 @@ function noDirtyCheck() {
}
};
}
angular.module('umbraco.directives').directive("noDirtyCheck", noDirtyCheck);
angular.module('umbraco.directives.validation').directive("noDirtyCheck", noDirtyCheck);

View File

@@ -27,4 +27,4 @@ function valHighlight($timeout) {
}
};
}
angular.module('umbraco.directives').directive("valHighlight", valHighlight);
angular.module('umbraco.directives.validation').directive("valHighlight", valHighlight);

View File

@@ -0,0 +1,44 @@
/**
* @ngdoc directive
* @name umbraco.directives.directive:valEmail
* @restrict A
* @description A custom directive to validate an email address string, this is required because angular's default validator is incorrect.
**/
function valEmail(valEmailExpression) {
return {
require: 'ngModel',
restrict: "A",
link: function (scope, elm, attrs, ctrl) {
var patternValidator = function (viewValue) {
//NOTE: we don't validate on empty values, use required validator for that
if (!viewValue || valEmailExpression.EMAIL_REGEXP.test(viewValue)) {
// it is valid
ctrl.$setValidity('valEmail', true);
//assign a message to the validator
ctrl.errorMsg = "";
return viewValue;
}
else {
// it is invalid, return undefined (no model update)
ctrl.$setValidity('valEmail', false);
//assign a message to the validator
ctrl.errorMsg = "Invalid email";
return undefined;
}
};
ctrl.$formatters.push(patternValidator);
ctrl.$parsers.push(patternValidator);
}
};
}
angular.module('umbraco.directives.validation')
.directive("valEmail", valEmail)
.factory('valEmailExpression', function() {
return {
EMAIL_REGEXP: /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i
};
});

View File

@@ -105,4 +105,4 @@ function valFormManager(serverValidationManager, $rootScope, $log, $timeout, not
}
};
}
angular.module('umbraco.directives').directive("valFormManager", valFormManager);
angular.module('umbraco.directives.validation').directive("valFormManager", valFormManager);

View File

@@ -182,4 +182,4 @@ function valPropertyMsg(serverValidationManager) {
}
};
}
angular.module('umbraco.directives').directive("valPropertyMsg", valPropertyMsg);
angular.module('umbraco.directives.validation').directive("valPropertyMsg", valPropertyMsg);

View File

@@ -61,4 +61,4 @@ function valRegex() {
}
};
}
angular.module('umbraco.directives').directive("valRegex", valRegex);
angular.module('umbraco.directives.validation').directive("valRegex", valRegex);

View File

@@ -91,4 +91,4 @@ function valServer(serverValidationManager) {
}
};
}
angular.module('umbraco.directives').directive("valServer", valServer);
angular.module('umbraco.directives.validation').directive("valServer", valServer);

View File

@@ -51,4 +51,4 @@ function valServerField(serverValidationManager) {
}
};
}
angular.module('umbraco.directives').directive("valServerField", valServerField);
angular.module('umbraco.directives.validation').directive("valServerField", valServerField);

View File

@@ -35,4 +35,4 @@ function valTab() {
}
};
}
angular.module('umbraco.directives').directive("valTab", valTab);
angular.module('umbraco.directives.validation').directive("valTab", valTab);

View File

@@ -84,4 +84,4 @@ function valToggleMsg(serverValidationManager) {
* @requires formController
* @description This directive will show/hide an error based on: is the value + the given validator invalid? AND, has the form been submitted ?
**/
angular.module('umbraco.directives').directive("valToggleMsg", valToggleMsg);
angular.module('umbraco.directives.validation').directive("valToggleMsg", valToggleMsg);

View File

@@ -7,10 +7,11 @@ LazyLoad.js( [
'lib/angular/1.1.5/angular-mocks.js',
'lib/angular/1.1.5/angular-sanitize.min.js',
'lib/underscore/underscore-min.js',
'js/umbraco.installer.js'
'js/umbraco.installer.js',
'js/umbraco.directives.js'
], function () {
jQuery(document).ready(function () {
angular.bootstrap(document, ['ngSanitize', 'umbraco.install']);
angular.bootstrap(document, ['ngSanitize', 'umbraco.install', 'umbraco.directives.validation']);
});
}
);

View File

@@ -18,7 +18,7 @@
<div class="control-group">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input type="email" id="email" name="email" placeholder="you@example.com" required ng-model="installer.current.model.email" />
<input type="text" id="email" name="email" placeholder="you@example.com" required ng-model="installer.current.model.email" val-email />
<small class="inline-help">Your email will be used as your login</small>
</div>
</div>

View File

@@ -1,13 +1,14 @@
<div>
<input type="email" name="textbox"
<input type="text" name="textbox"
ng-model="model.value"
id="{{model.alias}}"
class="umb-editor umb-textstring textstring"
val-email
ng-required="model.config.IsRequired || model.validation.mandatory"
val-server="value" />
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="required">Required</span>
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="email">Invalid email</span>
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="valEmail">Invalid email</span>
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="valServer"></span>
</div>

View File

@@ -0,0 +1,34 @@
describe('valEmail directive tests', function() {
var valEmailExpression;
beforeEach(module('umbraco'));
beforeEach(inject(function ($injector) {
//TODO: I have no idea why this doesn't work!!?? it freakin should
//valEmailExpression = $injector.get('valEmailExpression');
//in the meantime, i've had to hard code the regex statement here
valEmailExpression = {
EMAIL_REGEXP: /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i
};
}));
describe('EMAIL_REGEXP', function () {
/* global EMAIL_REGEXP: false */
it('should validate email', function () {
expect(valEmailExpression.EMAIL_REGEXP.test('a@b.com')).toBe(true);
expect(valEmailExpression.EMAIL_REGEXP.test('a@b.museum')).toBe(true);
expect(valEmailExpression.EMAIL_REGEXP.test('a@B.c')).toBe(true);
expect(valEmailExpression.EMAIL_REGEXP.test('a@.b.c')).toBe(false);
expect(valEmailExpression.EMAIL_REGEXP.test('a@-b.c')).toBe(false);
expect(valEmailExpression.EMAIL_REGEXP.test('a@b-.c')).toBe(false);
expect(valEmailExpression.EMAIL_REGEXP.test('a@3b.c')).toBe(true);
expect(valEmailExpression.EMAIL_REGEXP.test('a@b')).toBe(true);
expect(valEmailExpression.EMAIL_REGEXP.test('abc@xyz.financial')).toBe(true);
});
});
});