-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixed changed subbomb structure and removed host handlers
- Loading branch information
1 parent
ca062e8
commit da884b2
Showing
21 changed files
with
500 additions
and
644 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,120 +1,200 @@ | ||
function copy(value) | ||
{ | ||
/* global document */ | ||
var accordionLocalStorageKey = 'accordion-id'; | ||
|
||
// eslint-disable-next-line no-undef | ||
var localStorage = window.localStorage; | ||
|
||
/** | ||
* | ||
* @param {string} value | ||
*/ | ||
function copy(value) { | ||
const el = document.createElement('textarea'); | ||
el.value = value.replace(/JAVASCRIPT\nCopied!$/, ''); | ||
const editedValue = value.replace(/JAVASCRIPT\nCopied!$/, ''); | ||
|
||
el.value = editedValue; | ||
document.body.appendChild(el); | ||
|
||
el.select(); | ||
document.execCommand('copy'); | ||
|
||
document.body.removeChild(el); | ||
} | ||
|
||
function showTooltip(id) | ||
{ | ||
let tooltip = document.getElementById(id); | ||
tooltip.classList.add('show-tooltip'); | ||
function showTooltip(id) { | ||
var tooltip = document.getElementById(id); | ||
|
||
setTimeout(function() { tooltip.classList.remove('show-tooltip'); }, 3000); | ||
tooltip.classList.add('show-tooltip'); | ||
setTimeout(function() { | ||
tooltip.classList.remove('show-tooltip'); | ||
}, 3000); | ||
} | ||
|
||
function copyFunction(id) | ||
{ | ||
let code = document.getElementById(id); | ||
/* eslint-disable-next-line */ | ||
function copyFunction(id) { | ||
// selecting the pre element | ||
var code = document.getElementById(id); | ||
|
||
let element = code.querySelector('.linenums'); | ||
if (!element) { element = code.querySelector('code'); } | ||
// selecting the ol.linenums | ||
var element = code.querySelector('.linenums'); | ||
|
||
if (!element) { | ||
// selecting the code block | ||
element = code.querySelector('code'); | ||
} | ||
|
||
// copy | ||
copy(element.innerText); | ||
|
||
// show tooltip | ||
showTooltip('tooltip-' + id); | ||
} | ||
|
||
function toggleAccordion(element, isImmediate) | ||
{ | ||
let currentNode = element; | ||
let isCollapsed = currentNode.classList.contains('collapsed'); | ||
let currentNodeUL = currentNode.querySelector('.accordion-content'); | ||
(function() { | ||
// capturing all pre element on the page | ||
var allPre = document.getElementsByTagName('pre'); | ||
|
||
|
||
var i, classList; | ||
|
||
for ( i = 0; i < allPre.length; i++) { | ||
// get the list of class in current pre element | ||
classList = allPre[i].classList; | ||
var id = 'pre-id-' + i; | ||
|
||
// tooltip | ||
var tooltip = '<div class="tooltip" id="tooltip-' + id + '">Copied!</div>'; | ||
|
||
// template of copy to clipboard icon container | ||
var copyToClipboard = '<div class="code-copy-icon-container" onclick="copyFunction(\'' + id + '\')"><div><svg class="sm-icon" alt="click to copy"><use xlink:href="#copy-icon"></use></svg>' + tooltip + '<div></div>'; | ||
|
||
// extract the code language | ||
var langName = classList[classList.length - 1].split('-')[1]; | ||
|
||
if ( langName === undefined ) { langName = 'JavaScript'; } | ||
|
||
// if(langName != undefined) | ||
var langNameDiv = '<div class="code-lang-name-container"><div class="code-lang-name">' + langName.toLocaleUpperCase() + '</div></div>'; | ||
// else langNameDiv = ''; | ||
|
||
// appending everything to the current pre element | ||
allPre[i].innerHTML += '<div class="pre-top-bar-container">' + langNameDiv + copyToClipboard + '</div>'; | ||
allPre[i].setAttribute('id', id); | ||
} | ||
})(); | ||
|
||
|
||
/** | ||
* Function to set accordion id to localStorage. | ||
* @param {string} id Accordion id | ||
*/ | ||
function setAccordionIdToLocalStorage(id) { | ||
var ids = JSON.parse(localStorage.getItem(accordionLocalStorageKey)); | ||
|
||
ids[id] = id; | ||
localStorage.setItem(accordionLocalStorageKey, JSON.stringify(ids)); | ||
} | ||
|
||
/** | ||
* Function to remove accordion id from localStorage. | ||
* @param {string} id Accordion id | ||
*/ | ||
function removeAccordionIdFromLocalStorage(id) { | ||
var ids = JSON.parse(localStorage.getItem(accordionLocalStorageKey)); | ||
|
||
delete ids[id]; | ||
localStorage.setItem(accordionLocalStorageKey, JSON.stringify(ids)); | ||
} | ||
|
||
/** | ||
* Function to get all accordion ids from localStorage. | ||
* | ||
* @returns {object} | ||
*/ | ||
function getAccordionIdsFromLocalStorage() { | ||
var ids = JSON.parse(localStorage.getItem(accordionLocalStorageKey)); | ||
|
||
if(isCollapsed) | ||
{ | ||
if(isImmediate) | ||
return ids || {}; | ||
} | ||
|
||
|
||
function toggleAccordion(element, isImmediate) { | ||
var currentNode = element; | ||
var isCollapsed = currentNode.classList.contains('collapsed'); | ||
var currentNodeUL = currentNode.querySelector('.accordion-content'); | ||
|
||
if (isCollapsed) { | ||
if (isImmediate) | ||
{ | ||
currentNode.classList.remove('collapsed'); | ||
currentNodeUL.style.height = 'auto'; | ||
return; | ||
} | ||
|
||
let scrollHeight = currentNodeUL.scrollHeight; | ||
var scrollHeight = currentNodeUL.scrollHeight; | ||
|
||
currentNodeUL.style.height = scrollHeight + 'px'; | ||
currentNode.classList.remove('collapsed'); | ||
|
||
setTimeout(function() | ||
{ | ||
if(!currentNode.classList.contains('collapsed')) { currentNodeUL.style.height = 'auto'; } | ||
}, 500); | ||
} | ||
else | ||
{ | ||
setAccordionIdToLocalStorage(currentNode.id); | ||
setTimeout(function() { | ||
if (!currentNode.classList.contains('collapsed')) | ||
{ currentNodeUL.style.height = 'auto'; } | ||
}, 600); | ||
} else { | ||
currentNodeUL.style.height = '0px'; | ||
currentNode.classList.add('collapsed'); | ||
removeAccordionIdFromLocalStorage(currentNode.id); | ||
} | ||
} | ||
|
||
(function() { | ||
if (localStorage.getItem(accordionLocalStorageKey) === undefined || | ||
localStorage.getItem(accordionLocalStorageKey) === null | ||
) { | ||
console.log('reset', localStorage.getItem(accordionLocalStorageKey)); | ||
localStorage.setItem(accordionLocalStorageKey, '{}'); | ||
} | ||
var allAccordion = document.querySelectorAll('.accordion-heading'); | ||
var ids = getAccordionIdsFromLocalStorage(); | ||
|
||
|
||
allAccordion.forEach(function(item) { | ||
var parent = item.parentNode; | ||
|
||
item.addEventListener('click', function() { toggleAccordion(parent); } ); | ||
if (parent.id in ids) { | ||
toggleAccordion(parent, true); | ||
} | ||
}); | ||
})(); | ||
|
||
|
||
/** | ||
* | ||
* @param {HTMLElement} element | ||
* @param {HTMLElement} navbar | ||
*/ | ||
function toggleNavbar(element, navbar) | ||
{ | ||
let isExpanded = element.classList.contains('expanded'); | ||
var isExpanded = element.classList.contains('expanded'); | ||
|
||
if(isExpanded) | ||
{ | ||
if (isExpanded) { | ||
element.classList.remove('expanded'); | ||
navbar.classList.remove('expanded'); | ||
} | ||
else | ||
{ | ||
} else { | ||
element.classList.add('expanded'); | ||
navbar.classList.add('expanded'); | ||
} | ||
} | ||
|
||
(function() | ||
{ | ||
let allPre = document.getElementsByTagName('pre'); | ||
let i, classList; | ||
|
||
for (i = 0; i < allPre.length; i++) | ||
{ | ||
classList = allPre[i].classList; | ||
let id = 'pre-id-' + i; | ||
|
||
let tooltip = '<div class="tooltip" id="tooltip-' + id + '">Copied!</div>'; | ||
|
||
let copyToClipboard = '<div class="code-copy-icon-container" onclick="copyFunction(\'' + id + '\')"><div><svg class="sm-icon"><use xlink:href="#copy-icon"></use></svg>' + tooltip + '<div></div>'; | ||
|
||
let langName = classList[classList.length - 1].split('-')[1]; | ||
|
||
if (langName === undefined) { langName = 'JavaScript'; } | ||
|
||
let langNameDiv = '<div class="code-lang-name-container"><div class="code-lang-name">' + langName.toLocaleUpperCase() + '</div></div>'; | ||
|
||
allPre[i].innerHTML += '<div class="pre-top-bar-container">' + langNameDiv + copyToClipboard + '</div>'; | ||
allPre[i].setAttribute('id', id); | ||
} | ||
|
||
let allAccordion = document.querySelectorAll('.accordion-heading'); | ||
|
||
allAccordion.forEach(function(item) | ||
{ | ||
item.addEventListener('click', function() { toggleAccordion(item.parentNode); } ); | ||
}); | ||
|
||
let navbarHam = document.querySelector('#navbar-ham'); | ||
let navbar = document.querySelector('#navbar'); | ||
|
||
if(navbarHam && navbar) | ||
{ | ||
navbarHam.addEventListener('click', function() { toggleNavbar(navbarHam, navbar); }); | ||
/** | ||
* Navbar ham | ||
*/ | ||
(function() { | ||
var navbarHam = document.querySelector('#navbar-ham'); | ||
var navbar = document.querySelector('#navbar'); | ||
|
||
if (navbarHam && navbar) { | ||
navbarHam.addEventListener('click', function() { | ||
toggleNavbar(navbarHam, navbar); | ||
}); | ||
} | ||
})(); | ||
})(); |
Oops, something went wrong.