Initial commit - prestashop-icons package
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>
This commit is contained in:
153
js/mpr-icons.js
Normal file
153
js/mpr-icons.js
Normal file
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user