mirror of
https://github.com/a2nt/silverstripe-font-awesome.git
synced 2024-10-22 17:05:51 +02:00
990 lines
42 KiB
JavaScript
990 lines
42 KiB
JavaScript
(function(a, b) {
|
|
a.ui = a.ui || {};
|
|
var c, d = Math.max, e = Math.abs, f = Math.round, g = /left|center|right/, h = /top|center|bottom/, i = /[\+\-]\d+(\.[\d]+)?%?/, j = /^\w+/, k = /%$/, l = a.fn.pos;
|
|
function m(a, b, c) {
|
|
return [ parseFloat(a[0]) * (k.test(a[0]) ? b / 100 : 1), parseFloat(a[1]) * (k.test(a[1]) ? c / 100 : 1) ];
|
|
}
|
|
function n(b, c) {
|
|
return parseInt(a.css(b, c), 10) || 0;
|
|
}
|
|
function o(b) {
|
|
var c = b[0];
|
|
if (c.nodeType === 9) {
|
|
return {
|
|
width: b.width(),
|
|
height: b.height(),
|
|
offset: {
|
|
top: 0,
|
|
left: 0
|
|
}
|
|
};
|
|
}
|
|
if (a.isWindow(c)) {
|
|
return {
|
|
width: b.width(),
|
|
height: b.height(),
|
|
offset: {
|
|
top: b.scrollTop(),
|
|
left: b.scrollLeft()
|
|
}
|
|
};
|
|
}
|
|
if (c.preventDefault) {
|
|
return {
|
|
width: 0,
|
|
height: 0,
|
|
offset: {
|
|
top: c.pageY,
|
|
left: c.pageX
|
|
}
|
|
};
|
|
}
|
|
return {
|
|
width: b.outerWidth(),
|
|
height: b.outerHeight(),
|
|
offset: b.offset()
|
|
};
|
|
}
|
|
a.pos = {
|
|
scrollbarWidth: function() {
|
|
if (c !== b) {
|
|
return c;
|
|
}
|
|
var d, e, f = a("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), g = f.children()[0];
|
|
a("body").append(f);
|
|
d = g.offsetWidth;
|
|
f.css("overflow", "scroll");
|
|
e = g.offsetWidth;
|
|
if (d === e) {
|
|
e = f[0].clientWidth;
|
|
}
|
|
f.remove();
|
|
return c = d - e;
|
|
},
|
|
getScrollInfo: function(b) {
|
|
var c = b.isWindow || b.isDocument ? "" : b.element.css("overflow-x"), d = b.isWindow || b.isDocument ? "" : b.element.css("overflow-y"), e = c === "scroll" || c === "auto" && b.width < b.element[0].scrollWidth, f = d === "scroll" || d === "auto" && b.height < b.element[0].scrollHeight;
|
|
return {
|
|
width: f ? a.pos.scrollbarWidth() : 0,
|
|
height: e ? a.pos.scrollbarWidth() : 0
|
|
};
|
|
},
|
|
getWithinInfo: function(b) {
|
|
var c = a(b || window), d = a.isWindow(c[0]), e = !!c[0] && c[0].nodeType === 9;
|
|
return {
|
|
element: c,
|
|
isWindow: d,
|
|
isDocument: e,
|
|
offset: c.offset() || {
|
|
left: 0,
|
|
top: 0
|
|
},
|
|
scrollLeft: c.scrollLeft(),
|
|
scrollTop: c.scrollTop(),
|
|
width: d ? c.width() : c.outerWidth(),
|
|
height: d ? c.height() : c.outerHeight()
|
|
};
|
|
}
|
|
};
|
|
a.fn.pos = function(b) {
|
|
if (!b || !b.of) {
|
|
return l.apply(this, arguments);
|
|
}
|
|
b = a.extend({}, b);
|
|
var c, k, p, q, r, s, t = a(b.of), u = a.pos.getWithinInfo(b.within), v = a.pos.getScrollInfo(u), w = (b.collision || "flip").split(" "), x = {};
|
|
s = o(t);
|
|
if (t[0].preventDefault) {
|
|
b.at = "left top";
|
|
}
|
|
k = s.width;
|
|
p = s.height;
|
|
q = s.offset;
|
|
r = a.extend({}, q);
|
|
a.each([ "my", "at" ], function() {
|
|
var a = (b[this] || "").split(" "), c, d;
|
|
if (a.length === 1) {
|
|
a = g.test(a[0]) ? a.concat([ "center" ]) : h.test(a[0]) ? [ "center" ].concat(a) : [ "center", "center" ];
|
|
}
|
|
a[0] = g.test(a[0]) ? a[0] : "center";
|
|
a[1] = h.test(a[1]) ? a[1] : "center";
|
|
c = i.exec(a[0]);
|
|
d = i.exec(a[1]);
|
|
x[this] = [ c ? c[0] : 0, d ? d[0] : 0 ];
|
|
b[this] = [ j.exec(a[0])[0], j.exec(a[1])[0] ];
|
|
});
|
|
if (w.length === 1) {
|
|
w[1] = w[0];
|
|
}
|
|
if (b.at[0] === "right") {
|
|
r.left += k;
|
|
} else if (b.at[0] === "center") {
|
|
r.left += k / 2;
|
|
}
|
|
if (b.at[1] === "bottom") {
|
|
r.top += p;
|
|
} else if (b.at[1] === "center") {
|
|
r.top += p / 2;
|
|
}
|
|
c = m(x.at, k, p);
|
|
r.left += c[0];
|
|
r.top += c[1];
|
|
return this.each(function() {
|
|
var g, h, i = a(this), j = i.outerWidth(), l = i.outerHeight(), o = n(this, "marginLeft"), s = n(this, "marginTop"), y = j + o + n(this, "marginRight") + v.width, z = l + s + n(this, "marginBottom") + v.height, A = a.extend({}, r), B = m(x.my, i.outerWidth(), i.outerHeight());
|
|
if (b.my[0] === "right") {
|
|
A.left -= j;
|
|
} else if (b.my[0] === "center") {
|
|
A.left -= j / 2;
|
|
}
|
|
if (b.my[1] === "bottom") {
|
|
A.top -= l;
|
|
} else if (b.my[1] === "center") {
|
|
A.top -= l / 2;
|
|
}
|
|
A.left += B[0];
|
|
A.top += B[1];
|
|
if (!a.support.offsetFractions) {
|
|
A.left = f(A.left);
|
|
A.top = f(A.top);
|
|
}
|
|
g = {
|
|
marginLeft: o,
|
|
marginTop: s
|
|
};
|
|
a.each([ "left", "top" ], function(d, e) {
|
|
if (a.ui.pos[w[d]]) {
|
|
a.ui.pos[w[d]][e](A, {
|
|
targetWidth: k,
|
|
targetHeight: p,
|
|
elemWidth: j,
|
|
elemHeight: l,
|
|
collisionPosition: g,
|
|
collisionWidth: y,
|
|
collisionHeight: z,
|
|
offset: [ c[0] + B[0], c[1] + B[1] ],
|
|
my: b.my,
|
|
at: b.at,
|
|
within: u,
|
|
elem: i
|
|
});
|
|
}
|
|
});
|
|
if (b.using) {
|
|
h = function(a) {
|
|
var c = q.left - A.left, f = c + k - j, g = q.top - A.top, h = g + p - l, m = {
|
|
target: {
|
|
element: t,
|
|
left: q.left,
|
|
top: q.top,
|
|
width: k,
|
|
height: p
|
|
},
|
|
element: {
|
|
element: i,
|
|
left: A.left,
|
|
top: A.top,
|
|
width: j,
|
|
height: l
|
|
},
|
|
horizontal: f < 0 ? "left" : c > 0 ? "right" : "center",
|
|
vertical: h < 0 ? "top" : g > 0 ? "bottom" : "middle"
|
|
};
|
|
if (k < j && e(c + f) < k) {
|
|
m.horizontal = "center";
|
|
}
|
|
if (p < l && e(g + h) < p) {
|
|
m.vertical = "middle";
|
|
}
|
|
if (d(e(c), e(f)) > d(e(g), e(h))) {
|
|
m.important = "horizontal";
|
|
} else {
|
|
m.important = "vertical";
|
|
}
|
|
b.using.call(this, a, m);
|
|
};
|
|
}
|
|
i.offset(a.extend(A, {
|
|
using: h
|
|
}));
|
|
});
|
|
};
|
|
a.ui.pos = {
|
|
_trigger: function(a, b, c, d) {
|
|
if (b.elem) {
|
|
b.elem.trigger({
|
|
type: c,
|
|
position: a,
|
|
positionData: b,
|
|
triggered: d
|
|
});
|
|
}
|
|
},
|
|
fit: {
|
|
left: function(b, c) {
|
|
a.ui.pos._trigger(b, c, "posCollide", "fitLeft");
|
|
var e = c.within, f = e.isWindow ? e.scrollLeft : e.offset.left, g = e.width, h = b.left - c.collisionPosition.marginLeft, i = f - h, j = h + c.collisionWidth - g - f, k;
|
|
if (c.collisionWidth > g) {
|
|
if (i > 0 && j <= 0) {
|
|
k = b.left + i + c.collisionWidth - g - f;
|
|
b.left += i - k;
|
|
} else if (j > 0 && i <= 0) {
|
|
b.left = f;
|
|
} else {
|
|
if (i > j) {
|
|
b.left = f + g - c.collisionWidth;
|
|
} else {
|
|
b.left = f;
|
|
}
|
|
}
|
|
} else if (i > 0) {
|
|
b.left += i;
|
|
} else if (j > 0) {
|
|
b.left -= j;
|
|
} else {
|
|
b.left = d(b.left - h, b.left);
|
|
}
|
|
a.ui.pos._trigger(b, c, "posCollided", "fitLeft");
|
|
},
|
|
top: function(b, c) {
|
|
a.ui.pos._trigger(b, c, "posCollide", "fitTop");
|
|
var e = c.within, f = e.isWindow ? e.scrollTop : e.offset.top, g = c.within.height, h = b.top - c.collisionPosition.marginTop, i = f - h, j = h + c.collisionHeight - g - f, k;
|
|
if (c.collisionHeight > g) {
|
|
if (i > 0 && j <= 0) {
|
|
k = b.top + i + c.collisionHeight - g - f;
|
|
b.top += i - k;
|
|
} else if (j > 0 && i <= 0) {
|
|
b.top = f;
|
|
} else {
|
|
if (i > j) {
|
|
b.top = f + g - c.collisionHeight;
|
|
} else {
|
|
b.top = f;
|
|
}
|
|
}
|
|
} else if (i > 0) {
|
|
b.top += i;
|
|
} else if (j > 0) {
|
|
b.top -= j;
|
|
} else {
|
|
b.top = d(b.top - h, b.top);
|
|
}
|
|
a.ui.pos._trigger(b, c, "posCollided", "fitTop");
|
|
}
|
|
},
|
|
flip: {
|
|
left: function(b, c) {
|
|
a.ui.pos._trigger(b, c, "posCollide", "flipLeft");
|
|
var d = c.within, f = d.offset.left + d.scrollLeft, g = d.width, h = d.isWindow ? d.scrollLeft : d.offset.left, i = b.left - c.collisionPosition.marginLeft, j = i - h, k = i + c.collisionWidth - g - h, l = c.my[0] === "left" ? -c.elemWidth : c.my[0] === "right" ? c.elemWidth : 0, m = c.at[0] === "left" ? c.targetWidth : c.at[0] === "right" ? -c.targetWidth : 0, n = -2 * c.offset[0], o, p;
|
|
if (j < 0) {
|
|
o = b.left + l + m + n + c.collisionWidth - g - f;
|
|
if (o < 0 || o < e(j)) {
|
|
b.left += l + m + n;
|
|
}
|
|
} else if (k > 0) {
|
|
p = b.left - c.collisionPosition.marginLeft + l + m + n - h;
|
|
if (p > 0 || e(p) < k) {
|
|
b.left += l + m + n;
|
|
}
|
|
}
|
|
a.ui.pos._trigger(b, c, "posCollided", "flipLeft");
|
|
},
|
|
top: function(b, c) {
|
|
a.ui.pos._trigger(b, c, "posCollide", "flipTop");
|
|
var d = c.within, f = d.offset.top + d.scrollTop, g = d.height, h = d.isWindow ? d.scrollTop : d.offset.top, i = b.top - c.collisionPosition.marginTop, j = i - h, k = i + c.collisionHeight - g - h, l = c.my[1] === "top", m = l ? -c.elemHeight : c.my[1] === "bottom" ? c.elemHeight : 0, n = c.at[1] === "top" ? c.targetHeight : c.at[1] === "bottom" ? -c.targetHeight : 0, o = -2 * c.offset[1], p, q;
|
|
if (j < 0) {
|
|
q = b.top + m + n + o + c.collisionHeight - g - f;
|
|
if (b.top + m + n + o > j && (q < 0 || q < e(j))) {
|
|
b.top += m + n + o;
|
|
}
|
|
} else if (k > 0) {
|
|
p = b.top - c.collisionPosition.marginTop + m + n + o - h;
|
|
if (b.top + m + n + o > k && (p > 0 || e(p) < k)) {
|
|
b.top += m + n + o;
|
|
}
|
|
}
|
|
a.ui.pos._trigger(b, c, "posCollided", "flipTop");
|
|
}
|
|
},
|
|
flipfit: {
|
|
left: function() {
|
|
a.ui.pos.flip.left.apply(this, arguments);
|
|
a.ui.pos.fit.left.apply(this, arguments);
|
|
},
|
|
top: function() {
|
|
a.ui.pos.flip.top.apply(this, arguments);
|
|
a.ui.pos.fit.top.apply(this, arguments);
|
|
}
|
|
}
|
|
};
|
|
(function() {
|
|
var b, c, d, e, f, g = document.getElementsByTagName("body")[0], h = document.createElement("div");
|
|
b = document.createElement(g ? "div" : "body");
|
|
d = {
|
|
visibility: "hidden",
|
|
width: 0,
|
|
height: 0,
|
|
border: 0,
|
|
margin: 0,
|
|
background: "none"
|
|
};
|
|
if (g) {
|
|
a.extend(d, {
|
|
position: "absolute",
|
|
left: "-1000px",
|
|
top: "-1000px"
|
|
});
|
|
}
|
|
for (f in d) {
|
|
b.style[f] = d[f];
|
|
}
|
|
b.appendChild(h);
|
|
c = g || document.documentElement;
|
|
c.insertBefore(b, c.firstChild);
|
|
h.style.cssText = "position: absolute; left: 10.7432222px;";
|
|
e = a(h).offset().left;
|
|
a.support.offsetFractions = e > 10 && e < 11;
|
|
b.innerHTML = "";
|
|
c.removeChild(b);
|
|
})();
|
|
})(jQuery);
|
|
|
|
(function(a) {
|
|
"use strict";
|
|
if (typeof define === "function" && define.amd) {
|
|
define([ "jquery" ], a);
|
|
} else if (window.jQuery && !window.jQuery.fn.iconpicker) {
|
|
a(window.jQuery);
|
|
}
|
|
})(function(a) {
|
|
"use strict";
|
|
var b = {
|
|
isEmpty: function(a) {
|
|
return a === false || a === "" || a === null || a === undefined;
|
|
},
|
|
isEmptyObject: function(a) {
|
|
return this.isEmpty(a) === true || a.length === 0;
|
|
},
|
|
isElement: function(b) {
|
|
return a(b).length > 0;
|
|
},
|
|
isString: function(a) {
|
|
return typeof a === "string" || a instanceof String;
|
|
},
|
|
isArray: function(b) {
|
|
return a.isArray(b);
|
|
},
|
|
inArray: function(b, c) {
|
|
return a.inArray(b, c) !== -1;
|
|
},
|
|
throwError: function(a) {
|
|
throw "Font Awesome Icon Picker Exception: " + a;
|
|
}
|
|
};
|
|
var c = function(d, e) {
|
|
this._id = c._idCounter++;
|
|
this.element = a(d).addClass("iconpicker-element");
|
|
this._trigger("iconpickerCreate");
|
|
this.options = a.extend({}, c.defaultOptions, this.element.data(), e);
|
|
this.options.templates = a.extend({}, c.defaultOptions.templates, this.options.templates);
|
|
this.options.originalPlacement = this.options.placement;
|
|
this.container = b.isElement(this.options.container) ? a(this.options.container) : false;
|
|
if (this.container === false) {
|
|
this.container = this.element.is("input") ? this.element.parent() : this.element;
|
|
}
|
|
if (this.container.addClass("iconpicker-container").is(".dropdown-menu")) {
|
|
this.options.placement = "inline";
|
|
}
|
|
this.input = this.element.is("input") ? this.element.addClass("iconpicker-input") : false;
|
|
if (this.input === false) {
|
|
this.input = this.container.find(this.options.input);
|
|
}
|
|
this.component = this.container.find(this.options.component).addClass("iconpicker-component");
|
|
if (this.component.length === 0) {
|
|
this.component = false;
|
|
} else {
|
|
this.component.find("i").addClass(this.options.iconComponentBaseClass);
|
|
}
|
|
this._createPopover();
|
|
this._createIconpicker();
|
|
if (this.getAcceptButton().length === 0) {
|
|
this.options.mustAccept = false;
|
|
}
|
|
if (this.container.is(".input-group")) {
|
|
this.container.parent().append(this.popover);
|
|
} else {
|
|
this.container.append(this.popover);
|
|
}
|
|
this._bindElementEvents();
|
|
this._bindWindowEvents();
|
|
this.update(this.options.selected);
|
|
if (this.isInline()) {
|
|
this.show();
|
|
}
|
|
this._trigger("iconpickerCreated");
|
|
};
|
|
c._idCounter = 0;
|
|
c.defaultOptions = {
|
|
title: false,
|
|
selected: false,
|
|
defaultValue: false,
|
|
placement: "bottom",
|
|
collision: "none",
|
|
animation: true,
|
|
hideOnSelect: false,
|
|
showFooter: false,
|
|
searchInFooter: false,
|
|
mustAccept: false,
|
|
selectedCustomClass: "bg-primary",
|
|
icons: [],
|
|
iconBaseClass: "fa",
|
|
iconComponentBaseClass: "fa fa-fw",
|
|
iconClassPrefix: "fa-",
|
|
input: "input",
|
|
component: ".input-group-addon",
|
|
container: false,
|
|
templates: {
|
|
popover: '<div class="iconpicker-popover popover"><div class="arrow"></div>' + '<div class="popover-title"></div><div class="popover-content"></div></div>',
|
|
footer: '<div class="popover-footer"></div>',
|
|
buttons: '<button class="iconpicker-btn iconpicker-btn-cancel btn btn-default btn-sm">Cancel</button>' + ' <button class="iconpicker-btn iconpicker-btn-accept btn btn-primary btn-sm">Accept</button>',
|
|
search: '<input type="search" class="form-control iconpicker-search" placeholder="Type to filter" />',
|
|
iconpicker: '<div class="iconpicker"><div class="iconpicker-items"></div></div>',
|
|
iconpickerItem: '<div class="iconpicker-item"><i></i></div>'
|
|
}
|
|
};
|
|
c.batch = function(b, c) {
|
|
var d = Array.prototype.slice.call(arguments, 2);
|
|
return a(b).each(function() {
|
|
var b = a(this).data("iconpicker");
|
|
if (!!b) {
|
|
b[c].apply(b, d);
|
|
}
|
|
});
|
|
};
|
|
c.prototype = {
|
|
constructor: c,
|
|
options: {},
|
|
_id: 0,
|
|
_trigger: function(b, c) {
|
|
c = c || {};
|
|
this.element.trigger(a.extend({
|
|
type: b,
|
|
iconpickerInstance: this
|
|
}, c));
|
|
},
|
|
_createPopover: function() {
|
|
this.popover = a(this.options.templates.popover);
|
|
var c = this.popover.find(".popover-title");
|
|
if (!!this.options.title) {
|
|
c.append(a('<div class="popover-title-text">' + this.options.title + "</div>"));
|
|
}
|
|
if (!this.options.searchInFooter && !b.isEmpty(this.options.templates.buttons)) {
|
|
c.append(this.options.templates.search);
|
|
} else if (!this.options.title) {
|
|
c.remove();
|
|
}
|
|
if (this.options.showFooter && !b.isEmpty(this.options.templates.footer)) {
|
|
var d = a(this.options.templates.footer);
|
|
if (!b.isEmpty(this.options.templates.search) && this.options.searchInFooter) {
|
|
d.append(a(this.options.templates.search));
|
|
}
|
|
if (!b.isEmpty(this.options.templates.buttons)) {
|
|
d.append(a(this.options.templates.buttons));
|
|
}
|
|
this.popover.append(d);
|
|
}
|
|
if (this.options.animation === true) {
|
|
this.popover.addClass("fade");
|
|
}
|
|
return this.popover;
|
|
},
|
|
_createIconpicker: function() {
|
|
var b = this;
|
|
this.iconpicker = a(this.options.templates.iconpicker);
|
|
var c = function(c) {
|
|
var d = a(this);
|
|
if (d.is("." + b.options.iconBaseClass)) {
|
|
d = d.parent();
|
|
}
|
|
b._trigger("iconpickerSelect", {
|
|
iconpickerItem: d,
|
|
iconpickerValue: b.iconpickerValue
|
|
});
|
|
if (b.options.mustAccept === false) {
|
|
b.update(d.data("iconpickerValue"));
|
|
b._trigger("iconpickerSelected", {
|
|
iconpickerItem: this,
|
|
iconpickerValue: b.iconpickerValue
|
|
});
|
|
} else {
|
|
b.update(d.data("iconpickerValue"), true);
|
|
}
|
|
if (b.options.hideOnSelect && b.options.mustAccept === false) {
|
|
b.hide();
|
|
}
|
|
};
|
|
for (var d in this.options.icons) {
|
|
var e = a(this.options.templates.iconpickerItem);
|
|
e.find("i").addClass(b.options.iconBaseClass + " " + this.options.iconClassPrefix + this.options.icons[d]);
|
|
e.data("iconpickerValue", this.options.icons[d]).on("click.iconpicker", c);
|
|
this.iconpicker.find(".iconpicker-items").append(e.attr("title", "." + this.getValue(this.options.icons[d])));
|
|
}
|
|
this.popover.find(".popover-content").append(this.iconpicker);
|
|
return this.iconpicker;
|
|
},
|
|
_isEventInsideIconpicker: function(b) {
|
|
var c = a(b.target);
|
|
if ((!c.hasClass("iconpicker-element") || c.hasClass("iconpicker-element") && !c.is(this.element)) && c.parents(".iconpicker-popover").length === 0) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
_bindElementEvents: function() {
|
|
var c = this;
|
|
this.getSearchInput().on("keyup", function() {
|
|
c.filter(a(this).val().toLowerCase());
|
|
});
|
|
this.getAcceptButton().on("click.iconpicker", function() {
|
|
var a = c.iconpicker.find(".iconpicker-selected").get(0);
|
|
c.update(c.iconpickerValue);
|
|
c._trigger("iconpickerSelected", {
|
|
iconpickerItem: a,
|
|
iconpickerValue: c.iconpickerValue
|
|
});
|
|
if (!c.isInline()) {
|
|
c.hide();
|
|
}
|
|
});
|
|
this.getCancelButton().on("click.iconpicker", function() {
|
|
if (!c.isInline()) {
|
|
c.hide();
|
|
}
|
|
});
|
|
this.element.on("focus.iconpicker", function(a) {
|
|
c.show();
|
|
a.stopPropagation();
|
|
});
|
|
if (this.hasComponent()) {
|
|
this.component.on("click.iconpicker", function() {
|
|
c.toggle();
|
|
});
|
|
}
|
|
if (this.hasInput()) {
|
|
this.input.on("keyup.iconpicker", function(a) {
|
|
if (!b.inArray(a.keyCode, [ 38, 40, 37, 39, 16, 17, 18, 9, 8, 91, 93, 20, 46, 186, 190, 46, 78, 188, 44, 86 ])) {
|
|
c.update();
|
|
} else {
|
|
c._updateFormGroupStatus(c.getValid(this.value) !== false);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
_bindWindowEvents: function() {
|
|
var b = a(window.document);
|
|
var c = this;
|
|
var d = ".iconpicker.inst" + this._id;
|
|
a(window).on("resize.iconpicker" + d + " orientationchange.iconpicker" + d, function(a) {
|
|
if (c.popover.hasClass("in")) {
|
|
c.updatePlacement();
|
|
}
|
|
});
|
|
if (!c.isInline()) {
|
|
b.on("mouseup" + d, function(a) {
|
|
if (!c._isEventInsideIconpicker(a) && !c.isInline()) {
|
|
c.hide();
|
|
}
|
|
a.stopPropagation();
|
|
a.preventDefault();
|
|
return false;
|
|
});
|
|
}
|
|
return false;
|
|
},
|
|
_unbindElementEvents: function() {
|
|
this.popover.off(".iconpicker");
|
|
this.element.off(".iconpicker");
|
|
if (this.hasInput()) {
|
|
this.input.off(".iconpicker");
|
|
}
|
|
if (this.hasComponent()) {
|
|
this.component.off(".iconpicker");
|
|
}
|
|
if (this.hasContainer()) {
|
|
this.container.off(".iconpicker");
|
|
}
|
|
},
|
|
_unbindWindowEvents: function() {
|
|
a(window).off(".iconpicker.inst" + this._id);
|
|
a(window.document).off(".iconpicker.inst" + this._id);
|
|
},
|
|
updatePlacement: function(b, c) {
|
|
b = b || this.options.placement;
|
|
this.options.placement = b;
|
|
c = c || this.options.collision;
|
|
c = c === true ? "flip" : c;
|
|
var d = {
|
|
at: "right bottom",
|
|
my: "right top",
|
|
of: this.hasInput() ? this.input : this.container,
|
|
collision: c === true ? "flip" : c,
|
|
within: window
|
|
};
|
|
this.popover.removeClass("inline topLeftCorner topLeft top topRight topRightCorner " + "rightTop right rightBottom bottomRight bottomRightCorner " + "bottom bottomLeft bottomLeftCorner leftBottom left leftTop");
|
|
if (typeof b === "object") {
|
|
return this.popover.pos(a.extend({}, d, b));
|
|
}
|
|
switch (b) {
|
|
case "inline":
|
|
{
|
|
d = false;
|
|
}
|
|
break;
|
|
|
|
case "topLeftCorner":
|
|
{
|
|
d.my = "right bottom";
|
|
d.at = "left top";
|
|
}
|
|
break;
|
|
|
|
case "topLeft":
|
|
{
|
|
d.my = "left bottom";
|
|
d.at = "left top";
|
|
}
|
|
break;
|
|
|
|
case "top":
|
|
{
|
|
d.my = "center bottom";
|
|
d.at = "center top";
|
|
}
|
|
break;
|
|
|
|
case "topRight":
|
|
{
|
|
d.my = "right bottom";
|
|
d.at = "right top";
|
|
}
|
|
break;
|
|
|
|
case "topRightCorner":
|
|
{
|
|
d.my = "left bottom";
|
|
d.at = "right top";
|
|
}
|
|
break;
|
|
|
|
case "rightTop":
|
|
{
|
|
d.my = "left bottom";
|
|
d.at = "right center";
|
|
}
|
|
break;
|
|
|
|
case "right":
|
|
{
|
|
d.my = "left center";
|
|
d.at = "right center";
|
|
}
|
|
break;
|
|
|
|
case "rightBottom":
|
|
{
|
|
d.my = "left top";
|
|
d.at = "right center";
|
|
}
|
|
break;
|
|
|
|
case "bottomRightCorner":
|
|
{
|
|
d.my = "left top";
|
|
d.at = "right bottom";
|
|
}
|
|
break;
|
|
|
|
case "bottomRight":
|
|
{
|
|
d.my = "right top";
|
|
d.at = "right bottom";
|
|
}
|
|
break;
|
|
|
|
case "bottom":
|
|
{
|
|
d.my = "center top";
|
|
d.at = "center bottom";
|
|
}
|
|
break;
|
|
|
|
case "bottomLeft":
|
|
{
|
|
d.my = "left top";
|
|
d.at = "left bottom";
|
|
}
|
|
break;
|
|
|
|
case "bottomLeftCorner":
|
|
{
|
|
d.my = "right top";
|
|
d.at = "left bottom";
|
|
}
|
|
break;
|
|
|
|
case "leftBottom":
|
|
{
|
|
d.my = "right top";
|
|
d.at = "left center";
|
|
}
|
|
break;
|
|
|
|
case "left":
|
|
{
|
|
d.my = "right center";
|
|
d.at = "left center";
|
|
}
|
|
break;
|
|
|
|
case "leftTop":
|
|
{
|
|
d.my = "right bottom";
|
|
d.at = "left center";
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
return false;
|
|
}
|
|
break;
|
|
}
|
|
this.popover.css({
|
|
display: this.options.placement === "inline" ? "" : "block"
|
|
});
|
|
if (d !== false) {
|
|
this.popover.pos(d).css("maxWidth", a(window).width() - this.container.offset().left - 5);
|
|
} else {
|
|
this.popover.css({
|
|
top: "auto",
|
|
right: "auto",
|
|
bottom: "auto",
|
|
left: "auto",
|
|
maxWidth: "none"
|
|
});
|
|
}
|
|
this.popover.addClass(this.options.placement);
|
|
return true;
|
|
},
|
|
_updateComponents: function() {
|
|
this.iconpicker.find(".iconpicker-item.iconpicker-selected").removeClass("iconpicker-selected " + this.options.selectedCustomClass);
|
|
this.iconpicker.find("." + this.options.iconBaseClass + "." + this.options.iconClassPrefix + this.iconpickerValue).parent().addClass("iconpicker-selected " + this.options.selectedCustomClass);
|
|
if (this.hasComponent()) {
|
|
var a = this.component.find("i");
|
|
if (a.length > 0) {
|
|
a.attr("class", this.options.iconComponentBaseClass + " " + this.getValue());
|
|
} else {
|
|
this.component.html(this.getValueHtml());
|
|
}
|
|
}
|
|
},
|
|
_updateFormGroupStatus: function(a) {
|
|
if (this.hasInput()) {
|
|
if (a !== false) {
|
|
this.input.parents(".form-group:first").removeClass("has-error");
|
|
} else {
|
|
this.input.parents(".form-group:first").addClass("has-error");
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
getValid: function(c) {
|
|
if (!b.isString(c)) {
|
|
c = "";
|
|
}
|
|
var d = c === "";
|
|
c = a.trim(c.replace(this.options.iconClassPrefix, ""));
|
|
if (b.inArray(c, this.options.icons) || d) {
|
|
return c;
|
|
}
|
|
return false;
|
|
},
|
|
setValue: function(a) {
|
|
var b = this.getValid(a);
|
|
if (b !== false) {
|
|
this.iconpickerValue = b;
|
|
this._trigger("iconpickerSetValue", {
|
|
iconpickerValue: b
|
|
});
|
|
return this.iconpickerValue;
|
|
} else {
|
|
this._trigger("iconpickerInvalid", {
|
|
iconpickerValue: a
|
|
});
|
|
return false;
|
|
}
|
|
},
|
|
getValue: function(a) {
|
|
return this.options.iconClassPrefix + (a ? a : this.iconpickerValue);
|
|
},
|
|
getValueHtml: function() {
|
|
return '<i class="' + this.options.iconBaseClass + " " + this.getValue() + '"></i>';
|
|
},
|
|
setSourceValue: function(a) {
|
|
a = this.setValue(a);
|
|
if (a !== false && a !== "") {
|
|
if (this.hasInput()) {
|
|
this.input.val(this.getValue());
|
|
} else {
|
|
this.element.data("iconpickerValue", this.getValue());
|
|
}
|
|
this._trigger("iconpickerSetSourceValue", {
|
|
iconpickerValue: a
|
|
});
|
|
}
|
|
return a;
|
|
},
|
|
getSourceValue: function(a) {
|
|
a = a || this.options.defaultValue;
|
|
var b = a;
|
|
if (this.hasInput()) {
|
|
b = this.input.val();
|
|
} else {
|
|
b = this.element.data("iconpickerValue");
|
|
}
|
|
if (b === undefined || b === "" || b === null || b === false) {
|
|
b = a;
|
|
}
|
|
return b;
|
|
},
|
|
hasInput: function() {
|
|
return this.input !== false;
|
|
},
|
|
hasComponent: function() {
|
|
return this.component !== false;
|
|
},
|
|
hasContainer: function() {
|
|
return this.container !== false;
|
|
},
|
|
getAcceptButton: function() {
|
|
return this.popover.find(".iconpicker-btn-accept");
|
|
},
|
|
getCancelButton: function() {
|
|
return this.popover.find(".iconpicker-btn-cancel");
|
|
},
|
|
getSearchInput: function() {
|
|
return this.popover.find(".iconpicker-search");
|
|
},
|
|
filter: function(c) {
|
|
if (b.isEmpty(c)) {
|
|
this.iconpicker.find(".iconpicker-item").show();
|
|
return a(false);
|
|
} else {
|
|
var d = [];
|
|
this.iconpicker.find(".iconpicker-item").each(function() {
|
|
var b = a(this);
|
|
var e = b.attr("title").toLowerCase();
|
|
var f = false;
|
|
try {
|
|
f = new RegExp(c, "g");
|
|
} catch (g) {
|
|
f = false;
|
|
}
|
|
if (f !== false && e.match(f)) {
|
|
d.push(b);
|
|
b.show();
|
|
} else {
|
|
b.hide();
|
|
}
|
|
});
|
|
return d;
|
|
}
|
|
},
|
|
show: function() {
|
|
if (this.popover.hasClass("in")) {
|
|
return false;
|
|
}
|
|
a.iconpicker.batch(a(".iconpicker-popover.in:not(.inline)").not(this.popover), "hide");
|
|
this._trigger("iconpickerShow");
|
|
this.updatePlacement();
|
|
this.popover.addClass("in");
|
|
setTimeout(a.proxy(function() {
|
|
this.popover.css("display", this.isInline() ? "" : "block");
|
|
this._trigger("iconpickerShown");
|
|
}, this), this.options.animation ? 300 : 1);
|
|
},
|
|
hide: function() {
|
|
if (!this.popover.hasClass("in")) {
|
|
return false;
|
|
}
|
|
this._trigger("iconpickerHide");
|
|
this.popover.removeClass("in");
|
|
setTimeout(a.proxy(function() {
|
|
this.popover.css("display", "none");
|
|
this.getSearchInput().val("");
|
|
this.filter("");
|
|
this._trigger("iconpickerHidden");
|
|
}, this), this.options.animation ? 300 : 1);
|
|
},
|
|
toggle: function() {
|
|
if (this.popover.is(":visible")) {
|
|
this.hide();
|
|
} else {
|
|
this.show(true);
|
|
}
|
|
},
|
|
update: function(a, b) {
|
|
a = a ? a : this.getSourceValue(this.iconpickerValue);
|
|
this._trigger("iconpickerUpdate");
|
|
if (b === true) {
|
|
a = this.setValue(a);
|
|
} else {
|
|
a = this.setSourceValue(a);
|
|
this._updateFormGroupStatus(a !== false);
|
|
}
|
|
if (a !== false) {
|
|
this._updateComponents();
|
|
}
|
|
this._trigger("iconpickerUpdated");
|
|
return a;
|
|
},
|
|
destroy: function() {
|
|
this._trigger("iconpickerDestroy");
|
|
this.element.removeData("iconpicker").removeData("iconpickerValue").removeClass("iconpicker-element");
|
|
this._unbindElementEvents();
|
|
this._unbindWindowEvents();
|
|
a(this.popover).remove();
|
|
this._trigger("iconpickerDestroyed");
|
|
},
|
|
disable: function() {
|
|
if (this.hasInput()) {
|
|
this.input.prop("disabled", true);
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
enable: function() {
|
|
if (this.hasInput()) {
|
|
this.input.prop("disabled", false);
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
isDisabled: function() {
|
|
if (this.hasInput()) {
|
|
return this.input.prop("disabled") === true;
|
|
}
|
|
return false;
|
|
},
|
|
isInline: function() {
|
|
return this.options.placement === "inline" || this.popover.hasClass("inline");
|
|
}
|
|
};
|
|
a.iconpicker = c;
|
|
a.fn.iconpicker = function(b) {
|
|
return this.each(function() {
|
|
var d = a(this);
|
|
if (!d.data("iconpicker")) {
|
|
d.data("iconpicker", new c(this, typeof b === "object" ? b : {}));
|
|
}
|
|
});
|
|
};
|
|
c.defaultOptions.icons = [ "adjust", "adn", "align-center", "align-justify", "align-left", "align-right", "ambulance", "anchor", "android", "angle-double-down", "angle-double-left", "angle-double-right", "angle-double-up", "angle-down", "angle-left", "angle-right", "angle-up", "apple", "archive", "arrow-circle-down", "arrow-circle-left", "arrow-circle-o-down", "arrow-circle-o-left", "arrow-circle-o-right", "arrow-circle-o-up", "arrow-circle-right", "arrow-circle-up", "arrow-down", "arrow-left", "arrow-right", "arrow-up", "arrows", "arrows-alt", "arrows-h", "arrows-v", "asterisk", "automobile", "backward", "ban", "bank", "bar-chart-o", "barcode", "bars", "beer", "behance", "behance-square", "bell", "bell-o", "bitbucket", "bitbucket-square", "bitcoin", "bold", "bolt", "bomb", "book", "bookmark", "bookmark-o", "briefcase", "btc", "bug", "building", "building-o", "bullhorn", "bullseye", "cab", "calendar", "calendar-o", "camera", "camera-retro", "car", "caret-down", "caret-left", "caret-right", "caret-square-o-down", "caret-square-o-left", "caret-square-o-right", "caret-square-o-up", "caret-up", "certificate", "chain", "chain-broken", "check", "check-circle", "check-circle-o", "check-square", "check-square-o", "chevron-circle-down", "chevron-circle-left", "chevron-circle-right", "chevron-circle-up", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "child", "circle", "circle-o", "circle-o-notch", "circle-thin", "clipboard", "clock-o", "cloud", "cloud-download", "cloud-upload", "cny", "code", "code-fork", "codepen", "coffee", "cog", "cogs", "columns", "comment", "comment-o", "comments", "comments-o", "compass", "compress", "copy", "credit-card", "crop", "crosshairs", "css3", "cube", "cubes", "cut", "cutlery", "dashboard", "database", "dedent", "delicious", "desktop", "deviantart", "digg", "dollar", "dot-circle-o", "download", "dribbble", "dropbox", "drupal", "edit", "eject", "ellipsis-h", "ellipsis-v", "empire", "envelope", "envelope-o", "envelope-square", "eraser", "eur", "euro", "exchange", "exclamation", "exclamation-circle", "exclamation-triangle", "expand", "external-link", "external-link-square", "eye", "eye-slash", "facebook", "facebook-square", "fast-backward", "fast-forward", "fax", "female", "fighter-jet", "file", "file-archive-o", "file-audio-o", "file-code-o", "file-excel-o", "file-image-o", "file-movie-o", "file-o", "file-pdf-o", "file-photo-o", "file-picture-o", "file-powerpoint-o", "file-sound-o", "file-text", "file-text-o", "file-video-o", "file-word-o", "file-zip-o", "files-o", "film", "filter", "fire", "fire-extinguisher", "flag", "flag-checkered", "flag-o", "flash", "flask", "flickr", "floppy-o", "folder", "folder-o", "folder-open", "folder-open-o", "font", "forward", "foursquare", "frown-o", "gamepad", "gavel", "gbp", "ge", "gear", "gears", "gift", "git", "git-square", "github", "github-alt", "github-square", "gittip", "glass", "globe", "google", "google-plus", "google-plus-square", "graduation-cap", "group", "h-square", "hacker-news", "hand-o-down", "hand-o-left", "hand-o-right", "hand-o-up", "hdd-o", "header", "headphones", "heart", "heart-o", "history", "home", "hospital-o", "html5", "image", "inbox", "indent", "info", "info-circle", "inr", "instagram", "institution", "italic", "joomla", "jpy", "jsfiddle", "key", "keyboard-o", "krw", "language", "laptop", "leaf", "legal", "lemon-o", "level-down", "level-up", "life-bouy", "life-ring", "life-saver", "lightbulb-o", "link", "linkedin", "linkedin-square", "linux", "list", "list-alt", "list-ol", "list-ul", "location-arrow", "lock", "long-arrow-down", "long-arrow-left", "long-arrow-right", "long-arrow-up", "magic", "magnet", "mail-forward", "mail-reply", "mail-reply-all", "male", "map-marker", "maxcdn", "medkit", "meh-o", "microphone", "microphone-slash", "minus", "minus-circle", "minus-square", "minus-square-o", "mobile", "mobile-phone", "money", "moon-o", "mortar-board", "music", "navicon", "openid", "outdent", "pagelines", "paper-plane", "paper-plane-o", "paperclip", "paragraph", "paste", "pause", "paw", "pencil", "pencil-square", "pencil-square-o", "phone", "phone-square", "photo", "picture-o", "pied-piper", "pied-piper-alt", "pied-piper-square", "pinterest", "pinterest-square", "plane", "play", "play-circle", "play-circle-o", "plus", "plus-circle", "plus-square", "plus-square-o", "power-off", "print", "puzzle-piece", "qq", "qrcode", "question", "question-circle", "quote-left", "quote-right", "ra", "random", "rebel", "recycle", "reddit", "reddit-square", "refresh", "renren", "reorder", "repeat", "reply", "reply-all", "retweet", "rmb", "road", "rocket", "rotate-left", "rotate-right", "rouble", "rss", "rss-square", "rub", "ruble", "rupee", "save", "scissors", "search", "search-minus", "search-plus", "send", "send-o", "share", "share-alt", "share-alt-square", "share-square", "share-square-o", "shield", "shopping-cart", "sign-in", "sign-out", "signal", "sitemap", "skype", "slack", "sliders", "smile-o", "sort", "sort-alpha-asc", "sort-alpha-desc", "sort-amount-asc", "sort-amount-desc", "sort-asc", "sort-desc", "sort-down", "sort-numeric-asc", "sort-numeric-desc", "sort-up", "soundcloud", "space-shuttle", "spinner", "spoon", "spotify", "square", "square-o", "stack-exchange", "stack-overflow", "star", "star-half", "star-half-empty", "star-half-full", "star-half-o", "star-o", "steam", "steam-square", "step-backward", "step-forward", "stethoscope", "stop", "strikethrough", "stumbleupon", "stumbleupon-circle", "subscript", "suitcase", "sun-o", "superscript", "support", "table", "tablet", "tachometer", "tag", "tags", "tasks", "taxi", "tencent-weibo", "terminal", "text-height", "text-width", "th", "th-large", "th-list", "thumb-tack", "thumbs-down", "thumbs-o-down", "thumbs-o-up", "thumbs-up", "ticket", "times", "times-circle", "times-circle-o", "tint", "toggle-down", "toggle-left", "toggle-right", "toggle-up", "trash-o", "tree", "trello", "trophy", "truck", "try", "tumblr", "tumblr-square", "turkish-lira", "twitter", "twitter-square", "umbrella", "underline", "undo", "university", "unlink", "unlock", "unlock-alt", "unsorted", "upload", "usd", "user", "user-md", "users", "video-camera", "vimeo-square", "vine", "vk", "volume-down", "volume-off", "volume-up", "warning", "wechat", "weibo", "weixin", "wheelchair", "windows", "won", "wordpress", "wrench", "xing", "xing-square", "yahoo", "yen", "youtube", "youtube-play", "youtube-square" ];
|
|
}); |