Semantic icon helper for PrestaShop modules. - Maps icon names to Font Awesome or Material Icons - Auto-detects admin context (Material) vs front (FA default) - Reads icon preference from ps_mpr_config table - Theme detection for Material Icons - PHP class + JavaScript helper Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
154 lines
5.2 KiB
JavaScript
154 lines
5.2 KiB
JavaScript
/**
|
|
* MprIcons - Semantic Icon Helper for PrestaShop (JavaScript)
|
|
*
|
|
* Simple API: MprIcons.get('account') - that's it.
|
|
*
|
|
* Set window.mprIconSet from PHP to configure (defaults to 'fontawesome').
|
|
*
|
|
* @package myprestarocks/prestashop-icons
|
|
*/
|
|
|
|
var MprIcons = (function() {
|
|
'use strict';
|
|
|
|
var FA = 'fontawesome';
|
|
var MATERIAL = 'material';
|
|
|
|
var map = {
|
|
// User
|
|
'account': ['fa fa-user', 'person'],
|
|
'user': ['fa fa-user', 'person'],
|
|
'logout': ['fa fa-sign-out', 'logout'],
|
|
'login': ['fa fa-sign-in', 'login'],
|
|
|
|
// E-commerce
|
|
'cart': ['fa fa-shopping-cart', 'shopping_cart'],
|
|
'orders': ['fa fa-list', 'receipt_long'],
|
|
'truck': ['fa fa-truck', 'local_shipping'],
|
|
'credit-card': ['fa fa-credit-card', 'credit_card'],
|
|
'gift': ['fa fa-gift', 'card_giftcard'],
|
|
'tag': ['fa fa-tag', 'local_offer'],
|
|
'percent': ['fa fa-percent', 'percent'],
|
|
|
|
// Status
|
|
'success': ['fa fa-check', 'check'],
|
|
'error': ['fa fa-times', 'close'],
|
|
'warning': ['fa fa-exclamation-triangle', 'warning'],
|
|
'info': ['fa fa-info-circle', 'info'],
|
|
|
|
// Actions
|
|
'edit': ['fa fa-pencil', 'edit'],
|
|
'delete': ['fa fa-trash', 'delete'],
|
|
'search': ['fa fa-search', 'search'],
|
|
'settings': ['fa fa-cog', 'settings'],
|
|
'download': ['fa fa-download', 'download'],
|
|
'upload': ['fa fa-upload', 'upload'],
|
|
'refresh': ['fa fa-refresh', 'refresh'],
|
|
'save': ['fa fa-save', 'save'],
|
|
'print': ['fa fa-print', 'print'],
|
|
'copy': ['fa fa-copy', 'content_copy'],
|
|
|
|
// UI
|
|
'close': ['fa fa-times', 'close'],
|
|
'check': ['fa fa-check', 'check'],
|
|
'plus': ['fa fa-plus', 'add'],
|
|
'minus': ['fa fa-minus', 'remove'],
|
|
'menu': ['fa fa-bars', 'menu'],
|
|
'more': ['fa fa-ellipsis-v', 'more_vert'],
|
|
|
|
// Arrows
|
|
'arrow-left': ['fa fa-arrow-left', 'arrow_back'],
|
|
'arrow-right': ['fa fa-arrow-right', 'arrow_forward'],
|
|
'arrow-up': ['fa fa-arrow-up', 'arrow_upward'],
|
|
'arrow-down': ['fa fa-arrow-down', 'arrow_downward'],
|
|
'chevron-left': ['fa fa-chevron-left', 'chevron_left'],
|
|
'chevron-right': ['fa fa-chevron-right', 'chevron_right'],
|
|
'chevron-up': ['fa fa-chevron-up', 'expand_less'],
|
|
'chevron-down': ['fa fa-chevron-down', 'expand_more'],
|
|
|
|
// Communication
|
|
'email': ['fa fa-envelope', 'email'],
|
|
'phone': ['fa fa-phone', 'phone'],
|
|
'comment': ['fa fa-comment', 'comment'],
|
|
'chat': ['fa fa-comments', 'chat'],
|
|
|
|
// Security
|
|
'lock': ['fa fa-lock', 'lock'],
|
|
'unlock': ['fa fa-unlock', 'lock_open'],
|
|
'shield': ['fa fa-shield', 'shield'],
|
|
'key': ['fa fa-key', 'vpn_key'],
|
|
|
|
// Misc
|
|
'home': ['fa fa-home', 'home'],
|
|
'address': ['fa fa-map-marker', 'location_on'],
|
|
'calendar': ['fa fa-calendar', 'calendar_today'],
|
|
'clock': ['fa fa-clock-o', 'schedule'],
|
|
'heart': ['fa fa-heart', 'favorite'],
|
|
'star': ['fa fa-star', 'star'],
|
|
'eye': ['fa fa-eye', 'visibility'],
|
|
'eye-off': ['fa fa-eye-slash', 'visibility_off'],
|
|
'file': ['fa fa-file', 'description'],
|
|
'folder': ['fa fa-folder', 'folder'],
|
|
'image': ['fa fa-image', 'image'],
|
|
'link': ['fa fa-link', 'link'],
|
|
'external': ['fa fa-external-link', 'open_in_new'],
|
|
'help': ['fa fa-question-circle', 'help'],
|
|
|
|
// Loading
|
|
'spinner': ['fa fa-spinner fa-spin', 'hourglass_empty'],
|
|
'loading': ['fa fa-circle-o-notch fa-spin', 'autorenew']
|
|
};
|
|
|
|
function getIconSet() {
|
|
return window.mprIconSet || FA;
|
|
}
|
|
|
|
function get(name, extraClass) {
|
|
if (!map[name]) return '';
|
|
|
|
var set = getIconSet();
|
|
var extra = extraClass ? ' ' + extraClass : '';
|
|
|
|
if (set === MATERIAL) {
|
|
return '<i class="material-icons' + extra + '">' + map[name][1] + '</i>';
|
|
}
|
|
return '<i class="' + map[name][0] + extra + '"></i>';
|
|
}
|
|
|
|
function raw(name) {
|
|
if (!map[name]) return '';
|
|
var set = getIconSet();
|
|
return set === MATERIAL ? map[name][1] : map[name][0];
|
|
}
|
|
|
|
function create(name, extraClass) {
|
|
var html = get(name, extraClass);
|
|
if (!html) return null;
|
|
var temp = document.createElement('div');
|
|
temp.innerHTML = html;
|
|
return temp.firstChild;
|
|
}
|
|
|
|
function exists(name) {
|
|
return !!map[name];
|
|
}
|
|
|
|
function list() {
|
|
return Object.keys(map);
|
|
}
|
|
|
|
return {
|
|
get: get,
|
|
raw: raw,
|
|
create: create,
|
|
exists: exists,
|
|
list: list,
|
|
FA: FA,
|
|
MATERIAL: MATERIAL
|
|
};
|
|
})();
|
|
|
|
if (typeof module !== 'undefined' && module.exports) {
|
|
module.exports = MprIcons;
|
|
}
|