first initial

This commit is contained in:
2025-05-27 19:09:17 +07:00
commit 80375d8af3
1587 changed files with 572586 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
/*!========================================================================
* File: bootstrap-iconpicker.css v1.10.0 by @victor-valencia
* https://victor-valencia.github.com/bootstrap-iconpicker
* ========================================================================
* Copyright 2013-2018 Victor Valencia Rico.
* Licensed under MIT license.
* https://github.com/victor-valencia/bootstrap-iconpicker/blob/master/LICENSE
* ========================================================================
*/
.iconpicker .caret {
margin-left: 10px !important;
}
.iconpicker {
min-width: 60px;
}
.iconpicker input.search-control {
margin-bottom: 6px;
margin-top: 6px;
}
div.iconpicker.left .table-icons {
margin-right: auto;
}
div.iconpicker.center .table-icons {
margin-left: auto;
margin-right: auto;
}
div.iconpicker.right .table-icons {
margin-left: auto;
}
.table-icons .btn {
min-height: 30px;
min-width: 35px;
text-align: center;
padding: 0;
margin: 2px;
}
.table-icons td {
min-width: 39px;
}
.popover {
max-width: inherit !important;
}
.iconpicker-popover {
z-index: 1050 !important;
}
.iconpicker-popover .search-control {
margin-bottom: 6px;
margin-top: 6px;
}

View File

