You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
525 lines
20 KiB
525 lines
20 KiB
/*!
|
|
* jQuery Steps v1.1.0 - 09/04/2014
|
|
* Copyright (c) 2014 Rafael Staib (http://www.jquery-steps.com)
|
|
* Licensed under MIT http://www.opensource.org/licenses/MIT
|
|
*/
|
|
! function(a, b) {
|
|
function c(a, b) {
|
|
o(a).push(b)
|
|
}
|
|
|
|
function d(d, e, f) {
|
|
var g = d.children(e.headerTag),
|
|
h = d.children(e.bodyTag);
|
|
g.length > h.length ? R(Z, "contents") : g.length < h.length && R(Z, "titles");
|
|
var i = e.startIndex;
|
|
if (f.stepCount = g.length, e.saveState && a.cookie) {
|
|
var j = a.cookie(U + q(d)),
|
|
k = parseInt(j, 0);
|
|
!isNaN(k) && k < f.stepCount && (i = k)
|
|
}
|
|
f.currentIndex = i, g.each(function(e) {
|
|
var f = a(this),
|
|
g = h.eq(e),
|
|
i = g.data("mode"),
|
|
j = null == i ? $.html : r($, /^\s*$/.test(i) || isNaN(i) ? i : parseInt(i, 0)),
|
|
k = j === $.html || g.data("url") === b ? "" : g.data("url"),
|
|
l = j !== $.html && "1" === g.data("loaded"),
|
|
m = a.extend({}, bb, {
|
|
title: f.html(),
|
|
content: j === $.html ? g.html() : "",
|
|
contentUrl: k,
|
|
contentMode: j,
|
|
contentLoaded: l
|
|
});
|
|
c(d, m)
|
|
})
|
|
}
|
|
|
|
function e(a) {
|
|
a.triggerHandler("canceled")
|
|
}
|
|
|
|
function f(a, b) {
|
|
return a.currentIndex - b
|
|
}
|
|
|
|
function g(b, c) {
|
|
var d = i(b);
|
|
b.unbind(d).removeData("uid").removeData("options").removeData("state").removeData("steps").removeData("eventNamespace").find(".actions a").unbind(d), b.removeClass(c.clearFixCssClass + " vertical");
|
|
var e = b.find(".content > *");
|
|
e.removeData("loaded").removeData("mode").removeData("url"), e.removeAttr("id").removeAttr("role").removeAttr("tabindex").removeAttr("class").removeAttr("style")._removeAria("labelledby")._removeAria("hidden"), b.find(".content > [data-mode='async'],.content > [data-mode='iframe']").empty();
|
|
var f = a('<{0} class="{1}"></{0}>'.format(b.get(0).tagName, b.attr("class"))),
|
|
g = b._id();
|
|
return null != g && "" !== g && f._id(g), f.html(b.find(".content").html()), b.after(f), b.remove(), f
|
|
}
|
|
|
|
function h(a, b) {
|
|
var c = a.find(".steps li").eq(b.currentIndex);
|
|
a.triggerHandler("finishing", [b.currentIndex]) ? (c.addClass("done").removeClass("error"), a.triggerHandler("finished", [b.currentIndex])) : c.addClass("error")
|
|
}
|
|
|
|
function i(a) {
|
|
var b = a.data("eventNamespace");
|
|
return null == b && (b = "." + q(a), a.data("eventNamespace", b)), b
|
|
}
|
|
|
|
function j(a, b) {
|
|
var c = q(a);
|
|
return a.find("#" + c + V + b)
|
|
}
|
|
|
|
function k(a, b) {
|
|
var c = q(a);
|
|
return a.find("#" + c + W + b)
|
|
}
|
|
|
|
function l(a, b) {
|
|
var c = q(a);
|
|
return a.find("#" + c + X + b)
|
|
}
|
|
|
|
function m(a) {
|
|
return a.data("options")
|
|
}
|
|
|
|
function n(a) {
|
|
return a.data("state")
|
|
}
|
|
|
|
function o(a) {
|
|
return a.data("steps")
|
|
}
|
|
|
|
function p(a, b) {
|
|
var c = o(a);
|
|
return (0 > b || b >= c.length) && R(Y), c[b]
|
|
}
|
|
|
|
function q(a) {
|
|
var b = a.data("uid");
|
|
return null == b && (b = a._id(), null == b && (b = "steps-uid-".concat(T), a._id(b)), T++, a.data("uid", b)), b
|
|
}
|
|
|
|
function r(a, c) {
|
|
if (S("enumType", a), S("keyOrValue", c), "string" == typeof c) {
|
|
var d = a[c];
|
|
return d === b && R("The enum key '{0}' does not exist.", c), d
|
|
}
|
|
if ("number" == typeof c) {
|
|
for (var e in a)
|
|
if (a[e] === c) return c;
|
|
R("Invalid enum value '{0}'.", c)
|
|
} else R("Invalid key or value type.")
|
|
}
|
|
|
|
function s(a, b, c) {
|
|
return B(a, b, c, v(c, 1))
|
|
}
|
|
|
|
function t(a, b, c) {
|
|
return B(a, b, c, f(c, 1))
|
|
}
|
|
|
|
function u(a, b, c, d) {
|
|
if ((0 > d || d >= c.stepCount) && R(Y), !(b.forceMoveForward && d < c.currentIndex)) {
|
|
var e = c.currentIndex;
|
|
return a.triggerHandler("stepChanging", [c.currentIndex, d]) ? (c.currentIndex = d, O(a, b, c), E(a, b, c, e), D(a, b, c), A(a, b, c), P(a, b, c, d, e, function() {
|
|
a.triggerHandler("stepChanged", [d, e])
|
|
})) : a.find(".steps li").eq(e).addClass("error"), !0
|
|
}
|
|
}
|
|
|
|
function v(a, b) {
|
|
return a.currentIndex + b
|
|
}
|
|
|
|
function w(b) {
|
|
var c = a.extend(!0, {}, cb, b);
|
|
return this.each(function() {
|
|
var b = a(this),
|
|
e = {
|
|
currentIndex: c.startIndex,
|
|
currentStep: null,
|
|
stepCount: 0,
|
|
transitionElement: null
|
|
};
|
|
b.data("options", c), b.data("state", e), b.data("steps", []), d(b, c, e), J(b, c, e), G(b, c), c.autoFocus && 0 === T && j(b, c.startIndex).focus(), b.triggerHandler("init", [c.startIndex])
|
|
})
|
|
}
|
|
|
|
function x(b, c, d, e, f) {
|
|
(0 > e || e > d.stepCount) && R(Y), f = a.extend({}, bb, f), y(b, e, f), d.currentIndex !== d.stepCount && d.currentIndex >= e && (d.currentIndex++, O(b, c, d)), d.stepCount++;
|
|
var g = b.find(".content"),
|
|
h = a("<{0}>{1}</{0}>".format(c.headerTag, f.title)),
|
|
i = a("<{0}></{0}>".format(c.bodyTag));
|
|
return (null == f.contentMode || f.contentMode === $.html) && i.html(f.content), 0 === e ? g.prepend(i).prepend(h) : k(b, e - 1).after(i).after(h), K(b, d, i, e), N(b, c, d, h, e), F(b, c, d, e), e === d.currentIndex && E(b, c, d), D(b, c, d), b
|
|
}
|
|
|
|
function y(a, b, c) {
|
|
o(a).splice(b, 0, c)
|
|
}
|
|
|
|
function z(b) {
|
|
var c = a(this),
|
|
d = m(c),
|
|
e = n(c);
|
|
if (d.suppressPaginationOnFocus && c.find(":focus").is(":input")) return b.preventDefault(), !1;
|
|
var f = {
|
|
left: 37,
|
|
right: 39
|
|
};
|
|
b.keyCode === f.left ? (b.preventDefault(), t(c, d, e)) : b.keyCode === f.right && (b.preventDefault(), s(c, d, e))
|
|
}
|
|
|
|
function A(b, c, d) {
|
|
if (d.stepCount > 0) {
|
|
var e = d.currentIndex,
|
|
f = p(b, e);
|
|
if (!c.enableContentCache || !f.contentLoaded) switch (r($, f.contentMode)) {
|
|
case $.iframe:
|
|
b.find(".content > .body").eq(d.currentIndex).empty().html('<iframe src="' + f.contentUrl + '" frameborder="0" scrolling="no" />').data("loaded", "1");
|
|
break;
|
|
case $.async:
|
|
var g = k(b, e)._aria("busy", "true").empty().append(M(c.loadingTemplate, {
|
|
text: c.labels.loading
|
|
}));
|
|
a.ajax({
|
|
url: f.contentUrl,
|
|
cache: !1
|
|
}).done(function(a) {
|
|
g.empty().html(a)._aria("busy", "false").data("loaded", "1"), b.triggerHandler("contentLoaded", [e])
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
function B(a, b, c, d) {
|
|
var e = c.currentIndex;
|
|
if (d >= 0 && d < c.stepCount && !(b.forceMoveForward && d < c.currentIndex)) {
|
|
var f = j(a, d),
|
|
g = f.parent(),
|
|
h = g.hasClass("disabled");
|
|
return g._enableAria(), f.click(), e === c.currentIndex && h ? (g._enableAria(!1), !1) : !0
|
|
}
|
|
return !1
|
|
}
|
|
|
|
function C(b) {
|
|
b.preventDefault();
|
|
var c = a(this),
|
|
d = c.parent().parent().parent().parent(),
|
|
f = m(d),
|
|
g = n(d),
|
|
i = c.attr("href");
|
|
switch (i.substring(i.lastIndexOf("#") + 1)) {
|
|
case "cancel":
|
|
e(d);
|
|
break;
|
|
case "finish":
|
|
h(d, g);
|
|
break;
|
|
case "next":
|
|
s(d, f, g);
|
|
break;
|
|
case "previous":
|
|
t(d, f, g)
|
|
}
|
|
}
|
|
|
|
function D(a, b, c) {
|
|
if (b.enablePagination) {
|
|
var d = a.find(".actions a[href$='#finish']").parent(),
|
|
e = a.find(".actions a[href$='#next']").parent();
|
|
if (!b.forceMoveForward) {
|
|
var f = a.find(".actions a[href$='#previous']").parent();
|
|
f._enableAria(c.currentIndex > 0)
|
|
}
|
|
b.enableFinishButton && b.showFinishButtonAlways ? (d._enableAria(c.stepCount > 0), e._enableAria(c.stepCount > 1 && c.stepCount > c.currentIndex + 1)) : (d._showAria(b.enableFinishButton && c.stepCount === c.currentIndex + 1), e._showAria(0 === c.stepCount || c.stepCount > c.currentIndex + 1)._enableAria(c.stepCount > c.currentIndex + 1 || !b.enableFinishButton))
|
|
}
|
|
}
|
|
|
|
function E(b, c, d, e) {
|
|
var f = j(b, d.currentIndex),
|
|
g = a('<span class="current-info audible">' + c.labels.current + " </span>"),
|
|
h = b.find(".content > .title");
|
|
if (null != e) {
|
|
var i = j(b, e);
|
|
i.parent().addClass("done").removeClass("error")._selectAria(!1), h.eq(e).removeClass("current").next(".body").removeClass("current"), g = i.find(".current-info"), f.focus()
|
|
}
|
|
f.prepend(g).parent()._selectAria().removeClass("done")._enableAria(), h.eq(d.currentIndex).addClass("current").next(".body").addClass("current")
|
|
}
|
|
|
|
function F(a, b, c, d) {
|
|
for (var e = q(a), f = d; f < c.stepCount; f++) {
|
|
var g = e + V + f,
|
|
h = e + W + f,
|
|
i = e + X + f,
|
|
j = a.find(".title").eq(f)._id(i);
|
|
a.find(".steps a").eq(f)._id(g)._aria("controls", h).attr("href", "#" + i).html(M(b.titleTemplate, {
|
|
index: f + 1,
|
|
title: j.html()
|
|
})), a.find(".body").eq(f)._id(h)._aria("labelledby", i)
|
|
}
|
|
}
|
|
|
|
function G(a, b) {
|
|
var c = i(a);
|
|
a.bind("canceled" + c, b.onCanceled), a.bind("contentLoaded" + c, b.onContentLoaded), a.bind("finishing" + c, b.onFinishing), a.bind("finished" + c, b.onFinished), a.bind("init" + c, b.onInit), a.bind("stepChanging" + c, b.onStepChanging), a.bind("stepChanged" + c, b.onStepChanged), b.enableKeyNavigation && a.bind("keyup" + c, z), a.find(".actions a").bind("click" + c, C)
|
|
}
|
|
|
|
function H(a, b, c, d) {
|
|
return 0 > d || d >= c.stepCount || c.currentIndex === d ? !1 : (I(a, d), c.currentIndex > d && (c.currentIndex--, O(a, b, c)), c.stepCount--, l(a, d).remove(), k(a, d).remove(), j(a, d).parent().remove(), 0 === d && a.find(".steps li").first().addClass("first"), d === c.stepCount && a.find(".steps li").eq(d).addClass("last"), F(a, b, c, d), D(a, b, c), !0)
|
|
}
|
|
|
|
function I(a, b) {
|
|
o(a).splice(b, 1)
|
|
}
|
|
|
|
function J(b, c, d) {
|
|
var e = '<{0} class="{1}">{2}</{0}>',
|
|
f = r(_, c.stepsOrientation),
|
|
g = f === _.vertical ? " vertical" : "",
|
|
h = a(e.format(c.contentContainerTag, "content " + c.clearFixCssClass, b.html())),
|
|
i = a(e.format(c.stepsContainerTag, "steps " + c.clearFixCssClass, '<ul role="tablist"></ul>')),
|
|
j = h.children(c.headerTag),
|
|
k = h.children(c.bodyTag);
|
|
b.attr("role", "application").empty().append(i).append(h).addClass(c.cssClass + " " + c.clearFixCssClass + g), k.each(function(c) {
|
|
K(b, d, a(this), c)
|
|
}), j.each(function(e) {
|
|
N(b, c, d, a(this), e)
|
|
}), E(b, c, d), L(b, c, d)
|
|
}
|
|
|
|
function K(a, b, c, d) {
|
|
var e = q(a),
|
|
f = e + W + d,
|
|
g = e + X + d;
|
|
c._id(f).attr("role", "tabpanel")._aria("labelledby", g).addClass("body")._showAria(b.currentIndex === d)
|
|
}
|
|
|
|
function L(a, b, c) {
|
|
if (b.enablePagination) {
|
|
var d = '<{0} class="actions {1}"><ul role="menu" aria-label="{2}">{3}</ul></{0}>',
|
|
e = '<li><a href="#{0}" role="menuitem">{1}</a></li>',
|
|
f = "";
|
|
b.forceMoveForward || (f += e.format("previous", b.labels.previous)), f += e.format("next", b.labels.next), b.enableFinishButton && (f += e.format("finish", b.labels.finish)), b.enableCancelButton && (f += e.format("cancel", b.labels.cancel)), a.append(d.format(b.actionContainerTag, b.clearFixCssClass, b.labels.pagination, f)), D(a, b, c), A(a, b, c)
|
|
}
|
|
}
|
|
|
|
function M(a, c) {
|
|
for (var d = a.match(/#([a-z]*)#/gi), e = 0; e < d.length; e++) {
|
|
var f = d[e],
|
|
g = f.substring(1, f.length - 1);
|
|
c[g] === b && R("The key '{0}' does not exist in the substitute collection!", g), a = a.replace(f, c[g])
|
|
}
|
|
return a
|
|
}
|
|
|
|
function N(b, c, d, e, f) {
|
|
var g = q(b),
|
|
h = g + V + f,
|
|
j = g + W + f,
|
|
k = g + X + f,
|
|
l = b.find(".steps > ul"),
|
|
m = M(c.titleTemplate, {
|
|
index: f + 1,
|
|
title: e.html()
|
|
}),
|
|
n = a('<li role="tab"><a id="' + h + '" href="#' + k + '" aria-controls="' + j + '">' + m + "</a></li>");
|
|
n._enableAria(c.enableAllSteps || d.currentIndex > f), d.currentIndex > f && n.addClass("done"), e._id(k).attr("tabindex", "-1").addClass("title"), 0 === f ? l.prepend(n) : l.find("li").eq(f - 1).after(n), 0 === f && l.find("li").removeClass("first").eq(f).addClass("first"), f === d.stepCount - 1 && l.find("li").removeClass("last").eq(f).addClass("last"), n.children("a").bind("click" + i(b), Q)
|
|
}
|
|
|
|
function O(b, c, d) {
|
|
c.saveState && a.cookie && a.cookie(U + q(b), d.currentIndex)
|
|
}
|
|
|
|
function P(b, c, d, e, f, g) {
|
|
var h = b.find(".content > .body"),
|
|
i = r(ab, c.transitionEffect),
|
|
j = c.transitionEffectSpeed,
|
|
k = h.eq(e),
|
|
l = h.eq(f);
|
|
switch (i) {
|
|
case ab.fade:
|
|
case ab.slide:
|
|
var m = i === ab.fade ? "fadeOut" : "slideUp",
|
|
o = i === ab.fade ? "fadeIn" : "slideDown";
|
|
d.transitionElement = k, l[m](j, function() {
|
|
var b = a(this)._showAria(!1).parent().parent(),
|
|
c = n(b);
|
|
c.transitionElement && (c.transitionElement[o](j, function() {
|
|
a(this)._showAria()
|
|
}).promise().done(g), c.transitionElement = null)
|
|
});
|
|
break;
|
|
case ab.slideLeft:
|
|
var p = l.outerWidth(!0),
|
|
q = e > f ? -p : p,
|
|
s = e > f ? p : -p;
|
|
a.when(l.animate({
|
|
left: q
|
|
}, j, function() {
|
|
a(this)._showAria(!1)
|
|
}), k.css("left", s + "px")._showAria().animate({
|
|
left: 0
|
|
}, j)).done(g);
|
|
break;
|
|
default:
|
|
a.when(l._showAria(!1), k._showAria()).done(g)
|
|
}
|
|
}
|
|
|
|
function Q(b) {
|
|
b.preventDefault();
|
|
var c = a(this),
|
|
d = c.parent().parent().parent().parent(),
|
|
e = m(d),
|
|
f = n(d),
|
|
g = f.currentIndex;
|
|
if (c.parent().is(":not(.disabled):not(.current)")) {
|
|
var h = c.attr("href"),
|
|
i = parseInt(h.substring(h.lastIndexOf("-") + 1), 0);
|
|
u(d, e, f, i)
|
|
}
|
|
return g === f.currentIndex ? (j(d, g).focus(), !1) : void 0
|
|
}
|
|
|
|
function R(a) {
|
|
throw arguments.length > 1 && (a = a.format(Array.prototype.slice.call(arguments, 1))), new Error(a)
|
|
}
|
|
|
|
function S(a, b) {
|
|
null == b && R("The argument '{0}' is null or undefined.", a)
|
|
}
|
|
a.fn.extend({
|
|
_aria: function(a, b) {
|
|
return this.attr("aria-" + a, b)
|
|
},
|
|
_removeAria: function(a) {
|
|
return this.removeAttr("aria-" + a)
|
|
},
|
|
_enableAria: function(a) {
|
|
return null == a || a ? this.removeClass("disabled")._aria("disabled", "false") : this.addClass("disabled")._aria("disabled", "true")
|
|
},
|
|
_showAria: function(a) {
|
|
return null == a || a ? this.show()._aria("hidden", "false") : this.hide()._aria("hidden", "true")
|
|
},
|
|
_selectAria: function(a) {
|
|
return null == a || a ? this.addClass("current")._aria("selected", "true") : this.removeClass("current")._aria("selected", "false")
|
|
},
|
|
_id: function(a) {
|
|
return a ? this.attr("id", a) : this.attr("id")
|
|
}
|
|
}), String.prototype.format || (String.prototype.format = function() {
|
|
for (var b = 1 === arguments.length && a.isArray(arguments[0]) ? arguments[0] : arguments, c = this, d = 0; d < b.length; d++) {
|
|
var e = new RegExp("\\{" + d + "\\}", "gm");
|
|
c = c.replace(e, b[d])
|
|
}
|
|
return c
|
|
});
|
|
var T = 0,
|
|
U = "jQu3ry_5teps_St@te_",
|
|
V = "-t-",
|
|
W = "-p-",
|
|
X = "-h-",
|
|
Y = "Index out of range.",
|
|
Z = "One or more corresponding step {0} are missing.";
|
|
a.fn.steps = function(b) {
|
|
return a.fn.steps[b] ? a.fn.steps[b].apply(this, Array.prototype.slice.call(arguments, 1)) : "object" != typeof b && b ? void a.error("Method " + b + " does not exist on jQuery.steps") : w.apply(this, arguments)
|
|
}, a.fn.steps.add = function(a) {
|
|
var b = n(this);
|
|
return x(this, m(this), b, b.stepCount, a)
|
|
}, a.fn.steps.destroy = function() {
|
|
return g(this, m(this))
|
|
}, a.fn.steps.finish = function() {
|
|
h(this, n(this))
|
|
}, a.fn.steps.getCurrentIndex = function() {
|
|
return n(this).currentIndex
|
|
}, a.fn.steps.getCurrentStep = function() {
|
|
return p(this, n(this).currentIndex)
|
|
}, a.fn.steps.getStep = function(a) {
|
|
return p(this, a)
|
|
}, a.fn.steps.insert = function(a, b) {
|
|
return x(this, m(this), n(this), a, b)
|
|
}, a.fn.steps.next = function() {
|
|
return s(this, m(this), n(this))
|
|
}, a.fn.steps.previous = function() {
|
|
return t(this, m(this), n(this))
|
|
}, a.fn.steps.remove = function(a) {
|
|
return H(this, m(this), n(this), a)
|
|
}, a.fn.steps.setStep = function() {
|
|
throw new Error("Not yet implemented!")
|
|
}, a.fn.steps.skip = function() {
|
|
throw new Error("Not yet implemented!")
|
|
};
|
|
var $ = a.fn.steps.contentMode = {
|
|
html: 0,
|
|
iframe: 1,
|
|
async: 2
|
|
},
|
|
_ = a.fn.steps.stepsOrientation = {
|
|
horizontal: 0,
|
|
vertical: 1
|
|
},
|
|
ab = a.fn.steps.transitionEffect = {
|
|
none: 0,
|
|
fade: 1,
|
|
slide: 2,
|
|
slideLeft: 3
|
|
},
|
|
bb = a.fn.steps.stepModel = {
|
|
title: "",
|
|
content: "",
|
|
contentUrl: "",
|
|
contentMode: $.html,
|
|
contentLoaded: !1
|
|
},
|
|
cb = a.fn.steps.defaults = {
|
|
headerTag: "h1",
|
|
bodyTag: "div",
|
|
contentContainerTag: "div",
|
|
actionContainerTag: "div",
|
|
stepsContainerTag: "div",
|
|
cssClass: "wizard",
|
|
clearFixCssClass: "clearfix",
|
|
stepsOrientation: _.horizontal,
|
|
titleTemplate: '<span class="number">#index#.</span> #title#',
|
|
loadingTemplate: '<span class="spinner"></span> #text#',
|
|
autoFocus: !1,
|
|
enableAllSteps: !1,
|
|
enableKeyNavigation: !0,
|
|
enablePagination: !0,
|
|
suppressPaginationOnFocus: !0,
|
|
enableContentCache: !0,
|
|
enableCancelButton: !1,
|
|
enableFinishButton: !0,
|
|
preloadContent: !1,
|
|
showFinishButtonAlways: !1,
|
|
forceMoveForward: !1,
|
|
saveState: !1,
|
|
startIndex: 0,
|
|
transitionEffect: ab.none,
|
|
transitionEffectSpeed: 200,
|
|
onStepChanging: function() {
|
|
return !0
|
|
},
|
|
onStepChanged: function() {},
|
|
onCanceled: function() {},
|
|
onFinishing: function() {
|
|
return !0
|
|
},
|
|
onFinished: function() {},
|
|
onContentLoaded: function() {},
|
|
onInit: function() {},
|
|
labels: {
|
|
cancel: "Cancel",
|
|
current: "current step:",
|
|
pagination: "Pagination",
|
|
finish: "Finish",
|
|
next: "Next",
|
|
previous: "Previous",
|
|
loading: "Loading ..."
|
|
}
|
|
}
|
|
}(jQuery); |