").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!c.settings.submitHandler||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&(!j.form&&j.hasAttribute("contenteditable")&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name"));var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=d),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);if("function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f){if(j=f.call(b,j),"string"!=typeof j)throw new TypeError("The normalizer should return a string value.");delete g.normalizer}for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});!function(e){var n;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var t=window.Cookies,o=window.Cookies=e();o.noConflict=function(){return window.Cookies=t,o}}}(function(){function e(){for(var e=0,n={};e
Plesk là gì? Tính năng hữu ích để quản trị Web Hosting hiệu quả
31/08/2023
Khi bạn lưu trữ web hoặc ứng dụng của mình trên mạng, bạn cần một bảng điều khiển để quản lý. Và Plesk là một trong những cái tên phổ biến khi lựa chọn Control Panel. Vậy, Plesk là gì và nó hoạt động như thế nào? Nếu bạn quan tâm đến những gì nó có thể thực hiện, bài viết “Plesk là gì? Tính năng hữu ích để quản trị Web Hosting hiệu quả” sẽ cung cấp tất cả thông tin mà bạn cần biết về Plesk.
Plesk là web Control Panel cung cấp giao diện cho người dùng quản lý trang web, ứng dụng và máy chủ của họ. Nền tảng này ban đầu được phát triển tại Nga vào năm 2001 và được bán cho Parallel. Plesk trở thành công ty độc lập vào năm 2015. Năm 2017, công ty Oakley Capital Limited của Anh đã mua lại Plesk và kể từ đó, nó đã trở thành một phần của WebPros.
Plesk nằm trong số các bảng điều khiển hàng đầu và phổ biến nhất để quản lý các Máy Chủ Ảo Riêng (VPS) và máy chủ vật lý (Dedicated Server). Một trong những lý do đằng sau sự phổ biến của Plesk là giao diện người dùng trực quan và thân thiện của nó, giúp dễ dàng sử dụng ngay cả khi bạn không có nhiều kinh nghiệm quản lý máy chủ.
2. Các phiên bản của Plesk
2.1. Plesk Onyx
Phần mềm Plesk Onyx là phiên bản đầu tiên và cơ bản trong dòng sản phẩm quản lý website từ Plesk. Người dùng có thể dễ dàng quản lý và tinh chỉnh các ứng dụng liên quan đến Website với một loạt tính năng quan trọng:
Onyx cho phép quản lý dữ liệu file tiêu chuẩn một cách dễ dàng. Người dùng có thể thực hiện các tác vụ liên quan đến dữ liệu và tệp tin một cách thuận tiện và hiệu quả.
Một khía cạnh quan trọng khác là khả năng đảm bảo bảo mật cho website và dữ liệu. Với các tính năng bảo mật tích hợp, người dùng có thể an tâm về việc bảo vệ thông tin quan trọng trên trang web của họ.
Việc điều chỉnh hiệu suất hoạt động là một yếu tố quan trọng khác mà Plesk Onyx mang lại. Người dùng có thể tối ưu hóa hiệu suất của trang web thông qua các tính năng và cài đặt được cung cấp bởi Plesk Onyx.
Đặc biệt, Onyx cung cấp tính năng tự động cập nhật dữ liệu và tính năng mới. Điều này giúp đảm bảo rằng trang web luôn được cập nhật với phiên bản mới nhất và các tính năng tiên tiến nhất.
2.2. Plesk Obsidian
Plesk Onyx đã chính thức chuyển thành Plesk Obsidian, là phiên bản mới nhất trong dòng sản phẩm quản lý website của Plesk, được ra mắt vào ngày 25/09/2019. Phiên bản này tập trung vào việc giải quyết các vấn đề liên quan đến bảo mật, hiệu suất và tính tiện dụng. Điều này thể hiện sự cam kết của Plesk trong việc cung cấp cho người dùng những công cụ mạnh mẽ và đáng tin cậy để quản lý và phát triển trang web của họ.
Những tính năng phát triển bổ sung của Obsidian:
Có thể sử dụng dễ dàng trên cả hai hệ điều hành phổ biến là Windows và Linux.
Đảm bảo độ ổn định và đáng tin cậy cao trong quá trình hoạt động.
Cung cấp một loạt đầy đủ các tính năng hữu ích từ cơ bản đến nâng cao, giúp hỗ trợ việc quản lý cả hosting và website một cách hiệu quả.
Với giao diện đơn giản và thân thiện với người dùng, việc làm quen và sử dụng được thực hiện một cách tự nhiên và thuận tiện.
Phần mềm Plesk không chỉ linh hoạt mà còn rất tiện lợi. Đây là một hệ thống quản lý hosting toàn diện, bao gồm tích hợp khả năng thiết kế website, khả năng thanh toán tự động và giao diện storefront SaaS.
Việc thiết lập nhiều hosting cùng một lúc trở nên đơn giản và tiện lợi, dựa trên các cấu hình định sẵn sẽ giúp tiết kiệm thời gian và công sức.
Ngoài ra, bạn cũng có thể tạo nhiều tài khoản FTP và kết hợp chúng với cấu trúc web linh hoạt để tùy chỉnh theo nhu cầu cụ thể của bạn.
3. Plesk được sử dụng để làm gì?
Plesk cung cấp cho người dùng một giao diện thân thiện mà họ có thể sử dụng để quản lý nhiều tác vụ khác nhau của máy chủ, trang web hoặc ứng dụng web. Trước khi sử dụng Plesk, bạn cần sở hữu hosting để cài đặt và sử dụng, bạn có thể tham khảo các gói hosting của Tothost tại: https://tothost.vn/shared-web-hosting/
Với Plesk, bạn có thể thực hiện một số nhiệm vụ trên máy chủ của bạn. Một số nhiệm vụ cốt lõi mà người dùng có thể thực hiện bằng giao diện Plesk bao gồm:
Tài khoản Email: Khi bạn đăng ký một gói hosting, hầu hết các nhà cung cấp đều cho bạn khả năng tạo tên miền tùy chỉnh. Người dùng có thể sử dụng Plesk để tạo, quản lý và tổ chức email cho tên miền của họ.
Quản lý Tập tin: Bạn có thể sử dụng Plesk để tạo thư mục, đổi tên tập tin của bạn, di chuyển chúng giữa các thư mục hoặc xóa chúng hoàn toàn khỏi máy chủ nếu bạn muốn.
Sao lưu: Plesk cũng có thể sao lưu dữ liệu trang web hoặc máy chủ của bạn. Khi tạo sao lưu, Plesk cho phép người dùng xuất tệp sao lưu vào một nền tảng lưu trữ đám mây.
Quản lý cơ sở dữ liệu: Plesk cho phép người dùng quản lý cơ sở dữ liệu, bao gồm MySQL và PostgreSQL.
Domain: Nó cũng cho phép người dùng quản lý nhiều tên miền từ một nơi duy nhất.
4. Các tính năng của Plesk Control Panel
Bộ công cụ WordPress: Công cụ WordPress cho phép người dùng dễ dàng cài đặt, quản lý và gỡ bỏ các trang web WordPress từ máy chủ của họ. Ngoài ra, bộ công cụ cho phép người dùng cấu hình các bản cập nhật và tạo các gói plugin và giao diện. Nó cũng cho phép người dùng theo dõi hiệu suất và bảo mật của các trang web của họ.
Quản lý Server: Với Plesk, các quản trị viên có thể quản lý tài nguyên và hiệu suất của máy chủ của họ và kiểm soát các cấp độ truy cập khác nhau của người dùng. Tất cả điều này được thực hiện bằng giao diện người dùng trực quan và dễ sử dụng của Plesk.
Kho ứng dụng: Đây là một tập hợp các ứng dụng bạn có thể cài đặt trên máy chủ của bạn chỉ bằng vài cú nhấp chuột. Một số ứng dụng phổ biến trong danh mục ứng dụng Plesk bao gồm Hệ thống Quản lý Nội dung (CMS) như WordPress, Joomla và Drupal, các nền tảng thương mại điện tử như Magento, OpenCart và PrestaShop, và phần mềm CRM như SugarCRM và vTiger. Plesk cũng cho phép người dùng tắt ứng dụng mà họ không muốn khách hàng của họ truy cập. Vì vậy, khách hàng sẽ chỉ có quyền truy cập vào các ứng dụng liên quan đến dịch vụ mà họ đã thanh toán. Ví dụ, nếu khách hàng trả tiền cho dịch vụ lưu trữ WordPress, bạn có thể tắt các ứng dụng khác không liên quan đến dịch vụ đó.
Chuyển Web: Plesk cho phép người dùng chuyển trang web hoặc ứng dụng web từ các bảng điều khiển lưu trữ web khác.
Quản lý đơn hàng: Plesk có một số tính năng như tích hợp cổng thanh toán, quản lý sản phẩm, thiết lập giỏ hàng mua sắm và quản lý đơn đặt hàng của khách hàng. Những tính năng này giúp người dùng dễ dàng quản lý và phát triển trang web thương mại điện tử của họ.
Quản lý khách hàng: Plesk cũng có một cổng thông tin khách hàng, cho phép khách hàng truy cập hỗ trợ, quản lý tài khoản và mua thêm các dịch vụ bổ sung mà họ có thể cần. Điều này giúp giảm công việc cho các quản trị viên vì khách hàng có thể thực hiện phần lớn các nhiệm vụ một mình.
Tự sửa chữa lỗi: Đây là một trong những tính năng mới mà Plesk đã thêm gần đây. Nó cho phép người dùng sử dụng các công cụ dòng lệnh và giao diện đồ họa để sửa chữa lỗi hoặc bất kỳ vấn đề nào ảnh hưởng đến máy chủ của họ.
Tính bảo mật cao: Plesk có một số tính năng bảo mật, bao gồm SSL Cert, firewall tích hợp sẵn, quét malware, sao lưu dữ liệu, cmật khẩu và xác thực 2 yếu tố. Những tính năng này rất quan trọng đối với bảo mật của máy chủ và tất cả các ứng dụng đã cài đặt trên chúng.
Plesk Advisor: Công cụ này hỗ trợ người dùng giám sát và cải thiện hiệu suất của máy chủ của họ. Plesk Advisor hướng dẫn người dùng qua các hành động khác nhau mà họ có thể thực hiện để tối ưu hóa máy chủ của họ cho hiệu suất, ổn định và bảo mật tốt nhất. Ngoài ra, người dùng có thể xem điểm số cho các thông số khác nhau, giúp họ xác định các lĩnh vực cần cải thiện.
Tiện ích mở rộng: Plesk sở hữu hơn 150 tiện ích mở rộng mà người dùng có thể cài đặt để nâng cao khả năng và chức năng của trang web hoặc ứng dụng web của họ. Một số ứng dụng hữu ích trong cửa hàng tiện ích mở rộng Plesk bao gồm phần mềm chống virus, bộ công cụ SEO, quản lý sao lưu, theo dõi sức khỏe máy chủ, theo dõi sử dụng tài nguyên, tích hợp CloudFare và nhiều hơn nữa. Tất cả những thứ này có thể được cài đặt chỉ bằng vài cú nhấp chuột.
Báo cáo và Phân tích: Thông qua báo cáo và phân tích, người dùng có thể giám sát hiệu suất thời gian thực của trang web hoặc ứng dụng web của họ, giúp họ đưa ra quyết định có căn cứ. Hiệu suất, lưu lượng và việc sử dụng tài nguyên là các thông số mà người dùng có thể xem trong bảng điều khiển Báo cáo và Phân tích. Plesk cũng trình bày những số liệu này dưới dạng hình ảnh rất dễ hiểu.
Lời kết
Tóm lại, Plesk sở hữu giao diện trực quan và dễ hiểu của nó giúp bạn dễ dàng thực hiện các nhiệm vụ quản lý trang web và máy chủ, bao gồm việc tạo và quản lý tài khoản email, cài đặt chứng chỉ SSL, thực hiện sao lưu, giám sát hiệu suất và nhiều nhiệm vụ khác.
Plesk là một giải pháp toàn diện mà chủ sở hữu trang web, quản lý và nhà phát triển có thể sử dụng để quản lý máy chủ và trang web của họ một cách hiệu quả.
Hiện nay, công nghệ trí tuệ nhân tạo đang bùng nổ mạnh mẽ tạo ra những tiềm năng to lớn trong nhiều lĩnh vực trong cuộc sống. Để làm được điều đó thì không thể thiếu AI tạo sinh (Generative AI). Vậy, Gen AI là gì? Nó có đóng góp gì trong thực tiễn? Hãy cùng tìm hiểu qua bài viết này nhé!
Cụm từ “đứt cáp quang biển” hay “cá mập cắn cáp” thường được nhắc tới mỗi khi kết nối mạng Việt Nam với quốc tế gặp vấn đề. Vậy cáp quang biển là gì? Việt Nam hiện tại đang có bao nhiêu tuyến cáp quang? Cùng TotHost tìm hiểu nhé!
Hiện nay trí tuệ nhân tạo đang là một chủ đề rất “nóng”, kèm theo đó là sự ra mắt của hàng loạt công cụ AI hữu ích nhưng mặt trái là tội phạm mạng có thể nguỵ trang phần mềm độc hại gắn mác “trí tuệ nhân tạo” để đánh lừa người dùng.
Khi tìm hiểu về lĩnh vực phần mềm bạn sẽ được tiếp cận với GitLab - một công cụ không thể thiếu với các đội nhóm phát triển dự án. Hãy cùng TotHost đào sâu thông tin về nền tảng này nhé!
Khi sử dụng Linux, bạn đã biết cách xem danh sách người dùng hiện đang đăng nhập chưa? Làm thế nào để tìm ra người dùng đăng nhập bằng cửa sổ terminal? Hãy cùng tìm hiểu thông qua bài viết này của TotHost nhé!
Việc nắm được mức độ sử dụng tài nguyên trên hệ thống của bạn là rất quan trọng bởi thông tin này có thể giúp bạn quản lý hệ thống tốt hơn. Điều này thể hiện rõ ở khâu xác định vấn đề của hiệu xuất và cách tối ưu hoá hệ thống. Hãy cùng TotHost tìm hiểu về cách kiểm tra ứng dụng đang chiếm nhiều bộ nhớ trong Linux.