summaryrefslogtreecommitdiffstats
path: root/theme/javascript
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-02-17 14:07:15 +0100
committerSamy Pessé <samypesse@gmail.com>2016-02-17 14:07:15 +0100
commit6ee9a3a64c76109719227a056ae2b29cb447cd76 (patch)
tree4cc2f8202a83369501a74625ee953b10b286de5b /theme/javascript
parentc0196c97a50786cd28c9b72197b39fefb47be333 (diff)
downloadgitbook-6ee9a3a64c76109719227a056ae2b29cb447cd76.zip
gitbook-6ee9a3a64c76109719227a056ae2b29cb447cd76.tar.gz
gitbook-6ee9a3a64c76109719227a056ae2b29cb447cd76.tar.bz2
Remove old theme
Diffstat (limited to 'theme/javascript')
-rw-r--r--theme/javascript/dropdown.js25
-rw-r--r--theme/javascript/events.js4
-rwxr-xr-xtheme/javascript/index.js84
-rw-r--r--theme/javascript/keyboard.js36
-rw-r--r--theme/javascript/loading.js14
-rw-r--r--theme/javascript/navigation.js165
-rw-r--r--theme/javascript/platform.js5
-rw-r--r--theme/javascript/sidebar.js56
-rw-r--r--theme/javascript/state.js38
-rw-r--r--theme/javascript/storage.js37
-rw-r--r--theme/javascript/toolbar.js181
11 files changed, 0 insertions, 645 deletions
diff --git a/theme/javascript/dropdown.js b/theme/javascript/dropdown.js
deleted file mode 100644
index d6fc548..0000000
--- a/theme/javascript/dropdown.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var $ = require('jquery');
-
-function toggleDropdown(e) {
- var $dropdown = $(e.currentTarget).parent().find('.dropdown-menu');
-
- $dropdown.toggleClass('open');
- e.stopPropagation();
- e.preventDefault();
-}
-
-function closeDropdown(e) {
- $('.dropdown-menu').removeClass('open');
-}
-
-// Bind all dropdown
-function init() {
- $(document).on('click', '.toggle-dropdown', toggleDropdown);
- $(document).on('click', '.dropdown-menu', function(e){ e.stopPropagation(); });
- $(document).on('click', closeDropdown);
-}
-
-module.exports = {
- init: init
-};
-
diff --git a/theme/javascript/events.js b/theme/javascript/events.js
deleted file mode 100644
index 9b9a730..0000000
--- a/theme/javascript/events.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var $ = require('jquery');
-
-module.exports = $({});
-
diff --git a/theme/javascript/index.js b/theme/javascript/index.js
deleted file mode 100755
index b22f810..0000000
--- a/theme/javascript/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-var $ = require('jquery');
-var _ = require('lodash');
-
-var storage = require('./storage');
-var dropdown = require('./dropdown');
-var events = require('./events');
-var state = require('./state');
-var keyboard = require('./keyboard');
-var navigation = require('./navigation');
-var sidebar = require('./sidebar');
-var toolbar = require('./toolbar');
-
-
-function start(config) {
- // Init sidebar
- sidebar.init();
-
- // Init keyboard
- keyboard.init();
-
- // Bind dropdown
- dropdown.init();
-
- // Init navigation
- navigation.init();
-
-
- // Add action to toggle sidebar
- toolbar.createButton({
- index: 0,
- icon: 'fa fa-align-justify',
- onClick: function(e) {
- e.preventDefault();
- sidebar.toggle();
- }
- });
-
- events.trigger('start', config);
- navigation.notify();
-}
-
-// Export APIs for plugins
-var gitbook = {
- start: start,
- events: events,
- state: state,
-
- // UI sections
- toolbar: toolbar,
- sidebar: sidebar,
-
- // Read/Write the localstorage
- storage: storage,
-
- // Create keyboard shortcuts
- keyboard: keyboard
-};
-
-
-// Modules mapping for plugins
-var MODULES = {
- 'gitbook': gitbook,
- 'jquery': $,
- 'lodash': _
-};
-
-window.gitbook = gitbook;
-window.$ = $;
-window.jQuery = $;
-window.require = function(mods, fn) {
- mods = _.map(mods, function(mod) {
- mod = mod.toLowerCase();
- if (!MODULES[mod]) {
- throw new Error('GitBook module '+mod+' doesn\'t exist');
- }
-
- return MODULES[mod];
- });
-
- fn.apply(null, mods);
-};
-
-module.exports = {};
-
diff --git a/theme/javascript/keyboard.js b/theme/javascript/keyboard.js
deleted file mode 100644
index ab0cef6..0000000
--- a/theme/javascript/keyboard.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var Mousetrap = require('mousetrap');
-
-var navigation = require('./navigation');
-var sidebar = require('./sidebar');
-
-// Bind a keyboard shortcuts
-function bindShortcut(keys, fn) {
- Mousetrap.bind(keys, function(e) {
- fn();
- return false;
- });
-}
-
-
-// Bind keyboard shortcuts
-function init() {
- // Next
- bindShortcut(['right'], function(e) {
- navigation.goNext();
- });
-
- // Prev
- bindShortcut(['left'], function(e) {
- navigation.goPrev();
- });
-
- // Toggle Summary
- bindShortcut(['s'], function(e) {
- sidebar.toggle();
- });
-}
-
-module.exports = {
- init: init,
- bind: bindShortcut
-};
diff --git a/theme/javascript/loading.js b/theme/javascript/loading.js
deleted file mode 100644
index 797b487..0000000
--- a/theme/javascript/loading.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var state = require('./state');
-
-function showLoading(p) {
- state.$book.addClass('is-loading');
- p.always(function() {
- state.$book.removeClass('is-loading');
- });
-
- return p;
-}
-
-module.exports = {
- show: showLoading
-};
diff --git a/theme/javascript/navigation.js b/theme/javascript/navigation.js
deleted file mode 100644
index dd3bf2e..0000000
--- a/theme/javascript/navigation.js
+++ /dev/null
@@ -1,165 +0,0 @@
-var $ = require('jquery');
-var url = require('url');
-
-var events = require('./events');
-var state = require('./state');
-var loading = require('./loading');
-
-
-var usePushState = (typeof history.pushState !== 'undefined');
-
-function handleNavigation(relativeUrl, push) {
- var uri = url.resolve(window.location.pathname, relativeUrl);
-
- if (!usePushState) {
- // Refresh the page to the new URL if pushState not supported
- location.href = relativeUrl;
- return;
- }
-
- return loading.show($.get(uri)
- .done(function (html) {
- // Push url to history
- if (push) history.pushState({ path: uri }, null, uri);
-
- // Replace html content
- html = html.replace( /<(\/?)(html|head|body)([^>]*)>/ig, function(a,b,c,d){
- return '<' + b + 'div' + ( b ? '' : ' data-element="' + c + '"' ) + d + '>';
- });
-
- var $page = $(html);
- var $pageHead = $page.find('[data-element=head]');
- var $pageBody = $page.find('.book');
-
- // Merge heads
- // !! Warning !!: we only update necessary portions to avoid strange behavior (page flickering etc ...)
-
- // Update title
- document.title = $pageHead.find('title').text();
-
- // Reference to $('head');
- var $head = $('head');
-
- // Update next & prev <link> tags
- // Remove old
- $head.find('link[rel=prev]').remove();
- $head.find('link[rel=next]').remove();
-
- // Add new next * prev <link> tags
- $head.append($pageHead.find('link[rel=prev]'));
- $head.append($pageHead.find('link[rel=next]'));
-
- // Merge body
- var bodyClass = $('.book').attr('class');
- var scrollPosition = $('.book-summary .summary').scrollTop();
- $pageBody.toggleClass('with-summary', $('.book').hasClass('with-summary'));
-
- $('.book').replaceWith($pageBody);
- $('.book').attr('class', bodyClass);
- $('.book-summary .summary').scrollTop(scrollPosition);
-
- // Update state
- state.update($('html'));
- preparePage();
- })
- .fail(function (e) {
- location.href = relativeUrl;
- }));
-}
-
-function updateNavigationPosition() {
- var bodyInnerWidth, pageWrapperWidth;
-
- bodyInnerWidth = parseInt($('.body-inner').css('width'), 10);
- pageWrapperWidth = parseInt($('.page-wrapper').css('width'), 10);
- $('.navigation-next').css('margin-right', (bodyInnerWidth - pageWrapperWidth) + 'px');
-}
-
-function notifyPageChange() {
- events.trigger('page.change');
-}
-
-function preparePage(notify) {
- var $bookBody = $('.book-body');
- var $bookInner = $bookBody.find('.body-inner');
- var $pageWrapper = $bookInner.find('.page-wrapper');
-
- // Update navigation position
- updateNavigationPosition();
-
- // Focus on content
- $pageWrapper.focus();
-
- // Reset scroll
- $bookInner.scrollTop(0);
- $bookBody.scrollTop(0);
-
- // Notify
- if (notify !== false) notifyPageChange();
-}
-
-function isLeftClickEvent(e) {
- return e.button === 0;
-}
-
-function isModifiedEvent(e) {
- return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);
-}
-
-function handlePagination(e) {
- if (isModifiedEvent(e) || !isLeftClickEvent(e)) {
- return;
- }
-
- e.stopPropagation();
- e.preventDefault();
-
- var url = $(this).attr('href');
- if (url) handleNavigation(url, true);
-}
-
-function goNext() {
- var url = $('.navigation-next').attr('href');
- if (url) handleNavigation(url, true);
-}
-
-function goPrev() {
- var url = $('.navigation-prev').attr('href');
- if (url) handleNavigation(url, true);
-}
-
-
-function init() {
- // Prevent cache so that using the back button works
- // See: http://stackoverflow.com/a/15805399/983070
- $.ajaxSetup({
- cache: false
- });
-
- // Recreate first page when the page loads.
- history.replaceState({ path: window.location.href }, '');
-
- // Back Button Hijacking :(
- window.onpopstate = function (event) {
- if (event.state === null) {
- return;
- }
- return handleNavigation(event.state.path, false);
- };
-
- $(document).on('click', '.navigation-prev', handlePagination);
- $(document).on('click', '.navigation-next', handlePagination);
- $(document).on('click', '.summary [data-path] a', handlePagination);
-
- $(window).resize(updateNavigationPosition);
-
- // Prepare current page
- preparePage(false);
-}
-
-module.exports = {
- init: init,
- goNext: goNext,
- goPrev: goPrev,
- notify: notifyPageChange
-};
diff --git a/theme/javascript/platform.js b/theme/javascript/platform.js
deleted file mode 100644
index b6fb453..0000000
--- a/theme/javascript/platform.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- isMobile: function() {
- return (document.width <= 600);
- }
-};
diff --git a/theme/javascript/sidebar.js b/theme/javascript/sidebar.js
deleted file mode 100644
index 9fc1e8e..0000000
--- a/theme/javascript/sidebar.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var $ = require('jquery');
-var _ = require('lodash');
-
-var storage = require('./storage');
-var platform = require('./platform');
-var state = require('./state');
-
-
-// Toggle sidebar with or withour animation
-function toggleSidebar(_state, animation) {
- if (state != null && isOpen() == _state) return;
- if (animation == null) animation = true;
-
- state.$book.toggleClass('without-animation', !animation);
- state.$book.toggleClass('with-summary', _state);
-
- storage.set('sidebar', isOpen());
-}
-
-// Return true if sidebar is open
-function isOpen() {
- return state.$book.hasClass('with-summary');
-}
-
-// Prepare sidebar: state and toggle button
-function init() {
- // Init last state if not mobile
- if (!platform.isMobile()) {
- toggleSidebar(storage.get('sidebar', true), false);
- }
-
- // Close sidebar after clicking a link on mobile
- $(document).on('click', '.book-summary li.chapter a', function(e) {
- if (platform.isMobile()) toggleSidebar(false, false);
- });
-}
-
-// Filter summary with a list of path
-function filterSummary(paths) {
- var $summary = $('.book-summary');
-
- $summary.find('li').each(function() {
- var path = $(this).data('path');
- var st = paths == null || _.contains(paths, path);
-
- $(this).toggle(st);
- if (st) $(this).parents('li').show();
- });
-}
-
-module.exports = {
- init: init,
- isOpen: isOpen,
- toggle: toggleSidebar,
- filter: filterSummary
-};
diff --git a/theme/javascript/state.js b/theme/javascript/state.js
deleted file mode 100644
index ef1eb04..0000000
--- a/theme/javascript/state.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var $ = require('jquery');
-var url = require('url');
-var path = require('path');
-
-var state = {};
-
-state.update = function(dom) {
- var $book = $(dom.find('.book'));
-
- state.$book = $book;
- state.level = $book.data('level');
- state.basePath = $book.data('basepath');
-
- // If book is multilingual, language of this book
- state.innerLanguage = $book.data('innerlanguage');
-
- // Date of build
- state.revision = $book.data('revision');
-
- // Original path of the file
- state.filepath = $book.data('filepath');
-
- // Title of the chapter
- state.chapterTitle = $book.data('chapter-title');
-
- // Absolute url to the root of the book (inner book)
- state.root = url.resolve(
- location.protocol+'//'+location.host,
- path.dirname(path.resolve(location.pathname.replace(/\/$/, '/index.html'), state.basePath))
- ).replace(/\/?$/, '/');
-
- // Absolute root to the language (for multilingual book)
- state.bookRoot = state.innerLanguage? url.resolve(state.root, '..') : state.root;
-};
-
-state.update($);
-
-module.exports = state;
diff --git a/theme/javascript/storage.js b/theme/javascript/storage.js
deleted file mode 100644
index 7a7643c..0000000
--- a/theme/javascript/storage.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var baseKey = '';
-
-/*
- * Simple module for storing data in the browser's local storage
- */
-module.exports = {
- setBaseKey: function(key) {
- baseKey = key;
- },
-
- // Write something in localstorage
- set: function(key, value) {
- key = baseKey+':'+key;
-
- try {
- localStorage[key] = JSON.stringify(value);
- } catch(e) {}
- },
-
- // Read a value from localstorage
- get: function(key, def) {
- key = baseKey+':'+key;
- if (localStorage[key] === undefined) return def;
- try {
- var v = JSON.parse(localStorage[key]);
- return v == null ? def : v;;
- } catch(err) {
- return localStorage[key] || def;
- }
- },
-
- // Remove a key from localstorage
- remove: function(key) {
- key = baseKey+':'+key;
- localStorage.removeItem(key);
- }
-};
diff --git a/theme/javascript/toolbar.js b/theme/javascript/toolbar.js
deleted file mode 100644
index 647578f..0000000
--- a/theme/javascript/toolbar.js
+++ /dev/null
@@ -1,181 +0,0 @@
-var $ = require('jquery');
-var _ = require('lodash');
-
-var events = require('./events');
-
-// List of created buttons
-var buttons = [];
-
-// Insert a jquery element at a specific position
-function insertAt(parent, selector, index, element) {
- var lastIndex = parent.children(selector).size();
- if (index < 0) {
- index = Math.max(0, lastIndex + 1 + index);
- }
- parent.append(element);
-
- if (index < lastIndex) {
- parent.children(selector).eq(index).before(parent.children(selector).last());
- }
-}
-
-// Default click handler
-function defaultOnClick(e) {
- e.preventDefault();
-}
-
-// Create a dropdown menu
-function createDropdownMenu(dropdown) {
- var $menu = $('<div>', {
- 'class': 'dropdown-menu',
- 'html': '<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>'
- });
-
- if (_.isString(dropdown)) {
- $menu.append(dropdown);
- } else {
- var groups = _.map(dropdown, function(group) {
- if (_.isArray(group)) return group;
- else return [group];
- });
-
- // Create buttons groups
- _.each(groups, function(group) {
- var $group = $('<div>', {
- 'class': 'buttons'
- });
- var sizeClass = 'size-'+group.length;
-
- // Append buttons
- _.each(group, function(btn) {
- btn = _.defaults(btn || {}, {
- text: '',
- className: '',
- onClick: defaultOnClick
- });
-
- var $btn = $('<button>', {
- 'class': 'button '+sizeClass+' '+btn.className,
- 'text': btn.text
- });
- $btn.click(btn.onClick);
-
- $group.append($btn);
- });
-
-
- $menu.append($group);
- });
-
- }
-
-
- return $menu;
-}
-
-// Create a new button in the toolbar
-function createButton(opts) {
- opts = _.defaults(opts || {}, {
- // Aria label for the button
- label: '',
-
- // Icon to show
- icon: '',
-
- // Inner text
- text: '',
-
- // Right or left position
- position: 'left',
-
- // Other class name to add to the button
- className: '',
-
- // Triggered when user click on the button
- onClick: defaultOnClick,
-
- // Button is a dropdown
- dropdown: null,
-
- // Position in the toolbar
- index: null
- });
-
- buttons.push(opts);
- updateButton(opts);
-}
-
-// Update a button
-function updateButton(opts) {
- var $result;
- var $toolbar = $('.book-header');
- var $title = $toolbar.find('h1');
-
- // Build class name
- var positionClass = 'pull-'+opts.position;
-
- // Create button
- var $btn = $('<a>', {
- 'class': 'btn',
- 'text': opts.text? ' ' + opts.text : '',
- 'aria-label': opts.label,
- 'href': '#'
- });
-
- // Bind click
- $btn.click(opts.onClick);
-
- // Prepend icon
- if (opts.icon) {
- $('<i>', {
- 'class': opts.icon
- }).prependTo($btn);
- }
-
- // Prepare dropdown
- if (opts.dropdown) {
- var $container = $('<div>', {
- 'class': 'dropdown '+positionClass+' '+opts.className
- });
-
- // Add button to container
- $btn.addClass('toggle-dropdown');
- $container.append($btn);
-
- // Create inner menu
- var $menu = createDropdownMenu(opts.dropdown);
-
- // Menu position
- $menu.addClass('dropdown-'+(opts.position == 'right'? 'left' : 'right'));
-
- $container.append($menu);
- $result = $container;
- } else {
- $btn.addClass(positionClass);
- $btn.addClass(opts.className);
- $result = $btn;
- }
-
- $result.addClass('js-toolbar-action');
-
- if (_.isNumber(opts.index) && opts.index >= 0) {
- insertAt($toolbar, '.btn, .dropdown, h1', opts.index, $result);
- } else {
- $result.insertBefore($title);
- }
-}
-
-// Update all buttons
-function updateAllButtons() {
- $('.js-toolbar-action').remove();
- _.each(buttons, updateButton);
-}
-
-// When page changed, reset buttons
-events.bind('page.change', function() {
- updateAllButtons();
-});
-
-module.exports = {
- createButton: createButton
-};