From 872c00a894297c9427701c3bff176e893e89a2a8 Mon Sep 17 00:00:00 2001 From: Simon Tennant Date: Thu, 19 Feb 2015 16:05:18 +0100 Subject: [PATCH 0001/1111] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index df59c94f7f2..a60e52180e3 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Examples of Slate in the Wild * [Dwolla API docs](https://docs.dwolla.com/) * [RozpisyZapasu API docs](http://www.rozpisyzapasu.cz/dev/api/) * [Codestar Framework Docs](http://codestarframework.com/documentation/) +* [Buddycloud API](http://buddycloud/api/) (Feel free to add your site to this list in a pull request!) From 8eada057dacf989e2ef13520c24dcd47fa4cb43e Mon Sep 17 00:00:00 2001 From: Simon Tennant Date: Thu, 19 Feb 2015 17:23:38 +0100 Subject: [PATCH 0002/1111] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a60e52180e3..81958465bf6 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Examples of Slate in the Wild * [Dwolla API docs](https://docs.dwolla.com/) * [RozpisyZapasu API docs](http://www.rozpisyzapasu.cz/dev/api/) * [Codestar Framework Docs](http://codestarframework.com/documentation/) -* [Buddycloud API](http://buddycloud/api/) +* [Buddycloud API](http://buddycloud.com/api/) (Feel free to add your site to this list in a pull request!) From 10179a661311dce957b389fc0bcf2eb5039de195 Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Mon, 23 Feb 2015 11:05:57 -0800 Subject: [PATCH 0003/1111] Easy setup with Docker --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index df59c94f7f2..61c261113f8 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,18 @@ You're going to need: 4. Install all dependencies: `bundle install` 5. Start the test server: `bundle exec middleman server` +Or use the included Dockerfile! (must install Docker first) + +```shell +docker build -t slate . +docker run -d -p 4567:4567 slate +``` + You can now see the docs at . Whoa! That was fast! +*Note: if you're using the Docker setup on OSX, the docs will be +availalable at the output of `boot2docker ip` instead of `localhost:4567`.* + Now that Slate is all set up your machine, you'll probably want to learn more about [editing Slate markdown](https://github.com/tripit/slate/wiki/Markdown-Syntax), or [how to publish your docs](https://github.com/tripit/slate/wiki/Deploying-Slate). Examples of Slate in the Wild From dfa162fed59443302a908181932785f210e7ddcc Mon Sep 17 00:00:00 2001 From: Simon Tennant Date: Tue, 24 Feb 2015 15:37:39 +0100 Subject: [PATCH 0004/1111] Take 2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 81958465bf6..d556933bda7 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Examples of Slate in the Wild * [Dwolla API docs](https://docs.dwolla.com/) * [RozpisyZapasu API docs](http://www.rozpisyzapasu.cz/dev/api/) * [Codestar Framework Docs](http://codestarframework.com/documentation/) -* [Buddycloud API](http://buddycloud.com/api/) +* [Buddycloud API](http://buddycloud.com/api) (Feel free to add your site to this list in a pull request!) From b744ba51bbc3308b586cb38350f4990624d97223 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Tue, 24 Feb 2015 12:21:37 -0600 Subject: [PATCH 0005/1111] Add @realityking to contributors list --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9fad33dd8b9..23ca019a751 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ Thanks to the following people who have submitted major pull requests: - [@chrissrogers](https://github.com/chrissrogers) - [@bootstraponline](https://github.com/bootstraponline) +- [@realityking](https://github.com/realityking) Also, thanks to [Sauce Labs](http://saucelabs.com) for helping sponsor the project. From e619c48a94d0bc1975041140bf940949551e9154 Mon Sep 17 00:00:00 2001 From: Adam Stylo Date: Thu, 12 Mar 2015 15:55:09 +0000 Subject: [PATCH 0006/1111] added Crafty Clicks API to Slate in the Wild list --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 23ca019a751..f7019976e4a 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ Examples of Slate in the Wild * [RozpisyZapasu API docs](http://www.rozpisyzapasu.cz/dev/api/) * [Codestar Framework Docs](http://codestarframework.com/documentation/) * [Buddycloud API](http://buddycloud.com/api) +* [Crafty Clicks API](https://craftyclicks.co.uk/api/) (Feel free to add your site to this list in a pull request!) From 97f87c9c4a07294d0524fba5b076645eacb4b749 Mon Sep 17 00:00:00 2001 From: xunzhang Date: Tue, 17 Mar 2015 12:27:07 +0800 Subject: [PATCH 0007/1111] Examples of Slate in the Wild update in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f7019976e4a..fbd68f49fbf 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ Examples of Slate in the Wild * [Codestar Framework Docs](http://codestarframework.com/documentation/) * [Buddycloud API](http://buddycloud.com/api) * [Crafty Clicks API](https://craftyclicks.co.uk/api/) +* [Paracel API Reference](http://paracel.io/docs/api_reference.html) (Feel free to add your site to this list in a pull request!) From fd2f54b3de006fab48becd2a0f39766c32ecffe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Tavares?= Date: Wed, 8 Apr 2015 15:17:00 +0100 Subject: [PATCH 0008/1111] Added Switch Payments to list of examples. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fbd68f49fbf..dadf610cd38 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ Examples of Slate in the Wild * [Buddycloud API](http://buddycloud.com/api) * [Crafty Clicks API](https://craftyclicks.co.uk/api/) * [Paracel API Reference](http://paracel.io/docs/api_reference.html) +* [Switch Payments Documentation](http://switchpayments.com/docs/) & [API](http://switchpayments.com/developers/) (Feel free to add your site to this list in a pull request!) From f5dcc4efb85eab45fe8ec4a81a17edc76ca7976c Mon Sep 17 00:00:00 2001 From: Elliot Lee Date: Tue, 14 Apr 2015 20:24:31 -0700 Subject: [PATCH 0009/1111] Add Coinbase to list of examples --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dadf610cd38..b880cb3d2a4 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ Examples of Slate in the Wild * [Crafty Clicks API](https://craftyclicks.co.uk/api/) * [Paracel API Reference](http://paracel.io/docs/api_reference.html) * [Switch Payments Documentation](http://switchpayments.com/docs/) & [API](http://switchpayments.com/developers/) +* [Coinbase API Reference](https://developers.coinbase.com/api) (Feel free to add your site to this list in a pull request!) From 8e0396d7d3081df5c08dac6a762abfb351119756 Mon Sep 17 00:00:00 2001 From: Jordan Walsh Date: Tue, 21 Apr 2015 19:06:15 +1000 Subject: [PATCH 0010/1111] added whispir.io to the list of reference sites --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b880cb3d2a4..98d7e1ff633 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ Examples of Slate in the Wild * [Paracel API Reference](http://paracel.io/docs/api_reference.html) * [Switch Payments Documentation](http://switchpayments.com/docs/) & [API](http://switchpayments.com/developers/) * [Coinbase API Reference](https://developers.coinbase.com/api) +* [Whispir.io API](https://whispir.github.io/api) (Feel free to add your site to this list in a pull request!) From 0bb523732ec65251eb77b880e9861c848881c2c2 Mon Sep 17 00:00:00 2001 From: David Stanley Date: Tue, 21 Apr 2015 15:57:48 -0700 Subject: [PATCH 0011/1111] Update of Readme Just saw that freaking NASA is using this for docs! --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 98d7e1ff633..b53391bc2bc 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ Examples of Slate in the Wild * [Switch Payments Documentation](http://switchpayments.com/docs/) & [API](http://switchpayments.com/developers/) * [Coinbase API Reference](https://developers.coinbase.com/api) * [Whispir.io API](https://whispir.github.io/api) +* [Nasa API](https://data.nasa.gov/developer/external/planetary/) (Feel free to add your site to this list in a pull request!) From 923add84f644553519495cd0043241526aa51180 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Thu, 23 Apr 2015 21:33:40 +0300 Subject: [PATCH 0012/1111] added api example: developers.cardpay.com --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b53391bc2bc..c3c907b89a8 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ Examples of Slate in the Wild * [Coinbase API Reference](https://developers.coinbase.com/api) * [Whispir.io API](https://whispir.github.io/api) * [Nasa API](https://data.nasa.gov/developer/external/planetary/) +* [CardPay API](https://developers.cardpay.com/) (Feel free to add your site to this list in a pull request!) From 321a994cdc5b71bea23e9367fc5acff0a5d5b7dc Mon Sep 17 00:00:00 2001 From: Norton Wang Date: Wed, 29 Apr 2015 18:14:36 -0400 Subject: [PATCH 0013/1111] Fix typo --- source/includes/_errors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/includes/_errors.md b/source/includes/_errors.md index eeefbb5b777..56cffb34d22 100644 --- a/source/includes/_errors.md +++ b/source/includes/_errors.md @@ -15,6 +15,6 @@ Error Code | Meaning 406 | Not Acceptable -- You requested a format that isn't json 410 | Gone -- The kitten requested has been removed from our servers 418 | I'm a teapot -429 | Too Many Requests -- You're requesting too many kittens! Slown down! +429 | Too Many Requests -- You're requesting too many kittens! Slow down! 500 | Internal Server Error -- We had a problem with our server. Try again later. -503 | Service Unavailable -- We're temporarially offline for maintanance. Please try again later. \ No newline at end of file +503 | Service Unavailable -- We're temporarially offline for maintanance. Please try again later. From 506095a1ede15daa2f9aaec09b45910a0ef5a8b9 Mon Sep 17 00:00:00 2001 From: Matthias Kadenbach Date: Tue, 10 Feb 2015 21:38:14 +0100 Subject: [PATCH 0014/1111] Add git to allow rake build --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2908508ca42..8183c7a8b04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:trusty RUN apt-get update -RUN apt-get install -yq ruby ruby-dev build-essential +RUN apt-get install -yq ruby ruby-dev build-essential git RUN gem install --no-ri --no-rdoc bundler ADD Gemfile /app/Gemfile ADD Gemfile.lock /app/Gemfile.lock @@ -9,4 +9,4 @@ RUN cd /app; bundle install ADD . /app EXPOSE 4567 WORKDIR /app -CMD ["bundle", "exec", "middleman", "server"] \ No newline at end of file +CMD ["bundle", "exec", "middleman", "server"] From 6062141cce7e87b74c7b9d0067825299152e0dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Thu, 12 Feb 2015 21:03:59 +0100 Subject: [PATCH 0015/1111] Update Rouge to Version 1.8 --- Gemfile | 4 ++-- Gemfile.lock | 4 ++-- source/javascripts/app/lang.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 1bb18a8af81..7ea1a883efd 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ # the following line to use "https" source 'http://rubygems.org' -gem "rouge", "1.7.2" +gem "rouge", "~> 1.8.0" gem "middleman", "~>3.3.0" @@ -27,4 +27,4 @@ end gem "rake", "~> 10.4.0" -gem 'therubyracer', :platforms => :ruby \ No newline at end of file +gem 'therubyracer', :platforms => :ruby diff --git a/Gemfile.lock b/Gemfile.lock index 023bfbe580b..4397878a67f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,7 +104,7 @@ GEM ffi (>= 0.5.0) redcarpet (3.2.2) ref (1.0.5) - rouge (1.7.2) + rouge (1.8.0) ruby18_source_location (0.2) sass (3.4.9) sprockets (2.12.3) @@ -142,7 +142,7 @@ DEPENDENCIES middleman-syntax rake (~> 10.4.0) redcarpet (~> 3.2.1) - rouge (= 1.7.2) + rouge (~> 1.8.0) ruby18_source_location therubyracer wdm (~> 0.1.0) diff --git a/source/javascripts/app/lang.js b/source/javascripts/app/lang.js index 90a31b9bbc3..c59a16b2311 100644 --- a/source/javascripts/app/lang.js +++ b/source/javascripts/app/lang.js @@ -26,9 +26,9 @@ under the License. $(".lang-selector a").removeClass('active'); $(".lang-selector a[data-language-name='" + language + "']").addClass('active'); for (var i=0; i < languages.length; i++) { - $(".highlight." + languages[i]).parent().hide(); + $(".highlight." + languages[i]).hide(); } - $(".highlight." + language).parent().show(); + $(".highlight." + language).show(); global.toc.calculateHeights(); From a60fd38cda7f3939eddeeb7c693d0e589aa57a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Thu, 12 Feb 2015 21:27:03 +0100 Subject: [PATCH 0016/1111] Use strict mode for JavaScript --- source/javascripts/app/lang.js | 2 ++ source/javascripts/app/search.js | 1 + source/javascripts/app/toc.js | 1 + 3 files changed, 4 insertions(+) diff --git a/source/javascripts/app/lang.js b/source/javascripts/app/lang.js index c59a16b2311..2683ef356db 100644 --- a/source/javascripts/app/lang.js +++ b/source/javascripts/app/lang.js @@ -14,6 +14,8 @@ License for the specific language governing permissions and limitations under the License. */ (function (global) { + 'use strict'; + var languages = []; global.setupLanguages = setupLanguages; diff --git a/source/javascripts/app/search.js b/source/javascripts/app/search.js index 8c527c715da..cf2eaf8cb63 100644 --- a/source/javascripts/app/search.js +++ b/source/javascripts/app/search.js @@ -1,4 +1,5 @@ (function (global) { + 'use strict'; var $global = $(global); var content, darkBox, searchResults; diff --git a/source/javascripts/app/toc.js b/source/javascripts/app/toc.js index 779e37e7655..c88b67f2b70 100644 --- a/source/javascripts/app/toc.js +++ b/source/javascripts/app/toc.js @@ -1,4 +1,5 @@ (function (global) { + 'use strict'; var closeToc = function() { $(".tocify-wrapper").removeClass('open'); From 3a236aa81eb40f677e51590fb0fff5039dee4d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Thu, 12 Feb 2015 21:48:03 +0100 Subject: [PATCH 0017/1111] Update jQuery to version 2.1.3 --- source/layouts/layout.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/layouts/layout.erb b/source/layouts/layout.erb index 915505b0405..36ae0f95f81 100644 --- a/source/layouts/layout.erb +++ b/source/layouts/layout.erb @@ -24,7 +24,7 @@ under the License. <%= stylesheet_link_tag :screen, media: :screen %> <%= stylesheet_link_tag :print, media: :print %> - + <% if current_page.data.search %> <%= javascript_include_tag "all" %> <% else %> From b1e0ff5d94bae05a47f8408214c9d870401ad3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Thu, 12 Feb 2015 21:48:59 +0100 Subject: [PATCH 0018/1111] Update lunr.js to version 0.5.7 --- source/javascripts/lib/lunr.js | 3258 ++++++++++++++++---------------- 1 file changed, 1644 insertions(+), 1614 deletions(-) diff --git a/source/javascripts/lib/lunr.js b/source/javascripts/lib/lunr.js index bd221b7e3ba..54457dab7a8 100644 --- a/source/javascripts/lib/lunr.js +++ b/source/javascripts/lib/lunr.js @@ -1,5 +1,5 @@ /** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.2 + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.7 * Copyright (C) 2014 Oliver Nightingale * MIT Licensed * @license @@ -7,1851 +7,1881 @@ (function(){ -/** - * Convenience function for instantiating a new lunr index and configuring it - * with the default pipeline functions and the passed config function. - * - * When using this convenience function a new index will be created with the - * following functions already in the pipeline: - * - * lunr.StopWordFilter - filters out any stop words before they enter the - * index - * - * lunr.stemmer - stems the tokens before entering the index. - * - * Example: - * - * var idx = lunr(function () { + /** + * Convenience function for instantiating a new lunr index and configuring it + * with the default pipeline functions and the passed config function. + * + * When using this convenience function a new index will be created with the + * following functions already in the pipeline: + * + * lunr.StopWordFilter - filters out any stop words before they enter the + * index + * + * lunr.stemmer - stems the tokens before entering the index. + * + * Example: + * + * var idx = lunr(function () { * this.field('title', 10) * this.field('tags', 100) * this.field('body') - * + * * this.ref('cid') - * + * * this.pipeline.add(function () { * // some custom pipeline function * }) - * - * }) - * - * @param {Function} config A function that will be called with the new instance - * of the lunr.Index as both its context and first parameter. It can be used to - * customize the instance of new lunr.Index. - * @namespace - * @module - * @returns {lunr.Index} * - */ -var lunr = function (config) { - var idx = new lunr.Index + * }) + * + * @param {Function} config A function that will be called with the new instance + * of the lunr.Index as both its context and first parameter. It can be used to + * customize the instance of new lunr.Index. + * @namespace + * @module + * @returns {lunr.Index} + * + */ + var lunr = function (config) { + var idx = new lunr.Index - idx.pipeline.add( - lunr.trimmer, - lunr.stopWordFilter, - lunr.stemmer - ) + idx.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) - if (config) config.call(idx, idx) + if (config) config.call(idx, idx) - return idx -} + return idx + } -lunr.version = "0.5.2" -/*! - * lunr.utils - * Copyright (C) 2014 Oliver Nightingale - */ + lunr.version = "0.5.7" + /*! + * lunr.utils + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * A namespace containing utils for the rest of the lunr library - */ -lunr.utils = {} + /** + * A namespace containing utils for the rest of the lunr library + */ + lunr.utils = {} -/** - * Print a warning message to the console. - * - * @param {String} message The message to be printed. - * @memberOf Utils - */ -lunr.utils.warn = (function (global) { - return function (message) { - if (global.console && console.warn) { - console.warn(message) + /** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf Utils + */ + lunr.utils.warn = (function (global) { + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } } - } -})(this) + })(this) -/*! - * lunr.EventEmitter - * Copyright (C) 2014 Oliver Nightingale - */ + /*! + * lunr.EventEmitter + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * lunr.EventEmitter is an event emitter for lunr. It manages adding and removing event handlers and triggering events and their handlers. - * - * @constructor - */ -lunr.EventEmitter = function () { - this.events = {} -} + /** + * lunr.EventEmitter is an event emitter for lunr. It manages adding and removing event handlers and triggering events and their handlers. + * + * @constructor + */ + lunr.EventEmitter = function () { + this.events = {} + } -/** - * Binds a handler function to a specific event(s). - * - * Can bind a single function to many different events in one call. - * - * @param {String} [eventName] The name(s) of events to bind this function to. - * @param {Function} handler The function to call when an event is fired. - * @memberOf EventEmitter - */ -lunr.EventEmitter.prototype.addListener = function () { - var args = Array.prototype.slice.call(arguments), - fn = args.pop(), - names = args + /** + * Binds a handler function to a specific event(s). + * + * Can bind a single function to many different events in one call. + * + * @param {String} [eventName] The name(s) of events to bind this function to. + * @param {Function} handler The function to call when an event is fired. + * @memberOf EventEmitter + */ + lunr.EventEmitter.prototype.addListener = function () { + var args = Array.prototype.slice.call(arguments), + fn = args.pop(), + names = args - if (typeof fn !== "function") throw new TypeError ("last argument must be a function") + if (typeof fn !== "function") throw new TypeError ("last argument must be a function") - names.forEach(function (name) { - if (!this.hasHandler(name)) this.events[name] = [] - this.events[name].push(fn) - }, this) -} + names.forEach(function (name) { + if (!this.hasHandler(name)) this.events[name] = [] + this.events[name].push(fn) + }, this) + } -/** - * Removes a handler function from a specific event. - * - * @param {String} eventName The name of the event to remove this function from. - * @param {Function} handler The function to remove from an event. - * @memberOf EventEmitter - */ -lunr.EventEmitter.prototype.removeListener = function (name, fn) { - if (!this.hasHandler(name)) return + /** + * Removes a handler function from a specific event. + * + * @param {String} eventName The name of the event to remove this function from. + * @param {Function} handler The function to remove from an event. + * @memberOf EventEmitter + */ + lunr.EventEmitter.prototype.removeListener = function (name, fn) { + if (!this.hasHandler(name)) return - var fnIndex = this.events[name].indexOf(fn) - this.events[name].splice(fnIndex, 1) + var fnIndex = this.events[name].indexOf(fn) + this.events[name].splice(fnIndex, 1) - if (!this.events[name].length) delete this.events[name] -} + if (!this.events[name].length) delete this.events[name] + } -/** - * Calls all functions bound to the given event. - * - * Additional data can be passed to the event handler as arguments to `emit` - * after the event name. - * - * @param {String} eventName The name of the event to emit. - * @memberOf EventEmitter - */ -lunr.EventEmitter.prototype.emit = function (name) { - if (!this.hasHandler(name)) return + /** + * Calls all functions bound to the given event. + * + * Additional data can be passed to the event handler as arguments to `emit` + * after the event name. + * + * @param {String} eventName The name of the event to emit. + * @memberOf EventEmitter + */ + lunr.EventEmitter.prototype.emit = function (name) { + if (!this.hasHandler(name)) return - var args = Array.prototype.slice.call(arguments, 1) + var args = Array.prototype.slice.call(arguments, 1) - this.events[name].forEach(function (fn) { - fn.apply(undefined, args) - }) -} + this.events[name].forEach(function (fn) { + fn.apply(undefined, args) + }) + } -/** - * Checks whether a handler has ever been stored against an event. - * - * @param {String} eventName The name of the event to check. - * @private - * @memberOf EventEmitter - */ -lunr.EventEmitter.prototype.hasHandler = function (name) { - return name in this.events -} + /** + * Checks whether a handler has ever been stored against an event. + * + * @param {String} eventName The name of the event to check. + * @private + * @memberOf EventEmitter + */ + lunr.EventEmitter.prototype.hasHandler = function (name) { + return name in this.events + } -/*! - * lunr.tokenizer - * Copyright (C) 2014 Oliver Nightingale - */ + /*! + * lunr.tokenizer + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * A function for splitting a string into tokens ready to be inserted into - * the search index. - * - * @module - * @param {String} obj The string to convert into tokens - * @returns {Array} - */ -lunr.tokenizer = function (obj) { - if (!arguments.length || obj == null || obj == undefined) return [] - if (Array.isArray(obj)) return obj.map(function (t) { return t.toLowerCase() }) + /** + * A function for splitting a string into tokens ready to be inserted into + * the search index. + * + * @module + * @param {String} obj The string to convert into tokens + * @returns {Array} + */ + lunr.tokenizer = function (obj) { + if (!arguments.length || obj == null || obj == undefined) return [] + if (Array.isArray(obj)) return obj.map(function (t) { return t.toLowerCase() }) - var str = obj.toString().replace(/^\s+/, '') + var str = obj.toString().replace(/^\s+/, '') - for (var i = str.length - 1; i >= 0; i--) { - if (/\S/.test(str.charAt(i))) { - str = str.substring(0, i + 1) - break + for (var i = str.length - 1; i >= 0; i--) { + if (/\S/.test(str.charAt(i))) { + str = str.substring(0, i + 1) + break + } } + + return str + .split(/(?:\s+|\-)/) + .filter(function (token) { + return !!token + }) + .map(function (token) { + return token.toLowerCase() + }) } + /*! + * lunr.Pipeline + * Copyright (C) 2014 Oliver Nightingale + */ - return str - .split(/\s+/) - .map(function (token) { - return token.toLowerCase() - }) -} -/*! - * lunr.Pipeline - * Copyright (C) 2014 Oliver Nightingale - */ + /** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ + lunr.Pipeline = function () { + this._stack = [] + } -/** - * lunr.Pipelines maintain an ordered list of functions to be applied to all - * tokens in documents entering the search index and queries being ran against - * the index. - * - * An instance of lunr.Index created with the lunr shortcut will contain a - * pipeline with a stop word filter and an English language stemmer. Extra - * functions can be added before or after either of these functions or these - * default functions can be removed. - * - * When run the pipeline will call each function in turn, passing a token, the - * index of that token in the original list of all tokens and finally a list of - * all the original tokens. - * - * The output of functions in the pipeline will be passed to the next function - * in the pipeline. To exclude a token from entering the index the function - * should return undefined, the rest of the pipeline will not be called with - * this token. - * - * For serialisation of pipelines to work, all functions used in an instance of - * a pipeline should be registered with lunr.Pipeline. Registered functions can - * then be loaded. If trying to load a serialised pipeline that uses functions - * that are not registered an error will be thrown. - * - * If not planning on serialising the pipeline then registering pipeline functions - * is not necessary. - * - * @constructor - */ -lunr.Pipeline = function () { - this._stack = [] -} + lunr.Pipeline.registeredFunctions = {} -lunr.Pipeline.registeredFunctions = {} + /** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {Function} fn The function to check for. + * @param {String} label The label to register this function with + * @memberOf Pipeline + */ + lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } -/** - * Register a function with the pipeline. - * - * Functions that are used in the pipeline should be registered if the pipeline - * needs to be serialised, or a serialised pipeline needs to be loaded. - * - * Registering a function does not add it to a pipeline, functions must still be - * added to instances of the pipeline for them to be used when running a pipeline. - * - * @param {Function} fn The function to check for. - * @param {String} label The label to register this function with - * @memberOf Pipeline - */ -lunr.Pipeline.registerFunction = function (fn, label) { - if (label in this.registeredFunctions) { - lunr.utils.warn('Overwriting existing registered function: ' + label) + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn } - fn.label = label - lunr.Pipeline.registeredFunctions[fn.label] = fn -} - -/** - * Warns if the function is not registered as a Pipeline function. - * - * @param {Function} fn The function to check for. - * @private - * @memberOf Pipeline - */ -lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { - var isRegistered = fn.label && (fn.label in this.registeredFunctions) + /** + * Warns if the function is not registered as a Pipeline function. + * + * @param {Function} fn The function to check for. + * @private + * @memberOf Pipeline + */ + lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) - if (!isRegistered) { - lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } } -} -/** - * Loads a previously serialised pipeline. - * - * All functions to be loaded must already be registered with lunr.Pipeline. - * If any function from the serialised data has not been registered then an - * error will be thrown. - * - * @param {Object} serialised The serialised pipeline to load. - * @returns {lunr.Pipeline} - * @memberOf Pipeline - */ -lunr.Pipeline.load = function (serialised) { - var pipeline = new lunr.Pipeline + /** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised The serialised pipeline to load. + * @returns {lunr.Pipeline} + * @memberOf Pipeline + */ + lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline - serialised.forEach(function (fnName) { - var fn = lunr.Pipeline.registeredFunctions[fnName] + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] - if (fn) { - pipeline.add(fn) - } else { - throw new Error ('Cannot load un-registered function: ' + fnName) - } - }) - - return pipeline -} + if (fn) { + pipeline.add(fn) + } else { + throw new Error ('Cannot load un-registered function: ' + fnName) + } + }) -/** - * Adds new functions to the end of the pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {Function} functions Any number of functions to add to the pipeline. - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.add = function () { - var fns = Array.prototype.slice.call(arguments) + return pipeline + } - fns.forEach(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - this._stack.push(fn) - }, this) -} + /** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {Function} functions Any number of functions to add to the pipeline. + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) -/** - * Adds a single function after a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {Function} existingFn A function that already exists in the pipeline. - * @param {Function} newFn The new function to add to the pipeline. - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.after = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) + } - var pos = this._stack.indexOf(existingFn) + 1 - this._stack.splice(pos, 0, newFn) -} + /** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {Function} existingFn A function that already exists in the pipeline. + * @param {Function} newFn The new function to add to the pipeline. + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) -/** - * Adds a single function before a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {Function} existingFn A function that already exists in the pipeline. - * @param {Function} newFn The new function to add to the pipeline. - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.before = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + var pos = this._stack.indexOf(existingFn) + 1 + this._stack.splice(pos, 0, newFn) + } - var pos = this._stack.indexOf(existingFn) - this._stack.splice(pos, 0, newFn) -} + /** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {Function} existingFn A function that already exists in the pipeline. + * @param {Function} newFn The new function to add to the pipeline. + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) -/** - * Removes a function from the pipeline. - * - * @param {Function} fn The function to remove from the pipeline. - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.remove = function (fn) { - var pos = this._stack.indexOf(fn) - this._stack.splice(pos, 1) -} + var pos = this._stack.indexOf(existingFn) + this._stack.splice(pos, 0, newFn) + } -/** - * Runs the current list of functions that make up the pipeline against the - * passed tokens. - * - * @param {Array} tokens The tokens to run through the pipeline. - * @returns {Array} - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.run = function (tokens) { - var out = [], - tokenLength = tokens.length, - stackLength = this._stack.length + /** + * Removes a function from the pipeline. + * + * @param {Function} fn The function to remove from the pipeline. + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + this._stack.splice(pos, 1) + } - for (var i = 0; i < tokenLength; i++) { - var token = tokens[i] + /** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.run = function (tokens) { + var out = [], + tokenLength = tokens.length, + stackLength = this._stack.length - for (var j = 0; j < stackLength; j++) { - token = this._stack[j](token, i, tokens) - if (token === void 0) break - }; + for (var i = 0; i < tokenLength; i++) { + var token = tokens[i] - if (token !== void 0) out.push(token) - }; + for (var j = 0; j < stackLength; j++) { + token = this._stack[j](token, i, tokens) + if (token === void 0) break + }; - return out -} + if (token !== void 0) out.push(token) + }; -/** - * Resets the pipeline by removing any existing processors. - * - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.reset = function () { - this._stack = [] -} + return out + } -/** - * Returns a representation of the pipeline ready for serialisation. - * - * Logs a warning if the function has not been registered. - * - * @returns {Array} - * @memberOf Pipeline - */ -lunr.Pipeline.prototype.toJSON = function () { - return this._stack.map(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - - return fn.label - }) -} -/*! - * lunr.Vector - * Copyright (C) 2014 Oliver Nightingale - */ + /** + * Resets the pipeline by removing any existing processors. + * + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.reset = function () { + this._stack = [] + } -/** - * lunr.Vectors implement vector related operations for - * a series of elements. - * - * @constructor - */ -lunr.Vector = function () { - this._magnitude = null - this.list = undefined - this.length = 0 -} + /** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + * @memberOf Pipeline + */ + lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) -/** - * lunr.Vector.Node is a simple struct for each node - * in a lunr.Vector. - * - * @private - * @param {Number} The index of the node in the vector. - * @param {Object} The data at this node in the vector. - * @param {lunr.Vector.Node} The node directly after this node in the vector. - * @constructor - * @memberOf Vector - */ -lunr.Vector.Node = function (idx, val, next) { - this.idx = idx - this.val = val - this.next = next -} + return fn.label + }) + } + /*! + * lunr.Vector + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * Inserts a new value at a position in a vector. - * - * @param {Number} The index at which to insert a value. - * @param {Object} The object to insert in the vector. - * @memberOf Vector. - */ -lunr.Vector.prototype.insert = function (idx, val) { - var list = this.list + /** + * lunr.Vectors implement vector related operations for + * a series of elements. + * + * @constructor + */ + lunr.Vector = function () { + this._magnitude = null + this.list = undefined + this.length = 0 + } - if (!list) { - this.list = new lunr.Vector.Node (idx, val, list) - return this.length++ + /** + * lunr.Vector.Node is a simple struct for each node + * in a lunr.Vector. + * + * @private + * @param {Number} The index of the node in the vector. + * @param {Object} The data at this node in the vector. + * @param {lunr.Vector.Node} The node directly after this node in the vector. + * @constructor + * @memberOf Vector + */ + lunr.Vector.Node = function (idx, val, next) { + this.idx = idx + this.val = val + this.next = next } - var prev = list, - next = list.next + /** + * Inserts a new value at a position in a vector. + * + * @param {Number} The index at which to insert a value. + * @param {Object} The object to insert in the vector. + * @memberOf Vector. + */ + lunr.Vector.prototype.insert = function (idx, val) { + var list = this.list - while (next != undefined) { - if (idx < next.idx) { - prev.next = new lunr.Vector.Node (idx, val, next) + if (!list) { + this.list = new lunr.Vector.Node (idx, val, list) return this.length++ } - prev = next, next = next.next - } + var prev = list, + next = list.next - prev.next = new lunr.Vector.Node (idx, val, next) - return this.length++ -} + while (next != undefined) { + if (idx < next.idx) { + prev.next = new lunr.Vector.Node (idx, val, next) + return this.length++ + } -/** - * Calculates the magnitude of this vector. - * - * @returns {Number} - * @memberOf Vector - */ -lunr.Vector.prototype.magnitude = function () { - if (this._magniture) return this._magnitude - var node = this.list, - sumOfSquares = 0, - val + prev = next, next = next.next + } - while (node) { - val = node.val - sumOfSquares += val * val - node = node.next + prev.next = new lunr.Vector.Node (idx, val, next) + return this.length++ } - return this._magnitude = Math.sqrt(sumOfSquares) -} + /** + * Calculates the magnitude of this vector. + * + * @returns {Number} + * @memberOf Vector + */ + lunr.Vector.prototype.magnitude = function () { + if (this._magniture) return this._magnitude + var node = this.list, + sumOfSquares = 0, + val + + while (node) { + val = node.val + sumOfSquares += val * val + node = node.next + } -/** - * Calculates the dot product of this vector and another vector. - * - * @param {lunr.Vector} otherVector The vector to compute the dot product with. - * @returns {Number} - * @memberOf Vector - */ -lunr.Vector.prototype.dot = function (otherVector) { - var node = this.list, - otherNode = otherVector.list, - dotProduct = 0 + return this._magnitude = Math.sqrt(sumOfSquares) + } - while (node && otherNode) { - if (node.idx < otherNode.idx) { - node = node.next - } else if (node.idx > otherNode.idx) { - otherNode = otherNode.next - } else { - dotProduct += node.val * otherNode.val - node = node.next - otherNode = otherNode.next + /** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector The vector to compute the dot product with. + * @returns {Number} + * @memberOf Vector + */ + lunr.Vector.prototype.dot = function (otherVector) { + var node = this.list, + otherNode = otherVector.list, + dotProduct = 0 + + while (node && otherNode) { + if (node.idx < otherNode.idx) { + node = node.next + } else if (node.idx > otherNode.idx) { + otherNode = otherNode.next + } else { + dotProduct += node.val * otherNode.val + node = node.next + otherNode = otherNode.next + } } + + return dotProduct } - return dotProduct -} + /** + * Calculates the cosine similarity between this vector and another + * vector. + * + * @param {lunr.Vector} otherVector The other vector to calculate the + * similarity with. + * @returns {Number} + * @memberOf Vector + */ + lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / (this.magnitude() * otherVector.magnitude()) + } + /*! + * lunr.SortedSet + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * Calculates the cosine similarity between this vector and another - * vector. - * - * @param {lunr.Vector} otherVector The other vector to calculate the - * similarity with. - * @returns {Number} - * @memberOf Vector - */ -lunr.Vector.prototype.similarity = function (otherVector) { - return this.dot(otherVector) / (this.magnitude() * otherVector.magnitude()) -} -/*! - * lunr.SortedSet - * Copyright (C) 2014 Oliver Nightingale - */ + /** + * lunr.SortedSets are used to maintain an array of uniq values in a sorted + * order. + * + * @constructor + */ + lunr.SortedSet = function () { + this.length = 0 + this.elements = [] + } -/** - * lunr.SortedSets are used to maintain an array of uniq values in a sorted - * order. - * - * @constructor - */ -lunr.SortedSet = function () { - this.length = 0 - this.elements = [] -} + /** + * Loads a previously serialised sorted set. + * + * @param {Array} serialisedData The serialised set to load. + * @returns {lunr.SortedSet} + * @memberOf SortedSet + */ + lunr.SortedSet.load = function (serialisedData) { + var set = new this -/** - * Loads a previously serialised sorted set. - * - * @param {Array} serialisedData The serialised set to load. - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ -lunr.SortedSet.load = function (serialisedData) { - var set = new this + set.elements = serialisedData + set.length = serialisedData.length - set.elements = serialisedData - set.length = serialisedData.length + return set + } - return set -} + /** + * Inserts new items into the set in the correct position to maintain the + * order. + * + * @param {Object} The objects to add to this set. + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.add = function () { + Array.prototype.slice.call(arguments).forEach(function (element) { + if (~this.indexOf(element)) return + this.elements.splice(this.locationFor(element), 0, element) + }, this) -/** - * Inserts new items into the set in the correct position to maintain the - * order. - * - * @param {Object} The objects to add to this set. - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.add = function () { - Array.prototype.slice.call(arguments).forEach(function (element) { - if (~this.indexOf(element)) return - this.elements.splice(this.locationFor(element), 0, element) - }, this) + this.length = this.elements.length + } - this.length = this.elements.length -} + /** + * Converts this sorted set into an array. + * + * @returns {Array} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.toArray = function () { + return this.elements.slice() + } -/** - * Converts this sorted set into an array. - * - * @returns {Array} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.toArray = function () { - return this.elements.slice() -} + /** + * Creates a new array with the results of calling a provided function on every + * element in this sorted set. + * + * Delegates to Array.prototype.map and has the same signature. + * + * @param {Function} fn The function that is called on each element of the + * set. + * @param {Object} ctx An optional object that can be used as the context + * for the function fn. + * @returns {Array} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.map = function (fn, ctx) { + return this.elements.map(fn, ctx) + } -/** - * Creates a new array with the results of calling a provided function on every - * element in this sorted set. - * - * Delegates to Array.prototype.map and has the same signature. - * - * @param {Function} fn The function that is called on each element of the - * set. - * @param {Object} ctx An optional object that can be used as the context - * for the function fn. - * @returns {Array} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.map = function (fn, ctx) { - return this.elements.map(fn, ctx) -} + /** + * Executes a provided function once per sorted set element. + * + * Delegates to Array.prototype.forEach and has the same signature. + * + * @param {Function} fn The function that is called on each element of the + * set. + * @param {Object} ctx An optional object that can be used as the context + * @memberOf SortedSet + * for the function fn. + */ + lunr.SortedSet.prototype.forEach = function (fn, ctx) { + return this.elements.forEach(fn, ctx) + } -/** - * Executes a provided function once per sorted set element. - * - * Delegates to Array.prototype.forEach and has the same signature. - * - * @param {Function} fn The function that is called on each element of the - * set. - * @param {Object} ctx An optional object that can be used as the context - * @memberOf SortedSet - * for the function fn. - */ -lunr.SortedSet.prototype.forEach = function (fn, ctx) { - return this.elements.forEach(fn, ctx) -} + /** + * Returns the index at which a given element can be found in the + * sorted set, or -1 if it is not present. + * + * @param {Object} elem The object to locate in the sorted set. + * @param {Number} start An optional index at which to start searching from + * within the set. + * @param {Number} end An optional index at which to stop search from within + * the set. + * @returns {Number} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.indexOf = function (elem, start, end) { + var start = start || 0, + end = end || this.elements.length, + sectionLength = end - start, + pivot = start + Math.floor(sectionLength / 2), + pivotElem = this.elements[pivot] + + if (sectionLength <= 1) { + if (pivotElem === elem) { + return pivot + } else { + return -1 + } + } -/** - * Returns the index at which a given element can be found in the - * sorted set, or -1 if it is not present. - * - * @param {Object} elem The object to locate in the sorted set. - * @param {Number} start An optional index at which to start searching from - * within the set. - * @param {Number} end An optional index at which to stop search from within - * the set. - * @returns {Number} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.indexOf = function (elem, start, end) { - var start = start || 0, - end = end || this.elements.length, - sectionLength = end - start, - pivot = start + Math.floor(sectionLength / 2), - pivotElem = this.elements[pivot] - - if (sectionLength <= 1) { - if (pivotElem === elem) { - return pivot - } else { - return -1 + if (pivotElem < elem) return this.indexOf(elem, pivot, end) + if (pivotElem > elem) return this.indexOf(elem, start, pivot) + if (pivotElem === elem) return pivot + } + + /** + * Returns the position within the sorted set that an element should be + * inserted at to maintain the current order of the set. + * + * This function assumes that the element to search for does not already exist + * in the sorted set. + * + * @param {Object} elem The elem to find the position for in the set + * @param {Number} start An optional index at which to start searching from + * within the set. + * @param {Number} end An optional index at which to stop search from within + * the set. + * @returns {Number} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.locationFor = function (elem, start, end) { + var start = start || 0, + end = end || this.elements.length, + sectionLength = end - start, + pivot = start + Math.floor(sectionLength / 2), + pivotElem = this.elements[pivot] + + if (sectionLength <= 1) { + if (pivotElem > elem) return pivot + if (pivotElem < elem) return pivot + 1 } + + if (pivotElem < elem) return this.locationFor(elem, pivot, end) + if (pivotElem > elem) return this.locationFor(elem, start, pivot) } - if (pivotElem < elem) return this.indexOf(elem, pivot, end) - if (pivotElem > elem) return this.indexOf(elem, start, pivot) - if (pivotElem === elem) return pivot -} + /** + * Creates a new lunr.SortedSet that contains the elements in the intersection + * of this set and the passed set. + * + * @param {lunr.SortedSet} otherSet The set to intersect with this set. + * @returns {lunr.SortedSet} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.intersect = function (otherSet) { + var intersectSet = new lunr.SortedSet, + i = 0, j = 0, + a_len = this.length, b_len = otherSet.length, + a = this.elements, b = otherSet.elements + + while (true) { + if (i > a_len - 1 || j > b_len - 1) break + + if (a[i] === b[j]) { + intersectSet.add(a[i]) + i++, j++ + continue + } -/** - * Returns the position within the sorted set that an element should be - * inserted at to maintain the current order of the set. - * - * This function assumes that the element to search for does not already exist - * in the sorted set. - * - * @param {Object} elem The elem to find the position for in the set - * @param {Number} start An optional index at which to start searching from - * within the set. - * @param {Number} end An optional index at which to stop search from within - * the set. - * @returns {Number} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.locationFor = function (elem, start, end) { - var start = start || 0, - end = end || this.elements.length, - sectionLength = end - start, - pivot = start + Math.floor(sectionLength / 2), - pivotElem = this.elements[pivot] + if (a[i] < b[j]) { + i++ + continue + } - if (sectionLength <= 1) { - if (pivotElem > elem) return pivot - if (pivotElem < elem) return pivot + 1 + if (a[i] > b[j]) { + j++ + continue + } + }; + + return intersectSet } - if (pivotElem < elem) return this.locationFor(elem, pivot, end) - if (pivotElem > elem) return this.locationFor(elem, start, pivot) -} + /** + * Makes a copy of this set + * + * @returns {lunr.SortedSet} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.clone = function () { + var clone = new lunr.SortedSet -/** - * Creates a new lunr.SortedSet that contains the elements in the intersection - * of this set and the passed set. - * - * @param {lunr.SortedSet} otherSet The set to intersect with this set. - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.intersect = function (otherSet) { - var intersectSet = new lunr.SortedSet, - i = 0, j = 0, - a_len = this.length, b_len = otherSet.length, - a = this.elements, b = otherSet.elements - - while (true) { - if (i > a_len - 1 || j > b_len - 1) break - - if (a[i] === b[j]) { - intersectSet.add(a[i]) - i++, j++ - continue - } + clone.elements = this.toArray() + clone.length = clone.elements.length - if (a[i] < b[j]) { - i++ - continue - } + return clone + } - if (a[i] > b[j]) { - j++ - continue + /** + * Creates a new lunr.SortedSet that contains the elements in the union + * of this set and the passed set. + * + * @param {lunr.SortedSet} otherSet The set to union with this set. + * @returns {lunr.SortedSet} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.union = function (otherSet) { + var longSet, shortSet, unionSet + + if (this.length >= otherSet.length) { + longSet = this, shortSet = otherSet + } else { + longSet = otherSet, shortSet = this } - }; - return intersectSet -} + unionSet = longSet.clone() -/** - * Makes a copy of this set - * - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.clone = function () { - var clone = new lunr.SortedSet + unionSet.add.apply(unionSet, shortSet.toArray()) - clone.elements = this.toArray() - clone.length = clone.elements.length + return unionSet + } - return clone -} + /** + * Returns a representation of the sorted set ready for serialisation. + * + * @returns {Array} + * @memberOf SortedSet + */ + lunr.SortedSet.prototype.toJSON = function () { + return this.toArray() + } + /*! + * lunr.Index + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * Creates a new lunr.SortedSet that contains the elements in the union - * of this set and the passed set. - * - * @param {lunr.SortedSet} otherSet The set to union with this set. - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.union = function (otherSet) { - var longSet, shortSet, unionSet + /** + * lunr.Index is object that manages a search index. It contains the indexes + * and stores all the tokens and document lookups. It also provides the main + * user facing API for the library. + * + * @constructor + */ + lunr.Index = function () { + this._fields = [] + this._ref = 'id' + this.pipeline = new lunr.Pipeline + this.documentStore = new lunr.Store + this.tokenStore = new lunr.TokenStore + this.corpusTokens = new lunr.SortedSet + this.eventEmitter = new lunr.EventEmitter - if (this.length >= otherSet.length) { - longSet = this, shortSet = otherSet - } else { - longSet = otherSet, shortSet = this - } + this._idfCache = {} - unionSet = longSet.clone() + this.on('add', 'remove', 'update', (function () { + this._idfCache = {} + }).bind(this)) + } - unionSet.add.apply(unionSet, shortSet.toArray()) + /** + * Bind a handler to events being emitted by the index. + * + * The handler can be bound to many events at the same time. + * + * @param {String} [eventName] The name(s) of events to bind the function to. + * @param {Function} handler The serialised set to load. + * @memberOf Index + */ + lunr.Index.prototype.on = function () { + var args = Array.prototype.slice.call(arguments) + return this.eventEmitter.addListener.apply(this.eventEmitter, args) + } - return unionSet -} + /** + * Removes a handler from an event being emitted by the index. + * + * @param {String} eventName The name of events to remove the function from. + * @param {Function} handler The serialised set to load. + * @memberOf Index + */ + lunr.Index.prototype.off = function (name, fn) { + return this.eventEmitter.removeListener(name, fn) + } -/** - * Returns a representation of the sorted set ready for serialisation. - * - * @returns {Array} - * @memberOf SortedSet - */ -lunr.SortedSet.prototype.toJSON = function () { - return this.toArray() -} -/*! - * lunr.Index - * Copyright (C) 2014 Oliver Nightingale - */ + /** + * Loads a previously serialised index. + * + * Issues a warning if the index being imported was serialised + * by a different version of lunr. + * + * @param {Object} serialisedData The serialised set to load. + * @returns {lunr.Index} + * @memberOf Index + */ + lunr.Index.load = function (serialisedData) { + if (serialisedData.version !== lunr.version) { + lunr.utils.warn('version mismatch: current ' + lunr.version + ' importing ' + serialisedData.version) + } -/** - * lunr.Index is object that manages a search index. It contains the indexes - * and stores all the tokens and document lookups. It also provides the main - * user facing API for the library. - * - * @constructor - */ -lunr.Index = function () { - this._fields = [] - this._ref = 'id' - this.pipeline = new lunr.Pipeline - this.documentStore = new lunr.Store - this.tokenStore = new lunr.TokenStore - this.corpusTokens = new lunr.SortedSet - this.eventEmitter = new lunr.EventEmitter - - this._idfCache = {} - - this.on('add', 'remove', 'update', (function () { - this._idfCache = {} - }).bind(this)) -} + var idx = new this -/** - * Bind a handler to events being emitted by the index. - * - * The handler can be bound to many events at the same time. - * - * @param {String} [eventName] The name(s) of events to bind the function to. - * @param {Function} handler The serialised set to load. - * @memberOf Index - */ -lunr.Index.prototype.on = function () { - var args = Array.prototype.slice.call(arguments) - return this.eventEmitter.addListener.apply(this.eventEmitter, args) -} + idx._fields = serialisedData.fields + idx._ref = serialisedData.ref -/** - * Removes a handler from an event being emitted by the index. - * - * @param {String} eventName The name of events to remove the function from. - * @param {Function} handler The serialised set to load. - * @memberOf Index - */ -lunr.Index.prototype.off = function (name, fn) { - return this.eventEmitter.removeListener(name, fn) -} + idx.documentStore = lunr.Store.load(serialisedData.documentStore) + idx.tokenStore = lunr.TokenStore.load(serialisedData.tokenStore) + idx.corpusTokens = lunr.SortedSet.load(serialisedData.corpusTokens) + idx.pipeline = lunr.Pipeline.load(serialisedData.pipeline) -/** - * Loads a previously serialised index. - * - * Issues a warning if the index being imported was serialised - * by a different version of lunr. - * - * @param {Object} serialisedData The serialised set to load. - * @returns {lunr.Index} - * @memberOf Index - */ -lunr.Index.load = function (serialisedData) { - if (serialisedData.version !== lunr.version) { - lunr.utils.warn('version mismatch: current ' + lunr.version + ' importing ' + serialisedData.version) + return idx } - var idx = new this - - idx._fields = serialisedData.fields - idx._ref = serialisedData.ref + /** + * Adds a field to the list of fields that will be searchable within documents + * in the index. + * + * An optional boost param can be passed to affect how much tokens in this field + * rank in search results, by default the boost value is 1. + * + * Fields should be added before any documents are added to the index, fields + * that are added after documents are added to the index will only apply to new + * documents added to the index. + * + * @param {String} fieldName The name of the field within the document that + * should be indexed + * @param {Number} boost An optional boost that can be applied to terms in this + * field. + * @returns {lunr.Index} + * @memberOf Index + */ + lunr.Index.prototype.field = function (fieldName, opts) { + var opts = opts || {}, + field = { name: fieldName, boost: opts.boost || 1 } - idx.documentStore = lunr.Store.load(serialisedData.documentStore) - idx.tokenStore = lunr.TokenStore.load(serialisedData.tokenStore) - idx.corpusTokens = lunr.SortedSet.load(serialisedData.corpusTokens) - idx.pipeline = lunr.Pipeline.load(serialisedData.pipeline) + this._fields.push(field) + return this + } - return idx -} + /** + * Sets the property used to uniquely identify documents added to the index, + * by default this property is 'id'. + * + * This should only be changed before adding documents to the index, changing + * the ref property without resetting the index can lead to unexpected results. + * + * @param {String} refName The property to use to uniquely identify the + * documents in the index. + * @param {Boolean} emitEvent Whether to emit add events, defaults to true + * @returns {lunr.Index} + * @memberOf Index + */ + lunr.Index.prototype.ref = function (refName) { + this._ref = refName + return this + } -/** - * Adds a field to the list of fields that will be searchable within documents - * in the index. - * - * An optional boost param can be passed to affect how much tokens in this field - * rank in search results, by default the boost value is 1. - * - * Fields should be added before any documents are added to the index, fields - * that are added after documents are added to the index will only apply to new - * documents added to the index. - * - * @param {String} fieldName The name of the field within the document that - * should be indexed - * @param {Number} boost An optional boost that can be applied to terms in this - * field. - * @returns {lunr.Index} - * @memberOf Index - */ -lunr.Index.prototype.field = function (fieldName, opts) { - var opts = opts || {}, - field = { name: fieldName, boost: opts.boost || 1 } + /** + * Add a document to the index. + * + * This is the way new documents enter the index, this function will run the + * fields from the document through the index's pipeline and then add it to + * the index, it will then show up in search results. + * + * An 'add' event is emitted with the document that has been added and the index + * the document has been added to. This event can be silenced by passing false + * as the second argument to add. + * + * @param {Object} doc The document to add to the index. + * @param {Boolean} emitEvent Whether or not to emit events, default true. + * @memberOf Index + */ + lunr.Index.prototype.add = function (doc, emitEvent) { + var docTokens = {}, + allDocumentTokens = new lunr.SortedSet, + docRef = doc[this._ref], + emitEvent = emitEvent === undefined ? true : emitEvent - this._fields.push(field) - return this -} + this._fields.forEach(function (field) { + var fieldTokens = this.pipeline.run(lunr.tokenizer(doc[field.name])) -/** - * Sets the property used to uniquely identify documents added to the index, - * by default this property is 'id'. - * - * This should only be changed before adding documents to the index, changing - * the ref property without resetting the index can lead to unexpected results. - * - * @param {String} refName The property to use to uniquely identify the - * documents in the index. - * @param {Boolean} emitEvent Whether to emit add events, defaults to true - * @returns {lunr.Index} - * @memberOf Index - */ -lunr.Index.prototype.ref = function (refName) { - this._ref = refName - return this -} + docTokens[field.name] = fieldTokens + lunr.SortedSet.prototype.add.apply(allDocumentTokens, fieldTokens) + }, this) -/** - * Add a document to the index. - * - * This is the way new documents enter the index, this function will run the - * fields from the document through the index's pipeline and then add it to - * the index, it will then show up in search results. - * - * An 'add' event is emitted with the document that has been added and the index - * the document has been added to. This event can be silenced by passing false - * as the second argument to add. - * - * @param {Object} doc The document to add to the index. - * @param {Boolean} emitEvent Whether or not to emit events, default true. - * @memberOf Index - */ -lunr.Index.prototype.add = function (doc, emitEvent) { - var docTokens = {}, - allDocumentTokens = new lunr.SortedSet, - docRef = doc[this._ref], - emitEvent = emitEvent === undefined ? true : emitEvent + this.documentStore.set(docRef, allDocumentTokens) + lunr.SortedSet.prototype.add.apply(this.corpusTokens, allDocumentTokens.toArray()) - this._fields.forEach(function (field) { - var fieldTokens = this.pipeline.run(lunr.tokenizer(doc[field.name])) + for (var i = 0; i < allDocumentTokens.length; i++) { + var token = allDocumentTokens.elements[i] + var tf = this._fields.reduce(function (memo, field) { + var fieldLength = docTokens[field.name].length - docTokens[field.name] = fieldTokens - lunr.SortedSet.prototype.add.apply(allDocumentTokens, fieldTokens) - }, this) + if (!fieldLength) return memo - this.documentStore.set(docRef, allDocumentTokens) - lunr.SortedSet.prototype.add.apply(this.corpusTokens, allDocumentTokens.toArray()) + var tokenCount = docTokens[field.name].filter(function (t) { return t === token }).length - for (var i = 0; i < allDocumentTokens.length; i++) { - var token = allDocumentTokens.elements[i] - var tf = this._fields.reduce(function (memo, field) { - var fieldLength = docTokens[field.name].length + return memo + (tokenCount / fieldLength * field.boost) + }, 0) - if (!fieldLength) return memo + this.tokenStore.add(token, { ref: docRef, tf: tf }) + }; - var tokenCount = docTokens[field.name].filter(function (t) { return t === token }).length + if (emitEvent) this.eventEmitter.emit('add', doc, this) + } - return memo + (tokenCount / fieldLength * field.boost) - }, 0) + /** + * Removes a document from the index. + * + * To make sure documents no longer show up in search results they can be + * removed from the index using this method. + * + * The document passed only needs to have the same ref property value as the + * document that was added to the index, they could be completely different + * objects. + * + * A 'remove' event is emitted with the document that has been removed and the index + * the document has been removed from. This event can be silenced by passing false + * as the second argument to remove. + * + * @param {Object} doc The document to remove from the index. + * @param {Boolean} emitEvent Whether to emit remove events, defaults to true + * @memberOf Index + */ + lunr.Index.prototype.remove = function (doc, emitEvent) { + var docRef = doc[this._ref], + emitEvent = emitEvent === undefined ? true : emitEvent - this.tokenStore.add(token, { ref: docRef, tf: tf }) - }; + if (!this.documentStore.has(docRef)) return - if (emitEvent) this.eventEmitter.emit('add', doc, this) -} + var docTokens = this.documentStore.get(docRef) -/** - * Removes a document from the index. - * - * To make sure documents no longer show up in search results they can be - * removed from the index using this method. - * - * The document passed only needs to have the same ref property value as the - * document that was added to the index, they could be completely different - * objects. - * - * A 'remove' event is emitted with the document that has been removed and the index - * the document has been removed from. This event can be silenced by passing false - * as the second argument to remove. - * - * @param {Object} doc The document to remove from the index. - * @param {Boolean} emitEvent Whether to emit remove events, defaults to true - * @memberOf Index - */ -lunr.Index.prototype.remove = function (doc, emitEvent) { - var docRef = doc[this._ref], - emitEvent = emitEvent === undefined ? true : emitEvent + this.documentStore.remove(docRef) - if (!this.documentStore.has(docRef)) return + docTokens.forEach(function (token) { + this.tokenStore.remove(token, docRef) + }, this) - var docTokens = this.documentStore.get(docRef) + if (emitEvent) this.eventEmitter.emit('remove', doc, this) + } - this.documentStore.remove(docRef) + /** + * Updates a document in the index. + * + * When a document contained within the index gets updated, fields changed, + * added or removed, to make sure it correctly matched against search queries, + * it should be updated in the index. + * + * This method is just a wrapper around `remove` and `add` + * + * An 'update' event is emitted with the document that has been updated and the index. + * This event can be silenced by passing false as the second argument to update. Only + * an update event will be fired, the 'add' and 'remove' events of the underlying calls + * are silenced. + * + * @param {Object} doc The document to update in the index. + * @param {Boolean} emitEvent Whether to emit update events, defaults to true + * @see Index.prototype.remove + * @see Index.prototype.add + * @memberOf Index + */ + lunr.Index.prototype.update = function (doc, emitEvent) { + var emitEvent = emitEvent === undefined ? true : emitEvent - docTokens.forEach(function (token) { - this.tokenStore.remove(token, docRef) - }, this) + this.remove(doc, false) + this.add(doc, false) - if (emitEvent) this.eventEmitter.emit('remove', doc, this) -} + if (emitEvent) this.eventEmitter.emit('update', doc, this) + } -/** - * Updates a document in the index. - * - * When a document contained within the index gets updated, fields changed, - * added or removed, to make sure it correctly matched against search queries, - * it should be updated in the index. - * - * This method is just a wrapper around `remove` and `add` - * - * An 'update' event is emitted with the document that has been updated and the index. - * This event can be silenced by passing false as the second argument to update. Only - * an update event will be fired, the 'add' and 'remove' events of the underlying calls - * are silenced. - * - * @param {Object} doc The document to update in the index. - * @param {Boolean} emitEvent Whether to emit update events, defaults to true - * @see Index.prototype.remove - * @see Index.prototype.add - * @memberOf Index - */ -lunr.Index.prototype.update = function (doc, emitEvent) { - var emitEvent = emitEvent === undefined ? true : emitEvent + /** + * Calculates the inverse document frequency for a token within the index. + * + * @param {String} token The token to calculate the idf of. + * @see Index.prototype.idf + * @private + * @memberOf Index + */ + lunr.Index.prototype.idf = function (term) { + var cacheKey = "@" + term + if (Object.prototype.hasOwnProperty.call(this._idfCache, cacheKey)) return this._idfCache[cacheKey] - this.remove(doc, false) - this.add(doc, false) + var documentFrequency = this.tokenStore.count(term), + idf = 1 - if (emitEvent) this.eventEmitter.emit('update', doc, this) -} + if (documentFrequency > 0) { + idf = 1 + Math.log(this.tokenStore.length / documentFrequency) + } -/** - * Calculates the inverse document frequency for a token within the index. - * - * @param {String} token The token to calculate the idf of. - * @see Index.prototype.idf - * @private - * @memberOf Index - */ -lunr.Index.prototype.idf = function (term) { - var cacheKey = "@" + term - if (Object.prototype.hasOwnProperty.call(this._idfCache, cacheKey)) return this._idfCache[cacheKey] + return this._idfCache[cacheKey] = idf + } - var documentFrequency = this.tokenStore.count(term), - idf = 1 + /** + * Searches the index using the passed query. + * + * Queries should be a string, multiple words are allowed and will lead to an + * AND based query, e.g. `idx.search('foo bar')` will run a search for + * documents containing both 'foo' and 'bar'. + * + * All query tokens are passed through the same pipeline that document tokens + * are passed through, so any language processing involved will be run on every + * query term. + * + * Each query term is expanded, so that the term 'he' might be expanded to + * 'hello' and 'help' if those terms were already included in the index. + * + * Matching documents are returned as an array of objects, each object contains + * the matching document ref, as set for this index, and the similarity score + * for this document against the query. + * + * @param {String} query The query to search the index with. + * @returns {Object} + * @see Index.prototype.idf + * @see Index.prototype.documentVector + * @memberOf Index + */ + lunr.Index.prototype.search = function (query) { + var queryTokens = this.pipeline.run(lunr.tokenizer(query)), + queryVector = new lunr.Vector, + documentSets = [], + fieldBoosts = this._fields.reduce(function (memo, f) { return memo + f.boost }, 0) + + var hasSomeToken = queryTokens.some(function (token) { + return this.tokenStore.has(token) + }, this) - if (documentFrequency > 0) { - idf = 1 + Math.log(this.tokenStore.length / documentFrequency) - } + if (!hasSomeToken) return [] - return this._idfCache[cacheKey] = idf -} + queryTokens + .forEach(function (token, i, tokens) { + var tf = 1 / tokens.length * this._fields.length * fieldBoosts, + self = this -/** - * Searches the index using the passed query. - * - * Queries should be a string, multiple words are allowed and will lead to an - * AND based query, e.g. `idx.search('foo bar')` will run a search for - * documents containing both 'foo' and 'bar'. - * - * All query tokens are passed through the same pipeline that document tokens - * are passed through, so any language processing involved will be run on every - * query term. - * - * Each query term is expanded, so that the term 'he' might be expanded to - * 'hello' and 'help' if those terms were already included in the index. - * - * Matching documents are returned as an array of objects, each object contains - * the matching document ref, as set for this index, and the similarity score - * for this document against the query. - * - * @param {String} query The query to search the index with. - * @returns {Object} - * @see Index.prototype.idf - * @see Index.prototype.documentVector - * @memberOf Index - */ -lunr.Index.prototype.search = function (query) { - var queryTokens = this.pipeline.run(lunr.tokenizer(query)), - queryVector = new lunr.Vector, - documentSets = [], - fieldBoosts = this._fields.reduce(function (memo, f) { return memo + f.boost }, 0) - - var hasSomeToken = queryTokens.some(function (token) { - return this.tokenStore.has(token) - }, this) - - if (!hasSomeToken) return [] - - queryTokens - .forEach(function (token, i, tokens) { - var tf = 1 / tokens.length * this._fields.length * fieldBoosts, - self = this - - var set = this.tokenStore.expand(token).reduce(function (memo, key) { - var pos = self.corpusTokens.indexOf(key), - idf = self.idf(key), - similarityBoost = 1, - set = new lunr.SortedSet - - // if the expanded key is not an exact match to the token then - // penalise the score for this key by how different the key is - // to the token. - if (key !== token) { - var diff = Math.max(3, key.length - token.length) - similarityBoost = 1 / Math.log(diff) - } + var set = this.tokenStore.expand(token).reduce(function (memo, key) { + var pos = self.corpusTokens.indexOf(key), + idf = self.idf(key), + similarityBoost = 1, + set = new lunr.SortedSet - // calculate the query tf-idf score for this token - // applying an similarityBoost to ensure exact matches - // these rank higher than expanded terms - if (pos > -1) queryVector.insert(pos, tf * idf * similarityBoost) + // if the expanded key is not an exact match to the token then + // penalise the score for this key by how different the key is + // to the token. + if (key !== token) { + var diff = Math.max(3, key.length - token.length) + similarityBoost = 1 / Math.log(diff) + } - // add all the documents that have this key into a set - Object.keys(self.tokenStore.get(key)).forEach(function (ref) { set.add(ref) }) + // calculate the query tf-idf score for this token + // applying an similarityBoost to ensure exact matches + // these rank higher than expanded terms + if (pos > -1) queryVector.insert(pos, tf * idf * similarityBoost) - return memo.union(set) - }, new lunr.SortedSet) + // add all the documents that have this key into a set + Object.keys(self.tokenStore.get(key)).forEach(function (ref) { set.add(ref) }) - documentSets.push(set) - }, this) + return memo.union(set) + }, new lunr.SortedSet) - var documentSet = documentSets.reduce(function (memo, set) { - return memo.intersect(set) - }) + documentSets.push(set) + }, this) - return documentSet - .map(function (ref) { - return { ref: ref, score: queryVector.similarity(this.documentVector(ref)) } - }, this) - .sort(function (a, b) { - return b.score - a.score + var documentSet = documentSets.reduce(function (memo, set) { + return memo.intersect(set) }) -} -/** - * Generates a vector containing all the tokens in the document matching the - * passed documentRef. - * - * The vector contains the tf-idf score for each token contained in the - * document with the passed documentRef. The vector will contain an element - * for every token in the indexes corpus, if the document does not contain that - * token the element will be 0. - * - * @param {Object} documentRef The ref to find the document with. - * @returns {lunr.Vector} - * @private - * @memberOf Index - */ -lunr.Index.prototype.documentVector = function (documentRef) { - var documentTokens = this.documentStore.get(documentRef), - documentTokensLength = documentTokens.length, - documentVector = new lunr.Vector + return documentSet + .map(function (ref) { + return { ref: ref, score: queryVector.similarity(this.documentVector(ref)) } + }, this) + .sort(function (a, b) { + return b.score - a.score + }) + } - for (var i = 0; i < documentTokensLength; i++) { - var token = documentTokens.elements[i], - tf = this.tokenStore.get(token)[documentRef].tf, - idf = this.idf(token) + /** + * Generates a vector containing all the tokens in the document matching the + * passed documentRef. + * + * The vector contains the tf-idf score for each token contained in the + * document with the passed documentRef. The vector will contain an element + * for every token in the indexes corpus, if the document does not contain that + * token the element will be 0. + * + * @param {Object} documentRef The ref to find the document with. + * @returns {lunr.Vector} + * @private + * @memberOf Index + */ + lunr.Index.prototype.documentVector = function (documentRef) { + var documentTokens = this.documentStore.get(documentRef), + documentTokensLength = documentTokens.length, + documentVector = new lunr.Vector - documentVector.insert(this.corpusTokens.indexOf(token), tf * idf) - }; + for (var i = 0; i < documentTokensLength; i++) { + var token = documentTokens.elements[i], + tf = this.tokenStore.get(token)[documentRef].tf, + idf = this.idf(token) - return documentVector -} + documentVector.insert(this.corpusTokens.indexOf(token), tf * idf) + }; -/** - * Returns a representation of the index ready for serialisation. - * - * @returns {Object} - * @memberOf Index - */ -lunr.Index.prototype.toJSON = function () { - return { - version: lunr.version, - fields: this._fields, - ref: this._ref, - documentStore: this.documentStore.toJSON(), - tokenStore: this.tokenStore.toJSON(), - corpusTokens: this.corpusTokens.toJSON(), - pipeline: this.pipeline.toJSON() - } -} + return documentVector + } -/** - * Applies a plugin to the current index. - * - * A plugin is a function that is called with the index as its context. - * Plugins can be used to customise or extend the behaviour the index - * in some way. A plugin is just a function, that encapsulated the custom - * behaviour that should be applied to the index. - * - * The plugin function will be called with the index as its argument, additional - * arguments can also be passed when calling use. The function will be called - * with the index as its context. - * - * Example: - * - * var myPlugin = function (idx, arg1, arg2) { + /** + * Returns a representation of the index ready for serialisation. + * + * @returns {Object} + * @memberOf Index + */ + lunr.Index.prototype.toJSON = function () { + return { + version: lunr.version, + fields: this._fields, + ref: this._ref, + documentStore: this.documentStore.toJSON(), + tokenStore: this.tokenStore.toJSON(), + corpusTokens: this.corpusTokens.toJSON(), + pipeline: this.pipeline.toJSON() + } + } + + /** + * Applies a plugin to the current index. + * + * A plugin is a function that is called with the index as its context. + * Plugins can be used to customise or extend the behaviour the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied to the index. + * + * The plugin function will be called with the index as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index as its context. + * + * Example: + * + * var myPlugin = function (idx, arg1, arg2) { * // `this` is the index to be extended * // apply any extensions etc here. * } - * - * var idx = lunr(function () { + * + * var idx = lunr(function () { * this.use(myPlugin, 'arg1', 'arg2') * }) - * - * @param {Function} plugin The plugin to apply. - * @memberOf Index - */ -lunr.Index.prototype.use = function (plugin) { - var args = Array.prototype.slice.call(arguments, 1) - args.unshift(this) - plugin.apply(this, args) -} -/*! - * lunr.Store - * Copyright (C) 2014 Oliver Nightingale - */ + * + * @param {Function} plugin The plugin to apply. + * @memberOf Index + */ + lunr.Index.prototype.use = function (plugin) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + plugin.apply(this, args) + } + /*! + * lunr.Store + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * lunr.Store is a simple key-value store used for storing sets of tokens for - * documents stored in index. - * - * @constructor - * @module - */ -lunr.Store = function () { - this.store = {} - this.length = 0 -} + /** + * lunr.Store is a simple key-value store used for storing sets of tokens for + * documents stored in index. + * + * @constructor + * @module + */ + lunr.Store = function () { + this.store = {} + this.length = 0 + } -/** - * Loads a previously serialised store - * - * @param {Object} serialisedData The serialised store to load. - * @returns {lunr.Store} - * @memberOf Store - */ -lunr.Store.load = function (serialisedData) { - var store = new this + /** + * Loads a previously serialised store + * + * @param {Object} serialisedData The serialised store to load. + * @returns {lunr.Store} + * @memberOf Store + */ + lunr.Store.load = function (serialisedData) { + var store = new this - store.length = serialisedData.length - store.store = Object.keys(serialisedData.store).reduce(function (memo, key) { - memo[key] = lunr.SortedSet.load(serialisedData.store[key]) - return memo - }, {}) + store.length = serialisedData.length + store.store = Object.keys(serialisedData.store).reduce(function (memo, key) { + memo[key] = lunr.SortedSet.load(serialisedData.store[key]) + return memo + }, {}) - return store -} + return store + } -/** - * Stores the given tokens in the store against the given id. - * - * @param {Object} id The key used to store the tokens against. - * @param {Object} tokens The tokens to store against the key. - * @memberOf Store - */ -lunr.Store.prototype.set = function (id, tokens) { - this.store[id] = tokens - this.length = Object.keys(this.store).length -} + /** + * Stores the given tokens in the store against the given id. + * + * @param {Object} id The key used to store the tokens against. + * @param {Object} tokens The tokens to store against the key. + * @memberOf Store + */ + lunr.Store.prototype.set = function (id, tokens) { + if (!this.has(id)) this.length++ + this.store[id] = tokens + } -/** - * Retrieves the tokens from the store for a given key. - * - * @param {Object} id The key to lookup and retrieve from the store. - * @returns {Object} - * @memberOf Store - */ -lunr.Store.prototype.get = function (id) { - return this.store[id] -} + /** + * Retrieves the tokens from the store for a given key. + * + * @param {Object} id The key to lookup and retrieve from the store. + * @returns {Object} + * @memberOf Store + */ + lunr.Store.prototype.get = function (id) { + return this.store[id] + } -/** - * Checks whether the store contains a key. - * - * @param {Object} id The id to look up in the store. - * @returns {Boolean} - * @memberOf Store - */ -lunr.Store.prototype.has = function (id) { - return id in this.store -} + /** + * Checks whether the store contains a key. + * + * @param {Object} id The id to look up in the store. + * @returns {Boolean} + * @memberOf Store + */ + lunr.Store.prototype.has = function (id) { + return id in this.store + } -/** - * Removes the value for a key in the store. - * - * @param {Object} id The id to remove from the store. - * @memberOf Store - */ -lunr.Store.prototype.remove = function (id) { - if (!this.has(id)) return + /** + * Removes the value for a key in the store. + * + * @param {Object} id The id to remove from the store. + * @memberOf Store + */ + lunr.Store.prototype.remove = function (id) { + if (!this.has(id)) return - delete this.store[id] - this.length-- -} + delete this.store[id] + this.length-- + } -/** - * Returns a representation of the store ready for serialisation. - * - * @returns {Object} - * @memberOf Store - */ -lunr.Store.prototype.toJSON = function () { - return { - store: this.store, - length: this.length + /** + * Returns a representation of the store ready for serialisation. + * + * @returns {Object} + * @memberOf Store + */ + lunr.Store.prototype.toJSON = function () { + return { + store: this.store, + length: this.length + } } -} -/*! - * lunr.stemmer - * Copyright (C) 2014 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ + /*! + * lunr.stemmer + * Copyright (C) 2014 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ -/** - * lunr.stemmer is an english language stemmer, this is a JavaScript - * implementation of the PorterStemmer taken from http://tartaurs.org/~martin - * - * @module - * @param {String} str The string to stem - * @returns {String} - * @see lunr.Pipeline - */ -lunr.stemmer = (function(){ - var step2list = { - "ational" : "ate", - "tional" : "tion", - "enci" : "ence", - "anci" : "ance", - "izer" : "ize", - "bli" : "ble", - "alli" : "al", - "entli" : "ent", - "eli" : "e", - "ousli" : "ous", - "ization" : "ize", - "ation" : "ate", - "ator" : "ate", - "alism" : "al", - "iveness" : "ive", - "fulness" : "ful", - "ousness" : "ous", - "aliti" : "al", - "iviti" : "ive", - "biliti" : "ble", - "logi" : "log" - }, - - step3list = { - "icate" : "ic", - "ative" : "", - "alize" : "al", - "iciti" : "ic", - "ical" : "ic", - "ful" : "", - "ness" : "" - }, - - c = "[^aeiou]", // consonant - v = "[aeiouy]", // vowel - C = c + "[^aeiouy]*", // consonant sequence - V = v + "[aeiou]*", // vowel sequence - - mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 - meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 - mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 - s_v = "^(" + C + ")?" + v; // vowel in stem - - return function (w) { - var stem, - suffix, - firstch, - re, - re2, - re3, - re4; - - if (w.length < 3) { return w; } - - firstch = w.substr(0,1); - if (firstch == "y") { - w = firstch.toUpperCase() + w.substr(1); - } + /** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartaurs.org/~martin + * + * @module + * @param {String} str The string to stem + * @returns {String} + * @see lunr.Pipeline + */ + lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) { w = w.replace(re,"$1$2"); } - else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) { w = w + "e"; } - else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); } - else if (re4.test(w)) { w = w + "e"; } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; } - } - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) { w = stem + "i"; } - } + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) { - w = stem + step2list[suffix]; + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } } - } - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) { - w = stem + step3list[suffix]; + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } } - } - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) { - w = stem; + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) { - w = stem; + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); } - } - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { - w = stem; + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); } - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } + return w; + }; - // and turn initial Y back to y + return porterStemmer; + })(); - if (firstch == "y") { - w = firstch.toLowerCase() + w.substr(1); - } + lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') + /*! + * lunr.stopWordFilter + * Copyright (C) 2014 Oliver Nightingale + */ - return w; + /** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @module + * @param {String} token The token to pass through the filter + * @returns {String} + * @see lunr.Pipeline + */ + lunr.stopWordFilter = function (token) { + if (lunr.stopWordFilter.stopWords.indexOf(token) === -1) return token } -})(); -lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') -/*! - * lunr.stopWordFilter - * Copyright (C) 2014 Oliver Nightingale - */ + lunr.stopWordFilter.stopWords = new lunr.SortedSet + lunr.stopWordFilter.stopWords.length = 119 + lunr.stopWordFilter.stopWords.elements = [ + "", + "a", + "able", + "about", + "across", + "after", + "all", + "almost", + "also", + "am", + "among", + "an", + "and", + "any", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "do", + "does", + "either", + "else", + "ever", + "every", + "for", + "from", + "get", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "in", + "into", + "is", + "it", + "its", + "just", + "least", + "let", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "only", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "where", + "which", + "while", + "who", + "whom", + "why", + "will", + "with", + "would", + "yet", + "you", + "your" + ] + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') + /*! + * lunr.trimmer + * Copyright (C) 2014 Oliver Nightingale + */ -/** - * lunr.stopWordFilter is an English language stop word list filter, any words - * contained in the list will not be passed through the filter. - * - * This is intended to be used in the Pipeline. If the token does not pass the - * filter then undefined will be returned. - * - * @module - * @param {String} token The token to pass through the filter - * @returns {String} - * @see lunr.Pipeline - */ -lunr.stopWordFilter = function (token) { - if (lunr.stopWordFilter.stopWords.indexOf(token) === -1) return token -} - -lunr.stopWordFilter.stopWords = new lunr.SortedSet -lunr.stopWordFilter.stopWords.length = 119 -lunr.stopWordFilter.stopWords.elements = [ - "", - "a", - "able", - "about", - "across", - "after", - "all", - "almost", - "also", - "am", - "among", - "an", - "and", - "any", - "are", - "as", - "at", - "be", - "because", - "been", - "but", - "by", - "can", - "cannot", - "could", - "dear", - "did", - "do", - "does", - "either", - "else", - "ever", - "every", - "for", - "from", - "get", - "got", - "had", - "has", - "have", - "he", - "her", - "hers", - "him", - "his", - "how", - "however", - "i", - "if", - "in", - "into", - "is", - "it", - "its", - "just", - "least", - "let", - "like", - "likely", - "may", - "me", - "might", - "most", - "must", - "my", - "neither", - "no", - "nor", - "not", - "of", - "off", - "often", - "on", - "only", - "or", - "other", - "our", - "own", - "rather", - "said", - "say", - "says", - "she", - "should", - "since", - "so", - "some", - "than", - "that", - "the", - "their", - "them", - "then", - "there", - "these", - "they", - "this", - "tis", - "to", - "too", - "twas", - "us", - "wants", - "was", - "we", - "were", - "what", - "when", - "where", - "which", - "while", - "who", - "whom", - "why", - "will", - "with", - "would", - "yet", - "you", - "your" -] - -lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') -/*! - * lunr.trimmer - * Copyright (C) 2014 Oliver Nightingale - */ + /** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the begining and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @module + * @param {String} token The token to pass through the filter + * @returns {String} + * @see lunr.Pipeline + */ + lunr.trimmer = function (token) { + return token + .replace(/^\W+/, '') + .replace(/\W+$/, '') + } -/** - * lunr.trimmer is a pipeline function for trimming non word - * characters from the begining and end of tokens before they - * enter the index. - * - * This implementation may not work correctly for non latin - * characters and should either be removed or adapted for use - * with languages with non-latin characters. - * - * @module - * @param {String} token The token to pass through the filter - * @returns {String} - * @see lunr.Pipeline - */ -lunr.trimmer = function (token) { - return token - .replace(/^\W+/, '') - .replace(/\W+$/, '') -} - -lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') -/*! - * lunr.stemmer - * Copyright (C) 2014 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ + lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') + /*! + * lunr.stemmer + * Copyright (C) 2014 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ -/** - * lunr.TokenStore is used for efficient storing and lookup of the reverse - * index of token to document ref. - * - * @constructor - */ -lunr.TokenStore = function () { - this.root = { docs: {} } - this.length = 0 -} + /** + * lunr.TokenStore is used for efficient storing and lookup of the reverse + * index of token to document ref. + * + * @constructor + */ + lunr.TokenStore = function () { + this.root = { docs: {} } + this.length = 0 + } -/** - * Loads a previously serialised token store - * - * @param {Object} serialisedData The serialised token store to load. - * @returns {lunr.TokenStore} - * @memberOf TokenStore - */ -lunr.TokenStore.load = function (serialisedData) { - var store = new this + /** + * Loads a previously serialised token store + * + * @param {Object} serialisedData The serialised token store to load. + * @returns {lunr.TokenStore} + * @memberOf TokenStore + */ + lunr.TokenStore.load = function (serialisedData) { + var store = new this - store.root = serialisedData.root - store.length = serialisedData.length + store.root = serialisedData.root + store.length = serialisedData.length - return store -} + return store + } -/** - * Adds a new token doc pair to the store. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to store the doc under - * @param {Object} doc The doc to store against the token - * @param {Object} root An optional node at which to start looking for the - * correct place to enter the doc, by default the root of this lunr.TokenStore - * is used. - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.add = function (token, doc, root) { - var root = root || this.root, - key = token[0], - rest = token.slice(1) + /** + * Adds a new token doc pair to the store. + * + * By default this function starts at the root of the current store, however + * it can start at any node of any token store if required. + * + * @param {String} token The token to store the doc under + * @param {Object} doc The doc to store against the token + * @param {Object} root An optional node at which to start looking for the + * correct place to enter the doc, by default the root of this lunr.TokenStore + * is used. + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.add = function (token, doc, root) { + var root = root || this.root, + key = token[0], + rest = token.slice(1) - if (!(key in root)) root[key] = {docs: {}} + if (!(key in root)) root[key] = {docs: {}} - if (rest.length === 0) { - root[key].docs[doc.ref] = doc - this.length += 1 - return - } else { - return this.add(rest, doc, root[key]) + if (rest.length === 0) { + root[key].docs[doc.ref] = doc + this.length += 1 + return + } else { + return this.add(rest, doc, root[key]) + } } -} -/** - * Checks whether this key is contained within this lunr.TokenStore. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to check for - * @param {Object} root An optional node at which to start - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.has = function (token) { - if (!token) return false + /** + * Checks whether this key is contained within this lunr.TokenStore. + * + * By default this function starts at the root of the current store, however + * it can start at any node of any token store if required. + * + * @param {String} token The token to check for + * @param {Object} root An optional node at which to start + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.has = function (token) { + if (!token) return false + + var node = this.root - var node = this.root + for (var i = 0; i < token.length; i++) { + if (!node[token[i]]) return false - for (var i = 0; i < token.length; i++) { - if (!node[token[i]]) return false + node = node[token[i]] + } - node = node[token[i]] + return true } - return true -} + /** + * Retrieve a node from the token store for a given token. + * + * By default this function starts at the root of the current store, however + * it can start at any node of any token store if required. + * + * @param {String} token The token to get the node for. + * @param {Object} root An optional node at which to start. + * @returns {Object} + * @see TokenStore.prototype.get + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.getNode = function (token) { + if (!token) return {} -/** - * Retrieve a node from the token store for a given token. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to get the node for. - * @param {Object} root An optional node at which to start. - * @returns {Object} - * @see TokenStore.prototype.get - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.getNode = function (token) { - if (!token) return {} + var node = this.root - var node = this.root + for (var i = 0; i < token.length; i++) { + if (!node[token[i]]) return {} - for (var i = 0; i < token.length; i++) { - if (!node[token[i]]) return {} + node = node[token[i]] + } - node = node[token[i]] + return node } - return node -} + /** + * Retrieve the documents for a node for the given token. + * + * By default this function starts at the root of the current store, however + * it can start at any node of any token store if required. + * + * @param {String} token The token to get the documents for. + * @param {Object} root An optional node at which to start. + * @returns {Object} + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.get = function (token, root) { + return this.getNode(token, root).docs || {} + } -/** - * Retrieve the documents for a node for the given token. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to get the documents for. - * @param {Object} root An optional node at which to start. - * @returns {Object} - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.get = function (token, root) { - return this.getNode(token, root).docs || {} -} + lunr.TokenStore.prototype.count = function (token, root) { + return Object.keys(this.get(token, root)).length + } -lunr.TokenStore.prototype.count = function (token, root) { - return Object.keys(this.get(token, root)).length -} + /** + * Remove the document identified by ref from the token in the store. + * + * By default this function starts at the root of the current store, however + * it can start at any node of any token store if required. + * + * @param {String} token The token to get the documents for. + * @param {String} ref The ref of the document to remove from this token. + * @param {Object} root An optional node at which to start. + * @returns {Object} + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.remove = function (token, ref) { + if (!token) return + var node = this.root -/** - * Remove the document identified by ref from the token in the store. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to get the documents for. - * @param {String} ref The ref of the document to remove from this token. - * @param {Object} root An optional node at which to start. - * @returns {Object} - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.remove = function (token, ref) { - if (!token) return - var node = this.root + for (var i = 0; i < token.length; i++) { + if (!(token[i] in node)) return + node = node[token[i]] + } - for (var i = 0; i < token.length; i++) { - if (!(token[i] in node)) return - node = node[token[i]] + delete node.docs[ref] } - delete node.docs[ref] -} - -/** - * Find all the possible suffixes of the passed token using tokens - * currently in the store. - * - * @param {String} token The token to expand. - * @returns {Array} - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.expand = function (token, memo) { - var root = this.getNode(token), - docs = root.docs || {}, - memo = memo || [] + /** + * Find all the possible suffixes of the passed token using tokens + * currently in the store. + * + * @param {String} token The token to expand. + * @returns {Array} + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.expand = function (token, memo) { + var root = this.getNode(token), + docs = root.docs || {}, + memo = memo || [] - if (Object.keys(docs).length) memo.push(token) + if (Object.keys(docs).length) memo.push(token) - Object.keys(root) - .forEach(function (key) { - if (key === 'docs') return + Object.keys(root) + .forEach(function (key) { + if (key === 'docs') return - memo.concat(this.expand(token + key, memo)) - }, this) + memo.concat(this.expand(token + key, memo)) + }, this) - return memo -} + return memo + } -/** - * Returns a representation of the token store ready for serialisation. - * - * @returns {Object} - * @memberOf TokenStore - */ -lunr.TokenStore.prototype.toJSON = function () { - return { - root: this.root, - length: this.length + /** + * Returns a representation of the token store ready for serialisation. + * + * @returns {Object} + * @memberOf TokenStore + */ + lunr.TokenStore.prototype.toJSON = function () { + return { + root: this.root, + length: this.length + } } -} /** - * export the module via AMD, CommonnJS or as a browser global + * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { From b550f04dae22f2f1dd0b13a4c954c897ba6b3abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Thu, 12 Feb 2015 21:55:58 +0100 Subject: [PATCH 0019/1111] Update jQuery UI to version 1.11.3 --- source/javascripts/lib/jquery_ui.js | 570 +++++++++++++++++++++++++++- 1 file changed, 565 insertions(+), 5 deletions(-) diff --git a/source/javascripts/lib/jquery_ui.js b/source/javascripts/lib/jquery_ui.js index 3ff9191f42b..637e9c14254 100644 --- a/source/javascripts/lib/jquery_ui.js +++ b/source/javascripts/lib/jquery_ui.js @@ -1,6 +1,566 @@ -/*! jQuery UI - v1.10.3 - 2013-09-16 -* http://jqueryui.com -* Includes: jquery.ui.widget.js -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ +/*! jQuery UI - v1.11.3 - 2015-02-12 + * http://jqueryui.com + * Includes: widget.js + * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ -(function(e,t){var i=0,s=Array.prototype.slice,a=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(n){}a(t)},e.widget=function(i,s,a){var n,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],n=u+"-"+i,a||(a=s,s=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:a.version,_proto:e.extend({},a),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(a,function(i,a){return e.isFunction(a)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,n=this._superApply;return this._super=e,this._superApply=t,i=a.apply(this,arguments),this._super=s,this._superApply=n,i}}(),t):(l[i]=a,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:n}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var a,n,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(a in r[o])n=r[o][a],r[o].hasOwnProperty(a)&&n!==t&&(i[a]=e.isPlainObject(n)?e.isPlainObject(i[a])?e.widget.extend({},i[a],n):e.widget.extend({},n):n);return i},e.widget.bridge=function(i,a){var n=a.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,a=e.data(this,n);return a?e.isFunction(a[r])&&"_"!==r.charAt(0)?(s=a[r].apply(a,h),s!==a&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,n);t?t.option(r||{})._init():e.data(this,n,new a(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var a,n,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},a=i.split("."),i=a.shift(),a.length){for(n=o[i]=e.widget.extend({},this.options[i]),r=0;a.length-1>r;r++)n[a[r]]=n[a[r]]||{},n=n[a[r]];if(i=a.pop(),s===t)return n[i]===t?null:n[i];n[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,a){var n,r=this;"boolean"!=typeof i&&(a=s,s=i,i=!1),a?(s=n=e(s),this.bindings=this.bindings.add(s)):(a=s,s=this.element,n=this.widget()),e.each(a,function(a,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=a.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?n.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var a,n,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],n=i.originalEvent)for(a in n)a in i||(i[a]=n[a]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,a,n){"string"==typeof a&&(a={effect:a});var r,o=a?a===!0||"number"==typeof a?i:a.effect||i:t;a=a||{},"number"==typeof a&&(a={duration:a}),r=!e.isEmptyObject(a),a.complete=n,a.delay&&s.delay(a.delay),r&&e.effects&&e.effects.effect[o]?s[t](a):o!==t&&s[o]?s[o](a.duration,a.easing,n):s.queue(function(i){e(this)[t](),n&&n.call(s[0]),i()})}})})(jQuery); \ No newline at end of file +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + /*! + * jQuery UI Widget 1.11.3 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/jQuery.widget/ + */ + + + var widget_uuid = 0, + widget_slice = Array.prototype.slice; + + $.cleanData = (function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; (elem = elems[i]) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; + })( $.cleanData ); + + $.widget = function( name, base, prototype ) { + var fullName, existingConstructor, constructor, basePrototype, + // proxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + proxiedPrototype = {}, + namespace = name.split( "." )[ 0 ]; + + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + // extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + // copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + // track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + }); + + basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = (function() { + var _super = function() { + return base.prototype[ prop ].apply( this, arguments ); + }, + _superApply = function( args ) { + return base.prototype[ prop ].apply( this, args ); + }; + return function() { + var __super = this._super, + __superApply = this._superApply, + returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + })(); + }); + constructor.prototype = $.widget.extend( basePrototype, { + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + }); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); + }); + // remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; + }; + + $.widget.extend = function( target ) { + var input = widget_slice.call( arguments, 1 ), + inputIndex = 0, + inputLength = input.length, + key, + value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; + }; + + $.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = widget_slice.call( arguments, 1 ), + returnValue = this; + + if ( isMethodCall ) { + this.each(function() { + var methodValue, + instance = $.data( this, fullName ); + if ( options === "instance" ) { + returnValue = instance; + return false; + } + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + }); + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat(args) ); + } + + this.each(function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + }); + } + + return returnValue; + }; + }; + + $.Widget = function( /* options, element */ ) {}; + $.Widget._childConstructors = []; + + $.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
", + options: { + disabled: false, + + // callbacks + create: null + }, + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widget_uuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + }); + this.document = $( element.style ? + // element within the document + element.ownerDocument : + // element is window or document + element.document || element ); + this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + _getCreateOptions: $.noop, + _getCreateEventData: $.noop, + _create: $.noop, + _init: $.noop, + + destroy: function() { + this._destroy(); + // we can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .unbind( this.eventNamespace ) + .removeData( this.widgetFullName ) + // support: jquery <1.6.3 + // http://bugs.jquery.com/ticket/9413 + .removeData( $.camelCase( this.widgetFullName ) ); + this.widget() + .unbind( this.eventNamespace ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetFullName + "-disabled " + + "ui-state-disabled" ); + + // clean up events and states + this.bindings.unbind( this.eventNamespace ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + }, + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + parts, + curOption, + i; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + .toggleClass( this.widgetFullName + "-disabled", !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } + } + + return this; + }, + + enable: function() { + return this._setOptions({ disabled: false }); + }, + disable: function() { + return this._setOptions({ disabled: true }); + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement, + instance = this; + + // no suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // no element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ), + eventName = match[1] + instance.eventNamespace, + selector = match[2]; + if ( selector ) { + delegateElement.delegate( selector, eventName, handlerProxy ); + } else { + element.bind( eventName, handlerProxy ); + } + }); + }, + + _off: function( element, eventName ) { + eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.unbind( eventName ).undelegate( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + $( event.currentTarget ).addClass( "ui-state-hover" ); + }, + mouseleave: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-hover" ); + } + }); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + $( event.currentTarget ).addClass( "ui-state-focus" ); + }, + focusout: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-focus" ); + } + }); + }, + + _trigger: function( type, event, data ) { + var prop, orig, + callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + // the original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[0], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } + }; + + $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + var hasOptions, + effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + if ( options.delay ) { + element.delay( options.delay ); + } + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue(function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + }); + } + }; + }); + + var widget = $.widget; + + + +})); From 1d13e198d0e06e3d09228d851c8e6880c2c1d199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 14 Feb 2015 00:31:09 +0100 Subject: [PATCH 0020/1111] Update normalize.css to version 3.0.2 --- source/stylesheets/normalize.css | 380 ++++++++++++++++++------------- 1 file changed, 216 insertions(+), 164 deletions(-) diff --git a/source/stylesheets/normalize.css b/source/stylesheets/normalize.css index 73abb76fa41..46f646a5c00 100644 --- a/source/stylesheets/normalize.css +++ b/source/stylesheets/normalize.css @@ -1,11 +1,33 @@ -/*! normalize.css v2.0.1 | MIT License | git.io/normalize */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -/* ========================================================================== - HTML5 display definitions +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions ========================================================================== */ -/* - * Corrects `block` display not defined in IE 8/9. +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. */ article, @@ -16,24 +38,29 @@ figure, footer, header, hgroup, +main, +menu, nav, section, summary { display: block; } -/* - * Corrects `inline-block` display not defined in IE 8/9. +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ audio, canvas, +progress, video { - display: inline-block; + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ } -/* - * Prevents modern browsers from displaying `audio` without controls. +/** + * Prevent modern browsers from displaying `audio` without controls. * Remove excess height in iOS 5 devices. */ @@ -42,52 +69,29 @@ audio:not([controls]) { height: 0; } -/* - * Addresses styling for `hidden` attribute not present in IE 8/9. +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ -[hidden] { +[hidden], +template { display: none; } -/* ========================================================================== - Base +/* Links ========================================================================== */ -/* - * 1. Sets default font family to sans-serif. - * 2. Prevents iOS text size adjust after orientation change, without disabling - * user zoom. +/** + * Remove the gray background color from active links in IE 10. */ -html { - font-family: sans-serif; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - -ms-text-size-adjust: 100%; /* 2 */ +a { + background-color: transparent; } -/* - * Removes default margin. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/* - * Addresses `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/* - * Improves readability when focused and also mouse hovered in all browsers. +/** + * Improve readability when focused and also mouse hovered in all browsers. */ a:active, @@ -95,29 +99,19 @@ a:hover { outline: 0; } -/* ========================================================================== - Typography +/* Text-level semantics ========================================================================== */ -/* - * Addresses `h1` font sizes within `section` and `article` in Firefox 4+, - * Safari 5, and Chrome. - */ - -h1 { - font-size: 2em; -} - -/* - * Addresses styling not present in IE 8/9, Safari 5, and Chrome. +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { border-bottom: 1px dotted; } -/* - * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome. +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ b, @@ -125,64 +119,43 @@ strong { font-weight: bold; } -/* - * Addresses styling not present in Safari 5 and Chrome. +/** + * Address styling not present in Safari and Chrome. */ dfn { font-style: italic; } -/* - * Addresses styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - - -/* - * Corrects font family set oddly in Safari 5 and Chrome. +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. */ -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -/* - * Improves readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; +h1 { + font-size: 2em; + margin: 0.67em 0; } -/* - * Sets consistent quote types. +/** + * Address styling not present in IE 8/9. */ -q { - quotes: "\201C" "\201D" "\2018" "\2019"; +mark { + background: #ff0; + color: #000; } -/* - * Addresses inconsistent and variable font size in all browsers. +/** + * Address inconsistent and variable font size in all browsers. */ small { font-size: 80%; } -/* - * Prevents `sub` and `sup` affecting `line-height` in all browsers. +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ sub, @@ -201,92 +174,116 @@ sub { bottom: -0.25em; } -/* ========================================================================== - Embedded content +/* Embedded content ========================================================================== */ -/* - * Removes border when inside `a` element in IE 8/9. +/** + * Remove border when inside `a` element in IE 8/9/10. */ img { border: 0; } -/* - * Corrects overflow displayed oddly in IE 9. +/** + * Correct overflow not hidden in IE 9/10/11. */ svg:not(:root) { overflow: hidden; } -/* ========================================================================== - Figures +/* Grouping content ========================================================================== */ -/* - * Addresses margin not present in IE 8/9 and Safari 5. +/** + * Address margin not present in IE 8/9 and Safari. */ figure { - margin: 0; + margin: 1em 40px; } -/* ========================================================================== - Forms - ========================================================================== */ +/** + * Address differences between Firefox and other browsers. + */ -/* - * Define consistent border, margin, and padding. +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; +pre { + overflow: auto; } -/* - * 1. Corrects color not being inherited in IE 8/9. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. +/** + * Address odd `em`-unit font size rendering in all browsers. */ -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; } -/* - * 1. Corrects font family not being inherited in all browsers. - * 2. Corrects font size not being inherited in all browsers. - * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ button, input, +optgroup, select, textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 2 */ + color: inherit; /* 1 */ + font: inherit; /* 2 */ margin: 0; /* 3 */ } -/* - * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. */ button, -input { - line-height: normal; +select { + text-transform: none; } -/* +/** * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * and `video` controls. - * 2. Corrects inability to style clickable `input` types in iOS. - * 3. Improves usability and consistency of cursor style between image-type + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type * `input` and others. */ @@ -298,18 +295,40 @@ input[type="submit"] { cursor: pointer; /* 3 */ } -/* +/** * Re-set default cursor for disabled elements. */ button[disabled], -input[disabled] { +html input[disabled] { cursor: default; } -/* - * 1. Addresses box sizing set to `content-box` in IE 8/9. - * 2. Removes excess padding in IE 8/9. +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. */ input[type="checkbox"], @@ -318,9 +337,20 @@ input[type="radio"] { padding: 0; /* 2 */ } -/* - * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome * (include `-moz` to future-proof). */ @@ -331,9 +361,10 @@ input[type="search"] { box-sizing: content-box; } -/* - * Removes inner padding and search cancel button in Safari 5 and Chrome - * on OS X. +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). */ input[type="search"]::-webkit-search-cancel-button, @@ -341,35 +372,56 @@ input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } -/* - * Removes inner padding and border in Firefox 4+. +/** + * Define consistent border, margin, and padding. */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; } -/* - * 1. Removes default vertical scrollbar in IE 8/9. - * 2. Improves readability and alignment in all browsers. +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. */ textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ + overflow: auto; } -/* ========================================================================== - Tables +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables ========================================================================== */ -/* +/** * Remove most spacing between table cells. */ table { border-collapse: collapse; border-spacing: 0; -} \ No newline at end of file +} + +td, +th { + padding: 0; +} From f2ebab932517ec3c50c514ba23572c26b9ae5e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Fri, 20 Feb 2015 22:58:30 +0100 Subject: [PATCH 0021/1111] Rename SCSS files, so no unnecessary stylesheets are generated. --- source/stylesheets/{icon-font.scss => _icon-font.scss} | 0 source/stylesheets/{normalize.css => _normalize.css} | 0 source/stylesheets/{syntax.css.scss.erb => _syntax.scss.erb} | 0 source/stylesheets/{variables.scss => _variables.scss} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename source/stylesheets/{icon-font.scss => _icon-font.scss} (100%) rename source/stylesheets/{normalize.css => _normalize.css} (100%) rename source/stylesheets/{syntax.css.scss.erb => _syntax.scss.erb} (100%) rename source/stylesheets/{variables.scss => _variables.scss} (100%) diff --git a/source/stylesheets/icon-font.scss b/source/stylesheets/_icon-font.scss similarity index 100% rename from source/stylesheets/icon-font.scss rename to source/stylesheets/_icon-font.scss diff --git a/source/stylesheets/normalize.css b/source/stylesheets/_normalize.css similarity index 100% rename from source/stylesheets/normalize.css rename to source/stylesheets/_normalize.css diff --git a/source/stylesheets/syntax.css.scss.erb b/source/stylesheets/_syntax.scss.erb similarity index 100% rename from source/stylesheets/syntax.css.scss.erb rename to source/stylesheets/_syntax.scss.erb diff --git a/source/stylesheets/variables.scss b/source/stylesheets/_variables.scss similarity index 100% rename from source/stylesheets/variables.scss rename to source/stylesheets/_variables.scss From 0dac148f9506f60f6d345fa9878685e83982f940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Fri, 20 Feb 2015 23:15:47 +0100 Subject: [PATCH 0022/1111] Update Middleman to version 3.3.9 --- Gemfile.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4397878a67f..3e8f4177d52 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,19 +9,19 @@ GEM tzinfo (~> 1.1) celluloid (0.16.0) timers (~> 4.0.0) - chunky_png (1.3.3) + chunky_png (1.3.4) coffee-script (2.3.0) coffee-script-source execjs - coffee-script-source (1.8.0) - compass (1.0.1) + coffee-script-source (1.9.1) + compass (1.0.3) chunky_png (~> 1.2) - compass-core (~> 1.0.1) + compass-core (~> 1.0.2) compass-import-once (~> 1.0.5) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) sass (>= 3.3.13, < 3.5) - compass-core (1.0.1) + compass-core (1.0.3) multi_json (~> 1.0) sass (>= 3.3.0, < 3.5) compass-import-once (1.0.5) @@ -31,7 +31,7 @@ GEM http_parser.rb (~> 0.6.0) erubis (2.7.0) eventmachine (1.0.4) - execjs (2.2.2) + execjs (2.3.0) ffi (1.9.6) haml (4.0.6) tilt @@ -40,7 +40,7 @@ GEM hooks (0.4.0) uber (~> 0.0.4) http_parser.rb (0.6.0) - i18n (0.6.11) + i18n (0.7.0) json (1.8.2) kramdown (1.5.0) libv8 (3.16.14.7) @@ -48,23 +48,23 @@ GEM celluloid (>= 0.15.2) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) - middleman (3.3.7) + middleman (3.3.9) coffee-script (~> 2.2) compass (>= 1.0.0, < 2.0.0) compass-import-once (= 1.0.5) execjs (~> 2.0) haml (>= 4.0.5) kramdown (~> 1.2) - middleman-core (= 3.3.7) + middleman-core (= 3.3.9) middleman-sprockets (>= 3.1.2) sass (>= 3.4.0, < 4.0) uglifier (~> 2.5) - middleman-core (3.3.7) + middleman-core (3.3.9) activesupport (~> 4.1.0) bundler (~> 1.1) erubis hooks (~> 0.3) - i18n (~> 0.6.9) + i18n (~> 0.7.0) listen (>= 2.7.9, < 3.0) padrino-helpers (~> 0.12.3) rack (>= 1.4.5, < 2.0) @@ -106,7 +106,7 @@ GEM ref (1.0.5) rouge (1.8.0) ruby18_source_location (0.2) - sass (3.4.9) + sass (3.4.12) sprockets (2.12.3) hike (~> 1.2) multi_json (~> 1.0) From c8e7c646dc8f54830e367b47a1d635321f7c9d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 21 Feb 2015 00:51:04 +0100 Subject: [PATCH 0023/1111] Optimize images Saves 26,9% on logo png and a whopping 96,6% on navbar.png --- source/images/logo.png | Bin 4796 -> 3507 bytes source/images/navbar.png | Bin 2790 -> 96 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/logo.png b/source/images/logo.png index 24e509952c50a098b4736d2d1fbdb5e99558f3f4..fa1f13da8193dacca747df56cc1f7bb0bc111a7e 100644 GIT binary patch delta 3506 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 diff --git a/source/images/navbar.png b/source/images/navbar.png index 32e70e14fb45cbf6a64b00115c78c4b8dfee4981..df38e90d87e1a215371b4977e18cde90f8832537 100644 GIT binary patch delta 77 zcmaDRnlM4qodF2K1XVSF6jMo%UoZnh+2pepK%S(hi(^OyW3q(K0U?eJ8{O741+p&Y bVv}QF@V(=ps4wXI52V%8)z4*}Q$iB}%X1U2 literal 2790 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 From a9d8b9b3b178269d81c5e73ba98bbdb62d0a74bf Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:04:41 +0200 Subject: [PATCH 0024/1111] Cleanup config.rb --- config.rb | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/config.rb b/config.rb index 9cc61f076fa..cd9a362f6ad 100644 --- a/config.rb +++ b/config.rb @@ -1,37 +1,32 @@ +# Markdown +set :markdown_engine, :redcarpet +set :markdown, + fenced_code_blocks: true, + smartypants: true, + disable_indented_code_blocks: true, + prettify: true, + tables: true, + with_toc_data: true, + no_intra_emphasis: true + +# Assets set :css_dir, 'stylesheets' - set :js_dir, 'javascripts' - set :images_dir, 'images' - set :fonts_dir, 'fonts' -set :markdown_engine, :redcarpet - -set :markdown, :fenced_code_blocks => true, :smartypants => true, :disable_indented_code_blocks => true, :prettify => true, :tables => true, :with_toc_data => true, :no_intra_emphasis => true - # Activate the syntax highlighter activate :syntax -# This is needed for Github pages, since they're hosted on a subdomain +# Github pages require relative links activate :relative_assets set :relative_links, true -# Build-specific configuration +# Build Configuration configure :build do - # For example, change the Compass output style for deployment activate :minify_css - - # Minify Javascript on build activate :minify_javascript - - # Enable cache buster - # activate :asset_hash - - # Use relative URLs # activate :relative_assets - - # Or use a different image path - # set :http_prefix, "/Content/images/" + # activate :asset_hash + # activate :gzip end - From a7596ff0a5e9fbfbc4a0cb7f6a2d02b589d63141 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 19:58:59 +0200 Subject: [PATCH 0025/1111] Cleanup Gemfile --- Gemfile | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/Gemfile b/Gemfile index 7ea1a883efd..6923c3e0b62 100644 --- a/Gemfile +++ b/Gemfile @@ -1,30 +1,18 @@ -# If you have OpenSSL installed, we recommend updating -# the following line to use "https" source 'http://rubygems.org' -gem "rouge", "~> 1.8.0" - -gem "middleman", "~>3.3.0" - -# For syntax highlighting -gem "middleman-syntax" - -# Plugin for middleman to generate Github pages +# Middleman +gem 'middleman', '~>3.3.0' +gem 'middleman-livereload', '~> 3.3.0' gem 'middleman-gh-pages' - -# Live-reloading plugin -gem "middleman-livereload", "~> 3.3.0" - +gem 'middleman-syntax' +gem 'rouge', '~> 1.8.0' gem 'redcarpet', '~> 3.2.1' -# For faster file watcher updates on Windows: -gem "wdm", "~> 0.1.0", :platforms => [:mswin, :mingw] +gem 'rake', '~> 10.4.0' +gem 'therubyracer', platforms: :ruby -# Cross-templating language block fix for Ruby 1.8 +# Trash +gem 'wdm', '~> 0.1.0', :platforms => [:mswin, :mingw] platforms :mri_18 do - gem "ruby18_source_location" + gem 'ruby18_source_location' end - -gem "rake", "~> 10.4.0" - -gem 'therubyracer', :platforms => :ruby From e3f36f90576ebb128d58a61d5e8d7d1e19a7c9f8 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:05:19 +0200 Subject: [PATCH 0026/1111] Remove wdm gem --- Gemfile | 1 - Gemfile.lock | 1 - 2 files changed, 2 deletions(-) diff --git a/Gemfile b/Gemfile index 6923c3e0b62..cee4da95312 100644 --- a/Gemfile +++ b/Gemfile @@ -12,7 +12,6 @@ gem 'rake', '~> 10.4.0' gem 'therubyracer', platforms: :ruby # Trash -gem 'wdm', '~> 0.1.0', :platforms => [:mswin, :mingw] platforms :mri_18 do gem 'ruby18_source_location' end diff --git a/Gemfile.lock b/Gemfile.lock index 3e8f4177d52..649288f0bb6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -145,4 +145,3 @@ DEPENDENCIES rouge (~> 1.8.0) ruby18_source_location therubyracer - wdm (~> 0.1.0) From c39c82c917b2a49073cd557002df2e2080df5b30 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:07:06 +0200 Subject: [PATCH 0027/1111] Remove ruby18_source_location gem --- Gemfile | 5 ----- Gemfile.lock | 4 +--- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index cee4da95312..5b0aabb13cf 100644 --- a/Gemfile +++ b/Gemfile @@ -10,8 +10,3 @@ gem 'redcarpet', '~> 3.2.1' gem 'rake', '~> 10.4.0' gem 'therubyracer', platforms: :ruby - -# Trash -platforms :mri_18 do - gem 'ruby18_source_location' -end diff --git a/Gemfile.lock b/Gemfile.lock index 649288f0bb6..0a26c22871d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -105,7 +105,6 @@ GEM redcarpet (3.2.2) ref (1.0.5) rouge (1.8.0) - ruby18_source_location (0.2) sass (3.4.12) sprockets (2.12.3) hike (~> 1.2) @@ -142,6 +141,5 @@ DEPENDENCIES middleman-syntax rake (~> 10.4.0) redcarpet (~> 3.2.1) - rouge (~> 1.8.0) - ruby18_source_location + rouge (= 1.8.0) therubyracer From f5b34ba69a983adf54ea70ce9379b49b283d7e5f Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:12:05 +0200 Subject: [PATCH 0028/1111] Remove middleman-livereload gem --- Gemfile | 1 - Gemfile.lock | 14 +------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/Gemfile b/Gemfile index 5b0aabb13cf..8075a2e4a90 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,6 @@ source 'http://rubygems.org' # Middleman gem 'middleman', '~>3.3.0' -gem 'middleman-livereload', '~> 3.3.0' gem 'middleman-gh-pages' gem 'middleman-syntax' gem 'rouge', '~> 1.8.0' diff --git a/Gemfile.lock b/Gemfile.lock index 0a26c22871d..ade997d435f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -26,11 +26,7 @@ GEM sass (>= 3.3.0, < 3.5) compass-import-once (1.0.5) sass (>= 3.2, < 3.5) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) erubis (2.7.0) - eventmachine (1.0.4) execjs (2.3.0) ffi (1.9.6) haml (4.0.6) @@ -39,8 +35,7 @@ GEM hitimes (1.2.2) hooks (0.4.0) uber (~> 0.0.4) - http_parser.rb (0.6.0) - i18n (0.7.0) + i18n (v) json (1.8.2) kramdown (1.5.0) libv8 (3.16.14.7) @@ -73,10 +68,6 @@ GEM tilt (~> 1.4.1, < 2.0) middleman-gh-pages (0.0.3) rake (> 0.9.3) - middleman-livereload (3.3.4) - em-websocket (~> 0.5.1) - middleman-core (~> 3.2) - rack-livereload (~> 0.3.15) middleman-sprockets (3.4.1) middleman-core (>= 3.3) sprockets (~> 2.12.1) @@ -94,8 +85,6 @@ GEM padrino-support (0.12.4) activesupport (>= 3.1) rack (1.6.0) - rack-livereload (0.3.15) - rack rack-test (0.6.3) rack (>= 1.0) rake (10.4.2) @@ -137,7 +126,6 @@ PLATFORMS DEPENDENCIES middleman (~> 3.3.0) middleman-gh-pages - middleman-livereload (~> 3.3.0) middleman-syntax rake (~> 10.4.0) redcarpet (~> 3.2.1) From ec2415e31989aba90929d0f091738499d0182969 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:18:20 +0200 Subject: [PATCH 0029/1111] Update middleman gem to version 3.3.10 --- Gemfile | 2 +- Gemfile.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Gemfile b/Gemfile index 8075a2e4a90..808257f4b65 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'http://rubygems.org' # Middleman -gem 'middleman', '~>3.3.0' +gem 'middleman', '~>3.3.10' gem 'middleman-gh-pages' gem 'middleman-syntax' gem 'rouge', '~> 1.8.0' diff --git a/Gemfile.lock b/Gemfile.lock index ade997d435f..a8d83c27684 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,7 +27,7 @@ GEM compass-import-once (1.0.5) sass (>= 3.2, < 3.5) erubis (2.7.0) - execjs (2.3.0) + execjs (2.4.0) ffi (1.9.6) haml (4.0.6) tilt @@ -35,26 +35,26 @@ GEM hitimes (1.2.2) hooks (0.4.0) uber (~> 0.0.4) - i18n (v) + i18n (0.7.0) json (1.8.2) - kramdown (1.5.0) + kramdown (1.6.0) libv8 (3.16.14.7) listen (2.8.5) celluloid (>= 0.15.2) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) - middleman (3.3.9) + middleman (3.3.10) coffee-script (~> 2.2) compass (>= 1.0.0, < 2.0.0) compass-import-once (= 1.0.5) execjs (~> 2.0) haml (>= 4.0.5) kramdown (~> 1.2) - middleman-core (= 3.3.9) + middleman-core (= 3.3.10) middleman-sprockets (>= 3.1.2) sass (>= 3.4.0, < 4.0) uglifier (~> 2.5) - middleman-core (3.3.9) + middleman-core (3.3.10) activesupport (~> 4.1.0) bundler (~> 1.1) erubis @@ -68,7 +68,7 @@ GEM tilt (~> 1.4.1, < 2.0) middleman-gh-pages (0.0.3) rake (> 0.9.3) - middleman-sprockets (3.4.1) + middleman-sprockets (3.4.2) middleman-core (>= 3.3) sprockets (~> 2.12.1) sprockets-helpers (~> 1.1.0) @@ -77,12 +77,12 @@ GEM middleman-core (~> 3.2) rouge (~> 1.0) minitest (5.5.1) - multi_json (1.10.1) - padrino-helpers (0.12.4) + multi_json (1.11.0) + padrino-helpers (0.12.5) i18n (~> 0.6, >= 0.6.7) - padrino-support (= 0.12.4) + padrino-support (= 0.12.5) tilt (~> 1.4.1) - padrino-support (0.12.4) + padrino-support (0.12.5) activesupport (>= 3.1) rack (1.6.0) rack-test (0.6.3) @@ -94,7 +94,7 @@ GEM redcarpet (3.2.2) ref (1.0.5) rouge (1.8.0) - sass (3.4.12) + sass (3.4.13) sprockets (2.12.3) hike (~> 1.2) multi_json (~> 1.0) @@ -116,7 +116,7 @@ GEM tzinfo (1.2.2) thread_safe (~> 0.1) uber (0.0.13) - uglifier (2.7.0) + uglifier (2.7.1) execjs (>= 0.3.0) json (>= 1.8.0) @@ -124,7 +124,7 @@ PLATFORMS ruby DEPENDENCIES - middleman (~> 3.3.0) + middleman (~> 3.3.10) middleman-gh-pages middleman-syntax rake (~> 10.4.0) From 8276ba8ff482e5e8da6880653440a21684b27cd9 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:26:10 +0200 Subject: [PATCH 0030/1111] Specify version for middleman-gh-pages gem to 0.0.3 --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 808257f4b65..17250a57b3f 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'http://rubygems.org' # Middleman gem 'middleman', '~>3.3.10' -gem 'middleman-gh-pages' +gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax' gem 'rouge', '~> 1.8.0' gem 'redcarpet', '~> 3.2.1' diff --git a/Gemfile.lock b/Gemfile.lock index a8d83c27684..3d050ee434e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,7 +125,7 @@ PLATFORMS DEPENDENCIES middleman (~> 3.3.10) - middleman-gh-pages + middleman-gh-pages (~> 0.0.3) middleman-syntax rake (~> 10.4.0) redcarpet (~> 3.2.1) From e14878ff5644f807fc803a9c5f54cfbbee914a50 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 20:28:13 +0200 Subject: [PATCH 0031/1111] Specify version for middleman-syntax gem to 2.0.0 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 17250a57b3f..c01b18993e4 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'http://rubygems.org' # Middleman gem 'middleman', '~>3.3.10' gem 'middleman-gh-pages', '~> 0.0.3' -gem 'middleman-syntax' +gem 'middleman-syntax', '~> 2.0.0' gem 'rouge', '~> 1.8.0' gem 'redcarpet', '~> 3.2.1' diff --git a/Gemfile.lock b/Gemfile.lock index 3d050ee434e..b636d8ba391 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,8 +126,8 @@ PLATFORMS DEPENDENCIES middleman (~> 3.3.10) middleman-gh-pages (~> 0.0.3) - middleman-syntax + middleman-syntax (~> 2.0.0) rake (~> 10.4.0) redcarpet (~> 3.2.1) - rouge (= 1.8.0) + rouge (~> 1.8.0) therubyracer From a91ac15fab107b3bfca6267d48aca897889d1766 Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 21:51:43 +0200 Subject: [PATCH 0032/1111] Update redcarpet gem to version 3.2.2 --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index c01b18993e4..c61cd55484b 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ gem 'middleman', '~>3.3.10' gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax', '~> 2.0.0' gem 'rouge', '~> 1.8.0' -gem 'redcarpet', '~> 3.2.1' +gem 'redcarpet', '~> 3.2.2' gem 'rake', '~> 10.4.0' gem 'therubyracer', platforms: :ruby diff --git a/Gemfile.lock b/Gemfile.lock index b636d8ba391..d802f83c3ea 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -128,6 +128,6 @@ DEPENDENCIES middleman-gh-pages (~> 0.0.3) middleman-syntax (~> 2.0.0) rake (~> 10.4.0) - redcarpet (~> 3.2.1) + redcarpet (~> 3.2.2) rouge (~> 1.8.0) therubyracer From 6ea72a13fa5252e2034a7827004be641b895d67a Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 21:52:40 +0200 Subject: [PATCH 0033/1111] Update rake gem to version 10.4.2 --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index c61cd55484b..591e908d12b 100644 --- a/Gemfile +++ b/Gemfile @@ -7,5 +7,5 @@ gem 'middleman-syntax', '~> 2.0.0' gem 'rouge', '~> 1.8.0' gem 'redcarpet', '~> 3.2.2' -gem 'rake', '~> 10.4.0' +gem 'rake', '~> 10.4.2' gem 'therubyracer', platforms: :ruby diff --git a/Gemfile.lock b/Gemfile.lock index d802f83c3ea..5080c7d6063 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -127,7 +127,7 @@ DEPENDENCIES middleman (~> 3.3.10) middleman-gh-pages (~> 0.0.3) middleman-syntax (~> 2.0.0) - rake (~> 10.4.0) + rake (~> 10.4.2) redcarpet (~> 3.2.2) rouge (~> 1.8.0) therubyracer From fd684122ddaa34da527c708ff5c8f1f1176d973f Mon Sep 17 00:00:00 2001 From: Chrisovalantis Kefalidis Date: Sat, 7 Mar 2015 21:55:32 +0200 Subject: [PATCH 0034/1111] Specify version for therubyracer gem to 0.12.1 --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 591e908d12b..df5651b2b81 100644 --- a/Gemfile +++ b/Gemfile @@ -8,4 +8,4 @@ gem 'rouge', '~> 1.8.0' gem 'redcarpet', '~> 3.2.2' gem 'rake', '~> 10.4.2' -gem 'therubyracer', platforms: :ruby +gem 'therubyracer', '~> 0.12.1', platforms: :ruby diff --git a/Gemfile.lock b/Gemfile.lock index 5080c7d6063..11aed001fde 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -130,4 +130,4 @@ DEPENDENCIES rake (~> 10.4.2) redcarpet (~> 3.2.2) rouge (~> 1.8.0) - therubyracer + therubyracer (~> 0.12.1) From 23eb3f433e17b0b2d97f14d9a6b549431adb4fcc Mon Sep 17 00:00:00 2001 From: German Attanasio Ruiz Date: Thu, 26 Mar 2015 15:05:55 -0400 Subject: [PATCH 0035/1111] Update README.md Adding IBM Cloudant to the example list --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c3c907b89a8..27d7b6b6792 100644 --- a/README.md +++ b/README.md @@ -84,8 +84,9 @@ Examples of Slate in the Wild * [Switch Payments Documentation](http://switchpayments.com/docs/) & [API](http://switchpayments.com/developers/) * [Coinbase API Reference](https://developers.coinbase.com/api) * [Whispir.io API](https://whispir.github.io/api) -* [Nasa API](https://data.nasa.gov/developer/external/planetary/) +* [NASA API](https://data.nasa.gov/developer/external/planetary/) * [CardPay API](https://developers.cardpay.com/) +* [IBM Cloudant](https://docs-testb.cloudant.com/content-review/_design/couchapp/index.html) (Feel free to add your site to this list in a pull request!) From 5da237e7fe9d7bfa654d5f81aabd7a79c997d8c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sun, 29 Mar 2015 22:39:41 +0200 Subject: [PATCH 0036/1111] Don't use a selector to get the heading text for search results. Prevents bugs with special CSS characters. Closes #201. --- source/javascripts/app/search.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/javascripts/app/search.js b/source/javascripts/app/search.js index cf2eaf8cb63..3c22f714262 100644 --- a/source/javascripts/app/search.js +++ b/source/javascripts/app/search.js @@ -50,7 +50,8 @@ if (results.length) { searchResults.empty(); $.each(results, function (index, result) { - searchResults.append("
  • " + $('#'+result.ref).text() + "
  • "); + var elem = document.getElementById(result.ref); + searchResults.append("
  • " + $(elem).text() + "
  • "); }); highlight.call(this); } else { From 4fe37604b7aae06ec952dd9de116c6b0ca90e737 Mon Sep 17 00:00:00 2001 From: Nik Samokhvalov Date: Mon, 13 Apr 2015 14:19:08 +0300 Subject: [PATCH 0037/1111] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 27d7b6b6792..21ec87edac2 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ Examples of Slate in the Wild * [NASA API](https://data.nasa.gov/developer/external/planetary/) * [CardPay API](https://developers.cardpay.com/) * [IBM Cloudant](https://docs-testb.cloudant.com/content-review/_design/couchapp/index.html) +* [Bitrix basis components](http://bbc.bitrix.expert/) (Feel free to add your site to this list in a pull request!) From f98914369265de851924b4b04bafe71719387045 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Thu, 30 Apr 2015 15:56:38 -0500 Subject: [PATCH 0038/1111] Fix styling bug in example index --- source/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.md b/source/index.md index 401ece5fcd9..ed5f6d63d0e 100644 --- a/source/index.md +++ b/source/index.md @@ -55,7 +55,7 @@ Kittn expects for the API key to be included in all API requests to the server i `Authorization: meowmeowmeow` # Kittens From 16dca4d00002fc8fce8cf1b78605a0bb297b6246 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Thu, 30 Apr 2015 15:58:11 -0500 Subject: [PATCH 0039/1111] Update gems --- Gemfile.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 11aed001fde..e3931cd63af 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: http://rubygems.org/ specs: - activesupport (4.1.9) + activesupport (4.1.10) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -10,10 +10,10 @@ GEM celluloid (0.16.0) timers (~> 4.0.0) chunky_png (1.3.4) - coffee-script (2.3.0) + coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.9.1) + coffee-script-source (1.9.1.1) compass (1.0.3) chunky_png (~> 1.2) compass-core (~> 1.0.2) @@ -27,8 +27,8 @@ GEM compass-import-once (1.0.5) sass (>= 3.2, < 3.5) erubis (2.7.0) - execjs (2.4.0) - ffi (1.9.6) + execjs (2.5.2) + ffi (1.9.8) haml (4.0.6) tilt hike (1.2.3) @@ -37,24 +37,24 @@ GEM uber (~> 0.0.4) i18n (0.7.0) json (1.8.2) - kramdown (1.6.0) + kramdown (1.7.0) libv8 (3.16.14.7) - listen (2.8.5) - celluloid (>= 0.15.2) + listen (2.10.0) + celluloid (~> 0.16.0) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) - middleman (3.3.10) + middleman (3.3.11) coffee-script (~> 2.2) compass (>= 1.0.0, < 2.0.0) compass-import-once (= 1.0.5) execjs (~> 2.0) haml (>= 4.0.5) kramdown (~> 1.2) - middleman-core (= 3.3.10) + middleman-core (= 3.3.11) middleman-sprockets (>= 3.1.2) sass (>= 3.4.0, < 4.0) uglifier (~> 2.5) - middleman-core (3.3.10) + middleman-core (3.3.11) activesupport (~> 4.1.0) bundler (~> 1.1) erubis @@ -76,7 +76,7 @@ GEM middleman-syntax (2.0.0) middleman-core (~> 3.2) rouge (~> 1.0) - minitest (5.5.1) + minitest (5.6.1) multi_json (1.11.0) padrino-helpers (0.12.5) i18n (~> 0.6, >= 0.6.7) @@ -91,7 +91,7 @@ GEM rb-fsevent (0.9.4) rb-inotify (0.9.5) ffi (>= 0.5.0) - redcarpet (3.2.2) + redcarpet (3.2.3) ref (1.0.5) rouge (1.8.0) sass (3.4.13) @@ -105,11 +105,11 @@ GEM sprockets-sass (1.3.1) sprockets (~> 2.0) tilt (~> 1.1) - therubyracer (0.12.1) + therubyracer (0.12.2) libv8 (~> 3.16.14.0) ref thor (0.19.1) - thread_safe (0.3.4) + thread_safe (0.3.5) tilt (1.4.1) timers (4.0.1) hitimes From fddf3040878694f781bba00c307dccdef964e6a3 Mon Sep 17 00:00:00 2001 From: Maks3w Date: Mon, 18 May 2015 09:58:08 +0200 Subject: [PATCH 0040/1111] Use HTTPS for fetch gems --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index df5651b2b81..73f7a16891c 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ -source 'http://rubygems.org' +source 'https://rubygems.org' # Middleman gem 'middleman', '~>3.3.10' diff --git a/Gemfile.lock b/Gemfile.lock index e3931cd63af..c22d1d07291 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,5 +1,5 @@ GEM - remote: http://rubygems.org/ + remote: https://rubygems.org/ specs: activesupport (4.1.10) i18n (~> 0.6, >= 0.6.9) From 094c38223eacb9f40ac4fdb044e0b19efda4b892 Mon Sep 17 00:00:00 2001 From: Maks3w Date: Mon, 18 May 2015 10:09:01 +0200 Subject: [PATCH 0041/1111] [Travis-CI] Use docker build infraestructure --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 46029affecf..035d7ebe7cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,5 @@ +sudo: false + rvm: - 1.9.3 - 2.0.0 From d7769c653d3cd35cfa8117a7207a0196668d7da5 Mon Sep 17 00:00:00 2001 From: Maks3w Date: Mon, 18 May 2015 10:11:51 +0200 Subject: [PATCH 0042/1111] [Travis-CI] Specify language to test is ruby --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 035d7ebe7cc..16d6207dad1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ sudo: false +language: ruby + rvm: - 1.9.3 - 2.0.0 From d0e46a3894a2180d1ecc8fad09fa15968118d74c Mon Sep 17 00:00:00 2001 From: Maks3w Date: Mon, 18 May 2015 10:12:57 +0200 Subject: [PATCH 0043/1111] [Travis-CI] Enable bundler cache --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 16d6207dad1..3280d947c9a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,3 +5,5 @@ language: ruby rvm: - 1.9.3 - 2.0.0 + +cache: bundler From bdebff8250193ba2c479d2819092bab6c549e05c Mon Sep 17 00:00:00 2001 From: Maks3w Date: Mon, 18 May 2015 12:45:30 +0200 Subject: [PATCH 0044/1111] Add "rake clobber" for to remove generated files --- Rakefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Rakefile b/Rakefile index d6af6474b1d..6a952e1e914 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,6 @@ require 'middleman-gh-pages' +require 'rake/clean' + +CLOBBER.include('build') task :default => [:build] From 06c1641ad1965627ad0d01f1247fd4337f079c37 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 28 May 2015 18:41:56 -0400 Subject: [PATCH 0045/1111] Consistency fixes as discussed on commit 84b7705fd1b510bd79c69a030a754b8d6129ad34 --- source/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/index.md b/source/index.md index ed5f6d63d0e..4c1fa8c9f7d 100644 --- a/source/index.md +++ b/source/index.md @@ -106,7 +106,7 @@ This endpoint retrieves all kittens. ### HTTP Request -`GET http://example.com/kittens` +`GET http://example.com/api/kittens` ### Query Parameters @@ -136,7 +136,7 @@ api.kittens.get(2) ``` ```shell -curl "http://example.com/api/kittens/3" +curl "http://example.com/api/kittens/2" -H "Authorization: meowmeowmeow" ``` @@ -164,5 +164,5 @@ This endpoint retrieves a specific kitten. Parameter | Description --------- | ----------- -ID | The ID of the cat to retrieve +ID | The ID of the kitten to retrieve From 3a53a3c0291cb8d189794dd5cfe3cdb17edb9734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sun, 31 May 2015 20:20:58 +0200 Subject: [PATCH 0046/1111] Update rouge to version 1.9.0 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 73f7a16891c..755165be089 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'https://rubygems.org' gem 'middleman', '~>3.3.10' gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax', '~> 2.0.0' -gem 'rouge', '~> 1.8.0' +gem 'rouge', '~> 1.9.0' gem 'redcarpet', '~> 3.2.2' gem 'rake', '~> 10.4.2' diff --git a/Gemfile.lock b/Gemfile.lock index c22d1d07291..ce2594750e3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -93,7 +93,7 @@ GEM ffi (>= 0.5.0) redcarpet (3.2.3) ref (1.0.5) - rouge (1.8.0) + rouge (1.9.0) sass (3.4.13) sprockets (2.12.3) hike (~> 1.2) @@ -129,5 +129,5 @@ DEPENDENCIES middleman-syntax (~> 2.0.0) rake (~> 10.4.2) redcarpet (~> 3.2.2) - rouge (~> 1.8.0) + rouge (~> 1.9.0) therubyracer (~> 0.12.1) From ab816e432a0c0356d111ce43d31148f68813e44c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sun, 31 May 2015 23:33:37 +0200 Subject: [PATCH 0047/1111] Use Autoprefixer for vendor prefixes --- Gemfile | 1 + Gemfile.lock | 7 ++++ config.rb | 6 +++ source/stylesheets/_variables.scss | 3 -- source/stylesheets/screen.css.scss | 62 ++++++++++++------------------ 5 files changed, 39 insertions(+), 40 deletions(-) diff --git a/Gemfile b/Gemfile index 755165be089..5d8c0211b36 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ source 'https://rubygems.org' gem 'middleman', '~>3.3.10' gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax', '~> 2.0.0' +gem 'middleman-autoprefixer', '~> 2.4.4' gem 'rouge', '~> 1.9.0' gem 'redcarpet', '~> 3.2.2' diff --git a/Gemfile.lock b/Gemfile.lock index ce2594750e3..d29c7d0046c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,6 +7,9 @@ GEM minitest (~> 5.1) thread_safe (~> 0.1) tzinfo (~> 1.1) + autoprefixer-rails (5.2.0) + execjs + json celluloid (0.16.0) timers (~> 4.0.0) chunky_png (1.3.4) @@ -54,6 +57,9 @@ GEM middleman-sprockets (>= 3.1.2) sass (>= 3.4.0, < 4.0) uglifier (~> 2.5) + middleman-autoprefixer (2.4.4) + autoprefixer-rails (~> 5.2.0) + middleman-core (>= 3.3.3) middleman-core (3.3.11) activesupport (~> 4.1.0) bundler (~> 1.1) @@ -125,6 +131,7 @@ PLATFORMS DEPENDENCIES middleman (~> 3.3.10) + middleman-autoprefixer (~> 2.4.4) middleman-gh-pages (~> 0.0.3) middleman-syntax (~> 2.0.0) rake (~> 10.4.2) diff --git a/config.rb b/config.rb index cd9a362f6ad..43bceaa5a43 100644 --- a/config.rb +++ b/config.rb @@ -18,6 +18,12 @@ # Activate the syntax highlighter activate :syntax +activate :autoprefixer do |config| + config.browsers = ['last 2 version', 'Firefox ESR'] + config.cascade = false + config.inline = true +end + # Github pages require relative links activate :relative_assets set :relative_links, true diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss index 4c9bae05ee1..0957678427b 100644 --- a/source/stylesheets/_variables.scss +++ b/source/stylesheets/_variables.scss @@ -100,13 +100,10 @@ $search-box-border-color: #666; // These settings are probably best left alone. %break-words { - -ms-word-break: break-all; word-break: break-all; /* Non standard for webkit */ word-break: break-word; --webkit-hyphens: auto; - -moz-hyphens: auto; hyphens: auto; } diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index d64b3239574..1cbac164554 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -49,25 +49,17 @@ html, body { } @mixin embossed-bg { - @include background( - linear-gradient(top, - rgba(#000, 0.2), - rgba(#000, 0) 8px), - linear-gradient(bottom, - rgba(#000, 0.2), - rgba(#000, 0) 8px), - linear-gradient(top, - rgba($nav-embossed-border-top, 1), - rgba($nav-embossed-border-top, 0) 1.5px), - linear-gradient(bottom, - rgba($nav-embossed-border-bottom, 1), - rgba($nav-embossed-border-bottom, 0) 1.5px), - $nav-subitem-bg - ); + background: + linear-gradient(to bottom,rgba(#000, 0.2), rgba(#000, 0) 8px), + linear-gradient(to top, rgba(#000, 0.2), rgba(#000, 0) 8px), + linear-gradient(to bottom, rgba($nav-embossed-border-top, 1), rgba($nav-embossed-border-top, 0) 1.5px), + linear-gradient(to top, rgba($nav-embossed-border-bottom, 1), rgba($nav-embossed-border-bottom, 0) 1.5px), + #262626; } .tocify-wrapper { - @include transition(left ease-in-out 0.3s); + transition: left 0.3s ease-in-out; + overflow-y: auto; overflow-x: hidden; position: fixed; @@ -102,7 +94,7 @@ html, body { border-width: 0 0 1px 0; border-color: $search-box-border-color; padding: 6px 0 6px 20px; - @include box-sizing(border-box); + box-sizing: border-box; margin: $nav-v-padding $nav-padding; width: $nav-width - 30; outline: none; @@ -125,13 +117,13 @@ html, body { .search-results { margin-top: 0; - @include box-sizing(border-box); + box-sizing: border-box; height: 0; overflow-y: auto; overflow-x: hidden; - @include transition-property(height margin); - @include transition-duration(180ms); - @include transition-timing-function(ease-in-out); + transition-property: height, margin; + transition-duration: 180ms; + transition-timing-function: ease-in-out; &.visible { height: 30%; margin-bottom: 1em; @@ -175,14 +167,14 @@ html, body { li { color: $nav-text; - @include transition-property('background'); - @include transition-timing-function('linear'); - @include transition-duration(230ms); + transition-property: background; + transition-timing-function: linear; + transition-duration: 230ms; } // This is the currently selected ToC entry .tocify-focus { - @include box-shadow(0px 1px 0px $nav-active-shadow); + box-shadow: 0px 1px 0px $nav-active-shadow; background-color: $nav-active-bg; color: $nav-active-text; } @@ -235,8 +227,8 @@ html, body { $side-pad: $main-padding / 2 - 8px; padding: $side-pad $side-pad $side-pad; background-color: rgba($main-bg, 0.7); - @include transform-origin(0, 0); - @include transform(rotate(-90deg) translate(-100%, 0)); + transform-origin: 0 0; + transform: rotate(-90deg) translate(-100%, 0); border-radius: 0 0 0 5px; } padding: 0 1.5em 5em 0; // increase touch size area @@ -255,7 +247,7 @@ html, body { vertical-align: bottom; } - @include transition(left ease-in-out 0.3s); + transition: left 0.3s ease-in-out; &:hover { opacity: 1; } &.open {left: $nav-width} @@ -346,7 +338,7 @@ html, body { &>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl { margin-right: $examples-width; padding: 0 $main-padding; - @include box-sizing(border-box); + box-sizing: border-box; display: block; @include text-shadow($main-embossed-text-shadow); @@ -371,9 +363,7 @@ html, body { margin-bottom: $h1-margin-bottom; margin-top: 2em; border-top: 1px solid #ddd; - @include background-image( - linear-gradient(top, #fff, #f9f9f9) - ); + background-image: linear-gradient(to bottom, #fff, #f9f9f9); } h1:first-child, div:first-child + h1 { @@ -389,9 +379,7 @@ html, body { border-top: 1px solid #ccc; padding-top: 1.2em; padding-bottom: 1.2em; - @include background-image( - linear-gradient(top, rgba(#fff,0.4), rgba(#fff, 0)) - ); + background-image: linear-gradient(to bottom, rgba(#fff, 0.4), rgba(#fff, 0)); } // h2s right after h1s should bump right up @@ -525,7 +513,7 @@ html, body { border-radius: 4px; border: 1px solid #F7E633; @include text-shadow(1px 1px 0 #666); - @include background(linear-gradient(bottom right, #F7E633 0%, #F1D32F 100%)); + background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%); } } @@ -546,7 +534,7 @@ html, body { float:right; clear:right; - @include box-sizing(border-box); + box-sizing: border-box; @include text-shadow(0px 1px 2px rgba(0,0,0,0.4)); @extend %right-col; From 384ffac2fd5138b95f315b4e50e07882066522b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Mon, 1 Jun 2015 00:29:57 +0200 Subject: [PATCH 0048/1111] Don't generate unnecessary JS files. Also exclude jquery.highlight from the nosearch version, as it's not needed there. --- source/javascripts/all.js | 6 ++++-- source/javascripts/all_nosearch.js | 7 +++---- source/javascripts/app/{lang.js => _lang.js} | 0 source/javascripts/app/{search.js => _search.js} | 2 ++ source/javascripts/app/{toc.js => _toc.js} | 2 ++ source/javascripts/lib/{energize.js => _energize.js} | 0 .../lib/{jquery.highlight.js => _jquery.highlight.js} | 0 .../lib/{jquery.tocify.js => _jquery.tocify.js} | 3 +-- source/javascripts/lib/{jquery_ui.js => _jquery_ui.js} | 0 source/javascripts/lib/{lunr.js => _lunr.js} | 0 10 files changed, 12 insertions(+), 8 deletions(-) rename source/javascripts/app/{lang.js => _lang.js} (100%) rename source/javascripts/app/{search.js => _search.js} (96%) rename source/javascripts/app/{toc.js => _toc.js} (94%) rename source/javascripts/lib/{energize.js => _energize.js} (100%) rename source/javascripts/lib/{jquery.highlight.js => _jquery.highlight.js} (100%) rename source/javascripts/lib/{jquery.tocify.js => _jquery.tocify.js} (99%) rename source/javascripts/lib/{jquery_ui.js => _jquery_ui.js} (100%) rename source/javascripts/lib/{lunr.js => _lunr.js} (100%) diff --git a/source/javascripts/all.js b/source/javascripts/all.js index 534eae93090..ffaa9b01307 100644 --- a/source/javascripts/all.js +++ b/source/javascripts/all.js @@ -1,2 +1,4 @@ -//= require_tree ./lib -//= require_tree ./app +//= require ./lib/_energize +//= require ./app/_lang +//= require ./app/_search +//= require ./app/_toc diff --git a/source/javascripts/all_nosearch.js b/source/javascripts/all_nosearch.js index 4610cabe62d..818bc4e5095 100644 --- a/source/javascripts/all_nosearch.js +++ b/source/javascripts/all_nosearch.js @@ -1,4 +1,3 @@ -//= require_tree ./lib -//= require_tree ./app -//= stub ./app/search.js -//= stub ./lib/lunr.js +//= require ./lib/_energize +//= require ./app/_lang +//= require ./app/_toc diff --git a/source/javascripts/app/lang.js b/source/javascripts/app/_lang.js similarity index 100% rename from source/javascripts/app/lang.js rename to source/javascripts/app/_lang.js diff --git a/source/javascripts/app/search.js b/source/javascripts/app/_search.js similarity index 96% rename from source/javascripts/app/search.js rename to source/javascripts/app/_search.js index 3c22f714262..550b1a30f61 100644 --- a/source/javascripts/app/search.js +++ b/source/javascripts/app/_search.js @@ -1,3 +1,5 @@ +//= require ../lib/_lunr +//= require ../lib/_jquery.highlight (function (global) { 'use strict'; diff --git a/source/javascripts/app/toc.js b/source/javascripts/app/_toc.js similarity index 94% rename from source/javascripts/app/toc.js rename to source/javascripts/app/_toc.js index c88b67f2b70..d84bf8e197a 100644 --- a/source/javascripts/app/toc.js +++ b/source/javascripts/app/_toc.js @@ -1,3 +1,5 @@ +//= require ../lib/_jquery_ui +//= require ../lib/_jquery.tocify (function (global) { 'use strict'; diff --git a/source/javascripts/lib/energize.js b/source/javascripts/lib/_energize.js similarity index 100% rename from source/javascripts/lib/energize.js rename to source/javascripts/lib/_energize.js diff --git a/source/javascripts/lib/jquery.highlight.js b/source/javascripts/lib/_jquery.highlight.js similarity index 100% rename from source/javascripts/lib/jquery.highlight.js rename to source/javascripts/lib/_jquery.highlight.js diff --git a/source/javascripts/lib/jquery.tocify.js b/source/javascripts/lib/_jquery.tocify.js similarity index 99% rename from source/javascripts/lib/jquery.tocify.js rename to source/javascripts/lib/_jquery.tocify.js index f791bf86246..91cf637913a 100644 --- a/source/javascripts/lib/jquery.tocify.js +++ b/source/javascripts/lib/_jquery.tocify.js @@ -1,4 +1,3 @@ -//= require ./jquery_ui /* jquery Tocify - v1.8.0 - 2013-09-16 * http://www.gregfranko.com/jquery.tocify.js/ * Copyright (c) 2013 Greg Franko; Licensed MIT @@ -1040,4 +1039,4 @@ }); -})); //end of plugin \ No newline at end of file +})); //end of plugin diff --git a/source/javascripts/lib/jquery_ui.js b/source/javascripts/lib/_jquery_ui.js similarity index 100% rename from source/javascripts/lib/jquery_ui.js rename to source/javascripts/lib/_jquery_ui.js diff --git a/source/javascripts/lib/lunr.js b/source/javascripts/lib/_lunr.js similarity index 100% rename from source/javascripts/lib/lunr.js rename to source/javascripts/lib/_lunr.js From d27f5c4b7d569cca6a205210ceeb467171d675ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sat, 21 Feb 2015 00:03:29 +0100 Subject: [PATCH 0049/1111] Remove unused icons from the font --- font-selection.json | 148 +++++++++++++++++++++++++++++ source/fonts/icomoon.eot | Bin 2780 -> 0 bytes source/fonts/icomoon.svg | 18 ---- source/fonts/icomoon.ttf | Bin 2616 -> 0 bytes source/fonts/icomoon.woff | Bin 2816 -> 0 bytes source/fonts/slate.eot | Bin 0 -> 1876 bytes source/fonts/slate.svg | 14 +++ source/fonts/slate.ttf | Bin 0 -> 1720 bytes source/fonts/slate.woff | Bin 0 -> 1796 bytes source/stylesheets/_icon-font.scss | 30 ++---- 10 files changed, 169 insertions(+), 41 deletions(-) create mode 100755 font-selection.json delete mode 100755 source/fonts/icomoon.eot delete mode 100755 source/fonts/icomoon.svg delete mode 100755 source/fonts/icomoon.ttf delete mode 100755 source/fonts/icomoon.woff create mode 100755 source/fonts/slate.eot create mode 100755 source/fonts/slate.svg create mode 100755 source/fonts/slate.ttf create mode 100755 source/fonts/slate.woff diff --git a/font-selection.json b/font-selection.json new file mode 100755 index 00000000000..5e78f5d8621 --- /dev/null +++ b/font-selection.json @@ -0,0 +1,148 @@ +{ + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M438.857 73.143q119.429 0 220.286 58.857t159.714 159.714 58.857 220.286-58.857 220.286-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857zM512 785.714v-108.571q0-8-5.143-13.429t-12.571-5.429h-109.714q-7.429 0-13.143 5.714t-5.714 13.143v108.571q0 7.429 5.714 13.143t13.143 5.714h109.714q7.429 0 12.571-5.429t5.143-13.429zM510.857 589.143l10.286-354.857q0-6.857-5.714-10.286-5.714-4.571-13.714-4.571h-125.714q-8 0-13.714 4.571-5.714 3.429-5.714 10.286l9.714 354.857q0 5.714 5.714 10t13.714 4.286h105.714q8 0 13.429-4.286t6-10z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "exclamation-circle" + ], + "defaultCode": 61546, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 100, + "order": 4, + "prevSize": 28, + "code": 58880, + "name": "exclamation-sign", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M585.143 786.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-54.857v-292.571q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h54.857v182.857h-54.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h256q8 0 13.143-5.143t5.143-13.143zM512 274.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-109.714q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "info-circle" + ], + "defaultCode": 61530, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 85, + "order": 3, + "name": "info-sign", + "prevSize": 28, + "code": 58882 + }, + "setIdx": 0, + "iconIdx": 2 + }, + { + "icon": { + "paths": [ + "M733.714 419.429q0-16-10.286-26.286l-52-51.429q-10.857-10.857-25.714-10.857t-25.714 10.857l-233.143 232.571-129.143-129.143q-10.857-10.857-25.714-10.857t-25.714 10.857l-52 51.429q-10.286 10.286-10.286 26.286 0 15.429 10.286 25.714l206.857 206.857q10.857 10.857 25.714 10.857 15.429 0 26.286-10.857l310.286-310.286q10.286-10.286 10.286-25.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "check-circle" + ], + "defaultCode": 61528, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 83, + "order": 9, + "prevSize": 28, + "code": 58886, + "name": "ok-sign" + }, + "setIdx": 0, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 29.714-21.714 51.429t-51.429 21.714q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z" + ], + "width": 951, + "attrs": [], + "isMulticolor": false, + "tags": [ + "search" + ], + "defaultCode": 61442, + "grid": 14 + }, + "attrs": [], + "properties": { + "id": 2, + "order": 1, + "prevSize": 28, + "code": 58887, + "name": "icon-search" + }, + "setIdx": 0, + "iconIdx": 7 + } + ], + "height": 1024, + "metadata": { + "name": "slate", + "license": "SIL OFL 1.1" + }, + "preferences": { + "showGlyphs": true, + "showQuickUse": true, + "showQuickUse2": true, + "showSVGs": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "slate", + "majorVersion": 1, + "minorVersion": 0, + "description": "Based on FontAwesome", + "license": "SIL OFL 1.1" + }, + "metrics": { + "emSize": 1024, + "baseline": 6.25, + "whitespace": 50 + }, + "resetPoint": 58880, + "showSelector": false, + "selector": "class", + "classSelector": ".icon", + "showMetrics": false, + "showMetadata": true, + "showVersion": true, + "ie7": false + }, + "imagePref": { + "prefix": "icon-", + "png": true, + "useClassSelector": true, + "color": 4473924, + "bgColor": 16777215 + }, + "historySize": 100, + "showCodes": true, + "gridSize": 16, + "showLiga": false + } +} diff --git a/source/fonts/icomoon.eot b/source/fonts/icomoon.eot deleted file mode 100755 index 212835a5243aabdf5b8a4d029f41b6471ac38ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2780 zcmb7GOKg)z5T5xTyT9#VC&aG=+lg#!Bb7Sf-w&cZh$juMw=f1@e6zY-yV!UfISWx3^2#b0=6(JX<3)`3udZ+1 z2zdcI%Fdy+`clmom**k>3gglB+Ko+Ehiyl#KfY00Up^MUdmrNmSYvXtesv3eqWR-W zPNqS8i)_di`4TuMoA^16&}T}oqcPm>ZgWJBBtLB6#}8o*W;ztqn7oZsD~7SIl7`8m zBfx%gAj9%B{zx|dZZyCn(B#qF_-)i`&hP{PObo4%XGQZ+6xB&@$@aRh<|$9Ie2;f1 zPOsA&M8m~cG!~77rH~?%&gb&Ea;aLWR@~uoDW7|d(^4ck9E(nIv05qTtGmodti{}! zc8keWDp_==r`%#HnM@VksjO*ORnu!#%P?7(rghXZO&hqZ7(2cy88 z=s=|c6~nYH+%XL_^A1M%lec%;|1d40NGaRTP32`imx1qN9ChJ1;z67`%C3OCSe0D; z%CUc^L8pgNC|1={P5>F^!r)*mK5{&3iJW0sX2|Cc1^oeG2ls|TO%);hKHGL28}f~w z(&%snd z51ACBJ-*&QPLx8kjt|mtkfjNR!+<%N3vu3qA`%{B>A`5Ma+Fc%fR%F9+hvIg*)8^1 z#XAH%Z8S@Cq@@0G$Vw;B%a4jiLAtWJ( zJEQ1~PJO4^dlkkvN1xbyM;!m{`;PV*=#{><{rew2jgpH`tE!w#T2+pMx@O#>s+N}@ zg1SAbD&pFlz?np)tlH8Mx9$0U+2jI>Nrmq>M368I|fR7dW3y7mRXg7NQhXf<}g)ZreV;&k76; zh*assfdeN>DTVi@$C7*4u!OxLhK7cu5bVeozwRq!!r@F|-!4A5VhhXQJ;|~3-rcDR zi-Dnl1-tgPbXW)p6Jo1#qB79B2jf58zWY&V`Z)zu5fJ^d_Q!l1H>1Sm?A3@8;2u-= zsV*AO&pK{9B_|rtNJDk)@x7OKy(*OaxOY?Z2?zO8eqwxJd~G~6Ppir319VBh30hu& z*=j-hw&?@osibEp_kwh?$u~joZ_*a%GfmpYLn_#$1xYG4X+Isn6AZ5b%Lk6KscCIf z)7qw{wM|WHo0=AwJK3D8ZFWD-`aj~jbS^K|*X#9-o;P9ld$4N)f?mdpP`wUov;};T Y#_0lW11@;)$~Rl@%4SYmiR>l*0j~m3Z~y=R diff --git a/source/fonts/icomoon.svg b/source/fonts/icomoon.svg deleted file mode 100755 index 24493587d38..00000000000 --- a/source/fonts/icomoon.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/fonts/icomoon.ttf b/source/fonts/icomoon.ttf deleted file mode 100755 index 360b3d751620cc106382cda4c2d548656db343f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2616 zcmb7GO>7%Q6n<}iX4ZCUCyoD-+D>FQb|s42?%H0W{4_%SNvZ%+p$OCpaMLuYl*AED z)#idK#E}EyS`G+t=1^7Y1q2e;N^t5W94aC8fJ)UvdxM&9b~dpS+#=T5_cw38dGF1e zoe&dIjBb)iN8ft;i0c&p`T>^j@qVQjUPV%8eqB{lul&eRVyYz)o79|dJQ~E4#u!NjXsp^zuRrt2r>mS zw|^hD!WqE;2ou9A5uj)ru>J91$fX3`Vv`i*+U-!`T)JI1X^&&?MKdDokq@Z3T^UvRyNG1IVo zGkAQ{JRXgJd8%Md`krZW|(vR{h930 z$uUcm4a+hUk!T_wjR`xxKamJsgos9L+i`4+uk9&LP_XL?r~~`cP%7OQn-U^tSc6hJ zG8&aqI0OBIG3_Uuh(PsVl(FbOe^2Ft8g|#GOcV6ZPJQ-PDW!_jwXx=22esQTF2@+Q z=m28BphL^$G{1?>3pTz}sk=Q>ufqRJ?WDx>fU0VhNf|o&_1<}+6~aC~OeZ1MjxYiS zEz5F(D*+X$j7A4-)cs(WB|2og*)xsc5b&&BtJ(Ij?MPAcgmfTwEM84p zTD>y*Q3|haMTE>sX6d?$W~GQ&^$>?yA%OyYMjewJb50$UsbjTVfw_>Y9h=f$3*Fy3 zFSRWdscBj5m<%Y+o}Wnt6n#6z8P&ZyuZrm8<>P3h?fEv4z;B+826d z^jJAFpAphxX3UsHN>-#4v5?y=Kw!0`ID?dg9PG}bJ3IBA>g-h#-yD5nD_wc~ckEj_ zX0VsW+KKOf#57DEKCP;AN=4NW6R*h0IZlsb0!*iz%UlfcH zE*K4enyXwHD^`tqZ5l%bxWtVTKiRY+(TEir=o5w7sY8cO)e4I5FOKB*v0({&Nem1O zNFmsf&wo8oEhUqs>Va*3c*z!)!Ta(f#r@k;6&HO2F$=i%rgT^c2?(*#Jy8Md+=JPl zZ{7JYG5L&QstJgGS@~nO!^13bIR`zW25^t5`&2g#&-li8VxCo#@%GVW{XfA@6fo{Qar!Qdfhi8FzG)4}r$gCB?!@JlpG V7ikl8E&zTbTs+8Xr-;3Te*iBhKi>cV diff --git a/source/fonts/icomoon.woff b/source/fonts/icomoon.woff deleted file mode 100755 index 9a213b112669b937374d2cd9030609d6041169ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2816 zcmcImYiv|S6rS7N+fGYqLA!*9nxbfoCbm?HV9=Oaiv~zZm?VEYdGMnOxroO^Rm?S9y@IrKCwXxLr53$_KYtrnEL8raqVBW$liUm?hM zLAut^)ZPi(KIp}Q@+HQaYC8p940@(ZxtmyXZ4>;;KFXN1R#5rkuP?L&_qQXai&#_W zk`FV??`M)E@y5DfQ!v=fqzu@ek3W>`3a9)m3*vlsCF5z|3;tz(M>aCoWPWlpn&qnI3N84Zo|&f~okbb?L{PaHWu zGJb3nY-A$(74eBgJU~CnWa@@yfFdgKYLYe5bPYq-NaeIeCQOKF5b?7ln`A^H5yOZW zWODslV8E%6$=$CR*g||G$tnQ_5Wvv5oxlP;f?2H6P2xY0jJ;`)2uEa5XI_BL3LI05 z-0}rD@I}{k2%M^AQX?9GJedFbGVN3cC>B1{^KtK?t`80j9T+@dy+=E!A=I{0RU(R| z@GpZh(BXp!!Z3$F8X6j~2dyD@9 zIrX^t5H7l*qo>3lsg%4_pYV8 zy>i?u-R(Ufa(G(g@U&M8xaZchg~)j#U1H=88kVLN!>YeDVvu~@PIA|8+j`edkBoM&8%*e0K<^b86t(v@Ma&l5OO~WSq zG)uL3>rq*?!bX_Fq-cu5YqoAZBcn-NOITAC-r6QBimqTmI1;v0K3P*!BP*&dwuIe& z8f}wJ1qT4sGAxUqIWxIcwiL^?*oJBG(W5fDz#^MFzH|3Bx<8%10DU2ot=o#}InK+7 zreP5Q!iG?IJ;`o>s){Hn%&DwQSVVw|szKniM<(RKQoT_4G*Owb2vAjo!Y4>}12j{i z(DZc5Vp(Pc(eo>Z?|*Cwbmd(gcd)=K#QpIq?sLutXaLDIdF$wGuejZl$WHJLKh3qF zf4rpAK_pYb-C-qF1tq`8;_l&Z)v9V z(sEi(rKMoYFO|-~bTT$RruW!b#;+&l%dyayemE98tdE6aJTc|)Ksi-S(Rn&QH3ddf zRa8#pRaNE0^WxEhIR58z-KT^PSD4LY+_)R1dfb=mQ{Nf3g!M!J_mIRhV9t1nvCCP~ z#Uy^xMfdi`y+1n&T`2<`H##c-7qbPpG1uUmgI7ideiAFZoR$1LnS_l&X09wHe_QHL z?Qkc+Bqm{1zKa6&_chy!-pXG$!{&)282fqOAL31t`X;YRH{g?a%XrgbKNG&<_J$eq zjWm+03YI%7K@iSLr|wK1%BJ+LJob4CPhxqg?c%6BwmxO|L0*xP{gAh$WSK33=4CDu zuZfbBoWq`Ebs`7;Y*+-QCwrKl>|uJchv~^4rYC1&@7mN}53>=tLDmEcvS#)M+s)e8 ze%9z}g={5z2Cuj|YtqlKIYw56jeA%J+sA4FFn4Y}=9*pLTGo#5E>_5PvUkB>a}R$# Lb+{W9*qz5e&1UyY diff --git a/source/fonts/slate.eot b/source/fonts/slate.eot new file mode 100755 index 0000000000000000000000000000000000000000..13c4839a1975d4c92d66753d75553f922743c6ef GIT binary patch literal 1876 zcmaJ?&2Jl35TEDWeRg&sP8)xqh$Kr)Yzaiu#`dnNaHtS!Xx9i53LF}#nAmmP`Xfq= z;s{Zte*qCEK;i~h4hYFPaA-x4sD#vVrBXQ{MIaD@1Ke8kn|8tnQ^fdI9N^x@? zd<=RUJW{D`U;b-v<0kYSA}zO8E|&DaCqF0BzlPme0}$TUZbAP8`m<~GR{K~75*dg= zcCEQu4DE@ZpmS=+>&5muJwb0nf0^x#V!izR7X1vpggLV7&CM3_1j&!tPMS_)mkgrN zC!rsJe5kniow8zt{RT+zltXle=pd}!=-!|+8X9a|iyqm&z#GOh#?Z4hMmoI$K1va6 zrUYgm&_U=R+`ZrJ0!LQ9E`42ef0@uHvC8U zo}w4%B?O&MCX$JGEG)w^HIqqa()pb0xK4IFpUb457c*fwDPqaQf|z%md}h1{#>ac0 zD>_@{@&c$_-fEYWRBE3yj7U8q4MTz%hA^cOxdwei%19MlXpM(P_)+e=@Rm}B>tXap zwoqO*DogaoKF+^`!zvX>{f10 zq*F6dk@0&Ok4=k2cHR|EKKaOn+_Q3KG-~~J-9n!;&D+d{W9=SQ|IqlDm9?y2uUl{( zi(0o$Q@Cby<g+B7U zE7gMM6{=S}Ps}C~lhg72%h#4X&vB-0d)je4Z)w>(?>M%-xE~jH;l@L}Lcyy(n4O9z z65lS`w&R>XbW_^$2bKN!lz(S%N3N!tcP>R={D&-^3rjyfS-aWi!AkH>sk+00G5&qW zC1%n(1Gmpd;5$IPUF_Lw@K%&WbbxEX?LgKcF9x!K$J`8LiMQ^#KsG5yOZ=|rBS1K&l2uG4tC&hwF_o-hDp_Le zTrgI}?0+pse + + +Generated by IcoMoon + + + + + + + + + + diff --git a/source/fonts/slate.ttf b/source/fonts/slate.ttf new file mode 100755 index 0000000000000000000000000000000000000000..ace9a46a7e1ed6b6ab3de2f30ef3e27c572f88d3 GIT binary patch literal 1720 zcmaJ>-D_KA7=PaL@t*V?ZMro%kz(6pV-rwZyCyk@Q7?wb>UJv9`gO6wj7^qiCTUqB zO%X@;7dX69!8^V6LWJzXiw!F%45qgVdLa}=5xvm6E&iVKo-9$jJ@CHI_viaTf`}a2 zC!H2wcyVDVd0amU$>&(FZ8pn0bm7yth{U7dH)`ef4)6r{E^wmO*t_`0^~*QG?-S|8 zt!lYq{5ky*k?|Sy{uTt*p8hrX-@re<)$DYS^+1t{800m!H_O^}@g4X@@W-3w?hZXf zuY!M;^{sNV`qeJ|2)=?Gg`Mqo2XzAEd#oqjAaRXMBJF+c79{T|EPkbe7-PE;5S;Q~ zaGL1Q(r@%{&}khDI-bPX!~GUGz-0@x9Aaiik?BxrHq?#(PnWnI%nYaReOv*$ZSm>?)ctla|1hAG;T1^YPnfOv{N&_J8ekcvoG^Cm?MLpzb znO-8ASEU{s)D{<<&JKz%JjTWAM|EWWzjHMajT;ECdZ?bsKw&|^tZONrkvOuIkI%De zUYTtG_26}0jYK0>4*B1QgBuPLXU?}t^*TiboK|r`R>P0_HD+(cdi{Ze{FKYDLBs0R~?v6B%Rx~Edo2aasT@IJ-vtfG(iE^ z$Awv_E5l{^C4s84a|;3+->t#z!u^V-9Nj!@+Ph(RslFP9tMyA^DCS*vdNzG<@yc2l z`u?ov&H8>AuC0gXeBbj{4$|U#n6XQ^x*FE+&d;P>_lp(J^Zj%8%oMl&cI_ZN6TKO{ zkvFp2-&{yO{TDd~50<`txN&oc<4*8TskuV~pXj~g5i{t$k=GYVU^@bQTx>a5uvcK? zADE$i`dge4A3((KH9;?{zv*7K*f>Jt^humckR5yQeHf=xv0R7Ti)jP&N=%#Ng5wPM z_VCv|5z{smX^sCCV+<0Gsc02b(JH2*RZK;zn2MJ0U5I^E%r-TsOdYDyD_EDQO?BF) z7OFc*Cuk9TtZz5Uo$8RKb(q)a%}C8|gD__z_YMNoV9|<#sst6tUZ*|mXK52w&tq|_ J6Wq-M;U6NW`v(93 literal 0 HcmV?d00001 diff --git a/source/fonts/slate.woff b/source/fonts/slate.woff new file mode 100755 index 0000000000000000000000000000000000000000..1e72e0ee0018119d7c814c2097cc60c0bcd05d84 GIT binary patch literal 1796 zcmaJ>&2Jl35TCanZ=GF;-Nqj%Qj#SmwgjS~vAs(b4i$%lc7v*fuR|jhlemtH?Nqf< z5&;$c3y8RZ#0{p83^QtGf$~^ZU#vdPL3b z4fcBr_DN>rKz!G#?&4f~pM4ZRM6a}~ts1aTadwIM%N_dh>UO7#K7YRFXF@YA68l_? z@xFm7>0K?wZ&VUvut!OxMlIIQ5*<0_&Hha~Yl49Y@PK@!7+CqFG*;eClSR)#j$=Xw zNnrjF9T`VX|4zRT99<||DqHk_nzSa(NzO5voBad{L?lOWoE4r?ZbRP(V_X@TZL>{} z(3A8mk}l-3xojrwNJr*pi-lsLQVxSKC{0w##ljO}){#>poy#tYg)pcTCk9|L<3To?f*omEO$b9ODUa}gVj!a zAvUB1l6OCpmTg;7PgnO)phbF-Xik@UVo+OLa3((}zVs*;Zywi?{r}GOL=0{q1ou!q ztD%;HAbGE?Z5HC#RzAMSTXWiN9ioS*i+Usm@#fI}eK@$`F!8DQHtAj`iEnm!UKH}P zNl{d*%%o>TwzLq6ppv_9BR_a$H<|Q)z2RXkyY6k4BJlQ)o4+xU@=Bif%MA~%sib$? zbw%hV*Y96nzi0MvpHdWZeO#D>x^i4rP!XsqKRYk5@ZB2RF5E9QWp(qg81F^VmBvaG ztu(Ggk(kS7r)DyTm#?ozQ4q}d{!9==(dt@sJ_vk&`7k5ChZ~1PD=Sgs?%Z@HoBe#* z_k-a4JvVKwyWWZ=q2@1#9uk~9EfrHBtA=!8%MC` zIGu@c6SyDi7WCy Date: Sat, 21 Feb 2015 00:22:58 +0100 Subject: [PATCH 0050/1111] Add WOFF2 version of the icon font --- source/fonts/slate.woff2 | Bin 0 -> 796 bytes source/stylesheets/_icon-font.scss | 1 + 2 files changed, 1 insertion(+) create mode 100755 source/fonts/slate.woff2 diff --git a/source/fonts/slate.woff2 b/source/fonts/slate.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..7c585a72737539240f1ec97a725eb6d7347d2bc5 GIT binary patch literal 796 zcmV+%1LOR6Pew8T0RR9100SHV3jhEB00yi800Pbc0RR9100000000000000000000 z00006U;tbZ2nvQMg+Bo{0we<<3labXAO(Um2Ot}71;`$!%XmzA7Qq8=XT3iY%ud$O zWX0S9ZjY*kHtiXmTBy7_umPvrP6Jzi{`Zd`tTPV^?c*5BT6)|dWhhwm@ z2-w*rE$c_UfviKEL=Vy>={0bo+(i5#P1q3$6VB``hVMrCzU@B6vbqKcPy}m-BtQn- zkylU>byNe6DE>18g5d9bm%bZqa|qF=7&3(|U!AY)%Yg-vOsqKIq$w0D$r*3}ks4=+ z>U6?w2xMd=B$;zQ9v)F1K7KwfQ9|)<9nl&i?6-rchs{I8LC1eK^@#(|^QwB-{VeQz zoHLn@cwG?Yo(X!F(Q8iBOqSNs${h}C*?qJYLuZAnVXqx{ww|}Ux0`ca^V#hz?c7{r z7ldYbmk!M1m3G+IYC6(!VcCzqp&pJkZ#1@kw2W<^EJMqOM;^&dq6ELC*|pK!(cC0< zbZtF%BzLsuTw5O*+eg;dX0a+hcfI=gj8a~qWYJoMamHAo)!Qq|6&~9S8`{d0T?L&% z@$R=P6H0rTp6V+-Dlb>EB67JEMQ>kk%`y}{hvBC(RNEw)*%|U|4>SL+B=3rE@y*rw zR_bLZr&~XN?C;+yx2IilcDnrb?M)}An;DsTe@^rq$9L-UWNqY_oTyWyYisN3CMIh; z*C)b12exYgK^2c4S}J#2YJ+00rUlj%+LqQ7E%lldEc`K|1Bky)iLkwF{Wltvj!{A+PBEzhE3BX) zFBgqmj@&z?N1*=OK?z54T7is8FiA(N66oe`X+cKl>`n&&000000HC;3 zk^ug-#56-JW5JAtMV6Rgj#+|9A(7;@^`+^dWy@Alt7D86w|;R>QMs>d+47HJVfKhH aD;vc&%m&dlj4($-ipx}q&#}A+00017%3vV? literal 0 HcmV?d00001 diff --git a/source/stylesheets/_icon-font.scss b/source/stylesheets/_icon-font.scss index d963b537f28..b5994839881 100644 --- a/source/stylesheets/_icon-font.scss +++ b/source/stylesheets/_icon-font.scss @@ -2,6 +2,7 @@ font-family: 'slate'; src:font-url('slate.eot?-syv14m'); src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'), + font-url('slate.woff2?-syv14m') format('woff2'), font-url('slate.woff?-syv14m') format('woff'), font-url('slate.ttf?-syv14m') format('truetype'), font-url('slate.svg?-syv14m#slate') format('svg'); From 402f931fc90939b0440fb73a1e92a492098e888e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Mon, 1 Jun 2015 23:27:03 +0200 Subject: [PATCH 0051/1111] Fix minor SCSS issues introduced in ab816e432a0c0356d111ce43d31148f68813e44c. --- source/stylesheets/screen.css.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index 1cbac164554..e7f87015d09 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -50,11 +50,11 @@ html, body { @mixin embossed-bg { background: - linear-gradient(to bottom,rgba(#000, 0.2), rgba(#000, 0) 8px), + linear-gradient(to bottom, rgba(#000, 0.2), rgba(#000, 0) 8px), linear-gradient(to top, rgba(#000, 0.2), rgba(#000, 0) 8px), linear-gradient(to bottom, rgba($nav-embossed-border-top, 1), rgba($nav-embossed-border-top, 0) 1.5px), linear-gradient(to top, rgba($nav-embossed-border-bottom, 1), rgba($nav-embossed-border-bottom, 0) 1.5px), - #262626; + $nav-subitem-bg; } .tocify-wrapper { From a38011b4a53b69bb381fb908cbda30d99a4aa11b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Tue, 2 Jun 2015 22:53:41 +0200 Subject: [PATCH 0052/1111] Remove some unused JS. --- source/javascripts/app/_lang.js | 3 +-- source/javascripts/app/_search.js | 11 ++++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/source/javascripts/app/_lang.js b/source/javascripts/app/_lang.js index 2683ef356db..c3b48edbdb4 100644 --- a/source/javascripts/app/_lang.js +++ b/source/javascripts/app/_lang.js @@ -54,7 +54,6 @@ under the License. } function setupLanguages(l) { - var currentLanguage = l[0]; var defaultLanguage = localStorage.getItem("language"); languages = l; @@ -81,7 +80,7 @@ under the License. activateLanguage(language); return false; }); - window.onpopstate = function(event) { + window.onpopstate = function() { activateLanguage(window.location.search.substr(1)); }; }); diff --git a/source/javascripts/app/_search.js b/source/javascripts/app/_search.js index 550b1a30f61..91f38a04edf 100644 --- a/source/javascripts/app/_search.js +++ b/source/javascripts/app/_search.js @@ -1,10 +1,9 @@ //= require ../lib/_lunr //= require ../lib/_jquery.highlight -(function (global) { +(function () { 'use strict'; - var $global = $(global); - var content, darkBox, searchResults; + var content, searchResults; var highlightOpts = { element: 'span', className: 'search-highlight' }; var index = new lunr.Index(); @@ -31,7 +30,6 @@ function bind() { content = $('.content'); - darkBox = $('.dark-box'); searchResults = $('.search-results'); $('#input-search').on('keyup', search); @@ -58,7 +56,7 @@ highlight.call(this); } else { searchResults.html('
  • '); - $('.search-results li').text('No Results Found for "' + this.value + '"'); + $('.search-results li').text('No Results Found for "' + this.value + '"'); } } else { unhighlight(); @@ -73,5 +71,4 @@ function unhighlight() { content.unhighlight(highlightOpts); } - -})(window); +})(); From 48c514abc75164b2079d00b8eadb344279d2a4a7 Mon Sep 17 00:00:00 2001 From: Akil Burgess Date: Wed, 10 Jun 2015 22:48:22 +0100 Subject: [PATCH 0053/1111] Update README with link to viagogo API docs --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 21ec87edac2..a43db7c2b2a 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ Examples of Slate in the Wild * [CardPay API](https://developers.cardpay.com/) * [IBM Cloudant](https://docs-testb.cloudant.com/content-review/_design/couchapp/index.html) * [Bitrix basis components](http://bbc.bitrix.expert/) +* [viagogo API Documentation](http://developer.viagogo.net/) (Feel free to add your site to this list in a pull request!) From 685b1554e99f302ca2f62f8938a467da0ce583ea Mon Sep 17 00:00:00 2001 From: Rezan Achmad Date: Tue, 16 Jun 2015 14:47:17 +0700 Subject: [PATCH 0054/1111] Update README.md with link to Fidor Bank --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a43db7c2b2a..76fefd5e3b7 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ Examples of Slate in the Wild * [IBM Cloudant](https://docs-testb.cloudant.com/content-review/_design/couchapp/index.html) * [Bitrix basis components](http://bbc.bitrix.expert/) * [viagogo API Documentation](http://developer.viagogo.net/) +* [Fidor Bank API Documentation](http://docs.fidor.de/) (Feel free to add your site to this list in a pull request!) From 1fe3ce6396a36650c20713f33fd8dc88a27ee353 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Fri, 19 Jun 2015 23:33:54 -0400 Subject: [PATCH 0055/1111] Update lord.io link to https --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 21ec87edac2..582f88b2c2d 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ Just [submit a issue](https://github.com/tripit/slate/issues) to the Slate Githu Contributors -------------------- -Slate was built by [Robert Lord](http://lord.io) while at [TripIt](http://tripit.com). +Slate was built by [Robert Lord](https://lord.io) while at [TripIt](http://tripit.com). Thanks to the following people who have submitted major pull requests: From be57777a3de67cd0da83b663de82b9a6276e6ac1 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sat, 20 Jun 2015 00:05:46 -0400 Subject: [PATCH 0056/1111] Add chinese fonts, thanks to @JayMiao --- source/stylesheets/_variables.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss index 0957678427b..5fe64b1f302 100644 --- a/source/stylesheets/_variables.scss +++ b/source/stylesheets/_variables.scss @@ -68,7 +68,7 @@ $phone-width: $tablet-width - $nav-width; // min width before reverting to mobil // FONTS //////////////////// %default-font { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-family: "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif; font-size: 13px; } From 872550d0b7aa0fce48ec5c3303e5a46b11267e60 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sat, 20 Jun 2015 00:48:56 -0400 Subject: [PATCH 0057/1111] Update h3 fonts to work better for chinese, fixes #214 --- source/stylesheets/screen.css.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index e7f87015d09..e4b3ef82b22 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -391,10 +391,9 @@ html, body { h3, h4, h5, h6 { @extend %header-font; - font-size: 12px; + font-size: 15px; margin-top: 2.5em; margin-bottom: 0.8em; - text-transform: uppercase; } h4, h5, h6 { From bb24528f851fdcb7db7016baa3a376926817dbf1 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sat, 20 Jun 2015 01:04:02 -0400 Subject: [PATCH 0058/1111] Update gems --- Gemfile | 2 +- Gemfile.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Gemfile b/Gemfile index 5d8c0211b36..3a2a2e01a82 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax', '~> 2.0.0' gem 'middleman-autoprefixer', '~> 2.4.4' gem 'rouge', '~> 1.9.0' -gem 'redcarpet', '~> 3.2.2' +gem 'redcarpet', '~> 3.3.1' gem 'rake', '~> 10.4.2' gem 'therubyracer', '~> 0.12.1', platforms: :ruby diff --git a/Gemfile.lock b/Gemfile.lock index d29c7d0046c..f9978492816 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,13 +1,13 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.1.10) + activesupport (4.1.11) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.1) tzinfo (~> 1.1) - autoprefixer-rails (5.2.0) + autoprefixer-rails (5.2.0.1) execjs json celluloid (0.16.0) @@ -39,28 +39,28 @@ GEM hooks (0.4.0) uber (~> 0.0.4) i18n (0.7.0) - json (1.8.2) + json (1.8.3) kramdown (1.7.0) libv8 (3.16.14.7) - listen (2.10.0) + listen (2.10.1) celluloid (~> 0.16.0) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) - middleman (3.3.11) + middleman (3.3.12) coffee-script (~> 2.2) compass (>= 1.0.0, < 2.0.0) compass-import-once (= 1.0.5) execjs (~> 2.0) haml (>= 4.0.5) kramdown (~> 1.2) - middleman-core (= 3.3.11) + middleman-core (= 3.3.12) middleman-sprockets (>= 3.1.2) sass (>= 3.4.0, < 4.0) uglifier (~> 2.5) middleman-autoprefixer (2.4.4) autoprefixer-rails (~> 5.2.0) middleman-core (>= 3.3.3) - middleman-core (3.3.11) + middleman-core (3.3.12) activesupport (~> 4.1.0) bundler (~> 1.1) erubis @@ -82,25 +82,25 @@ GEM middleman-syntax (2.0.0) middleman-core (~> 3.2) rouge (~> 1.0) - minitest (5.6.1) - multi_json (1.11.0) + minitest (5.7.0) + multi_json (1.11.1) padrino-helpers (0.12.5) i18n (~> 0.6, >= 0.6.7) padrino-support (= 0.12.5) tilt (~> 1.4.1) padrino-support (0.12.5) activesupport (>= 3.1) - rack (1.6.0) + rack (1.6.4) rack-test (0.6.3) rack (>= 1.0) rake (10.4.2) - rb-fsevent (0.9.4) + rb-fsevent (0.9.5) rb-inotify (0.9.5) ffi (>= 0.5.0) - redcarpet (3.2.3) + redcarpet (3.3.1) ref (1.0.5) rouge (1.9.0) - sass (3.4.13) + sass (3.4.14) sprockets (2.12.3) hike (~> 1.2) multi_json (~> 1.0) @@ -135,6 +135,6 @@ DEPENDENCIES middleman-gh-pages (~> 0.0.3) middleman-syntax (~> 2.0.0) rake (~> 10.4.2) - redcarpet (~> 3.2.2) + redcarpet (~> 3.3.1) rouge (~> 1.9.0) therubyracer (~> 0.12.1) From d14fd0f70ed984c4c97e07215e5c9bdc344de4f1 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sat, 20 Jun 2015 01:49:25 -0400 Subject: [PATCH 0059/1111] Update language tabs to not disturb existing query strings, fixes #57 --- source/javascripts/app/_lang.js | 88 +++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 5 deletions(-) diff --git a/source/javascripts/app/_lang.js b/source/javascripts/app/_lang.js index c3b48edbdb4..79d3903d2e4 100644 --- a/source/javascripts/app/_lang.js +++ b/source/javascripts/app/_lang.js @@ -40,6 +40,83 @@ under the License. } } + // parseURL and stringifyURL are from https://github.com/sindresorhus/query-string + // MIT licensed + // https://github.com/sindresorhus/query-string/blob/7bee64c16f2da1a326579e96977b9227bf6da9e6/license + function parseURL(str) { + if (typeof str !== 'string') { + return {}; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return {}; + } + + return str.split('&').reduce(function (ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + var key = parts[0]; + var val = parts[1]; + + key = decodeURIComponent(key); + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + + return ret; + }, {}); + }; + + function stringifyURL(obj) { + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (Array.isArray(val)) { + return val.sort().map(function (val2) { + return encodeURIComponent(key) + '=' + encodeURIComponent(val2); + }).join('&'); + } + + return encodeURIComponent(key) + '=' + encodeURIComponent(val); + }).join('&') : ''; + }; + + // gets the language set in the query string + function getLanguageFromQueryString() { + if (location.search.length >= 1) { + var language = parseURL(location.search).language + if (language) { + return language; + } else if (jQuery.inArray(location.search.substr(1), languages) != -1) { + return location.search.substr(1); + } + } + + return false; + } + + // returns a new query string with the new language in it + function generateNewQueryString(language) { + if (location.search.length >= 1) { + var url = parseURL(location.search); + if (url.language) { + url.language = language; + return stringifyURL(url); + } else { + return language + } + } + } + // if a button is clicked, add the state to the history function pushURL(language) { if (!history) { return; } @@ -47,7 +124,7 @@ under the License. if (hash) { hash = hash.replace(/^#+/, ''); } - history.pushState({}, '', '?' + language + '#' + hash); + history.pushState({}, '', '?' + generateNewQueryString(language) + '#' + hash); // save language as next default localStorage.setItem("language", language); @@ -58,11 +135,12 @@ under the License. languages = l; - if ((location.search.substr(1) !== "") && (jQuery.inArray(location.search.substr(1), languages)) != -1) { + var presetLanguage = getLanguageFromQueryString(); + if (presetLanguage) { // the language is in the URL, so use that language! - activateLanguage(location.search.substr(1)); + activateLanguage(presetLanguage); - localStorage.setItem("language", location.search.substr(1)); + localStorage.setItem("language", presetLanguage); } else if ((defaultLanguage !== null) && (jQuery.inArray(defaultLanguage, languages) != -1)) { // the language was the last selected one saved in localstorage, so use that language! activateLanguage(defaultLanguage); @@ -81,7 +159,7 @@ under the License. return false; }); window.onpopstate = function() { - activateLanguage(window.location.search.substr(1)); + activateLanguage(getLanguageFromQueryString()); }; }); })(window); From fd5cba00f0fc064d80dee75dc1630b02a7bc38b8 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sat, 20 Jun 2015 01:53:20 -0400 Subject: [PATCH 0060/1111] Fix small bug with new language tabs --- source/javascripts/app/_lang.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/source/javascripts/app/_lang.js b/source/javascripts/app/_lang.js index 79d3903d2e4..1a124bb68ae 100644 --- a/source/javascripts/app/_lang.js +++ b/source/javascripts/app/_lang.js @@ -106,15 +106,12 @@ under the License. // returns a new query string with the new language in it function generateNewQueryString(language) { - if (location.search.length >= 1) { - var url = parseURL(location.search); - if (url.language) { - url.language = language; - return stringifyURL(url); - } else { - return language - } + var url = parseURL(location.search); + if (url.language) { + url.language = language; + return stringifyURL(url); } + return language; } // if a button is clicked, add the state to the history From 415dcf2c90d380011be9cf1ec5cc500574d64d46 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sat, 20 Jun 2015 01:54:06 -0400 Subject: [PATCH 0061/1111] Add changes to log from v1.2 --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8adca156616..59ee6a441e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## Version 1.2 + +*June 20, 2014* + +**Fixes:** + +- Remove crash on invalid languages +- Update Tocify to scroll to the highlighted header in the Table of Contents +- Fix variable leak and update search algorithms +- Update Python examples to be valid Python +- Update gems +- More misc. bugfixes of Javascript errors +- Add Dockerfile +- Remove unused gems +- Optimize images, fonts, and generated asset files +- Add chinese font support +- Remove RedCarpet header ID patch +- Update language tabs to not disturb existing query strings + ## Version 1.1 *July 27th, 2014* From f3591651f12446244a977b2389e2f681af316116 Mon Sep 17 00:00:00 2001 From: John Ferlito Date: Sat, 27 Jun 2015 16:33:07 +1000 Subject: [PATCH 0062/1111] Fix Changelog date Version 1.2 was released in 2015 not 2014 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59ee6a441e5..ee496db6c9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Version 1.2 -*June 20, 2014* +*June 20, 2015* **Fixes:** From ae3d50277ee81e837fd8f89726a213465cd43537 Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Sun, 28 Jun 2015 12:44:12 -0700 Subject: [PATCH 0063/1111] Update RedCarpet gem --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 3a2a2e01a82..0933b9d6839 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax', '~> 2.0.0' gem 'middleman-autoprefixer', '~> 2.4.4' gem 'rouge', '~> 1.9.0' -gem 'redcarpet', '~> 3.3.1' +gem 'redcarpet', '~> 3.3.2' gem 'rake', '~> 10.4.2' gem 'therubyracer', '~> 0.12.1', platforms: :ruby diff --git a/Gemfile.lock b/Gemfile.lock index f9978492816..fff5ee10cb3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -97,7 +97,7 @@ GEM rb-fsevent (0.9.5) rb-inotify (0.9.5) ffi (>= 0.5.0) - redcarpet (3.3.1) + redcarpet (3.3.2) ref (1.0.5) rouge (1.9.0) sass (3.4.14) @@ -135,6 +135,6 @@ DEPENDENCIES middleman-gh-pages (~> 0.0.3) middleman-syntax (~> 2.0.0) rake (~> 10.4.2) - redcarpet (~> 3.3.1) + redcarpet (~> 3.3.2) rouge (~> 1.9.0) therubyracer (~> 0.12.1) From 7639ce60bc5e5e66eea1e43ec8a4758598bb58c9 Mon Sep 17 00:00:00 2001 From: niftylettuce Date: Thu, 2 Jul 2015 03:04:14 -0400 Subject: [PATCH 0064/1111] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d270a0c1ace..efb7e1eb8cd 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ Examples of Slate in the Wild * [Bitrix basis components](http://bbc.bitrix.expert/) * [viagogo API Documentation](http://developer.viagogo.net/) * [Fidor Bank API Documentation](http://docs.fidor.de/) +* [Market Prophit API Documentation](http://developer.marketprophit.com/) (Feel free to add your site to this list in a pull request!) From ad3b2769fe8e3be645314a09f32a169ff1dfbcbe Mon Sep 17 00:00:00 2001 From: Robert Lord Date: Mon, 6 Jul 2015 18:54:45 -0700 Subject: [PATCH 0065/1111] Update tocify to recache headers on image load, fixes #293 --- source/javascripts/app/_toc.js | 13 +++++++++---- source/javascripts/lib/_imagesloaded.min.js | 7 +++++++ 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 source/javascripts/lib/_imagesloaded.min.js diff --git a/source/javascripts/app/_toc.js b/source/javascripts/app/_toc.js index d84bf8e197a..bc2aa3e1f11 100644 --- a/source/javascripts/app/_toc.js +++ b/source/javascripts/app/_toc.js @@ -1,5 +1,6 @@ //= require ../lib/_jquery_ui //= require ../lib/_jquery.tocify +//= require ../lib/_imagesloaded.min (function (global) { 'use strict'; @@ -37,14 +38,18 @@ // Hack to make already open sections to start opened, // instead of displaying an ugly animation - function animate () { + function animate() { setTimeout(function() { toc.setOption('showEffectSpeed', 180); }, 50); } - $(makeToc); - $(animate); - + $(function() { + makeToc(); + animate(); + $('.content').imagesLoaded( function() { + global.toc.calculateHeights(); + }); + }); })(window); diff --git a/source/javascripts/lib/_imagesloaded.min.js b/source/javascripts/lib/_imagesloaded.min.js new file mode 100644 index 00000000000..d66f658937d --- /dev/null +++ b/source/javascripts/lib/_imagesloaded.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v3.1.8 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +(function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,r=this,o=r.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function f(e){this.img=e}function c(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var r=n.querySelectorAll("img"),o=0,s=r.length;s>o;o++){var f=r[o];this.addImage(f)}}},s.prototype.addImage=function(e){var t=new f(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),f.prototype=new t,f.prototype.check=function(){var e=v[this.img.src]||new c(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},f.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); \ No newline at end of file From 0c37f0dfc4985fc8a9aad43a91bc5bd870d423c2 Mon Sep 17 00:00:00 2001 From: Rezan Achmad Date: Thu, 16 Jul 2015 15:09:59 +0800 Subject: [PATCH 0066/1111] Add OAuth.io to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index efb7e1eb8cd..0d89f86f1f5 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ Examples of Slate in the Wild * [viagogo API Documentation](http://developer.viagogo.net/) * [Fidor Bank API Documentation](http://docs.fidor.de/) * [Market Prophit API Documentation](http://developer.marketprophit.com/) +* [OAuth.io API Documentation](http://docs.oauth.io/) (Feel free to add your site to this list in a pull request!) From 5cfcbc7f7b786cc8fa0a2e643dfbdc34298c4eb8 Mon Sep 17 00:00:00 2001 From: Ivan Matyunin Date: Wed, 29 Jul 2015 16:50:28 -0400 Subject: [PATCH 0067/1111] Improved the appearance of code blocks when printing. --- source/stylesheets/print.css.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/stylesheets/print.css.scss b/source/stylesheets/print.css.scss index 4bda057f019..b328d05bac1 100644 --- a/source/stylesheets/print.css.scss +++ b/source/stylesheets/print.css.scss @@ -48,6 +48,12 @@ body { font-size: 0.8em; } + pre { + code { + border: 0; + } + } + pre { padding: 1.3em; } From 5e605079eb0f761fdb68d35605bc73bd074f5f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Baptiste=20B=C3=A9chu?= Date: Tue, 4 Aug 2015 02:42:21 -0700 Subject: [PATCH 0068/1111] Add Aircall.io to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0d89f86f1f5..541665b8810 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Examples of Slate in the Wild * [Fidor Bank API Documentation](http://docs.fidor.de/) * [Market Prophit API Documentation](http://developer.marketprophit.com/) * [OAuth.io API Documentation](http://docs.oauth.io/) +* [Aircall for Developers](http://developer.aircall.io/) (Feel free to add your site to this list in a pull request!) From 87a2950adebca54352a6dac49e22bd764a45e93e Mon Sep 17 00:00:00 2001 From: Dhiren Audich Date: Wed, 5 Aug 2015 11:04:29 -0400 Subject: [PATCH 0069/1111] adding supporkit docs as an example of the slate docs --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 541665b8810..7f7e71f6b19 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ Examples of Slate in the Wild * [Market Prophit API Documentation](http://developer.marketprophit.com/) * [OAuth.io API Documentation](http://docs.oauth.io/) * [Aircall for Developers](http://developer.aircall.io/) +* [SupportKit API Docs](http://docs.supportkit.io/) (Feel free to add your site to this list in a pull request!) From befb8d6fac23a4db99746173e00ea637ecc6536f Mon Sep 17 00:00:00 2001 From: Richard Lee Date: Wed, 5 Aug 2015 22:14:16 +0800 Subject: [PATCH 0070/1111] Remove therubyracer --- Gemfile | 1 - Gemfile.lock | 9 +++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 0933b9d6839..ef9d21c44bb 100644 --- a/Gemfile +++ b/Gemfile @@ -9,4 +9,3 @@ gem 'rouge', '~> 1.9.0' gem 'redcarpet', '~> 3.3.2' gem 'rake', '~> 10.4.2' -gem 'therubyracer', '~> 0.12.1', platforms: :ruby diff --git a/Gemfile.lock b/Gemfile.lock index fff5ee10cb3..d0250db6016 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -41,7 +41,6 @@ GEM i18n (0.7.0) json (1.8.3) kramdown (1.7.0) - libv8 (3.16.14.7) listen (2.10.1) celluloid (~> 0.16.0) rb-fsevent (>= 0.9.3) @@ -98,7 +97,6 @@ GEM rb-inotify (0.9.5) ffi (>= 0.5.0) redcarpet (3.3.2) - ref (1.0.5) rouge (1.9.0) sass (3.4.14) sprockets (2.12.3) @@ -111,9 +109,6 @@ GEM sprockets-sass (1.3.1) sprockets (~> 2.0) tilt (~> 1.1) - therubyracer (0.12.2) - libv8 (~> 3.16.14.0) - ref thor (0.19.1) thread_safe (0.3.5) tilt (1.4.1) @@ -137,4 +132,6 @@ DEPENDENCIES rake (~> 10.4.2) redcarpet (~> 3.3.2) rouge (~> 1.9.0) - therubyracer (~> 0.12.1) + +BUNDLED WITH + 1.10.5 From 83d655b55e55753da00ae0b67c7cb0501eaa6731 Mon Sep 17 00:00:00 2001 From: Richard Lee Date: Thu, 6 Aug 2015 16:58:57 +0800 Subject: [PATCH 0071/1111] Update rouge and middleman-autoprefixer --- Gemfile | 4 ++-- Gemfile.lock | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index ef9d21c44bb..9a9931a5fab 100644 --- a/Gemfile +++ b/Gemfile @@ -4,8 +4,8 @@ source 'https://rubygems.org' gem 'middleman', '~>3.3.10' gem 'middleman-gh-pages', '~> 0.0.3' gem 'middleman-syntax', '~> 2.0.0' -gem 'middleman-autoprefixer', '~> 2.4.4' -gem 'rouge', '~> 1.9.0' +gem 'middleman-autoprefixer', '~> 2.5.0' +gem 'rouge', '~> 1.9.1' gem 'redcarpet', '~> 3.3.2' gem 'rake', '~> 10.4.2' diff --git a/Gemfile.lock b/Gemfile.lock index d0250db6016..32cb6411fae 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,13 +1,13 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.1.11) + activesupport (4.1.12) i18n (~> 0.6, >= 0.6.9) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.1) tzinfo (~> 1.1) - autoprefixer-rails (5.2.0.1) + autoprefixer-rails (5.2.1.1) execjs json celluloid (0.16.0) @@ -31,7 +31,7 @@ GEM sass (>= 3.2, < 3.5) erubis (2.7.0) execjs (2.5.2) - ffi (1.9.8) + ffi (1.9.10) haml (4.0.6) tilt hike (1.2.3) @@ -56,7 +56,7 @@ GEM middleman-sprockets (>= 3.1.2) sass (>= 3.4.0, < 4.0) uglifier (~> 2.5) - middleman-autoprefixer (2.4.4) + middleman-autoprefixer (2.5.0) autoprefixer-rails (~> 5.2.0) middleman-core (>= 3.3.3) middleman-core (3.3.12) @@ -97,7 +97,7 @@ GEM rb-inotify (0.9.5) ffi (>= 0.5.0) redcarpet (3.3.2) - rouge (1.9.0) + rouge (1.9.1) sass (3.4.14) sprockets (2.12.3) hike (~> 1.2) @@ -126,12 +126,12 @@ PLATFORMS DEPENDENCIES middleman (~> 3.3.10) - middleman-autoprefixer (~> 2.4.4) + middleman-autoprefixer (~> 2.5.0) middleman-gh-pages (~> 0.0.3) middleman-syntax (~> 2.0.0) rake (~> 10.4.2) redcarpet (~> 3.3.2) - rouge (~> 1.9.0) + rouge (~> 1.9.1) BUNDLED WITH 1.10.5 From 47e18611f2ab66eaaa97c3fbc6b127226d25b795 Mon Sep 17 00:00:00 2001 From: Richard Lee Date: Thu, 6 Aug 2015 18:40:17 +0800 Subject: [PATCH 0072/1111] Update other dependencies --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 32cb6411fae..f9400056dad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,7 +40,7 @@ GEM uber (~> 0.0.4) i18n (0.7.0) json (1.8.3) - kramdown (1.7.0) + kramdown (1.8.0) listen (2.10.1) celluloid (~> 0.16.0) rb-fsevent (>= 0.9.3) @@ -82,7 +82,7 @@ GEM middleman-core (~> 3.2) rouge (~> 1.0) minitest (5.7.0) - multi_json (1.11.1) + multi_json (1.11.2) padrino-helpers (0.12.5) i18n (~> 0.6, >= 0.6.7) padrino-support (= 0.12.5) @@ -98,8 +98,8 @@ GEM ffi (>= 0.5.0) redcarpet (3.3.2) rouge (1.9.1) - sass (3.4.14) - sprockets (2.12.3) + sass (3.4.16) + sprockets (2.12.4) hike (~> 1.2) multi_json (~> 1.0) rack (~> 1.0) From 5d27eaf9cf31b439b0733907e5a86cde08fcaee2 Mon Sep 17 00:00:00 2001 From: Gabriel Falkenberg Date: Sat, 8 Aug 2015 17:23:29 +0200 Subject: [PATCH 0073/1111] Use HTTPS for github urls. --- source/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/index.md b/source/index.md index 4c1fa8c9f7d..9ce6c96b606 100644 --- a/source/index.md +++ b/source/index.md @@ -8,7 +8,7 @@ language_tabs: toc_footers: - Sign Up for a Developer Key - - Documentation Powered by Slate + - Documentation Powered by Slate includes: - errors @@ -22,7 +22,7 @@ Welcome to the Kittn API! You can use our API to access Kittn API endpoints, whi We have language bindings in Shell, Ruby, and Python! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. -This example API documentation page was created with [Slate](http://github.com/tripit/slate). Feel free to edit it and use it as a base for your own API's documentation. +This example API documentation page was created with [Slate](https://github.com/tripit/slate). Feel free to edit it and use it as a base for your own API's documentation. # Authentication From ed9e958df75c0f1f6da4d9f1461a24f6ea31cf73 Mon Sep 17 00:00:00 2001 From: Victor Quinn Date: Thu, 13 Aug 2015 15:54:18 -0400 Subject: [PATCH 0074/1111] Add SocialRadar to the list of docs sites using Slate --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7f7e71f6b19..535960d1682 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,7 @@ Examples of Slate in the Wild * [OAuth.io API Documentation](http://docs.oauth.io/) * [Aircall for Developers](http://developer.aircall.io/) * [SupportKit API Docs](http://docs.supportkit.io/) +* [SocialRadar's LocationKit Docs](https://docs.locationkit.io/ios) (Feel free to add your site to this list in a pull request!) From 977f2568d75f0b4026e91e3c711294ecf7a07df1 Mon Sep 17 00:00:00 2001 From: Victor Quinn Date: Thu, 13 Aug 2015 16:44:05 -0400 Subject: [PATCH 0075/1111] Fix path to iOS docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 535960d1682..e7a9fa72747 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ Examples of Slate in the Wild * [OAuth.io API Documentation](http://docs.oauth.io/) * [Aircall for Developers](http://developer.aircall.io/) * [SupportKit API Docs](http://docs.supportkit.io/) -* [SocialRadar's LocationKit Docs](https://docs.locationkit.io/ios) +* [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) (Feel free to add your site to this list in a pull request!) From 92d732f8a4e7d374ada4d778345d3fc403460a91 Mon Sep 17 00:00:00 2001 From: Romain Pomier Date: Thu, 27 Aug 2015 11:09:28 +0200 Subject: [PATCH 0076/1111] Install nodejs in Dockerfile to replace therubyracer --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8183c7a8b04..bb826dbf202 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:trusty RUN apt-get update -RUN apt-get install -yq ruby ruby-dev build-essential git +RUN apt-get install -yq ruby ruby-dev build-essential git nodejs RUN gem install --no-ri --no-rdoc bundler ADD Gemfile /app/Gemfile ADD Gemfile.lock /app/Gemfile.lock From 1c508a738f0ce51305a3c9148d519dcb0d3d516b Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Wed, 23 Sep 2015 15:09:13 +1000 Subject: [PATCH 0077/1111] Add SafetyCulture API to the list --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e7a9fa72747..98c03e4a6b1 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ Examples of Slate in the Wild * [Aircall for Developers](http://developer.aircall.io/) * [SupportKit API Docs](http://docs.supportkit.io/) * [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) +* [SafetyCulture API Documentation](https://developer.safetyculture.io/) (Feel free to add your site to this list in a pull request!) From fcea9014d2710255ec4419d30f177abb94db6c29 Mon Sep 17 00:00:00 2001 From: Andreas Madsack Date: Mon, 28 Sep 2015 17:03:48 +0200 Subject: [PATCH 0078/1111] mount volume for live changes to Dockerfile --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98c03e4a6b1..4351fdec6d5 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Or use the included Dockerfile! (must install Docker first) ```shell docker build -t slate . -docker run -d -p 4567:4567 slate +docker run -d -p 4567:4567 --name slate -v $(pwd)/source:/app/source slate ``` You can now see the docs at . Whoa! That was fast! From e0cdc7339e51826d1bc35196a6530e6a05bac31c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Wed, 30 Sep 2015 17:56:34 +0200 Subject: [PATCH 0079/1111] Add hosting.de API docs to the list --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4351fdec6d5..2f042e7f2c2 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ Examples of Slate in the Wild * [SupportKit API Docs](http://docs.supportkit.io/) * [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) * [SafetyCulture API Documentation](https://developer.safetyculture.io/) +* [hosting.de API Documentation](https://www.hosting.de/docs/api/) (Feel free to add your site to this list in a pull request!) From 57aa27c0eb0474733bb115b63991ba2509d2bedc Mon Sep 17 00:00:00 2001 From: Marc Guyer Date: Tue, 6 Oct 2015 10:51:23 -0400 Subject: [PATCH 0080/1111] Basic support for Vagrant --- .gitignore | 3 ++- README.md | 31 ++++++++++++++++++------------- Vagrantfile | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 Vagrantfile diff --git a/.gitignore b/.gitignore index f6fc8c00b25..f1953e3a979 100644 --- a/.gitignore +++ b/.gitignore @@ -14,9 +14,10 @@ tmp *.DS_STORE build/ .cache +.vagrant # YARD artifacts .yardoc _yardoc doc/ -.idea/ \ No newline at end of file +.idea/ diff --git a/README.md b/README.md index 2f042e7f2c2..b2e4105aeb9 100644 --- a/README.md +++ b/README.md @@ -43,23 +43,27 @@ You're going to need: ### Getting Set Up - 1. Fork this repository on Github. - 2. Clone *your forked repository* (not our original one) to your hard drive with `git clone https://github.com/YOURUSERNAME/slate.git` - 3. `cd slate` - 4. Install all dependencies: `bundle install` - 5. Start the test server: `bundle exec middleman server` - -Or use the included Dockerfile! (must install Docker first) - +1. Fork this repository on Github. +2. Clone *your forked repository* (not our original one) to your hard drive with `git clone https://github.com/YOURUSERNAME/slate.git` +3. `cd slate` +4. Initialize and start + * Manually: +```shell +bundle install +bundle exec middleman server +``` + * Or via Docker (must install Docker first) ```shell docker build -t slate . docker run -d -p 4567:4567 --name slate -v $(pwd)/source:/app/source slate +``` + You can now see the docs at http://localhost:4567. Whoa! That was fast! Note: if you're using the Docker setup on OSX, the docs will be + availalable at the output of `boot2docker ip` instead of `localhost:4567`. + * Or via Vagrant +```shell +vagrant up ``` - -You can now see the docs at . Whoa! That was fast! - -*Note: if you're using the Docker setup on OSX, the docs will be -availalable at the output of `boot2docker ip` instead of `localhost:4567`.* + You can now see the docs at http://localhost:4567. Now that Slate is all set up your machine, you'll probably want to learn more about [editing Slate markdown](https://github.com/tripit/slate/wiki/Markdown-Syntax), or [how to publish your docs](https://github.com/tripit/slate/wiki/Deploying-Slate). @@ -97,6 +101,7 @@ Examples of Slate in the Wild * [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) * [SafetyCulture API Documentation](https://developer.safetyculture.io/) * [hosting.de API Documentation](https://www.hosting.de/docs/api/) +* [CheddarGetter API Documentation](http://docs.cheddargetter.com) (Feel free to add your site to this list in a pull request!) diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000000..f00c7d1b60d --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,37 @@ +Vagrant.configure(2) do |config| + config.vm.box = "ubuntu/trusty64" + config.vm.network :forwarded_port, guest: 4567, host: 4567 + config.vm.provider "virtualbox" do |vb| + vb.memory = "384" + end + + config.vm.provision "bootstrap", + type: "shell", + inline: <<-SHELL + sudo apt-get update + sudo apt-get install -yq ruby ruby-dev build-essential nodejs + sudo apt-get autoremove -yq + gem install --no-ri --no-rdoc bundler + SHELL + + config.vm.provision "install", + type: "shell", + privileged: false, + inline: <<-SHELL + echo "==============================================" + echo "Installing app dependencies" + cd /vagrant + bundle install + SHELL + + config.vm.provision "run", + type: "shell", + privileged: false, + inline: <<-SHELL + echo "==============================================" + echo "Starting up middleman at http://localhost:4567" + echo "If it does not come up, check the ~/middleman.log file for any error messages" + cd /vagrant + bundle exec middleman server --force-polling -l 1 &> ~/middleman.log & + SHELL +end From 4136f7b0f795e091c0e793e3b7d7580e7c7f465d Mon Sep 17 00:00:00 2001 From: Marc Guyer Date: Tue, 6 Oct 2015 16:48:51 -0400 Subject: [PATCH 0081/1111] Formatting fixes for README --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b2e4105aeb9..9384a576976 100644 --- a/README.md +++ b/README.md @@ -46,24 +46,31 @@ You're going to need: 1. Fork this repository on Github. 2. Clone *your forked repository* (not our original one) to your hard drive with `git clone https://github.com/YOURUSERNAME/slate.git` 3. `cd slate` -4. Initialize and start - * Manually: +4. Initialize and start (there are a few options for this): + +#### Manual/local + ```shell bundle install bundle exec middleman server ``` - * Or via Docker (must install Docker first) +#### Via Docker (must install Docker first) + ```shell docker build -t slate . docker run -d -p 4567:4567 --name slate -v $(pwd)/source:/app/source slate ``` - You can now see the docs at http://localhost:4567. Whoa! That was fast! Note: if you're using the Docker setup on OSX, the docs will be - availalable at the output of `boot2docker ip` instead of `localhost:4567`. - * Or via Vagrant + +You can now see the docs at http://localhost:4567. Whoa! That was fast! + +*Note: if you're using the Docker setup on OSX, the docs will be availalable at the output of `boot2docker ip` instead of `localhost:4567`.* + +#### Via Vagrant ```shell vagrant up ``` - You can now see the docs at http://localhost:4567. + +You can now see the docs at http://localhost:4567. Now that Slate is all set up your machine, you'll probably want to learn more about [editing Slate markdown](https://github.com/tripit/slate/wiki/Markdown-Syntax), or [how to publish your docs](https://github.com/tripit/slate/wiki/Deploying-Slate). From ce2f2ae8de02aeab1feaff0d3786d4afe8a2bf88 Mon Sep 17 00:00:00 2001 From: Marc Guyer Date: Tue, 6 Oct 2015 17:12:55 -0400 Subject: [PATCH 0082/1111] Update Vagrantfile Need git for `rake publish` --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index f00c7d1b60d..713d88447c1 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -9,7 +9,7 @@ Vagrant.configure(2) do |config| type: "shell", inline: <<-SHELL sudo apt-get update - sudo apt-get install -yq ruby ruby-dev build-essential nodejs + sudo apt-get install -yq ruby ruby-dev build-essential nodejs git sudo apt-get autoremove -yq gem install --no-ri --no-rdoc bundler SHELL From 4a3fdfaea2e9f5017d9ed5cffbcbfae0630c5c76 Mon Sep 17 00:00:00 2001 From: Marc Guyer Date: Tue, 6 Oct 2015 17:21:17 -0400 Subject: [PATCH 0083/1111] Update Vagrantfile More memory needed for `rake publish` --- Vagrantfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 713d88447c1..ba6b620bd7a 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,9 +1,6 @@ Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty64" config.vm.network :forwarded_port, guest: 4567, host: 4567 - config.vm.provider "virtualbox" do |vb| - vb.memory = "384" - end config.vm.provision "bootstrap", type: "shell", From 3c1c9c49d54828fe9a7dd73edbbccef54bf52078 Mon Sep 17 00:00:00 2001 From: Marc Guyer Date: Thu, 8 Oct 2015 14:09:27 +0000 Subject: [PATCH 0084/1111] Add local git config to guest vm --- Vagrantfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Vagrantfile b/Vagrantfile index ba6b620bd7a..186654e0a3b 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -11,6 +11,9 @@ Vagrant.configure(2) do |config| gem install --no-ri --no-rdoc bundler SHELL + # add the local user git config to the vm + config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig" + config.vm.provision "install", type: "shell", privileged: false, From 150ff8a8009f32bb1d121daec9a05aa8282e111b Mon Sep 17 00:00:00 2001 From: Rex Posadas Date: Sun, 11 Oct 2015 14:57:44 -0500 Subject: [PATCH 0085/1111] upgraded to later ubuntu wily to remove error from version trusty --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8183c7a8b04..f5848e6fbd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:trusty +FROM ubuntu:wily RUN apt-get update RUN apt-get install -yq ruby ruby-dev build-essential git From f0a8dec91cebe6d7875002e16c28446cedaa94c3 Mon Sep 17 00:00:00 2001 From: Michael Flaxman Date: Thu, 22 Oct 2015 12:35:29 -0400 Subject: [PATCH 0086/1111] Add blockcypher to examples --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2f042e7f2c2..5ce6f864e43 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ Examples of Slate in the Wild * [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) * [SafetyCulture API Documentation](https://developer.safetyculture.io/) * [hosting.de API Documentation](https://www.hosting.de/docs/api/) +* [BlockCypher's API Documentation](https://dev.blockcypher.com) (Feel free to add your site to this list in a pull request!) From fb4c2a9ceb9000c1a3b2aad7507f404c2850e479 Mon Sep 17 00:00:00 2001 From: Dave Powers Date: Wed, 4 Nov 2015 14:15:23 -0500 Subject: [PATCH 0087/1111] Remove link to ChaiOne Gameplan (broken link) --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 5ce6f864e43..b55fa7a62f6 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,6 @@ Examples of Slate in the Wild * [Travis-CI's API docs](http://docs.travis-ci.com/api/) * [Mozilla's localForage docs](http://mozilla.github.io/localForage/) * [Mozilla Recroom](http://mozilla.github.io/recroom/) -* [ChaiOne Gameplan API docs](http://chaione.github.io/gameplanb2b/#introduction) * [Drcaban's Build a Quine tutorial](http://drcabana.github.io/build-a-quine/#introduction) * [PricePlow API docs](https://www.priceplow.com/api/documentation) * [Emerging Threats API docs](http://apidocs.emergingthreats.net/) From 01fd02005a6e0d3fccff8bb3eaa2d00646247de8 Mon Sep 17 00:00:00 2001 From: Dave Powers Date: Wed, 4 Nov 2015 14:16:54 -0500 Subject: [PATCH 0088/1111] Fix link to IBM Cloudant (page has moved) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b55fa7a62f6..6f086f58a89 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Examples of Slate in the Wild * [Whispir.io API](https://whispir.github.io/api) * [NASA API](https://data.nasa.gov/developer/external/planetary/) * [CardPay API](https://developers.cardpay.com/) -* [IBM Cloudant](https://docs-testb.cloudant.com/content-review/_design/couchapp/index.html) +* [IBM Cloudant](https://docs.cloudant.com/api.html) * [Bitrix basis components](http://bbc.bitrix.expert/) * [viagogo API Documentation](http://developer.viagogo.net/) * [Fidor Bank API Documentation](http://docs.fidor.de/) From 1e86f824afd7e300239bc41f242e496a13a4d165 Mon Sep 17 00:00:00 2001 From: Dave Powers Date: Wed, 4 Nov 2015 14:18:08 -0500 Subject: [PATCH 0089/1111] Fix link to BlockCypher (does not work over HTTPS) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f086f58a89..5d2e7fe1c31 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Examples of Slate in the Wild * [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) * [SafetyCulture API Documentation](https://developer.safetyculture.io/) * [hosting.de API Documentation](https://www.hosting.de/docs/api/) -* [BlockCypher's API Documentation](https://dev.blockcypher.com) +* [BlockCypher's API Documentation](http://dev.blockcypher.com) (Feel free to add your site to this list in a pull request!) From c76359868a489e8706290fe7dbffce651339ceb3 Mon Sep 17 00:00:00 2001 From: Joe Huss Date: Thu, 12 Nov 2015 01:01:14 -0500 Subject: [PATCH 0090/1111] Added Links to InterServer Slate Implementation URL: https://my.interserver.net/apidoc/ Our implementation includes some minor customizations which others mind fight useful including icons for the Language tabs at the top right. Side Note: The document contents including sample scripts , input/output parameter+descriptions, etc are generated entirely from a script i wrote that parses my SOAP API WSDL file, PHP Source (parsing phpdoc comments), and MySQL Table defintions (parsing field comments) to generate and populate all the neccesary info. At some point (faster if i have any requests for it ) ill make those scripts publicly available after i clean up the source a bit and make it more portable. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d2e7fe1c31..d3de33ba426 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ Examples of Slate in the Wild * [SafetyCulture API Documentation](https://developer.safetyculture.io/) * [hosting.de API Documentation](https://www.hosting.de/docs/api/) * [BlockCypher's API Documentation](http://dev.blockcypher.com) +* [InterServer API Documentation](https://my.interserver.net/apidoc/) (Feel free to add your site to this list in a pull request!) From 40443b32fd122fb2041db8689861bd8c03665c92 Mon Sep 17 00:00:00 2001 From: Evan Tahler Date: Mon, 16 Nov 2015 10:53:18 -0800 Subject: [PATCH 0091/1111] Update README.md add actionhero docs --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d3de33ba426..3e22c3c44f7 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ Examples of Slate in the Wild * [hosting.de API Documentation](https://www.hosting.de/docs/api/) * [BlockCypher's API Documentation](http://dev.blockcypher.com) * [InterServer API Documentation](https://my.interserver.net/apidoc/) +* [ActionHeroJS's API Documentation](http://www.actionherojs.com/docs) (Feel free to add your site to this list in a pull request!) From 2618c77db0f46a55a608b5f47dd3815d35828d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Gonz=C3=A1lez?= Date: Fri, 13 Nov 2015 17:28:45 +0100 Subject: [PATCH 0092/1111] Use base ruby image in Dockerfile & fix watcher It seems that the watcher will not work without the --force-polling option. --- Dockerfile | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 294c650d9e9..6938dfd13bf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,6 @@ -FROM ubuntu:wily +FROM ruby:2.2.3-onbuild + +RUN ln -s /usr/src/app /app # Deprecated -RUN apt-get update -RUN apt-get install -yq ruby ruby-dev build-essential git nodejs -RUN gem install --no-ri --no-rdoc bundler -ADD Gemfile /app/Gemfile -ADD Gemfile.lock /app/Gemfile.lock -RUN cd /app; bundle install -ADD . /app EXPOSE 4567 -WORKDIR /app -CMD ["bundle", "exec", "middleman", "server"] +CMD ["bundle", "exec", "middleman", "server", "--force-polling"] From 82717e043db6743ca30ce8fb5475571d10e8465b Mon Sep 17 00:00:00 2001 From: Jared King Date: Wed, 18 Nov 2015 11:10:10 -0600 Subject: [PATCH 0093/1111] Added Invoiced to list of examples on README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9384a576976..333ad464447 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,7 @@ Examples of Slate in the Wild * [SafetyCulture API Documentation](https://developer.safetyculture.io/) * [hosting.de API Documentation](https://www.hosting.de/docs/api/) * [CheddarGetter API Documentation](http://docs.cheddargetter.com) +* [Invoiced API](https://invoiced.com/docs/api) (Feel free to add your site to this list in a pull request!) From 97a4c89d0cc32c8609237b41acf5fcc043555480 Mon Sep 17 00:00:00 2001 From: ReadmeCritic Date: Tue, 8 Dec 2015 12:22:18 -0800 Subject: [PATCH 0094/1111] Update README URLs based on HTTP redirects --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 333ad464447..acb4a625f6b 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Now that Slate is all set up your machine, you'll probably want to learn more ab Examples of Slate in the Wild --------------------------------- -* [Travis-CI's API docs](http://docs.travis-ci.com/api/) +* [Travis-CI's API docs](https://docs.travis-ci.com/api/) * [Mozilla's localForage docs](http://mozilla.github.io/localForage/) * [Mozilla Recroom](http://mozilla.github.io/recroom/) * [ChaiOne Gameplan API docs](http://chaione.github.io/gameplanb2b/#introduction) @@ -104,12 +104,12 @@ Examples of Slate in the Wild * [Market Prophit API Documentation](http://developer.marketprophit.com/) * [OAuth.io API Documentation](http://docs.oauth.io/) * [Aircall for Developers](http://developer.aircall.io/) -* [SupportKit API Docs](http://docs.supportkit.io/) +* [SupportKit API Docs](http://docs.smooch.io/) * [SocialRadar's LocationKit Docs](https://docs.locationkit.io/) * [SafetyCulture API Documentation](https://developer.safetyculture.io/) * [hosting.de API Documentation](https://www.hosting.de/docs/api/) * [CheddarGetter API Documentation](http://docs.cheddargetter.com) -* [Invoiced API](https://invoiced.com/docs/api) +* [Invoiced API](http://invoiced.com/docs/api/) (Feel free to add your site to this list in a pull request!) @@ -122,7 +122,7 @@ Just [submit a issue](https://github.com/tripit/slate/issues) to the Slate Githu Contributors -------------------- -Slate was built by [Robert Lord](https://lord.io) while at [TripIt](http://tripit.com). +Slate was built by [Robert Lord](https://lord.io) while at [TripIt](https://www.tripit.com/). Thanks to the following people who have submitted major pull requests: @@ -137,5 +137,5 @@ Special Thanks - [Middleman](https://github.com/middleman/middleman) - [jquery.tocify.js](https://github.com/gfranko/jquery.tocify.js) - [middleman-syntax](https://github.com/middleman/middleman-syntax) -- [middleman-gh-pages](https://github.com/neo/middleman-gh-pages) +- [middleman-gh-pages](https://github.com/edgecase/middleman-gh-pages) - [Font Awesome](http://fortawesome.github.io/Font-Awesome/) From 837a7e7873eba3b62fca36e54cd1cacf9c65fe02 Mon Sep 17 00:00:00 2001 From: Zach Panzarino Date: Fri, 18 Dec 2015 22:51:49 -0500 Subject: [PATCH 0095/1111] Change cat name After recent events it is probably better to use a different name for the cat. --- source/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/index.md b/source/index.md index 4c1fa8c9f7d..69a22ea6edd 100644 --- a/source/index.md +++ b/source/index.md @@ -94,7 +94,7 @@ curl "http://example.com/api/kittens" }, { "id": 2, - "name": "Isis", + "name": "Max", "breed": "unknown", "fluffiness": 5, "cuteness": 10 @@ -145,7 +145,7 @@ curl "http://example.com/api/kittens/2" ```json { "id": 2, - "name": "Isis", + "name": "Max", "breed": "unknown", "fluffiness": 5, "cuteness": 10 From 1129b4f66508f696cbd1627e07d880cee51ae377 Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 17:17:43 -0500 Subject: [PATCH 0096/1111] Edit colors to conform with Greenhouse branding --- source/stylesheets/_variables.scss | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss index 5fe64b1f302..1fa5c656d3e 100644 --- a/source/stylesheets/_variables.scss +++ b/source/stylesheets/_variables.scss @@ -23,17 +23,17 @@ under the License. // BACKGROUND COLORS //////////////////// -$nav-bg: #393939; +$nav-bg: #FFFFFF; $examples-bg: #393939; $code-bg: #292929; $code-annotation-bg: #1c1c1c; -$nav-subitem-bg: #262626; -$nav-active-bg: #2467af; +$nav-subitem-bg: #62b2c4; +$nav-active-bg: #00b2a9; $lang-select-border: #000; $lang-select-bg: #222; $lang-select-active-bg: $examples-bg; // feel free to change this to blue or something $lang-select-pressed-bg: #111; // color of language tab bg when mouse is pressed -$main-bg: #eaf2f6; +$main-bg: #FFFFFF; $aside-notice-bg: #8fbcd4; $aside-warning-bg: #c97a7e; $aside-success-bg: #6ac174; @@ -43,7 +43,7 @@ $search-notice-bg: #c97a7e; // TEXT COLORS //////////////////// $main-text: #333; // main content text color -$nav-text: #fff; +$nav-text: #54585a; $nav-active-text: #fff; $lang-select-text: #fff; // color of unselected language tab text $lang-select-active-text: #fff; // color of selected language tab text @@ -89,9 +89,9 @@ $phone-width: $tablet-width - $nav-width; // min width before reverting to mobil $nav-active-shadow: #000; $nav-footer-border-color: #666; $nav-embossed-border-top: #000; -$nav-embossed-border-bottom: #939393; +$nav-embossed-border-bottom: #000; $main-embossed-text-shadow: 0px 1px 0px #fff; -$search-box-border-color: #666; +$search-box-border-color: #54585a; //////////////////////////////////////////////////////////////////////////////// From fe2763f56c801eb4861b6fd178fac4f860213ff5 Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 17:32:49 -0500 Subject: [PATCH 0097/1111] Add Greenhouse logo to nav --- source/images/logo.png | Bin 3507 -> 11078 bytes source/stylesheets/screen.css.scss | 3 +++ 2 files changed, 3 insertions(+) diff --git a/source/images/logo.png b/source/images/logo.png index fa1f13da8193dacca747df56cc1f7bb0bc111a7e..b2d76aaf233582a15251ca330eb4f842bda37ed0 100644 GIT binary patch literal 11078 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 a3v7ihlZ3}y@&zBA!Y*qYX%$_vd;A|ZdQRK` literal 3507 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 diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index e4b3ef82b22..741138a2d5d 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -84,6 +84,9 @@ html, body { // This is the logo at the top of the ToC &>img { display: block; + width: 25%; + margin-left: auto; + margin-right: auto; } &>.search { From a59aeca21dbd0dc7ab76d8933ed986ad77fdcecb Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 17:39:37 -0500 Subject: [PATCH 0098/1111] Remove shadows from CSS --- source/stylesheets/screen.css.scss | 7 ------- 1 file changed, 7 deletions(-) diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index 741138a2d5d..9f05b17fdb2 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -177,7 +177,6 @@ html, body { // This is the currently selected ToC entry .tocify-focus { - box-shadow: 0px 1px 0px $nav-active-shadow; background-color: $nav-active-bg; color: $nav-active-text; } @@ -343,7 +342,6 @@ html, body { padding: 0 $main-padding; box-sizing: border-box; display: block; - @include text-shadow($main-embossed-text-shadow); @extend %left-col; } @@ -474,7 +472,6 @@ html, body { aside { padding-top: 1em; padding-bottom: 1em; - @include text-shadow(0 1px 0 lighten($aside-notice-bg, 15%)); margin-top: 1.5em; margin-bottom: 1.5em; background: $aside-notice-bg; @@ -482,12 +479,10 @@ html, body { &.warning { background-color: $aside-warning-bg; - @include text-shadow(0 1px 0 lighten($aside-warning-bg, 15%)); } &.success { background-color: $aside-success-bg; - @include text-shadow(0 1px 0 lighten($aside-success-bg, 15%)); } } @@ -514,7 +509,6 @@ html, body { margin: -2px; border-radius: 4px; border: 1px solid #F7E633; - @include text-shadow(1px 1px 0 #666); background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%); } } @@ -537,7 +531,6 @@ html, body { clear:right; box-sizing: border-box; - @include text-shadow(0px 1px 2px rgba(0,0,0,0.4)); @extend %right-col; From a45832f98f75bf0f7c39b81d0795fdf11d24bd73 Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 17:41:23 -0500 Subject: [PATCH 0099/1111] Remove gradient and top border from headers --- source/stylesheets/screen.css.scss | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index 9f05b17fdb2..e1111a85d8d 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -363,8 +363,6 @@ html, body { border-bottom: 1px solid #ccc; margin-bottom: $h1-margin-bottom; margin-top: 2em; - border-top: 1px solid #ddd; - background-image: linear-gradient(to bottom, #fff, #f9f9f9); } h1:first-child, div:first-child + h1 { @@ -380,7 +378,6 @@ html, body { border-top: 1px solid #ccc; padding-top: 1.2em; padding-bottom: 1.2em; - background-image: linear-gradient(to bottom, rgba(#fff, 0.4), rgba(#fff, 0)); } // h2s right after h1s should bump right up From 9f47f4b65e46276e6c0e11c3c79c23d0c33cc4ee Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 18:20:59 -0500 Subject: [PATCH 0100/1111] Add Greenhouse brand font --- source/stylesheets/_fonts.scss | 28 ++++++++++++++++++++++++++++ source/stylesheets/_variables.scss | 12 ++++++------ source/stylesheets/screen.css.scss | 4 +++- 3 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 source/stylesheets/_fonts.scss diff --git a/source/stylesheets/_fonts.scss b/source/stylesheets/_fonts.scss new file mode 100644 index 00000000000..e01f23cba28 --- /dev/null +++ b/source/stylesheets/_fonts.scss @@ -0,0 +1,28 @@ +@font-face { + font-family: "LLAkkuratWeb-Bold"; + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-bold-s-da650f3e5d121ff3584d6d7df703def6.eot"); + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-bold-s.eot#iefix") format("embedded-opentype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-bold-s-8f4ce91e6264ca77230354a0845be553.woff") format("woff"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-bold-s-7b5d084534971febd769e95ead265792.ttf") format("truetype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-bold-s.svg#LLAkkuratWeb-Bold") format("svg"); + font-weight: normal; + font-style: normal +} +@font-face { + font-family: "LLAkkuratWeb-Italic"; + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-italic-s-9ebac37c6822c54672623aed60390877.eot"); + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-italic-s.eot#iefix") format("embedded-opentype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-italic-s-6fb98b3a904e84e7263caa3bf8025f8c.woff") format("woff"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-italic-s-434e19f88099658f499dbee8d1970548.ttf") format("truetype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-italic-s.svg#LLAkkuratWeb-Italic") format("svg"); + font-weight: normal; + font-style: normal +} +@font-face { + font-family: "LLAkkuratWeb-Light"; + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-light-s-202faa735255e2d3b2d6f740c265f0da.eot"); + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-light-s.eot#iefix") format("embedded-opentype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-light-s-60ec22fd8f6ae55d09ba61be82d581c0.woff") format("woff"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-light-s-a0c0731e0942345305d19de3cf08e1ab.ttf") format("truetype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-light-s.svg#LLAkkuratWeb-Light") format("svg"); + font-weight: normal; + font-style: normal +} +@font-face { + font-family: "LLAkkuratWeb-Regular"; + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-regular-s-f5a56f4dcccbbb2ffe37313aa0d0cc7a.eot"); + src: url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-regular-s.eot#iefix") format("embedded-opentype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-regular-s-31392b316fb064a216f2712a77cb26b1.woff") format("woff"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-regular-s-c7a2abb9c5e4fe66bd68bcaebb3da255.ttf") format("truetype"), url("https://greenhouse.global.ssl.fastly.net/assets/lineto-akkurat-regular-s.svg#LLAkkuratWeb-Regular") format("svg"); + font-weight: normal; + font-style: normal +} \ No newline at end of file diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss index 1fa5c656d3e..2bb456123b5 100644 --- a/source/stylesheets/_variables.scss +++ b/source/stylesheets/_variables.scss @@ -34,15 +34,15 @@ $lang-select-bg: #222; $lang-select-active-bg: $examples-bg; // feel free to change this to blue or something $lang-select-pressed-bg: #111; // color of language tab bg when mouse is pressed $main-bg: #FFFFFF; -$aside-notice-bg: #8fbcd4; -$aside-warning-bg: #c97a7e; -$aside-success-bg: #6ac174; +$aside-notice-bg: #ccf0ee; +$aside-warning-bg: #fcf5cc; +$aside-success-bg: #b7dd79; $search-notice-bg: #c97a7e; // TEXT COLORS //////////////////// -$main-text: #333; // main content text color +$main-text: #54585a; // main content text color $nav-text: #54585a; $nav-active-text: #fff; $lang-select-text: #fff; // color of unselected language tab text @@ -68,8 +68,8 @@ $phone-width: $tablet-width - $nav-width; // min width before reverting to mobil // FONTS //////////////////// %default-font { - font-family: "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif; - font-size: 13px; + font-family: "LLAkkuratWeb-Light", Helmut, Helvetica, Arial, sans-serif; + font-size: 15px; } %header-font { diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index e1111a85d8d..0d66bf00a14 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -1,4 +1,5 @@ @charset "utf-8"; +@import 'fonts'; @import 'normalize'; @import 'compass'; @import 'variables'; @@ -21,6 +22,7 @@ License for the specific language governing permissions and limitations under the License. */ + //////////////////////////////////////////////////////////////////////////////// // GENERAL STUFF //////////////////////////////////////////////////////////////////////////////// @@ -549,7 +551,7 @@ html, body { background-color: $code-annotation-bg; border-radius: 5px; padding: $code-annotation-padding; - color: #ccc; + color: #fff; border-top: 1px solid #000; border-bottom: 1px solid #404040; } From f5911e05f21f860f1a83129804d8c0ccb56dab8e Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 18:21:52 -0500 Subject: [PATCH 0101/1111] Add CNAME --- source/CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 source/CNAME diff --git a/source/CNAME b/source/CNAME new file mode 100644 index 00000000000..9acffe3269a --- /dev/null +++ b/source/CNAME @@ -0,0 +1 @@ +gh-docs.gordn.org \ No newline at end of file From 12221b98704ad1c786cb33f4b2f5c9b38212bf3c Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 18:28:34 -0500 Subject: [PATCH 0102/1111] Remove heading borders --- source/stylesheets/screen.css.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index 0d66bf00a14..1c94af286b6 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -362,7 +362,6 @@ html, body { font-size: 30px; padding-top: 0.5em; padding-bottom: 0.5em; - border-bottom: 1px solid #ccc; margin-bottom: $h1-margin-bottom; margin-top: 2em; } @@ -377,7 +376,6 @@ html, body { font-size: 20px; margin-top: 4em; margin-bottom: 0; - border-top: 1px solid #ccc; padding-top: 1.2em; padding-bottom: 1.2em; } From cffa2331a6f31b933e5d35dbd93bc60e2447a1df Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 18:47:05 -0500 Subject: [PATCH 0103/1111] Change nav background to GH Green --- source/images/logo.png | Bin 11078 -> 10656 bytes source/stylesheets/_variables.scss | 10 +++++----- source/stylesheets/screen.css.scss | 21 ++------------------- 3 files changed, 7 insertions(+), 24 deletions(-) diff --git a/source/images/logo.png b/source/images/logo.png index b2d76aaf233582a15251ca330eb4f842bda37ed0..0836d0a8d9f9eeb388854eb017e6e2ae605cfa77 100644 GIT binary patch literal 10656 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 a3v7ihlZ3}y@&zBA!Y*qYX%$_vd;A|ZdQRK` diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss index 2bb456123b5..6b97c47caac 100644 --- a/source/stylesheets/_variables.scss +++ b/source/stylesheets/_variables.scss @@ -23,12 +23,12 @@ under the License. // BACKGROUND COLORS //////////////////// -$nav-bg: #FFFFFF; +$nav-bg: #00b2a9; $examples-bg: #393939; $code-bg: #292929; $code-annotation-bg: #1c1c1c; $nav-subitem-bg: #62b2c4; -$nav-active-bg: #00b2a9; +$nav-active-bg: #ffffff; $lang-select-border: #000; $lang-select-bg: #222; $lang-select-active-bg: $examples-bg; // feel free to change this to blue or something @@ -43,8 +43,8 @@ $search-notice-bg: #c97a7e; // TEXT COLORS //////////////////// $main-text: #54585a; // main content text color -$nav-text: #54585a; -$nav-active-text: #fff; +$nav-text: #FFF; +$nav-active-text: #54585a; $lang-select-text: #fff; // color of unselected language tab text $lang-select-active-text: #fff; // color of selected language tab text $lang-select-pressed-text: #fff; // color of language tab text when mouse is pressed @@ -91,7 +91,7 @@ $nav-footer-border-color: #666; $nav-embossed-border-top: #000; $nav-embossed-border-bottom: #000; $main-embossed-text-shadow: 0px 1px 0px #fff; -$search-box-border-color: #54585a; +$search-box-border-color: #fff; //////////////////////////////////////////////////////////////////////////////// diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss index 1c94af286b6..fc20dd94ce5 100644 --- a/source/stylesheets/screen.css.scss +++ b/source/stylesheets/screen.css.scss @@ -50,15 +50,6 @@ html, body { width: 20px; } -@mixin embossed-bg { - background: - linear-gradient(to bottom, rgba(#000, 0.2), rgba(#000, 0) 8px), - linear-gradient(to top, rgba(#000, 0.2), rgba(#000, 0) 8px), - linear-gradient(to bottom, rgba($nav-embossed-border-top, 1), rgba($nav-embossed-border-top, 0) 1.5px), - linear-gradient(to top, rgba($nav-embossed-border-bottom, 1), rgba($nav-embossed-border-bottom, 0) 1.5px), - $nav-subitem-bg; -} - .tocify-wrapper { transition: left 0.3s ease-in-out; @@ -103,7 +94,7 @@ html, body { margin: $nav-v-padding $nav-padding; width: $nav-width - 30; outline: none; - color: $nav-text; + color: #fff; border-radius: 0; /* ios has a default border radius */ } @@ -111,7 +102,7 @@ html, body { position: absolute; top: 17px; left: $nav-padding; - color: $nav-text; + color: #fff; @extend %icon-search; } } @@ -134,8 +125,6 @@ html, body { margin-bottom: 1em; } - @include embossed-bg; - li { margin: 1em $nav-padding; line-height: 1; @@ -193,12 +182,6 @@ html, body { padding-left: $nav-padding + $nav-indent; font-size: 12px; } - - // for embossed look: - @include embossed-bg; - &>li:last-child { - box-shadow: none; // otherwise it'll overflow out of the subheader - } } .toc-footer { From 77d0db9ba48035212c267ff4edac7fc5f148426e Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 18:47:20 -0500 Subject: [PATCH 0104/1111] Break out documentation into includes --- source/includes/_candidates.md | 107 +++++++++++++++++++++ source/includes/_introduction.md | 42 ++++++++ source/index.md | 158 +------------------------------ 3 files changed, 153 insertions(+), 154 deletions(-) create mode 100644 source/includes/_candidates.md create mode 100644 source/includes/_introduction.md diff --git a/source/includes/_candidates.md b/source/includes/_candidates.md new file mode 100644 index 00000000000..eab97ff94ba --- /dev/null +++ b/source/includes/_candidates.md @@ -0,0 +1,107 @@ +# Candidates + +## Get All Kittens + +```ruby +require 'kittn' + +api = Kittn::APIClient.authorize!('meowmeowmeow') +api.kittens.get +``` + +```python +import kittn + +api = kittn.authorize('meowmeowmeow') +api.kittens.get() +``` + +```shell +curl "http://example.com/api/kittens" + -H "Authorization: meowmeowmeow" +``` + +> The above command returns JSON structured like this: + +```json +[ + { + "id": 1, + "name": "Fluffums", + "breed": "calico", + "fluffiness": 6, + "cuteness": 7 + }, + { + "id": 2, + "name": "Max", + "breed": "unknown", + "fluffiness": 5, + "cuteness": 10 + } +] +``` + +This endpoint retrieves all kittens. + +### HTTP Request + +`GET http://example.com/api/kittens` + +### Query Parameters + +Parameter | Default | Description +--------- | ------- | ----------- +include_cats | false | If set to true, the result will also include cats. +available | true | If set to false, the result will include kittens that have already been adopted. + + + +## Get a Specific Kitten + +```ruby +require 'kittn' + +api = Kittn::APIClient.authorize!('meowmeowmeow') +api.kittens.get(2) +``` + +```python +import kittn + +api = kittn.authorize('meowmeowmeow') +api.kittens.get(2) +``` + +```shell +curl "http://example.com/api/kittens/2" + -H "Authorization: meowmeowmeow" +``` + +> The above command returns JSON structured like this: + +```json +{ + "id": 2, + "name": "Max", + "breed": "unknown", + "fluffiness": 5, + "cuteness": 10 +} +``` + +This endpoint retrieves a specific kitten. + + + +### HTTP Request + +`GET http://example.com/kittens/` + +### URL Parameters + +Parameter | Description +--------- | ----------- +ID | The ID of the kitten to retrieve \ No newline at end of file diff --git a/source/includes/_introduction.md b/source/includes/_introduction.md new file mode 100644 index 00000000000..676a58e8f6b --- /dev/null +++ b/source/includes/_introduction.md @@ -0,0 +1,42 @@ + +# Introduction + +Welcome to the Kittn API! You can use our API to access Kittn API endpoints, which can get information on various cats, kittens, and breeds in our database. + +We have language bindings in Shell, Ruby, and Python! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. + +This example API documentation page was created with [Slate](http://github.com/tripit/slate). Feel free to edit it and use it as a base for your own API's documentation. + +## Authentication + +> To authorize, use this code: + +```ruby +require 'kittn' + +api = Kittn::APIClient.authorize!('meowmeowmeow') +``` + +```python +import kittn + +api = kittn.authorize('meowmeowmeow') +``` + +```shell +# With shell, you can just pass the correct header with each request +curl "api_endpoint_here" + -H "Authorization: meowmeowmeow" +``` + +> Make sure to replace `meowmeowmeow` with your API key. + +Kittn uses API keys to allow access to the API. You can register a new Kittn API key at our [developer portal](http://example.com/developers). + +Kittn expects for the API key to be included in all API requests to the server in a header that looks like the following: + +`Authorization: meowmeowmeow` + + diff --git a/source/index.md b/source/index.md index 69a22ea6edd..7b12031b52a 100644 --- a/source/index.md +++ b/source/index.md @@ -1,5 +1,5 @@ --- -title: API Reference +title: Greenhouse Harvest API language_tabs: - shell @@ -7,162 +7,12 @@ language_tabs: - python toc_footers: - - Sign Up for a Developer Key - - Documentation Powered by Slate + - Learn more about Greenhouse includes: + - introduction - errors + - candidates search: true --- - -# Introduction - -Welcome to the Kittn API! You can use our API to access Kittn API endpoints, which can get information on various cats, kittens, and breeds in our database. - -We have language bindings in Shell, Ruby, and Python! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. - -This example API documentation page was created with [Slate](http://github.com/tripit/slate). Feel free to edit it and use it as a base for your own API's documentation. - -# Authentication - -> To authorize, use this code: - -```ruby -require 'kittn' - -api = Kittn::APIClient.authorize!('meowmeowmeow') -``` - -```python -import kittn - -api = kittn.authorize('meowmeowmeow') -``` - -```shell -# With shell, you can just pass the correct header with each request -curl "api_endpoint_here" - -H "Authorization: meowmeowmeow" -``` - -> Make sure to replace `meowmeowmeow` with your API key. - -Kittn uses API keys to allow access to the API. You can register a new Kittn API key at our [developer portal](http://example.com/developers). - -Kittn expects for the API key to be included in all API requests to the server in a header that looks like the following: - -`Authorization: meowmeowmeow` - - - -# Kittens - -## Get All Kittens - -```ruby -require 'kittn' - -api = Kittn::APIClient.authorize!('meowmeowmeow') -api.kittens.get -``` - -```python -import kittn - -api = kittn.authorize('meowmeowmeow') -api.kittens.get() -``` - -```shell -curl "http://example.com/api/kittens" - -H "Authorization: meowmeowmeow" -``` - -> The above command returns JSON structured like this: - -```json -[ - { - "id": 1, - "name": "Fluffums", - "breed": "calico", - "fluffiness": 6, - "cuteness": 7 - }, - { - "id": 2, - "name": "Max", - "breed": "unknown", - "fluffiness": 5, - "cuteness": 10 - } -] -``` - -This endpoint retrieves all kittens. - -### HTTP Request - -`GET http://example.com/api/kittens` - -### Query Parameters - -Parameter | Default | Description ---------- | ------- | ----------- -include_cats | false | If set to true, the result will also include cats. -available | true | If set to false, the result will include kittens that have already been adopted. - - - -## Get a Specific Kitten - -```ruby -require 'kittn' - -api = Kittn::APIClient.authorize!('meowmeowmeow') -api.kittens.get(2) -``` - -```python -import kittn - -api = kittn.authorize('meowmeowmeow') -api.kittens.get(2) -``` - -```shell -curl "http://example.com/api/kittens/2" - -H "Authorization: meowmeowmeow" -``` - -> The above command returns JSON structured like this: - -```json -{ - "id": 2, - "name": "Max", - "breed": "unknown", - "fluffiness": 5, - "cuteness": 10 -} -``` - -This endpoint retrieves a specific kitten. - - - -### HTTP Request - -`GET http://example.com/kittens/` - -### URL Parameters - -Parameter | Description ---------- | ----------- -ID | The ID of the kitten to retrieve - From d484deb0c6464209d85a131715b3dc829e6352bc Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 19:07:48 -0500 Subject: [PATCH 0105/1111] Add GitHub repo URL to side nav --- source/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/index.md b/source/index.md index 7b12031b52a..a24fa52fd1b 100644 --- a/source/index.md +++ b/source/index.md @@ -8,6 +8,7 @@ language_tabs: toc_footers: - Learn more about Greenhouse + - GitHub repository includes: - introduction From 03d5f06e498306b301aff8608e251d58c800eb62 Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 19:08:03 -0500 Subject: [PATCH 0106/1111] Make nav subitems more readable --- source/stylesheets/_variables.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss index 6b97c47caac..a0b8571988c 100644 --- a/source/stylesheets/_variables.scss +++ b/source/stylesheets/_variables.scss @@ -27,7 +27,7 @@ $nav-bg: #00b2a9; $examples-bg: #393939; $code-bg: #292929; $code-annotation-bg: #1c1c1c; -$nav-subitem-bg: #62b2c4; +$nav-subitem-bg: #4890a0; $nav-active-bg: #ffffff; $lang-select-border: #000; $lang-select-bg: #222; From f41cc7e06d8f73a23e58b79b6f2cf8c40ae6b40e Mon Sep 17 00:00:00 2001 From: Gordon Zheng Date: Tue, 22 Dec 2015 19:08:14 -0500 Subject: [PATCH 0107/1111] Write Authorization section --- source/includes/_introduction.md | 70 +++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/source/includes/_introduction.md b/source/includes/_introduction.md index 676a58e8f6b..21f8f150a09 100644 --- a/source/includes/_introduction.md +++ b/source/includes/_introduction.md @@ -1,20 +1,42 @@ - # Introduction -Welcome to the Kittn API! You can use our API to access Kittn API endpoints, which can get information on various cats, kittens, and breeds in our database. +``` + _ _ _ + | |__ ___| | | ___ + | '_ \ / _ \ | |/ _ \ + | | | | __/ | | (_) | + |_| |_|\___|_|_|\___/ _ + __ _____ _ __| | __| | + \ \ /\ / / _ \| '__| |/ _` | + \ V V / (_) | | | | (_| | + \_/\_/ \___/|_| |_|\__,_| +``` + +With Harvest, you have access to most of your Greenhouse data! + +The Harvest API was designed to allow our customers to export their data from Greenhouse. However, it can also be used to... + + 1. Foo + 2. Bar + 3. Qux We have language bindings in Shell, Ruby, and Python! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. -This example API documentation page was created with [Slate](http://github.com/tripit/slate). Feel free to edit it and use it as a base for your own API's documentation. +This documentation is open source! Feel free to leave feedback as issues in the [GitHub repo](https://github.com/capablemonkey/greenhouse-api-docs) or fork it and contribute changes! ## Authentication > To authorize, use this code: ```ruby -require 'kittn' - -api = Kittn::APIClient.authorize!('meowmeowmeow') +require 'base64' +api_token = 'a7183e1b7e9ab09b8a5cfa87d1934c3c' +credential = Base64.strict_encode64(api_token + ':') +# => "YTcxODNlMWI3ZTlhYjA5YjhhNWNmYTg3ZDE5MzRjM2M6" + +headers = { + "Authorization" => "Basic " + credential +} ``` ```python @@ -24,19 +46,37 @@ api = kittn.authorize('meowmeowmeow') ``` ```shell -# With shell, you can just pass the correct header with each request -curl "api_endpoint_here" - -H "Authorization: meowmeowmeow" +# Note the trailing colon after the username (API token): +$ curl https://harvest.greenhouse.io/v1/candidates/ -u a7183e1b7e9ab09b8a5cfa87d1934c3c: +... + +> GET /v1/candidates/ HTTP/1.1 +> Host: harvest.greenhouse.io +> Authorization: Basic YTcxODNlMWI3ZTlhYjA5YjhhNWNmYTg3ZDE5MzRjM2M6 + +... ``` -> Make sure to replace `meowmeowmeow` with your API key. +Harvest uses Basic Auth over HTTPS for authentication. The username is your Greenhouse API token and the password should be blank. Unauthenticated requests will return an HTTP 401 response. + +### Authorization header + +> Your `Authorization` header should look like this: + +``` +Authorization: Basic YTcxODNlMWI3ZTlhYjA5YjhhNWNmYTg3ZDE5MzRjM2M6 +``` -Kittn uses API keys to allow access to the API. You can register a new Kittn API key at our [developer portal](http://example.com/developers). +Most HTTP clients will automatically use a given username and password to generate the required Authorization header. However, you may need to explicity set this header. The header has the following format: -Kittn expects for the API key to be included in all API requests to the server in a header that looks like the following: +`Authorization: Basic ` -`Authorization: meowmeowmeow` +Since only a username needs to be provided in our case, you'll need to append a `:` (colon) to your Greenhouse API token and then Base64 encode the resulting string. -