Click here to Skip to main content
15,894,740 members
Articles / Web Development / HTML

Design and Develop a website using ASP.NET MVC 4, EF, Knockoutjs and Bootstrap : Part - 1

Rate me:
Please Sign up or sign in to vote.
4.92/5 (114 votes)
16 Jan 2013CPOL15 min read 500.4K   16.8K   333  
Design a website architecture that must be simple, easily understandable by any web designer using asp.net MVC, EF, Knockoutjs and Bootstrap
(function(){function o(a,b,c){a.isValidating(!0);b.validator(a(),c.params||!0,function(e){var d=!1,i="";if(a.__valid__()&&(e.message?(d=e.isValid,i=e.message):d=e,!d))a.error=ko.validation.formatMessage(i||c.message||b.message,c.params),a.__valid__(d);a.isValidating(!1)})}if(void 0===typeof ko)throw"Knockout is required, please ensure it is loaded before loading this validation plug-in";var j={registerExtenders:!0,messagesOnModified:!0,messageTemplate:null,insertMessages:!0,parseInputAttributes:!1,
writeInputAttributes:!1,decorateElement:!1,errorClass:null,errorElementClass:"validationElement",errorMessageClass:"validationMessage",grouping:{deep:!1,observable:!0}},f=ko.utils.extend({},j),k=["required","pattern","min","max","step"],d,l=(new Date).getTime(),m={};d={isArray:function(a){return a.isArray||"[object Array]"===Object.prototype.toString.call(a)},isObject:function(a){return null!==a&&"object"===typeof a},values:function(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push(a[c]);return b},
getValue:function(a){return"function"===typeof a?a():a},hasAttribute:function(a,b){return null!==a.getAttribute(b)},isValidatable:function(a){return a.rules&&a.isValid&&a.isModified},insertAfter:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},newId:function(){return l+=1},getConfigOptions:function(a){return d.contextFor(a)||f},setDomData:function(a,b){var c=a.__ko_validation__;c||(a.__ko_validation__=c=d.newId());m[c]=b},getDomData:function(a){a=a.__ko_validation__;return!a?void 0:m[a]},
contextFor:function(a){switch(a.nodeType){case 1:case 8:var b=d.getDomData(a);if(b)return b;if(a.parentNode)return d.contextFor(a.parentNode)}},isEmptyVal:function(a){if(void 0===a||null===a||""===a)return!0}};var n=0;ko.validation={utils:d,init:function(a,b){if(!(0<n)||b)a=a||{},a.errorElementClass=a.errorElementClass||a.errorClass||f.errorElementClass,a.errorMessageClass=a.errorMessageClass||a.errorClass||f.errorMessageClass,ko.utils.extend(f,a),f.registerExtenders&&ko.validation.registerExtenders(),
n=1},configure:function(a){ko.validation.init(a)},reset:function(){f=$.extend(f,j)},group:function(a,b){var b=ko.utils.extend(f.grouping,b),c=ko.observableArray([]),e=null,g=function h(a,e){var g=[],f=ko.utils.unwrapObservable(a),e=void 0!==e?e:b.deep?1:-1;ko.isObservable(a)&&(a.isValid||a.extend({validatable:!0}),c.push(a));f&&(d.isArray(f)?g=f:d.isObject(f)&&(g=d.values(f)));0!==e&&ko.utils.arrayForEach(g,function(a){a&&!a.nodeType&&h(a,e+1)})};b.observable?(g(a),e=ko.computed(function(){var a=
[];ko.utils.arrayForEach(c(),function(b){b.isValid()||a.push(b.error)});return a})):e=function(){var b=[];c([]);g(a);ko.utils.arrayForEach(c(),function(a){a.isValid()||b.push(a.error)});return b};e.showAllMessages=function(a){a==void 0&&(a=true);e();ko.utils.arrayForEach(c(),function(b){b.isModified(a)})};a.errors=e;a.isValid=function(){return a.errors().length===0};a.isAnyMessageShown=function(){var a=false;e();ko.utils.arrayForEach(c(),function(b){!b.isValid()&&b.isModified()&&(a=true)});return a};
return e},formatMessage:function(a,b){return a.replace(/\{0\}/gi,b)},addRule:function(a,b){a.extend({validatable:!0});a.rules.push(b);return a},addAnonymousRule:function(a,b){var c=d.newId();void 0===b.message&&(rulesObj.message="Error");ko.validation.rules[c]=b;ko.validation.addRule(a,{rule:c,params:b.params})},addExtender:function(a){ko.extenders[a]=function(b,c){return c.message||c.onlyIf?ko.validation.addRule(b,{rule:a,message:c.message,params:d.isEmptyVal(c.params)?!0:c.params,condition:c.onlyIf}):
ko.validation.addRule(b,{rule:a,params:c})}},registerExtenders:function(){if(f.registerExtenders)for(var a in ko.validation.rules)ko.validation.rules.hasOwnProperty(a)&&(ko.extenders[a]||ko.validation.addExtender(a))},insertValidationMessage:function(a){var b=document.createElement("SPAN");b.className=d.getConfigOptions(a).errorMessageClass;d.insertAfter(a,b);return b},parseInputValidationAttributes:function(a,b){ko.utils.arrayForEach(k,function(c){d.hasAttribute(a,c)&&ko.validation.addRule(b(),{rule:c,
params:a.getAttribute(c)||!0})})},writeInputValidationAttributes:function(a,b){var c=b();if(c&&c.rules){var e=c.rules();ko.utils.arrayForEach(k,function(b){var c,d=ko.utils.arrayFirst(e,function(a){return a.rule.toLowerCase()===b.toLowerCase()});d&&(c=d.params,"pattern"==d.rule&&d.params instanceof RegExp&&(c=d.params.source),a.setAttribute(b,c))});e=null}}};ko.validation.rules={};ko.validation.rules.required={validator:function(a,b){var c=/^\s+|\s+$/g,e;if(void 0===a||null===a)return!b;e=a;"string"==
typeof a&&(e=a.replace(c,""));return b&&0<(e+"").length},message:"This field is required."};ko.validation.rules.min={validator:function(a,b){return d.isEmptyVal(a)||a>=b},message:"Please enter a value greater than or equal to {0}."};ko.validation.rules.max={validator:function(a,b){return d.isEmptyVal(a)||a<=b},message:"Please enter a value less than or equal to {0}."};ko.validation.rules.minLength={validator:function(a,b){return d.isEmptyVal(a)||a.length>=b},message:"Please enter at least {0} characters."};
ko.validation.rules.maxLength={validator:function(a,b){return d.isEmptyVal(a)||a.length<=b},message:"Please enter no more than {0} characters."};ko.validation.rules.pattern={validator:function(a,b){return d.isEmptyVal(a)||null!=a.match(b)},message:"Please check this value."};ko.validation.rules.step={validator:function(a,b){return d.isEmptyVal(a)||0===100*a%(100*b)},message:"The value must increment by {0}"};ko.validation.rules.email={validator:function(a,b){return d.isEmptyVal(a)||b&&/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(a)},
message:"Please enter a proper email address"};ko.validation.rules.date={validator:function(a,b){return d.isEmptyVal(a)||b&&!/Invalid|NaN/.test(new Date(a))},message:"Please enter a proper date"};ko.validation.rules.dateISO={validator:function(a,b){return d.isEmptyVal(a)||b&&/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)},message:"Please enter a proper date"};ko.validation.rules.number={validator:function(a,b){return d.isEmptyVal(a)||b&&/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)},message:"Please enter a number"};
ko.validation.rules.digit={validator:function(a,b){return d.isEmptyVal(a)||b&&/^\d+$/.test(a)},message:"Please enter a digit"};ko.validation.rules.phoneUS={validator:function(a,b){if("string"!==typeof a)return!1;if(d.isEmptyVal(a))return!0;a=a.replace(/\s+/g,"");return b&&9<a.length&&a.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)},message:"Please specify a valid phone number"};ko.validation.rules.equal={validator:function(a,b){return a===d.getValue(b)},message:"Values must equal"};
ko.validation.rules.notEqual={validator:function(a,b){return a!==d.getValue(b)},message:"Please choose another value."};ko.validation.rules.unique={validator:function(a,b){var c=d.getValue(b.collection),e=d.getValue(b.externalValue),g=0;if(!a||!c)return!0;ko.utils.arrayFilter(ko.utils.unwrapObservable(c),function(c){a===(b.valueAccessor?b.valueAccessor(c):c)&&g++});return g<(void 0!==e&&a!==e?1:2)},message:"Please make sure the value is unique."};ko.validation.registerExtenders();ko.bindingHandlers.validationCore=
{init:function(a,b){var c=d.getConfigOptions(a);if(c.parseInputAttributes){var e=function(){ko.validation.parseInputValidationAttributes(a,b)};window.setImmediate?window.setImmediate(e):window.setTimeout(e,0)}c.insertMessages&&d.isValidatable(b())&&(e=ko.validation.insertValidationMessage(a),c.messageTemplate?ko.renderTemplate(c.messageTemplate,{field:b()},null,e,"replaceNode"):ko.applyBindingsToNode(e,{validationMessage:b()}));c.writeInputAttributes&&d.isValidatable(b())&&ko.validation.writeInputValidationAttributes(a,
b);c.decorateElement&&d.isValidatable(b())&&ko.applyBindingsToNode(a,{validationElement:b()})},update:function(){}};var p=ko.bindingHandlers.value.init;ko.bindingHandlers.value.init=function(a,b,c,e,d){p(a,b,c);return ko.bindingHandlers.validationCore.init(a,b,c,e,d)};ko.bindingHandlers.validationMessage={update:function(a,b){var c=b(),e=d.getConfigOptions(a);ko.utils.unwrapObservable(c);var g=!1,f=!1;c.extend({validatable:!0});g=c.isModified();f=c.isValid();ko.bindingHandlers.text.update(a,function(){return!e.messagesOnModified||
g?f?null:c.error:null});ko.bindingHandlers.visible.update(a,function(){return g?!f:!1})}};ko.bindingHandlers.validationElement={update:function(a,b){var c=b(),e=d.getConfigOptions(a);ko.utils.unwrapObservable(c);var g=!1,f=!1;c.extend({validatable:!0});g=c.isModified();f=c.isValid();ko.bindingHandlers.css.update(a,function(){var a={},b=g?!f:!1;e.decorateElement||(b=!1);a[e.errorElementClass]=b;return a})}};ko.bindingHandlers.validationOptions={init:function(a,b){var c=ko.utils.unwrapObservable(b());
if(c){var e=ko.utils.extend({},f);ko.utils.extend(e,c);d.setDomData(a,e)}}};ko.extenders.validation=function(a,b){ko.utils.arrayForEach(d.isArray(b)?b:[b],function(b){ko.validation.addAnonymousRule(a,b)});return a};ko.extenders.validatable=function(a,b){if(b&&!d.isValidatable(a)){a.error=null;a.rules=ko.observableArray();a.isValidating=ko.observable(!1);a.__valid__=ko.observable(!0);a.isModified=ko.observable(!1);var c=ko.computed(function(){a();a.rules();ko.validation.validateObservable(a);return!0});
a.isValid=ko.computed(function(){return a.__valid__()});var e=a.subscribe(function(){a.isModified(!0)});a._disposeValidation=function(){a.isValid.dispose();a.rules.removeAll();a.isModified._subscriptions.change=[];a.isValidating._subscriptions.change=[];a.__valid__._subscriptions.change=[];e.dispose();c.dispose();delete a.rules;delete a.error;delete a.isValid;delete a.isValidating;delete a.__valid__;delete a.isModified}}else!1===b&&d.isValidatable(a)&&a._disposeValidation&&a._disposeValidation();
return a};ko.validation.validateObservable=function(a){for(var b=0,c,e,d=a.rules(),f=d.length;b<f;b++)if(e=d[b],!e.condition||e.condition())if(c=ko.validation.rules[e.rule],c.async||e.async)o(a,c,e);else{var h;h=a;c.validator(h(),void 0===e.params?!0:e.params)?h=!0:(h.error=ko.validation.formatMessage(e.message||c.message,e.params),h.__valid__(!1),h=!1);if(!h)return!1}a.error=null;a.__valid__(!0);return!0};ko.validatedObservable=function(a){if(!ko.validation.utils.isObject(a))return ko.observable(a).extend({validatable:!0});
var b=ko.observable(a);b.errors=ko.validation.group(a);b.isValid=ko.computed(function(){return 0===b.errors().length});return b};ko.validation.localize=function(a){for(var b in a)ko.validation.rules.hasOwnProperty(b)&&(ko.validation.rules[b].message=a[b])};ko.applyBindingsWithValidation=function(a,b,c){var e=arguments.length,d,f;2<e?(d=b,f=c):2>e?d=document.body:arguments[1].nodeType?d=b:f=arguments[1];ko.validation.init();f&&ko.validation.utils.setDomData(d,f);ko.applyBindings(a,b)};var q=ko.applyBindings;
ko.applyBindings=function(a,b){ko.validation.init();q(a,b)}})();

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions