import Tab from '../../node_modules/bootstrap5/js/src/tab.js'; import Dropdown from '../../node_modules/bootstrap5/js/src/dropdown.js'; document.addEventListener('DOMContentLoaded', function() { // load syntax highlighting css async // https://stackoverflow.com/questions/32759272/how-to-load-css-asynchronously document.getElementById('prism-css').media='all'; /** * show/hide offcanvas navigation * */ document.getElementById('toggle-offcanvas').addEventListener('click',function(){ document.body.classList.toggle('offcanvas-open'); }); // don't show theme optinos unless we're displaying a demo var demo_divs = document.querySelectorAll('.demo'); if( demo_divs.length == 0 ){ return; } // theme switcher var link = document.getElementById('select-theme'); if( link ){ return; } var themes = window.themes || ['bootstrap5','bootstrap4','bootstrap3','default']; var theme_options = { bootstrap5: 'Bootstrap 5', bootstrap4: 'Bootstrap 4', bootstrap3: 'Bootstrap 3', default: 'Default', }; var theme = localStorage.getItem('theme'); if( themes.indexOf(theme) == -1 ){ theme = 'bootstrap5'; } var theme_selector = document.createElement('input'); theme_selector.classList.add('theme-selector-input'); var container = document.getElementById('main-container') if( !document.querySelectorAll('.demo-mini').length ){ container.insertBefore(theme_selector, container.firstChild); new TomSelect(theme_selector,{ maxItems: 1, controlInput:'', plugins:['no_backspace_delete'], options: themes.map((theme_name)=>{ if( themes.indexOf(theme_name) == -1 ){ return false; } return {text:theme_options[theme_name],value:theme_name}; }), items:[theme], render:{ item:(data,escape)=>{ return '
Theme: ' + escape(data.text) + '
'; } }, onChange:(value)=>{ SetTheme(value); } }); } SetTheme(theme); /** * Set the current theme * */ function SetTheme(theme){ if( themes.indexOf(theme) == -1 ){ return; } localStorage.setItem('theme',theme); var link = document.getElementById('select-theme'); if( link ) link.parentNode.removeChild(link); link = document.createElement('link'); link.id = 'select-theme'; link.setAttribute('rel','stylesheet'); link.setAttribute('href','/css/tom-select.' + theme + '.css'); document.getElementsByTagName('head')[0].appendChild(link); } /** * CodePen * https://blog.codepen.io/documentation/prefill/ * * CodeSandbox * https://codesandbox.io/docs/api * ... submitting requires other js packages: https://github.com/codesandbox/codesandbox-client/issues/4948 * * JSFiddle * https://docs.jsfiddle.net/api/display-a-fiddle-from-post * */ document.addEventListener('click',(evt)=>{ var open_sandbox_link = evt.target.closest('.opensandbox'); if( open_sandbox_link ){ var demo = open_sandbox_link.closest('.demo'); var codepen, codesandbox; function getTextContent(tag){ var el = demo.querySelector(tag); if( el ){ return el.textContent || ''; } return ''; } var html = `
${demo.querySelector('textarea').value || ''}
`; var css = getTextContent('style'); var js = getTextContent('script'); var theme = localStorage.getItem('theme') || 'bootstrap4'; var css_urls = [ `https://cdn.jsdelivr.net/npm/tom-select@//@@version/dist/css/tom-select.${theme}.min.css`, 'https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css', ]; var js_urls = ['https://cdn.jsdelivr.net/npm/tom-select@//@@version/dist/js/tom-select.complete.min.js']; // add jquery when needed if( demo.classList.contains('demo-jquery') ){ js_urls.push('https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js'); js_urls.push('https://cdn.jsdelivr.net/npm/jquery-ui-dist@1.12.1/jquery-ui.js'); } // codesandbox codesandbox = { files: { "package.json": { content: { dependencies:{}, } }, "index.html": { content: html }, "index.js": { content: js }, "index.css":{ content: css, } } }; //demo.querySelector('.codesandbox').value = JSON.stringify(codesandbox); // codepen codepen = { html: html, js: js, css: css, js_external: js_urls.join(';'), css_external: css_urls.join(';'), }; demo.querySelector('.codepen').value = JSON.stringify(codepen); // JSFiddle demo.querySelector('.jsfiddle-html').value = html; demo.querySelector('.jsfiddle-js').value = js; demo.querySelector('.jsfiddle-css').value = css; demo.querySelector('.jsfiddle-resources').value = js_urls.join(',') + ','+css_urls.join(','); setTimeout(()=>{ open_sandbox_link.nextElementSibling.submit(); },50); } }); });