diff --git a/source/vendors/jquery-pjax/.bower.json b/source/vendors/jquery-pjax/.bower.json deleted file mode 100644 index ae7b7f6b8..000000000 --- a/source/vendors/jquery-pjax/.bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "jquery-pjax", - "version": "1.9.4", - "main": "./jquery.pjax.js", - "dependencies": { - "jquery": ">=1.8" - }, - "ignore": [ - ".travis.yml", - "Gemfile", - "Gemfile.lock", - "vendor/", - "script/", - "test/" - ], - "homepage": "https://github.com/defunkt/jquery-pjax", - "_release": "1.9.4", - "_resolution": { - "type": "version", - "tag": "v1.9.4", - "commit": "7ce953c14f727edc6009c188be18caec8388d4ab" - }, - "_source": "git://github.com/defunkt/jquery-pjax.git", - "_target": "~1.9.2", - "_originalSource": "jquery-pjax" -} \ No newline at end of file diff --git a/source/vendors/jquery-pjax/LICENSE b/source/vendors/jquery-pjax/LICENSE deleted file mode 100644 index c8e37ffd9..000000000 --- a/source/vendors/jquery-pjax/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) Chris Wanstrath - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -Software), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/source/vendors/jquery-pjax/README.md b/source/vendors/jquery-pjax/README.md deleted file mode 100644 index 58094e145..000000000 --- a/source/vendors/jquery-pjax/README.md +++ /dev/null @@ -1,443 +0,0 @@ -# pjax - - - .--. - / \ - ## a a - ( '._) - |'-- | - _.\___/_ ___pjax___ - ."\> \Y/|<'. '._.-' - / \ \_\/ / '-' / - | --'\_/|/ | _/ - |___.-' | |`'` - | | | - | / './ - /__./` | | - \ | | - \ | | - ; | | - / | | - jgs |___\_.\_ - `-"--'---' - -## pjax = pushState + ajax - -pjax is a jQuery plugin that uses ajax and pushState to deliver a fast browsing experience with real permalinks, page titles, and a working back button. - -pjax works by grabbing html from your server via ajax and replacing the content of a container on your page with the ajax'd html. It then updates the browser's current url using pushState without reloading your page's layout or any resources (js, css), giving the appearance of a fast, full page load. But really it's just ajax and pushState. - -For [browsers that don't support pushState][compat] pjax fully degrades. - -## Overview - -pjax is not fully automatic. You'll need to setup and designate a containing element on your page that will be replaced when you navigate your site. - -Consider the following page. - -``` html - - - - - - -

My Site

