You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1247 lines
80 KiB
JavaScript
1247 lines
80 KiB
JavaScript
5 years ago
|
/* !function(e,t){var a=function(t,a){function i(e){e.preventDefault(),e.stopPropagation();var t=y.offset(),a=t[c],i=v?e.pageY:e.pageX;i>a+z?(z=i-a-A+E,z>j&&(z=j)):(z=i-a-E,0>z&&(z=0)),o.update_scroll()}function n(t){t.preventDefault(),t.stopPropagation(),q=N=v?t.pageY:t.pageX,M=!0,e("html").off("mousemove.ace_scroll").on("mousemove.ace_scroll",s),e(P).off("mouseup.ace_scroll").on("mouseup.ace_scroll",r),y.addClass("active"),H&&o.$element.trigger("drag.start")}function s(e){e.preventDefault(),e.stopPropagation(),q=v?e.pageY:e.pageX,q-N+z>j?q=N+j-z:0>q-N+z&&(q=N-z),z+=q-N,N=q,0>z?z=0:z>j&&(z=j),o.update_scroll()}function r(t){t.preventDefault(),t.stopPropagation(),M=!1,e("html").off(".ace_scroll"),e(P).off(".ace_scroll"),y.removeClass("active"),H&&o.$element.trigger("drag.end")}var o=this,l=e.extend({},e.fn.ace_scroll.defaults,a);this.size=0,this.$element=e(t),this.element=t;var c,d,u,h,f,p,v=!0,g=!1,m=!1,b=!1,_=null,w=null,y=null,x=null,C=null,k=null,$=null,A=0,z=0,j=0,E=0,D=!0,I=!1,T=1,S=!1,M=!1,P="onmouseup"in window?window:"html",H=l.dragEvent||!1,L=a.scrollEvent||!1;this.create=function(t){if(!b){if(t&&(l=e.extend({},e.fn.ace_scroll.defaults,t)),this.size=parseInt(this.$element.attr("data-size"))||l.size||200,v=!l.horizontal,c=v?"top":"left",d=v?"height":"width",u=v?"maxHeight":"maxWidth",h=v?"clientHeight":"clientWidth",f=v?"scrollTop":"scrollLeft",p=v?"scrollHeight":"scrollWidth",this.$element.addClass("ace-scroll "+((v?"":" scroll-hz")+(l.styleClass?" "+l.styleClass:""))),"static"==this.$element.css("position")?(S=this.element.style.position,this.element.style.position="relative"):S=!1,this.$element.wrapInner('<div class="scroll-content" />'),this.$element.prepend('<div class="scroll-track"><div class="scroll-bar"></div></div>'),_=this.$element.find(".scroll-content").eq(0),v||_.wrapInner("<div />"),w=_.get(0),y=this.$element.find(".scroll-track").eq(0),x=y.find(".scroll-bar").eq(0),C=y.get(0),k=x.get(0),$=k.style,y.hide(),y.on("mousedown",i),x.on("mousedown",n),_.on("scroll",function(){D&&(z=parseInt(Math.round(this[f]*T)),$[c]=z+"px"),D=!1,L&&this.$element.trigger("scroll",[w])}),l.mouseWheel){var a=l.mouseWheelLock,s=l.lockAnyway;this.$element.on("mousewheel.ace_scroll DOMMouseScroll.ace_scroll",function(t){if(!g){if(!m)return!s;M&&(M=!1,e("html").off(".ace_scroll"),e(P).off(".ace_scroll"),H&&o.$element.trigger("drag.end"));var i=t.originalEvent.detail<0||t.originalEvent.wheelDelta>0?1:-1,n=!1,r=w[h],l=w[f];a||(n=-1==i?w[p]<=l+r:0==l),o.move_bar(!0);var c=parseInt(Math.round(Math.min(Math.max(r/8,54)),o.size))+1;return w[f]=l-i*c,n&&!s}})}var r=ace.vars.touch&&"ace_drag"in e.event.special&&l.touchDrag;if(r){var A="",j=r?"ace_drag":"swipe";this.$element.on(j+".ace_scroll",function(e){if(g)return void(e.retval.cancel=!0);if(!m)return void(e.retval.cancel=s);if(A=e.direction,v&&("up"==A||"down"==A)||!v&&("left"==A||"right"==A)){var t=v?e.dy:e.dx;0!=t&&(Math.abs(t)>20&&r&&(t=2*t),o.move_bar(!0),w[f]=w[f]+t)}})}l.hoverReset&&this.$element.on("mouseenter.ace_scroll touchstart.ace_scroll",function(){o.reset()}),v||_.children(0).css(d,this.size),_.css(u,this.size),g=!1,b=!0}},this.is_active=function(){return m},this.is_enabled=function(){return!g},this.move_bar=function(e){D=e},this.reset=function(){if(!g){b||this.create();var e=v?w[p]:this.size;if(v&&0==e||!v&&0==this.element.scrollWidth)return void this.$element.removeClass("scroll-active");var t=v?this.size:w.clientWidth;v||_.children(0).css(d,this.size),_.css(u,this.size),e>t?(m=!0,y.css(d,t).show(),T=parseFloat((t/e).toFixed(5)),A=parseInt(Math.round(t*T)),E=parseInt(Math.round(A/2)),j=t-A,z=parseInt(Math.round(w[f]*T)),$[d]=A+"px",$[c]=z+"px",this.$element.addClass("scroll-active"),I||(l.reset&&(w[f]=0,$[c]=0),I=!0)):(m=!1,y.hide(),this.$element.removeClass("scroll-active"),_.css(u,""))}},this.disable=function(){return w[f]=0,$[c]=0,g=!0,m=!1,y.hide(),this.$element.removeClass("scroll-active"),_.css(u,""),this},this.enable=function(){return g=!1,this.reset(),this},this.destroy=function(){return m=!1,g=!1,b=!1,this.$element.removeClass("ace-scroll scroll-hz"+(l.e
|
||
|
*/
|
||
|
!function(e, t) {
|
||
|
var a = function(t, a) {
|
||
|
function i(e) {
|
||
|
e.preventDefault(),
|
||
|
e.stopPropagation();
|
||
|
var t = y.offset()
|
||
|
, a = t[c]
|
||
|
, i = v ? e.pageY : e.pageX;
|
||
|
i > a + z ? (z = i - a - A + E,
|
||
|
z > j && (z = j)) : (z = i - a - E,
|
||
|
0 > z && (z = 0)),
|
||
|
o.update_scroll()
|
||
|
}
|
||
|
function n(t) {
|
||
|
t.preventDefault(),
|
||
|
t.stopPropagation(),
|
||
|
q = N = v ? t.pageY : t.pageX,
|
||
|
M = !0,
|
||
|
e("html").off("mousemove.ace_scroll").on("mousemove.ace_scroll", s),
|
||
|
e(P).off("mouseup.ace_scroll").on("mouseup.ace_scroll", r),
|
||
|
y.addClass("active"),
|
||
|
H && o.$element.trigger("drag.start")
|
||
|
}
|
||
|
function s(e) {
|
||
|
e.preventDefault(),
|
||
|
e.stopPropagation(),
|
||
|
q = v ? e.pageY : e.pageX,
|
||
|
q - N + z > j ? q = N + j - z : 0 > q - N + z && (q = N - z),
|
||
|
z += q - N,
|
||
|
N = q,
|
||
|
0 > z ? z = 0 : z > j && (z = j),
|
||
|
o.update_scroll()
|
||
|
}
|
||
|
function r(t) {
|
||
|
t.preventDefault(),
|
||
|
t.stopPropagation(),
|
||
|
M = !1,
|
||
|
e("html").off(".ace_scroll"),
|
||
|
e(P).off(".ace_scroll"),
|
||
|
y.removeClass("active"),
|
||
|
H && o.$element.trigger("drag.end")
|
||
|
}
|
||
|
var o = this
|
||
|
, l = e.extend({}, e.fn.ace_scroll.defaults, a);
|
||
|
this.size = 0,
|
||
|
this.$element = e(t),
|
||
|
this.element = t;
|
||
|
var c, d, u, h, f, p, v = !0, g = !1, m = !1, b = !1, _ = null , w = null , y = null , x = null , C = null , k = null , $ = null , A = 0, z = 0, j = 0, E = 0, D = !0, I = !1, T = 1, S = !1, M = !1, P = "onmouseup" in window ? window : "html", H = l.dragEvent || !1, L = a.scrollEvent || !1;
|
||
|
this.create = function(t) {
|
||
|
if (!b) {
|
||
|
if (t && (l = e.extend({}, e.fn.ace_scroll.defaults, t)),
|
||
|
this.size = parseInt(this.$element.attr("data-size")) || l.size || 200,
|
||
|
v = !l.horizontal,
|
||
|
c = v ? "top" : "left",
|
||
|
d = v ? "height" : "width",
|
||
|
u = v ? "maxHeight" : "maxWidth",
|
||
|
h = v ? "clientHeight" : "clientWidth",
|
||
|
f = v ? "scrollTop" : "scrollLeft",
|
||
|
p = v ? "scrollHeight" : "scrollWidth",
|
||
|
this.$element.addClass("ace-scroll " + ((v ? "" : " scroll-hz") + (l.styleClass ? " " + l.styleClass : ""))),
|
||
|
"static" == this.$element.css("position") ? (S = this.element.style.position,
|
||
|
this.element.style.position = "relative") : S = !1,
|
||
|
this.$element.wrapInner('<div class="scroll-content" />'),
|
||
|
this.$element.prepend('<div class="scroll-track"><div class="scroll-bar"></div></div>'),
|
||
|
_ = this.$element.find(".scroll-content").eq(0),
|
||
|
v || _.wrapInner("<div />"),
|
||
|
w = _.get(0),
|
||
|
y = this.$element.find(".scroll-track").eq(0),
|
||
|
x = y.find(".scroll-bar").eq(0),
|
||
|
C = y.get(0),
|
||
|
k = x.get(0),
|
||
|
$ = k.style,
|
||
|
y.hide(),
|
||
|
y.on("mousedown", i),
|
||
|
x.on("mousedown", n),
|
||
|
_.on("scroll", function() {
|
||
|
D && (z = parseInt(Math.round(this[f] * T)),
|
||
|
$[c] = z + "px"),
|
||
|
D = !1,
|
||
|
L && this.$element.trigger("scroll", [w])
|
||
|
}),
|
||
|
l.mouseWheel) {
|
||
|
var a = l.mouseWheelLock
|
||
|
, s = l.lockAnyway;
|
||
|
this.$element.on("mousewheel.ace_scroll DOMMouseScroll.ace_scroll", function(t) {
|
||
|
if (!g) {
|
||
|
if (!m)
|
||
|
return !s;
|
||
|
M && (M = !1,
|
||
|
e("html").off(".ace_scroll"),
|
||
|
e(P).off(".ace_scroll"),
|
||
|
H && o.$element.trigger("drag.end"));
|
||
|
var i = t.originalEvent.detail < 0 || t.originalEvent.wheelDelta > 0 ? 1 : -1
|
||
|
, n = !1
|
||
|
, r = w[h]
|
||
|
, l = w[f];
|
||
|
a || (n = -1 == i ? w[p] <= l + r : 0 == l),
|
||
|
o.move_bar(!0);
|
||
|
var c = parseInt(Math.round(Math.min(Math.max(r / 8, 54)), o.size)) + 1;
|
||
|
return w[f] = l - i * c,
|
||
|
n && !s
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
var r = ace.vars.touch && "ace_drag" in e.event.special && l.touchDrag;
|
||
|
if (r) {
|
||
|
var A = ""
|
||
|
, j = r ? "ace_drag" : "swipe";
|
||
|
this.$element.on(j + ".ace_scroll", function(e) {
|
||
|
if (g)
|
||
|
return void (e.retval.cancel = !0);
|
||
|
if (!m)
|
||
|
return void (e.retval.cancel = s);
|
||
|
if (A = e.direction,
|
||
|
v && ("up" == A || "down" == A) || !v && ("left" == A || "right" == A)) {
|
||
|
var t = v ? e.dy : e.dx;
|
||
|
0 != t && (Math.abs(t) > 20 && r && (t = 2 * t),
|
||
|
o.move_bar(!0),
|
||
|
w[f] = w[f] + t)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
l.hoverReset && this.$element.on("mouseenter.ace_scroll touchstart.ace_scroll", function() {
|
||
|
o.reset()
|
||
|
}),
|
||
|
v || _.children(0).css(d, this.size),
|
||
|
_.css(u, this.size),
|
||
|
g = !1,
|
||
|
b = !0
|
||
|
}
|
||
|
}
|
||
|
,
|
||
|
this.is_active = function() {
|
||
|
return m
|
||
|
}
|
||
|
,
|
||
|
this.is_enabled = function() {
|
||
|
return !g
|
||
|
}
|
||
|
,
|
||
|
this.move_bar = function(e) {
|
||
|
D = e
|
||
|
}
|
||
|
,
|
||
|
this.reset = function() {
|
||
|
if (!g) {
|
||
|
b || this.create();
|
||
|
var e = v ? w[p] : this.size;
|
||
|
if (v && 0 == e || !v && 0 == this.element.scrollWidth)
|
||
|
return void this.$element.removeClass("scroll-active");
|
||
|
var t = v ? this.size : w.clientWidth;
|
||
|
v || _.children(0).css(d, this.size),
|
||
|
_.css(u, this.size),
|
||
|
e > t ? (m = !0,
|
||
|
y.css(d, t).show(),
|
||
|
T = parseFloat((t / e).toFixed(5)),
|
||
|
A = parseInt(Math.round(t * T)),
|
||
|
E = parseInt(Math.round(A / 2)),
|
||
|
j = t - A,
|
||
|
z = parseInt(Math.round(w[f] * T)),
|
||
|
$[d] = A + "px",
|
||
|
$[c] = z + "px",
|
||
|
this.$element.addClass("scroll-active"),
|
||
|
I || (l.reset && (w[f] = 0,
|
||
|
$[c] = 0),
|
||
|
I = !0)) : (m = !1,
|
||
|
y.hide(),
|
||
|
this.$element.removeClass("scroll-active"),
|
||
|
_.css(u, ""))
|
||
|
}
|
||
|
}
|
||
|
,
|
||
|
this.disable = function() {
|
||
|
return w[f] = 0,
|
||
|
$[c] = 0,
|
||
|
g = !0,
|
||
|
m = !1,
|
||
|
y.hide(),
|
||
|
this.$element.removeClass("scroll-active"),
|
||
|
_.css(u, ""),
|
||
|
this
|
||
|
}
|
||
|
,
|
||
|
this.enable = function() {
|
||
|
return g = !1,
|
||
|
this.reset(),
|
||
|
this
|
||
|
}
|
||
|
,
|
||
|
this.destroy = function() {
|
||
|
return m = !1,
|
||
|
g = !1,
|
||
|
b = !1,
|
||
|
this.$element.removeClass("ace-scroll scroll-hz" + (l.extraClass ? " " + l.extraClass : "")),
|
||
|
this.$element.off(".ace_scroll"),
|
||
|
v || _.find("> div").children().unwrap(),
|
||
|
_.children().unwrap(),
|
||
|
_.remove(),
|
||
|
y.remove(),
|
||
|
S !== !1 && (this.element.style.position = S),
|
||
|
this
|
||
|
}
|
||
|
,
|
||
|
this.modify = function(t) {
|
||
|
return t && (l = e.extend({}, e.fn.ace_scroll.defaults, t)),
|
||
|
this.destroy(),
|
||
|
this.create(),
|
||
|
this.reset(),
|
||
|
this
|
||
|
}
|
||
|
,
|
||
|
this.update = function(e) {
|
||
|
return this.size = e.size,
|
||
|
this
|
||
|
}
|
||
|
,
|
||
|
this.update_scroll = function() {
|
||
|
D = !1,
|
||
|
$[c] = z + "px",
|
||
|
w[f] = parseInt(Math.round(z / T))
|
||
|
}
|
||
|
;
|
||
|
var N = -1
|
||
|
, q = -1;
|
||
|
return this.create(),
|
||
|
this.reset(),
|
||
|
this
|
||
|
}
|
||
|
;
|
||
|
e.fn.ace_scroll = function(i, n) {
|
||
|
var s, r = this.each(function() {
|
||
|
var t = e(this)
|
||
|
, r = t.data("ace_scroll")
|
||
|
, o = "object" == typeof i && i;
|
||
|
r || t.data("ace_scroll", r = new a(this,o)),
|
||
|
"string" == typeof i && (s = r[i](n))
|
||
|
});
|
||
|
return s === t ? r : s
|
||
|
}
|
||
|
,
|
||
|
e.fn.ace_scroll.defaults = {
|
||
|
size: 200,
|
||
|
horizontal: !1,
|
||
|
mouseWheel: !0,
|
||
|
mouseWheelLock: !1,
|
||
|
lockAnyway: !1,
|
||
|
styleClass: !1,
|
||
|
hoverReset: !0,
|
||
|
reset: !1,
|
||
|
dragEvent: !1,
|
||
|
touchDrag: !0,
|
||
|
touchSwipe: !1,
|
||
|
scrollEvent: !1
|
||
|
}
|
||
|
}(window.jQuery),
|
||
|
function(e, t) {
|
||
|
var a = function(t, a) {
|
||
|
var i = e.extend({}, e.fn.ace_colorpicker.defaults, a)
|
||
|
, n = e(t)
|
||
|
, s = ""
|
||
|
, r = ""
|
||
|
, o = null
|
||
|
, l = [];
|
||
|
n.addClass("hide").find("option").each(function() {
|
||
|
var e = "colorpick-btn"
|
||
|
, t = this.value.replace(/[^\w\s,#\(\)\.]/g, "");
|
||
|
this.value != t && (this.value = t),
|
||
|
this.selected && (e += " selected",
|
||
|
r = t),
|
||
|
l.push(t),
|
||
|
s += '<li><a class="' + e + '" href="#" style="background-color:' + t + ';" data-color="' + t + '"></a></li>'
|
||
|
}).end().on("change.color", function() {
|
||
|
n.next().find(".btn-colorpicker").css("background-color", this.value)
|
||
|
}).after('<div class="dropdown dropdown-colorpicker"> <a data-toggle="dropdown" class="dropdown-toggle" ' + (i.auto_pos ? 'data-position="auto"' : "") + ' href="#"><span class="btn-colorpicker" style="background-color:' + r + '"></span></a><ul class="dropdown-menu' + (i.caret ? " dropdown-caret" : "") + (i.pull_right ? " dropdown-menu-right" : "") + '">' + s + "</ul></div>");
|
||
|
var c = n.next().find(".dropdown-menu");
|
||
|
c.on(ace.click_event, function(t) {
|
||
|
var a = e(t.target);
|
||
|
if (!a.is(".colorpick-btn"))
|
||
|
return !1;
|
||
|
o && o.removeClass("selected"),
|
||
|
o = a,
|
||
|
o.addClass("selected");
|
||
|
var i = o.data("color");
|
||
|
return n.val(i).trigger("change"),
|
||
|
t.preventDefault(),
|
||
|
!0
|
||
|
}),
|
||
|
o = n.next().find("a.selected"),
|
||
|
this.pick = function(a, i) {
|
||
|
if ("number" == typeof a) {
|
||
|
if (a >= l.length)
|
||
|
return;
|
||
|
t.selectedIndex = a,
|
||
|
c.find("a:eq(" + a + ")").trigger(ace.click_event)
|
||
|
} else if ("string" == typeof a) {
|
||
|
var s = a.replace(/[^\w\s,#\(\)\.]/g, "");
|
||
|
if (a = l.indexOf(s),
|
||
|
-1 == a && i === !0 && (l.push(s),
|
||
|
e("<option />").appendTo(n).val(s),
|
||
|
e('<li><a class="colorpick-btn" href="#"></a></li>').appendTo(c).find("a").css("background-color", s).data("color", s),
|
||
|
a = l.length - 1),
|
||
|
-1 == a)
|
||
|
return;
|
||
|
c.find("a:eq(" + a + ")").trigger(ace.click_event)
|
||
|
}
|
||
|
}
|
||
|
,
|
||
|
this.destroy = function() {
|
||
|
n.removeClass("hide").off("change.color").next().remove(),
|
||
|
l = []
|
||
|
}
|
||
|
}
|
||
|
;
|
||
|
e.fn.ace_colorpicker = function(i, n) {
|
||
|
var s, r = this.each(function() {
|
||
|
var t = e(this)
|
||
|
, r = t.data("ace_colorpicker")
|
||
|
, o = "object" == typeof i && i;
|
||
|
r || t.data("ace_colorpicker", r = new a(this,o)),
|
||
|
"string" == typeof i && (s = r[i](n))
|
||
|
});
|
||
|
return s === t ? r : s
|
||
|
}
|
||
|
,
|
||
|
e.fn.ace_colorpicker.defaults = {
|
||
|
pull_right: !1,
|
||
|
caret: !0,
|
||
|
auto_pos: !0
|
||
|
}
|
||
|
}(window.jQuery),
|
||
|
function(e, t) {
|
||
|
var a = "multiple" in document.createElement("INPUT")
|
||
|
, i = "FileList" in window
|
||
|
, n = "FileReader" in window
|
||
|
, s = "File" in window
|
||
|
, r = function(t, a) {
|
||
|
var i = this;
|
||
|
this.settings = e.extend({}, e.fn.ace_file_input.defaults, a),
|
||
|
this.$element = e(t),
|
||
|
this.element = t,
|
||
|
this.disabled = !1,
|
||
|
this.can_reset = !0,
|
||
|
this.$element.off("change.ace_inner_call").on("change.ace_inner_call", function(e, t) {
|
||
|
return i.disabled || t === !0 ? void 0 : l.call(i)
|
||
|
});
|
||
|
var n = this.$element.closest("label").css({
|
||
|
display: "block"
|
||
|
})
|
||
|
, s = 0 == n.length ? "label" : "span";
|
||
|
this.$element.wrap("<" + s + ' class="ace-file-input" />'),
|
||
|
this.apply_settings(),
|
||
|
this.reset_input_field()
|
||
|
}
|
||
|
;
|
||
|
r.error = {
|
||
|
FILE_LOAD_FAILED: 1,
|
||
|
IMAGE_LOAD_FAILED: 2,
|
||
|
THUMBNAIL_FAILED: 3
|
||
|
},
|
||
|
r.prototype.apply_settings = function() {
|
||
|
var t = this;
|
||
|
this.multi = this.$element.attr("multiple") && a,
|
||
|
this.well_style = "well" == this.settings.style,
|
||
|
this.well_style ? this.$element.parent().addClass("ace-file-multiple") : this.$element.parent().removeClass("ace-file-multiple"),
|
||
|
this.$element.parent().find(":not(input[type=file])").remove(),
|
||
|
this.$element.after('<span class="ace-file-container" data-title="' + this.settings.btn_choose + '"><span class="ace-file-name" data-title="' + this.settings.no_file + '">' + (this.settings.no_icon ? '<i class="' + ace.vars.icon + this.settings.no_icon + '"></i>' : "") + "</span></span>"),
|
||
|
this.$label = this.$element.next(),
|
||
|
this.$container = this.$element.closest(".ace-file-input");
|
||
|
var n = !!this.settings.icon_remove;
|
||
|
if (n) {
|
||
|
var s = e('<a class="remove" href="#"><i class="' + ace.vars.icon + this.settings.icon_remove + '"></i></a>').appendTo(this.$element.parent());
|
||
|
s.on(ace.click_event, function(e) {
|
||
|
if (e.preventDefault(),
|
||
|
!t.can_reset)
|
||
|
return !1;
|
||
|
var a = !0;
|
||
|
if (t.settings.before_remove && (a = t.settings.before_remove.call(t.element)),
|
||
|
!a)
|
||
|
return !1;
|
||
|
t.reset_input();
|
||
|
return !1
|
||
|
})
|
||
|
}
|
||
|
this.settings.droppable && i && o.call(this)
|
||
|
}
|
||
|
,
|
||
|
r.prototype.show_file_list = function(t) {
|
||
|
var a = "undefined" == typeof t ? this.$element.data("ace_input_files") : t;
|
||
|
if (a && 0 != a.length) {
|
||
|
this.well_style && (this.$label.find(".ace-file-name").remove(),
|
||
|
this.settings.btn_change || this.$label.addClass("hide-placeholder")),
|
||
|
this.$label.attr("data-title", this.settings.btn_change).addClass("selected");
|
||
|
for (var i = 0; i < a.length; i++) {
|
||
|
var s = "string" == typeof a[i] ? a[i] : e.trim(a[i].name)
|
||
|
, r = s.lastIndexOf("\\") + 1;
|
||
|
0 == r && (r = s.lastIndexOf("/") + 1),
|
||
|
s = s.substr(r);
|
||
|
var o = "fa fa-file"
|
||
|
, l = "file";
|
||
|
if (/\.(jpe?g|png|gif|svg|bmp|tiff?)$/i.test(s) ? (o = "fa fa-picture-o file-image",
|
||
|
l = "image") : /\.(mpe?g|flv|mov|avi|swf|mp4|mkv|webm|wmv|3gp)$/i.test(s) ? (o = "fa fa-film file-video",
|
||
|
l = "video") : /\.(mp3|ogg|wav|wma|amr|aac)$/i.test(s) && (o = "fa fa-music file-audio",
|
||
|
l = "audio"),
|
||
|
this.well_style) {
|
||
|
this.$label.append('<span class="ace-file-name" data-title="' + s + '"><i class="' + ace.vars.icon + o + '"></i></span>');
|
||
|
var d = e.trim(a[i].type)
|
||
|
, u = n && this.settings.thumbnail && (d.length > 0 && d.match("image") || 0 == d.length && "image" == l);
|
||
|
if (u) {
|
||
|
var h = this;
|
||
|
e.when(c.call(this, a[i])).fail(function(e) {
|
||
|
h.settings.preview_error && h.settings.preview_error.call(h, s, e.code)
|
||
|
})
|
||
|
}
|
||
|
} else
|
||
|
this.$label.find(".ace-file-name").attr({
|
||
|
"data-title": s
|
||
|
}).find(ace.vars[".icon"]).attr("class", ace.vars.icon + o)
|
||
|
}
|
||
|
return !0
|
||
|
}
|
||
|
}
|
||
|
,
|
||
|
r.prototype.reset_input = function() {
|
||
|
this.reset_input_ui(),
|
||
|
this.reset_input_field()
|
||
|
}
|
||
|
,
|
||
|
r.prototype.reset_input_ui = function() {
|
||
|
this.$label.attr({
|
||
|
"data-title": this.settings.btn_choose,
|
||
|
"class": "ace-file-container"
|
||
|
}).find(".ace-file-name:first").attr({
|
||
|
"data-title": this.settings.no_file,
|
||
|
"class": "ace-file-name"
|
||
|
}).find(ace.vars[".icon"]).attr("class", ace.vars.icon + this.settings.no_icon).prev("img").remove(),
|
||
|
this.settings.no_icon || this.$label.find(ace.vars[".icon"]).remove(),
|
||
|
this.$label.find(".ace-file-name").not(":first").remove(),
|
||
|
this.reset_input_data()
|
||
|
}
|
||
|
,
|
||
|
r.prototype.reset_input_field = function() {
|
||
|
this.$element.wrap("<form>").parent().get(0).reset(),
|
||
|
this.$element.unwrap()
|
||
|
}
|
||
|
,
|
||
|
r.prototype.reset_input_data = function() {
|
||
|
this.$element.data("ace_input_files") && (this.$element.removeData("ace_input_files"),
|
||
|
this.$element.removeData("ace_input_method"))
|
||
|
}
|
||
|
,
|
||
|
r.prototype.enable_reset = function(e) {
|
||
|
this.can_reset = e
|
||
|
}
|
||
|
,
|
||
|
r.prototype.disable = function() {
|
||
|
this.disabled = !0,
|
||
|
this.$element.attr("disabled", "disabled").addClass("disabled")
|
||
|
}
|
||
|
,
|
||
|
r.prototype.enable = function() {
|
||
|
this.disabled = !1,
|
||
|
this.$element.removeAttr("disabled").removeClass("disabled")
|
||
|
}
|
||
|
,
|
||
|
r.prototype.files = function() {
|
||
|
return e(this).data("ace_input_files") || null
|
||
|
}
|
||
|
,
|
||
|
r.prototype.method = function() {
|
||
|
return e(this).data("ace_input_method") || ""
|
||
|
}
|
||
|
,
|
||
|
r.prototype.update_settings = function(t) {
|
||
|
this.settings = e.extend({}, this.settings, t),
|
||
|
this.apply_settings()
|
||
|
}
|
||
|
,
|
||
|
r.prototype.loading = function(t) {
|
||
|
if (t === !1)
|
||
|
this.$container.find(".ace-file-overlay").remove(),
|
||
|
this.element.removeAttribute("readonly");
|
||
|
else {
|
||
|
var a = "string" == typeof t ? t : '<i class="overlay-content fa fa-spin fa-spinner orange2 fa-2x"></i>'
|
||
|
, i = this.$container.find(".ace-file-overlay");
|
||
|
0 == i.length && (i = e('<div class="ace-file-overlay"></div>').appendTo(this.$container),
|
||
|
i.on("click tap", function(e) {
|
||
|
return e.stopImmediatePropagation(),
|
||
|
e.preventDefault(),
|
||
|
!1
|
||
|
}),
|
||
|
this.element.setAttribute("readonly", "true")),
|
||
|
i.empty().append(a)
|
||
|
}
|
||
|
}
|
||
|
;
|
||
|
var o = function() {
|
||
|
var e = this
|
||
|
, t = this.$element.parent();
|
||
|
t.off("dragenter").on("dragenter", function(e) {
|
||
|
e.preventDefault(),
|
||
|
e.stopPropagation()
|
||
|
}).off("dragover").on("dragover", function(e) {
|
||
|
e.preventDefault(),
|
||
|
e.stopPropagation()
|
||
|
}).off("drop").on("drop", function(t) {
|
||
|
if (t.preventDefault(),
|
||
|
t.stopPropagation(),
|
||
|
!e.disabled) {
|
||
|
var a = t.originalEvent.dataTransfer
|
||
|
, i = a.files;
|
||
|
if (!e.multi && i.length > 1) {
|
||
|
var n = [];
|
||
|
n.push(i[0]),
|
||
|
i = n
|
||
|
}
|
||
|
return i = u.call(e, i, !0),
|
||
|
i === !1 ? !1 : (e.$element.data("ace_input_method", "drop"),
|
||
|
e.$element.data("ace_input_files", i),
|
||
|
e.show_file_list(i),
|
||
|
e.$element.triggerHandler("change", [!0]),
|
||
|
!0)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
, l = function() {
|
||
|
var e = this.element.files || [this.element.value];
|
||
|
return e = u.call(this, e, !1),
|
||
|
e === !1 ? !1 : (this.$element.data("ace_input_method", "select"),
|
||
|
this.$element.data("ace_input_files", e),
|
||
|
this.show_file_list(e),
|
||
|
!0)
|
||
|
}
|
||
|
, c = function(t) {
|
||
|
var a = this
|
||
|
, i = a.$label.find(".ace-file-name:last")
|
||
|
, n = new e.Deferred
|
||
|
, s = new FileReader;
|
||
|
return s.onload = function(s) {
|
||
|
i.prepend("<img class='middle' style='display:none;' />");
|
||
|
var o = i.find("img:last").get(0);
|
||
|
e(o).one("load", function() {
|
||
|
var s = 50;
|
||
|
"large" == a.settings.thumbnail ? s = 150 : "fit" == a.settings.thumbnail && (s = i.width()),
|
||
|
i.addClass(s > 50 ? "large" : "");
|
||
|
var l = d(o, s, t.type);
|
||
|
if (null == l)
|
||
|
return e(this).remove(),
|
||
|
void n.reject({
|
||
|
code: r.error.THUMBNAIL_FAILED
|
||
|
});
|
||
|
var c = l.w
|
||
|
, u = l.h;
|
||
|
"small" == a.settings.thumbnail && (c = u = s),
|
||
|
e(o).css({
|
||
|
"background-image": "url(" + l.src + ")",
|
||
|
width: c,
|
||
|
height: u
|
||
|
}).data("thumb", l.src).attr({
|
||
|
src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
|
||
|
}).show(),
|
||
|
n.resolve()
|
||
|
}).one("error", function() {
|
||
|
i.find("img").remove(),
|
||
|
n.reject({
|
||
|
code: r.error.IMAGE_LOAD_FAILED
|
||
|
})
|
||
|
}),
|
||
|
o.src = s.target.result
|
||
|
}
|
||
|
,
|
||
|
s.onerror = function() {
|
||
|
n.reject({
|
||
|
code: r.error.FILE_LOAD_FAILED
|
||
|
})
|
||
|
}
|
||
|
,
|
||
|
s.readAsDataURL(t),
|
||
|
n.promise()
|
||
|
}
|
||
|
, d = function(t, a) {
|
||
|
var i = t.width
|
||
|
, n = t.height;
|
||
|
i = i > 0 ? i : e(t).width(),
|
||
|
n = n > 0 ? n : e(t).height(),
|
||
|
(i > a || n > a) && (i > n ? (n = parseInt(a / i * n),
|
||
|
i = a) : (i = parseInt(a / n * i),
|
||
|
n = a));
|
||
|
var s;
|
||
|
try {
|
||
|
var r = document.createElement("canvas");
|
||
|
r.width = i,
|
||
|
r.height = n;
|
||
|
var o = r.getContext("2d");
|
||
|
o.drawImage(t, 0, 0, t.width, t.height, 0, 0, i, n),
|
||
|
s = r.toDataURL()
|
||
|
} catch (l) {
|
||
|
s = null
|
||
|
}
|
||
|
return s ? (/^data\:image\/(png|jpe?g|gif);base64,[0-9A-Za-z\+\/\=]+$/.test(s) || (s = null ),
|
||
|
s ? {
|
||
|
src: s,
|
||
|
w: i,
|
||
|
h: n
|
||
|
} : null ) : null
|
||
|
}
|
||
|
, u = function(e, t) {
|
||
|
var a = p.call(this, e, t);
|
||
|
return -1 === a ? (this.reset_input(),
|
||
|
!1) : a && 0 != a.length ? ((a instanceof Array || i && a instanceof FileList) && (e = a),
|
||
|
a = !0,
|
||
|
this.settings.before_change && (a = this.settings.before_change.call(this.element, e, t)),
|
||
|
-1 === a ? (this.reset_input(),
|
||
|
!1) : a && 0 != a.length ? ((a instanceof Array || i && a instanceof FileList) && (e = a),
|
||
|
e) : (this.$element.data("ace_input_files") || this.reset_input(),
|
||
|
!1)) : (this.$element.data("ace_input_files") || this.reset_input(),
|
||
|
!1)
|
||
|
}
|
||
|
, h = function(e) {
|
||
|
return e ? ("string" == typeof e && (e = [e]),
|
||
|
0 == e.length ? null : new RegExp(".(?:" + e.join("|") + ")$","i")) : null
|
||
|
}
|
||
|
, f = function(e) {
|
||
|
return e ? ("string" == typeof e && (e = [e]),
|
||
|
0 == e.length ? null : new RegExp("^(?:" + e.join("|").replace(/\//g, "\\/") + ")$","i")) : null
|
||
|
}
|
||
|
, p = function(t, a) {
|
||
|
var i = h(this.settings.allowExt)
|
||
|
, n = h(this.settings.denyExt)
|
||
|
, r = f(this.settings.allowMime)
|
||
|
, o = f(this.settings.denyMime)
|
||
|
, l = this.settings.maxSize || !1;
|
||
|
if (!(i || n || r || o || l))
|
||
|
return !0;
|
||
|
for (var c = [], d = {}, u = 0; u < t.length; u++) {
|
||
|
var p = t[u]
|
||
|
, v = s ? p.name : p;
|
||
|
if (!i || i.test(v))
|
||
|
if (n && n.test(v))
|
||
|
"ext" in d || (d.ext = []),
|
||
|
d.ext.push(v);
|
||
|
else {
|
||
|
var g;
|
||
|
if (s) {
|
||
|
if ((g = e.trim(p.type)).length > 0) {
|
||
|
if (r && !r.test(g)) {
|
||
|
"mime" in d || (d.mime = []),
|
||
|
d.mime.push(v);
|
||
|
continue
|
||
|
}
|
||
|
if (o && o.test(g)) {
|
||
|
"mime" in d || (d.mime = []),
|
||
|
d.mime.push(v);
|
||
|
continue
|
||
|
}
|
||
|
}
|
||
|
l && p.size > l ? ("size" in d || (d.size = []),
|
||
|
d.size.push(v)) : c.push(p)
|
||
|
} else
|
||
|
c.push(p)
|
||
|
}
|
||
|
else
|
||
|
"ext" in d || (d.ext = []),
|
||
|
d.ext.push(v)
|
||
|
}
|
||
|
if (c.length == t.length)
|
||
|
return t;
|
||
|
var m = {
|
||
|
ext: 0,
|
||
|
mime: 0,
|
||
|
size: 0
|
||
|
};
|
||
|
"ext" in d && (m.ext = d.ext.length),
|
||
|
"mime" in d && (m.mime = d.mime.length),
|
||
|
"size" in d && (m.size = d.size.length);
|
||
|
var b;
|
||
|
return this.$element.trigger(b = new e.Event("file.error.ace"), {
|
||
|
file_count: t.length,
|
||
|
invalid_count: t.length - c.length,
|
||
|
error_list: d,
|
||
|
error_count: m,
|
||
|
dropped: a
|
||
|
}),
|
||
|
b.isDefaultPrevented() ? -1 : c
|
||
|
}
|
||
|
;
|
||
|
e.fn.ace_file_input = function(a, i) {
|
||
|
var n, s = this.each(function() {
|
||
|
var t = e(this)
|
||
|
, s = t.data("ace_file_input")
|
||
|
, o = "object" == typeof a && a;
|
||
|
s || t.data("ace_file_input", s = new r(this,o)),
|
||
|
"string" == typeof a && (n = s[a](i))
|
||
|
});
|
||
|
return n === t ? s : n
|
||
|
}
|
||
|
,
|
||
|
e.fn.ace_file_input.defaults = {
|
||
|
style: !1,
|
||
|
no_file: "No File ...",
|
||
|
no_icon: "fa fa-upload",
|
||
|
btn_choose: "Choose",
|
||
|
btn_change: "Change",
|
||
|
icon_remove: "fa fa-times",
|
||
|
droppable: !1,
|
||
|
thumbnail: !1,
|
||
|
allowExt: null ,
|
||
|
denyExt: null ,
|
||
|
allowMime: null ,
|
||
|
denyMime: null ,
|
||
|
maxSize: !1,
|
||
|
before_change: null ,
|
||
|
before_remove: null ,
|
||
|
preview_error: null
|
||
|
}
|
||
|
}(window.jQuery),
|
||
|
!function(e) {
|
||
|
"use strict";
|
||
|
var t = function(t, a) {
|
||
|
this.$element = e(t),
|
||
|
this.options = e.extend({}, e.fn.bs_typeahead.defaults, a),
|
||
|
this.matcher = this.options.matcher || this.matcher,
|
||
|
this.sorter = this.options.sorter || this.sorter,
|
||
|
this.highlighter = this.options.highlighter || this.highlighter,
|
||
|
this.updater = this.options.updater || this.updater,
|
||
|
this.source = this.options.source,
|
||
|
this.$menu = e(this.options.menu),
|
||
|
this.shown = !1,
|
||
|
this.listen()
|
||
|
}
|
||
|
;
|
||
|
t.prototype = {
|
||
|
constructor: t,
|
||
|
select: function() {
|
||
|
var e = this.$menu.find(".active").attr("data-value");
|
||
|
return this.$element.val(this.updater(e)).change(),
|
||
|
this.hide()
|
||
|
},
|
||
|
updater: function(e) {
|
||
|
return e
|
||
|
},
|
||
|
show: function() {
|
||
|
var t = e.extend({}, this.$element.position(), {
|
||
|
height: this.$element[0].offsetHeight
|
||
|
});
|
||
|
return this.$menu.insertAfter(this.$element).css({
|
||
|
top: t.top + t.height,
|
||
|
left: t.left
|
||
|
}).show(),
|
||
|
this.shown = !0,
|
||
|
this
|
||
|
},
|
||
|
hide: function() {
|
||
|
return this.$menu.hide(),
|
||
|
this.shown = !1,
|
||
|
this
|
||
|
},
|
||
|
lookup: function() {
|
||
|
var t;
|
||
|
return this.query = this.$element.val(),
|
||
|
!this.query || this.query.length < this.options.minLength ? this.shown ? this.hide() : this : (t = e.isFunction(this.source) ? this.source(this.query, e.proxy(this.process, this)) : this.source,
|
||
|
t ? this.process(t) : this)
|
||
|
},
|
||
|
process: function(t) {
|
||
|
var a = this;
|
||
|
return t = e.grep(t, function(e) {
|
||
|
return a.matcher(e)
|
||
|
}),
|
||
|
t = this.sorter(t),
|
||
|
t.length ? this.render(t.slice(0, this.options.items)).show() : this.shown ? this.hide() : this
|
||
|
},
|
||
|
matcher: function(e) {
|
||
|
return ~e.toLowerCase().indexOf(this.query.toLowerCase())
|
||
|
},
|
||
|
sorter: function(e) {
|
||
|
for (var t, a = [], i = [], n = []; t = e.shift(); )
|
||
|
t.toLowerCase().indexOf(this.query.toLowerCase()) ? ~t.indexOf(this.query) ? i.push(t) : n.push(t) : a.push(t);
|
||
|
return a.concat(i, n)
|
||
|
},
|
||
|
highlighter: function(e) {
|
||
|
var t = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
|
||
|
return e.replace(new RegExp("(" + t + ")","ig"), function(e, t) {
|
||
|
return "<strong>" + t + "</strong>"
|
||
|
})
|
||
|
},
|
||
|
render: function(t) {
|
||
|
var a = this;
|
||
|
return t = e(t).map(function(t, i) {
|
||
|
return t = e(a.options.item).attr("data-value", i),
|
||
|
t.find("a").html(a.highlighter(i)),
|
||
|
t[0]
|
||
|
}),
|
||
|
t.first().addClass("active"),
|
||
|
this.$menu.html(t),
|
||
|
this
|
||
|
},
|
||
|
next: function() {
|
||
|
var t = this.$menu.find(".active").removeClass("active")
|
||
|
, a = t.next();
|
||
|
a.length || (a = e(this.$menu.find("li")[0])),
|
||
|
a.addClass("active")
|
||
|
},
|
||
|
prev: function() {
|
||
|
var e = this.$menu.find(".active").removeClass("active")
|
||
|
, t = e.prev();
|
||
|
t.length || (t = this.$menu.find("li").last()),
|
||
|
t.addClass("active")
|
||
|
},
|
||
|
listen: function() {
|
||
|
this.$element.on("focus", e.proxy(this.focus, this)).on("blur", e.proxy(this.blur, this)).on("keypress", e.proxy(this.keypress, this)).on("keyup", e.proxy(this.keyup, this)),
|
||
|
this.eventSupported("keydown") && this.$element.on("keydown", e.proxy(this.keydown, this)),
|
||
|
this.$menu.on("click", e.proxy(this.click, this)).on("mouseenter", "li", e.proxy(this.mouseenter, this)).on("mouseleave", "li", e.proxy(this.mouseleave, this))
|
||
|
},
|
||
|
eventSupported: function(e) {
|
||
|
var t = e in this.$element;
|
||
|
return t || (this.$element.setAttribute(e, "return;"),
|
||
|
t = "function" == typeof this.$element[e]),
|
||
|
t
|
||
|
},
|
||
|
move: function(e) {
|
||
|
if (this.shown) {
|
||
|
switch (e.keyCode) {
|
||
|
case 9:
|
||
|
case 13:
|
||
|
case 27:
|
||
|
e.preventDefault();
|
||
|
break;
|
||
|
case 38:
|
||
|
e.preventDefault(),
|
||
|
this.prev();
|
||
|
break;
|
||
|
case 40:
|
||
|
e.preventDefault(),
|
||
|
this.next()
|
||
|
}
|
||
|
e.stopPropagation()
|
||
|
}
|
||
|
},
|
||
|
keydown: function(t) {
|
||
|
this.suppressKeyPressRepeat = ~e.inArray(t.keyCode, [40, 38, 9, 13, 27]),
|
||
|
this.move(t)
|
||
|
},
|
||
|
keypress: function(e) {
|
||
|
this.suppressKeyPressRepeat || this.move(e)
|
||
|
},
|
||
|
keyup: function(e) {
|
||
|
switch (e.keyCode) {
|
||
|
case 40:
|
||
|
case 38:
|
||
|
case 16:
|
||
|
case 17:
|
||
|
case 18:
|
||
|
break;
|
||
|
case 9:
|
||
|
case 13:
|
||
|
if (!this.shown)
|
||
|
return;
|
||
|
this.select();
|
||
|
break;
|
||
|
case 27:
|
||
|
if (!this.shown)
|
||
|
return;
|
||
|
this.hide();
|
||
|
break;
|
||
|
default:
|
||
|
this.lookup()
|
||
|
}
|
||
|
e.stopPropagation(),
|
||
|
e.preventDefault()
|
||
|
},
|
||
|
focus: function() {
|
||
|
this.focused = !0
|
||
|
},
|
||
|
blur: function() {
|
||
|
this.focused = !1,
|
||
|
!this.mousedover && this.shown && this.hide()
|
||
|
},
|
||
|
click: function(e) {
|
||
|
e.stopPropagation(),
|
||
|
e.preventDefault(),
|
||
|
this.select(),
|
||
|
this.$element.focus()
|
||
|
},
|
||
|
mouseenter: function(t) {
|
||
|
this.mousedover = !0,
|
||
|
this.$menu.find(".active").removeClass("active"),
|
||
|
e(t.currentTarget).addClass("active")
|
||
|
},
|
||
|
mouseleave: function() {
|
||
|
this.mousedover = !1,
|
||
|
!this.focused && this.shown && this.hide()
|
||
|
}
|
||
|
};
|
||
|
var a = e.fn.bs_typeahead;
|
||
|
e.fn.bs_typeahead = function(a) {
|
||
|
return this.each(function() {
|
||
|
var i = e(this)
|
||
|
, n = i.data("bs_typeahead")
|
||
|
, s = "object" == typeof a && a;
|
||
|
n || i.data("bs_typeahead", n = new t(this,s)),
|
||
|
"string" == typeof a && n[a]()
|
||
|
})
|
||
|
}
|
||
|
,
|
||
|
e.fn.bs_typeahead.defaults = {
|
||
|
source: [],
|
||
|
items: 8,
|
||
|
menu: '<ul class="typeahead dropdown-menu"></ul>',
|
||
|
item: '<li><a href="#"></a></li>',
|
||
|
minLength: 1
|
||
|
},
|
||
|
e.fn.bs_typeahead.Constructor = t,
|
||
|
e.fn.bs_typeahead.noConflict = function() {
|
||
|
return e.fn.bs_typeahead = a,
|
||
|
this
|
||
|
}
|
||
|
,
|
||
|
e(document).on("focus.bs_typeahead.data-api", '[data-provide="bs_typeahead"]', function() {
|
||
|
var t = e(this);
|
||
|
t.data("bs_typeahead") || t.bs_typeahead(t.data())
|
||
|
})
|
||
|
}(window.jQuery),
|
||
|
function(e) {
|
||
|
e.fn.ace_wysiwyg = function(t) {
|
||
|
var a = e.extend({
|
||
|
speech_button: !0,
|
||
|
wysiwyg: {}
|
||
|
}, t)
|
||
|
, i = ["#ac725e", "#d06b64", "#f83a22", "#fa573c", "#ff7537", "#ffad46", "#42d692", "#16a765", "#7bd148", "#b3dc6c", "#fbe983", "#fad165", "#92e1c0", "#9fe1e7", "#9fc6e7", "#4986e7", "#9a9cff", "#b99aff", "#c2c2c2", "#cabdbf", "#cca6ac", "#f691b2", "#cd74e6", "#a47ae2", "#444444"]
|
||
|
, n = {
|
||
|
font: {
|
||
|
values: ["Arial", "Courier", "Comic Sans MS", "Helvetica", "Open Sans", "Tahoma", "Verdana"],
|
||
|
icon: "fa fa-font",
|
||
|
title: "Font"
|
||
|
},
|
||
|
fontSize: {
|
||
|
values: {
|
||
|
5: "Huge",
|
||
|
3: "Normal",
|
||
|
1: "Small"
|
||
|
},
|
||
|
icon: "fa fa-text-height",
|
||
|
title: "Font Size"
|
||
|
},
|
||
|
bold: {
|
||
|
icon: "fa fa-bold",
|
||
|
title: "Bold (Ctrl/Cmd+B)"
|
||
|
},
|
||
|
italic: {
|
||
|
icon: "fa fa-italic",
|
||
|
title: "Italic (Ctrl/Cmd+I)"
|
||
|
},
|
||
|
strikethrough: {
|
||
|
icon: "fa fa-strikethrough",
|
||
|
title: "Strikethrough"
|
||
|
},
|
||
|
underline: {
|
||
|
icon: "fa fa-underline",
|
||
|
title: "Underline"
|
||
|
},
|
||
|
insertunorderedlist: {
|
||
|
icon: "fa fa-list-ul",
|
||
|
title: "Bullet list"
|
||
|
},
|
||
|
insertorderedlist: {
|
||
|
icon: "fa fa-list-ol",
|
||
|
title: "Number list"
|
||
|
},
|
||
|
outdent: {
|
||
|
icon: "fa fa-outdent",
|
||
|
title: "Reduce indent (Shift+Tab)"
|
||
|
},
|
||
|
indent: {
|
||
|
icon: "fa fa-indent",
|
||
|
title: "Indent (Tab)"
|
||
|
},
|
||
|
justifyleft: {
|
||
|
icon: "fa fa-align-left",
|
||
|
title: "Align Left (Ctrl/Cmd+L)"
|
||
|
},
|
||
|
justifycenter: {
|
||
|
icon: "fa fa-align-center",
|
||
|
title: "Center (Ctrl/Cmd+E)"
|
||
|
},
|
||
|
justifyright: {
|
||
|
icon: "fa fa-align-right",
|
||
|
title: "Align Right (Ctrl/Cmd+R)"
|
||
|
},
|
||
|
justifyfull: {
|
||
|
icon: "fa fa-align-justify",
|
||
|
title: "Justify (Ctrl/Cmd+J)"
|
||
|
},
|
||
|
createLink: {
|
||
|
icon: "fa fa-link",
|
||
|
title: "Hyperlink",
|
||
|
button_text: "Add",
|
||
|
placeholder: "URL",
|
||
|
button_class: "btn-primary"
|
||
|
},
|
||
|
unlink: {
|
||
|
icon: "fa fa-chain-broken",
|
||
|
title: "Remove Hyperlink"
|
||
|
},
|
||
|
insertImage: {
|
||
|
icon: "fa fa-picture-o",
|
||
|
title: "Insert picture",
|
||
|
button_text: '<i class="' + ace.vars.icon + 'fa fa-file"></i> Choose Image …',
|
||
|
placeholder: "Image URL",
|
||
|
button_insert: "Insert",
|
||
|
button_class: "btn-success",
|
||
|
button_insert_class: "btn-primary",
|
||
|
choose_file: !0
|
||
|
},
|
||
|
foreColor: {
|
||
|
values: i,
|
||
|
title: "Change Color"
|
||
|
},
|
||
|
backColor: {
|
||
|
values: i,
|
||
|
title: "Change Background Color"
|
||
|
},
|
||
|
undo: {
|
||
|
icon: "fa fa-undo",
|
||
|
title: "Undo (Ctrl/Cmd+Z)"
|
||
|
},
|
||
|
redo: {
|
||
|
icon: "fa fa-repeat",
|
||
|
title: "Redo (Ctrl/Cmd+Y)"
|
||
|
},
|
||
|
viewSource: {
|
||
|
icon: "fa fa-code",
|
||
|
title: "View Source"
|
||
|
}
|
||
|
}
|
||
|
, s = a.toolbar || ["font", null , "fontSize", null , "bold", "italic", "strikethrough", "underline", null , "insertunorderedlist", "insertorderedlist", "outdent", "indent", null , "justifyleft", "justifycenter", "justifyright", "justifyfull", null , "createLink", "unlink", null , "insertImage", null , "foreColor", null , "undo", "redo", null , "viewSource"];
|
||
|
return this.each(function() {
|
||
|
var t = ' <div class="wysiwyg-toolbar btn-toolbar center"> <div class="btn-group"> ';
|
||
|
for (var i in s)
|
||
|
if (s.hasOwnProperty(i)) {
|
||
|
var r = s[i];
|
||
|
if (null === r) {
|
||
|
t += ' </div> <div class="btn-group"> ';
|
||
|
continue
|
||
|
}
|
||
|
if ("string" == typeof r && r in n)
|
||
|
r = n[r],
|
||
|
r.name = s[i];
|
||
|
else {
|
||
|
if (!("object" == typeof r && r.name in n))
|
||
|
continue;r = e.extend(n[r.name], r)
|
||
|
}
|
||
|
var o = "className" in r ? r.className : "btn-default";
|
||
|
switch (r.name) {
|
||
|
case "font":
|
||
|
t += ' <a class="btn btn-sm ' + o + ' dropdown-toggle" data-toggle="dropdown" title="' + r.title + '"><i class="' + ace.vars.icon + r.icon + '"></i><i class="' + ace.vars.icon + 'fa fa-angle-down icon-on-right"></i></a> ',
|
||
|
t += ' <ul class="dropdown-menu dropdown-light dropdown-caret">';
|
||
|
for (var l in r.values)
|
||
|
r.values.hasOwnProperty(l) && (t += ' <li><a data-edit="fontName ' + r.values[l] + '" style="font-family:\'' + r.values[l] + "'\">" + r.values[l] + "</a></li> ");
|
||
|
t += " </ul>";
|
||
|
break;
|
||
|
case "fontSize":
|
||
|
t += ' <a class="btn btn-sm ' + o + ' dropdown-toggle" data-toggle="dropdown" title="' + r.title + '"><i class="' + ace.vars.icon + r.icon + '"></i> <i class="' + ace.vars.icon + 'fa fa-angle-down icon-on-right"></i></a> ',
|
||
|
t += ' <ul class="dropdown-menu dropdown-light dropdown-caret"> ';
|
||
|
for (var c in r.values)
|
||
|
r.values.hasOwnProperty(c) && (t += ' <li><a data-edit="fontSize ' + c + '"><font size="' + c + '">' + r.values[c] + "</font></a></li> ");
|
||
|
t += " </ul> ";
|
||
|
break;
|
||
|
case "createLink":
|
||
|
t += ' <div class="btn-group"> <a class="btn btn-sm ' + o + ' dropdown-toggle" data-toggle="dropdown" title="' + r.title + '"><i class="' + ace.vars.icon + r.icon + '"></i></a> ',
|
||
|
t += ' <div class="dropdown-menu dropdown-caret dropdown-menu-right"> <div class="input-group"> <input class="form-control" placeholder="' + r.placeholder + '" type="text" data-edit="' + r.name + '" /> <span class="input-group-btn"> <button class="btn btn-sm ' + r.button_class + '" type="button">' + r.button_text + "</button> </span> </div> </div> </div>";
|
||
|
break;
|
||
|
case "insertImage":
|
||
|
t += ' <div class="btn-group"> <a class="btn btn-sm ' + o + ' dropdown-toggle" data-toggle="dropdown" title="' + r.title + '"><i class="' + ace.vars.icon + r.icon + '"></i></a> ',
|
||
|
t += ' <div class="dropdown-menu dropdown-caret dropdown-menu-right"> <div class="input-group"> <input class="form-control" placeholder="' + r.placeholder + '" type="text" data-edit="' + r.name + '" /> <span class="input-group-btn"> <button class="btn btn-sm ' + r.button_insert_class + '" type="button">' + r.button_insert + "</button> </span> </div>",
|
||
|
r.choose_file && "FileReader" in window && (t += '<div class="space-2"></div> <label class="center block no-margin-bottom"> <button class="btn btn-sm ' + r.button_class + ' wysiwyg-choose-file" type="button">' + r.button_text + '</button> <input type="file" data-edit="' + r.name + '" /> </label>'),
|
||
|
t += " </div> </div>";
|
||
|
break;
|
||
|
case "foreColor":
|
||
|
case "backColor":
|
||
|
t += ' <select class="hide wysiwyg_colorpicker" title="' + r.title + '"> ';
|
||
|
for (var d in r.values)
|
||
|
t += ' <option value="' + r.values[d] + '">' + r.values[d] + "</option> ";
|
||
|
t += " </select> ",
|
||
|
t += ' <input style="display:none;" disabled class="hide" type="text" data-edit="' + r.name + '" /> ';
|
||
|
break;
|
||
|
case "viewSource":
|
||
|
t += ' <a class="btn btn-sm ' + o + '" data-view="source" title="' + r.title + '"><i class="' + ace.vars.icon + r.icon + '"></i></a> ';
|
||
|
break;
|
||
|
default:
|
||
|
t += ' <a class="btn btn-sm ' + o + '" data-edit="' + r.name + '" title="' + r.title + '"><i class="' + ace.vars.icon + r.icon + '"></i></a> '
|
||
|
}
|
||
|
}
|
||
|
t += " </div> ";
|
||
|
var u;
|
||
|
a.speech_button && "onwebkitspeechchange" in (u = document.createElement("input")) && (t += ' <input class="wysiwyg-speech-input" type="text" data-edit="inserttext" x-webkit-speech />'),
|
||
|
u = null ,
|
||
|
t += " </div> ",
|
||
|
t = a.toolbar_place ? a.toolbar_place.call(this, t) : e(this).before(t).prev(),
|
||
|
t.find("a[title]").tooltip({
|
||
|
animation: !1,
|
||
|
container: "body"
|
||
|
}),
|
||
|
t.find(".dropdown-menu input[type=text]").on("click", function() {
|
||
|
return !1
|
||
|
}).on("change", function() {
|
||
|
e(this).closest(".dropdown-menu").siblings(".dropdown-toggle").dropdown("toggle")
|
||
|
}).on("keydown", function(t) {
|
||
|
27 == t.which ? (this.value = "",
|
||
|
e(this).change()) : 13 == t.which && (t.preventDefault(),
|
||
|
t.stopPropagation(),
|
||
|
e(this).change())
|
||
|
}),
|
||
|
t.find("input[type=file]").prev().on(ace.click_event, function() {
|
||
|
e(this).next().click()
|
||
|
}),
|
||
|
t.find(".wysiwyg_colorpicker").each(function() {
|
||
|
e(this).ace_colorpicker({
|
||
|
pull_right: !0
|
||
|
}).change(function() {
|
||
|
e(this).nextAll("input").eq(0).val(this.value).change()
|
||
|
}).next().find(".btn-colorpicker").tooltip({
|
||
|
title: this.title,
|
||
|
animation: !1,
|
||
|
container: "body"
|
||
|
})
|
||
|
});
|
||
|
var h = e(this)
|
||
|
, f = !1;
|
||
|
t.find("a[data-view=source]").on("click", function(t) {
|
||
|
if (t.preventDefault(),
|
||
|
f) {
|
||
|
var a = h.next();
|
||
|
h.html(a.val()).show(),
|
||
|
a.remove(),
|
||
|
e(this).removeClass("active")
|
||
|
} else
|
||
|
e("<textarea />").css({
|
||
|
width: h.outerWidth(),
|
||
|
height: h.outerHeight()
|
||
|
}).val(h.html()).insertAfter(h),
|
||
|
h.hide(),
|
||
|
e(this).addClass("active");
|
||
|
f = !f
|
||
|
});
|
||
|
var p = e.extend({}, {
|
||
|
activeToolbarClass: "active",
|
||
|
toolbarSelector: t
|
||
|
}, a.wysiwyg || {});
|
||
|
e(this).wysiwyg(p)
|
||
|
}),
|
||
|
this
|
||
|
}
|
||
|
}(window.jQuery),
|
||
|
function(e, t) {
|
||
|
function a(t, a) {
|
||
|
var i = a.max;
|
||
|
i = ("" + i).length;
|
||
|
var n = parseInt(Math.max(20 * i + 40, 90))
|
||
|
, s = e(t);
|
||
|
s.addClass("spinner-input form-control").wrap('<div class="ace-spinner">');
|
||
|
var r = s.closest(".ace-spinner").spinner(a).wrapInner("<div class='input-group'></div>")
|
||
|
, o = r.data("spinner");
|
||
|
a.on_sides ? (s.before('<div class="spinner-buttons input-group-btn"> <button type="button" class="btn spinner-down btn-xs ' + a.btn_down_class + '"> <i class="' + ace.vars.icon + a.icon_down + '"></i> </button> </div>').after('<div class="spinner-buttons input-group-btn"> <button type="button" class="btn spinner-up btn-xs ' + a.btn_up_class + '"> <i class="' + ace.vars.icon + a.icon_up + '"></i> </button> </div>'),
|
||
|
r.addClass("touch-spinner"),
|
||
|
r.css("width", n + "px")) : (s.after('<div class="spinner-buttons input-group-btn"> <button type="button" class="btn spinner-up btn-xs ' + a.btn_up_class + '"> <i class="' + ace.vars.icon + a.icon_up + '"></i> </button> <button type="button" class="btn spinner-down btn-xs ' + a.btn_down_class + '"> <i class="' + ace.vars.icon + a.icon_down + '"></i> </button> </div>'),
|
||
|
ace.vars.touch || a.touch_spinner ? (r.addClass("touch-spinner"),
|
||
|
r.css("width", n + "px")) : (s.next().addClass("btn-group-vertical"),
|
||
|
r.css("width", n + "px"))),
|
||
|
s.on("mousewheel.spinner DOMMouseScroll.spinner", function(e) {
|
||
|
var t = e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0 ? 1 : -1;
|
||
|
return o.step(t > 0),
|
||
|
o.triggerChangedEvent(),
|
||
|
!1
|
||
|
}),
|
||
|
r.on("changed", function() {
|
||
|
s.trigger("change")
|
||
|
}),
|
||
|
this._call = function(e, t) {
|
||
|
o[e](t)
|
||
|
}
|
||
|
}
|
||
|
e.fn.ace_spinner = function(i, n) {
|
||
|
var s, r = this.each(function() {
|
||
|
var t = e(this)
|
||
|
, r = t.data("ace_spinner")
|
||
|
, o = "object" == typeof i && i;
|
||
|
r || (o = e.extend({}, e.fn.ace_spinner.defaults, i),
|
||
|
t.data("ace_spinner", r = new a(this,o))),
|
||
|
"string" == typeof i && (s = r._call(i, n))
|
||
|
});
|
||
|
return s === t ? r : s
|
||
|
}
|
||
|
,
|
||
|
e.fn.ace_spinner.defaults = {
|
||
|
icon_up: "fa fa-chevron-up",
|
||
|
icon_down: "fa fa-chevron-down",
|
||
|
on_sides: !1,
|
||
|
btn_up_class: "",
|
||
|
btn_down_class: "",
|
||
|
max: 999,
|
||
|
touch_spinner: !1
|
||
|
}
|
||
|
}(window.jQuery),
|
||
|
function(e) {
|
||
|
var t = {
|
||
|
"open-icon": ace.vars.icon + "fa fa-folder-open",
|
||
|
"close-icon": ace.vars.icon + "fa fa-folder",
|
||
|
selectable: !0,
|
||
|
"selected-icon": ace.vars.icon + "fa fa-check",
|
||
|
"unselected-icon": ace.vars.icon + "fa fa-times"
|
||
|
};
|
||
|
e.fn.ace_tree = function(a) {
|
||
|
return t = e.extend({}, t, a),
|
||
|
this.each(function() {
|
||
|
var a = e(this);
|
||
|
a.html('<div class="tree-folder" style="display:none;"> <div class="tree-folder-header"> <i class="' + ace.vars.icon + t["close-icon"] + '"></i> <div class="tree-folder-name"></div> </div> <div class="tree-folder-content"></div> <div class="tree-loader" style="display:none"></div> </div> <div class="tree-item" style="display:none;"> ' + (null == t["unselected-icon"] ? "" : '<i class="' + ace.vars.icon + t["unselected-icon"] + '"></i>') + ' <div class="tree-item-name"></div> </div>'),
|
||
|
a.addClass(1 == t.selectable ? "tree-selectable" : "tree-unselectable"),
|
||
|
a.tree(t)
|
||
|
}),
|
||
|
this
|
||
|
}
|
||
|
}(window.jQuery),
|
||
|
function(e) {
|
||
|
e.fn.ace_wizard = function(t) {
|
||
|
return this.each(function() {
|
||
|
var a = e(this);
|
||
|
a.wizard();
|
||
|
var i = a.siblings(".wizard-actions").eq(0)
|
||
|
, n = a.data("wizard");
|
||
|
n.$prevBtn.remove(),
|
||
|
n.$nextBtn.remove(),
|
||
|
n.$prevBtn = i.find(".btn-prev").eq(0).on(ace.click_event, function() {
|
||
|
n.previous()
|
||
|
}).attr("disabled", "disabled"),
|
||
|
n.$nextBtn = i.find(".btn-next").eq(0).on(ace.click_event, function() {
|
||
|
n.next()
|
||
|
}).removeAttr("disabled"),
|
||
|
n.nextText = n.$nextBtn.text();
|
||
|
var s = t && (t.selectedItem && t.selectedItem.step || t.step);
|
||
|
s && (n.currentStep = s,
|
||
|
n.setState())
|
||
|
}),
|
||
|
this
|
||
|
}
|
||
|
}(window.jQuery);
|