318 lines
18 KiB
JavaScript
318 lines
18 KiB
JavaScript
/*!
|
|
* 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: "انهاء", next: "التالى", previous: "السابق", loading: "Loading ..." } }
|
|
}(jQuery); |