(function(ACE, $){ 'use strict'; var pageLocation = window.location.pathname, pageName = pageLocation.substring(pageLocation.lastIndexOf('/') + 1), navSelector = '.docs-nav-reveal-navigation-column', navState = 'docs-nav-reveal-navigation-column-extended', querySting = {}; if (Array.prototype.forEach) { location.search .replace('?', '') .split('&') .forEach(function (value) { var pair = value.split('='); querySting[pair[0]] = pair[1]; }); } function toggles() { var $triggers = $('#toggles button'), $demo = $('#demoupdate'), $body = $('body'), pageClass; $triggers.on('click', function() { pageClass = 'ace-page ace-' + $(this).attr('id'); $body.attr('class', pageClass); $demo.html(pageClass); return false; }); } function dialogs() { $('#small-dialog-button').on('click', function(){ ACE.Dialog.open('#smallDialog'); }); $('#medium-dialog-button').on('click', function(){ ACE.Dialog.open('#mediumDialog'); }); $('#long-content-dialog-button').on('click', function(){ ACE.Dialog.open('#longContentDialog'); }); $('#dropdown-test-dialog-button').on('click', function(){ ACE.Dialog.open('#dialogTestDialog'); }); $('#smallDialog').on('ace-dialog-displayed', function(){ ACE.log('displayed small dialog'); }); $('#smallDialog').on('ace-dialog-closed', function(){ ACE.log('closed dialog small'); }); $('#mediumDialog').on('ace-dialog-displayed', function(){ ACE.log('show medium dialog'); }); $('#mediumDialog').on('ace-dialog-closed', function(){ ACE.log('closed dialog medium'); }); $('#disclosebuttonlongcontent, #disclosebuttoniconlongcontent').on('click', function(){ ACE.Dialog.close('#longContentDialog'); }); $('#disclosebuttonmedium, #disclosebuttoniconmedium').on('click', function(){ ACE.Dialog.close('#mediumDialog'); }); $('#disclosebuttonsmall, #disclosebuttoniconsmall').on('click', function(){ ACE.Dialog.close('#smallDialog'); }); } function messages() { var timeouts; $('.page-context-message-show').on('click', function(){ ACE.Messages.show('#page-context-message'); }); $('#page-context-autoclose-button').on('click', function(){ ACE.Messages.show('#page-context-message-autoclose'); if(timeouts) timeouts.forEach(function(timeoutId){ clearTimeout(timeoutId); }); timeouts = [6, 5, 4, 3, 2, 1, 0].map(function(n){ return setTimeout(function(){ switch(n){ case 1: $('#page-context-message-autoclose').find('.ace-message-content').text('Boom!!!'); break; case 0: ACE.Messages.hide('#page-context-message-autoclose'); break; default: $('#page-context-message-autoclose').find('.ace-message-content').text('This message will self destruct in ' + (n - 1) + ' seconds'); } }, 6000 - n * 1000); }); }); $('#page-context-message, #page-context-message-autoclose').on('messageRemoved', function(e){ e.preventDefault(); }); } function closeableMessageOutput() { $(document).on('messageRemoved', function(e, a){ $('#subEvents').append('

Id: ' + a.id + '

Time: ' + a.time + '

Closed: ' + a.closed + '

'); ACE.log('Closed is: ', a.closed); ACE.log('Id is: ', a.id); ACE.log('Time is: ', a.time); }); } function trimExampleWhitespace(selector) { $(selector).each(function(){ var lines, offsetfull = 0, offsettrimmed = 0, source = $(this).text(); // split the content of the PRE element into an array of lines lines = source.split('\n'); // get the whitespace from first line offsetfull = /^\s*/.exec(source)[0]; // remove linebreaks and get resulting length for true offset offsettrimmed = offsetfull.replace(/\r?\n|\r/g, '').length; if (offsettrimmed > 0) { // remove the exess white-space from the beginning of each line lines = lines.map( function (line) { return line.slice(offsettrimmed); }); // trim first-line whitespace to ensure nice rendering // set this new content to the PRE element $(this).text(lines.join('\n').replace(/^\s*/, '')); } }); } function navArrow(){ var navArrowElement = $('#docs-nav-reveal-arrow'); var pageType = $('.docs-nav-reveal-navigation-container').filter(function(i, el) { return $(el).find('a[href="' + pageName + '"]').length; }).find('h3').text(); if (pageName === 'index.html'){ navArrowElement.hide(); } switch (pageType) { case 'ACE': navArrowElement.addClass('docs-nav-reveal-arrow-position-icon1'); break; case 'Foundation': navArrowElement.addClass('docs-nav-reveal-arrow-position-icon2'); break; case 'Elements': navArrowElement.addClass('docs-nav-reveal-arrow-position-icon3'); break; case 'Patterns': navArrowElement.addClass('docs-nav-reveal-arrow-position-icon4'); break; default: navArrowElement.addClass('docs-nav-reveal-arrow-position-icon0'); break; } if ($('.docs-nav-reveal-navigation-column').hasClass('docs-nav-reveal-navigation-column-extended')){ navArrowElement.css('left', '185px'); // Magic Numbers for positioning the arrow horizontally } else { navArrowElement.css('left', '37px'); } } function changeNavIcon(){ var icon = $('.docs-nav-reveal-bar .ace-icon:first'); if ($('.docs-nav-reveal-navigation-column').hasClass('docs-nav-reveal-navigation-column-extended')){ icon.removeClass('ace-icon-acemenu').addClass('ace-icon-aceclose'); } else { icon.removeClass('ace-icon-aceclose').addClass('ace-icon-acemenu'); } } function navRevealSlide(){ $('.docs-nav-reveal-bar').click(function(e){ if (e.target === this){ // Trick to prevent nav from moving if icons are clicked. $(navSelector).toggleClass(navState); navArrow(); saveNavState(); changeNavIcon(); } }); } function saveNavState(){ if ($(navSelector).hasClass(navState)){ localStorage.setItem('navState', 'open'); } else { localStorage.setItem('navState', 'closed'); } } function loadNavState(){ var navLocalStorageState = localStorage.getItem('navState'); if (navLocalStorageState === 'open'){ $(navSelector).addClass(navState); $('#docs-nav-reveal-arrow').css('left', '185px'); changeNavIcon(); } } function buttonPageDisableButtons(){ var cautionButton = $('#docs-caution-button-demo'); var simpleButton = $('#docs-simple-button-demo'); $('#docs-caution-button-disable-link').click(function(){ cautionButton[0].disabled = !cautionButton[0].disabled; }); $('#docs-simple-button-disable-link').click(function(){ simpleButton[0].disabled = !simpleButton[0].disabled; }); } // Button groups will press only one button at a time; // single pressed buttons will toggle themselves. function demoPressedButtons() { $('.ace-button-pressed').each(function() { $(this).on('click', function() { $(this).attr('aria-pressed', ($(this).attr('aria-pressed') === 'false') ? 'true' : 'false'); $(this).siblings().attr('aria-pressed', 'false'); }); }); } // Adds deep link affordance to any heading which has an ID. // Can be avoided with the attr deeplink="false" function deepLink() { // if you can't pushState this is all for nought, so run away if (history.pushState) { // fugliest selector that ever did select $('h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]').each(function(){ var $linkHeading = $(this); var link = '#' + $linkHeading.attr('id'); // allow prevention of deep link if ($linkHeading.attr('deeplink') === 'false') { // clean up the attr in case it's in a code example $linkHeading.removeAttr('deeplink'); } else { // otherwise go ahead and make that thing push state $linkHeading.addClass('deeplink'); $linkHeading.on('click', function(){ history.pushState(null, null, link); return false; }); } }); } } function codeExampleTabs() { // Initial page language var lang = 'html'; if (querySting.lang) { lang = querySting.lang; } else if (localStorage && localStorage.lang) { lang = localStorage.lang; } function updateTabs(language, callback) { if (localStorage) { localStorage.lang = language; } setTimeout(function () { $('.code-tab-' + language).each(function () { ACE.Tabs.switchToTabId(this.id); }); if (typeof callback === 'function') { callback(); } }, 0); } // Changing code tabs $('.code-tab-set .ace-tabs-nav').on('click', 'a', function () { var language = 'html', a = this, windowScrollTopBefore = window.scrollY, viewportTopBefore = a.getBoundingClientRect().top, parentID = a.parentNode.getAttribute('id'); if (a.parentElement.id.indexOf('asp') !== -1) { language = 'asp'; } updateTabs(language, function () { setTimeout(function() { var viewportTopAfter = a.getBoundingClientRect().top; window.scrollTo(0, windowScrollTopBefore + viewportTopAfter - viewportTopBefore); }, 0); }); // for easier copy and paste, set URL to current tab and language if (history.pushState) { history.pushState(null, null, '?lang=' + language + '#' + parentID); } }); updateTabs(lang); } $(document).ready( function() { // ACE components/demos toggles(); closeableMessageOutput(); buttonPageDisableButtons(); dialogs(); messages(); demoPressedButtons(); // doc nav navRevealSlide(); navArrow(); changeNavIcon(); loadNavState(); deepLink(); // hackity hack. will be using this as a polyfill for IE9 and below once we convert layout to use flexbox // ACE.ShrinkWrap($('#header-controls-wrap'), $('#header-controls'), true, false); // code samples and visible version number trimExampleWhitespace('.codesample'); codeExampleTabs(); $('#ace-version').text(ACE.version()); ACE.log('Current ACE docs can be found at http://ace.ansarada.com/'); }); })(window.ACE, window.jQuery);