@@ -0,0 +1,11 @@
/*!========================================================================
* File: bootstrap-iconpicker.min.css v1.10.0 by @victor-valencia
* https://victor-valencia.github.com/bootstrap-iconpicker
* ========================================================================
* Copyright 2013-2017 Victor Valencia Rico.
* Licensed under MIT license.
* https://github.com/victor-valencia/bootstrap-iconpicker/blob/master/LICENSE
* ========================================================================
*/
.iconpicker .caret{margin-left:10px!important}.iconpicker{min-width:60px}.iconpicker input.search-control{margin-bottom:6px;margin-top:6px}div.iconpicker.left .table-icons{margin-right:auto}div.iconpicker.center .table-icons{margin-left:auto;margin-right:auto}div.iconpicker.right .table-icons{margin-left:auto}.table-icons .btn{min-height:30px;min-width:35px;text-align:center;padding:0;margin:2px}.table-icons td{min-width:39px}.popover{max-width:inherit!important}.iconpicker-popover{z-index:1050!important}.iconpicker-popover .search-control{margin-bottom:6px;margin-top:6px}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,550 @@
/*!========================================================================
* File: bootstrap-iconpicker.js v1.10.0 by @victor-valencia
* https://victor-valencia.github.com/bootstrap-iconpicker
* ========================================================================
* Copyright 2013-2018 Victor Valencia Rico.
* Licensed under MIT license.
* https://github.com/victor-valencia/bootstrap-iconpicker/blob/master/LICENSE
* ========================================================================
*/
;(function($){ "use strict";
// ICONPICKER PUBLIC CLASS DEFINITION
// ==============================
var Iconpicker = function (element, options) {
if (typeof $.fn.popover === 'undefined' || typeof $.fn.popover.Constructor.VERSION === 'undefined') {
throw new TypeError('Bootstrap iconpicker require Bootstrap popover');
}
this.$element = $(element);
this.options = $.extend({}, Iconpicker.DEFAULTS, this.$element.data());
this.options = $.extend({}, this.options, options);
};
// ICONPICKER VERSION
// ==============================
Iconpicker.VERSION = '1.10.0';
// ICONPICKER ICONSET_EMPTY
// ==============================
Iconpicker.ICONSET_EMPTY = {
iconClass: '',
iconClassFix: '',
icons: []
};
// ICONPICKER ICONSET
// ==============================
Iconpicker.ICONSET = {
_custom: null,
elusiveicon: $.iconset_elusiveicon || Iconpicker.ICONSET_EMPTY,
flagicon: $.iconset_flagicon || Iconpicker.ICONSET_EMPTY,
fontawesome4: $.iconset_fontawesome_4 || Iconpicker.ICONSET_EMPTY,
fontawesome5: $.iconset_fontawesome_5 || Iconpicker.ICONSET_EMPTY,
glyphicon: $.iconset_glyphicon || Iconpicker.ICONSET_EMPTY,
ionicon: $.iconset_ionicon || Iconpicker.ICONSET_EMPTY,
mapicon: $.iconset_mapicon || Iconpicker.ICONSET_EMPTY,
materialdesign: $.iconset_materialdesign || Iconpicker.ICONSET_EMPTY,
octicon: $.iconset_octicon || Iconpicker.ICONSET_EMPTY,
typicon: $.iconset_typicon || Iconpicker.ICONSET_EMPTY,
weathericon: $.iconset_weathericon || Iconpicker.ICONSET_EMPTY
};
// ICONPICKER DEFAULTS
// ==============================
Iconpicker.DEFAULTS = {
align: 'center',
arrowClass: 'btn-primary',
arrowNextIconClass: 'fas fa-arrow-right',
arrowPrevIconClass: 'fas fa-arrow-left',
cols: 4,
icon: '',
iconset: 'fontawesome5',
iconsetVersion: 'lastest',
header: true,
labelHeader: '{0} / {1}',
footer: true,
labelFooter: '{0} - {1} of {2}',
placement: 'bottom',
rows: 4,
search: true,
searchText: 'Search icon',
selectedClass: 'btn-warning',
unselectedClass: 'btn-secondary'
};
// ICONPICKER PRIVATE METHODS
// ==============================
Iconpicker.prototype.bindEvents = function () {
var op = this.options;
var el = this;
op.table.find('.btn-previous, .btn-next').off('click').on('click', function(e) {
e.preventDefault();
if(!$(this).hasClass('disabled')){
var inc = parseInt($(this).val(), 10);
el.changeList(op.page + inc);
}
});
op.table.find('.btn-icon').off('click').on('click', function(e) {
e.preventDefault();
el.select($(this).val());
if(op.inline === false){
el.$element.popover(($.fn.bsVersion() === '3.x') ? 'destroy' : 'dispose');
}
else{
op.table.find("i[class$='" + $(this).val() + "']").parent().addClass(op.selectedClass);
}
});
op.table.find('.search-control').off('keyup').on('keyup', function() {
el.changeList(1);
});
};
Iconpicker.prototype.changeList = function (page) {
this.filterIcons();
this.updateLabels(page);
this.updateIcons(page);
this.options.page = page;
this.bindEvents();
};
Iconpicker.prototype.filterIcons = function () {
var op = this.options;
var search = op.table.find('.search-control').val();
var icons = [];
if(op.iconsetVersion != 'lastest' && typeof Iconpicker.ICONSET[op.iconset].allVersions != 'undefined'){
$.each(Iconpicker.ICONSET[op.iconset].allVersions, function(i, v){
if(op.iconsetVersion == v.version){
icons = v.icons;
}
});
}
else
icons = Iconpicker.ICONSET[op.iconset].icons;
if (search === "") {
op.icons = icons;
}
else {
var result = [];
$.each(icons, function(i, v) {
if (v.toLowerCase().indexOf(search) > -1) {
result.push(v);
}
});
op.icons = result;
}
};
Iconpicker.prototype.removeAddClass = function (target, remove, add) {
this.options.table.find(target).removeClass(remove).addClass(add);
return add;
};
Iconpicker.prototype.reset = function () {
this.updatePicker();
this.changeList(1);
};
Iconpicker.prototype.select = function (icon) {
var op = this.options;
var el = this.$element;
op.selected = $.inArray(icon.replace(op.iconClassFix, ''), op.icons);
if (op.selected === -1) {
op.selected = 0;
icon = op.iconClassFix + op.icons[op.selected];
}
if (icon !== '' && op.selected >= 0) {
op.icon = icon;
if(op.inline === false){
el.find('input').val(icon);
el.find('i').attr('class', '').addClass(op.iconClass).addClass(icon);
}
if(icon === op.iconClassFix){
el.trigger({ type: "change", icon: 'empty' });
}
else {
el.trigger({ type: "change", icon: icon });
el.find('input').val(icon);
}
op.table.find('button.' + op.selectedClass).removeClass(op.selectedClass);
}
};
Iconpicker.prototype.switchPage = function (icon) {
var op = this.options;
op.selected = $.inArray(icon.replace(op.iconClassFix, ''), op.icons);
if(op.selected >= 0) {
var page = Math.ceil((op.selected + 1) / this.totalIconsPerPage());
this.changeList(page);
}
if(icon === ''){
//if(op.iconClassFix !== '')
op.table.find('i.' + op.iconClassFix).parent().addClass(op.selectedClass);
//else
}
else{
op.table.find('i.' + icon).parent().addClass(op.selectedClass);
}
};
Iconpicker.prototype.totalPages = function () {
return Math.ceil(this.totalIcons() / this.totalIconsPerPage());
};
Iconpicker.prototype.totalIcons = function () {
return this.options.icons.length;
};
Iconpicker.prototype.totalIconsPerPage = function () {
if(this.options.rows === 0){
return this.options.icons.length;
}
else{
return this.options.cols * this.options.rows;
}
};
Iconpicker.prototype.updateArrows = function (page) {
var op = this.options;
var total_pages = this.totalPages();
if (page === 1) {
op.table.find('.btn-previous').addClass('disabled');
}
else {
op.table.find('.btn-previous').removeClass('disabled');
}
if (page === total_pages || total_pages === 0) {
op.table.find('.btn-next').addClass('disabled');
}
else {
op.table.find('.btn-next').removeClass('disabled');
}
};
Iconpicker.prototype.updateIcons = function (page) {
var op = this.options;
var tbody = op.table.find('tbody').empty();
var offset = (page - 1) * this.totalIconsPerPage();
var length = op.rows;
if(op.rows === 0){
length = op.icons.length;
}
for (var i = 0; i < length; i++) {
var tr = $('<tr></tr>');
for (var j = 0; j < op.cols; j++) {
var pos = offset + (i * op.cols) + j;
var btn = $('<button class="btn ' + op.unselectedClass + ' btn-icon"></button>').hide();
if (pos < op.icons.length) {
var v = op.iconClassFix + op.icons[pos];
btn.val(v).attr('title', v).append('<i class="' + op.iconClass + ' ' + v + '"></i>').show();
if (op.icon === v) {
btn.addClass(op.selectedClass).addClass('btn-icon-selected');
}
}
tr.append($('<td></td>').append(btn));
}
tbody.append(tr);
}
};
Iconpicker.prototype.updateIconsCount = function () {
var op = this.options;
if(op.footer === true){
var icons_count = [
'<tr>',
' <td colspan="' + op.cols + '" class="text-center">',
' <span class="icons-count"></span>',
' </td>',
'</tr>'
];
op.table.find('tfoot').empty().append(icons_count.join(''));
}
};
Iconpicker.prototype.updateLabels = function (page) {
var op = this.options;
var total_icons = this.totalIcons();
var total_pages = this.totalPages();
op.table.find('.page-count').html(op.labelHeader.replace('{0}', (total_pages === 0 ) ? 0 : page).replace('{1}', total_pages));
var offset = (page - 1) * this.totalIconsPerPage();
var total = page * this.totalIconsPerPage();
op.table.find('.icons-count').html(op.labelFooter.replace('{0}', total_icons ? offset + 1 : 0).replace('{1}', (total < total_icons) ? total: total_icons).replace('{2}', total_icons));
this.updateArrows(page);
};
Iconpicker.prototype.updatePagesCount = function () {
var op = this.options;
if(op.header === true){
var tr = $('<tr></tr>');
for (var i = 0; i < op.cols; i++) {
var td = $('<td class="text-center"></td>');
if (i === 0 || i === op.cols - 1) {
var arrow = [
'<button class="btn btn-arrow ' + ((i === 0) ? 'btn-previous' : 'btn-next') + ' ' + op.arrowClass + '" value="' + ((i === 0) ? -1 : 1) + '">',
'<span class="' + ((i === 0) ? op.arrowPrevIconClass : op.arrowNextIconClass) + '"></span>',
'</button>'
];
td.append(arrow.join(''));
tr.append(td);
}
else if (tr.find('.page-count').length === 0) {
td.attr('colspan', op.cols - 2).append('<span class="page-count"></span>');
tr.append(td);
}
}
op.table.find('thead').empty().append(tr);
}
};
Iconpicker.prototype.updatePicker = function () {
var op = this.options;
if (op.cols < 4) {
throw 'Iconpicker => The number of columns must be greater than or equal to 4. [option.cols = ' + op.cols + ']';
}
else if (op.rows < 0) {
throw 'Iconpicker => The number of rows must be greater than or equal to 0. [option.rows = ' + op.rows + ']';
}
else {
this.updatePagesCount();
this.updateSearch();
this.updateIconsCount();
}
};
Iconpicker.prototype.updateSearch = function () {
var op = this.options;
var search = [
'<tr>',
' <td colspan="' + op.cols + '">',
' <input type="text" class="form-control search-control" style="width: ' + op.cols * (($.fn.bsVersion() === '3.x') ? 39 : 41) + 'px;" placeholder="' + op.searchText + '">',
' </td>',
'</tr>'
];
search = $(search.join(''));
if (op.search === true) {
search.show();
}
else {
search.hide();
}
op.table.find('thead').append(search);
};
// ICONPICKER PUBLIC METHODS
// ==============================
Iconpicker.prototype.setAlign = function (value) {
this.$element.removeClass(this.options.align).addClass(value);
this.options.align = value;
};
Iconpicker.prototype.setArrowClass = function (value) {
this.options.arrowClass = this.removeAddClass('.btn-arrow', this.options.arrowClass, value);
};
Iconpicker.prototype.setArrowNextIconClass = function (value) {
this.options.arrowNextIconClass = this.removeAddClass('.btn-next > span', this.options.arrowNextIconClass, value);
};
Iconpicker.prototype.setArrowPrevIconClass = function (value) {
this.options.arrowPrevIconClass = this.removeAddClass('.btn-previous > span', this.options.arrowPrevIconClass, value);
};
Iconpicker.prototype.setCols = function (value) {
this.options.cols = value;
this.reset();
};
Iconpicker.prototype.setFooter = function (value) {
var footer = this.options.table.find('tfoot');
if (value === true) {
footer.show();
}
else {
footer.hide();
}
this.options.footer = value;
};
Iconpicker.prototype.setHeader = function (value) {
var header = this.options.table.find('thead');
if (value === true) {
header.show();
}
else {
header.hide();
}
this.options.header = value;
};
Iconpicker.prototype.setIcon = function (value) {
this.select(value);
};
Iconpicker.prototype.setIconset = function (value) {
var op = this.options;
if ($.isPlainObject(value)) {
Iconpicker.ICONSET._custom = $.extend(Iconpicker.ICONSET_EMPTY, value);
op.iconset = '_custom';
}
else if (!Iconpicker.ICONSET.hasOwnProperty(value)) {
op.iconset = Iconpicker.DEFAULTS.iconset;
}
else {
op.iconset = value;
}
op = $.extend(op, Iconpicker.ICONSET[op.iconset]);
this.reset();
this.select(op.icon);
};
Iconpicker.prototype.setLabelHeader = function (value) {
this.options.labelHeader = value;
this.updateLabels(this.options.page);
};
Iconpicker.prototype.setLabelFooter = function (value) {
this.options.labelFooter = value;
this.updateLabels(this.options.page);
};
Iconpicker.prototype.setPlacement = function (value) {
this.options.placement = value;
};
Iconpicker.prototype.setRows = function (value) {
this.options.rows = value;
this.reset();
};
Iconpicker.prototype.setSearch = function (value) {
var search = this.options.table.find('.search-control');
if (value === true) {
search.show();
}
else {
search.hide();
}
search.val('');
this.changeList(1);
this.options.search = value;
};
Iconpicker.prototype.setSearchText = function (value) {
this.options.table.find('.search-control').attr('placeholder', value);
this.options.searchText = value;
};
Iconpicker.prototype.setSelectedClass = function (value) {
this.options.selectedClass = this.removeAddClass('.btn-icon-selected', this.options.selectedClass, value);
};
Iconpicker.prototype.setUnselectedClass = function (value) {
this.options.unselectedClass = this.removeAddClass('.btn-icon', this.options.unselectedClass, value);
};
// ICONPICKER PLUGIN DEFINITION
// ========================
var old = $.fn.iconpicker;
$.fn.iconpicker = function (option, params) {
return this.each(function () {
var $this = $(this);
var data = $this.data('bs.iconpicker');
var options = typeof option === 'object' && option;
if (!data) {
$this.data('bs.iconpicker', (data = new Iconpicker(this, options)));
}
if (typeof option === 'string') {
if (typeof data[option] === 'undefined') {
throw 'Iconpicker => The "' + option + '" method does not exists.';
}
else {
data[option](params);
}
}
else{
var op = data.options;
op = $.extend(op, {
inline: false,
page: 1,
selected: -1,
table: $('<table class="table-icons"><thead></thead><tbody></tbody><tfoot></tfoot></table>')
});
var name = (typeof $this.attr('name') !== 'undefined') ? 'name="' + $this.attr('name') + '"' : '';
if($this.prop('tagName') === 'BUTTON'){
$this.empty()
.append('<i></i>')
.append('<input type="hidden" ' + name + '></input>')
.append('<span class="caret"></span>')
.addClass('iconpicker ' + (($.fn.bsVersion() === '3.x') ? '' : 'dropdown-toggle'));
data.setIconset(op.iconset);
$this.on('click', function(e) {
e.preventDefault();
$this.popover({
animation: false,
trigger: 'manual',
html: true,
content: op.table,
container: 'body',
placement: op.placement
}).on('inserted.bs.popover', function() {
var el = $this.data('bs.popover');
var tip = ($.fn.bsVersion() === '3.x') ? el.tip() : $(el.getTipElement())
tip.addClass('iconpicker-popover');
}).on('shown.bs.popover', function () {
data.switchPage(op.icon);
data.bindEvents();
});
//console.log($.fn.bsVersion());
$this.popover('show');
});
}
else{
op.inline = true;
data.setIconset(op.iconset);
$this.empty()
.append('<input type="hidden" ' + name + '></input>')
.append(op.table)
.addClass('iconpicker')
.addClass(op.align);
data.switchPage(op.icon);
data.bindEvents();
}
}
});
};
$.fn.iconpicker.Constructor = Iconpicker;
// ICONPICKER NO CONFLICT
// ==================
$.fn.iconpicker.noConflict = function () {
$.fn.iconpicker = old;
return this;
};
$.fn.bsVersion = function() {
return $.fn.popover.Constructor.VERSION.substr(0,2) + 'x';
};
// ICONPICKER DATA-API
// ===============
$(document).on('click', 'body', function (e) {
$('.iconpicker').each(function () {
//the 'is' for buttons that trigger popups
//the 'has' for icons within a button that triggers a popup
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
$(this).popover(($.fn.bsVersion() === '3.x') ? 'destroy' : 'dispose');
}
});
});
$('button[role="iconpicker"],div[role="iconpicker"]').iconpicker();
})(jQuery);

File diff suppressed because one or more lines are too long