3 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;
5 return [ parseFloat(a[0]) * (k.test(a[0]) ? b / 100 : 1), parseFloat(a[1]) * (k.test(a[1]) ? c / 100 : 1) ];
8 return parseInt(a.css(b, c), 10) || 0;
12 if (c.nodeType === 9) {
32 if (c.preventDefault) {
43 width: b.outerWidth(),
44 height: b.outerHeight(),
49 scrollbarWidth: function() {
53 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];
56 f.css("overflow", "scroll");
64 getScrollInfo: function(b) {
65 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;
67 width: f ? a.pos.scrollbarWidth() : 0,
68 height: e ? a.pos.scrollbarWidth() : 0
71 getWithinInfo: function(b) {
72 var c = a(b || window), d = a.isWindow(c[0]), e = !!c[0] && c[0].nodeType === 9;
77 offset: c.offset() || {
81 scrollLeft: c.scrollLeft(),
82 scrollTop: c.scrollTop(),
83 width: d ? c.width() : c.outerWidth(),
84 height: d ? c.height() : c.outerHeight()
88 a.fn.pos = function(b) {
90 return l.apply(this, arguments);
93 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 = {};
95 if (t[0].preventDefault) {
102 a.each([ "my", "at" ], function() {
103 var a = (b[this] || "").split(" "), c, d;
104 if (a.length === 1) {
105 a = g.test(a[0]) ? a.concat([ "center" ]) : h.test(a[0]) ? [ "center" ].concat(a) : [ "center", "center" ];
107 a[0] = g.test(a[0]) ? a[0] : "center";
108 a[1] = h.test(a[1]) ? a[1] : "center";
111 x[this] = [ c ? c[0] : 0, d ? d[0] : 0 ];
112 b[this] = [ j.exec(a[0])[0], j.exec(a[1])[0] ];
114 if (w.length === 1) {
117 if (b.at[0] === "right") {
119 } else if (b.at[0] === "center") {
122 if (b.at[1] === "bottom") {
124 } else if (b.at[1] === "center") {
130 return this.each(function() {
131 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());
132 if (b.my[0] === "right") {
134 } else if (b.my[0] === "center") {
137 if (b.my[1] === "bottom") {
139 } else if (b.my[1] === "center") {
144 if (!a.support.offsetFractions) {
152 a.each([ "left", "top" ], function(d, e) {
153 if (a.ui.pos[w[d]]) {
154 a.ui.pos[w[d]][e](A, {
159 collisionPosition: g,
162 offset: [ c[0] + B[0], c[1] + B[1] ],
172 var c = q.left - A.left, f = c + k - j, g = q.top - A.top, h = g + p - l, m = {
187 horizontal: f < 0 ? "left" : c > 0 ? "right" : "center",
188 vertical: h < 0 ? "top" : g > 0 ? "bottom" : "middle"
190 if (k < j && e(c + f) < k) {
191 m.horizontal = "center";
193 if (p < l && e(g + h) < p) {
194 m.vertical = "middle";
196 if (d(e(c), e(f)) > d(e(g), e(h))) {
197 m.important = "horizontal";
199 m.important = "vertical";
201 b.using.call(this, a, m);
204 i.offset(a.extend(A, {
210 _trigger: function(a, b, c, d) {
221 left: function(b, c) {
222 a.ui.pos._trigger(b, c, "posCollide", "fitLeft");
223 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;
224 if (c.collisionWidth > g) {
225 if (i > 0 && j <= 0) {
226 k = b.left + i + c.collisionWidth - g - f;
228 } else if (j > 0 && i <= 0) {
232 b.left = f + g - c.collisionWidth;
242 b.left = d(b.left - h, b.left);
244 a.ui.pos._trigger(b, c, "posCollided", "fitLeft");
246 top: function(b, c) {
247 a.ui.pos._trigger(b, c, "posCollide", "fitTop");
248 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;
249 if (c.collisionHeight > g) {
250 if (i > 0 && j <= 0) {
251 k = b.top + i + c.collisionHeight - g - f;
253 } else if (j > 0 && i <= 0) {
257 b.top = f + g - c.collisionHeight;
267 b.top = d(b.top - h, b.top);
269 a.ui.pos._trigger(b, c, "posCollided", "fitTop");
273 left: function(b, c) {
274 a.ui.pos._trigger(b, c, "posCollide", "flipLeft");
275 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;
277 o = b.left + l + m + n + c.collisionWidth - g - f;
278 if (o < 0 || o < e(j)) {
282 p = b.left - c.collisionPosition.marginLeft + l + m + n - h;
283 if (p > 0 || e(p) < k) {
287 a.ui.pos._trigger(b, c, "posCollided", "flipLeft");
289 top: function(b, c) {
290 a.ui.pos._trigger(b, c, "posCollide", "flipTop");
291 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;
293 q = b.top + m + n + o + c.collisionHeight - g - f;
294 if (b.top + m + n + o > j && (q < 0 || q < e(j))) {
298 p = b.top - c.collisionPosition.marginTop + m + n + o - h;
299 if (b.top + m + n + o > k && (p > 0 || e(p) < k)) {
303 a.ui.pos._trigger(b, c, "posCollided", "flipTop");
308 a.ui.pos.flip.left.apply(this, arguments);
309 a.ui.pos.fit.left.apply(this, arguments);
312 a.ui.pos.flip.top.apply(this, arguments);
313 a.ui.pos.fit.top.apply(this, arguments);
318 var b, c, d, e, f, g = document.getElementsByTagName("body")[0], h = document.createElement("div");
319 b = document.createElement(g ? "div" : "body");
321 visibility: "hidden",
330 position: "absolute",
339 c = g || document.documentElement;
340 c.insertBefore(b, c.firstChild);
341 h.style.cssText = "position: absolute; left: 10.7432222px;";
342 e = a(h).offset().left;
343 a.support.offsetFractions = e > 10 && e < 11;
351 if (typeof define === "function" && define.amd) {
352 define([ "jquery" ], a);
353 } else if (window.jQuery && !window.jQuery.fn.iconpicker) {
359 isEmpty: function(a) {
360 return a === false || a === "" || a === null || a === undefined;
362 isEmptyObject: function(a) {
363 return this.isEmpty(a) === true || a.length === 0;
365 isElement: function(b) {
366 return a(b).length > 0;
368 isString: function(a) {
369 return typeof a === "string" || a instanceof String;
371 isArray: function(b) {
374 inArray: function(b, c) {
375 return a.inArray(b, c) !== -1;
377 throwError: function(a) {
378 throw "Font Awesome Icon Picker Exception: " + a;
381 var c = function(d, e) {
382 this._id = c._idCounter++;
383 this.element = a(d).addClass("iconpicker-element");
384 this._trigger("iconpickerCreate");
385 this.options = a.extend({}, c.defaultOptions, this.element.data(), e);
386 this.options.templates = a.extend({}, c.defaultOptions.templates, this.options.templates);
387 this.options.originalPlacement = this.options.placement;
388 this.container = b.isElement(this.options.container) ? a(this.options.container) : false;
389 if (this.container === false) {
390 if (this.element.is(".dropdown-toggle")) {
391 this.container = a("~ .dropdown-menu:first", this.element);
393 this.container = this.element.is("input,textarea,button,.btn") ? this.element.parent() : this.element;
396 this.container.addClass("iconpicker-container");
397 if (this.isDropdownMenu()) {
398 this.options.templates.search = false;
399 this.options.templates.buttons = false;
400 this.options.placement = "inline";
402 this.input = this.element.is("input,textarea") ? this.element.addClass("iconpicker-input") : false;
403 if (this.input === false) {
404 this.input = this.container.find(this.options.input);
405 if (!this.input.is("input,textarea")) {
409 this.component = this.isDropdownMenu() ? this.container.parent().find(this.options.component) : this.container.find(this.options.component);
410 if (this.component.length === 0) {
411 this.component = false;
413 this.component.find("i").addClass("iconpicker-component");
415 this._createPopover();
416 this._createIconpicker();
417 if (this.getAcceptButton().length === 0) {
418 this.options.mustAccept = false;
420 if (this.isInputGroup()) {
421 this.container.parent().append(this.popover);
423 this.container.append(this.popover);
425 this._bindElementEvents();
426 this._bindWindowEvents();
427 this.update(this.options.selected);
428 if (this.isInline()) {
431 this._trigger("iconpickerCreated");
443 searchInFooter: false,
445 selectedCustomClass: "bg-primary",
447 fullClassFormatter: function(a) {
450 input: "input,.iconpicker-input",
453 component: ".input-group-addon,.iconpicker-component",
455 popover: '<div class="iconpicker-popover popover"><div class="arrow"></div>' + '<div class="popover-title"></div><div class="popover-content"></div></div>',
456 footer: '<div class="popover-footer"></div>',
457 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>',
458 search: '<input type="search" class="form-control iconpicker-search" placeholder="Type to filter" />',
459 iconpicker: '<div class="iconpicker"><div class="iconpicker-items"></div></div>',
460 iconpickerItem: '<a role="button" href="#" class="iconpicker-item"><span></span></a>'
463 c.batch = function(b, c) {
464 var d = Array.prototype.slice.call(arguments, 2);
465 return a(b).each(function() {
466 var b = a(this).data("iconpicker");
476 _trigger: function(b, c) {
478 this.element.trigger(a.extend({
480 iconpickerInstance: this
483 _createPopover: function() {
484 this.popover = a(this.options.templates.popover);
485 var c = this.popover.find(".popover-title");
486 if (!!this.options.title) {
487 c.append(a('<div class="popover-title-text">' + this.options.title + "</div>"));
489 if (this.hasSeparatedSearchInput() && !this.options.searchInFooter) {
490 c.append(this.options.templates.search);
491 } else if (!this.options.title) {
494 if (this.options.showFooter && !b.isEmpty(this.options.templates.footer)) {
495 var d = a(this.options.templates.footer);
496 if (this.hasSeparatedSearchInput() && this.options.searchInFooter) {
497 d.append(a(this.options.templates.search));
499 if (!b.isEmpty(this.options.templates.buttons)) {
500 d.append(a(this.options.templates.buttons));
502 this.popover.append(d);
504 if (this.options.animation === true) {
505 this.popover.addClass("fade");
509 _createIconpicker: function() {
511 this.iconpicker = a(this.options.templates.iconpicker);
512 var c = function(c) {
517 b._trigger("iconpickerSelect", {
519 iconpickerValue: b.iconpickerValue
521 if (b.options.mustAccept === false) {
522 b.update(d.data("iconpickerValue"));
523 b._trigger("iconpickerSelected", {
524 iconpickerItem: this,
525 iconpickerValue: b.iconpickerValue
528 b.update(d.data("iconpickerValue"), true);
530 if (b.options.hideOnSelect && b.options.mustAccept === false) {
536 for (var d in this.options.icons) {
537 var e = a(this.options.templates.iconpickerItem);
538 e.find("i").addClass(this.options.fullClassFormatter(this.options.icons[d]));
539 e.data("iconpickerValue", this.options.icons[d]).on("click.iconpicker", c);
540 this.iconpicker.find(".iconpicker-items").append(e.attr("title", "." + this.options.icons[d]));
542 this.popover.find(".popover-content").append(this.iconpicker);
543 return this.iconpicker;
545 _isEventInsideIconpicker: function(b) {
547 if ((!c.hasClass("iconpicker-element") || c.hasClass("iconpicker-element") && !c.is(this.element)) && c.parents(".iconpicker-popover").length === 0) {
552 _bindElementEvents: function() {
554 this.getSearchInput().on("keyup.iconpicker", function() {
555 c.filter(a(this).val().toLowerCase());
557 this.getAcceptButton().on("click.iconpicker", function() {
558 var a = c.iconpicker.find(".iconpicker-selected").get(0);
559 c.update(c.iconpickerValue);
560 c._trigger("iconpickerSelected", {
562 iconpickerValue: c.iconpickerValue
568 this.getCancelButton().on("click.iconpicker", function() {
573 this.element.on("focus.iconpicker", function(a) {
577 if (this.hasComponent()) {
578 this.component.on("click.iconpicker", function() {
582 if (this.hasInput()) {
583 this.input.on("keyup.iconpicker", function(d) {
584 if (!b.inArray(d.keyCode, [ 38, 40, 37, 39, 16, 17, 18, 9, 8, 91, 93, 20, 46, 186, 190, 46, 78, 188, 44, 86 ])) {
587 c._updateFormGroupStatus(c.getValid(this.value) !== false);
589 if (c.options.inputSearch === true) {
590 c.filter(a(this).val().toLowerCase());
595 _bindWindowEvents: function() {
596 var b = a(window.document);
598 var d = ".iconpicker.inst" + this._id;
599 a(window).on("resize.iconpicker" + d + " orientationchange.iconpicker" + d, function(a) {
600 if (c.popover.hasClass("in")) {
605 b.on("mouseup" + d, function(a) {
606 if (!c._isEventInsideIconpicker(a) && !c.isInline()) {
613 _unbindElementEvents: function() {
614 this.popover.off(".iconpicker");
615 this.element.off(".iconpicker");
616 if (this.hasInput()) {
617 this.input.off(".iconpicker");
619 if (this.hasComponent()) {
620 this.component.off(".iconpicker");
622 if (this.hasContainer()) {
623 this.container.off(".iconpicker");
626 _unbindWindowEvents: function() {
627 a(window).off(".iconpicker.inst" + this._id);
628 a(window.document).off(".iconpicker.inst" + this._id);
630 updatePlacement: function(b, c) {
631 b = b || this.options.placement;
632 this.options.placement = b;
633 c = c || this.options.collision;
634 c = c === true ? "flip" : c;
638 of: this.hasInput() && !this.isInputGroup() ? this.input : this.container,
639 collision: c === true ? "flip" : c,
642 this.popover.removeClass("inline topLeftCorner topLeft top topRight topRightCorner " + "rightTop right rightBottom bottomRight bottomRightCorner " + "bottom bottomLeft bottomLeftCorner leftBottom left leftTop");
643 if (typeof b === "object") {
644 return this.popover.pos(a.extend({}, d, b));
653 case "topLeftCorner":
655 d.my = "right bottom";
662 d.my = "left bottom";
669 d.my = "center bottom";
676 d.my = "right bottom";
681 case "topRightCorner":
683 d.my = "left bottom";
690 d.my = "left bottom";
691 d.at = "right center";
697 d.my = "left center";
698 d.at = "right center";
705 d.at = "right center";
709 case "bottomRightCorner":
712 d.at = "right bottom";
719 d.at = "right bottom";
726 d.at = "center bottom";
733 d.at = "left bottom";
737 case "bottomLeftCorner":
740 d.at = "left bottom";
747 d.at = "left center";
753 d.my = "right center";
754 d.at = "left center";
760 d.my = "right bottom";
761 d.at = "left center";
772 display: this.options.placement === "inline" ? "" : "block"
775 this.popover.pos(d).css("maxWidth", a(window).width() - this.container.offset().left - 5);
785 this.popover.addClass(this.options.placement);
788 _updateComponents: function() {
789 this.iconpicker.find(".iconpicker-item.iconpicker-selected").removeClass("iconpicker-selected " + this.options.selectedCustomClass);
790 if (this.iconpickerValue) {
791 this.iconpicker.find("." + this.options.fullClassFormatter(this.iconpickerValue).replace(/ /g, ".")).parent().addClass("iconpicker-selected " + this.options.selectedCustomClass);
793 if (this.hasComponent()) {
794 var a = this.component.find("i");
796 a.attr("class", this.options.fullClassFormatter(this.iconpickerValue));
798 this.component.html(this.getHtml());
802 _updateFormGroupStatus: function(a) {
803 if (this.hasInput()) {
805 this.input.parents(".form-group:first").removeClass("has-error");
807 this.input.parents(".form-group:first").addClass("has-error");
813 getValid: function(c) {
814 if (!b.isString(c)) {
819 if (b.inArray(c, this.options.icons) || d) {
824 setValue: function(a) {
825 var b = this.getValid(a);
827 this.iconpickerValue = b;
828 this._trigger("iconpickerSetValue", {
831 return this.iconpickerValue;
833 this._trigger("iconpickerInvalid", {
839 getHtml: function() {
840 return '<i class="' + this.options.fullClassFormatter(this.iconpickerValue) + '"></i>';
842 setSourceValue: function(a) {
843 a = this.setValue(a);
844 if (a !== false && a !== "") {
845 if (this.hasInput()) {
846 this.input.val(this.iconpickerValue);
848 this.element.data("iconpickerValue", this.iconpickerValue);
850 this._trigger("iconpickerSetSourceValue", {
856 getSourceValue: function(a) {
857 a = a || this.options.defaultValue;
859 if (this.hasInput()) {
860 b = this.input.val();
862 b = this.element.data("iconpickerValue");
864 if (b === undefined || b === "" || b === null || b === false) {
869 hasInput: function() {
870 return this.input !== false;
872 isInputSearch: function() {
873 return this.hasInput() && this.options.inputSearch === true;
875 isInputGroup: function() {
876 return this.container.is(".input-group");
878 isDropdownMenu: function() {
879 return this.container.is(".dropdown-menu");
881 hasSeparatedSearchInput: function() {
882 return this.options.templates.search !== false && !this.isInputSearch();
884 hasComponent: function() {
885 return this.component !== false;
887 hasContainer: function() {
888 return this.container !== false;
890 getAcceptButton: function() {
891 return this.popover.find(".iconpicker-btn-accept");
893 getCancelButton: function() {
894 return this.popover.find(".iconpicker-btn-cancel");
896 getSearchInput: function() {
897 return this.popover.find(".iconpicker-search");
899 filter: function(c) {
901 this.iconpicker.find(".iconpicker-item").show();
905 this.iconpicker.find(".iconpicker-item").each(function() {
907 var e = b.attr("title").toLowerCase();
910 f = new RegExp(c, "g");
914 if (f !== false && e.match(f)) {
925 if (this.popover.hasClass("in")) {
928 a.iconpicker.batch(a(".iconpicker-popover.in:not(.inline)").not(this.popover), "hide");
929 this._trigger("iconpickerShow");
930 this.updatePlacement();
931 this.popover.addClass("in");
932 setTimeout(a.proxy(function() {
933 this.popover.css("display", this.isInline() ? "" : "block");
934 this._trigger("iconpickerShown");
935 }, this), this.options.animation ? 300 : 1);
938 if (!this.popover.hasClass("in")) {
941 this._trigger("iconpickerHide");
942 this.popover.removeClass("in");
943 setTimeout(a.proxy(function() {
944 this.popover.css("display", "none");
945 this.getSearchInput().val("");
947 this._trigger("iconpickerHidden");
948 }, this), this.options.animation ? 300 : 1);
951 if (this.popover.is(":visible")) {
957 update: function(a, b) {
958 a = a ? a : this.getSourceValue(this.iconpickerValue);
959 this._trigger("iconpickerUpdate");
961 a = this.setValue(a);
963 a = this.setSourceValue(a);
964 this._updateFormGroupStatus(a !== false);
967 this._updateComponents();
969 this._trigger("iconpickerUpdated");
972 destroy: function() {
973 this._trigger("iconpickerDestroy");
974 this.element.removeData("iconpicker").removeData("iconpickerValue").removeClass("iconpicker-element");
975 this._unbindElementEvents();
976 this._unbindWindowEvents();
977 a(this.popover).remove();
978 this._trigger("iconpickerDestroyed");
980 disable: function() {
981 if (this.hasInput()) {
982 this.input.prop("disabled", true);
988 if (this.hasInput()) {
989 this.input.prop("disabled", false);
994 isDisabled: function() {
995 if (this.hasInput()) {
996 return this.input.prop("disabled") === true;
1000 isInline: function() {
1001 return this.options.placement === "inline" || this.popover.hasClass("inline");
1005 a.fn.iconpicker = function(b) {
1006 return this.each(function() {
1008 if (!d.data("iconpicker")) {
1009 d.data("iconpicker", new c(this, typeof b === "object" ? b : {}));
1013 c.defaultOptions.icons = [ 'No Icon','arrow_up', 'arrow_down', 'arrow_left', 'arrow_right', 'arrow_left-up', 'arrow_right-up', 'arrow_right-down', 'arrow_left-down', 'arrow-up-down', 'arrow_up-down_alt', 'arrow_left-right_alt', 'arrow_left-right', 'arrow_expand_alt2', 'arrow_expand_alt', 'arrow_condense', 'arrow_expand', 'arrow_move', 'arrow_carrot-up', 'arrow_carrot-down', 'arrow_carrot-left', 'arrow_carrot-right', 'arrow_carrot-2up', 'arrow_carrot-2down', 'arrow_carrot-2left', 'arrow_carrot-2right', 'arrow_carrot-up_alt2', 'arrow_carrot-down_alt2', 'arrow_carrot-left_alt2', 'arrow_carrot-right_alt2', 'arrow_carrot-2up_alt2', 'arrow_carrot-2down_alt2', 'arrow_carrot-2left_alt2', 'arrow_carrot-2right_alt2', 'arrow_triangle-up', 'arrow_triangle-down', 'arrow_triangle-left', 'arrow_triangle-right', 'arrow_triangle-up_alt2', 'arrow_triangle-down_alt2', 'arrow_triangle-left_alt2', 'arrow_triangle-right_alt2', 'arrow_back', 'icon_minus-06', 'icon_plus', 'icon_close', 'icon_check', 'icon_minus_alt2', 'icon_plus_alt2', 'icon_close_alt2', 'icon_check_alt2', 'icon_zoom-out_alt', 'icon_zoom-in_alt', 'icon_search', 'icon_box-empty', 'icon_box-selected', 'icon_minus-box', 'icon_plus-box', 'icon_box-checked', 'icon_circle-empty', 'icon_circle-slelected', 'icon_stop_alt2', 'icon_stop', 'icon_pause_alt2', 'icon_pause', 'icon_menu', 'icon_menu-square_alt2', 'icon_menu-circle_alt2', 'icon_ul', 'icon_ol', 'icon_adjust-horiz', 'icon_adjust-vert', 'icon_document_alt', 'icon_documents_alt', 'icon_pencil', 'icon_pencil-edit_alt', 'icon_pencil-edit', 'icon_folder-alt', 'icon_folder-open_alt', 'icon_folder-add_alt', 'icon_info_alt', 'icon_error-oct_alt', 'icon_error-circle_alt', 'icon_error-triangle_alt', 'icon_question_alt2', 'icon_question', 'icon_comment_alt', 'icon_chat_alt', 'icon_vol-mute_alt', 'icon_volume-low_alt', 'icon_volume-high_alt', 'icon_quotations', 'icon_quotations_alt2', 'icon_clock_alt', 'icon_lock_alt', 'icon_lock-open_alt', 'icon_key_alt', 'icon_cloud_alt', 'icon_cloud-upload_alt', 'icon_cloud-download_alt', 'icon_image', 'icon_images', 'icon_lightbulb_alt', 'icon_gift_alt', 'icon_house_alt', 'icon_genius', 'icon_mobile', 'icon_tablet', 'icon_laptop', 'icon_desktop', 'icon_camera_alt', 'icon_mail_alt', 'icon_cone_alt', 'icon_ribbon_alt', 'icon_bag_alt', 'icon_creditcard', 'icon_cart_alt', 'icon_paperclip', 'icon_tag_alt', 'icon_tags_alt', 'icon_trash_alt', 'icon_cursor_alt', 'icon_mic_alt', 'icon_compass_alt', 'icon_pin_alt', 'icon_pushpin_alt', 'icon_map_alt', 'icon_drawer_alt', 'icon_toolbox_alt', 'icon_book_alt', 'icon_calendar', 'icon_film', 'icon_table', 'icon_contacts_alt', 'icon_headphones', 'icon_lifesaver', 'icon_piechart', 'icon_refresh', 'icon_link_alt', 'icon_link', 'icon_loading', 'icon_blocked', 'icon_archive_alt', 'icon_heart_alt', 'icon_star_alt', 'icon_star-half_alt', 'icon_star', 'icon_star-half', 'icon_tools', 'icon_tool', 'icon_cog', 'icon_cogs', 'arrow_up_alt', 'arrow_down_alt', 'arrow_left_alt', 'arrow_right_alt', 'arrow_left-up_alt', 'arrow_right-up_alt', 'arrow_right-down_alt', 'arrow_left-down_alt', 'arrow_condense_alt', 'arrow_expand_alt3', 'arrow_carrot_up_alt', 'arrow_carrot-down_alt', 'arrow_carrot-left_alt', 'arrow_carrot-right_alt', 'arrow_carrot-2up_alt', 'arrow_carrot-2dwnn_alt', 'arrow_carrot-2left_alt', 'arrow_carrot-2right_alt', 'arrow_triangle-up_alt', 'arrow_triangle-down_alt', 'arrow_triangle-left_alt', 'arrow_triangle-right_alt', 'icon_minus_alt', 'icon_plus_alt', 'icon_close_alt', 'icon_check_alt', 'icon_zoom-out', 'icon_zoom-in', 'icon_stop_alt', 'icon_menu-square_alt', 'icon_menu-circle_alt', 'icon_document', 'icon_documents', 'icon_pencil_alt', 'icon_folder', 'icon_folder-open', 'icon_folder-add', 'icon_folder_upload', 'icon_folder_download', 'icon_info', 'icon_error-circle', 'icon_error-oct', 'icon_error-triangle', 'icon_question_alt', 'icon_comment', 'icon_chat', 'icon_vol-mute', 'icon_volume-low', 'icon_volume-high', 'icon_quotations_alt', 'icon_clock', 'icon_lock', 'icon_lock-open', 'icon_key', 'icon_cloud', 'icon_cloud-upload', 'icon_cloud-download', 'icon_lightbulb', 'icon_gift', 'icon_house', 'icon_camera', 'icon_mail', 'icon_cone', 'icon_ribbon', 'icon_bag', 'icon_cart', 'icon_tag', 'icon_tags', 'icon_trash', 'icon_cursor', 'icon_mic', 'icon_compass', 'icon_pin', 'icon_pushpin', 'icon_map', 'icon_drawer', 'icon_toolbox', 'icon_book', 'icon_contacts', 'icon_archive', 'icon_heart', 'icon_profile', 'icon_group', 'icon_grid-2x2', 'icon_grid-3x3', 'icon_music', 'icon_pause_alt', 'icon_phone', 'icon_upload', 'icon_download', 'social_facebook', 'social_twitter', 'social_pinterest', 'social_googleplus', 'social_tumblr', 'social_tumbleupon', 'social_wordpress', 'social_instagram', 'social_dribbble', 'social_vimeo', 'social_linkedin', 'social_rss', 'social_deviantart', 'social_share', 'social_myspace', 'social_skype', 'social_youtube', 'social_picassa', 'social_googledrive', 'social_flickr', 'social_blogger', 'social_spotify', 'social_delicious', 'social_facebook_circle', 'social_twitter_circle', 'social_pinterest_circle', 'social_googleplus_circle', 'social_tumblr_circle', 'social_stumbleupon_circle', 'social_wordpress_circle', 'social_instagram_circle', 'social_dribbble_circle', 'social_vimeo_circle', 'social_linkedin_circle', 'social_rss_circle', 'social_deviantart_circle', 'social_share_circle', 'social_myspace_circle', 'social_skype_circle', 'social_youtube_circle', 'social_picassa_circle', 'social_googledrive_alt2', 'social_flickr_circle', 'social_blogger_circle', 'social_spotify_circle', 'social_delicious_circle', 'social_facebook_square', 'social_twitter_square', 'social_pinterest_square', 'social_googleplus_square', 'social_tumblr_square', 'social_stumbleupon_square', 'social_wordpress_square', 'social_instagram_square', 'social_dribbble_square', 'social_vimeo_square', 'social_linkedin_square', 'social_rss_square', 'social_deviantart_square', 'social_share_square', 'social_myspace_square', 'social_skype_square', 'social_youtube_square', 'social_picassa_square', 'social_googledrive_square', 'social_flickr_square', 'social_blogger_square', 'social_spotify_square', 'social_delicious_square', 'icon_printer', 'icon_calulator', 'icon_building', 'icon_floppy', 'icon_drive', 'icon_search-2', 'icon_id', 'icon_id-2', 'icon_puzzle', 'icon_like', 'icon_dislike', 'icon_mug', 'icon_currency', 'icon_wallet', 'icon_pens', 'icon_easel', 'icon_flowchart', 'icon_datareport', 'icon_briefcase', 'icon_shield', 'icon_percent', 'icon_globe', 'icon_globe-2', 'icon_target', 'icon_hourglass', 'icon_balance', 'icon_rook', 'icon_printer-alt', 'icon_calculator_alt', 'icon_building_alt', 'icon_floppy_alt', 'icon_drive_alt', 'icon_search_alt', 'icon_id_alt', 'icon_id-2_alt', 'icon_puzzle_alt', 'icon_like_alt', 'icon_dislike_alt', 'icon_mug_alt', 'icon_currency_alt', 'icon_wallet_alt', 'icon_pens_alt', 'icon_easel_alt', 'icon_flowchart_alt', 'icon_datareport_alt', 'icon_briefcase_alt', 'icon_shield_alt', 'icon_percent_alt', 'icon_globe_alt', 'icon_clipboard' ];