-
- Go to next page. -
- - -``` - -We want pjax to grab the url `/page/2` then replace `#pjax-container` with whatever it gets back. No styles or scripts will be reloaded and even the h1 can stay the same - we just want to change the `#pjax-container` element. - -We do this by telling pjax to listen on `a` tags and use `#pjax-container` as the target container: - -``` javascript -$(document).pjax('a', '#pjax-container') -``` - -Now when someone in a pjax-compatible browser clicks "next page" the content of `#pjax-container` will be replaced with the body of `/page/2`. - -Magic! Almost. You still need to configure your server to look for pjax requests and send back pjax-specific content. - -The pjax ajax request sends an `X-PJAX` header so in this example (and in most cases) we want to return just the content of the page without any layout for any requests with that header. - -Here's what it might look like in Rails: - -``` ruby -def index - if request.headers['X-PJAX'] - render :layout => false - end -end -``` - -If you'd like a more automatic solution than pjax for Rails check out [Turbolinks](https://github.com/rails/turbolinks). - -Also check out [RailsCasts #294 : Playing with PJAX](http://railscasts.com/episodes/294-playing-with-pjax) - -## Installation - -### bower - -Via [bower](https://github.com/twitter/bower). - -``` -$ bower install jquery-pjax -``` - -Or add `jquery-pjax` to your apps `bower.json`. - -``` json - "dependencies": { - "jquery-pjax": "latest" - } -``` - -### standalone - -pjax can be downloaded directly into your app's public directory - just be sure you've loaded jQuery first. - -``` -curl -LO https://raw.github.com/defunkt/jquery-pjax/master/jquery.pjax.js -``` - -**WARNING** Do not hotlink the raw script url. GitHub is not a CDN. - -## Dependencies - -Requires jQuery 1.8.x or higher. - -## Compatibility - -pjax only works with [browsers that support the `history.pushState` API][compat]. When the API isn't supported pjax goes into fallback mode: `$.fn.pjax` calls will be a no-op and `$.pjax` will hard load the given url. This mode targets the browser requirements of the jQuery version being used. - -For debugging purposes, you can intentionally disable pjax even if the browser supports `pushState`. Just call `$.pjax.disable()`. To see if pjax is actually supports `pushState`, check `$.support.pjax`. - -## Usage - -### `$.fn.pjax` - -Let's talk more about the most basic way to get started: - -``` javascript -$(document).pjax('a', '#pjax-container') -``` - -This will enable pjax on all links and designate the container as `#pjax-container`. - -If you are migrating an existing site you probably don't want to enable pjax everywhere just yet. Instead of using a global selector like `a` try annotating pjaxable links with `data-pjax`, then use `'a[data-pjax]'` as your selector. - -Or try this selector that matches any `` links inside a `
` container. - -``` javascript -$(document).pjax('[data-pjax] a, a[data-pjax]', '#pjax-container') -``` - -#### Arguments - -The synopsis for the `$.fn.pjax` function is: - -``` javascript -$(document).pjax(selector, [container], options) -``` - -1. `selector` is a string to be used for click [event delegation][$.fn.on]. -2. `container` is a string selector that uniquely identifies the pjax container. -3. `options` is an object with keys described below. - -##### pjax options - -key | default | description -----|---------|------------ -`timeout` | 650 | ajax timeout in milliseconds after which a full refresh is forced -`push` | true | use [pushState][] to add a browser history entry upon navigation -`replace` | false | replace URL without adding browser history entry -`maxCacheLength` | 20 | maximum cache size for previous container contents -`version` | | a string or function returning the current pjax version -`scrollTo` | 0 | vertical position to scroll to after navigation -`type` | `"GET"` | see [$.ajax][] -`dataType` | `"html"` | see [$.ajax][] -`container` | | CSS selector for the element where content should be replaced -`url` | link.href | a string or function that returns the URL for the ajax request -`target` | link | eventually the `relatedTarget` value for [pjax events](#events) -`fragment` | `"body"` | CSS selector for the fragment to extract from ajax response - -You can change the defaults globally by writing to the `$.pjax.defaults` object: - -``` javascript -$.pjax.defaults.timeout = 1200 -``` - -### `$.pjax.click` - -This is a lower level function used by `$.fn.pjax` itself. It allows you to get a little more control over the pjax event handling. - -This example uses the current click context to set an ancestor as the container: - -``` javascript -if ($.support.pjax) { - $(document).on('click', 'a[data-pjax]', function(event) { - var container = $(this).closest('[data-pjax-container]') - $.pjax.click(event, {container: container}) - }) -} -``` - -**NOTE** Use the explicit `$.support.pjax` guard. We aren't using `$.fn.pjax` so we should avoid binding this event handler unless the browser is actually going to use pjax. - -### `$.pjax.submit` - -Submits a form via pjax. This function is experimental but GitHub uses it on [Gist][gist] so give it a shot! - -``` javascript -$(document).on('submit', 'form[data-pjax]', function(event) { - $.pjax.submit(event, '#pjax-container') -}) -``` - -### `$.pjax.reload` - -Initiates a request for the current URL to the server using pjax mechanism and replaces the container with the response. Does not add a browser history entry. - -``` javascript -$.pjax.reload('#pjax-container', options) -``` - -### `$.pjax` - -Manual pjax invocation. Used mainly when you want to start a pjax request in a handler that didn't originate from a click. If you can get access to a click `event`, consider `$.pjax.click(event)` instead. - -``` javascript -function applyFilters() { - var url = urlForFilters() - $.pjax({url: url, container: '#pjax-container'}) -} -``` - -### Events - -All pjax events except `pjax:click` & `pjax:clicked` are fired from the pjax -container, not the link that was clicked. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
eventcancelargumentsnotes
event lifecycle upon following a pjaxed link
pjax:click✔︎optionsfires from a link that got activated; cancel to prevent pjax
pjax:beforeSend✔︎xhr, optionscan set XHR headers
pjax:startxhr, options
pjax:sendxhr, options
pjax:clickedoptionsfires after pjax has started from a link that got clicked
pjax:beforeReplacecontents, optionsbefore replacing HTML with content loaded from the server
pjax:successdata, status, xhr, optionsafter replacing HTML content loaded from the server
pjax:timeout✔︎xhr, optionsfires after options.timeout; will hard refresh unless canceled
pjax:error✔︎xhr, textStatus, error, optionson ajax error; will hard refresh unless canceled
pjax:completexhr, textStatus, optionsalways fires after ajax, regardless of result
pjax:endxhr, options
event lifecycle on browser Back/Forward navigation
pjax:popstateevent direction property: "back"/"forward"
pjax:startnull, optionsbefore replacing content
pjax:beforeReplacecontents, optionsright before replacing HTML with content from cache
pjax:endnull, optionsafter replacing content
- -`pjax:send` & `pjax:complete` are a good pair of events to use if you are implementing a -loading indicator. They'll only be triggered if an actual XHR request is made, -not if the content is loaded from cache: - -``` javascript -$(document).on('pjax:send', function() { - $('#loading').show() -}) -$(document).on('pjax:complete', function() { - $('#loading').hide() -}) -``` - -An example of canceling a `pjax:timeout` event would be to disable the fallback -timeout behavior if a spinner is being shown: - -``` javascript -$(document).on('pjax:timeout', function(event) { - // Prevent default timeout redirection behavior - event.preventDefault() -}) -``` - -### Server side - -Server configuration will vary between languages and frameworks. The following example shows how you might configure Rails. - -``` ruby -def index - if request.headers['X-PJAX'] - render :layout => false - end -end -``` - -An `X-PJAX` request header is set to differentiate a pjax request from normal XHR requests. In this case, if the request is pjax, we skip the layout html and just render the inner contents of the container. - -Check if your favorite server framework supports pjax here: https://gist.github.com/4283721 - -#### Layout Reloading - -Layouts can be forced to do a hard reload when assets or html changes. - -First set the initial layout version in your header with a custom meta tag. - -``` html - -``` - -Then from the server side, set the `X-PJAX-Version` header to the same. - -``` ruby -if request.headers['X-PJAX'] - response.headers['X-PJAX-Version'] = "v123" -end -``` - -Deploying a deploy, bumping the version constant to force clients to do a full reload the next request getting the new layout and assets. - -### Legacy API - -Pre 1.0 versions used an older style syntax that was analogous to the now deprecated `$.fn.live` api. The current api is based off `$.fn.on`. - -``` javascript -$('a[data-pjax]').pjax('#pjax-container') -``` - -Expanded to - -``` javascript -$('a[data-pjax]').live('click', function(event) { - $.pjax.click(event, '#pjax-container') -}) -``` - -The new api - -``` javascript -$(document).pjax('a[data-pjax]', '#pjax-container') -``` - -Which is roughly the same as - -``` javascript -$(document).on('click', 'a[data-pjax]', function(event) { - $.pjax.click(event, '#pjax-container') -}) -``` - -**NOTE** The new api gives you control over the delegated element container. `$.fn.live` always bound to `document`. This is what you still want to do most of the time. - -## Contributing - -``` -$ git clone https://github.com/defunkt/jquery-pjax.git -$ cd jquery-pjax/ -``` - -To run the test suite locally, start up the Sinatra test application. - -``` -$ bundle install -$ bundle exec ruby test/app.rb -== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick - -# in another tab: -$ open http://localhost:4567/ -``` - -[compat]: http://caniuse.com/#search=pushstate -[gist]: https://gist.github.com/ -[$.fn.on]: http://api.jquery.com/on/ -[$.ajax]: http://api.jquery.com/jQuery.ajax/ -[pushState]: https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Adding_and_modifying_history_entries diff --git a/source/vendors/jquery-pjax/bower.json b/source/vendors/jquery-pjax/bower.json deleted file mode 100644 index 1d8e32830..000000000 --- a/source/vendors/jquery-pjax/bower.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "jquery-pjax", - "version": "1.9.4", - "main": "./jquery.pjax.js", - "dependencies": { - "jquery": ">=1.8" - }, - "ignore": [ - ".travis.yml", - "Gemfile", - "Gemfile.lock", - "vendor/", - "script/", - "test/" - ] -} diff --git a/source/vendors/jquery-pjax/jquery.pjax.js b/source/vendors/jquery-pjax/jquery.pjax.js deleted file mode 100644 index 444891e36..000000000 --- a/source/vendors/jquery-pjax/jquery.pjax.js +++ /dev/null @@ -1,897 +0,0 @@ -/*! - * Copyright 2012, Chris Wanstrath - * Released under the MIT License - * https://github.com/defunkt/jquery-pjax - */ - -(function($){ - -// When called on a container with a selector, fetches the href with -// ajax into the container or with the data-pjax attribute on the link -// itself. -// -// Tries to make sure the back button and ctrl+click work the way -// you'd expect. -// -// Exported as $.fn.pjax -// -// Accepts a jQuery ajax options object that may include these -// pjax specific options: -// -// -// container - Where to stick the response body. Usually a String selector. -// $(container).html(xhr.responseBody) -// (default: current jquery context) -// push - Whether to pushState the URL. Defaults to true (of course). -// replace - Want to use replaceState instead? That's cool. -// -// For convenience the second parameter can be either the container or -// the options object. -// -// Returns the jQuery object -function fnPjax(selector, container, options) { - var context = this - return this.on('click.pjax', selector, function(event) { - var opts = $.extend({}, optionsFor(container, options)) - if (!opts.container) - opts.container = $(this).attr('data-pjax') || context - handleClick(event, opts) - }) -} - -// Public: pjax on click handler -// -// Exported as $.pjax.click. -// -// event - "click" jQuery.Event -// options - pjax options -// -// Examples -// -// $(document).on('click', 'a', $.pjax.click) -// // is the same as -// $(document).pjax('a') -// -// $(document).on('click', 'a', function(event) { -// var container = $(this).closest('[data-pjax-container]') -// $.pjax.click(event, container) -// }) -// -// Returns nothing. -function handleClick(event, container, options) { - options = optionsFor(container, options) - - var link = event.currentTarget - - if (link.tagName.toUpperCase() !== 'A') - throw "$.fn.pjax or $.pjax.click requires an anchor element" - - // Middle click, cmd click, and ctrl click should open - // links in a new tab as normal. - if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ) - return - - // Ignore cross origin links - if ( location.protocol !== link.protocol || location.hostname !== link.hostname ) - return - - // Ignore case when a hash is being tacked on the current URL - if ( link.href.indexOf('#') > -1 && stripHash(link) == stripHash(location) ) - return - - // Ignore event with default prevented - if (event.isDefaultPrevented()) - return - - var defaults = { - url: link.href, - container: $(link).attr('data-pjax'), - target: link - } - - var opts = $.extend({}, defaults, options) - var clickEvent = $.Event('pjax:click') - $(link).trigger(clickEvent, [opts]) - - if (!clickEvent.isDefaultPrevented()) { - pjax(opts) - event.preventDefault() - $(link).trigger('pjax:clicked', [opts]) - } -} - -// Public: pjax on form submit handler -// -// Exported as $.pjax.submit -// -// event - "click" jQuery.Event -// options - pjax options -// -// Examples -// -// $(document).on('submit', 'form', function(event) { -// var container = $(this).closest('[data-pjax-container]') -// $.pjax.submit(event, container) -// }) -// -// Returns nothing. -function handleSubmit(event, container, options) { - options = optionsFor(container, options) - - var form = event.currentTarget - - if (form.tagName.toUpperCase() !== 'FORM') - throw "$.pjax.submit requires a form element" - - var defaults = { - type: form.method.toUpperCase(), - url: form.action, - container: $(form).attr('data-pjax'), - target: form - } - - if (defaults.type !== 'GET' && window.FormData !== undefined) { - defaults.data = new FormData(form); - defaults.processData = false; - defaults.contentType = false; - } else { - // Can't handle file uploads, exit - if ($(form).find(':file').length) { - return; - } - - // Fallback to manually serializing the fields - defaults.data = $(form).serializeArray(); - } - - pjax($.extend({}, defaults, options)) - - event.preventDefault() -} - -// Loads a URL with ajax, puts the response body inside a container, -// then pushState()'s the loaded URL. -// -// Works just like $.ajax in that it accepts a jQuery ajax -// settings object (with keys like url, type, data, etc). -// -// Accepts these extra keys: -// -// container - Where to stick the response body. -// $(container).html(xhr.responseBody) -// push - Whether to pushState the URL. Defaults to true (of course). -// replace - Want to use replaceState instead? That's cool. -// -// Use it just like $.ajax: -// -// var xhr = $.pjax({ url: this.href, container: '#main' }) -// console.log( xhr.readyState ) -// -// Returns whatever $.ajax returns. -function pjax(options) { - options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options) - - if ($.isFunction(options.url)) { - options.url = options.url() - } - - var target = options.target - - var hash = parseURL(options.url).hash - - var context = options.context = findContainerFor(options.container) - - // We want the browser to maintain two separate internal caches: one - // for pjax'd partial page loads and one for normal page loads. - // Without adding this secret parameter, some browsers will often - // confuse the two. - if (!options.data) options.data = {} - if ($.isArray(options.data)) { - options.data.push({name: '_pjax', value: context.selector}) - } else { - options.data._pjax = context.selector - } - - function fire(type, args, props) { - if (!props) props = {} - props.relatedTarget = target - var event = $.Event(type, props) - context.trigger(event, args) - return !event.isDefaultPrevented() - } - - var timeoutTimer - - options.beforeSend = function(xhr, settings) { - // No timeout for non-GET requests - // Its not safe to request the resource again with a fallback method. - if (settings.type !== 'GET') { - settings.timeout = 0 - } - - xhr.setRequestHeader('X-PJAX', 'true') - xhr.setRequestHeader('X-PJAX-Container', context.selector) - - if (!fire('pjax:beforeSend', [xhr, settings])) - return false - - if (settings.timeout > 0) { - timeoutTimer = setTimeout(function() { - if (fire('pjax:timeout', [xhr, options])) - xhr.abort('timeout') - }, settings.timeout) - - // Clear timeout setting so jquerys internal timeout isn't invoked - settings.timeout = 0 - } - - options.requestUrl = parseURL(settings.url).href - } - - options.complete = function(xhr, textStatus) { - if (timeoutTimer) - clearTimeout(timeoutTimer) - - fire('pjax:complete', [xhr, textStatus, options]) - - fire('pjax:end', [xhr, options]) - } - - options.error = function(xhr, textStatus, errorThrown) { - var container = extractContainer("", xhr, options) - - var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options]) - if (options.type == 'GET' && textStatus !== 'abort' && allowed) { - locationReplace(container.url) - } - } - - options.success = function(data, status, xhr) { - var previousState = pjax.state; - - // If $.pjax.defaults.version is a function, invoke it first. - // Otherwise it can be a static string. - var currentVersion = (typeof $.pjax.defaults.version === 'function') ? - $.pjax.defaults.version() : - $.pjax.defaults.version - - var latestVersion = xhr.getResponseHeader('X-PJAX-Version') - - var container = extractContainer(data, xhr, options) - - // If there is a layout version mismatch, hard load the new url - if (currentVersion && latestVersion && currentVersion !== latestVersion) { - locationReplace(container.url) - return - } - - // If the new response is missing a body, hard load the page - if (!container.contents) { - locationReplace(container.url) - return - } - - pjax.state = { - id: options.id || uniqueId(), - url: container.url, - title: container.title, - container: context.selector, - fragment: options.fragment, - timeout: options.timeout - } - - if (options.push || options.replace) { - window.history.replaceState(pjax.state, container.title, container.url) - } - - // Clear out any focused controls before inserting new page contents. - try { - document.activeElement.blur() - } catch (e) { } - - if (container.title) document.title = container.title - - fire('pjax:beforeReplace', [container.contents, options], { - state: pjax.state, - previousState: previousState - }) - context.html(container.contents) - - // FF bug: Won't autofocus fields that are inserted via JS. - // This behavior is incorrect. So if theres no current focus, autofocus - // the last field. - // - // http://www.w3.org/html/wg/drafts/html/master/forms.html - var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0] - if (autofocusEl && document.activeElement !== autofocusEl) { - autofocusEl.focus(); - } - - executeScriptTags(container.scripts) - - // Scroll to top by default - if (typeof options.scrollTo === 'number') - $(window).scrollTop(options.scrollTo) - - // If the URL has a hash in it, make sure the browser - // knows to navigate to the hash. - if ( hash !== '' ) { - // Avoid using simple hash set here. Will add another history - // entry. Replace the url with replaceState and scroll to target - // by hand. - // - // window.location.hash = hash - var url = parseURL(container.url) - url.hash = hash - - pjax.state.url = url.href - window.history.replaceState(pjax.state, container.title, url.href) - - var target = document.getElementById(url.hash.slice(1)) - if (target) $(window).scrollTop($(target).offset().top) - } - - fire('pjax:success', [data, status, xhr, options]) - } - - - // Initialize pjax.state for the initial page load. Assume we're - // using the container and options of the link we're loading for the - // back button to the initial page. This ensures good back button - // behavior. - if (!pjax.state) { - pjax.state = { - id: uniqueId(), - url: window.location.href, - title: document.title, - container: context.selector, - fragment: options.fragment, - timeout: options.timeout - } - window.history.replaceState(pjax.state, document.title) - } - - // Cancel the current request if we're already pjaxing - var xhr = pjax.xhr - if ( xhr && xhr.readyState < 4) { - xhr.onreadystatechange = $.noop - xhr.abort() - } - - pjax.options = options - var xhr = pjax.xhr = $.ajax(options) - - if (xhr.readyState > 0) { - if (options.push && !options.replace) { - // Cache current container element before replacing it - cachePush(pjax.state.id, context.clone().contents()) - - window.history.pushState(null, "", stripPjaxParam(options.requestUrl)) - } - - fire('pjax:start', [xhr, options]) - fire('pjax:send', [xhr, options]) - } - - return pjax.xhr -} - -// Public: Reload current page with pjax. -// -// Returns whatever $.pjax returns. -function pjaxReload(container, options) { - var defaults = { - url: window.location.href, - push: false, - replace: true, - scrollTo: false - } - - return pjax($.extend(defaults, optionsFor(container, options))) -} - -// Internal: Hard replace current state with url. -// -// Work for around WebKit -// https://bugs.webkit.org/show_bug.cgi?id=93506 -// -// Returns nothing. -function locationReplace(url) { - window.history.replaceState(null, "", pjax.state.url) - window.location.replace(url) -} - - -var initialPop = true -var initialURL = window.location.href -var initialState = window.history.state - -// Initialize $.pjax.state if possible -// Happens when reloading a page and coming forward from a different -// session history. -if (initialState && initialState.container) { - pjax.state = initialState -} - -// Non-webkit browsers don't fire an initial popstate event -if ('state' in window.history) { - initialPop = false -} - -// popstate handler takes care of the back and forward buttons -// -// You probably shouldn't use pjax on pages with other pushState -// stuff yet. -function onPjaxPopstate(event) { - var previousState = pjax.state; - var state = event.state - - if (state && state.container) { - // When coming forward from a separate history session, will get an - // initial pop with a state we are already at. Skip reloading the current - // page. - if (initialPop && initialURL == state.url) return - - // If popping back to the same state, just skip. - // Could be clicking back from hashchange rather than a pushState. - if (pjax.state && pjax.state.id === state.id) return - - var container = $(state.container) - if (container.length) { - var direction, contents = cacheMapping[state.id] - - if (pjax.state) { - // Since state ids always increase, we can deduce the history - // direction from the previous state. - direction = pjax.state.id < state.id ? 'forward' : 'back' - - // Cache current container before replacement and inform the - // cache which direction the history shifted. - cachePop(direction, pjax.state.id, container.clone().contents()) - } - - var popstateEvent = $.Event('pjax:popstate', { - state: state, - direction: direction - }) - container.trigger(popstateEvent) - - var options = { - id: state.id, - url: state.url, - container: container, - push: false, - fragment: state.fragment, - timeout: state.timeout, - scrollTo: false - } - - if (contents) { - container.trigger('pjax:start', [null, options]) - - pjax.state = state - if (state.title) document.title = state.title - var beforeReplaceEvent = $.Event('pjax:beforeReplace', { - state: state, - previousState: previousState - }) - container.trigger(beforeReplaceEvent, [contents, options]) - container.html(contents) - - container.trigger('pjax:end', [null, options]) - } else { - pjax(options) - } - - // Force reflow/relayout before the browser tries to restore the - // scroll position. - container[0].offsetHeight - } else { - locationReplace(location.href) - } - } - initialPop = false -} - -// Fallback version of main pjax function for browsers that don't -// support pushState. -// -// Returns nothing since it retriggers a hard form submission. -function fallbackPjax(options) { - var url = $.isFunction(options.url) ? options.url() : options.url, - method = options.type ? options.type.toUpperCase() : 'GET' - - var form = $('
', { - method: method === 'GET' ? 'GET' : 'POST', - action: url, - style: 'display:none' - }) - - if (method !== 'GET' && method !== 'POST') { - form.append($('', { - type: 'hidden', - name: '_method', - value: method.toLowerCase() - })) - } - - var data = options.data - if (typeof data === 'string') { - $.each(data.split('&'), function(index, value) { - var pair = value.split('=') - form.append($('', {type: 'hidden', name: pair[0], value: pair[1]})) - }) - } else if (typeof data === 'object') { - for (key in data) - form.append($('', {type: 'hidden', name: key, value: data[key]})) - } - - $(document.body).append(form) - form.submit() -} - -// Internal: Generate unique id for state object. -// -// Use a timestamp instead of a counter since ids should still be -// unique across page loads. -// -// Returns Number. -function uniqueId() { - return (new Date).getTime() -} - -// Internal: Strips _pjax param from url -// -// url - String -// -// Returns String. -function stripPjaxParam(url) { - return url - .replace(/\?_pjax=[^&]+&?/, '?') - .replace(/_pjax=[^&]+&?/, '') - .replace(/[\?&]$/, '') -} - -// Internal: Parse URL components and returns a Locationish object. -// -// url - String URL -// -// Returns HTMLAnchorElement that acts like Location. -function parseURL(url) { - var a = document.createElement('a') - a.href = url - return a -} - -// Internal: Return the `href` component of given URL object with the hash -// portion removed. -// -// location - Location or HTMLAnchorElement -// -// Returns String -function stripHash(location) { - return location.href.replace(/#.*/, '') -} - -// Internal: Build options Object for arguments. -// -// For convenience the first parameter can be either the container or -// the options object. -// -// Examples -// -// optionsFor('#container') -// // => {container: '#container'} -// -// optionsFor('#container', {push: true}) -// // => {container: '#container', push: true} -// -// optionsFor({container: '#container', push: true}) -// // => {container: '#container', push: true} -// -// Returns options Object. -function optionsFor(container, options) { - // Both container and options - if ( container && options ) - options.container = container - - // First argument is options Object - else if ( $.isPlainObject(container) ) - options = container - - // Only container - else - options = {container: container} - - // Find and validate container - if (options.container) - options.container = findContainerFor(options.container) - - return options -} - -// Internal: Find container element for a variety of inputs. -// -// Because we can't persist elements using the history API, we must be -// able to find a String selector that will consistently find the Element. -// -// container - A selector String, jQuery object, or DOM Element. -// -// Returns a jQuery object whose context is `document` and has a selector. -function findContainerFor(container) { - container = $(container) - - if ( !container.length ) { - throw "no pjax container for " + container.selector - } else if ( container.selector !== '' && container.context === document ) { - return container - } else if ( container.attr('id') ) { - return $('#' + container.attr('id')) - } else { - throw "cant get selector for pjax container!" - } -} - -// Internal: Filter and find all elements matching the selector. -// -// Where $.fn.find only matches descendants, findAll will test all the -// top level elements in the jQuery object as well. -// -// elems - jQuery object of Elements -// selector - String selector to match -// -// Returns a jQuery object. -function findAll(elems, selector) { - return elems.filter(selector).add(elems.find(selector)); -} - -function parseHTML(html) { - return $.parseHTML(html, document, true) -} - -// Internal: Extracts container and metadata from response. -// -// 1. Extracts X-PJAX-URL header if set -// 2. Extracts inline tags -// 3. Builds response Element and extracts fragment if set -// -// data - String response data -// xhr - XHR response -// options - pjax options Object -// -// Returns an Object with url, title, and contents keys. -function extractContainer(data, xhr, options) { - var obj = {}, fullDocument = /<html/i.test(data) - - // Prefer X-PJAX-URL header if it was set, otherwise fallback to - // using the original requested url. - obj.url = stripPjaxParam(xhr.getResponseHeader('X-PJAX-URL') || options.requestUrl) - - // Attempt to parse response html into elements - if (fullDocument) { - var $head = $(parseHTML(data.match(/<head[^>]*>([\s\S.]*)<\/head>/i)[0])) - var $body = $(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0])) - } else { - var $head = $body = $(parseHTML(data)) - } - - // If response data is empty, return fast - if ($body.length === 0) - return obj - - // If there's a <title> tag in the header, use it as - // the page's title. - obj.title = findAll($head, 'title').last().text() - - if (options.fragment) { - // If they specified a fragment, look for it in the response - // and pull it out. - if (options.fragment === 'body') { - var $fragment = $body - } else { - var $fragment = findAll($body, options.fragment).first() - } - - if ($fragment.length) { - obj.contents = options.fragment === 'body' ? $fragment : $fragment.contents() - - // If there's no title, look for data-title and title attributes - // on the fragment - if (!obj.title) - obj.title = $fragment.attr('title') || $fragment.data('title') - } - - } else if (!fullDocument) { - obj.contents = $body - } - - // Clean up any <title> tags - if (obj.contents) { - // Remove any parent title elements - obj.contents = obj.contents.not(function() { return $(this).is('title') }) - - // Then scrub any titles from their descendants - obj.contents.find('title').remove() - - // Gather all script[src] elements - obj.scripts = findAll(obj.contents, 'script[src]').remove() - obj.contents = obj.contents.not(obj.scripts) - } - - // Trim any whitespace off the title - if (obj.title) obj.title = $.trim(obj.title) - - return obj -} - -// Load an execute scripts using standard script request. -// -// Avoids jQuery's traditional $.getScript which does a XHR request and -// globalEval. -// -// scripts - jQuery object of script Elements -// -// Returns nothing. -function executeScriptTags(scripts) { - if (!scripts) return - - var existingScripts = $('script[src]') - - scripts.each(function() { - var src = this.src - var matchedScripts = existingScripts.filter(function() { - return this.src === src - }) - if (matchedScripts.length) return - - var script = document.createElement('script') - var type = $(this).attr('type') - if (type) script.type = type - script.src = $(this).attr('src') - document.head.appendChild(script) - }) -} - -// Internal: History DOM caching class. -var cacheMapping = {} -var cacheForwardStack = [] -var cacheBackStack = [] - -// Push previous state id and container contents into the history -// cache. Should be called in conjunction with `pushState` to save the -// previous container contents. -// -// id - State ID Number -// value - DOM Element to cache -// -// Returns nothing. -function cachePush(id, value) { - cacheMapping[id] = value - cacheBackStack.push(id) - - // Remove all entries in forward history stack after pushing a new page. - trimCacheStack(cacheForwardStack, 0) - - // Trim back history stack to max cache length. - trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength) -} - -// Shifts cache from directional history cache. Should be -// called on `popstate` with the previous state id and container -// contents. -// -// direction - "forward" or "back" String -// id - State ID Number -// value - DOM Element to cache -// -// Returns nothing. -function cachePop(direction, id, value) { - var pushStack, popStack - cacheMapping[id] = value - - if (direction === 'forward') { - pushStack = cacheBackStack - popStack = cacheForwardStack - } else { - pushStack = cacheForwardStack - popStack = cacheBackStack - } - - pushStack.push(id) - if (id = popStack.pop()) - delete cacheMapping[id] - - // Trim whichever stack we just pushed to to max cache length. - trimCacheStack(pushStack, pjax.defaults.maxCacheLength) -} - -// Trim a cache stack (either cacheBackStack or cacheForwardStack) to be no -// longer than the specified length, deleting cached DOM elements as necessary. -// -// stack - Array of state IDs -// length - Maximum length to trim to -// -// Returns nothing. -function trimCacheStack(stack, length) { - while (stack.length > length) - delete cacheMapping[stack.shift()] -} - -// Public: Find version identifier for the initial page load. -// -// Returns String version or undefined. -function findVersion() { - return $('meta').filter(function() { - var name = $(this).attr('http-equiv') - return name && name.toUpperCase() === 'X-PJAX-VERSION' - }).attr('content') -} - -// Install pjax functions on $.pjax to enable pushState behavior. -// -// Does nothing if already enabled. -// -// Examples -// -// $.pjax.enable() -// -// Returns nothing. -function enable() { - $.fn.pjax = fnPjax - $.pjax = pjax - $.pjax.enable = $.noop - $.pjax.disable = disable - $.pjax.click = handleClick - $.pjax.submit = handleSubmit - $.pjax.reload = pjaxReload - $.pjax.defaults = { - timeout: 650, - push: true, - replace: false, - type: 'GET', - dataType: 'html', - scrollTo: 0, - maxCacheLength: 20, - version: findVersion - } - $(window).on('popstate.pjax', onPjaxPopstate) -} - -// Disable pushState behavior. -// -// This is the case when a browser doesn't support pushState. It is -// sometimes useful to disable pushState for debugging on a modern -// browser. -// -// Examples -// -// $.pjax.disable() -// -// Returns nothing. -function disable() { - $.fn.pjax = function() { return this } - $.pjax = fallbackPjax - $.pjax.enable = enable - $.pjax.disable = $.noop - $.pjax.click = $.noop - $.pjax.submit = $.noop - $.pjax.reload = function() { window.location.reload() } - - $(window).off('popstate.pjax', onPjaxPopstate) -} - - -// Add the state property to jQuery's event object so we can use it in -// $(window).bind('popstate') -if ( $.inArray('state', $.event.props) < 0 ) - $.event.props.push('state') - -// Is pjax supported by this browser? -$.support.pjax = - window.history && window.history.pushState && window.history.replaceState && - // pushState isn't reliable on iOS until 5. - !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/) - -$.support.pjax ? enable() : disable() - -})(jQuery); diff --git a/source/vendors/nprogress/.bower.json b/source/vendors/nprogress/.bower.json deleted file mode 100644 index 9865959f2..000000000 --- a/source/vendors/nprogress/.bower.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "nprogress", - "repo": "rstacruz/nprogress", - "description": "slim progress bar", - "version": "0.1.6", - "keywords": [ - "progress", - "bar", - "spinner" - ], - "license": "MIT", - "main": [ - "nprogress.js", - "nprogress.css" - ], - "scripts": [ - "nprogress.js" - ], - "styles": [ - "nprogress.css" - ], - "ignore": [ - "**/.*", - "node_modules", - "components", - "package.json", - "test", - "vendor" - ], - "homepage": "https://github.com/rstacruz/nprogress", - "_release": "0.1.6", - "_resolution": { - "type": "version", - "tag": "v0.1.6", - "commit": "c41da63d8aa511023fe1b2a79a946575e01c2ee3" - }, - "_source": "git://github.com/rstacruz/nprogress.git", - "_target": "*", - "_originalSource": "nprogress" -} \ No newline at end of file diff --git a/source/vendors/nprogress/History.md b/source/vendors/nprogress/History.md deleted file mode 100644 index a1a31985d..000000000 --- a/source/vendors/nprogress/History.md +++ /dev/null @@ -1,50 +0,0 @@ -## v0.1.6 - June 25, 2014 - - * Add support for specifying a different parent container. (#86, #14, #33, #39, @jonjaques) - * Fix Require.js support. (#64, #75, #85) - * Fix component support. (#84) - -## v0.1.5 - June 21, 2014 - - * Release properly to the npm registry. (#82) - -## v0.1.4 - June 21, 2014 - - * Bower: don't download package.json. Fixes browserify + jquery problem. (#65, @amelon) - * Fix compatibility with Karma. (#75, @shaqq) - -Internal changes: - - * Use SVG to display Travis-CI badge. (#77, @Mithgol) - * Readme: update .inc() and .status docs (#34, @lacivert) - * Readme: update year (#73, @rwholmes) - -## v0.1.3 - March 26, 2014 - - * Remove jQuery dependency. (#28, #7, #17, @rurjur) - * Update Readme to change year to 2014. (#73, @rwholmes) - -## v0.1.2 - August 21, 2013 - -Minor update for proper [Bower] and [Component] support. - - * Add Bower support. - * Fix Component support and use `component/jquery` as a dependency. - -## v0.1.1 - August 21, 2013 - -Minor fixes. - - * Removed the busy cursor that occurs when loading. - * Added support for IE7 to IE9. (#3, @markbao) - * Implement `trickleRate` and `trickleSpeed` options. - * Implement the `showSpinner` option to allow removing the spinner. (#5, #9, @rahulcs) - * Registered as a Component in Component.io. - * Updated the Readme with better Turbolinks instructions. (#8) - -## v0.1.0 - August 20, 2013 - -Initial release. - -[Bower]: http://bower.io -[Component]: http://component.io diff --git a/source/vendors/nprogress/License.md b/source/vendors/nprogress/License.md deleted file mode 100644 index 560c4fec3..000000000 --- a/source/vendors/nprogress/License.md +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013-2014 Rico Sta. Cruz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/source/vendors/nprogress/Notes.md b/source/vendors/nprogress/Notes.md deleted file mode 100644 index 3956c416d..000000000 --- a/source/vendors/nprogress/Notes.md +++ /dev/null @@ -1,25 +0,0 @@ -Testing -------- - - $ npm install - $ npm test - -or try it out in the browser: - - $ open test/index.html - -Testing component build ------------------------ - - $ component install - $ component build - $ open test/component.html - -Releasing ---------- - - $ npm test - $ bump *.json nprogress.js # bump version numbers - $ git release 0.1.1 # release to bower/github - $ npm publish # release to npm - $ git push origin master:gh-pages # update the site diff --git a/source/vendors/nprogress/Readme.md b/source/vendors/nprogress/Readme.md deleted file mode 100644 index 61f46d350..000000000 --- a/source/vendors/nprogress/Readme.md +++ /dev/null @@ -1,195 +0,0 @@ -NProgress -========= - -Slim progress bars for Ajax'y applications. Inspired by Google, YouTube, and -Medium. - - -Installation ------------- - -Add [nprogress.js] and [nprogress.css] to your project. - -```html -<script src='nprogress.js'></script> -<link rel='stylesheet' href='nprogress.css'/> -``` - -NProgress is available via [bower] and [npm]. - - $ bower install --save nprogress - $ npm install --save nprogress - -[bower]: http://bower.io/search/?q=nprogress -[npm]: https://www.npmjs.org/package/nprogress - -Basic usage ------------ - -Simply call `start()` and `done()` to control the progress bar. - -~~~ js -NProgress.start(); -NProgress.done(); -~~~ - -Using [Turbolinks] or similar? Ensure you're using Turbolinks 1.3.0+, and use -this: (explained - [here](https://github.com/rstacruz/nprogress/issues/8#issuecomment-23010560)) - -~~~ js -$(document).on('page:fetch', function() { NProgress.start(); }); -$(document).on('page:change', function() { NProgress.done(); }); -$(document).on('page:restore', function() { NProgress.remove(); }); -~~~ - -Ideas ------ - - * Add progress to your Ajax calls! Bind it to the jQuery `ajaxStart` and - `ajaxStop` events. - - * Make a fancy loading bar even without Turbolinks/Pjax! Bind it to - `$(document).ready` and `$(window).load`. - -Advanced usage --------------- - -__Percentages:__ To set a progress percentage, call `.set(n)`, where *n* is a -number between `0..1`. - -~~~ js -NProgress.set(0.0); // Sorta same as .start() -NProgress.set(0.4); -NProgress.set(1.0); // Sorta same as .done() -~~~ - -__Incrementing:__ To increment the progress bar, just use `.inc()`. This -increments it with a random amount. This will never get to 100%: use it for -every image load (or similar). - -~~~ js -NProgress.inc(); -~~~ - -If you want to increment by a specific value, you can pass that as a parameter: - -~~~ js -NProgress.inc(0.2); // This will get the current status value and adds 0.2 until status is 0.994 -~~~ - -__Force-done:__ By passing `true` to `done()`, it will show the progress bar -even if it's not being shown. (The default behavior is that *.done()* will not - do anything if *.start()* isn't called) - -~~~ js -NProgress.done(true); -~~~ - -__Get the status value:__ To get the status value, use `.status` - -Configuration -------------- - -#### `minimum` -Changes the minimum percentage used upon starting. (default: `0.08`) - -~~~ js -NProgress.configure({ minimum: 0.1 }); -~~~ - -#### `template` -You can change the markup using `template`. To keep the progress -bar working, keep an element with `role='bar'` in there. See the [default template] -for reference. - -~~~ js -NProgress.configure({ - template: "<div class='....'>...</div>" -}); -~~~ - -#### `ease` and `speed` -Adjust animation settings using *ease* (a CSS easing string) -and *speed* (in ms). (default: `ease` and `200`) - -~~~ js -NProgress.configure({ ease: 'ease', speed: 500 }); -~~~ - -#### `trickle` -Turn of the automatic incrementing behavior by setting this to `false`. (default: `true`) - -~~~ js -NProgress.configure({ trickle: false }); -~~~ - -#### `trickleRate` and `trickleSpeed` -You can adjust the *trickleRate* (how much to increase per trickle) and -*trickleSpeed* (how often to trickle, in ms). - -~~~ js -NProgress.configure({ trickleRate: 0.02, trickleSpeed: 800 }); -~~~ - -#### `showSpinner` -Turn off loading spinner by setting it to false. (default: `true`) - -~~~ js -NProgress.configure({ showSpinner: false }); -~~~ - -#### `parent` -specify this to change the parent container. (default: `body`) - -~~~ js -NProgress.configure({ parent: '#container' }); -~~~ - -Customization -------------- - -Just edit `nprogress.css` to your liking. Tip: you probably only want to find -and replace occurances of `#29d`. - -The included CSS file is pretty minimal... in fact, feel free to scrap it and -make your own! - -Resources ---------- - - * [New UI Pattern: Website Loading Bars](http://www.usabilitypost.com/2013/08/19/new-ui-pattern-website-loading-bars/) (usabilitypost.com) - -Support -------- - -__Bugs and requests__: submit them through the project's issues tracker.<br> -[![Issues](http://img.shields.io/github/issues/rstacruz/nprogress.svg)]( https://github.com/rstacruz/nprogress/issues ) - -__Questions__: ask them at StackOverflow with the tag *nprogress*.<br> -[![StackOverflow](http://img.shields.io/badge/stackoverflow-nprogress-brightgreen.svg)]( http://stackoverflow.com/questions/tagged/nprogress ) - -__Chat__: join us at gitter.im.<br> -[![Chat](http://img.shields.io/badge/gitter-rstacruz / nprogress-brightgreen.svg)]( https://gitter.im/rstacruz/nprogress ) - -[default template]: -https://github.com/rstacruz/nprogress/blob/master/nprogress.js#L31 -[Turbolinks]: https://github.com/rails/turbolinks -[nprogress.js]: http://ricostacruz.com/nprogress/nprogress.js -[nprogress.css]: http://ricostacruz.com/nprogress/nprogress.css - -Thanks ------- - -**NProgress** © 2013-2014, Rico Sta. Cruz. Released under the [MIT License].<br> -Authored and maintained by Rico Sta. Cruz with help from [contributors]. - -> [ricostacruz.com](http://ricostacruz.com)  ·  -> GitHub [@rstacruz](https://github.com/rstacruz)  ·  -> Twitter [@rstacruz](https://twitter.com/rstacruz) - -[MIT License]: http://mit-license.org/ -[contributors]: http://github.com/rstacruz/jsfuse/contributors - -[![Status](https://api.travis-ci.org/rstacruz/nprogress.svg?branch=master)](http://travis-ci.org/rstacruz/nprogress) -[![npm version](https://img.shields.io/npm/v/nprogress.png)](https://npmjs.org/package/nprogress "View this project on npm") diff --git a/source/vendors/nprogress/bower.json b/source/vendors/nprogress/bower.json deleted file mode 100644 index d3b80994a..000000000 --- a/source/vendors/nprogress/bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "nprogress", - "repo": "rstacruz/nprogress", - "description": "slim progress bar", - "version": "0.1.6", - "keywords": [ - "progress", - "bar", - "spinner" - ], - "license": "MIT", - "main": ["nprogress.js", "nprogress.css"], - "scripts": [ - "nprogress.js" - ], - "styles": [ - "nprogress.css" - ], - "ignore": [ - "**/.*", - "node_modules", - "components", - "package.json", - "test", - "vendor" - ] -} diff --git a/source/vendors/nprogress/component.json b/source/vendors/nprogress/component.json deleted file mode 100644 index e1539bfd5..000000000 --- a/source/vendors/nprogress/component.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "nprogress", - "repo": "rstacruz/nprogress", - "description": "slim progress bar", - "version": "0.1.6", - "keywords": ["progress","bar","spinner"], - "dependencies": { - "component/jQuery": "*" - }, - "development": { - "chaijs/chai": "*", - "visionmedia/mocha": "*" - }, - "license": "MIT", - "main": "nprogress.js", - "scripts": [ - "nprogress.js" - ], - "styles": [ - "nprogress.css" - ] -} diff --git a/source/vendors/nprogress/index.html b/source/vendors/nprogress/index.html deleted file mode 100644 index d71fccc9b..000000000 --- a/source/vendors/nprogress/index.html +++ /dev/null @@ -1,84 +0,0 @@ -<!DOCTYPE html> -<html lang='en'> -<head> - <meta charset='utf-8'> - <title>NProgress: slim progress bars in JavaScript - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/vendors/nprogress/nprogress.css b/source/vendors/nprogress/nprogress.css deleted file mode 100644 index 6752d7f4b..000000000 --- a/source/vendors/nprogress/nprogress.css +++ /dev/null @@ -1,74 +0,0 @@ -/* Make clicks pass-through */ -#nprogress { - pointer-events: none; -} - -#nprogress .bar { - background: #29d; - - position: fixed; - z-index: 1031; - top: 0; - left: 0; - - width: 100%; - height: 2px; -} - -/* Fancy blur effect */ -#nprogress .peg { - display: block; - position: absolute; - right: 0px; - width: 100px; - height: 100%; - box-shadow: 0 0 10px #29d, 0 0 5px #29d; - opacity: 1.0; - - -webkit-transform: rotate(3deg) translate(0px, -4px); - -ms-transform: rotate(3deg) translate(0px, -4px); - transform: rotate(3deg) translate(0px, -4px); -} - -/* Remove these to get rid of the spinner */ -#nprogress .spinner { - display: block; - position: fixed; - z-index: 1031; - top: 15px; - right: 15px; -} - -#nprogress .spinner-icon { - width: 18px; - height: 18px; - box-sizing: border-box; - - border: solid 2px transparent; - border-top-color: #29d; - border-left-color: #29d; - border-radius: 50%; - - -webkit-animation: nprogress-spinner 400ms linear infinite; - animation: nprogress-spinner 400ms linear infinite; -} - -.nprogress-custom-parent { - overflow: hidden; - position: relative; -} - -.nprogress-custom-parent #nprogress .spinner, -.nprogress-custom-parent #nprogress .bar { - position: absolute; -} - -@-webkit-keyframes nprogress-spinner { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(360deg); } -} -@keyframes nprogress-spinner { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - diff --git a/source/vendors/nprogress/nprogress.js b/source/vendors/nprogress/nprogress.js deleted file mode 100644 index 124351e95..000000000 --- a/source/vendors/nprogress/nprogress.js +++ /dev/null @@ -1,476 +0,0 @@ -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -;(function(root, factory) { - - if (typeof define === 'function' && define.amd) { - define(factory); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.NProgress = factory(); - } - -})(this, function() { - var NProgress = {}; - - NProgress.version = '0.1.6'; - - var Settings = NProgress.settings = { - minimum: 0.08, - easing: 'ease', - positionUsing: '', - speed: 200, - trickle: true, - trickleRate: 0.02, - trickleSpeed: 800, - showSpinner: true, - barSelector: '[role="bar"]', - spinnerSelector: '[role="spinner"]', - parent: 'body', - template: '
' - }; - - /** - * Updates configuration. - * - * NProgress.configure({ - * minimum: 0.1 - * }); - */ - NProgress.configure = function(options) { - var key, value; - for (key in options) { - value = options[key]; - if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value; - } - - return this; - }; - - /** - * Last number. - */ - - NProgress.status = null; - - /** - * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`. - * - * NProgress.set(0.4); - * NProgress.set(1.0); - */ - - NProgress.set = function(n) { - var started = NProgress.isStarted(); - - n = clamp(n, Settings.minimum, 1); - NProgress.status = (n === 1 ? null : n); - - var progress = NProgress.render(!started), - bar = progress.querySelector(Settings.barSelector), - speed = Settings.speed, - ease = Settings.easing; - - progress.offsetWidth; /* Repaint */ - - queue(function(next) { - // Set positionUsing if it hasn't already been set - if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); - - // Add transition - css(bar, barPositionCSS(n, speed, ease)); - - if (n === 1) { - // Fade out - css(progress, { - transition: 'none', - opacity: 1 - }); - progress.offsetWidth; /* Repaint */ - - setTimeout(function() { - css(progress, { - transition: 'all ' + speed + 'ms linear', - opacity: 0 - }); - setTimeout(function() { - NProgress.remove(); - next(); - }, speed); - }, speed); - } else { - setTimeout(next, speed); - } - }); - - return this; - }; - - NProgress.isStarted = function() { - return typeof NProgress.status === 'number'; - }; - - /** - * Shows the progress bar. - * This is the same as setting the status to 0%, except that it doesn't go backwards. - * - * NProgress.start(); - * - */ - NProgress.start = function() { - if (!NProgress.status) NProgress.set(0); - - var work = function() { - setTimeout(function() { - if (!NProgress.status) return; - NProgress.trickle(); - work(); - }, Settings.trickleSpeed); - }; - - if (Settings.trickle) work(); - - return this; - }; - - /** - * Hides the progress bar. - * This is the *sort of* the same as setting the status to 100%, with the - * difference being `done()` makes some placebo effect of some realistic motion. - * - * NProgress.done(); - * - * If `true` is passed, it will show the progress bar even if its hidden. - * - * NProgress.done(true); - */ - - NProgress.done = function(force) { - if (!force && !NProgress.status) return this; - - return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); - }; - - /** - * Increments by a random amount. - */ - - NProgress.inc = function(amount) { - var n = NProgress.status; - - if (!n) { - return NProgress.start(); - } else { - if (typeof amount !== 'number') { - amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); - } - - n = clamp(n + amount, 0, 0.994); - return NProgress.set(n); - } - }; - - NProgress.trickle = function() { - return NProgress.inc(Math.random() * Settings.trickleRate); - }; - - /** - * Waits for all supplied jQuery promises and - * increases the progress as the promises resolve. - * - * @param $promise jQUery Promise - */ - (function() { - var initial = 0, current = 0; - - NProgress.promise = function($promise) { - if (!$promise || $promise.state() == "resolved") { - return this; - } - - if (current == 0) { - NProgress.start(); - } - - initial++; - current++; - - $promise.always(function() { - current--; - if (current == 0) { - initial = 0; - NProgress.done(); - } else { - NProgress.set((initial - current) / initial); - } - }); - - return this; - }; - - })(); - - /** - * (Internal) renders the progress bar markup based on the `template` - * setting. - */ - - NProgress.render = function(fromStart) { - if (NProgress.isRendered()) return document.getElementById('nprogress'); - - addClass(document.documentElement, 'nprogress-busy'); - - var progress = document.createElement('div'); - progress.id = 'nprogress'; - progress.innerHTML = Settings.template; - - var bar = progress.querySelector(Settings.barSelector), - perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0), - parent = document.querySelector(Settings.parent), - spinner; - - css(bar, { - transition: 'all 0 linear', - transform: 'translate3d(' + perc + '%,0,0)' - }); - - if (!Settings.showSpinner) { - spinner = progress.querySelector(Settings.spinnerSelector); - spinner && removeElement(spinner); - } - - if (parent != document.body) { - addClass(parent, 'nprogress-custom-parent'); - } - - parent.appendChild(progress); - return progress; - }; - - /** - * Removes the element. Opposite of render(). - */ - - NProgress.remove = function() { - removeClass(document.documentElement, 'nprogress-busy'); - removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent') - var progress = document.getElementById('nprogress'); - progress && removeElement(progress); - }; - - /** - * Checks if the progress bar is rendered. - */ - - NProgress.isRendered = function() { - return !!document.getElementById('nprogress'); - }; - - /** - * Determine which positioning CSS rule to use. - */ - - NProgress.getPositioningCSS = function() { - // Sniff on document.body.style - var bodyStyle = document.body.style; - - // Sniff prefixes - var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' : - ('MozTransform' in bodyStyle) ? 'Moz' : - ('msTransform' in bodyStyle) ? 'ms' : - ('OTransform' in bodyStyle) ? 'O' : ''; - - if (vendorPrefix + 'Perspective' in bodyStyle) { - // Modern browsers with 3D support, e.g. Webkit, IE10 - return 'translate3d'; - } else if (vendorPrefix + 'Transform' in bodyStyle) { - // Browsers without 3D support, e.g. IE9 - return 'translate'; - } else { - // Browsers without translate() support, e.g. IE7-8 - return 'margin'; - } - }; - - /** - * Helpers - */ - - function clamp(n, min, max) { - if (n < min) return min; - if (n > max) return max; - return n; - } - - /** - * (Internal) converts a percentage (`0..1`) to a bar translateX - * percentage (`-100%..0%`). - */ - - function toBarPerc(n) { - return (-1 + n) * 100; - } - - - /** - * (Internal) returns the correct CSS for changing the bar's - * position given an n percentage, and speed and ease from Settings - */ - - function barPositionCSS(n, speed, ease) { - var barCSS; - - if (Settings.positionUsing === 'translate3d') { - barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' }; - } else if (Settings.positionUsing === 'translate') { - barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' }; - } else { - barCSS = { 'margin-left': toBarPerc(n)+'%' }; - } - - barCSS.transition = 'all '+speed+'ms '+ease; - - return barCSS; - } - - /** - * (Internal) Queues a function to be executed. - */ - - var queue = (function() { - var pending = []; - - function next() { - var fn = pending.shift(); - if (fn) { - fn(next); - } - } - - return function(fn) { - pending.push(fn); - if (pending.length == 1) next(); - }; - })(); - - /** - * (Internal) Applies css properties to an element, similar to the jQuery - * css method. - * - * While this helper does assist with vendor prefixed property names, it - * does not perform any manipulation of values prior to setting styles. - */ - - var css = (function() { - var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ], - cssProps = {}; - - function camelCase(string) { - return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) { - return letter.toUpperCase(); - }); - } - - function getVendorProp(name) { - var style = document.body.style; - if (name in style) return name; - - var i = cssPrefixes.length, - capName = name.charAt(0).toUpperCase() + name.slice(1), - vendorName; - while (i--) { - vendorName = cssPrefixes[i] + capName; - if (vendorName in style) return vendorName; - } - - return name; - } - - function getStyleProp(name) { - name = camelCase(name); - return cssProps[name] || (cssProps[name] = getVendorProp(name)); - } - - function applyCss(element, prop, value) { - prop = getStyleProp(prop); - element.style[prop] = value; - } - - return function(element, properties) { - var args = arguments, - prop, - value; - - if (args.length == 2) { - for (prop in properties) { - value = properties[prop]; - if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value); - } - } else { - applyCss(element, args[1], args[2]); - } - } - })(); - - /** - * (Internal) Determines if an element or space separated list of class names contains a class name. - */ - - function hasClass(element, name) { - var list = typeof element == 'string' ? element : classList(element); - return list.indexOf(' ' + name + ' ') >= 0; - } - - /** - * (Internal) Adds a class to an element. - */ - - function addClass(element, name) { - var oldList = classList(element), - newList = oldList + name; - - if (hasClass(oldList, name)) return; - - // Trim the opening space. - element.className = newList.substring(1); - } - - /** - * (Internal) Removes a class from an element. - */ - - function removeClass(element, name) { - var oldList = classList(element), - newList; - - if (!hasClass(element, name)) return; - - // Replace the class name. - newList = oldList.replace(' ' + name + ' ', ' '); - - // Trim the opening and closing spaces. - element.className = newList.substring(1, newList.length - 1); - } - - /** - * (Internal) Gets a space separated list of the class names on the element. - * The list is wrapped with a single space on each end to facilitate finding - * matches within the list. - */ - - function classList(element) { - return (' ' + (element.className || '') + ' ').replace(/\s+/gi, ' '); - } - - /** - * (Internal) Removes an element from the DOM. - */ - - function removeElement(element) { - element && element.parentNode && element.parentNode.removeChild(element); - } - - return NProgress; -}); - diff --git a/source/vendors/nprogress/support/extras.css b/source/vendors/nprogress/support/extras.css deleted file mode 100644 index 21bb39bc7..000000000 --- a/source/vendors/nprogress/support/extras.css +++ /dev/null @@ -1,4 +0,0 @@ -/* Make the entire page show a busy cursor */ -.nprogress-busy body { - cursor: wait; -} diff --git a/source/vendors/nprogress/support/style.css b/source/vendors/nprogress/support/style.css deleted file mode 100644 index 1a78acf2b..000000000 --- a/source/vendors/nprogress/support/style.css +++ /dev/null @@ -1,215 +0,0 @@ -i, b { - font-style: normal; - font-weight: 400; -} - -body, html { - padding: 0; - margin: 0; -} - -body { - background: white; -} - -body, td, input, textarea { - font-family: source sans pro, sans-serif; - font-size: 14px; - line-height: 1.5; - color: #222; -} - -button { - cursor: pointer; -} - -* { - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; -} - -.nprogress-logo { - display: inline-block; - - width: 100px; - height: 20px; - border: solid 4px #2d9; - border-radius: 10px; - - position: relative; -} -.nprogress-logo:after { - content: ''; - display: block; - - position: absolute; - top: 4px; - left: 4px; - bottom: 4px; - width: 40%; - - background: #2d9; - border-radius: 3px; -} - -.fade { - transition: all 300ms linear 700ms; - -webkit-transform: translate3d(0,0,0); - -moz-transform: translate3d(0,0,0); - -ms-transform: translate3d(0,0,0); - -o-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - opacity: 1; -} - -.fade.out { - opacity: 0; -} - -button { - margin: 0; - padding: 0; - border: 0; - outline: 0; -} - -.button { - display: inline-block; - text-decoration: none; - - background: #eee; - color: #777; - border-radius: 2px; - - padding: 8px 10px; - font-weight: 700; - text-align: left; -} - -.button.play:before { - content: '\25b6'; -} - -.button:hover { - background: #2d9; - color: #fff; -} - -.button.primary { - background: #2d9; - color: #fff; -} -.button.primary:hover { - background: #1c8; -} - -.button:active { - background: #2d9; - box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.6); -} - -.controls { - text-align: left; - margin: 0 auto; - max-width: 300px; - color: #666; -} - -.controls .button { - width: 40px; - margin-right: 10px; - text-align: center; -} - -.controls i { - color: #999; -} - -.controls b { - color: #29d; - font-weight: 700; -} - -.controls { - font-size: 0.9em; -} - -.page-header { - text-align: center; - max-width: 400px; - padding: 3em 20px; - margin: 0 auto; -} - -.page-header h1 { - font-size: 2.0em; - text-align: center; - font-weight: 200; - line-height: 1.3; - color: #333; - margin: 0; -} - -p.brief { - line-height: 1.4; - font-style: italic; - color: #888; -} - -p.brief.big { - font-size: 1.1em; -} - -@media (min-width: 480px) { - .page-header h1 { - margin-top: 1em; - margin-bottom: 0.4em; - } -} - -.page-header h1 i { - color: #aaa; - font-style: normal; - font-weight: 200; -} - -@media (min-width: 480px) { - .page-header h1 { - font-size: 3em; } - .page-header { - padding: 4.5em 20px 3.5em 20px; - } -} - -/* --- */ - -.actions { - text-align: center; - margin: 2em 0; -} - -@media (min-width: 480px) { - .actions { - margin: 4.5em 0 3.5em 0; - } -} - -.big.button { - padding-left: 30px; - padding-right: 30px; - font-size: 1.1em; -} - - -/* ---- */ - -div.hr-rule { - height: 1px; - width: 100px; - margin: 40px auto; - background: #ddd; -} -.share-buttons { - margin: 0 auto; - text-align: center; -}