migliori / universal-icon-picker

Vanilla JS Icon Picker for any Icon Library
https://universal-icon-picker.miglisoft.com
MIT License
78 stars 9 forks source link
html icons javascript picker vanilla-javascript

Universal Icon Picker

Language: Vanilla JS Dependencies: none GitHub file size in bytes GPLv3 license

Nice small Javascript Icon Picker for any icon library

Vanilla Javascript - No dependency - 2.6ko gzipped

Originally forked from aesthetic-icon-picker

Demo

https://universal-icon-picker.miglisoft.com

Features

Integrated icon libraries

Font Awesome

Material Icons

Other icon libraries

Installation

Clone / download or install with npm

  npm install @migliori/universal-icon-picker@1.1.6

Usage/Examples

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
    <button id="selector" title="Open the icon picker">Click to open</button>
    <script src="https://github.com/migliori/universal-icon-picker/raw/main/universal-icon-picker/assets/js/universal-icon-picker.min.js"></script>

    <script>
        document.addEventListener('DOMContentLoaded', function(event) {
            var uip = new UniversalIconPicker('#selector', options);
        });
    </script>

</body>

</html>

Options

option type value
allowEmpty Boolean Add an empty icon selector in the beginning of each icon list.
Default: true
iconLibraries Array Array of JSON icon libraries in assets/icons-libraries.
Default: null
iconLibrariesCss Array Array of CSS icon libraries in assets/stylesheets or from any CDN. Leave empty if your page already loads them.
Default: null
mode String 'autoload' or 'onrequest'. Default: 'autoload'
onReset Function Callback function when the user clicks the reset button.
Default: null
onSelect Function Callback function when the user clicks the insert button.
Default: null
resetSelector String Selector for the HTML reset button on your page.
Default: null
language String Language code for the UI messages.
E.g.: 'en'
Default: navigator.language || navigator.userLanguage (browser language)
loadCustomCss Boolean If true, universal icon picker does not load its own css allowing for custom css. Default: false

Configuring loaded assets

Universtal icon picker will retrieve some assets from the server based on where ths script itself was retrieved from (assets/js/universal-icon-picker.min.js) :

  1. Icons from the assets/imagesfolder
  2. Icon library json files from the assets/icon-libraries folder

Also, the naming of the library names in the sidebar is derived from their file name in assets/icon-libraries.

In most cases this will just work fine. For some installations, however, you need to adjust the exact paths from where to retrieve those assets.

Configuring icon assets

Three option settings overwrite the paths for the three icons used:

option type value
closeUrl String Path of the close button icon (some type of "x")
starUrl String Path of the star icon for the side bar
searchUrl String Path of the magnifying glass icon for the search bar

Configuring library assets

Library assets are defined by iconLibraries. If the library does include a slash (/) it is assumed to be an URL or path of the library's json file. If it does not include a slash the library is searched for in the assets/icon-libraries folder.

Example

const options = {
    iconLibraries: [
        'happy-icons.min.json',
        'font-awesome.min.json'
    ],
    iconLibrariesCss: [
        'happy-icons.min.css',
        'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css'
    ],
    resetSelector: '#uip-reset-btn',
    onSelect: function(jsonIconData) {
        document.getElementById('output-icon').innerHTML = jsonIconData.iconMarkup;

        console.log(jsonIconData);
        /* will output something like:
        {
            "libraryId": "fa-solid",
            "libraryName": "fontAwesome",
            "iconHtml": "<i class=\"fa-solid fa-oil-can\"></i>",
            "iconMarkup": "&lt;i class=&quot;fa-solid fa-oil-can&quot;&gt;&lt;/i&gt;",
            "iconClass": "fa-solid fa-oil-can",
            "iconText": ""
        }
        */
    },
    onReset: function() {
        document.getElementById('output-icon').innerHTML = '';
    }
}

// Instanciate the Icon Picker
var uip = new UniversalIconPicker('#selector', options);

See the source code of the demo for more examples

Public methods

Change / Upgrade Fontawesome version & icons

A built-in tool is provided to get the Fontawesome icon list from the Fontawesome API and for Bootstrap icons to scrape the Bootstrap icon list from their website.

To choose the Fontawesome version:

  1. open tools/fontawesome-icons-list.html in your code editor and change the version number:

    // set the fontawesome version version here
    const fontawesomeVersion = '6.0.0';
  2. open it in your browser to retrieve the JSON list

  3. save the complete list in assets/icon-libraries/font-awesome.json and each style (brands, regular, solid) in the appropriate json file (assets/icon-libraries/font-awesome-brands.json, ...)

  4. minify the json files to .min.json

For Bootstrap icons use tools/bootstrap-icons-list.html. It scrapes the latest version from the website. You will need to add the version number manually to the generated json file.

Screenshots

Universal Icon Picker Screenshot

Contributing

Contributions are always welcome!

Please contact us for any improvement suggestions or send your pull requests

Changelog

2024/04/16

2023/03/09

2023/02/09

2022/11/18

2022/02/26

2022/02/23

License

MIT

Credits

Thanks to Sabbir for his Aesthetic Icon Picker, which gave me a clean & strong base code for this project.