<div class="acl-demo__info-container">
<div class="acl-demo__info-message">To make use of the ACL Icons in your project you must download and install the
Icon fonts.
<br />
<span style="font-size:12px;">(If this does not automatically download, right click on the button and choose
"Save link as")</span>
</div>
<div class="acl-demo__info-items">
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.eot" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.eot</span>
</a>
</div>
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.svg" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.svg</span>
</a>
</div>
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.ttf" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.ttf</span>
</a>
</div>
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.woff" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.woff</span>
</a>
</div>
</div>
</div>
<div class="acl-demo__toolbar">
<div class="acl-demo__search" data-search-query="">
<div class="acl-simple-searchbox acl-demo-1" style="width: 420px">
<div class="acl-simple-searchbox__search-icon">
<i class="aforza-icons">acl_search</i>
</div>
<input class="acl-simple-searchbox__input" id="acl-demo-simple-search" type="text" name="routeBuilderSearch" placeholder="Search">
<div class="acl-simple-searchbox__clear">
<i class="aforza-icons acl-demo__icon-catalog-icon-preview">acl_close_small</i>
</div>
<div class="acl-simple-searchbox__loading-spinner">
<svg class="acl-loader__circular" width="20px" height="20px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
<circle class="acl-loader__circular-path" fill="none" stroke-width="6" cx="33" cy="33" r="30">
</circle>
</svg>
</div>
</div>
</div>
<div style="display: flex;">
<div class="acl-demo__sort" style="margin: 0 15px;">
<div class="acl-dropdown acl-select-dropdown acl-dropdown-demo-1" id="single-select-dropdown-example-id" data-dropdown-type="single-select" data-dropdown-label="Choose an item">
<div class="acl-dropdown__cta acl-select-dropdown__field">
<div class="acl-dropdown__cta-link acl-select-dropdown__cta-link"></div>
<i class="aforza-icons acl-select-dropdown__cheveron">acl_down_arrow</i>
</div>
<div class="acl-dropdown__results acl-select-dropdown__results" data-dropdown-select="true">
<div class="acl-dropdown__items acl-select-dropdown__items" style="max-height: 250px;">
</div>
</div>
</div>
</div>
<div class="acl-button-group">
<input type="radio" class="acl-button-group__item" name="radioButtonTest" value="1" id="button1" onclick="setView('list')" checked />
<label for="button1"><i class="aforza-icons acl-button-group__item-icon--small">acl_list_view</i></label>
<input type="radio" class="acl-button-group__item" name="radioButtonTest" value="2" id="button2" onclick="setView('grid')" />
<label for="button2"><i class="aforza-icons acl-button-group__item-icon--small">acl_grid_view</i></label>
</div>
</div>
</div>
<div data-loading="false">
<svg class="acl-loader__circular" width="35px" height="35px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
<circle class="acl-loader__circular-path" fill="none" stroke-width="9" cx="33" cy="33" r="26">
</circle>
</svg>
</div>
<div class="acl-demo__icon-catalog" data-view="list"></div>
</div>
<style>
.acl-demo__toolbar {
margin-top: 20px;
display: flex;
justify-content: space-around;
}
.acl-demo__sort {
min-width: 125px;
}
[data-hidden] {
display: none;
}
[data-view="list"] .acl-demo__icon-catalog-item-inner-container {
display: flex;
align-items: center;
}
[data-view="grid"] .acl-demo__icon-catalog-item-inner-container {
display: flex;
flex-direction: column;
}
[data-view="list"] {
margin-top: 10px;
}
[data-view="list"] .acl-demo__icon-catalog-item {
height: 50px;
text-align: start;
margin: 10px;
padding: 10px;
justify-content: start;
cursor: pointer;
}
[data-view="list"] .icon-item-title {
word-break: break-all;
color: grey;
font-size: 10px;
}
.icon-item-title {
color: grey;
font-size: 10px;
}
[data-view="grid"] .acl-demo__icon-catalog-icon-preview {
font-size: 32px;
padding: 10px;
height: 100%;
border-radius: 7px;
}
[data-view="list"] .acl-demo__icon-catalog-icon-preview {
font-size: 30px;
margin-right: 10px;
background: #f6f6f6;
padding: 10px;
height: 100%;
border-radius: 7px;
}
.acl-elevation--z1 {
box-shadow: 0px 2px 1px -1px rgb(0 0 0 / 0%), 0px 1px 1px 0px rgb(0 0 0 / 0%), 0px 1px 3px 0px rgb(0 0 0 / 16%);
}
.acl-copy-to-clipboard__alert--show .acl-copy-to-clipboard__alert-message {
align-items: center;
}
[data-loading="false"] {
display: none;
}
[data-loading="true"] {
display: flex;
justify-content: center;
}
</style>
<script>
const results = [{
id: 'date',
value: 'Date Added',
selected: true
},
{
id: 'az',
value: 'A - Z'
},
{
id: 'za',
value: 'Z - A'
}
];
const selector = Object.freeze({
DROPDOWN: '.acl-dropdown-demo-1',
SEARCHBOX_CONTAINER: '.acl-demo-1',
SEARCHBOX: ".acl-demo__search",
ICON_CATALOG: '.acl-demo__icon-catalog',
ICON_CATALOG_ITEM: '.acl-demo__icon-catalog-item'
});
const eventName = Object.freeze({
SEARCH_QUERY: 'searchquery',
DROPDOWN_ITEM_CLICKED: 'dropdownitemclicked'
});
const attribute = Object.freeze({
HIDDEN: 'data-hidden',
VIEW: 'data-view',
SET: 'data-set',
CODE: 'data-code',
ORDER: 'data-order'
});
// Sort
const dropdownEl1 = document.querySelector(selector.DROPDOWN);
const dropdown1 = new acl.ACLDropdownSingleSelect(dropdownEl1, results);
let catalogItems;
// Searchbox
const searchboxDemoEl = document.querySelector(selector.SEARCHBOX_CONTAINER);
const searchboxDemo1 = new acl.ACLSearchbox(searchboxDemoEl, 300);
searchboxDemoEl.addEventListener(eventName.SEARCH_QUERY, function(e) {
filterIcons(e.detail)
});
async function fetchIconsJSON() {
const response = await fetch("/assets/icons/selection.json");
const json = await response.json();
return json.icons;
}
let iconsRendered;
const renderIcons = (sort) => {
let hidden = false;
iconsRendered = false;
const catalogItems = document.querySelector(selector.ICON_CATALOG);
if (catalogItems) catalogItems.innerHTML = "";
fetchIconsJSON().then(icons => {
switch (sort) {
case 'az':
icons.sort((a, b) => a.properties.ligatures.localeCompare(b.properties.ligatures));
break;
case 'za':
icons.sort((a, b) => a.properties.ligatures.localeCompare(b.properties.ligatures));
icons.reverse();
break;
}
if (document.querySelector(selector.SEARCHBOX).dataset.searchQuery) hidden = true;
icons.forEach(function(icon, index) {
createIconPreview(icon, hidden);
});
iconsRendered = true;
});
}
renderIcons();
const filterIcons = (searchQuery) => {
const catalogItemArray = document.querySelectorAll(selector.ICON_CATALOG_ITEM);
if (searchQuery) {
document.querySelector(selector.SEARCHBOX).dataset.searchQuery = searchQuery;
} else if (searchQuery === "") {
searchQuery = "";
} else {
searchQuery = document.querySelector(selector.SEARCHBOX).dataset.searchQuery;
}
catalogItemArray.forEach(catalogItem => {
if (catalogItem.title.toLowerCase().includes(searchQuery)) {
catalogItem.removeAttribute(attribute.HIDDEN);
} else {
catalogItem.setAttribute(attribute.HIDDEN, "true");
};
});
}
const sortIcons = (e) => {
renderIcons(e);
console.log(e);
setTimeout(function() {
filterIcons();
}, 100);
}
const createIconPreview = (icon, hidden) => {
catalogItems = document.querySelector(selector.ICON_CATALOG);
const iconPreviewEl = document.createElement("div");
iconPreviewEl.classList.add('acl-demo__icon-catalog-item', 'acl-demo__icon-catalog-item--large', 'acl-elevation--z1');
iconPreviewEl.title = icon.properties.ligatures;
iconPreviewEl.setAttribute(attribute.SET, icon.setId);
iconPreviewEl.setAttribute(attribute.CODE, icon.properties.code);
iconPreviewEl.setAttribute(attribute.ORDER, icon.properties.order);
if (hidden) iconPreviewEl.setAttribute(attribute.HIDDEN, true);
const template = `
<div class="acl-copy-to-clipboard" data-copy-text="${icon.properties.ligatures}" data-alert-timeout="50000">
<div class="acl-demo__icon-catalog-item-inner-container">
<div><i class="aforza-icons acl-demo__icon-catalog-icon-preview animated fadeIn">${icon.properties.ligatures}</i>
</div>
<span class="icon-item-title">${icon.properties.ligatures}</span>
</div>
</div>
<div class="acl-copy-to-clipboard__alert animated fadeInDown">
<div class="acl-copy-to-clipboard__alert-message">
<span class="acl-copy-to-clipboard__alert-icon">👍🏽</span>
${icon.properties.ligatures} copied to clipboard
</div>
<div class="acl-copy-to-clipboard__alert-error-message">
<span class="acl-copy-to-clipboard__alert-icon acl-copy-to-clipboard__alert-icon--error">
<i class="aforza-icons">acl_close_big</i>
</span>
Failed to copy to clipboard
</div>
</div>`
iconPreviewEl.innerHTML = template;
new acl.ACLCopyToClipboard(iconPreviewEl);
catalogItems.appendChild(iconPreviewEl)
}
dropdownEl1.addEventListener(eventName.DROPDOWN_ITEM_CLICKED,
function(e) {
sortIcons(e.detail.id);
}, false);
const setView = (view) => {
catalogItems = document.querySelector(selector.ICON_CATALOG);
catalogItems.setAttribute(attribute.VIEW, view);
}
</script>
<div class="acl-demo__info-container">
<div class="acl-demo__info-message">To make use of the ACL Icons in your project you must download and install the
Icon fonts.
<br />
<span style="font-size:12px;">(If this does not automatically download, right click on the button and choose
"Save link as")</span>
</div>
<div class="acl-demo__info-items">
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.eot" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.eot</span>
</a>
</div>
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.svg" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.svg</span>
</a>
</div>
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.ttf" target="_blank" class="acl-button acl-button--raised" download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.ttf</span>
</a>
</div>
<div class="acl-demo__info-item">
<a href="/assets/fonts/Aforza-icon-font.woff" target="_blank" class="acl-button acl-button--raised"
download>
<div class="acl-button__ripple"></div>
<span class="acl-button__label">.woff</span>
</a>
</div>
</div>
</div>
<div class="acl-demo__toolbar">
<div class="acl-demo__search" data-search-query=""><div class="acl-simple-searchbox acl-demo-1" style="width: 420px">
<div class="acl-simple-searchbox__search-icon">
<i class="aforza-icons">acl_search</i>
</div>
<input class="acl-simple-searchbox__input" id="acl-demo-simple-search" type="text" name="routeBuilderSearch"
placeholder="Search">
<div class="acl-simple-searchbox__clear">
<i class="aforza-icons acl-demo__icon-catalog-icon-preview">acl_close_small</i>
</div>
<div class="acl-simple-searchbox__loading-spinner">
<svg class="acl-loader__circular" width="20px" height="20px" viewBox="0 0 66 66"
xmlns="http://www.w3.org/2000/svg">
<circle class="acl-loader__circular-path" fill="none" stroke-width="6" cx="33" cy="33" r="30">
</circle>
</svg>
</div>
</div></div>
<div style="display: flex;">
<div class="acl-demo__sort" style="margin: 0 15px;">
<div class="acl-dropdown acl-select-dropdown acl-dropdown-demo-1" id="single-select-dropdown-example-id"
data-dropdown-type="single-select" data-dropdown-label="Choose an item">
<div class="acl-dropdown__cta acl-select-dropdown__field">
<div class="acl-dropdown__cta-link acl-select-dropdown__cta-link"></div>
<i class="aforza-icons acl-select-dropdown__cheveron">acl_down_arrow</i>
</div>
<div class="acl-dropdown__results acl-select-dropdown__results" data-dropdown-select="true">
<div class="acl-dropdown__items acl-select-dropdown__items" style="max-height: 250px;">
{{!-- Results can be manually rendered here --}}
</div>
</div>
</div></div>
<div class="acl-button-group">
<input type="radio" class="acl-button-group__item" name="radioButtonTest" value="1" id="button1" onclick="setView('list')" checked/>
<label for="button1"><i class="aforza-icons acl-button-group__item-icon--small">acl_list_view</i></label>
<input type="radio" class="acl-button-group__item" name="radioButtonTest" value="2" id="button2" onclick="setView('grid')"/>
<label for="button2"><i class="aforza-icons acl-button-group__item-icon--small">acl_grid_view</i></label>
</div>
</div>
</div>
<div data-loading="false">
<svg class="acl-loader__circular" width="35px" height="35px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">
<circle class="acl-loader__circular-path" fill="none" stroke-width="9" cx="33" cy="33" r="26">
</circle>
</svg>
</div>
<div class="acl-demo__icon-catalog" data-view="list"></div>
</div>
<style>
.acl-demo__toolbar {
margin-top: 20px;
display: flex;
justify-content: space-around;
}
.acl-demo__sort {
min-width: 125px;
}
[data-hidden] {
display: none;
}
[data-view="list"] .acl-demo__icon-catalog-item-inner-container {
display: flex;
align-items: center;
}
[data-view="grid"] .acl-demo__icon-catalog-item-inner-container {
display: flex;
flex-direction: column;
}
[data-view="list"] {
margin-top: 10px;
}
[data-view="list"] .acl-demo__icon-catalog-item {
height: 50px;
text-align: start;
margin: 10px;
padding: 10px;
justify-content: start;
cursor: pointer;
}
[data-view="list"] .icon-item-title {
word-break: break-all;
color: grey;
font-size: 10px;
}
.icon-item-title {
color: grey;
font-size: 10px;
}
[data-view="grid"] .acl-demo__icon-catalog-icon-preview {
font-size: 32px;
padding: 10px;
height: 100%;
border-radius: 7px;
}
[data-view="list"] .acl-demo__icon-catalog-icon-preview {
font-size: 30px;
margin-right: 10px;
background: #f6f6f6;
padding: 10px;
height: 100%;
border-radius: 7px;
}
.acl-elevation--z1 {
box-shadow: 0px 2px 1px -1px rgb(0 0 0 / 0%), 0px 1px 1px 0px rgb(0 0 0 / 0%), 0px 1px 3px 0px rgb(0 0 0 / 16%);
}
.acl-copy-to-clipboard__alert--show .acl-copy-to-clipboard__alert-message {
align-items: center;
}
[data-loading="false"] {
display: none;
}
[data-loading="true"] {
display: flex;
justify-content: center;
}
</style>
<script>
const results = [{
id: 'date',
value: 'Date Added',
selected: true
},
{
id: 'az',
value: 'A - Z'
},
{
id: 'za',
value: 'Z - A'
}];
const selector = Object.freeze({
DROPDOWN: '.acl-dropdown-demo-1',
SEARCHBOX_CONTAINER: '.acl-demo-1',
SEARCHBOX: ".acl-demo__search",
ICON_CATALOG: '.acl-demo__icon-catalog',
ICON_CATALOG_ITEM: '.acl-demo__icon-catalog-item'
});
const eventName = Object.freeze({
SEARCH_QUERY: 'searchquery',
DROPDOWN_ITEM_CLICKED: 'dropdownitemclicked'
});
const attribute = Object.freeze({
HIDDEN: 'data-hidden',
VIEW: 'data-view',
SET: 'data-set',
CODE: 'data-code',
ORDER: 'data-order'
});
// Sort
const dropdownEl1 = document.querySelector(selector.DROPDOWN);
const dropdown1 = new acl.ACLDropdownSingleSelect(dropdownEl1, results);
let catalogItems;
// Searchbox
const searchboxDemoEl = document.querySelector(selector.SEARCHBOX_CONTAINER);
const searchboxDemo1 = new acl.ACLSearchbox(searchboxDemoEl, 300);
searchboxDemoEl.addEventListener(eventName.SEARCH_QUERY, function (e) {
filterIcons(e.detail)
});
async function fetchIconsJSON() {
const response = await fetch("/assets/icons/selection.json");
const json = await response.json();
return json.icons;
}
let iconsRendered;
const renderIcons = (sort) => {
let hidden = false;
iconsRendered = false;
const catalogItems = document.querySelector(selector.ICON_CATALOG);
if (catalogItems) catalogItems.innerHTML = "";
fetchIconsJSON().then(icons => {
switch(sort) {
case 'az':
icons.sort((a, b) => a.properties.ligatures.localeCompare(b.properties.ligatures));
break;
case 'za':
icons.sort((a, b) => a.properties.ligatures.localeCompare(b.properties.ligatures));
icons.reverse();
break;
}
if (document.querySelector(selector.SEARCHBOX).dataset.searchQuery) hidden = true;
icons.forEach(function (icon, index) {
createIconPreview(icon, hidden);
});
iconsRendered = true;
});
}
renderIcons();
const filterIcons = (searchQuery) => {
const catalogItemArray = document.querySelectorAll(selector.ICON_CATALOG_ITEM);
if (searchQuery) {
document.querySelector(selector.SEARCHBOX).dataset.searchQuery = searchQuery;
} else if (searchQuery === "") {
searchQuery = "";
} else {
searchQuery = document.querySelector(selector.SEARCHBOX).dataset.searchQuery;
}
catalogItemArray.forEach(catalogItem => {
if (catalogItem.title.toLowerCase().includes(searchQuery)) {
catalogItem.removeAttribute(attribute.HIDDEN);
} else {
catalogItem.setAttribute(attribute.HIDDEN, "true");
};
});
}
const sortIcons = (e) => {
renderIcons(e);
console.log(e);
setTimeout(function(){
filterIcons();
}, 100);
}
const createIconPreview = (icon, hidden) => {
catalogItems = document.querySelector(selector.ICON_CATALOG);
const iconPreviewEl = document.createElement("div");
iconPreviewEl.classList.add('acl-demo__icon-catalog-item', 'acl-demo__icon-catalog-item--large', 'acl-elevation--z1');
iconPreviewEl.title = icon.properties.ligatures;
iconPreviewEl.setAttribute(attribute.SET, icon.setId);
iconPreviewEl.setAttribute(attribute.CODE, icon.properties.code);
iconPreviewEl.setAttribute(attribute.ORDER, icon.properties.order);
if (hidden) iconPreviewEl.setAttribute(attribute.HIDDEN, true);
const template = `
<div class="acl-copy-to-clipboard" data-copy-text="${icon.properties.ligatures}" data-alert-timeout="50000">
<div class="acl-demo__icon-catalog-item-inner-container">
<div><i class="aforza-icons acl-demo__icon-catalog-icon-preview animated fadeIn">${icon.properties.ligatures}</i>
</div>
<span class="icon-item-title">${icon.properties.ligatures}</span>
</div>
</div>
<div class="acl-copy-to-clipboard__alert animated fadeInDown">
<div class="acl-copy-to-clipboard__alert-message">
<span class="acl-copy-to-clipboard__alert-icon">👍🏽</span>
${icon.properties.ligatures} copied to clipboard
</div>
<div class="acl-copy-to-clipboard__alert-error-message">
<span class="acl-copy-to-clipboard__alert-icon acl-copy-to-clipboard__alert-icon--error">
<i class="aforza-icons">acl_close_big</i>
</span>
Failed to copy to clipboard
</div>
</div>`
iconPreviewEl.innerHTML = template;
new acl.ACLCopyToClipboard(iconPreviewEl);
catalogItems.appendChild(iconPreviewEl)
}
dropdownEl1.addEventListener(eventName.DROPDOWN_ITEM_CLICKED,
function (e) {
sortIcons(e.detail.id);
}, false);
const setView = (view) => {
catalogItems = document.querySelector(selector.ICON_CATALOG);
catalogItems.setAttribute(attribute.VIEW, view);
}
</script>
/* No context defined. */
No notes defined.