From af7c18aea18be19b7227b25a019af4d257cee7dd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jordan=20Aug=C3=A9?= Date: Mon, 10 Jun 2013 11:51:23 +0200 Subject: [PATCH] added misc plugins towards wizards for the portal --- Makefile | 4 + manifold/metadata.py | 2 +- myslice/settings.py | 1 + myslice/urls.py | 2 + plugins/form/__init__.py | 38 + plugins/form/form.css | 82 ++ plugins/form/form.html | 19 + plugins/form/form.js | 23 + plugins/form/jquery.validate.js | 1220 +++++++++++++++++ plugins/wizard/__init__.py | 44 + plugins/wizard/test.html | 405 ++++++ plugins/wizard/wizard.css | 11 + plugins/wizard/wizard.html | 21 + plugins/wizard/wizard.js | 63 + portal/__init__.py | 0 portal/img/account_validated.png | Bin 0 -> 6065 bytes portal/img/account_validated.png.olf | Bin 0 -> 20943 bytes portal/models.py | 3 + portal/portalpage.py | 36 + portal/templates/account_validated.html | 6 + portal/tests.py | 16 + portal/urls.py | 7 + portal/user-registration-step2.html | 1 + portal/views.py | 86 ++ .../smartwizard-1636c86/images/loader.gif | Bin 0 -> 4782 bytes third-party/smartwizard-1636c86/index.htm | 160 +++ .../js/jquery-1.4.2.min.js | 154 +++ .../js/jquery.smartWizard-2.0.js | 358 +++++ .../js/jquery.smartWizard-2.0.min.js | 10 + third-party/smartwizard-1636c86/readme.md | 34 + .../smartwizard-1636c86/services/service.php | 65 + .../smartwizard-1636c86/smartwizard2-ajax.htm | 158 +++ .../smartwizard2-multiple.htm | 294 ++++ .../smartwizard2-validation.php | 312 +++++ .../smartwizard2-vertical.htm | 165 +++ .../styles/smart_wizard.css | 305 +++++ .../styles/smart_wizard_vertical.css | 306 +++++ unfold/plugin.py | 1 + unfold/templates/plugin.html | 2 +- 39 files changed, 4412 insertions(+), 2 deletions(-) create mode 100644 plugins/form/__init__.py create mode 100644 plugins/form/form.css create mode 100644 plugins/form/form.html create mode 100644 plugins/form/form.js create mode 100644 plugins/form/jquery.validate.js create mode 100644 plugins/wizard/__init__.py create mode 100644 plugins/wizard/test.html create mode 100644 plugins/wizard/wizard.css create mode 100644 plugins/wizard/wizard.html create mode 100644 plugins/wizard/wizard.js create mode 100644 portal/__init__.py create mode 100644 portal/img/account_validated.png create mode 100644 portal/img/account_validated.png.olf create mode 100644 portal/models.py create mode 100644 portal/portalpage.py create mode 100644 portal/templates/account_validated.html create mode 100644 portal/tests.py create mode 100644 portal/urls.py create mode 100644 portal/user-registration-step2.html create mode 100644 portal/views.py create mode 100644 third-party/smartwizard-1636c86/images/loader.gif create mode 100644 third-party/smartwizard-1636c86/index.htm create mode 100644 third-party/smartwizard-1636c86/js/jquery-1.4.2.min.js create mode 100644 third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.js create mode 100644 third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.min.js create mode 100644 third-party/smartwizard-1636c86/readme.md create mode 100644 third-party/smartwizard-1636c86/services/service.php create mode 100644 third-party/smartwizard-1636c86/smartwizard2-ajax.htm create mode 100644 third-party/smartwizard-1636c86/smartwizard2-multiple.htm create mode 100644 third-party/smartwizard-1636c86/smartwizard2-validation.php create mode 100644 third-party/smartwizard-1636c86/smartwizard2-vertical.htm create mode 100644 third-party/smartwizard-1636c86/styles/smart_wizard.css create mode 100644 third-party/smartwizard-1636c86/styles/smart_wizard_vertical.css diff --git a/Makefile b/Makefile index 35538551..7752b109 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,10 @@ THIRD-PARTY-RESOURCES += $(shell ls third-party/syntaxhighlighter/scripts/shBrus THIRD-PARTY-RESOURCES += $(shell ls third-party/syntaxhighlighter/styles/shCore.css) THIRD-PARTY-RESOURCES += $(shell ls third-party/syntaxhighlighter/styles/shCoreDefault.css) THIRD-PARTY-RESOURCES += $(shell ls third-party/syntaxhighlighter/styles/shThemeDefault.css) +# wizard plugin +THIRD-PARTY-RESOURCES += $(shell ls third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.js) +#THIRD-PARTY-RESOURCES += $(shell ls third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.min.js) +THIRD-PARTY-RESOURCES += $(shell ls third-party/smartwizard-1636c86/styles/smart_wizard.css) thirdparty-js: diff --git a/manifold/metadata.py b/manifold/metadata.py index 59d600b1..4bb32845 100644 --- a/manifold/metadata.py +++ b/manifold/metadata.py @@ -54,4 +54,4 @@ class MetaData: return self.hash_by_object[object] def sorted_fields_by_object (self, object): - return self.hash_by_object[object]['columns'].sort() + return self.hash_by_object[object]['column'].sort() diff --git a/myslice/settings.py b/myslice/settings.py index 2dbb8618..e7d1bb26 100644 --- a/myslice/settings.py +++ b/myslice/settings.py @@ -153,6 +153,7 @@ INSTALLED_APPS = ( # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', + 'portal', ) # A sample logging configuration. The only tangible logging diff --git a/myslice/urls.py b/myslice/urls.py index a2e06951..08d6f9f1 100644 --- a/myslice/urls.py +++ b/myslice/urls.py @@ -47,4 +47,6 @@ urlpatterns = patterns( (r'^dashboard/?$', 'trash.dashboard.dashboard_view'), (r'^slice/?$', 'trash.sliceview.slice_view'), (r'^slice/(?P[\w\.]+)/?$', 'trash.sliceview.slice_view'), + # Portal + url(r'^portal/', include('portal.urls')), ) diff --git a/plugins/form/__init__.py b/plugins/form/__init__.py new file mode 100644 index 00000000..5081501e --- /dev/null +++ b/plugins/form/__init__.py @@ -0,0 +1,38 @@ +from unfold.composite import Composite +from unfold.plugin import Plugin + +class CreateForm (Plugin): + + def __init__ (self, **settings): + Plugin.__init__(self, **settings) + print "SETTINGS", settings + assert 'page' in settings, "You should specify page" + assert 'object' in settings, "You should specify object" + + # Retrieve object fields from metadata + metadata = settings['page'].get_metadata() + md_o = metadata.details_by_object(settings['object']) + self.columns = md_o['column'] + + def requirements (self): + return { 'js_files' : ['js/form.js', 'js/jquery.validate.js', ], + 'css_files' : ['css/form.css'] + } + + def template_env (self, request): + env={} + env.update(self.__dict__) + #env['columns']=self.columns + return env + + def template_file (self): + return "form.html" + + def json_settings_list (self): return ['plugin_uuid'] + + def get_validation_js(self): + # XXX We need to avoid sending the same query twice !" + # somehow store something into the dom, to perform an update afterwards + # XXX This should be moved to a template + # XXX We also need some storage into the wizard to be displayed later + return "alert('validation'); return true;" diff --git a/plugins/form/form.css b/plugins/form/form.css new file mode 100644 index 00000000..e8f79e20 --- /dev/null +++ b/plugins/form/form.css @@ -0,0 +1,82 @@ +#commentForm { + + margin:0 auto; + width:800px; + padding:10px; + font-size:12pt; + overflow:auto; + } +input { + border:2px solid #456879; + height: 22px; + width: 200px; + font-size: 10px; + } +label { + float: left; + font-weight: bold; + text-align: right; + margin-right: 20px; + width: 200px; + display: inline-block; + +} + +label.error { float: none; color: red; padding-left: .5em; vertical-align: top; font-size: 12px; } + +p { +/*border-bottom:1px solid #B7DDF2;*/ +color:#666666; +font-size:10px; +margin-bottom:20px; +padding-bottom:10px; +} + + + +legend { + position: relative; + top: -2px; + background: cornsilk; + padding: 10px 100px; + border: 2px groove threedface; + border-top: none; + box-shadow: inset 0 -5px 5px rgba(0,0,0,.2); + text-shadow: 1px 1px 2px rgba(0,0,0,.3); + font-weight: bold; + font-size: 25px; + margin-left: 90px; +} + +textarea:focus, input:focus { + border: 2px solid #900; +} + +.required{ +font-size:12pt; +} +.submit { +/* float:right; */ +text-align: center; +margin-top: 15px; +margin-left: 180px; +} +.field { +padding:2px; +} +.hint{ + display:none; + } +.field:hover .hint { + position: absolute; + display: block; + margin: -30px 0 0 455px; + color: #FFFFFF; + padding: 7px 10px; + background: rgba(0, 0, 0, 0.6); + + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + border-radius: 7px; + } + diff --git a/plugins/form/form.html b/plugins/form/form.html new file mode 100644 index 00000000..47b5e612 --- /dev/null +++ b/plugins/form/form.html @@ -0,0 +1,19 @@ +
+
+
+ + {% for c in columns %} +
+ + +

Enter {{c.description}}

+ {{err}} +
+ {% endfor %} + +
+
+ +
+ + diff --git a/plugins/form/form.js b/plugins/form/form.js new file mode 100644 index 00000000..d02779f4 --- /dev/null +++ b/plugins/form/form.js @@ -0,0 +1,23 @@ +// Jquery for the Registration page. /views/register/tmpl/deafult.php +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(); + } + }); + +}); diff --git a/plugins/form/jquery.validate.js b/plugins/form/jquery.validate.js new file mode 100644 index 00000000..2a12cb31 --- /dev/null +++ b/plugins/form/jquery.validate.js @@ -0,0 +1,1220 @@ +/** + * 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 = $("").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], + "Warning: No message defined for " + element.name + "" + ); + }, + + 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 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)); \ No newline at end of file diff --git a/plugins/wizard/__init__.py b/plugins/wizard/__init__.py new file mode 100644 index 00000000..74ea3a97 --- /dev/null +++ b/plugins/wizard/__init__.py @@ -0,0 +1,44 @@ +from unfold.composite import Composite +from unfold.plugin import Plugin + +class Wizard(Composite): + + def __init__(self, *args, **kwargs): + Composite.__init__(self, *args, **kwargs) + self.validate_step_js = [] + + # This, as well as the setting passing code, requires all step to be passed at init :/ + for i, son in enumerate(self.sons): + try: + js = son.get_validation_js() + js_name = "%s_validate_step_%d" % (self.domid.replace('-', '_'), i) + self.add_js_chunks(""" + %s = function() { + %s + } + """ % (js_name, js)) + except Exception, e: + js_name = 'null' + self.validate_step_js.append(js_name) + +# self.add_js_chunks(""" +# %s = function() { +# %s +# } +# """ % (js_name, js)) + + def export_json_settings(self): + # We need initialization, even though we are not associated with a query + return True + + def requirements (self): + #return { 'js_files' : ['js/wizard.js', 'js/jquery.smartWizard-2.0.min.js', ], + return { 'js_files' : ['js/wizard.js', 'js/jquery.smartWizard-2.0.js', ], + 'css_files' : ['css/wizard.css', 'css/smart_wizard.css', ] + } + + def template_file (self): + return "wizard.html" + + # the list of things passed to the js plugin + def json_settings_list (self): return ['plugin_uuid', 'start_step', 'validate_step_js'] diff --git a/plugins/wizard/test.html b/plugins/wizard/test.html new file mode 100644 index 00000000..7e8ba91b --- /dev/null +++ b/plugins/wizard/test.html @@ -0,0 +1,405 @@ + + + + + + +
+ + + + + +
+ + + + + +
+ + +

Step 1 Content

+ + +
    + + +
  • List 1
  • + + +
  • List 2
  • + + +
+ + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +
+ + +
+ + +

Step 2 Content

+ + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +
+ + +
+ + +

Step 3 Content

+ + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +
+ + +
+ + +

Step 4 Content

+ + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +

+ + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + + + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + + + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +

+ + +
+ + +
+ + + + + + + + +
+ + diff --git a/plugins/wizard/wizard.css b/plugins/wizard/wizard.css new file mode 100644 index 00000000..0c79c478 --- /dev/null +++ b/plugins/wizard/wizard.css @@ -0,0 +1,11 @@ +.swMain { + width: 100% !important; +} + +.swMain .stepContainer div.content { + width: 100% !important; +} + +.swMain .stepContainer { + overflow: scroll !important; +} diff --git a/plugins/wizard/wizard.html b/plugins/wizard/wizard.html new file mode 100644 index 00000000..3b6c300c --- /dev/null +++ b/plugins/wizard/wizard.html @@ -0,0 +1,21 @@ + +
+ + + {% for son in sons %} +
+

{{ son.title }}

+ {{son.rendered}} +
+ {% endfor %} +
+ diff --git a/plugins/wizard/wizard.js b/plugins/wizard/wizard.js new file mode 100644 index 00000000..b5001014 --- /dev/null +++ b/plugins/wizard/wizard.js @@ -0,0 +1,63 @@ +/** + * Description: implements a wizard-like interface + * Copyright (c) 2012 UPMC Sorbonne Universite + * License: GPLv3 + */ + +/* + * It's a best practice to pass jQuery to an IIFE (Immediately Invoked Function + * Expression) that maps it to the dollar sign so it can't be overwritten by + * another library in the scope of its execution. + */ + +(function($){ + // routing calls + $.fn.Wizard = function( method ) { + if ( methods[method] ) { + return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.Wizard' ); + } + }; + + /*************************************************************************** + * Public methods + ***************************************************************************/ + + var methods = { + + init : function ( options ) { + return this.each(function() { + var $this = $(this); + + // Initialize the smart-wizard third-party jquery plugin + $(wizard, this).smartWizard({ + selected : options.start_step - 1, + errorSteps : [5], + onLeaveStep : leaveAStepCallback, +// onFinish : onFinishCallback + }); + + // XXX Mark some steps as done ! + $(wizard, this).smartWizard('setDone',{stepnum: 1, isdone:true}); + + function leaveAStepCallback(obj){ + var step_num= obj.attr('rel')-1; // get the current step number + func = options.validate_step_js[step_num]; + if (func == 'null') + return true; + return window[func](); + } + + function onFinishCallback(){ + window.location.href('/'); + } + + + }); // this.each + } // init + + }; +})( jQuery ); diff --git a/portal/__init__.py b/portal/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/portal/img/account_validated.png b/portal/img/account_validated.png new file mode 100644 index 0000000000000000000000000000000000000000..12e5e9327dd7e1f5cd86eb41037c602e4988c981 GIT binary patch literal 6065 zcmV;i7f$GjP)002t}1^@s6I8J)%00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^000SaNLh0L002k;002k;M#*bF000)I zNkl0wF_yF`PMPoHHz5FlHMJb})lkyf2b%$=2FZw|d{+a<}^Ck9*(i z*HX7yTg%6!bgJJ~-TUfR{qFaD_0@N)p71)S-`jB^k?-fS#o~I;%U)m{v(gx+1rgNR z*xGnF3d7xgrTpR#o_cj`$I1f#(pPz1+A6QdO|Rd49)a(B`IgoTv$@<=-R;G<&@c?v|<+Q}&JUkqy1hk{z=q3MaS*St(Fe(>qnetluR`|^#%q3=5RmK|=k z@JDVo_nWTkF7u2^=vRru5Nl)9Dxio6VhoP!;bn6;uBUMv9So|~`+{ou?y2D;FXu|_ z`mLw;{`$bW?b^)*CX1s{uXS^Gm`wfy3O&=)6{5hW-~p;2CvJ{$9K38EHSqqFTrAPh%XLs?*`dy zA|D&aScO;>Yr%-%Is$s?_fTuGaRiRL0c4rR(Zh=IU+P;NSZ1+cq2P&a39S5AYjvxu z0U|SYNf0Duq?&%7PPP^s`ozk6RGjyy7~Xx=);A8UKf2)(LJPi?--;~n%1GQWjzYq# zZp*DIdZyW0G>$V?dB51G^>n24b%O;^%1SGNRoi0A zdDbpYpWMZ$G*KloIq=;n&8YuUKIhf+(HuFfKkG5q4i162F~k<<2Q zGQbkMNP4&^urz6Fm*a>hO=Yd6JX<%cWc%jTEM3-$>lsk!?rG)5>o(KXR^;*L_t8Hx zMcgDF()g1M3=7=7xL7u8QDB+GFhyw6Y*nSBwaE2XY~sQTdMUN!662-XfY8y^%C%Q* zWKC}uJ6}D*f&Nh@$~A&8CX8bIFd~SO;{@Iu(2~*BUo2O9QDCM07)OWz*L57O*tUV~ z+c)54-FbbgLdoTV3s zP%RRyGz|dLs+#NSXyKxZ){`ydu~ttw$#NVhwPz@`w;tmjC{Y+OJz3$^ef|98$=$qi zaOha>HQ>k_5!Ml)PnGW8WnFZ1c7Pb<6y^-llmWaPA=fo!Eq6D>X~|$BxiCtHf&tSTd&?q#&Z(MOa8s8=zuPg zgQi0dJai@0Z=aa>F$!}X5<6LtYlFJ^xh6_$v^VHkX)TJ_&+F)d;oPAe8OU;W0A$>mVM!naX|7c-o>Xa+vD zTkP4r_h&&E{UnSPaa?e`vzLua)sIlChf#eHl!u>Q92HztSoQR!uY6{@SSsBeTPcg< zoz`eLUsep0Qx#%szYXkMtZ2hIfpzzfo*`c-vi;I+j}(ffpJQCa@y<#%j)xyw9iJ@k z_x?g4}{oIO9r{VMU(=Xj!}CTy$gc)exY# zW(Q&%#JE4hai5@hzIVFWaUT}rydvhDJa6C}Nfv-O4u~^`>X#8Nhcl2aar59{%dkkM4TF%eI|!P;d^_u%5=Ay%!r+5iy&hsR2jhfK2;JOs1Gz&@5%i+gRe- z1i{z=tUoQKE$^gy=!tU<>UDvYjEYV{(H$tn)p7i&hTF0Xx7dwwvkgi%@`wbI>>-E)Nq<^bwbb&^W03XZ5^6#Q9A@nAr9GUvF4q z98A7tJ;uES<1jm)$O&y+=V9FcC~kJW7>CK1|L-}4b>h}3ww6CU=gp?ipqy zUs4|Y<(WksKDA5u^4`sK=6kj*Ew202lH%HrcjP)(eSY`SS=TM9Q~HIM8h*fPL2t`N z<&Uh75B6-z43f_n5IH3uJZY>_3oN_+PF``=?XJ2lUj)7Z90vICrc>+EUAuDhwqC_( zW!IZJ@>{=H%B;Ffu}t}UzdKTW{)3(=^&Oo$!Y3|WBv^O-@-T0G(+b8Ww0r-E+!Dro z5ZIz%j9Qk216(M5EYH-)dIpR+Av6I{OAy8!^|QRJD;e;X6N`f+?8Y3Z*< zi|{Vw#xFfaY;E3%ymQOiWp`}fu;%Jev#uY_T%&+z1G=LjRx(VFQ=!F8mU$Z^4Wpr| zgt1bN3`0?#KJ8}E?ICb-vl{Li$a^;KJ38>}<2(0#x#EZSw&XLTgX2{mzw?GU+xfS< z^8CT3U-I=m@4T+7aPb!$$!#94JVUHLpk$mjx(eI192~lLr1HWYo+KE7 zHKm+)S;lofDk8t5NO5^*E8Etuq_w4uYAD1_uMQOuwPbCLLR_Y(HL?V_SS*5%OGWaO zO_7?D$0m~0NX9_kReZn9%Ln_}+do1SMWJKlXSFc;ydTCtaEw%f$nw)WW}toYMTd87 zd61v%`Ow?D3)}xm#9cpJc?PQiGs>o9oenw+7wfct;A>;mT^~JTSl52;VTxH7Ka7{> zGVbkd`ONLPjI&~@7UM?>2>EP=^Lx8kzhWtlm!}qjJx1>qvR%y$bqr)(h{7rdjt=qa z;Sr`PHB=SPf%bw+6x;GdCHPL+kN&RWhfii)$3Aw)+xgoUi+tBZCpmEu0nY)~SbV?A;h{11A01<&Tx(jI6r-vLN-5`% z_Z+5cVgF>s|8g~qzSPt4TL1IWhxy1g>wdSVxb5?*cI9y8IjlzWt|&|v3YUnj|Krnw zb>*kOODUhl52MwEjCW^8Df@w}=eA8%L#m+#F&GhyF^HHHTC#Y^7(+`wOK*1z%RAdB z=JSZSL@LPwTxPcM7y(DXh$V_cCZ@~uk4|!QY?^W{L^WBlo2+5ASZh(Ws4CW4TnF0o z9wOMWvj6yW)&Fnre#f8oENR(%S7fWpN6IgvC%2@aU*OJDhV|yZ`yOEwJGqSa_Lh9+ z;~k~k&HY_6sNny=(O|sJ>kvPXO zIL0C44d8iusn(WJ^;adE0#s3EgHdanq$>SXn_i!sOUfh8TlsUY-S!%>4lq)AiF9~b zsLO{C{p0d<%R{Bo)X7hGuKDzLu+}cgW!z76w-#=59g{seUM04Qq;{#1=4*o-e=I@@ z6Ra9?-fLX2>TC40PBBsOc%|<;MklU8tpQD(ipG3oo?A4|DTqX@?fn^7U-TNG?PsL2 zCq22~4#9O%d;8xAD6ThZ?&rK&}0p(^^P8snWJoh za&X9chuO5|0akQOQH{oE&1YHGafDhpK)JdGYcr6p@k?OTk2GCQo}Np~g^+bCALGpz z9U#;rjFk7JBu^kwNriiW4_f5mI2QhV>p|coc77~)WOY&7Op$Y1*`98MQ1-pCZ1)gHo#P^pRAi>b$5i7-AtC36UD70?^j8o zrMR^IX#qjR=e(7Va^>cO)Z#;omiLm3lY;8}8RP|!+hfa591;HF;sXs9Cxmt7UEkv8 z_kWI6o3Hw?BHsESB3 z1uFZ)#2T=syGSnk5)agoTj4J+*>@a|c@6xIPu@>#tz$%P2U#mpA3c)Kx-Xyxn^Z_Vl6vgzKOx%3r1b9#uFcV_ngr3i{q0#esZs+eaHnDo0 z=T)v3ESLYyy>l{|Qw=Zw>w6Iq6ulMU=40(ns#J-(%`(*Wac1TmjjQWwST7O;C5k%< zq7vE6evB!jx{%7iv_DE52drDtN~!P?uJ;mamOsnJl~o3(Utyv;2n*E%jErt%=PNfe zU0wnbi=s!Xd=$4OSR;ZDV`Axn}D1PxzkMv{(gx-^cIAnamb z`2AG$Nlz6ivLB&$tD z^O8!E$_%hXvS?DR^jv)xW%{IqW?07nYmjPw2ud7h7#)8HHGc(N9p5CE*~`Lec``{D z9=(M9hklzNC;@Rg@M!a>bzpyOe|2qc?a9MRJD3#}x1mn;(M{5!UuR}v(vYs?&x|S_ z1E}%;#BC5HHHgi?l8#N6w-N;1bhbZ0srUp!e45abr!q8p83+4*iy$l{pz5)pw7;tA zEBe@cpyq{@Rx+u=lpuwMI*FvvX8a|jZj+8dJuA%yrm796wE?XzVd(=w!4H;jbm;xm zYQ40#{Se1YEufaOQ(_hzhDNUBaQ{09qdZ`n=8+BcI|}?g@GXF+{>v?M);Fi?u>7qz zqpE`_|ji=n0&Zs(6YU}ZX<#=8{#!M~fjn}ia z4nreXb9mrJ;yS2${fYVozz=~xQPr=Bh(8~wd13WGdM~|iyG2obMvx~2SqiKMTpH7t z*`VsM7KGGrWOY{IjC9Wa#fD^J3_-ArYV~}KnZ$L5fFz_d=VVwRwjM(xZ((5Y2I4rI z#KKb5Q#4k1PT}LgCq!g727U4`-@AaME|4z!@83kB&4~OPME*cTt~4SAsR!`V`Qc1J zZ|+b`^8~vQbvV|MZEjJM2-d+Wf{`+9EsxUH`WVJk=jei>>M}BVErTP!K^(h{P_wFr zs``Se{LDK!n;0ue&^B%0y@uF2sbuPuQGMDK`;B%d{@#Z+j2v3-qAv^=h-V&)0^EA*ttSubo_p@89~zP$ zmB<1)AnOR3tWkF?H0^t;&V_xxd-ZtiTv4%RU5F`J#5BUkbH%xuLO99IkDnqPmyQE9 zGY8Fhhv{hlKKa~kL}Fr_XJqVp#>TJ4sEKkCkF`6|u4P{I=!RVQ)DkZqi;*x^d}!oa zQw~VpaL);CR`Z%b2~Yx70c(LJKs(S16oHa~Jc1ioS|(z%VkmT%4u($qXzb>vt>gM? zj3o)|HOIDQ!Z=NHN@foe$B=3=ZOtQ?VpTBC6s6+RWW7Ob?L0NLjbXQ=mE~SA+T+H< zCC82$m{tfi0Z|2}fif^f^3w)`z(L>uFfkvn`9d@XXahC@JAm_m&J>6RJdIYwTof+_A_p6V{a}>qyl)1S*7T8qrFd{t$-DlBzl88mUCpoef77 zPb^tuDH&JWgE!F?huY!TsHL?WWkg+p9!;{f5Rv3K{j8>vG)=Pc{SfdZP)Wm(h z8B6;(o?bKW)N(#pHvRGoKp%+;wxqe3erD6}=SfsHllD|nc%}3j_X?EaOn@W%SSty%AnNFpqezUjfYa2k49Rwr45v3oIh~{=Qd3Ex)M3>j)+H-WuWMGzD7~)n+!i$O^Q9(u_3zAD z%rZ||9p<@AHU(hkC~uAv9Tzh?k;_m|{~wDr*g)rW+(7^U03~!qSaf7zbY(hYa%Ew3 zWdJfTF*7YNHZ3tQR536*H8?skHY+ePIxsM!hr%!b001R)MObuXVRU6WZEs|0W_bWI rFflPLF)=MNI8-q?IyE#pF*qwQF*-0XEP44K00000NkvXXu0mjfBL2wT literal 0 HcmV?d00001 diff --git a/portal/img/account_validated.png.olf b/portal/img/account_validated.png.olf new file mode 100644 index 0000000000000000000000000000000000000000..d2da4cf8aa400cc0786a5f0d9d334a2dac3068f5 GIT binary patch literal 20943 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 S4cRFG0000 +Your account has been validated! + +Delegation + +You will be redirected to the dashboard where you can get an overview of your user account, your slices, and the platforms you have access to. diff --git a/portal/tests.py b/portal/tests.py new file mode 100644 index 00000000..501deb77 --- /dev/null +++ b/portal/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/portal/urls.py b/portal/urls.py new file mode 100644 index 00000000..fcd4007d --- /dev/null +++ b/portal/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import patterns, url + +from portal import views + +urlpatterns = patterns('', + url(r'^$', views.index, name='index') +) diff --git a/portal/user-registration-step2.html b/portal/user-registration-step2.html new file mode 100644 index 00000000..28d0af96 --- /dev/null +++ b/portal/user-registration-step2.html @@ -0,0 +1 @@ +coucou diff --git a/portal/views.py b/portal/views.py new file mode 100644 index 00000000..4c4157e7 --- /dev/null +++ b/portal/views.py @@ -0,0 +1,86 @@ +from portal.portalpage import PortalPage +from plugins.wizard import Wizard +from plugins.form import CreateForm +from plugins.raw.raw import Raw # XXX + +from myslice.viewutils import the_user + +from django.template.loader import render_to_string +from django.template import RequestContext + +def index(request): + + WIZARD_TITLE = 'User registration' + STEP1_TITLE = 'Enter your details' + STEP2_TITLE = 'Select your institution' + STEP3_TITLE = 'Authentication' + STEP4_TITLE = 'Request a slice (optional)' + STEP5_TITLE = 'Waiting for validation' + STEP6_TITLE = 'Account validated' + + STEP0 = render_to_string('account_validated.html', context_instance=RequestContext(request)) + STEP2_HTML = """ + coucou + """ + STEP4 = """ + mede + """ + STEP5 = render_to_string('account_validated.html', context_instance=RequestContext(request)) + + p = PortalPage(request) + + # This is redundant with the Wizard title + p << "

User registration

" + + sons = [] + # STEP 1 + # If the user already exists (is logged), let's display a summary of his account details + # Otherwise propose a form to fill in + if the_user(request): + # Fill a disabled form with user info + # Please logout to register another user + sons.append(Raw(page=p, title=STEP1_TITLE, togglable=False, html=STEP0)) + else: + # XXX This should become local:user + sons.append(CreateForm(page = p, title = STEP1_TITLE, togglable = False, object = 'user')) + + # STEP 2 + # If the user already exists (is logged), let's display a summary of its institution + # Otherwise propose a form to fill in (we should base our selection on the email) + if the_user(request): + # Fill a disabled form with institution + # Please logout to register another user + sons.append(Raw(page=p, title=STEP2_TITLE, togglable=False, html="User created")) + else: + sons.append(CreateForm(page = p, title = STEP2_TITLE, togglable = False, object = 'institution')) + + # STEP3 + # Please should your prefered authentication method + # This step should allow the user to either choose the user or managed mode in MySlice + sons.append(Raw(page = p, title = STEP3_TITLE, togglable = False, html = STEP2_HTML)) + + # Step 4: Request a slice (optional) + sons.append(CreateForm(page = p, title = STEP4_TITLE, togglable = False, object = 'slice')) + + # Step 5: Your request is waiting for validation + # Periodic refresh + sons.append(Raw(page = p, title = STEP5_TITLE, togglable = False, html = STEP4)) + + # Step 6: Account validation = welcome for newly validated users + # . delegation + # . platforms + # . slice + # . pointers + sons.append(Raw(page = p, title = STEP6_TITLE, togglable = False, html = STEP5)) + + wizard = Wizard( + page = p, + title = WIZARD_TITLE, + togglable = False, + sons = sons, + start_step = 2, + ) + + p << wizard.render(request) # in portal page if possible + + return p.render() diff --git a/third-party/smartwizard-1636c86/images/loader.gif b/third-party/smartwizard-1636c86/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..7e717cdf9a61b88ba7b4d0777d513a3409b29117 GIT binary patch literal 4782 zcmZ|TdsI_bz6bD~lLz4>ArD^R0BI6JNCHG4iAFqVp5!5>AtaC@YCu4WXenCDFt#h4 zgpkmXLJAf-;2@%<$as-jhk85S2vpIsy3kr{dmTq9_S)8QsMpo8UA@yAXLWV%AJ_fo zUgxZ}&u9P6cdy?zn2MF_tJ6Rl_#S|tfBqQ&u)4Z>>(;HAnHdbjZr{E=GBV=#`)g}! zA3S)lxVU)v^5vD46_rZ$^Yiod_4P`na$sQK{{8!njg8l@ zUmqPE-MDe1PN!Q~Sa7*qHkC--+uerIor>E!Rk3U{sUM?vqX=-Zv=9_PZhK7Q{ z;MuchTUuIv`st_R$B*;*{759?^?JYh>Z?#FG&?(c`0(MbuC6m@&h+*52?PS6Q26lS z!*Dn}IXO8#K3-5zfFQ`k#KZ?5d~oyT&3pImjg5_6y?XW0qetI=|GnGomP(~87K=b2 zL_f2&wRL)Wn$2dnwY6QiaN&zDzIgoj@ws#7u3fu!OsOH37lLW?<5x^ zz`$`oB9gqrewwQ~W*VsYCg@8n+d?|FhgzLPcA5+Db(RT_^sSCHO!LNIJYVRAiRqXLg^Zm= z&oL8sz|u~~*G3~6SX;>?ccaks?)^HLX@F1j+D268sU|ufVMR0@RB>*cv1Nvgr?&y> zO6%28A}meal_Lp{!aRXfL>2SiF-HVk`upqxX)mQXG}WYD9lb)OISB&EsnM@V#|mlO zPp1}_5>o`*({RllIQxEGTn*cOw+qrz%|pb9N97koC7~+jNc(xL-H``|y%_`&v3#<% zYRVNkIm|l=tk$C!3h-3H%6>0y5mKYbw|LcubM+=!1Kg6|fz9G}zf3EfcDyv|KDjd$ zCj0^nJq`Ft9SgEU0hYoW+vwF0!We5850gEgrN@#>wL<_+sqAN^ryIbUyxr^xP*fR< zCM4}Hqcv@a4dH_rrLti?LYC`9dkU2vJjch2m%EP1`A)BpJYZ)uS)T1Ij?cBZF8QRy zdW&Umz*Uzkmj(n6-fPzB=lhGL7UyO=Q47aU{3CI>^vjDx*1GLRGvD2LQNT+5Y2j22 z5u=5BTC09=TNC3ANoo7-nWnIW#Y`7}O4eF*LZ^4&;k!NV6n&3?&w?&mIRRUa1p2fG zmq$3x2JT~CNJAfkRM?RP>ah+#TeUf#geTfd{Hu9K)LNFBjuy_^GJJr@K}F-ExXqp_ zDLOv_sUjE=0*gx#XTO^#djma389ASLI^5+?6{w*jq#gU1eA{yhe*gak#yefXKnuBm~VQENCmpM0BKsd}BMcf0#3 zvDCtcOU+4c@E`2d*j1Ho37_L6Wk>!9&%LkKjWcYkV z%c9Jhm{35c@UAP6dRz%%Ovoo-u#FJ}Yq*qQ;7DFq2Jm%t6+p{Oj5-st<*+kelnEtP z7KLbH2PT%U+hk9c=(avr`5rJ*v_7XRCsPcplFtt(3jmV6YxmYp15c@>z>7XQIX&(G zIbbJyryg>dZ?1cZuh7g!bVpw$bxff<#KC@W(rXkGpjww(3*&-x%px zE?HXR?IVOl9H?jCyVn~7NR74!O6E>uJ2<#TF)%)=QnNVj4HEx%nJGypP4$baWh{pE z#}if7D^{%W+ZPh)

1{L{2FTP3wkmUW`HJ!SAg(4HZ=`*h1Tgm*! zFBHwM_QW#Z%xR1$&HVFrz988q*Ng&>(qQ+M@N8BqOTtRZagAK=?NU^KGtvuDRAHP! zSJ3cz!`xeO&)?+E6pI3Ycs6Ztm3u^eG)CB?Y&;(+g>#U_%xPR_Fla(X-io|Th6dA{ z3(_Pl#LYI4^!{`qfZPP~3s$T(UjSmy#poZF-#L$Wv$8BTWLsXQ?xGfcxbensU-zeF z?K^;5IPooRM}5rDz>6aBrQmB)!m8+T^5qEuO#UvjFC)C7Hujyfj2$@hSJf|>OnM43 z%8nveP(uO8?p0`|9u5-5jO9bXK~O@NqJT7vamsZ7R`O`Tu&xL_0T6`(f_PS0bQd%s zHcUVKCk{IyL9bbtjmJz*iciMLw8NmH?6k+8x)IVjGCDbMX_TyM^{ zbw+%!=tl@F$c$qNz3wK%A{=M(z()p z(j(R}M#0h2eu1N4J<`0=)n4VPa*1Y78DY~VYo9p7_mQGIeb>SLkBCHqm>4%8T3N>F zOk&c2@f5X}QrF$;S1yZU=>in_LG@+5mOo}p;hCp-?T2#YZ7g#*Xb@(u3&$;gw{u=9 z&7E$_x9h)k7g@?5kKGPyF_@C}J+3vf`CFdYGBm}7vR;RAyV6FMh`|3w7NCMFckq#f zn1jeJR>sOvdY^+b#(>%l?{Y;u*zuz{&4E#VMbo#!U#ZDYp{AozY8opP zFp|6o#pDs{!WbRFdstK$BWZ=h7#^VkdL~s5#QBQggxHC|bP82QFH=xLCX*C%IGs9^ zv*K)d{z>3~g_pcWnOC-rl1F{xJ8?IK$2+NPX|KK| zpdVuuIUlRSu@W89lRAI2Mvn_?{7!X7XOA80aZZY2V<4nRdT_9GK|g2F*Dv1d_xn>1 z1rnD0*Y4>#S-Hsn3@m9DHfy&IiMDt?>VfiXl_fK-o~7ih-<+l5n&&7MHN3qw_P_Aw z38_9bFH+~G4aJLX_7&&q-4ZXu)0MWqt)U|>-Id_|`oEXYlXG`EaLP}E0w#yf|ECG-JDOW~@EFj)$a^NSYTdG0e`b&N*Yhv-Da_I*6%E@% z0lL^rLQEd9FpNoM{g@pI0vU%kjIs6oQObUpLO~}0q}Lni2*L)L6hnyakRJYn%tRBS zBr4^dXz!t4@H!wA9fZU;uzzC#6H->b;xnN}6ms}YPK6>rGw{WOZbN=P5}rUC=I1Wgvd+m5Hqx{h7!O5Jn_;x75N9AbcAYpkNh6Ku?x z;WBC#@Ey;?6{_Z?tGA(8lGb|K#q+az+XF#mb41gANag|yqIZ{*+{_m~D484~<{T=h zqmD0^zD=Bt$>m2Ynuq^ObcOTrI(&D%nnhL$6OJz4*P*SqZsm#?zoZBJ|6BV^fncXm z)*X=VfpP#1mJ)^@ruvUNi3?NbK{E^%Wkn>D$Jx%3kY^kv)!uAZyai=nlZ{5|)LN4$Az={VzY z{@9&h)uXtg8?$+(EI1}5{Yp)>&Z0GFydq{VqoXh`O&7uZog_%9u_`6^$enSC(;tdd z-X2I)#S!#IAegAF*fB|E^o^Bxsp40g2MhG`T?oc;Rv zxfuPQYl9J7gwUP1Z++27#@$c4nN-3yX6YO8zO-r3G~jae_^ywW`>h4**YO0%L5ktm z7@<7HoE|lIK-~e_c8A9V^<%I1Vy2hV2O*{a(Z#_6gIg%2IkWF~}9mHV@3x3Z{b_v}|CP_b*LQU%HQQdWhQ}=zN zY<+`k!_z4`vr#<`_llJw-EygbC@i+3d2QTwUIu>qv}(M=Zw|7ZtZhf))gKWg{;(@h zno%74lDA|g!2Ph35}Pe|>svm&{6ThEwXZL4o;&YWud6)G#pW(1NUY7S?taX#*H&CU z9l0|a1Bt-oZMJRdiZ52au+6CkDmaaYjI?o!FUd2=$H@rz3YJilgOID8%LjNvQ{ve$ YJ_r2e?1`D{TYj=~!G + + +Smart Wizard 2 - Basic Example - a javascript jQuery wizard control plugin + + + + + + + + + + + +
+ +
+ +
+

Step 1 Content

+
    +
  • List 1
  • +
  • List 2
  • +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 2 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 3 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 4 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ + +
+ + + diff --git a/third-party/smartwizard-1636c86/js/jquery-1.4.2.min.js b/third-party/smartwizard-1636c86/js/jquery-1.4.2.min.js new file mode 100644 index 00000000..7c243080 --- /dev/null +++ b/third-party/smartwizard-1636c86/js/jquery-1.4.2.min.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.js b/third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.js new file mode 100644 index 00000000..813568b4 --- /dev/null +++ b/third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.js @@ -0,0 +1,358 @@ +/* + * SmartWizard 2.0 plugin + * jQuery Wizard control Plugin + * by Dipu + * + * http://www.techlaboratory.net + * http://tech-laboratory.blogspot.com + */ + +(function($){ + $.fn.smartWizard = function(action) { + var options = $.extend({}, $.fn.smartWizard.defaults, action); + var args = arguments; + + return this.each(function(){ + var obj = $(this); + var curStepIdx = options.selected; + var steps = $("ul > li > a[href^='#step-']", obj); // Get all anchors in this array + var contentWidth = 0; + var loader,msgBox,elmActionBar,elmStepContainer,btNext,btPrevious,btFinish; + + elmActionBar = $('.actionBar',obj); + if(elmActionBar.length == 0){ + elmActionBar = $('
').addClass("actionBar"); + } + + msgBox = $('.msgBox',obj); + if(msgBox.length == 0){ + msgBox = $(''); + elmActionBar.append(msgBox); + } + + $('.close',msgBox).click(function() { + msgBox.fadeOut("normal"); + return false; + }); + + + // Method calling logic + if (!action || action === 'init' || typeof action === 'object') { + init(); + }else if (action === 'showMessage') { + //showMessage(Array.prototype.slice.call( args, 1 )); + var ar = Array.prototype.slice.call( args, 1 ); + showMessage(ar[0]); + return true; + }else if (action === 'setError') { + var ar = Array.prototype.slice.call( args, 1 ); + setError(ar[0].stepnum,ar[0].iserror); + return true; + }else if (action === 'setDone') { + var ar = Array.prototype.slice.call( args, 1 ); + setDone(ar[0].stepnum,ar[0].isdone); + return true; + } else { + $.error( 'Method ' + action + ' does not exist' ); + } + + function init(){ + var allDivs =obj.children('div'); //$("div", obj); + obj.children('ul').addClass("anchor"); + allDivs.addClass("content"); + // Create Elements + loader = $('
Loading
').addClass("loader"); + elmActionBar = $('
').addClass("actionBar"); + elmStepContainer = $('
').addClass("stepContainer"); + btNext = $(''+options.labelNext+'').attr("href","#").addClass("buttonNext"); + btPrevious = $(''+options.labelPrevious+'').attr("href","#").addClass("buttonPrevious"); + btFinish = $(''+options.labelFinish+'').attr("href","#").addClass("buttonFinish"); + + // highlight steps with errors + if(options.errorSteps && options.errorSteps.length>0){ + $.each(options.errorSteps, function(i, n){ + setError(n,true); + }); + } + + + elmStepContainer.append(allDivs); + elmActionBar.append(loader); + obj.append(elmStepContainer); + obj.append(elmActionBar); + if (options.includeFinishButton) { + elmActionBar.append(btFinish); + } + elmActionBar.append(btNext).append(btPrevious); + contentWidth = elmStepContainer.width(); + + $(btNext).click(function() { + if($(this).hasClass('buttonDisabled')){ + return false; + } + doForwardProgress(); + return false; + }); + $(btPrevious).click(function() { + if($(this).hasClass('buttonDisabled')){ + return false; + } + doBackwardProgress(); + return false; + }); + $(btFinish).click(function() { + if(!$(this).hasClass('buttonDisabled')){ + if($.isFunction(options.onFinish)) { + if(!options.onFinish.call(this,$(steps))){ + return false; + } + }else{ + var frm = obj.parents('form'); + if(frm && frm.length){ + frm.submit(); + } + } + } + + return false; + }); + + $(steps).bind("click", function(e){ + if(steps.index(this) == curStepIdx){ + return false; + } + var nextStepIdx = steps.index(this); + var isDone = steps.eq(nextStepIdx).attr("isDone") - 0; + if(isDone == 1){ + LoadContent(nextStepIdx); + } + return false; + }); + + // Enable keyboard navigation + if(options.keyNavigation){ + $(document).keyup(function(e){ + if(e.which==39){ // Right Arrow + doForwardProgress(); + }else if(e.which==37){ // Left Arrow + doBackwardProgress(); + } + }); + } + // Prepare the steps + prepareSteps(); + // Show the first slected step + LoadContent(curStepIdx); + } + + function prepareSteps(){ + if(!options.enableAllSteps){ + $(steps, obj).removeClass("selected").removeClass("done").addClass("disabled"); + $(steps, obj).attr("isDone",0); + }else{ + $(steps, obj).removeClass("selected").removeClass("disabled").addClass("done"); + $(steps, obj).attr("isDone",1); + } + + $(steps, obj).each(function(i){ + $($(this).attr("href"), obj).hide(); + $(this).attr("rel",i+1); + }); + } + + function LoadContent(stepIdx){ + var selStep = steps.eq(stepIdx); + var ajaxurl = options.contentURL; + var hasContent = selStep.data('hasContent'); + stepNum = stepIdx+1; + if(ajaxurl && ajaxurl.length>0){ + if(options.contentCache && hasContent){ + showStep(stepIdx); + }else{ + $.ajax({ + url: ajaxurl, + type: "POST", + data: ({step_number : stepNum}), + dataType: "text", + beforeSend: function(){ loader.show(); }, + error: function(){loader.hide();}, + success: function(res){ + loader.hide(); + if(res && res.length>0){ + selStep.data('hasContent',true); + $($(selStep, obj).attr("href"), obj).html(res); + showStep(stepIdx); + } + } + }); + } + }else{ + showStep(stepIdx); + } + } + + function showStep(stepIdx){ + var selStep = steps.eq(stepIdx); + var curStep = steps.eq(curStepIdx); + if(stepIdx != curStepIdx){ + if($.isFunction(options.onLeaveStep)) { + if(!options.onLeaveStep.call(this,$(curStep))){ + return false; + } + } + } + if (options.updateHeight) + elmStepContainer.height($($(selStep, obj).attr("href"), obj).outerHeight()); + if(options.transitionEffect == 'slide'){ + $($(curStep, obj).attr("href"), obj).slideUp("fast",function(e){ + $($(selStep, obj).attr("href"), obj).slideDown("fast"); + curStepIdx = stepIdx; + SetupStep(curStep,selStep); + }); + } else if(options.transitionEffect == 'fade'){ + $($(curStep, obj).attr("href"), obj).fadeOut("fast",function(e){ + $($(selStep, obj).attr("href"), obj).fadeIn("fast"); + curStepIdx = stepIdx; + SetupStep(curStep,selStep); + }); + } else if(options.transitionEffect == 'slideleft'){ + var nextElmLeft = 0; + var curElementLeft = 0; + if(stepIdx > curStepIdx){ + nextElmLeft1 = contentWidth + 10; + nextElmLeft2 = 0; + curElementLeft = 0 - $($(curStep, obj).attr("href"), obj).outerWidth(); + } else { + nextElmLeft1 = 0 - $($(selStep, obj).attr("href"), obj).outerWidth() + 20; + nextElmLeft2 = 0; + curElementLeft = 10 + $($(curStep, obj).attr("href"), obj).outerWidth(); + } + if(stepIdx == curStepIdx){ + nextElmLeft1 = $($(selStep, obj).attr("href"), obj).outerWidth() + 20; + nextElmLeft2 = 0; + curElementLeft = 0 - $($(curStep, obj).attr("href"), obj).outerWidth(); + }else{ + $($(curStep, obj).attr("href"), obj).animate({left:curElementLeft},"fast",function(e){ + $($(curStep, obj).attr("href"), obj).hide(); + }); + } + + $($(selStep, obj).attr("href"), obj).css("left",nextElmLeft1); + $($(selStep, obj).attr("href"), obj).show(); + $($(selStep, obj).attr("href"), obj).animate({left:nextElmLeft2},"fast",function(e){ + curStepIdx = stepIdx; + SetupStep(curStep,selStep); + }); + } else{ + $($(curStep, obj).attr("href"), obj).hide(); + $($(selStep, obj).attr("href"), obj).show(); + curStepIdx = stepIdx; + SetupStep(curStep,selStep); + } + return true; + } + + function SetupStep(curStep,selStep){ + $(curStep, obj).removeClass("selected"); + $(curStep, obj).addClass("done"); + + $(selStep, obj).removeClass("disabled"); + $(selStep, obj).removeClass("done"); + $(selStep, obj).addClass("selected"); + $(selStep, obj).attr("isDone",1); + adjustButton(); + if($.isFunction(options.onShowStep)) { + if(!options.onShowStep.call(this,$(selStep))){ + return false; + } + } + } + + function doForwardProgress(){ + var nextStepIdx = curStepIdx + 1; + if(steps.length <= nextStepIdx){ + if(!options.cycleSteps){ + return false; + } + nextStepIdx = 0; + } + LoadContent(nextStepIdx); + } + + function doBackwardProgress(){ + var nextStepIdx = curStepIdx-1; + if(0 > nextStepIdx){ + if(!options.cycleSteps){ + return false; + } + nextStepIdx = steps.length - 1; + } + LoadContent(nextStepIdx); + } + + function adjustButton(){ + if(!options.cycleSteps){ + if(0 >= curStepIdx){ + $(btPrevious).addClass("buttonDisabled"); + }else{ + $(btPrevious).removeClass("buttonDisabled"); + } + if((steps.length-1) <= curStepIdx){ + $(btNext).addClass("buttonDisabled"); + }else{ + $(btNext).removeClass("buttonDisabled"); + } + } + // Finish Button + if(!steps.hasClass('disabled') || options.enableFinishButton){ + $(btFinish).removeClass("buttonDisabled"); + }else{ + $(btFinish).addClass("buttonDisabled"); + } + } + + function showMessage(msg){ + $('.content',msgBox).html(msg); + msgBox.show(); + } + + function setError(stepnum,iserror){ + if(iserror){ + $(steps.eq(stepnum-1), obj).addClass('error') + }else{ + $(steps.eq(stepnum-1), obj).removeClass("error"); + } + } + + function setDone(stepnum,isdone){ + if(isdone){ + $(steps.eq(stepnum-1), obj).removeClass("selected").removeClass("disabled").addClass('done') + }else{ + $(steps.eq(stepnum-1), obj).removeClass("done"); + } + } + }); + }; + + // Default Properties and Events + $.fn.smartWizard.defaults = { + selected: 0, // Selected Step, 0 = first step + keyNavigation: true, // Enable/Disable key navigation(left and right keys are used if enabled) + enableAllSteps: false, + updateHeight: true, + transitionEffect: 'fade', // Effect on navigation, none/fade/slide/slideleft + contentURL:null, // content url, Enables Ajax content loading + contentCache:true, // cache step contents, if false content is fetched always from ajax url + cycleSteps: false, // cycle step navigation + includeFinishButton: true, // whether to show a Finish button + enableFinishButton: false, // make finish button enabled always + errorSteps:[], // Array Steps with errors + labelNext:'Next', + labelPrevious:'Previous', + labelFinish:'Finish', + onLeaveStep: null, // triggers when leaving a step + onShowStep: null, // triggers when showing a step + onFinish: null // triggers when Finish button is clicked + }; + +})(jQuery); diff --git a/third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.min.js b/third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.min.js new file mode 100644 index 00000000..bada94d4 --- /dev/null +++ b/third-party/smartwizard-1636c86/js/jquery.smartWizard-2.0.min.js @@ -0,0 +1,10 @@ +(function(a){a.fn.smartWizard=function(k){var c=a.extend({},a.fn.smartWizard.defaults,k),u=arguments;return this.each(function(){function z(){var d=b.children("div");b.children("ul").addClass("anchor");d.addClass("content");l=a("
Loading
").addClass("loader");i=a("
").addClass("actionBar");m=a("
").addClass("stepContainer");n=a(""+c.labelNext+"").attr("href","#").addClass("buttonNext");o=a(""+c.labelPrevious+"").attr("href","#").addClass("buttonPrevious"); +p=a(""+c.labelFinish+"").attr("href","#").addClass("buttonFinish");c.errorSteps&&c.errorSteps.length>0&&a.each(c.errorSteps,function(a,b){v(b,!0)});m.append(d);i.append(l);b.append(m);b.append(i);i.append(p).append(n).append(o);w=m.width();a(n).click(function(){x();return!1});a(o).click(function(){y();return!1});a(p).click(function(){if(!a(this).hasClass("buttonDisabled"))if(a.isFunction(c.onFinish))c.onFinish.call(this,a(f));else{var d=b.parents("form");d&&d.length&&d.submit()}return!1}); +a(f).bind("click",function(){if(f.index(this)==h)return!1;var a=f.index(this);f.eq(a).attr("isDone")-0==1&&q(a);return!1});c.keyNavigation&&a(document).keyup(function(a){a.which==39?x():a.which==37&&y()});A();q(h)}function A(){c.enableAllSteps?(a(f,b).removeClass("selected").removeClass("disabled").addClass("done"),a(f,b).attr("isDone",1)):(a(f,b).removeClass("selected").removeClass("done").addClass("disabled"),a(f,b).attr("isDone",0));a(f,b).each(function(d){a(a(this).attr("href"),b).hide();a(this).attr("rel", +d+1)})}function q(d){var e=f.eq(d),g=c.contentURL,h=e.data("hasContent");stepNum=d+1;g&&g.length>0?c.contentCache&&h?t(d):a.ajax({url:g,type:"POST",data:{step_number:stepNum},dataType:"text",beforeSend:function(){l.show()},error:function(){l.hide()},success:function(c){l.hide();c&&c.length>0&&(e.data("hasContent",!0),a(a(e,b).attr("href"),b).html(c),t(d))}}):t(d)}function t(d){var e=f.eq(d),g=f.eq(h);if(d!=h&&a.isFunction(c.onLeaveStep)&&!c.onLeaveStep.call(this,a(g)))return!1;m.height(a(a(e,b).attr("href"), +b).outerHeight());if(c.transitionEffect=="slide")a(a(g,b).attr("href"),b).slideUp("fast",function(){a(a(e,b).attr("href"),b).slideDown("fast");h=d;r(g,e)});else if(c.transitionEffect=="fade")a(a(g,b).attr("href"),b).fadeOut("fast",function(){a(a(e,b).attr("href"),b).fadeIn("fast");h=d;r(g,e)});else if(c.transitionEffect=="slideleft"){var i=0;d>h?(nextElmLeft1=w+10,nextElmLeft2=0,i=0-a(a(g,b).attr("href"),b).outerWidth()):(nextElmLeft1=0-a(a(e,b).attr("href"),b).outerWidth()+20,nextElmLeft2=0,i=10+ +a(a(g,b).attr("href"),b).outerWidth());d==h?(nextElmLeft1=a(a(e,b).attr("href"),b).outerWidth()+20,nextElmLeft2=0,i=0-a(a(g,b).attr("href"),b).outerWidth()):a(a(g,b).attr("href"),b).animate({left:i},"fast",function(){a(a(g,b).attr("href"),b).hide()});a(a(e,b).attr("href"),b).css("left",nextElmLeft1);a(a(e,b).attr("href"),b).show();a(a(e,b).attr("href"),b).animate({left:nextElmLeft2},"fast",function(){h=d;r(g,e)})}else a(a(g,b).attr("href"),b).hide(),a(a(e,b).attr("href"),b).show(),h=d,r(g,e);return!0} +function r(d,e){a(d,b).removeClass("selected");a(d,b).addClass("done");a(e,b).removeClass("disabled");a(e,b).removeClass("done");a(e,b).addClass("selected");a(e,b).attr("isDone",1);c.cycleSteps||(0>=h?a(o).addClass("buttonDisabled"):a(o).removeClass("buttonDisabled"),f.length-1<=h?a(n).addClass("buttonDisabled"):a(n).removeClass("buttonDisabled"));!f.hasClass("disabled")||c.enableFinishButton?a(p).removeClass("buttonDisabled"):a(p).addClass("buttonDisabled");if(a.isFunction(c.onShowStep)&&!c.onShowStep.call(this, +a(e)))return!1}function x(){var a=h+1;if(f.length<=a){if(!c.cycleSteps)return!1;a=0}q(a)}function y(){var a=h-1;if(0>a){if(!c.cycleSteps)return!1;a=f.length-1}q(a)}function B(b){a(".content",j).html(b);j.show()}function v(d,c){c?a(f.eq(d-1),b).addClass("error"):a(f.eq(d-1),b).removeClass("error")}var b=a(this),h=c.selected,f=a("ul > li > a",b),w=0,l,j,i,m,n,o,p;i=a(".actionBar",b);i.length==0&&(i=a("
").addClass("actionBar"));j=a(".msgBox",b);j.length==0&&(j=a(''), +i.append(j));a(".close",j).click(function(){j.fadeOut("normal");return!1});if(!k||k==="init"||typeof k==="object")z();else if(k==="showMessage"){var s=Array.prototype.slice.call(u,1);B(s[0]);return!0}else if(k==="setError")return s=Array.prototype.slice.call(u,1),v(s[0].stepnum,s[0].iserror),!0;else a.error("Method "+k+" does not exist")})};a.fn.smartWizard.defaults={selected:0,keyNavigation:!0,enableAllSteps:!1,transitionEffect:"fade",contentURL:null,contentCache:!0,cycleSteps:!1,enableFinishButton:!1, +errorSteps:[],labelNext:"Next",labelPrevious:"Previous",labelFinish:"Finish",onLeaveStep:null,onShowStep:null,onFinish:null}})(jQuery); \ No newline at end of file diff --git a/third-party/smartwizard-1636c86/readme.md b/third-party/smartwizard-1636c86/readme.md new file mode 100644 index 00000000..fe5aeb02 --- /dev/null +++ b/third-party/smartwizard-1636c86/readme.md @@ -0,0 +1,34 @@ +Overview +-------- +Smart Wizard is a flexible jQuery plug-in for wizard like interface. +It allows to group contents into sections and so it saves page space and also gives a neat and stylish interface for users. + +Demos +----- +[Basic Example](http://techlaboratory.net/labs/SmartWizard2/index.htm) +[Ajax Contents](http://techlaboratory.net/labs/SmartWizard2/smartwizard2-ajax.htm) +[Step Validation](http://techlaboratory.net/labs/SmartWizard2/smartwizard2-validation.php) +[Multiple Wizard](http://techlaboratory.net/labs/SmartWizard2/smartwizard2-multiple.htm) +[Vertical Style](http://techlaboratory.net/labs/SmartWizard2/smartwizard2-vertical.htm) + +Features +-------- + Easy to implement, Minimal HTML required. + Ajax contents loading option. + Cool animation effects on step navigation. (none/fade/slide/slideleft) + Keyboard navigation option. + Horizontal and vertical style step anchors. + Easy step input validation option + Option to highlight error steps + In-built message box + Easy navigation with step anchors and navigation buttons + Can have multiple wizards on same page + Option to enable all steps on first load + +License +------- +Free to use and modify on both personal and commercial environment + +Creative Commons License +Licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License.](http://creativecommons.org/licenses/by-sa/3.0/) + \ No newline at end of file diff --git a/third-party/smartwizard-1636c86/services/service.php b/third-party/smartwizard-1636c86/services/service.php new file mode 100644 index 00000000..576c99dc --- /dev/null +++ b/third-party/smartwizard-1636c86/services/service.php @@ -0,0 +1,65 @@ +Step '.$step_number.' Content'; + if($step_number == 1){ + $html .='

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

'; + }elseif($step_number == 2){ + $html .='

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

'; + }elseif($step_number == 3){ + $html .='

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

'; + }else{ + $html .='

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

'; + } + echo $html; + } + +?> \ No newline at end of file diff --git a/third-party/smartwizard-1636c86/smartwizard2-ajax.htm b/third-party/smartwizard-1636c86/smartwizard2-ajax.htm new file mode 100644 index 00000000..9ce8928c --- /dev/null +++ b/third-party/smartwizard-1636c86/smartwizard2-ajax.htm @@ -0,0 +1,158 @@ + + + +Smart Wizard 2 - Ajax Contents Example - a javascript jQuery wizard control plugin + + + + + + + + + + +
+ +
+ +
+

Step 1 Content

+
    +
  • List 1
  • +
  • List 2
  • +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 2 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 3 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 4 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ + +
+ + diff --git a/third-party/smartwizard-1636c86/smartwizard2-multiple.htm b/third-party/smartwizard-1636c86/smartwizard2-multiple.htm new file mode 100644 index 00000000..0ec78160 --- /dev/null +++ b/third-party/smartwizard-1636c86/smartwizard2-multiple.htm @@ -0,0 +1,294 @@ + + + +Smart Wizard 2 - Multiple Wizard Example - a javascript jQuery wizard control plugin + + + + + + + + + + + +
+

Wizard 1

+ +
+ +
+

Step 1 Content

+
    +
  • List 1
  • +
  • List 2
  • +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 2 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 3 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 4 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ +
  +

Wizard 2

+ + +
+ +
+

Step 1 Content

+
    +
  • List 1
  • +
  • List 2
  • +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 2 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 3 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 4 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ + +
+ + diff --git a/third-party/smartwizard-1636c86/smartwizard2-validation.php b/third-party/smartwizard-1636c86/smartwizard2-validation.php new file mode 100644 index 00000000..9e5a4436 --- /dev/null +++ b/third-party/smartwizard-1636c86/smartwizard2-validation.php @@ -0,0 +1,312 @@ + + + +Smart Wizard 2 - Step Validation Example - a javascript jQuery wizard control plugin + + + + + + + + + + +
+form is sumbitted"; + } + +?> + +
+ + +
+ +
+

Step 1: Account Details

+ + + + + + + + + + + + + + + + + + + +
 
Username : + +  
Password : + +  
Confirm Password : + +  
+
+
+

Step 2: Profile Details

+ + + + + + + + + + + + + + + + + + + +
 
First Name : + +  
Last Name : + +  
Gender : + +  
+
+
+

Step 3: Contact Details

+ + + + + + + + + + + + + + + + + + + +
 
Email : + +  
Phone : + +  
Address : + +  
+
+
+

Step 4: Other Details

+ + + + + + + + + + + + + + +
 
Hobbies : + +  
About You : + +  
+
+
+ +
+ +
+ + + diff --git a/third-party/smartwizard-1636c86/smartwizard2-vertical.htm b/third-party/smartwizard-1636c86/smartwizard2-vertical.htm new file mode 100644 index 00000000..99295cb6 --- /dev/null +++ b/third-party/smartwizard-1636c86/smartwizard2-vertical.htm @@ -0,0 +1,165 @@ + + + +Smart Wizard 2 - Vertical Style Example - a javascript jQuery wizard control plugin + + + + + + + + + + + +
+ +
+ +
+

Step 1 Content

+
    +
  • List 1
  • +
  • List 2
  • +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 2 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 3 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+

Step 4 Content

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ + + +
+ + + diff --git a/third-party/smartwizard-1636c86/styles/smart_wizard.css b/third-party/smartwizard-1636c86/styles/smart_wizard.css new file mode 100644 index 00000000..94e4da82 --- /dev/null +++ b/third-party/smartwizard-1636c86/styles/smart_wizard.css @@ -0,0 +1,305 @@ +/* + SmartWizard 2.0 plugin + jQuery Wizard control Plugin + by Dipu + + http://www.techlaboratory.net + http://tech-laboratory.blogspot.com +*/ +.swMain { + position:relative; + display:block; + margin:0; + padding:0; + border: 0px solid #CCC; + overflow:visible; + float:left; + width:980px; +} +.swMain .stepContainer { + display:block; + position: relative; + margin: 0; + padding:0; + border: 0px solid #CCC; + overflow:hidden; + clear:both; + height:300px; +} + +.swMain .stepContainer div.content { + display:block; + position: absolute; + float:left; + margin: 0; + padding:5px; + border: 1px solid #CCC; + font: normal 12px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + background-color:#F8F8F8; + height:300px; + text-align:left; + overflow:visible; + z-index:88; + -webkit-border-radius: 5px; + -moz-border-radius : 5px; + width:968px; + clear:both; +} + +.swMain div.actionBar { + display:block; + position: relative; + clear:both; + margin: 3px 0 0 0; + border: 1px solid #CCC; + padding: 0; + color: #5A5655; + background-color: #F8F8F8; + height:40px; + text-align:left; + overflow:auto; + z-index:88; + + -webkit-border-radius: 5px; + -moz-border-radius : 5px; + left:0; +} + +.swMain .stepContainer .StepTitle { + display:block; + position: relative; + margin:0; + border:1px solid #E0E0E0; + padding:5px; + font: bold 16px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + background-color:#E0E0E0; + clear:both; + text-align:left; + z-index:88; + -webkit-border-radius: 5px; + -moz-border-radius : 5px; +} +.swMain ul.anchor { + position: relative; + display:block; + float:left; + list-style: none; + padding: 0px; + margin: 10px 0; + clear: both; + border: 0px solid #CCCCCC; + background: transparent; /*#EEEEEE */ +} +.swMain ul.anchor li{ + position: relative; + display:block; + margin: 0; + padding: 0; + padding-left:3px; + padding-right: 3px; + border: 0px solid #E0E0E0; + float: left; +} +/* Anchor Element Style */ +.swMain ul.anchor li a { + display:block; + position:relative; + float:left; + margin:0; + padding:3px; + height:60px; + width:230px; + text-decoration: none; + outline-style:none; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; + z-index:99; +} +.swMain ul.anchor li a .stepNumber{ + position:relative; + float:left; + width:30px; + text-align: center; + padding:5px; + padding-top:0; + font: bold 45px Verdana, Arial, Helvetica, sans-serif; +} +.swMain ul.anchor li a .stepDesc{ + position:relative; + display:block; + float:left; + text-align: left; + padding:5px; + + font: bold 20px Verdana, Arial, Helvetica, sans-serif; +} +.swMain ul.anchor li a .stepDesc small{ + font: normal 12px Verdana, Arial, Helvetica, sans-serif; +} +.swMain ul.anchor li a.selected{ + color:#F8F8F8; + background: #EA8511; /* EA8511 */ + border: 1px solid #EA8511; + cursor:text; + -moz-box-shadow: 5px 5px 8px #888; + -webkit-box-shadow: 5px 5px 8px #888; + box-shadow: 5px 5px 8px #888; +} +.swMain ul.anchor li a.selected:hover { + color:#F8F8F8; + background: #EA8511; +} + +.swMain ul.anchor li a.done { + position:relative; + color:#FFF; + background: #8CC63F; + border: 1px solid #8CC63F; + z-index:99; +} +.swMain ul.anchor li a.done:hover { + color:#5A5655; + background: #8CC63F; + border: 1px solid #5A5655; +} +.swMain ul.anchor li a.disabled { + color:#CCCCCC; + background: #F8F8F8; + border: 1px solid #CCC; + cursor:text; +} +.swMain ul.anchor li a.disabled:hover { + color:#CCCCCC; + background: #F8F8F8; +} + +.swMain ul.anchor li a.error { + color:#6c6c6c !important; + background: #f08f75 !important; + border: 1px solid #fb3500 !important; +} +.swMain ul.anchor li a.error:hover { + color:#000 !important; +} + +.swMain .buttonNext { + display:block; + float:right; + margin:5px 3px 0 3px; + padding:5px; + text-decoration: none; + text-align: center; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + width:100px; + color:#FFF; + outline-style:none; + background-color: #5A5655; + border: 1px solid #5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; +} +.swMain .buttonDisabled { + color:#F8F8F8 !important; + background-color: #CCCCCC !important; + border: 1px solid #CCCCCC !important; + cursor:text; +} +.swMain .buttonPrevious { + display:block; + float:right; + margin:5px 3px 0 3px; + padding:5px; + text-decoration: none; + text-align: center; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + width:100px; + color:#FFF; + outline-style:none; + background-color: #5A5655; + border: 1px solid #5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; +} +.swMain .buttonFinish { + display:block; + float:right; + margin:5px 10px 0 3px; + padding:5px; + text-decoration: none; + text-align: center; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + width:100px; + color:#FFF; + outline-style:none; + background-color: #5A5655; + border: 1px solid #5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; +} + +/* Form Styles */ + +.txtBox { + border:1px solid #CCCCCC; + color:#5A5655; + font:13px Verdana,Arial,Helvetica,sans-serif; + padding:2px; + width:430px; +} +.txtBox:focus { + border:1px solid #EA8511; +} + +.swMain .loader { + position:relative; + display:none; + float:left; + margin: 2px 0 0 2px; + padding:8px 10px 8px 40px; + border: 1px solid #FFD700; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + background: #FFF url(../images/loader.gif) no-repeat 5px; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; + z-index:998; +} +.swMain .msgBox { + position:relative; + display:none; + float:left; + margin: 4px 0 0 5px; + padding:5px; + border: 1px solid #FFD700; + background-color: #FFFFDD; + font: normal 12px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; + z-index:999; + min-width:200px; +} +.swMain .msgBox .content { + font: normal 12px Verdana,Arial,Helvetica,sans-serif; + padding: 0px; + float:left; +} +.swMain .msgBox .close { + border: 1px solid #CCC; + border-radius: 3px; + color: #CCC; + display: block; + float: right; + margin: 0 0 0 5px; + outline-style: none; + padding: 0 2px 0 2px; + position: relative; + text-align: center; + text-decoration: none; +} +.swMain .msgBox .close:hover{ + color: #EA8511; + border: 1px solid #EA8511; +} \ No newline at end of file diff --git a/third-party/smartwizard-1636c86/styles/smart_wizard_vertical.css b/third-party/smartwizard-1636c86/styles/smart_wizard_vertical.css new file mode 100644 index 00000000..2df4b317 --- /dev/null +++ b/third-party/smartwizard-1636c86/styles/smart_wizard_vertical.css @@ -0,0 +1,306 @@ +/* + SmartWizard 2.0 plugin + jQuery Wizard control Plugin + by Dipu + + http://www.techlaboratory.net + http://tech-laboratory.blogspot.com +*/ +.swMain { + position:relative; + display:block; + margin:0; + padding:0; + border: 0px solid #CCC; + overflow:visible; + float:left; + width:980px;/* */ +} +.swMain .stepContainer { + display:block; + position: relative; + margin: 0; + padding:0; + border: 0px solid #CCC; + overflow:hidden; + clear:right; + height:300px; +} + +.swMain .stepContainer div.content { + display:block; + position: absolute; + float:left; + margin: 0; + padding:5px; + border: 1px solid #CCC; + font: normal 12px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + background-color:#F8F8F8; + height:300px; + text-align:left; + overflow:auto; + z-index:88; + -webkit-border-radius: 5px; + -moz-border-radius : 5px; + width:720px; + clear:both; +} + +.swMain div.actionBar { + display:block; + position: relative; + clear:right; + margin: 3px 0 0 0; + border: 1px solid #CCC; + padding: 0; + color: #5A5655; + background-color: #F8F8F8; + height:40px; +/* width:730px; + float:right; */ + text-align:left; + overflow:auto; + z-index:88; + -webkit-border-radius: 5px; + -moz-border-radius : 5px; + +} + +.swMain .stepContainer .StepTitle { + display:block; + position: relative; + margin:0; + border:1px solid #E0E0E0; + padding:5px; + font: bold 16px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + background-color:#E0E0E0; + clear:both; + text-align:left; + z-index:88; + -webkit-border-radius: 5px; + -moz-border-radius : 5px; +} +.swMain ul.anchor { + position: relative; + display:block; + float:left; + list-style: none; + padding: 0px; + margin: 5px 10px 0 0; + border: 0px solid #CCCCCC; + background: transparent; /*#EEEEEE */ +} +.swMain ul.anchor li{ + position: relative; + display:block; + margin: 0; + padding: 0; + padding-top:3px; + padding-bottom: 3px; + border: 0px solid #E0E0E0; + float: left; + clear:both; +} +/* Anchor Element Style */ +.swMain ul.anchor li a { + display:block; + position:relative; + float:left; + margin:0; + padding:3px; + height:70px; + width:230px; + text-decoration: none; + outline-style:none; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; + z-index:99; +} +.swMain ul.anchor li a .stepNumber{ + position:relative; + float:left; + width:30px; + text-align: center; + padding:5px; + padding-top:0; + font: bold 45px Verdana, Arial, Helvetica, sans-serif; +} +.swMain ul.anchor li a .stepDesc{ + position:relative; + display:block; + float:left; + text-align: left; + padding:5px; + width:70%; + font: bold 20px Verdana, Arial, Helvetica, sans-serif; +} +.swMain ul.anchor li a .stepDesc small{ + font: normal 12px Verdana, Arial, Helvetica, sans-serif; +} +.swMain ul.anchor li a.selected{ + color:#F8F8F8; + background: #EA8511; /* EA8511 */ + border: 1px solid #EA8511; + cursor:text; + -moz-box-shadow: 1px 5px 10px #888; + -webkit-box-shadow: 1px 5px 10px #888; + box-shadow: 1px 5px 10px #888; +} +.swMain ul.anchor li a.selected:hover { + color:#F8F8F8; + background: #EA8511; +} + +.swMain ul.anchor li a.done { + position:relative; + color:#FFF; + background: #8CC63F; + border: 1px solid #8CC63F; + z-index:99; +} +.swMain ul.anchor li a.done:hover { + color:#5A5655; + background: #8CC63F; + border: 1px solid #5A5655; +} +.swMain ul.anchor li a.disabled { + color:#CCCCCC; + background: #F8F8F8; + border: 1px solid #CCC; + cursor:text; +} +.swMain ul.anchor li a.disabled:hover { + color:#CCCCCC; + background: #F8F8F8; +} + +.swMain ul.anchor li a.error { + color:#6c6c6c !important; + background: #f08f75 !important; + border: 1px solid #fb3500 !important; +} +.swMain ul.anchor li a.error:hover { + color:#000 !important; +} + +.swMain .buttonNext { + display:block; + float:right; + margin:5px 3px 0 3px; + padding:5px; + text-decoration: none; + text-align: center; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + width:100px; + color:#FFF; + outline-style:none; + background-color: #5A5655; + border: 1px solid #5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; +} +.swMain .buttonDisabled { + color:#F8F8F8 !important; + background-color: #CCCCCC !important; + border: 1px solid #CCCCCC !important; + cursor:text; +} +.swMain .buttonPrevious { + display:block; + float:right; + margin:5px 3px 0 3px; + padding:5px; + text-decoration: none; + text-align: center; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + width:100px; + color:#FFF; + outline-style:none; + background-color: #5A5655; + border: 1px solid #5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; +} +.swMain .buttonFinish { + display:block; + float:right; + margin:5px 10px 0 3px; + padding:5px; + text-decoration: none; + text-align: center; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + width:100px; + color:#FFF; + outline-style:none; + background-color: #5A5655; + border: 1px solid #5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; +} + +/* Form Styles */ + +.txtBox { + border:1px solid #CCCCCC; + color:#5A5655; + font:13px Verdana,Arial,Helvetica,sans-serif; + padding:2px; + width:430px; +} +.txtBox:focus { + border:1px solid #EA8511; +} + +.swMain .loader { + position:relative; + display:none; + float:left; + margin: 2px 0 0 2px; + padding:8px 10px 8px 40px; + border: 1px solid #FFD700; + font: bold 13px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + background: #FFF url(../images/loader.gif) no-repeat 5px; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; + z-index:998; +} +.swMain .msgBox { + position:relative; + display:none; + float:left; + margin: 4px 0 0 5px; + padding:5px; + border: 1px solid #FFD700; + background-color: #FFFFDD; + font: normal 12px Verdana, Arial, Helvetica, sans-serif; + color:#5A5655; + -moz-border-radius : 5px; + -webkit-border-radius: 5px; + z-index:999; + min-width:200px; +} +.swMain .msgBox .content { + font: normal 12px Verdana,Arial,Helvetica,sans-serif; + padding: 0px; + float:left; +} +.swMain .msgBox .close { + border: 1px solid #CCC; + border-radius: 3px; + color: #CCC; + display: block; + float: right; + margin: 0 0 0 5px; + outline-style: none; + padding: 0 2px 0 2px; + position: relative; + text-align: center; + text-decoration: none; +} +.swMain .msgBox .close:hover{ + color: #EA8511; + border: 1px solid #EA8511; +} \ No newline at end of file diff --git a/unfold/plugin.py b/unfold/plugin.py index f0b6128e..4e97d678 100644 --- a/unfold/plugin.py +++ b/unfold/plugin.py @@ -163,6 +163,7 @@ class Plugin: self.need_spin=self.start_with_spin() env.update(self.__dict__) # translate high-level 'toggled' into 4 different booleans + self.need_toggle = False if self.toggled=='persistent': # start with everything turned off and let the js callback do its job env.update({'persistent_toggle':True,'display_hide_button':False,'display_show_button':False,'display_body':False}) diff --git a/unfold/templates/plugin.html b/unfold/templates/plugin.html index 49d0560b..ee0cbecb 100644 --- a/unfold/templates/plugin.html +++ b/unfold/templates/plugin.html @@ -1,5 +1,5 @@ {% if visible %} -
+
{% if togglable %} -- 2.43.0