From d50abec492bf0803eea98707392148db13c1affe Mon Sep 17 00:00:00 2001 From: Yasin <mohammed-yasin.rahman@lip6.fr> Date: Fri, 9 Aug 2013 13:31:17 +0200 Subject: [PATCH] Moved css,js and img to /portal/static dir --- portal/static/jquery.validate.js | 1222 ++++++++++++++++++++++ portal/static/my_account.common.css | 230 ++++ portal/static/my_account.edit_profile.js | 198 ++++ portal/static/my_account.profile.css | 173 +++ portal/static/my_account.register.js | 56 + portal/static/ques_icon.png | Bin 0 -> 102623 bytes portal/templates/my_account.html | 14 +- third-party/jquery/js/jquery.validate.js | 1222 ++++++++++++++++++++++ 8 files changed, 3108 insertions(+), 7 deletions(-) create mode 100644 portal/static/jquery.validate.js create mode 100644 portal/static/my_account.common.css create mode 100644 portal/static/my_account.edit_profile.js create mode 100644 portal/static/my_account.profile.css create mode 100644 portal/static/my_account.register.js create mode 100644 portal/static/ques_icon.png create mode 100644 third-party/jquery/js/jquery.validate.js diff --git a/portal/static/jquery.validate.js b/portal/static/jquery.validate.js new file mode 100644 index 00000000..51eb2ef5 --- /dev/null +++ b/portal/static/jquery.validate.js @@ -0,0 +1,1222 @@ +/** + * jQuery Validation Plugin 1.11.0pre + * + * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ + * http://docs.jquery.com/Plugins/Validation + * + * Copyright 2013 Jörn Zaefferer + * Released under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + */ + +(function($) { + +$.extend($.fn, { + // http://docs.jquery.com/Plugins/Validation/validate + validate: function( options ) { + + // if nothing is selected, return nothing; can't chain anyway + if ( !this.length ) { + if ( options && options.debug && window.console ) { + console.warn( "Nothing selected, can't validate, returning nothing." ); + } + return; + } + + // check if a validator for this form was already created + var validator = $.data( this[0], "validator" ); + if ( validator ) { + return validator; + } + + // Add novalidate tag if HTML5. + this.attr( "novalidate", "novalidate" ); + + validator = new $.validator( options, this[0] ); + $.data( this[0], "validator", validator ); + + if ( validator.settings.onsubmit ) { + + this.validateDelegate( ":submit", "click", function( event ) { + if ( validator.settings.submitHandler ) { + validator.submitButton = event.target; + } + // allow suppressing validation by adding a cancel class to the submit button + if ( $(event.target).hasClass("cancel") ) { + validator.cancelSubmit = true; + } + }); + + // validate the form on submit + this.submit( function( event ) { + if ( validator.settings.debug ) { + // prevent form submit to be able to see console output + event.preventDefault(); + } + function handle() { + var hidden; + if ( validator.settings.submitHandler ) { + if ( validator.submitButton ) { + // insert a hidden input as a replacement for the missing submit button + hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm); + } + validator.settings.submitHandler.call( validator, validator.currentForm, event ); + if ( validator.submitButton ) { + // and clean up afterwards; thanks to no-block-scope, hidden can be referenced + hidden.remove(); + } + return false; + } + return true; + } + + // prevent submit for invalid forms or custom submit handlers + if ( validator.cancelSubmit ) { + validator.cancelSubmit = false; + return handle(); + } + if ( validator.form() ) { + if ( validator.pendingRequest ) { + validator.formSubmitted = true; + return false; + } + return handle(); + } else { + validator.focusInvalid(); + return false; + } + }); + } + + return validator; + }, + // http://docs.jquery.com/Plugins/Validation/valid + valid: function() { + if ( $(this[0]).is("form")) { + return this.validate().form(); + } else { + var valid = true; + var validator = $(this[0].form).validate(); + this.each(function() { + valid &= validator.element(this); + }); + return valid; + } + }, + // attributes: space seperated list of attributes to retrieve and remove + removeAttrs: function( attributes ) { + var result = {}, + $element = this; + $.each(attributes.split(/\s/), function( index, value ) { + result[value] = $element.attr(value); + $element.removeAttr(value); + }); + return result; + }, + // http://docs.jquery.com/Plugins/Validation/rules + rules: function( command, argument ) { + var element = this[0]; + + if ( command ) { + var settings = $.data(element.form, "validator").settings; + var staticRules = settings.rules; + var existingRules = $.validator.staticRules(element); + switch(command) { + case "add": + $.extend(existingRules, $.validator.normalizeRule(argument)); + staticRules[element.name] = existingRules; + if ( argument.messages ) { + settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); + } + break; + case "remove": + if ( !argument ) { + delete staticRules[element.name]; + return existingRules; + } + var filtered = {}; + $.each(argument.split(/\s/), function( index, method ) { + filtered[method] = existingRules[method]; + delete existingRules[method]; + }); + return filtered; + } + } + + var data = $.validator.normalizeRules( + $.extend( + {}, + $.validator.classRules(element), + $.validator.attributeRules(element), + $.validator.dataRules(element), + $.validator.staticRules(element) + ), element); + + // make sure required is at front + if ( data.required ) { + var param = data.required; + delete data.required; + data = $.extend({required: param}, data); + } + + return data; + } +}); + +// Custom selectors +$.extend($.expr[":"], { + // http://docs.jquery.com/Plugins/Validation/blank + blank: function( a ) { return !$.trim("" + a.value); }, + // http://docs.jquery.com/Plugins/Validation/filled + filled: function( a ) { return !!$.trim("" + a.value); }, + // http://docs.jquery.com/Plugins/Validation/unchecked + unchecked: function( a ) { return !a.checked; } +}); + +// constructor for validator +$.validator = function( options, form ) { + this.settings = $.extend( true, {}, $.validator.defaults, options ); + this.currentForm = form; + this.init(); +}; + +$.validator.format = function( source, params ) { + if ( arguments.length === 1 ) { + return function() { + var args = $.makeArray(arguments); + args.unshift(source); + return $.validator.format.apply( this, args ); + }; + } + if ( arguments.length > 2 && params.constructor !== Array ) { + params = $.makeArray(arguments).slice(1); + } + if ( params.constructor !== Array ) { + params = [ params ]; + } + $.each(params, function( i, n ) { + source = source.replace( new RegExp("\\{" + i + "\\}", "g"), function() { + return n; + }); + }); + return source; +}; + +$.extend($.validator, { + + defaults: { + messages: {}, + groups: {}, + rules: {}, + errorClass: "error", + validClass: "valid", + errorElement: "label", + focusInvalid: true, + errorContainer: $([]), + errorLabelContainer: $([]), + onsubmit: true, + ignore: ":hidden", + ignoreTitle: false, + onfocusin: function( element, event ) { + this.lastActive = element; + + // hide error label and remove error class on focus if enabled + if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { + if ( this.settings.unhighlight ) { + this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); + } + this.addWrapper(this.errorsFor(element)).hide(); + } + }, + onfocusout: function( element, event ) { + if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { + this.element(element); + } + }, + onkeyup: function( element, event ) { + if ( event.which === 9 && this.elementValue(element) === "" ) { + return; + } else if ( element.name in this.submitted || element === this.lastElement ) { + this.element(element); + } + }, + onclick: function( element, event ) { + // click on selects, radiobuttons and checkboxes + if ( element.name in this.submitted ) { + this.element(element); + } + // or option elements, check parent select in that case + else if ( element.parentNode.name in this.submitted ) { + this.element(element.parentNode); + } + }, + highlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName(element.name).addClass(errorClass).removeClass(validClass); + } else { + $(element).addClass(errorClass).removeClass(validClass); + } + }, + unhighlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName(element.name).removeClass(errorClass).addClass(validClass); + } else { + $(element).removeClass(errorClass).addClass(validClass); + } + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults + setDefaults: function( settings ) { + $.extend( $.validator.defaults, settings ); + }, + + 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.", + creditcard: "Please enter a valid credit card number.", + equalTo: "Please enter the same value again.", + maxlength: $.validator.format("Please enter no more than {0} characters."), + minlength: $.validator.format("Please enter at least {0} characters."), + rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), + range: $.validator.format("Please enter a value between {0} and {1}."), + max: $.validator.format("Please enter a value less than or equal to {0}."), + min: $.validator.format("Please enter a value greater than or equal to {0}.") + }, + + autoCreateRanges: false, + + prototype: { + + init: function() { + this.labelContainer = $(this.settings.errorLabelContainer); + this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); + this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); + this.submitted = {}; + this.valueCache = {}; + this.pendingRequest = 0; + this.pending = {}; + this.invalid = {}; + this.reset(); + + var groups = (this.groups = {}); + $.each(this.settings.groups, function( key, value ) { + if ( typeof value === "string" ) { + value = value.split(/\s/); + } + $.each(value, function( index, name ) { + groups[name] = key; + }); + }); + var rules = this.settings.rules; + $.each(rules, function( key, value ) { + rules[key] = $.validator.normalizeRule(value); + }); + + function delegate(event) { + var validator = $.data(this[0].form, "validator"), + eventType = "on" + event.type.replace(/^validate/, ""); + if ( validator.settings[eventType] ) { + validator.settings[eventType].call(validator, this[0], event); + } + } + $(this.currentForm) + .validateDelegate(":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'] ", + "focusin focusout keyup", delegate) + .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate); + + if ( this.settings.invalidHandler ) { + $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/form + form: function() { + this.checkForm(); + $.extend(this.submitted, this.errorMap); + this.invalid = $.extend({}, this.errorMap); + if ( !this.valid() ) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + } + this.showErrors(); + return this.valid(); + }, + + checkForm: function() { + this.prepareForm(); + for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { + this.check( elements[i] ); + } + return this.valid(); + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/element + element: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + this.lastElement = element; + this.prepareElement( element ); + this.currentElements = $(element); + var result = this.check( element ) !== false; + if ( result ) { + delete this.invalid[element.name]; + } else { + this.invalid[element.name] = true; + } + if ( !this.numberOfInvalids() ) { + // Hide error containers on last error + this.toHide = this.toHide.add( this.containers ); + } + this.showErrors(); + return result; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/showErrors + showErrors: function( errors ) { + if ( errors ) { + // add items to error list and map + $.extend( this.errorMap, errors ); + this.errorList = []; + for ( var name in errors ) { + this.errorList.push({ + message: errors[name], + element: this.findByName(name)[0] + }); + } + // remove items from success list + this.successList = $.grep( this.successList, function( element ) { + return !(element.name in errors); + }); + } + if ( this.settings.showErrors ) { + this.settings.showErrors.call( this, this.errorMap, this.errorList ); + } else { + this.defaultShowErrors(); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/resetForm + resetForm: function() { + if ( $.fn.resetForm ) { + $(this.currentForm).resetForm(); + } + this.submitted = {}; + this.lastElement = null; + this.prepareForm(); + this.hideErrors(); + this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" ); + }, + + numberOfInvalids: function() { + return this.objectLength(this.invalid); + }, + + objectLength: function( obj ) { + var count = 0; + for ( var i in obj ) { + count++; + } + return count; + }, + + hideErrors: function() { + this.addWrapper( this.toHide ).hide(); + }, + + valid: function() { + return this.size() === 0; + }, + + size: function() { + return this.errorList.length; + }, + + focusInvalid: function() { + if ( this.settings.focusInvalid ) { + try { + $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []) + .filter(":visible") + .focus() + // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find + .trigger("focusin"); + } catch(e) { + // ignore IE throwing errors when focusing hidden elements + } + } + }, + + findLastActive: function() { + var lastActive = this.lastActive; + return lastActive && $.grep(this.errorList, function( n ) { + return n.element.name === lastActive.name; + }).length === 1 && lastActive; + }, + + elements: function() { + var validator = this, + rulesCache = {}; + + // select all valid inputs inside the form (no submit or reset buttons) + return $(this.currentForm) + .find("input, select, textarea") + .not(":submit, :reset, :image, [disabled]") + .not( this.settings.ignore ) + .filter(function() { + if ( !this.name ) { + if ( window.console ) { + console.error( "%o has no name assigned", this ); + } + throw new Error( "Failed to validate, found an element with no name assigned. See console for element reference." ); + } + + // select only the first element for each name, and only those with rules specified + if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) { + return false; + } + + rulesCache[this.name] = true; + return true; + }); + }, + + clean: function( selector ) { + return $(selector)[0]; + }, + + errors: function() { + var errorClass = this.settings.errorClass.replace(" ", "."); + return $(this.settings.errorElement + "." + errorClass, this.errorContext); + }, + + reset: function() { + this.successList = []; + this.errorList = []; + this.errorMap = {}; + this.toShow = $([]); + this.toHide = $([]); + this.currentElements = $([]); + }, + + prepareForm: function() { + this.reset(); + this.toHide = this.errors().add( this.containers ); + }, + + prepareElement: function( element ) { + this.reset(); + this.toHide = this.errorsFor(element); + }, + + elementValue: function( element ) { + var type = $(element).attr("type"), + val = $(element).val(); + + if ( type === "radio" || type === "checkbox" ) { + return $("input[name='" + $(element).attr("name") + "']:checked").val(); + } + + if ( typeof val === "string" ) { + return val.replace(/\r/g, ""); + } + return val; + }, + + check: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + + var rules = $(element).rules(); + var dependencyMismatch = false; + var val = this.elementValue(element); + var result; + + for (var method in rules ) { + var rule = { method: method, parameters: rules[method] }; + try { + + result = $.validator.methods[method].call( this, val, element, rule.parameters ); + + // if a method indicates that the field is optional and therefore valid, + // don't mark it as valid when there are no other rules + if ( result === "dependency-mismatch" ) { + dependencyMismatch = true; + continue; + } + dependencyMismatch = false; + + if ( result === "pending" ) { + this.toHide = this.toHide.not( this.errorsFor(element) ); + return; + } + + if ( !result ) { + this.formatAndAdd( element, rule ); + return false; + } + } catch(e) { + if ( this.settings.debug && window.console ) { + console.log( "Exception occured when checking element " + element.id + ", check the '" + rule.method + "' method.", e ); + } + throw e; + } + } + if ( dependencyMismatch ) { + return; + } + if ( this.objectLength(rules) ) { + this.successList.push(element); + } + return true; + }, + + // return the custom message for the given element and validation method + // specified in the element's HTML5 data attribute + customDataMessage: function( element, method ) { + return $(element).data("msg-" + method.toLowerCase()) || (element.attributes && $(element).attr("data-msg-" + method.toLowerCase())); + }, + + // return the custom message for the given element name and validation method + customMessage: function( name, method ) { + var m = this.settings.messages[name]; + return m && (m.constructor === String ? m : m[method]); + }, + + // return the first defined argument, allowing empty strings + findDefined: function() { + for(var i = 0; i < arguments.length; i++) { + if ( arguments[i] !== undefined ) { + return arguments[i]; + } + } + return undefined; + }, + + defaultMessage: function( element, method ) { + return this.findDefined( + this.customMessage( element.name, method ), + this.customDataMessage( element, method ), + // title is never undefined, so handle empty string as undefined + !this.settings.ignoreTitle && element.title || undefined, + $.validator.messages[method], + "<strong>Warning: No message defined for " + element.name + "</strong>" + ); + }, + + formatAndAdd: function( element, rule ) { + var message = this.defaultMessage( element, rule.method ), + theregex = /\$?\{(\d+)\}/g; + if ( typeof message === "function" ) { + message = message.call(this, rule.parameters, element); + } else if (theregex.test(message)) { + message = $.validator.format(message.replace(theregex, "{$1}"), rule.parameters); + } + this.errorList.push({ + message: message, + element: element + }); + + this.errorMap[element.name] = message; + this.submitted[element.name] = message; + }, + + addWrapper: function( toToggle ) { + if ( this.settings.wrapper ) { + toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); + } + return toToggle; + }, + + defaultShowErrors: function() { + var i, elements; + for ( i = 0; this.errorList[i]; i++ ) { + var error = this.errorList[i]; + if ( this.settings.highlight ) { + this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); + } + this.showLabel( error.element, error.message ); + } + if ( this.errorList.length ) { + this.toShow = this.toShow.add( this.containers ); + } + if ( this.settings.success ) { + for ( i = 0; this.successList[i]; i++ ) { + this.showLabel( this.successList[i] ); + } + } + if ( this.settings.unhighlight ) { + for ( i = 0, elements = this.validElements(); elements[i]; i++ ) { + this.settings.unhighlight.call( this, elements[i], 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 $(this.errorList).map(function() { + return this.element; + }); + }, + + showLabel: function( element, message ) { + var label = this.errorsFor( element ); + if ( label.length ) { + // refresh error/success class + label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); + + // check if we have a generated label, replace the message then + if ( label.attr("generated") ) { + label.html(message); + } + } else { + // create label + label = $("<" + this.settings.errorElement + "/>") + .attr({"for": this.idOrName(element), generated: true}) + .addClass(this.settings.errorClass) + .html(message || ""); + if ( this.settings.wrapper ) { + // make sure the element is visible, even in IE + // actually showing the wrapped element is handled elsewhere + label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); + } + if ( !this.labelContainer.append(label).length ) { + if ( this.settings.errorPlacement ) { + this.settings.errorPlacement(label, $(element) ); + } else { + label.insertAfter(element); + } + } + } + if ( !message && this.settings.success ) { + label.text(""); + if ( typeof this.settings.success === "string" ) { + label.addClass( this.settings.success ); + } else { + this.settings.success( label, element ); + } + } + this.toShow = this.toShow.add(label); + }, + + errorsFor: function( element ) { + var name = this.idOrName(element); + return this.errors().filter(function() { + return $(this).attr("for") === name; + }); + }, + + idOrName: function( element ) { + return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); + }, + + validationTargetFor: function( element ) { + // if radio/checkbox, validate first element in group instead + if ( this.checkable(element) ) { + element = this.findByName( element.name ).not(this.settings.ignore)[0]; + } + return element; + }, + + checkable: function( element ) { + return (/radio|checkbox/i).test(element.type); + }, + + findByName: function( name ) { + return $(this.currentForm).find("[name='" + name + "']"); + }, + + getLength: function( value, element ) { + switch( element.nodeName.toLowerCase() ) { + case "select": + return $("option:selected", element).length; + case "input": + if ( this.checkable( element) ) { + return this.findByName(element.name).filter(":checked").length; + } + } + return value.length; + }, + + depend: function( param, element ) { + return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; + }, + + dependTypes: { + "boolean": function( param, element ) { + return param; + }, + "string": function( param, element ) { + return !!$(param, element.form).length; + }, + "function": function( param, element ) { + return param(element); + } + }, + + optional: function( element ) { + var val = this.elementValue(element); + return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; + }, + + startRequest: function( element ) { + if ( !this.pending[element.name] ) { + this.pendingRequest++; + this.pending[element.name] = true; + } + }, + + stopRequest: function( element, valid ) { + this.pendingRequest--; + // sometimes synchronization fails, make sure pendingRequest is never < 0 + if ( this.pendingRequest < 0 ) { + this.pendingRequest = 0; + } + delete this.pending[element.name]; + if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { + $(this.currentForm).submit(); + this.formSubmitted = false; + } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + this.formSubmitted = false; + } + }, + + previousValue: function( element ) { + return $.data(element, "previousValue") || $.data(element, "previousValue", { + old: null, + valid: true, + message: this.defaultMessage( element, "remote" ) + }); + } + + }, + + classRuleSettings: { + required: {required: true}, + email: {email: true}, + url: {url: true}, + date: {date: true}, + dateISO: {dateISO: true}, + number: {number: true}, + digits: {digits: true}, + creditcard: {creditcard: true} + }, + + addClassRules: function( className, rules ) { + if ( className.constructor === String ) { + this.classRuleSettings[className] = rules; + } else { + $.extend(this.classRuleSettings, className); + } + }, + + classRules: function( element ) { + var rules = {}; + var classes = $(element).attr("class"); + if ( classes ) { + $.each(classes.split(" "), function() { + if ( this in $.validator.classRuleSettings ) { + $.extend(rules, $.validator.classRuleSettings[this]); + } + }); + } + return rules; + }, + + attributeRules: function( element ) { + var rules = {}; + var $element = $(element); + + for (var method in $.validator.methods) { + var value; + + // support for <input required> in both html5 and older browsers + if ( method === "required" ) { + value = $element.get(0).getAttribute(method); + // Some browsers return an empty string for the required attribute + // and non-HTML5 browsers might have required="" markup + if ( value === "" ) { + value = true; + } + // force non-HTML5 browsers to return bool + value = !!value; + } else { + value = $element.attr(method); + } + + if ( value ) { + rules[method] = value; + } else if ( $element[0].getAttribute("type") === method ) { + rules[method] = true; + } + } + + // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs + if ( rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength) ) { + delete rules.maxlength; + } + + return rules; + }, + + dataRules: function( element ) { + var method, value, + rules = {}, $element = $(element); + for (method in $.validator.methods) { + value = $element.data("rule-" + method.toLowerCase()); + if ( value !== undefined ) { + rules[method] = value; + } + } + return rules; + }, + + staticRules: function( element ) { + var rules = {}; + var validator = $.data(element.form, "validator"); + if ( validator.settings.rules ) { + rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; + } + return rules; + }, + + normalizeRules: function( rules, element ) { + // handle dependency check + $.each(rules, function( prop, val ) { + // ignore rule when param is explicitly false, eg. required:false + if ( val === false ) { + delete rules[prop]; + return; + } + if ( val.param || val.depends ) { + var keepRule = true; + switch (typeof val.depends) { + case "string": + keepRule = !!$(val.depends, element.form).length; + break; + case "function": + keepRule = val.depends.call(element, element); + break; + } + if ( keepRule ) { + rules[prop] = val.param !== undefined ? val.param : true; + } else { + delete rules[prop]; + } + } + }); + + // evaluate parameters + $.each(rules, function( rule, parameter ) { + rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; + }); + + // clean number parameters + $.each(["minlength", "maxlength", "min", "max"], function() { + if ( rules[this] ) { + rules[this] = Number(rules[this]); + } + }); + $.each(["rangelength", "range"], function() { + var parts; + if ( rules[this] ) { + if ( $.isArray(rules[this]) ) { + rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; + } else if ( typeof rules[this] === "string" ) { + parts = rules[this].split(/[\s,]+/); + rules[this] = [Number(parts[0]), Number(parts[1])]; + } + } + }); + + if ( $.validator.autoCreateRanges ) { + // auto-create ranges + if ( rules.min && rules.max ) { + rules.range = [rules.min, rules.max]; + delete rules.min; + delete rules.max; + } + if ( rules.minlength && rules.maxlength ) { + rules.rangelength = [rules.minlength, rules.maxlength]; + delete rules.minlength; + delete rules.maxlength; + } + } + + return rules; + }, + + // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} + normalizeRule: function( data ) { + if ( typeof data === "string" ) { + var transformed = {}; + $.each(data.split(/\s/), function() { + transformed[this] = true; + }); + data = transformed; + } + return data; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/addMethod + addMethod: function( name, method, message ) { + $.validator.methods[name] = method; + $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name]; + if ( method.length < 3 ) { + $.validator.addClassRules(name, $.validator.normalizeRule(name)); + } + }, + + methods: { + + // http://docs.jquery.com/Plugins/Validation/Methods/required + required: function( value, element, param ) { + // check if dependency is met + if ( !this.depend(param, element) ) { + return "dependency-mismatch"; + } + if ( element.nodeName.toLowerCase() === "select" ) { + // could be an array for select-multiple or a string, both are fine this way + var val = $(element).val(); + return val && val.length > 0; + } + if ( this.checkable(element) ) { + return this.getLength(value, element) > 0; + } + return $.trim(value).length > 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/remote + remote: function( value, element, param ) { + if ( this.optional(element) ) { + return "dependency-mismatch"; + } + + var previous = this.previousValue(element); + if (!this.settings.messages[element.name] ) { + this.settings.messages[element.name] = {}; + } + previous.originalMessage = this.settings.messages[element.name].remote; + this.settings.messages[element.name].remote = previous.message; + + param = typeof param === "string" && {url:param} || param; + + if ( previous.old === value ) { + return previous.valid; + } + + previous.old = value; + var validator = this; + this.startRequest(element); + var data = {}; + data[element.name] = value; + $.ajax($.extend(true, { + url: param, + mode: "abort", + port: "validate" + element.name, + dataType: "json", + data: data, + success: function( response ) { + validator.settings.messages[element.name].remote = previous.originalMessage; + var valid = response === true || response === "true"; + if ( valid ) { + var submitted = validator.formSubmitted; + validator.prepareElement(element); + validator.formSubmitted = submitted; + validator.successList.push(element); + delete validator.invalid[element.name]; + validator.showErrors(); + } else { + var errors = {}; + var message = response || validator.defaultMessage( element, "remote" ); + errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; + validator.invalid[element.name] = true; + validator.showErrors(errors); + } + previous.valid = valid; + validator.stopRequest(element, valid); + } + }, param)); + return "pending"; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/minlength + minlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || length >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/maxlength + maxlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || length <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/rangelength + rangelength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || ( length >= param[0] && length <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/min + min: function( value, element, param ) { + return this.optional(element) || value >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/max + max: function( value, element, param ) { + return this.optional(element) || value <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/range + range: function( value, element, param ) { + return this.optional(element) || ( value >= param[0] && value <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/email + email: function( value, element ) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ + return this.optional(element) || /^((([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(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/url + url: function( value, element ) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ + return this.optional(element) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([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])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/date + date: function( value, element ) { + return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString()); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/dateISO + dateISO: function( value, element ) { + return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/number + number: function( value, element ) { + return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/digits + digits: function( value, element ) { + return this.optional(element) || /^\d+$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/creditcard + // based on http://en.wikipedia.org/wiki/Luhn + creditcard: function( value, element ) { + if ( this.optional(element) ) { + return "dependency-mismatch"; + } + // accept only spaces, digits and dashes + if ( /[^0-9 \-]+/.test(value) ) { + return false; + } + var nCheck = 0, + nDigit = 0, + bEven = false; + + value = value.replace(/\D/g, ""); + + for (var n = value.length - 1; n >= 0; n--) { + var cDigit = value.charAt(n); + nDigit = parseInt(cDigit, 10); + if ( bEven ) { + if ( (nDigit *= 2) > 9 ) { + nDigit -= 9; + } + } + nCheck += nDigit; + bEven = !bEven; + } + + return (nCheck % 10) === 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/equalTo + equalTo: function( value, element, param ) { + // bind to the blur event of the target in order to revalidate whenever the target field is updated + // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead + var target = $(param); + if ( this.settings.onfocusout ) { + target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() { + $(element).valid(); + }); + } + return value === target.val(); + } + + } + +}); + +// deprecated, use $.validator.format instead +$.format = $.validator.format; + +}(jQuery)); + +// ajax mode: abort +// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); +// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() +(function($) { + var pendingRequests = {}; + // Use a prefilter if available (1.5+) + if ( $.ajaxPrefilter ) { + $.ajaxPrefilter(function( settings, _, xhr ) { + var port = settings.port; + if ( settings.mode === "abort" ) { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + pendingRequests[port] = xhr; + } + }); + } else { + // Proxy ajax + var ajax = $.ajax; + $.ajax = function( settings ) { + var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, + port = ( "port" in settings ? settings : $.ajaxSettings ).port; + if ( mode === "abort" ) { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + return (pendingRequests[port] = ajax.apply(this, arguments)); + } + return ajax.apply(this, arguments); + }; + } +}(jQuery)); + +// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation +// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target +(function($) { + $.extend($.fn, { + validateDelegate: function( delegate, type, handler ) { + return this.bind(type, function( event ) { + var target = $(event.target); + if ( target.is(delegate) ) { + return handler.apply(target, arguments); + } + }); + } + }); +}(jQuery)); + + diff --git a/portal/static/my_account.common.css b/portal/static/my_account.common.css new file mode 100644 index 00000000..82540a63 --- /dev/null +++ b/portal/static/my_account.common.css @@ -0,0 +1,230 @@ +/***************************************************************** +<File Name> + common.css + +<Started> + January 18, 2009 + +<Refactored> + March 7, 2009 + +<Author> + shawiz@cs.washington.edu + Xuanhua (Sean) Ren + +<Purpose> + Provides the common stylesheet for Seattle Clearinghouse + + +*****************************************************************/ + + +/******************* +* RESET +********************/ + +* { + margin: 0; + padding: 0; +} + +fieldset, img { + border: 0; +} + + + +/************************ +* GENERAL +************************/ + +body { + background-color: #fff; + font-family: "Segoe UI", "Lucida Grande", "Helvetica" , sans-serif; + font-size: 12pt; + min-width: 1000px; /* ADDED July 2012 */ + margin: 0px auto; /* ADDED Aug 14, 2012 */ +} + +ol { + list-style-position: inside; +} + +a { + text-decoration: none; + color: #0066FF; +} + +code { + font-family: "Consolas", "Lucida Console", "Monaco", "Courier New"; +} + +.odd { + background-color: #fff; +} + +.even { + background-color: #eee; +} + + +/************************ +* LAYOUT +************************/ + +/***** Header *****/ + +#header { + width: 900px; /* Edited Aug 14, 2012 prev width:70%*/ + margin: 30px auto 20px auto; +} + +#header #logo { + font-size: 42px; /* Edited Sept 28, 2012 prev value :36pt*/ + font-weight: bold; +} + +#header #logo a { + color: #000; +} + +#header #caption { + margin-left: 20px; + font-size: 13.3333px; +} + +#header #caption a { + color: #0066FF; +} + + +/***** Navigator *****/ + +#navigator { + border-bottom: 3px solid #222; + width: 100%; + margin: 0 auto; /* ADDED Aug 14, 2012 */ +} + +#tabs { + margin: 0 auto; + width: 900px; /* Editied Aug 14, 2012 prev width: 70% */ +} + +#meta { + float: right; + font-size: 13pt; + margin: 5px 0; +} + +#meta a.logout { + color: red; +} + +#tabs table { + border-collapse: collapse; + border-spacing: 0; +} + +#tabs table tr td { + padding: 5px 15px; + font-size: 14pt; + border-top: 1px solid #222; + border-right: 2px solid #222; + border-left: 2px solid #222; +} + +#tabs table tr td a { + color: #000; +} + +#tabs table tr td.active { + background-color: #222; + color: #fff; +} + +#tabs table tr td.active a { + color: #fff; +} + + +/***** Main *****/ + +#main { + width: 100%; + height: 400px; + padding: 40px 0; + background-image: url(../images/bg.png); + background-repeat: repeat-x; +} + +#middle { + margin: 0 auto; + width: 900px; /* Edited Aug 14, 2012 prev width:70% */ + padding-bottom: 60px; +} + + +/***** Notifications *****/ + +.warning { + border: 1px solid red; + margin: 20px 60px; + padding: 10px 20px; + color: red; + background-color: #f2dbdb; + text-align: center; +} +.warning2 { + border: 1px solid red; + margin: 20px 60px; + padding: 10px 20px; + color: red; + background-color: #f2dbdb; + text-align: center; +} +.message { + border: 1px solid green; + max-width : 682px; /* ADDED July 2012 */ + margin: 20px 60px; + padding: 10px 20px; + color: green; + font-weight: bold; + background-color: #CCFFCC; + text-align: center; +} + +.tooltip { + background-color: #efefef; + color: #333; + font-size: 10pt; + padding: 3px; + border: solid 1px #333; + z-index:100; +} + +ul.errorlist li { + color: red; + font-weight: normal; + font-size: 10pt; + background-color: #f2dbdb; + padding: 3px; + list-style-position: inside; +} + +#learn-about-seattle { + /* max-width : 70%;*/ + text-align : center; + background-color : #ded; + border : 1px solid #0a0; + padding : 1em; + margin-top : 1em; + margin-bottom : 1em; + font-size : 1.3em; +} + + + + + + diff --git a/portal/static/my_account.edit_profile.js b/portal/static/my_account.edit_profile.js new file mode 100644 index 00000000..de71b107 --- /dev/null +++ b/portal/static/my_account.edit_profile.js @@ -0,0 +1,198 @@ +/* + ********* + ******* JQuery for the MySlice [Local] account buttons ********************* + ******** +Authors: + Mohammed Yasin Rahman <mohammed-yasin.rahman@lip6.fr> +Copyright 2013, UPMC Sorbonne Universités / LIP6 + + */ + +jQuery(document).ready(function(){ + // jquery functionalities of different buttons [Edit, Cancel, Upload] + //edit name + jQuery("#edit_name").click(function(){ + + jQuery("#span_name").show(); + jQuery("#nameval").hide(); + jQuery("#edit_name").hide(); + // enforcing when one edit is clicked the rest will not work at same time + jQuery("#span_pass").hide(); + jQuery("#edit_pass").show(); + jQuery("#passval").show(); + jQuery("#span_aff").hide(); + jQuery("#edit_aff").show(); + jQuery("#affval").show(); + jQuery("#span_email").hide(); + jQuery("#edit_email").show(); + jQuery("#emailval").show(); + jQuery("#span_upload").hide(); + jQuery("#keyval").show(); + jQuery("#dl_file").show(); + jQuery("#upload_file").show(); + }); + jQuery("#cancel_name_change").click(function(){ + + jQuery("#span_name").hide(); + jQuery("#nameval").show(); + jQuery("#edit_name").show(); + + + }); + //edit pass + jQuery("#edit_pass").click(function(){ + + jQuery("#span_pass").show(); + jQuery("#passval").hide(); + jQuery("#edit_pass").hide(); + // enforcing when one edit is clicked the rest will not work at same time + jQuery("#span_name").hide(); + jQuery("#edit_name").show(); + jQuery("#nameval").show(); + jQuery("#span_aff").hide(); + jQuery("#edit_aff").show(); + jQuery("#affval").show(); + jQuery("#span_email").hide(); + jQuery("#edit_email").show(); + jQuery("#emailval").show(); + jQuery("#span_upload").hide(); + jQuery("#keyval").show(); + jQuery("#dl_file").show(); + jQuery("#upload_file").show(); + }); + jQuery("#cancel_pass_change").click(function(){ + + jQuery("#span_pass").hide(); + jQuery("#passval").show(); + jQuery("#edit_pass").show(); + }); + // both password should be same + jQuery("#editForm").validate({ + rules: { + password: { + required: true + }, + confirmpassword: { + required: true, equalTo: "#password" + } + } + }); + //edit affiliation + jQuery("#edit_aff").click(function(){ + + jQuery("#span_aff").show(); + jQuery("#affval").hide(); + jQuery("#edit_aff").hide(); + // enforcing when one edit is clicked the rest will not work at same time + jQuery("#span_pass").hide(); + jQuery("#edit_pass").show(); + jQuery("#passval").show(); + jQuery("#span_name").hide(); + jQuery("#edit_name").show(); + jQuery("#nameval").show(); + jQuery("#span_email").hide(); + jQuery("#edit_email").show(); + jQuery("#emailval").show(); + jQuery("#span_upload").hide(); + jQuery("#keyval").show(); + jQuery("#dl_file").show(); + jQuery("#upload_file").show(); + }); + jQuery("#cancel_aff_change").click(function(){ + + jQuery("#span_aff").hide(); + jQuery("#affval").show(); + jQuery("#edit_aff").show(); + }); + //edit email + /* edit email will be done by PI if needed + jQuery("#edit_email").click(function(){ + + jQuery("#span_email").show(); + jQuery("#emailval").hide(); + jQuery("#edit_email").hide(); + // enforcing when one edit is clicked the rest will not work at same time + jQuery("#span_pass").hide(); + jQuery("#edit_pass").show(); + jQuery("#passval").show(); + jQuery("#span_aff").hide(); + jQuery("#edit_aff").show(); + jQuery("#affval").show(); + jQuery("#span_name").hide(); + jQuery("#edit_name").show(); + jQuery("#nameval").show(); + jQuery("#span_upload").hide(); + jQuery("#keyval").show(); + jQuery("#dl_file").show(); + jQuery("#upload_file").show(); + }); + jQuery("#cancel_email_change").click(function(){ + + jQuery("#span_email").hide(); + jQuery("#emailval").show(); + jQuery("#edit_email").show(); + }); */ + //upload pub keys + jQuery("#upload_file").click(function(){ + + jQuery("#span_upload").show(); + jQuery("#dl_file").hide(); + jQuery("#upload_file").hide(); + jQuery("#keyval").hide(); + // enforcing when one edit is clicked the rest will not work at same time + jQuery("#span_name").hide(); + jQuery("#edit_name").show(); + jQuery("#nameval").show(); + jQuery("#span_pass").hide(); + jQuery("#edit_pass").show(); + jQuery("#passval").show(); + jQuery("#span_aff").hide(); + jQuery("#edit_aff").show(); + jQuery("#affval").show(); + jQuery("#span_email").hide(); + jQuery("#edit_email").show(); + jQuery("#emailval").show(); + }); + jQuery("#cancel_upload").click(function(){ + + jQuery("#span_upload").hide(); + jQuery("#keyval").show(); + jQuery("#dl_file").show(); + jQuery("#upload_file").show(); + }); + }); + +// alert box for the "Generate new Key Pair button" +function myFunction() +{ +alert("You have requested to generate new key pairs. Please download and save the new keypairs after receiving the success message."); +} + +function emailAlert() +{ +alert("To edit email please contact the administratior. You will be redirected to the support page now"); +window.location.href = "/support"; +} + +function affAlert() +{ +alert("To edit affiliation please contact the administratior. You will be redirected to the support page now"); +window.location.href = "/support"; +} +/* + // alert having ok or cancel option +function show_confirm() +{ +var r=confirm("Press a button!"); +if (r==true) + { + alert("You pressed OK!"); + } +else + { + alert("You pressed Cancel!"); + } +} +*/ + + diff --git a/portal/static/my_account.profile.css b/portal/static/my_account.profile.css new file mode 100644 index 00000000..b6e1b208 --- /dev/null +++ b/portal/static/my_account.profile.css @@ -0,0 +1,173 @@ + + +/****************************** +* STYLE FOR PROFILE PAGE +*******************************/ + +h1 { + font-size: 1.8em; + border-bottom: 1px solid #bbb; + width: 70%; + min-width: 688px; +} + +#info { + background-color : #ded; + border : 1px solid #0a0; + padding : 1em; + margin-bottom : 1em; +} + +#error_msg { + background-color : #f2dbdb; + border : 1px solid red; + padding : 1em; + margin-bottom : 1em; +} + +ul.errorlist li { + font-size: 12pt; + padding: 0px; +} + +/* ADDED July 27, 2012 to fix the table collapsing on itself when the browser is below a certain size */ +table.profile { + border-collapse: collapse; + border-spacing: 0; + width: 70%; + min-width: 703px; +} + +table.profile tr td.key { + text-align: right; + height: 30px; + font-size: 16px; + font-weight: bold; + width: 160px; +} + +table.profile tr td.value { + padding-left: 20px; + min-width: 500px; /* ADDED July 27, 2012 */ +} + +table.profile button { + width: 80px; + vertical-align: middle; + float: right; + margin-right: 15px; +} + +table.profile span.hide_this{ + display: inline; + display: none; +} + +table.profile form{ + display:inline; +} + +#download { + float: right; + border: 2px solid #666; + background-color: #fff; + padding: 10px; + margin-right: 0px; + text-align: center; + font-weight: bold; +} + +#download a img { + display: block; + width: 150px; +} + +#download a { + color: black; +} + +#download_pubkey_form { + display : inline; +} +/* ADDED(everything below) Aug 14, 2012 */ +#generate_api { + width: 175px; +} + +#change_key form { + display: inline; + width: 688px; +} + +#generate_keypair { + position:relative; + width: 175px; + float: right; + margin-right: 15px; + +} +#edit_password table { + display:inline; + margin: auto; + border-collapse: collapse; + border-spacing: 0; + padding-left: 5px; + width: 100%; +} + +#edit_password td.field { + padding-left: 5px; + +} + +.wide_button { + width: 175px; +} + +.api_cell { + color:red; +} + +.api_cell:hover { + text-decoration: underline; +} + +img.help { + position: relative; + float: left; + left: 162px; + display: none; + /* when a negative margin is applied to right or bottom + it allows the element to overlap + */ + margin-bottom: -50px; +} + +#id_email { + width: 200px; +} + +#aff_list { + width: 200px; +} +#name { + width: 200px; +} + +/*Added Sept 2012 to fix long api keys creating a new line*/ +#api_key { + color: red; + font-family: courier; +} + +#up_arrow { + height: 36px; + width: 36px; + float: right; + position: relative; + margin-right: 132px; + /*when a negative margin is applied to right or bottom + it allows the element to overlap + */ + margin-bottom:-50px; +} diff --git a/portal/static/my_account.register.js b/portal/static/my_account.register.js new file mode 100644 index 00000000..bb7fba49 --- /dev/null +++ b/portal/static/my_account.register.js @@ -0,0 +1,56 @@ +/* +# Jquery for password matching and Affiliation list + +Authors: + Mohammed Yasin Rahman <mohammed-yasin.rahman@lip6.fr> +Copyright 2013, UPMC Sorbonne Universités / LIP6 + +*/ +jQuery(document).ready(function(){ + + jQuery("#commentForm").validate({ + rules: { + password: { + required: true + }, + confirmpassword: { + required: true, equalTo: "#password" + } + } + }); + // upload button + jQuery("#question").change(function(){ + if(this.value=="upload"){ + jQuery("#upload_key").show(); + }else{ + jQuery("#upload_key").hide(); + } + }); + +}); + +jQuery(function() { + var availableTags = [ + "iMinds", + "IT Innovation", + "UPMC", + "Fraunhofer", + "TUB", + "UEDIN", + "INRIA", + "NICTA", + "ATOS", + "UTH", + "NTUA", + "UNIVBRIS", + "i2CAT", + "EUR", + "DANTE Limited", + "UC", + "NIA" + ]; + jQuery( "#aff_list" ).autocomplete({ + source: availableTags + }); + }); + diff --git a/portal/static/ques_icon.png b/portal/static/ques_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4113c1216504fd87f383305037ea92b04551d1af GIT binary patch literal 102623 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 M|LZOcgs9{H0OaI`wEzGB literal 0 HcmV?d00001 diff --git a/portal/templates/my_account.html b/portal/templates/my_account.html index 634f2c5c..72d69b6d 100644 --- a/portal/templates/my_account.html +++ b/portal/templates/my_account.html @@ -1,11 +1,11 @@ {% extends "layout-unfold1.html" %} {% block head %} -<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/my_account.common.css" /> -<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/my_account.profile.css" /> -<script type="text/javascript" src="{{STATIC_URL}}/js/jquery.validate.js"></script> -<script type="text/javascript" src="{{STATIC_URL}}/js/my_account.edit_profile.js"></script> -<script type="text/javascript" src="{{STATIC_URL}}/js/my_account.register.js"></script> +<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/my_account.common.css" /> +<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/my_account.profile.css" /> +<script type="text/javascript" src="{{STATIC_URL}}/jquery.validate.js"></script> +<script type="text/javascript" src="{{STATIC_URL}}/my_account.edit_profile.js"></script> +<script type="text/javascript" src="{{STATIC_URL}}/my_account.register.js"></script> {% endblock %} {% block unfold1_main %} @@ -31,7 +31,7 @@ <td class="key">Email</td> <td class="value"> <span id="emailval" class="value" >{{ person.email }}</span> - <img class="logo" src="{{STATIC_URL}}/img/ques_icon.png" onclick="emailAlert()" title="To change your email please contact the administrator" style="height: 20px; width: 20px; position: absolute; left: 625px; left: 900px; margin-top: -9px;"> + <img class="logo" src="{{STATIC_URL}}/ques_icon.png" onclick="emailAlert()" title="To change your email please contact the administrator" style="height: 20px; width: 20px; position: absolute; left: 625px; left: 900px; margin-top: -9px;"> </td> </tr> <tr class="odd"> @@ -81,7 +81,7 @@ <td class="key">Affiliation</td> <td class="value"> <span id="affval" class="value">UPMC</span> - <img class="logo" src="{{STATIC_URL}}/img/ques_icon.png" onclick="affAlert()" title="To change your affiliation please contact the administrator" style="height: 20px; width: 20px; position: absolute; left: 625px; left: 900px; "> + <img class="logo" src="{{STATIC_URL}}/ques_icon.png" onclick="affAlert()" title="To change your affiliation please contact the administrator" style="height: 20px; width: 20px; position: absolute; left: 625px; left: 900px; "> </td> </tr> diff --git a/third-party/jquery/js/jquery.validate.js b/third-party/jquery/js/jquery.validate.js new file mode 100644 index 00000000..51eb2ef5 --- /dev/null +++ b/third-party/jquery/js/jquery.validate.js @@ -0,0 +1,1222 @@ +/** + * jQuery Validation Plugin 1.11.0pre + * + * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ + * http://docs.jquery.com/Plugins/Validation + * + * Copyright 2013 Jörn Zaefferer + * Released under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + */ + +(function($) { + +$.extend($.fn, { + // http://docs.jquery.com/Plugins/Validation/validate + validate: function( options ) { + + // if nothing is selected, return nothing; can't chain anyway + if ( !this.length ) { + if ( options && options.debug && window.console ) { + console.warn( "Nothing selected, can't validate, returning nothing." ); + } + return; + } + + // check if a validator for this form was already created + var validator = $.data( this[0], "validator" ); + if ( validator ) { + return validator; + } + + // Add novalidate tag if HTML5. + this.attr( "novalidate", "novalidate" ); + + validator = new $.validator( options, this[0] ); + $.data( this[0], "validator", validator ); + + if ( validator.settings.onsubmit ) { + + this.validateDelegate( ":submit", "click", function( event ) { + if ( validator.settings.submitHandler ) { + validator.submitButton = event.target; + } + // allow suppressing validation by adding a cancel class to the submit button + if ( $(event.target).hasClass("cancel") ) { + validator.cancelSubmit = true; + } + }); + + // validate the form on submit + this.submit( function( event ) { + if ( validator.settings.debug ) { + // prevent form submit to be able to see console output + event.preventDefault(); + } + function handle() { + var hidden; + if ( validator.settings.submitHandler ) { + if ( validator.submitButton ) { + // insert a hidden input as a replacement for the missing submit button + hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm); + } + validator.settings.submitHandler.call( validator, validator.currentForm, event ); + if ( validator.submitButton ) { + // and clean up afterwards; thanks to no-block-scope, hidden can be referenced + hidden.remove(); + } + return false; + } + return true; + } + + // prevent submit for invalid forms or custom submit handlers + if ( validator.cancelSubmit ) { + validator.cancelSubmit = false; + return handle(); + } + if ( validator.form() ) { + if ( validator.pendingRequest ) { + validator.formSubmitted = true; + return false; + } + return handle(); + } else { + validator.focusInvalid(); + return false; + } + }); + } + + return validator; + }, + // http://docs.jquery.com/Plugins/Validation/valid + valid: function() { + if ( $(this[0]).is("form")) { + return this.validate().form(); + } else { + var valid = true; + var validator = $(this[0].form).validate(); + this.each(function() { + valid &= validator.element(this); + }); + return valid; + } + }, + // attributes: space seperated list of attributes to retrieve and remove + removeAttrs: function( attributes ) { + var result = {}, + $element = this; + $.each(attributes.split(/\s/), function( index, value ) { + result[value] = $element.attr(value); + $element.removeAttr(value); + }); + return result; + }, + // http://docs.jquery.com/Plugins/Validation/rules + rules: function( command, argument ) { + var element = this[0]; + + if ( command ) { + var settings = $.data(element.form, "validator").settings; + var staticRules = settings.rules; + var existingRules = $.validator.staticRules(element); + switch(command) { + case "add": + $.extend(existingRules, $.validator.normalizeRule(argument)); + staticRules[element.name] = existingRules; + if ( argument.messages ) { + settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); + } + break; + case "remove": + if ( !argument ) { + delete staticRules[element.name]; + return existingRules; + } + var filtered = {}; + $.each(argument.split(/\s/), function( index, method ) { + filtered[method] = existingRules[method]; + delete existingRules[method]; + }); + return filtered; + } + } + + var data = $.validator.normalizeRules( + $.extend( + {}, + $.validator.classRules(element), + $.validator.attributeRules(element), + $.validator.dataRules(element), + $.validator.staticRules(element) + ), element); + + // make sure required is at front + if ( data.required ) { + var param = data.required; + delete data.required; + data = $.extend({required: param}, data); + } + + return data; + } +}); + +// Custom selectors +$.extend($.expr[":"], { + // http://docs.jquery.com/Plugins/Validation/blank + blank: function( a ) { return !$.trim("" + a.value); }, + // http://docs.jquery.com/Plugins/Validation/filled + filled: function( a ) { return !!$.trim("" + a.value); }, + // http://docs.jquery.com/Plugins/Validation/unchecked + unchecked: function( a ) { return !a.checked; } +}); + +// constructor for validator +$.validator = function( options, form ) { + this.settings = $.extend( true, {}, $.validator.defaults, options ); + this.currentForm = form; + this.init(); +}; + +$.validator.format = function( source, params ) { + if ( arguments.length === 1 ) { + return function() { + var args = $.makeArray(arguments); + args.unshift(source); + return $.validator.format.apply( this, args ); + }; + } + if ( arguments.length > 2 && params.constructor !== Array ) { + params = $.makeArray(arguments).slice(1); + } + if ( params.constructor !== Array ) { + params = [ params ]; + } + $.each(params, function( i, n ) { + source = source.replace( new RegExp("\\{" + i + "\\}", "g"), function() { + return n; + }); + }); + return source; +}; + +$.extend($.validator, { + + defaults: { + messages: {}, + groups: {}, + rules: {}, + errorClass: "error", + validClass: "valid", + errorElement: "label", + focusInvalid: true, + errorContainer: $([]), + errorLabelContainer: $([]), + onsubmit: true, + ignore: ":hidden", + ignoreTitle: false, + onfocusin: function( element, event ) { + this.lastActive = element; + + // hide error label and remove error class on focus if enabled + if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { + if ( this.settings.unhighlight ) { + this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); + } + this.addWrapper(this.errorsFor(element)).hide(); + } + }, + onfocusout: function( element, event ) { + if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { + this.element(element); + } + }, + onkeyup: function( element, event ) { + if ( event.which === 9 && this.elementValue(element) === "" ) { + return; + } else if ( element.name in this.submitted || element === this.lastElement ) { + this.element(element); + } + }, + onclick: function( element, event ) { + // click on selects, radiobuttons and checkboxes + if ( element.name in this.submitted ) { + this.element(element); + } + // or option elements, check parent select in that case + else if ( element.parentNode.name in this.submitted ) { + this.element(element.parentNode); + } + }, + highlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName(element.name).addClass(errorClass).removeClass(validClass); + } else { + $(element).addClass(errorClass).removeClass(validClass); + } + }, + unhighlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName(element.name).removeClass(errorClass).addClass(validClass); + } else { + $(element).removeClass(errorClass).addClass(validClass); + } + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults + setDefaults: function( settings ) { + $.extend( $.validator.defaults, settings ); + }, + + 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.", + creditcard: "Please enter a valid credit card number.", + equalTo: "Please enter the same value again.", + maxlength: $.validator.format("Please enter no more than {0} characters."), + minlength: $.validator.format("Please enter at least {0} characters."), + rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), + range: $.validator.format("Please enter a value between {0} and {1}."), + max: $.validator.format("Please enter a value less than or equal to {0}."), + min: $.validator.format("Please enter a value greater than or equal to {0}.") + }, + + autoCreateRanges: false, + + prototype: { + + init: function() { + this.labelContainer = $(this.settings.errorLabelContainer); + this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); + this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); + this.submitted = {}; + this.valueCache = {}; + this.pendingRequest = 0; + this.pending = {}; + this.invalid = {}; + this.reset(); + + var groups = (this.groups = {}); + $.each(this.settings.groups, function( key, value ) { + if ( typeof value === "string" ) { + value = value.split(/\s/); + } + $.each(value, function( index, name ) { + groups[name] = key; + }); + }); + var rules = this.settings.rules; + $.each(rules, function( key, value ) { + rules[key] = $.validator.normalizeRule(value); + }); + + function delegate(event) { + var validator = $.data(this[0].form, "validator"), + eventType = "on" + event.type.replace(/^validate/, ""); + if ( validator.settings[eventType] ) { + validator.settings[eventType].call(validator, this[0], event); + } + } + $(this.currentForm) + .validateDelegate(":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'] ", + "focusin focusout keyup", delegate) + .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate); + + if ( this.settings.invalidHandler ) { + $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/form + form: function() { + this.checkForm(); + $.extend(this.submitted, this.errorMap); + this.invalid = $.extend({}, this.errorMap); + if ( !this.valid() ) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + } + this.showErrors(); + return this.valid(); + }, + + checkForm: function() { + this.prepareForm(); + for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { + this.check( elements[i] ); + } + return this.valid(); + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/element + element: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + this.lastElement = element; + this.prepareElement( element ); + this.currentElements = $(element); + var result = this.check( element ) !== false; + if ( result ) { + delete this.invalid[element.name]; + } else { + this.invalid[element.name] = true; + } + if ( !this.numberOfInvalids() ) { + // Hide error containers on last error + this.toHide = this.toHide.add( this.containers ); + } + this.showErrors(); + return result; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/showErrors + showErrors: function( errors ) { + if ( errors ) { + // add items to error list and map + $.extend( this.errorMap, errors ); + this.errorList = []; + for ( var name in errors ) { + this.errorList.push({ + message: errors[name], + element: this.findByName(name)[0] + }); + } + // remove items from success list + this.successList = $.grep( this.successList, function( element ) { + return !(element.name in errors); + }); + } + if ( this.settings.showErrors ) { + this.settings.showErrors.call( this, this.errorMap, this.errorList ); + } else { + this.defaultShowErrors(); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/resetForm + resetForm: function() { + if ( $.fn.resetForm ) { + $(this.currentForm).resetForm(); + } + this.submitted = {}; + this.lastElement = null; + this.prepareForm(); + this.hideErrors(); + this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" ); + }, + + numberOfInvalids: function() { + return this.objectLength(this.invalid); + }, + + objectLength: function( obj ) { + var count = 0; + for ( var i in obj ) { + count++; + } + return count; + }, + + hideErrors: function() { + this.addWrapper( this.toHide ).hide(); + }, + + valid: function() { + return this.size() === 0; + }, + + size: function() { + return this.errorList.length; + }, + + focusInvalid: function() { + if ( this.settings.focusInvalid ) { + try { + $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []) + .filter(":visible") + .focus() + // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find + .trigger("focusin"); + } catch(e) { + // ignore IE throwing errors when focusing hidden elements + } + } + }, + + findLastActive: function() { + var lastActive = this.lastActive; + return lastActive && $.grep(this.errorList, function( n ) { + return n.element.name === lastActive.name; + }).length === 1 && lastActive; + }, + + elements: function() { + var validator = this, + rulesCache = {}; + + // select all valid inputs inside the form (no submit or reset buttons) + return $(this.currentForm) + .find("input, select, textarea") + .not(":submit, :reset, :image, [disabled]") + .not( this.settings.ignore ) + .filter(function() { + if ( !this.name ) { + if ( window.console ) { + console.error( "%o has no name assigned", this ); + } + throw new Error( "Failed to validate, found an element with no name assigned. See console for element reference." ); + } + + // select only the first element for each name, and only those with rules specified + if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) { + return false; + } + + rulesCache[this.name] = true; + return true; + }); + }, + + clean: function( selector ) { + return $(selector)[0]; + }, + + errors: function() { + var errorClass = this.settings.errorClass.replace(" ", "."); + return $(this.settings.errorElement + "." + errorClass, this.errorContext); + }, + + reset: function() { + this.successList = []; + this.errorList = []; + this.errorMap = {}; + this.toShow = $([]); + this.toHide = $([]); + this.currentElements = $([]); + }, + + prepareForm: function() { + this.reset(); + this.toHide = this.errors().add( this.containers ); + }, + + prepareElement: function( element ) { + this.reset(); + this.toHide = this.errorsFor(element); + }, + + elementValue: function( element ) { + var type = $(element).attr("type"), + val = $(element).val(); + + if ( type === "radio" || type === "checkbox" ) { + return $("input[name='" + $(element).attr("name") + "']:checked").val(); + } + + if ( typeof val === "string" ) { + return val.replace(/\r/g, ""); + } + return val; + }, + + check: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + + var rules = $(element).rules(); + var dependencyMismatch = false; + var val = this.elementValue(element); + var result; + + for (var method in rules ) { + var rule = { method: method, parameters: rules[method] }; + try { + + result = $.validator.methods[method].call( this, val, element, rule.parameters ); + + // if a method indicates that the field is optional and therefore valid, + // don't mark it as valid when there are no other rules + if ( result === "dependency-mismatch" ) { + dependencyMismatch = true; + continue; + } + dependencyMismatch = false; + + if ( result === "pending" ) { + this.toHide = this.toHide.not( this.errorsFor(element) ); + return; + } + + if ( !result ) { + this.formatAndAdd( element, rule ); + return false; + } + } catch(e) { + if ( this.settings.debug && window.console ) { + console.log( "Exception occured when checking element " + element.id + ", check the '" + rule.method + "' method.", e ); + } + throw e; + } + } + if ( dependencyMismatch ) { + return; + } + if ( this.objectLength(rules) ) { + this.successList.push(element); + } + return true; + }, + + // return the custom message for the given element and validation method + // specified in the element's HTML5 data attribute + customDataMessage: function( element, method ) { + return $(element).data("msg-" + method.toLowerCase()) || (element.attributes && $(element).attr("data-msg-" + method.toLowerCase())); + }, + + // return the custom message for the given element name and validation method + customMessage: function( name, method ) { + var m = this.settings.messages[name]; + return m && (m.constructor === String ? m : m[method]); + }, + + // return the first defined argument, allowing empty strings + findDefined: function() { + for(var i = 0; i < arguments.length; i++) { + if ( arguments[i] !== undefined ) { + return arguments[i]; + } + } + return undefined; + }, + + defaultMessage: function( element, method ) { + return this.findDefined( + this.customMessage( element.name, method ), + this.customDataMessage( element, method ), + // title is never undefined, so handle empty string as undefined + !this.settings.ignoreTitle && element.title || undefined, + $.validator.messages[method], + "<strong>Warning: No message defined for " + element.name + "</strong>" + ); + }, + + formatAndAdd: function( element, rule ) { + var message = this.defaultMessage( element, rule.method ), + theregex = /\$?\{(\d+)\}/g; + if ( typeof message === "function" ) { + message = message.call(this, rule.parameters, element); + } else if (theregex.test(message)) { + message = $.validator.format(message.replace(theregex, "{$1}"), rule.parameters); + } + this.errorList.push({ + message: message, + element: element + }); + + this.errorMap[element.name] = message; + this.submitted[element.name] = message; + }, + + addWrapper: function( toToggle ) { + if ( this.settings.wrapper ) { + toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); + } + return toToggle; + }, + + defaultShowErrors: function() { + var i, elements; + for ( i = 0; this.errorList[i]; i++ ) { + var error = this.errorList[i]; + if ( this.settings.highlight ) { + this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); + } + this.showLabel( error.element, error.message ); + } + if ( this.errorList.length ) { + this.toShow = this.toShow.add( this.containers ); + } + if ( this.settings.success ) { + for ( i = 0; this.successList[i]; i++ ) { + this.showLabel( this.successList[i] ); + } + } + if ( this.settings.unhighlight ) { + for ( i = 0, elements = this.validElements(); elements[i]; i++ ) { + this.settings.unhighlight.call( this, elements[i], 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 $(this.errorList).map(function() { + return this.element; + }); + }, + + showLabel: function( element, message ) { + var label = this.errorsFor( element ); + if ( label.length ) { + // refresh error/success class + label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); + + // check if we have a generated label, replace the message then + if ( label.attr("generated") ) { + label.html(message); + } + } else { + // create label + label = $("<" + this.settings.errorElement + "/>") + .attr({"for": this.idOrName(element), generated: true}) + .addClass(this.settings.errorClass) + .html(message || ""); + if ( this.settings.wrapper ) { + // make sure the element is visible, even in IE + // actually showing the wrapped element is handled elsewhere + label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); + } + if ( !this.labelContainer.append(label).length ) { + if ( this.settings.errorPlacement ) { + this.settings.errorPlacement(label, $(element) ); + } else { + label.insertAfter(element); + } + } + } + if ( !message && this.settings.success ) { + label.text(""); + if ( typeof this.settings.success === "string" ) { + label.addClass( this.settings.success ); + } else { + this.settings.success( label, element ); + } + } + this.toShow = this.toShow.add(label); + }, + + errorsFor: function( element ) { + var name = this.idOrName(element); + return this.errors().filter(function() { + return $(this).attr("for") === name; + }); + }, + + idOrName: function( element ) { + return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); + }, + + validationTargetFor: function( element ) { + // if radio/checkbox, validate first element in group instead + if ( this.checkable(element) ) { + element = this.findByName( element.name ).not(this.settings.ignore)[0]; + } + return element; + }, + + checkable: function( element ) { + return (/radio|checkbox/i).test(element.type); + }, + + findByName: function( name ) { + return $(this.currentForm).find("[name='" + name + "']"); + }, + + getLength: function( value, element ) { + switch( element.nodeName.toLowerCase() ) { + case "select": + return $("option:selected", element).length; + case "input": + if ( this.checkable( element) ) { + return this.findByName(element.name).filter(":checked").length; + } + } + return value.length; + }, + + depend: function( param, element ) { + return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; + }, + + dependTypes: { + "boolean": function( param, element ) { + return param; + }, + "string": function( param, element ) { + return !!$(param, element.form).length; + }, + "function": function( param, element ) { + return param(element); + } + }, + + optional: function( element ) { + var val = this.elementValue(element); + return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; + }, + + startRequest: function( element ) { + if ( !this.pending[element.name] ) { + this.pendingRequest++; + this.pending[element.name] = true; + } + }, + + stopRequest: function( element, valid ) { + this.pendingRequest--; + // sometimes synchronization fails, make sure pendingRequest is never < 0 + if ( this.pendingRequest < 0 ) { + this.pendingRequest = 0; + } + delete this.pending[element.name]; + if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { + $(this.currentForm).submit(); + this.formSubmitted = false; + } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + this.formSubmitted = false; + } + }, + + previousValue: function( element ) { + return $.data(element, "previousValue") || $.data(element, "previousValue", { + old: null, + valid: true, + message: this.defaultMessage( element, "remote" ) + }); + } + + }, + + classRuleSettings: { + required: {required: true}, + email: {email: true}, + url: {url: true}, + date: {date: true}, + dateISO: {dateISO: true}, + number: {number: true}, + digits: {digits: true}, + creditcard: {creditcard: true} + }, + + addClassRules: function( className, rules ) { + if ( className.constructor === String ) { + this.classRuleSettings[className] = rules; + } else { + $.extend(this.classRuleSettings, className); + } + }, + + classRules: function( element ) { + var rules = {}; + var classes = $(element).attr("class"); + if ( classes ) { + $.each(classes.split(" "), function() { + if ( this in $.validator.classRuleSettings ) { + $.extend(rules, $.validator.classRuleSettings[this]); + } + }); + } + return rules; + }, + + attributeRules: function( element ) { + var rules = {}; + var $element = $(element); + + for (var method in $.validator.methods) { + var value; + + // support for <input required> in both html5 and older browsers + if ( method === "required" ) { + value = $element.get(0).getAttribute(method); + // Some browsers return an empty string for the required attribute + // and non-HTML5 browsers might have required="" markup + if ( value === "" ) { + value = true; + } + // force non-HTML5 browsers to return bool + value = !!value; + } else { + value = $element.attr(method); + } + + if ( value ) { + rules[method] = value; + } else if ( $element[0].getAttribute("type") === method ) { + rules[method] = true; + } + } + + // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs + if ( rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength) ) { + delete rules.maxlength; + } + + return rules; + }, + + dataRules: function( element ) { + var method, value, + rules = {}, $element = $(element); + for (method in $.validator.methods) { + value = $element.data("rule-" + method.toLowerCase()); + if ( value !== undefined ) { + rules[method] = value; + } + } + return rules; + }, + + staticRules: function( element ) { + var rules = {}; + var validator = $.data(element.form, "validator"); + if ( validator.settings.rules ) { + rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; + } + return rules; + }, + + normalizeRules: function( rules, element ) { + // handle dependency check + $.each(rules, function( prop, val ) { + // ignore rule when param is explicitly false, eg. required:false + if ( val === false ) { + delete rules[prop]; + return; + } + if ( val.param || val.depends ) { + var keepRule = true; + switch (typeof val.depends) { + case "string": + keepRule = !!$(val.depends, element.form).length; + break; + case "function": + keepRule = val.depends.call(element, element); + break; + } + if ( keepRule ) { + rules[prop] = val.param !== undefined ? val.param : true; + } else { + delete rules[prop]; + } + } + }); + + // evaluate parameters + $.each(rules, function( rule, parameter ) { + rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; + }); + + // clean number parameters + $.each(["minlength", "maxlength", "min", "max"], function() { + if ( rules[this] ) { + rules[this] = Number(rules[this]); + } + }); + $.each(["rangelength", "range"], function() { + var parts; + if ( rules[this] ) { + if ( $.isArray(rules[this]) ) { + rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; + } else if ( typeof rules[this] === "string" ) { + parts = rules[this].split(/[\s,]+/); + rules[this] = [Number(parts[0]), Number(parts[1])]; + } + } + }); + + if ( $.validator.autoCreateRanges ) { + // auto-create ranges + if ( rules.min && rules.max ) { + rules.range = [rules.min, rules.max]; + delete rules.min; + delete rules.max; + } + if ( rules.minlength && rules.maxlength ) { + rules.rangelength = [rules.minlength, rules.maxlength]; + delete rules.minlength; + delete rules.maxlength; + } + } + + return rules; + }, + + // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} + normalizeRule: function( data ) { + if ( typeof data === "string" ) { + var transformed = {}; + $.each(data.split(/\s/), function() { + transformed[this] = true; + }); + data = transformed; + } + return data; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/addMethod + addMethod: function( name, method, message ) { + $.validator.methods[name] = method; + $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name]; + if ( method.length < 3 ) { + $.validator.addClassRules(name, $.validator.normalizeRule(name)); + } + }, + + methods: { + + // http://docs.jquery.com/Plugins/Validation/Methods/required + required: function( value, element, param ) { + // check if dependency is met + if ( !this.depend(param, element) ) { + return "dependency-mismatch"; + } + if ( element.nodeName.toLowerCase() === "select" ) { + // could be an array for select-multiple or a string, both are fine this way + var val = $(element).val(); + return val && val.length > 0; + } + if ( this.checkable(element) ) { + return this.getLength(value, element) > 0; + } + return $.trim(value).length > 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/remote + remote: function( value, element, param ) { + if ( this.optional(element) ) { + return "dependency-mismatch"; + } + + var previous = this.previousValue(element); + if (!this.settings.messages[element.name] ) { + this.settings.messages[element.name] = {}; + } + previous.originalMessage = this.settings.messages[element.name].remote; + this.settings.messages[element.name].remote = previous.message; + + param = typeof param === "string" && {url:param} || param; + + if ( previous.old === value ) { + return previous.valid; + } + + previous.old = value; + var validator = this; + this.startRequest(element); + var data = {}; + data[element.name] = value; + $.ajax($.extend(true, { + url: param, + mode: "abort", + port: "validate" + element.name, + dataType: "json", + data: data, + success: function( response ) { + validator.settings.messages[element.name].remote = previous.originalMessage; + var valid = response === true || response === "true"; + if ( valid ) { + var submitted = validator.formSubmitted; + validator.prepareElement(element); + validator.formSubmitted = submitted; + validator.successList.push(element); + delete validator.invalid[element.name]; + validator.showErrors(); + } else { + var errors = {}; + var message = response || validator.defaultMessage( element, "remote" ); + errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; + validator.invalid[element.name] = true; + validator.showErrors(errors); + } + previous.valid = valid; + validator.stopRequest(element, valid); + } + }, param)); + return "pending"; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/minlength + minlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || length >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/maxlength + maxlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || length <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/rangelength + rangelength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || ( length >= param[0] && length <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/min + min: function( value, element, param ) { + return this.optional(element) || value >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/max + max: function( value, element, param ) { + return this.optional(element) || value <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/range + range: function( value, element, param ) { + return this.optional(element) || ( value >= param[0] && value <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/email + email: function( value, element ) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ + return this.optional(element) || /^((([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(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/url + url: function( value, element ) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ + return this.optional(element) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([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])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/date + date: function( value, element ) { + return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString()); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/dateISO + dateISO: function( value, element ) { + return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/number + number: function( value, element ) { + return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/digits + digits: function( value, element ) { + return this.optional(element) || /^\d+$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/creditcard + // based on http://en.wikipedia.org/wiki/Luhn + creditcard: function( value, element ) { + if ( this.optional(element) ) { + return "dependency-mismatch"; + } + // accept only spaces, digits and dashes + if ( /[^0-9 \-]+/.test(value) ) { + return false; + } + var nCheck = 0, + nDigit = 0, + bEven = false; + + value = value.replace(/\D/g, ""); + + for (var n = value.length - 1; n >= 0; n--) { + var cDigit = value.charAt(n); + nDigit = parseInt(cDigit, 10); + if ( bEven ) { + if ( (nDigit *= 2) > 9 ) { + nDigit -= 9; + } + } + nCheck += nDigit; + bEven = !bEven; + } + + return (nCheck % 10) === 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/equalTo + equalTo: function( value, element, param ) { + // bind to the blur event of the target in order to revalidate whenever the target field is updated + // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead + var target = $(param); + if ( this.settings.onfocusout ) { + target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() { + $(element).valid(); + }); + } + return value === target.val(); + } + + } + +}); + +// deprecated, use $.validator.format instead +$.format = $.validator.format; + +}(jQuery)); + +// ajax mode: abort +// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); +// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() +(function($) { + var pendingRequests = {}; + // Use a prefilter if available (1.5+) + if ( $.ajaxPrefilter ) { + $.ajaxPrefilter(function( settings, _, xhr ) { + var port = settings.port; + if ( settings.mode === "abort" ) { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + pendingRequests[port] = xhr; + } + }); + } else { + // Proxy ajax + var ajax = $.ajax; + $.ajax = function( settings ) { + var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, + port = ( "port" in settings ? settings : $.ajaxSettings ).port; + if ( mode === "abort" ) { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + return (pendingRequests[port] = ajax.apply(this, arguments)); + } + return ajax.apply(this, arguments); + }; + } +}(jQuery)); + +// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation +// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target +(function($) { + $.extend($.fn, { + validateDelegate: function( delegate, type, handler ) { + return this.bind(type, function( event ) { + var target = $(event.target); + if ( target.is(delegate) ) { + return handler.apply(target, arguments); + } + }); + } + }); +}(jQuery)); + + -- 2.47.0