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 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 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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 literal 0 HcmV?d00001 diff --git a/portal/models.py b/portal/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/portal/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/portal/portalpage.py b/portal/portalpage.py new file mode 100644 index 00000000..3cc5ab98 --- /dev/null +++ b/portal/portalpage.py @@ -0,0 +1,36 @@ +from django.template import RequestContext +from django.shortcuts import render_to_response + +from unfold.page import Page +from myslice.viewutils import topmenu_items, the_user + +class PortalPage(Page): + def __init__(self, request): + Page.__init__(self, request) + self._content = [] + + def __lshift__(self, content): + self._content.append(content) + + def render(self): + template_env = {} + + # define 'unfold1_main' to the template engine - the main contents + template_env [ 'unfold1_main' ] = "\n".join(self._content) + + # more general variables expected in the template + template_env [ 'title' ] = 'Test view that combines various plugins' + # the menu items on the top + template_env [ 'topmenu_items' ] = topmenu_items('slice', self.request) + # so we can sho who is logged + template_env [ 'username' ] = the_user (self.request) + + # don't forget to run the requests + # Jordan: it seems we need this to init plugins js + # Issue a "manifold is not defined" error + #self.expose_queries () + + template_env.update(self.prelude_env()) + result=render_to_response ('view-unfold1.html',template_env, + context_instance=RequestContext(self.request)) + return result diff --git a/portal/templates/account_validated.html b/portal/templates/account_validated.html new file mode 100644 index 00000000..4aa120cd --- /dev/null +++ b/portal/templates/account_validated.html @@ -0,0 +1,6 @@ +account validated +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 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 a$M6N<&*x9g-rV+`l?yig@9ziz;J*Q=>Q1`= literal 0 HcmV?d00001 diff --git a/third-party/smartwizard-1636c86/index.htm b/third-party/smartwizard-1636c86/index.htm new file mode 100644 index 00000000..13bad1d4 --- /dev/null +++ b/third-party/smartwizard-1636c86/index.htm @@ -0,0 +1,160 @@ + + + +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.47.0