webicon
Version:
Icon library
151 lines (124 loc) • 3.47 kB
JavaScript
;(function(window, jQuery, angular) {
;
var
icons8Config = {
api: {
url: 'https://api.icons8.com/api/iconsets/svg-symbol'
}
};
;
function icons8Extension(injector, config) {
var
publicApi = injector('publicApi'),
iconManager = injector('iconManager'),
platforms = {
ios8: ['ios7', 'i7', 'i8', 'ios9', 'i9'],
win8: ['w8', 'windows8', 'windows-8', 'metro', 'windows-metro'],
android: ['android-kitkat', 'kitkat', 'ak'],
androidL: ['android-lollipop', 'android-l', 'lollipop', 'al'],
color: ['flat_color', 'c', 'colored'],
win10: ['w10', 'windows10', 'windows-10']
},
platformsMap,
apiToken;
platformsMap = {};
Object.keys(platforms).forEach(function(platform) {
platformsMap[platform.toLowerCase()] = platform;
platforms[platform].forEach(function(alias) {
platformsMap[alias] = platform;
});
});
iconManager
.setDefaultIconSet('icons8')
.addSvgIconSet(
'icons8',
function(icons) {
var
options = {
url: config.api.url,
params: {}
};
if (icons) {
if (!Array.isArray(icons)) {
icons = [icons];
}
options.params.icons = icons.join(',');
}
if (apiToken) {
options.params.token = apiToken;
}
return options;
},
{
cumulative: true,
iconIdParser: function(id, params) {
var
index;
id = String(id || '');
if (!Array.isArray(params)) {
params = [];
}
params = params.map(function(param) {
return String(param).toLowerCase();
});
for (index = 0; index < params.length; index++) {
if (platformsMap.hasOwnProperty(params[index])) {
return [platformsMap[params[index]], id].join('-');
}
}
return [platformsMap['c'], id].join('-');
}
}
);
publicApi.icons8Token = function(token) {
apiToken = token;
};
if (injector.has('configPerformer')) {
injector('configPerformer').strategy(function(config) {
if (typeof config.icons8Token != 'undefined') {
publicApi.icons8Token(config.icons8Token);
}
});
}
}
;
extension(function(injector) {
icons8Extension(injector, icons8Config);
});
;
if (typeof jQuery != 'undefined' && jQuery.fn.webicon) {
jQuery.fn.webicon.extension(extensionBinder);
}
if (typeof angular != 'undefined' && angular.module('webicon')) {
angular.module('webicon').config([
'$webiconProvider',
function($webiconProvider) {
$webiconProvider.extension(extensionBinder)
}
])
}
function extensionBinder(injector) {
(extension.extensions || []).forEach(function(extension) {
extension(injector);
});
extension.listeners = extension.listeners || [];
extension.listeners.push(function(extension) {
extension(injector);
});
}
function extension(fn) {
var
listeners,
extensions;
listeners = extension.listeners = extension.listeners || [];
extensions = extension.extensions = extension.extensions || [];
if (typeof fn != 'function') {
console.error('Extension is not a function');
return;
}
extensions.push(fn);
listeners.forEach(function(listener) {
listener(fn);
});
}
})(window, window.jQuery, window.angular);