From b34e35fbb81d6b38312d2a1f58dd29c6c2761907 Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Fri, 5 Oct 2012 21:03:50 +0200 Subject: [PATCH] improvements to the asset pipeline thanks to @twinturbo --- AssetFile | 40 +- Gemfile.lock | 9 +- assets/scripts/vendor/jquery.mockjax.js | 527 ---- lib/rake-pipeline/travis.rb | 13 +- lib/rake-pipeline/travis/filters.rb | 131 +- lib/rake-pipeline/travis/helpers.rb | 32 + lib/rake-pipeline/travis/version.rb | 2 +- public/images/ui/clock.png | Bin 1160 -> 0 bytes public/images/ui/github-admin.png | Bin 1087 -> 0 bytes public/images/ui/github-forks.png | Bin 1093 -> 0 bytes public/images/ui/github-watchers.png | Bin 1085 -> 0 bytes public/images/ui/help.png | Bin 1048 -> 0 bytes public/images/ui/info.png | Bin 1028 -> 0 bytes public/images/ui/log.fold.closed.2.png | Bin 1025 -> 0 bytes public/images/ui/log.fold.closed.png | Bin 1026 -> 0 bytes public/images/ui/log.fold.open.2.png | Bin 1026 -> 0 bytes public/images/ui/log.fold.open.png | Bin 1027 -> 0 bytes public/images/ui/logo.png | Bin 3003 -> 0 bytes public/images/ui/off.png | Bin 1302 -> 0 bytes public/images/ui/on.png | Bin 1442 -> 0 bytes public/images/ui/org.png | Bin 1199 -> 0 bytes public/images/ui/search.png | Bin 1074 -> 0 bytes public/images/ui/slider-closed.png | Bin 972 -> 0 bytes public/images/ui/slider-open.png | Bin 972 -> 0 bytes public/images/ui/spinner.gif | Bin 1709 -> 0 bytes public/images/ui/spinner_long.gif | Bin 1735 -> 0 bytes public/images/ui/to-top.png | Bin 972 -> 0 bytes public/images/ui/tools-button.png | Bin 1457 -> 0 bytes public/images/ui/user.png | Bin 1119 -> 0 bytes public/images/ui/workers-close.png | Bin 972 -> 0 bytes public/images/ui/workers-open.png | Bin 970 -> 0 bytes public/scripts/app.js | 547 +--- public/scripts/app.min.js | 3116 ++++++++++++++++++++++- public/version | 2 +- spec/lib/app/config_spec.rb | 2 +- 35 files changed, 3256 insertions(+), 1165 deletions(-) delete mode 100644 assets/scripts/vendor/jquery.mockjax.js create mode 100644 lib/rake-pipeline/travis/helpers.rb delete mode 100644 public/images/ui/clock.png delete mode 100644 public/images/ui/github-admin.png delete mode 100644 public/images/ui/github-forks.png delete mode 100644 public/images/ui/github-watchers.png delete mode 100644 public/images/ui/help.png delete mode 100644 public/images/ui/info.png delete mode 100644 public/images/ui/log.fold.closed.2.png delete mode 100644 public/images/ui/log.fold.closed.png delete mode 100644 public/images/ui/log.fold.open.2.png delete mode 100644 public/images/ui/log.fold.open.png delete mode 100644 public/images/ui/logo.png delete mode 100644 public/images/ui/off.png delete mode 100644 public/images/ui/on.png delete mode 100644 public/images/ui/org.png delete mode 100644 public/images/ui/search.png delete mode 100644 public/images/ui/slider-closed.png delete mode 100644 public/images/ui/slider-open.png delete mode 100644 public/images/ui/spinner.gif delete mode 100644 public/images/ui/spinner_long.gif delete mode 100644 public/images/ui/to-top.png delete mode 100644 public/images/ui/tools-button.png delete mode 100644 public/images/ui/user.png delete mode 100644 public/images/ui/workers-close.png delete mode 100644 public/images/ui/workers-open.png diff --git a/AssetFile b/AssetFile index e92d0adc..a16da069 100644 --- a/AssetFile +++ b/AssetFile @@ -18,7 +18,7 @@ Travis::Version.update output 'public/scripts' input paths[:scripts] do match '**/*.hbs' do - filter Travis::HandlebarsFilter + travis_handlebars concat 'app/templates.js' end @@ -26,40 +26,48 @@ input paths[:scripts] do coffee_script end - match %r(^(?!vendor\/).*\.js$) do - modules = proc { |input| input.path.gsub(%r((^app/|^lib/|\.js$)), '') } - minispade(string: true, rewrite_requires: true, module_id_generator: modules) - concat [], ['dev/app.js', 'min/app.js'] - end - match 'vendor/**/*.js' do precedence = %w(jquery.min minispade handlebars ember).map { |name| "vendor/#{name}.js" } - concat precedence, ['dev/vendor.js', 'min/vendor.js'] + safe_concat precedence, 'vendor.js' end - match 'min/**/*.js' do - filter Travis::ProductionFilter - uglify max_line_length: 32 * 1024, squeeze: true - filter Travis::SafeConcatFilter do - 'app.min.js' - end + match '**/*.js' do + copy { |path| ["dev/#{path}", "min/#{path}"] } + end + + match %r(^dev/(?!vendor).*\.js$) do + modules = proc { |input| input.path.gsub(%r((^dev/|app/|lib/|\.js$)), '') } + minispade(string: true, rewrite_requires: true, module_id_generator: modules) end match 'dev/**/*.js' do - concat 'app.js' + concat ['dev/vendor.js'], 'app.js' + end + + match %r(^min/(?!vendor).*\.js$) do + modules = proc { |input| input.path.gsub(%r((^min/|app/|lib/|\.js$)), '') } + minispade(string: false, rewrite_requires: true, module_id_generator: modules) + end + + match 'min/**/*.js' do + concat ['min/vendor.js'], 'min/app.js' + strip_debug + uglify squeeze: true, max_line_length: 200 + copy 'app.min.js' end end output 'public/styles' input paths[:styles] do match '**/*.{scss,sass}' do - filter Rake::Pipeline::Web::Filters::SassFilter + sass concat [], 'app.css' end end output 'public/images' input paths[:images] do + skip %r(^ui/) match '**/*' do copy end diff --git a/Gemfile.lock b/Gemfile.lock index c2055131..0c5bd3b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,8 +1,9 @@ GIT remote: git://github.com/livingsocial/rake-pipeline.git - revision: 3465e0e3e134bf52ddf5d138e8c8262412080095 + revision: 3914452278165b7eb3a79071d3b63b46fee59a2f specs: rake-pipeline (0.6.0) + json rake (~> 0.9.0) thor @@ -42,7 +43,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-api.git - revision: c9c9dc61d8e2f24b331fd0e1b1549aff32178b29 + revision: f7c522278eb7fdc9ccbf96af711fe38fa4fb4674 specs: travis-api (0.0.1) backports (~> 2.5) @@ -88,7 +89,7 @@ GIT GIT remote: git://github.com/wycats/rake-pipeline-web-filters.git - revision: e14e78ae70d0d25b1668c5273e80cd05a4ee52e6 + revision: f28f5809d6a3e580401a0c589d54e6ad28f34a26 specs: rake-pipeline-web-filters (0.6.0) rack @@ -223,7 +224,7 @@ GEM rdoc (3.12) json (~> 1.4) redcarpet (2.1.1) - redis (3.0.1) + redis (3.0.2) rerun (0.7.1) listen rollout (1.1.0) diff --git a/assets/scripts/vendor/jquery.mockjax.js b/assets/scripts/vendor/jquery.mockjax.js deleted file mode 100644 index 27fbfc80..00000000 --- a/assets/scripts/vendor/jquery.mockjax.js +++ /dev/null @@ -1,527 +0,0 @@ -/*! - * MockJax - jQuery Plugin to Mock Ajax requests - * - * Version: 1.5.0pre - * Released: - * Home: http://github.com/appendto/jquery-mockjax - * Author: Jonathan Sharp (http://jdsharp.com) - * License: MIT,GPL - * - * Copyright (c) 2011 appendTo LLC. - * Dual licensed under the MIT or GPL licenses. - * http://appendto.com/open-source-licenses - */ -(function($) { - var _ajax = $.ajax, - mockHandlers = [], - CALLBACK_REGEX = /=\?(&|$)/, - jsc = (new Date()).getTime(); - - - // Parse the given XML string. - function parseXML(xml) { - if ( window['DOMParser'] == undefined && window.ActiveXObject ) { - DOMParser = function() { }; - DOMParser.prototype.parseFromString = function( xmlString ) { - var doc = new ActiveXObject('Microsoft.XMLDOM'); - doc.async = 'false'; - doc.loadXML( xmlString ); - return doc; - }; - } - - try { - var xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' ); - if ( $.isXMLDoc( xmlDoc ) ) { - var err = $('parsererror', xmlDoc); - if ( err.length == 1 ) { - throw('Error: ' + $(xmlDoc).text() ); - } - } else { - throw('Unable to parse XML'); - } - } catch( e ) { - var msg = ( e.name == undefined ? e : e.name + ': ' + e.message ); - $(document).trigger('xmlParseError', [ msg ]); - return undefined; - } - return xmlDoc; - } - - // Trigger a jQuery event - function trigger(s, type, args) { - (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args); - } - - // Check if the data field on the mock handler and the request match. This - // can be used to restrict a mock handler to being used only when a certain - // set of data is passed to it. - function isMockDataEqual( mock, live ) { - var identical = false; - // Test for situations where the data is a querystring (not an object) - if (typeof live === 'string') { - // Querystring may be a regex - return $.isFunction( mock.test ) ? mock.test(live) : mock == live; - } - $.each(mock, function(k, v) { - if ( live[k] === undefined ) { - identical = false; - return identical; - } else { - identical = true; - if ( typeof live[k] == 'object' ) { - return isMockDataEqual(mock[k], live[k]); - } else { - if ( $.isFunction( mock[k].test ) ) { - identical = mock[k].test(live[k]); - } else { - identical = ( mock[k] == live[k] ); - } - return identical; - } - } - }); - - return identical; - } - - // Check the given handler should mock the given request - function getMockForRequest( handler, requestSettings ) { - // If the mock was registered with a function, let the function decide if we - // want to mock this request - if ( $.isFunction(handler) ) { - return handler( requestSettings ); - } - - // Inspect the URL of the request and check if the mock handler's url - // matches the url for this ajax request - if ( $.isFunction(handler.url.test) ) { - // The user provided a regex for the url, test it - if ( !handler.url.test( requestSettings.url ) ) { - return null; - } - } else { - // Look for a simple wildcard '*' or a direct URL match - var star = handler.url.indexOf('*'); - if (handler.url !== requestSettings.url && star === -1 || - !new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g, "\\$&").replace('*', '.+')).test(requestSettings.url)) { - return null; - } - } - - // Inspect the data submitted in the request (either POST body or GET query string) - if ( handler.data && requestSettings.data ) { - if ( !isMockDataEqual(handler.data, requestSettings.data) ) { - // They're not identical, do not mock this request - return null; - } - } - // Inspect the request type - if ( handler && handler.type && - handler.type.toLowerCase() != requestSettings.type.toLowerCase() ) { - // The request type doesn't match (GET vs. POST) - return null; - } - - return handler; - } - - // If logging is enabled, log the mock to the console - function logMock( mockHandler, requestSettings ) { - var c = $.extend({}, $.mockjaxSettings, mockHandler); - if ( c.log && $.isFunction(c.log) ) { - var url = requestSettings.url - if(requestSettings.data) { - params = [] - for(key in requestSettings.data) params.push(key + '=' + requestSettings.data[key]) - url = url + '?' + params.join('&') - } - c.log('MOCK ' + requestSettings.type.toUpperCase() + ': ' + url, $.extend({}, requestSettings)); - } - } - - // Process the xhr objects send operation - function _xhrSend(mockHandler, requestSettings, origSettings) { - - // This is a substitute for < 1.4 which lacks $.proxy - var process = (function(that) { - return function() { - return (function() { - // The request has returned - this.status = mockHandler.status; - this.statusText = mockHandler.statusText; - this.readyState = 4; - - // We have an executable function, call it to give - // the mock handler a chance to update it's data - if ( $.isFunction(mockHandler.response) ) { - mockHandler.response(origSettings); - } - // Copy over our mock to our xhr object before passing control back to - // jQuery's onreadystatechange callback - if ( requestSettings.dataType == 'json' && ( typeof mockHandler.responseText == 'object' ) ) { - this.responseText = JSON.stringify(mockHandler.responseText); - } else if ( requestSettings.dataType == 'xml' ) { - if ( typeof mockHandler.responseXML == 'string' ) { - this.responseXML = parseXML(mockHandler.responseXML); - } else { - this.responseXML = mockHandler.responseXML; - } - } else { - this.responseText = mockHandler.responseText; - } - if( typeof mockHandler.status == 'number' || typeof mockHandler.status == 'string' ) { - this.status = mockHandler.status; - } - if( typeof mockHandler.statusText === "string") { - this.statusText = mockHandler.statusText; - } - // jQuery < 1.4 doesn't have onreadystate change for xhr - if ( $.isFunction(this.onreadystatechange) ) { - if( mockHandler.isTimeout) { - this.status = -1; - } - this.onreadystatechange( mockHandler.isTimeout ? 'timeout' : undefined ); - } else if ( mockHandler.isTimeout ) { - // Fix for 1.3.2 timeout to keep success from firing. - this.status = -1; - } - }).apply(that); - }; - })(this); - - if ( mockHandler.proxy ) { - // We're proxying this request and loading in an external file instead - _ajax({ - global: false, - url: mockHandler.proxy, - type: mockHandler.proxyType, - data: mockHandler.data, - dataType: requestSettings.dataType === "script" ? "text/plain" : requestSettings.dataType, - complete: function(xhr, txt) { - mockHandler.responseXML = xhr.responseXML; - mockHandler.responseText = xhr.responseText; - mockHandler.status = xhr.status; - mockHandler.statusText = xhr.statusText; - this.responseTimer = setTimeout(process, mockHandler.responseTime || 0); - } - }); - } else { - // type == 'POST' || 'GET' || 'DELETE' - if ( requestSettings.async === false ) { - // TODO: Blocking delay - process(); - } else { - this.responseTimer = setTimeout(process, mockHandler.responseTime || 50); - } - } - } - - // Construct a mocked XHR Object - function xhr(mockHandler, requestSettings, origSettings, origHandler) { - // Extend with our default mockjax settings - mockHandler = $.extend({}, $.mockjaxSettings, mockHandler); - - if (typeof mockHandler.headers === 'undefined') { - mockHandler.headers = {}; - } - if ( mockHandler.contentType ) { - mockHandler.headers['content-type'] = mockHandler.contentType; - } - - return { - status: mockHandler.status, - statusText: mockHandler.statusText, - readyState: 1, - open: function() { }, - send: function() { - origHandler.fired = true; - _xhrSend.call(this, mockHandler, requestSettings, origSettings); - }, - abort: function() { - clearTimeout(this.responseTimer); - }, - setRequestHeader: function(header, value) { - mockHandler.headers[header] = value; - }, - getResponseHeader: function(header) { - // 'Last-modified', 'Etag', 'content-type' are all checked by jQuery - if ( mockHandler.headers && mockHandler.headers[header] ) { - // Return arbitrary headers - return mockHandler.headers[header]; - } else if ( header.toLowerCase() == 'last-modified' ) { - return mockHandler.lastModified || (new Date()).toString(); - } else if ( header.toLowerCase() == 'etag' ) { - return mockHandler.etag || ''; - } else if ( header.toLowerCase() == 'content-type' ) { - return mockHandler.contentType || 'text/plain'; - } - }, - getAllResponseHeaders: function() { - var headers = ''; - $.each(mockHandler.headers, function(k, v) { - headers += k + ': ' + v + "\n"; - }); - return headers; - } - }; - } - - // Process a JSONP mock request. - function processJsonpMock( requestSettings, mockHandler, origSettings ) { - // Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here - // because there isn't an easy hook for the cross domain script tag of jsonp - - processJsonpUrl( requestSettings ); - - requestSettings.dataType = "json"; - if(requestSettings.data && CALLBACK_REGEX.test(requestSettings.data) || CALLBACK_REGEX.test(requestSettings.url)) { - createJsonpCallback(requestSettings, mockHandler); - - // We need to make sure - // that a JSONP style response is executed properly - - var rurl = /^(\w+:)?\/\/([^\/?#]+)/, - parts = rurl.exec( requestSettings.url ), - remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host); - - requestSettings.dataType = "script"; - if(requestSettings.type.toUpperCase() === "GET" && remote ) { - var newMockReturn = processJsonpRequest( requestSettings, mockHandler, origSettings ); - - // Check if we are supposed to return a Deferred back to the mock call, or just - // signal success - if(newMockReturn) { - return newMockReturn; - } else { - return true; - } - } - } - return null; - } - - // Append the required callback parameter to the end of the request URL, for a JSONP request - function processJsonpUrl( requestSettings ) { - if ( requestSettings.type.toUpperCase() === "GET" ) { - if ( !CALLBACK_REGEX.test( requestSettings.url ) ) { - requestSettings.url += (/\?/.test( requestSettings.url ) ? "&" : "?") + - (requestSettings.jsonp || "callback") + "=?"; - } - } else if ( !requestSettings.data || !CALLBACK_REGEX.test(requestSettings.data) ) { - requestSettings.data = (requestSettings.data ? requestSettings.data + "&" : "") + (requestSettings.jsonp || "callback") + "=?"; - } - } - - // Process a JSONP request by evaluating the mocked response text - function processJsonpRequest( requestSettings, mockHandler, origSettings ) { - // Synthesize the mock request for adding a script tag - var callbackContext = origSettings && origSettings.context || requestSettings, - newMock = null; - - - // If the response handler on the moock is a function, call it - if ( mockHandler.response && $.isFunction(mockHandler.response) ) { - mockHandler.response(origSettings); - } else { - - // Evaluate the responseText javascript in a global context - if( typeof mockHandler.responseText === 'object' ) { - $.globalEval( '(' + JSON.stringify( mockHandler.responseText ) + ')'); - } else { - $.globalEval( '(' + mockHandler.responseText + ')'); - } - } - - // Successful response - jsonpSuccess( requestSettings, mockHandler ); - jsonpComplete( requestSettings, mockHandler ); - - // If we are running under jQuery 1.5+, return a deferred object - if(jQuery.Deferred){ - newMock = new jQuery.Deferred(); - if(typeof mockHandler.responseText == "object"){ - newMock.resolve( mockHandler.responseText ); - } - else{ - newMock.resolve( jQuery.parseJSON( mockHandler.responseText ) ); - } - } - return newMock; - } - - - // Create the required JSONP callback function for the request - function createJsonpCallback( requestSettings, mockHandler ) { - jsonp = requestSettings.jsonpCallback || ("jsonp" + jsc++); - - // Replace the =? sequence both in the query string and the data - if ( requestSettings.data ) { - requestSettings.data = (requestSettings.data + "").replace(CALLBACK_REGEX, "=" + jsonp + "$1"); - } - - requestSettings.url = requestSettings.url.replace(CALLBACK_REGEX, "=" + jsonp + "$1"); - - - // Handle JSONP-style loading - window[ jsonp ] = window[ jsonp ] || function( tmp ) { - data = tmp; - jsonpSuccess( requestSettings, mockHandler ); - jsonpComplete( requestSettings, mockHandler ); - // Garbage collect - window[ jsonp ] = undefined; - - try { - delete window[ jsonp ]; - } catch(e) {} - - if ( head ) { - head.removeChild( script ); - } - }; - } - - // The JSONP request was successful - function jsonpSuccess(requestSettings, mockHandler) { - // If a local callback was specified, fire it and pass it the data - if ( requestSettings.success ) { - requestSettings.success.call( callbackContext, ( mockHandler.response ? mockHandler.response.toString() : mockHandler.responseText || ''), status, {} ); - } - - // Fire the global callback - if ( requestSettings.global ) { - trigger(requestSettings, "ajaxSuccess", [{}, requestSettings] ); - } - } - - // The JSONP request was completed - function jsonpComplete(requestSettings, mockHandler) { - // Process result - if ( requestSettings.complete ) { - requestSettings.complete.call( callbackContext, {} , status ); - } - - // The request was completed - if ( requestSettings.global ) { - trigger( "ajaxComplete", [{}, requestSettings] ); - } - - // Handle the global AJAX counter - if ( requestSettings.global && ! --jQuery.active ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - - - // The core $.ajax replacement. - function handleAjax( url, origSettings ) { - var mockRequest, requestSettings, mockHandler; - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - origSettings = url; - url = undefined; - } else { - // work around to support 1.5 signature - origSettings.url = url; - } - - // Extend the original settings for the request - requestSettings = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings); - - // Iterate over our mock handlers (in registration order) until we find - // one that is willing to intercept the request - for(var k = 0; k < mockHandlers.length; k++) { - if ( !mockHandlers[k] ) { - continue; - } - - mockHandler = getMockForRequest( mockHandlers[k], requestSettings ); - if(!mockHandler) { - // No valid mock found for this request - continue; - } - - // Handle console logging - logMock( mockHandler, requestSettings ); - - - if ( requestSettings.dataType === "jsonp" ) { - if ((mockRequest = processJsonpMock( requestSettings, mockHandler, origSettings ))) { - // This mock will handle the JSONP request - return mockRequest; - } - } - - - // Removed to fix #54 - keep the mocking data object intact - //mockHandler.data = requestSettings.data; - - mockHandler.cache = requestSettings.cache; - mockHandler.timeout = requestSettings.timeout; - mockHandler.global = requestSettings.global; - - (function(mockHandler, requestSettings, origSettings, origHandler) { - mockRequest = _ajax.call($, $.extend(true, {}, origSettings, { - // Mock the XHR object - xhr: function() { return xhr( mockHandler, requestSettings, origSettings, origHandler ) } - })); - })(mockHandler, requestSettings, origSettings, mockHandlers[k]); - - return mockRequest; - } - - // We don't have a mock request, trigger a normal request - return _ajax.apply($, [origSettings]); - } - - - // Public - - $.extend({ - ajax: handleAjax - }); - - $.mockjaxSettings = { - //url: null, - //type: 'GET', - log: function(msg) { - window['console'] && window.console.log && window.console.log(msg); - }, - status: 200, - statusText: "OK", - responseTime: 500, - isTimeout: false, - contentType: 'text/plain', - response: '', - responseText: '', - responseXML: '', - proxy: '', - proxyType: 'GET', - - lastModified: null, - etag: '', - headers: { - etag: 'IJF@H#@923uf8023hFO@I#H#', - 'content-type' : 'text/plain' - } - }; - - $.mockjax = function(settings) { - var i = mockHandlers.length; - mockHandlers[i] = settings; - return i; - }; - $.mockjaxClear = function(i) { - if ( arguments.length == 1 ) { - mockHandlers[i] = null; - } else { - mockHandlers = []; - } - }; - $.mockjax.handler = function(i) { - if ( arguments.length == 1 ) { - return mockHandlers[i]; - } - }; -})(jQuery); diff --git a/lib/rake-pipeline/travis.rb b/lib/rake-pipeline/travis.rb index fccfacbb..21a9ef13 100644 --- a/lib/rake-pipeline/travis.rb +++ b/lib/rake-pipeline/travis.rb @@ -1,6 +1,9 @@ -module Travis - autoload :HandlebarsFilter, 'rake-pipeline/travis/filters' - autoload :SafeConcatFilter, 'rake-pipeline/travis/filters' - autoload :ProductionFilter, 'rake-pipeline/travis/filters' - autoload :Version, 'rake-pipeline/travis/version' +require 'rake-pipeline' + +module Rake::Pipeline::Travis + autoload :Filters, 'rake-pipeline/travis/filters' + autoload :Helpers, 'rake-pipeline/travis/helpers' + autoload :Version, 'rake-pipeline/travis/version' end + +Rake::Pipeline::DSL::PipelineDSL.send(:include, Rake::Pipeline::Travis::Helpers) diff --git a/lib/rake-pipeline/travis/filters.rb b/lib/rake-pipeline/travis/filters.rb index de5c7e7f..200b66b1 100644 --- a/lib/rake-pipeline/travis/filters.rb +++ b/lib/rake-pipeline/travis/filters.rb @@ -1,70 +1,95 @@ require 'rake-pipeline' + require 'execjs' require 'uglifier' require 'pathname' -module Travis - class HandlebarsFilter < Rake::Pipeline::Filter - class << self - def source - [ - File.read(root.join('lib/rake-pipeline/ember-headless.js')), - File.read(root.join('assets/scripts/vendor/handlebars.js')), - File.read(root.join('assets/scripts/vendor/ember.js')) - ].join("\n") +class Rake::Pipeline + module Travis + module Filters + class Drop < Matcher + def output_files + input_files.reject { |f| f.path =~ @pattern } + end end - def root - @root ||= Pathname.new(File.expand_path('../../../../', __FILE__)) + class Handlebars < Filter + class << self + def source + [ + File.read(root.join('lib/rake-pipeline/ember-headless.js')), + File.read(root.join('assets/scripts/vendor/handlebars.js')), + File.read(root.join('assets/scripts/vendor/ember.js')) + ].join("\n") + end + + def root + @root ||= Pathname.new(File.expand_path('../../../../', __FILE__)) + end + + def context + @@context ||= ExecJS.compile(source) + end + + def compile(source) + context.call('compileHandlebarsTemplate', source + "\n") + end + end + + def generate_output(inputs, output) + inputs.each do |input| + source = self.class.compile(input.read) + source = wrap(name(input.path), source) + output.write source + end + end + + def wrap(name, source) + "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{source});\n" + end + + def name(path) + path.gsub(%r(app/|templates/|.hbs), '') + end end - def context - @@context ||= ExecJS.compile(source) + class SafeConcat < ConcatFilter + def generate_output(inputs, output) + inputs.each do |input| + output.write File.read(input.fullpath) + ";" + end + end end - def compile(source) - context.call('compileHandlebarsTemplate', source + "\n") + class OrderingSafeConcat < SafeConcat + def initialize(ordering, string = nil, &block) + @ordering = ordering + super(string, &block) + end + + def generate_output(inputs, output) + @ordering.reverse.each do |name| + file = inputs.find { |i| i.path == name } + inputs.unshift(inputs.delete(file)) if file + end + super + end end - end - def generate_output(inputs, output) - inputs.each do |input| - source = self.class.compile(input.read) - source = wrap(name(input.path), source) - output.write source + class StripDebug < Filter + def generate_output(inputs, output) + inputs.each do |input| + source = File.read(input.fullpath) + source = strip_debug(source) + source = Uglifier.compile(source) + output.write source + end + end + + def strip_debug(source) + source.gsub(%r{^(\s)*Ember\.(assert|deprecate|warn)\((.*)\).*$}, "") + end end end - - def wrap(name, source) - "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{source});\n" - end - - def name(path) - path.gsub(%r(app/|templates/|.hbs), '') - end - end - - class SafeConcatFilter < Rake::Pipeline::Filter - def generate_output(inputs, output) - inputs.each do |input| - source = File.read(input.fullpath) + ";" - output.write source - end - end - end - - class ProductionFilter < Rake::Pipeline::Filter - def generate_output(inputs, output) - inputs.each do |input| - source = File.read(input.fullpath) - source = strip_debug(source) - source = Uglifier.compile(source) - output.write source - end - end - - def strip_debug(source) - source.gsub(%r{^(\s)*Ember\.(assert|deprecate|warn)\((.*)\).*$}, "") - end end end diff --git a/lib/rake-pipeline/travis/helpers.rb b/lib/rake-pipeline/travis/helpers.rb new file mode 100644 index 00000000..bb13918c --- /dev/null +++ b/lib/rake-pipeline/travis/helpers.rb @@ -0,0 +1,32 @@ +require 'rake-pipeline/dsl' + +class Rake::Pipeline + module Travis + module Helpers + def travis_handlebars(*args, &block) + filter(Filters::Handlebars, *args, &block) + end + + def strip_debug(*args, &block) + filter(Filters::StripDebug, *args, &block) + end + + def safe_concat(*args, &block) + if args.first.kind_of?(Array) + filter(Filters::OrderingSafeConcat, *args, &block) + else + filter(Filters::SafeConcat, *args, &block) + end + # filter(Filters::SafeConcat, *args, &block) + end + + def drop(pattern) + matcher = pipeline.copy(Filters::Drop) + matcher.glob = pattern + pipeline.add_filter matcher + matcher + end + alias :skip :drop + end + end +end diff --git a/lib/rake-pipeline/travis/version.rb b/lib/rake-pipeline/travis/version.rb index 907741ef..386a6f28 100644 --- a/lib/rake-pipeline/travis/version.rb +++ b/lib/rake-pipeline/travis/version.rb @@ -1,7 +1,7 @@ require 'pathname' require 'digest/md5' -module Travis +module Rake::Pipeline::Travis class Version FILE_NAME = 'public/version' SOURCES = %w(AssetFile Gemfile.lock assets) diff --git a/public/images/ui/clock.png b/public/images/ui/clock.png deleted file mode 100644 index 70996793db0eef12d7da291c862af5f090e479b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1160 zcmaJ=Pe>F|93B%SDxo5T>d-J2UEH0SRd?CZ&2(m0Hyn|5sST7IXP!Ff{AuRduGXmz z5-KJ_poS10>R@#!5D76vq0|rwHVhRv@{kaVA(Ud;8+Elq>w}s1evj|_et+M?^0MOe zW9N=x7?$oY;R0wsZhc2n(ZAnlJ%hHh&>MmkS}hC<2EYm>tp?zJMW_P-AV|%(KY)A; zOC{uB2!{AlM${C$U}5YLMMrE5%P)xNg4h5cUIXf6)kDPJjuN;md59aiJjLrQsFzDx z3{cTh78F|=M7Kl~T*31r3=&WP6!3`BsG3Z~L+t1>=xkk+1ik}-4IW}Qs1RR{vzh_$ zTsvhGDJO+HX*->r<8ryOa0f+GB;_D!hmCeI*$#%H@V!MKZ-!LM1UTQGFJyU$dI)uf zB*WpbJ)CXVj5?BbyWN(C!(l@Ro7t>FA!1X_%!C35Owo{aC~GQiDGD`O6Z8-$(%lpk zeP32J_sWC{Mn(jkr0tZIQUb{HheH)*A8o<_IEeSZ!e+2p2V?-4T9YB7#?@w8u5^Yq zfB-cksA-LfDwfx4P&4Z_9cL?Yab6H*)v|Z+JkR)56AG#b{G5kC3U*nR7}lFx=w`jN zkK?jw+DjL*IUL7Ql*8wBdVS8E1eepqCIzT4!IciUj-*^`6cinK=71sJ0g}(q6nrOT zMotYXe>_3f8T%qZ)j{9SajQzm}Dw=i!jkRm!^AYqUs>@4* z-dHTQy}jMu-rm*K)!p5_yu3U&H`m$OxwyEvv9U2TGqbw7y0EaYzP`S;wzj#sIWaLY zGBVQF*Voa}(bLltkH?pmmWGCgrl+T)(dg{#?AX}Y@bK`!z`)kl7E*pZ*=8VLI1H3k zAoH+=RaTz=fv}RFD-1@yS~zB!Hx3ue<@h z7*EyE?xh);qP-O3^)NlG&&$#@zPAVz%~HnM1RvRpg{%;fhR|dw zDwD~O86Rm_6BH8+23-xW*MkrqJF7#<@#uC}MS%ylY^f$x4IOtCr7>d~h6t4D?iDn% zDy!RjWkLm`9Lb~@l6J3D0gB@Pp_*1j+b{w4^Zlo=oywYkN&wrKwq(?}@h&%%$#NEu zpkbv9W2#ccc-nx5oi_qq+?xT?SD;L?8uHRTY*K{NW(S^AVo+ zF^s^3xo)24XxbYQ0zxFvUE%VEJgos8R=CPOSE$K#M?o`DWFA=R3{WDLq2c8#vuf>J z`fKX#ah2M+a5cFUN``V9`&XkYE;K#vu{yTMs182R(X?A=tiQIl%%NX`jt{1U`T6;L zKA+3wmY0_|H#gVT){4dA*4Ea_%1WV7*xueQl}f9tt2;Y83kwVD>+8<@!=Dki1twxi zw>f^6`9;?Ha W+M4cv*|_%#1;V02jDONUdgBklymnsz diff --git a/public/images/ui/github-forks.png b/public/images/ui/github-forks.png deleted file mode 100644 index 147787bb880b4297d5740a9a2937c8d62d760639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmaJ=O=#0l9FM3lCe!Ib+)xOa2SM9>^oxepS(DZkmQvb+J1CeXZ)@1{Ve)3Po%{lI zq7JsxE`A(5xFO7g2tBw%nOYcZ$~+WdB4c_JcdC<7U%IyLu=*f*@Bi}q{r;c1mrPt} zYwc{sFsv=!!>7>R?mR7f(fgF^P#SF=Fxm&x`T)#{Ccq-H-VgA&Dh`4a5arRUA3zAh z_7X~_5B3SYtfZ@M(ZRTF)j(_v3w7IuC=CIK_k%%23ll%{ZwXwH!^B0OKnVs1vP#dG z3DRSUj5IbR1!bc9EFQ91B%lH);(uIv5N(8Vut?2$wagLD6<;R##nt2bN?i22^wncNE2beFTOH6zO&fs?m_u ztXi2+!AM&)NZL&~Db<03@PDYPHqaJKfq(JtDr{v&4M3)VrH_~rYTQ7V!JNIp7+pn zl#Xy-p64iviADXsM%coMU5bk&D` z6J1|lFPFU77bz}J1gFQdiuy^}B-!b87k}I|S`F!HbGAJLGZ)?vN=3*gV@pNbOF|93GHJ4NHh1>oSdpI<)g|*WH}l)OL1r!&$c7#jFgPoq4*0&b(>n>5g6! zu`D5w&K|u)D0H=`4tWU043t2k5;~RC!jgel_C|MC4{Z---uu1zzVG*U9>impYN}6E z69iEcZ4(oCuXUfw3j99fIg-R%9SV1%BT(ZA09hTp{RT7nFc+Y5u|=Rdr6U+8lLQaic=KD*ZpMeaaQZ;;vzs#A)SA!q@zfo44l z>t{(nM{{0ZAP_i9@+`+PEYEPfhYJW^USL_Wuqf=!QoDtO7%BL|R*=ddWC{$E&1UJW zmxfjk!!J_+Z z`B=EJTm}cjxQ*S{=;9Tg9`{%pTWpjD9~gMrEj-qzr}Ja@mtf=Vsqp0FVpUaxRzK+S;0$n#$+%YinzBb939<+vA(L0nDvMiC7Yw`xo)K z{$?Hib}cHlrkvHO#dn8?$;t!qFVuMY_x7iID_!57em{EtWLM_S-4`Q|@2`$LYFQXf z(Z@$WE?htOuh$p!!TF%yyL_B%jor$m2+R8_#t)U&#%q;F`|O#NF4h4mY>nE O6CxUpi8B{(jr;}l-F$Qa diff --git a/public/images/ui/help.png b/public/images/ui/help.png deleted file mode 100644 index cff36cc039ea49c6cd3e40c011374663e4d3d574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmaJ=PiWIn7>`VFOokW1xr2lZJlXu~KN}avOj1`|N@*kZAmUr{wuUWvF?n6HA&B0l zAb1c2Z=wf1>>>qqI}A3R;$RX1kEt$EN)Op=gV8xzT^kHc+ zZ6=8s?zDX`_dL#V{?M8MBuj^9I4KQ#`m{VnjD6qC|NeVBDi8!xiRW&XMnlP>;R8`@5 zF{`DtY%0;=s>rN5(8V3Db;!;3C6VK%5m7KD={1FVVB+crV`sO!agWaD?%V&P?*XHZi d{`bbwA?m^2k;k9I%^M^DmDBR-@}-;i{s3KiU-my3-urf)uM#-ph7pVeYv5rY?F;$Xv%iG(mg1cO{U$jCKHpXo7M*^ zLMa~fqVy>0K|BcRLBWF}_@V{1h}43$)%rk058_1+I@#`SJ-7xYGym{?-~XJ6OyBO7 z=FQCnLA0cMO~f4w7d%mSK5@<3n6r2=fBVlGTsG-dtly$jVC97q&#Ih>#;NOu1a9 z%V8S2!wi>5Bmxbd4`D>e8?}+CbNs_OrtmQ_c4C<|8N{im>(8+8Da1s)u6b=?=#bJtlvFj{v;(_>S5+Zxdq}f&kd{RXE6}EC2+4@7B$PO($a0wDQe0As z$g;$;ypoEglvt$3m7zXj0UOo0#tN5j$PGrpald*+mcpG0e>H zqcHek>(u3qZI`}Wx!5muAB|5hw05L+lrBu~Yuh<{g#A5v^XmAy@paVk?6boUy`>-b ax7{O7G_8`i+}L9V?=qe0ldpB}Kluj&id7W= diff --git a/public/images/ui/log.fold.closed.2.png b/public/images/ui/log.fold.closed.2.png deleted file mode 100644 index fe9ae810b6161b4fa0d498297348d775b532abe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmaJ=&ui0A91p9=EE@=efga?Mfgr5OOZv-(#n~l|D>S9F1p`CaYx3HLHF+_4Thn<{ zF9X4g2fc~jJ?PCHM9_mEc=x1N5&RS8OV@TgSl=P<`~C9ye7-;4H%E>7o#ph^G{q+7&)W+U+@OUrFge(QOm3; zHt__MV1(EU7@OlZHsb)h9ntKbDJvyMae06RuVJTPuqap%{vHCJ!Kb>`Qi&E<-$7%_R+a}PZY zvF%CB+1fH^w)og*+a9vD?(N?D$bN}yjas`h7z|piR;^aEZQFHSgpg%f-EMbhXXoVP zBt3fliy_mrS#L4-^l)##u76|Ed{r;EiV0l-G_exf-XaB diff --git a/public/images/ui/log.fold.closed.png b/public/images/ui/log.fold.closed.png deleted file mode 100644 index 66b51eecbca6bc86838d2ae8b90b2b16a00665c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026 zcmaJ=O=uHA6kgg(2^7Jb9%R_wq}jiuNwZ|FX?9}+-4K(2IS9JloiuB@JKNcb*%qoG z1c?`^MDY-zS3OklBI-fJi$cMlqgPLY;K`F>oK2I|L*pEF-g|uC_kQMWr&zc!8#x_e z7-lxVqL%0#+L4)Q`hEF*=`Oua5v@wfs76`_hD^pnYY^leV;z>DVQp=`hiQhHX6;Iq zRP|NaL=IHV1P}qU4OzkktvtR%r4TU`{s;U=37GVe$I3a2Z2>~QT zPK?Eq$>cnc1X17xi5I1)n3Q9ZEC^tDSegx6HMykbhPkMxuysN_nde)r7T1b#2(R;E zDwPT~Bq>S}QGd%NMi6!VxsiejeG}Urv5^ZxMPm&$iNexK4_k1&v8?M4$3zFl2ZqOs zoDjA&0_ytzp^h^~`=kVq>OEH2uWWgcFF_wQu}L4UHW#Myl4E@VO~{Os=(Q{C1>JlE|p89a;h2=MNQ0PU;tC`7j>G{GXQNot>R#v$?yw+wb>(UBO=|GD1p)GIb9R^Xy>$1C1u~YNir=Ngw1-GQ!N%n@HEI-REKy1 zOfW+11&qycYwK|UogG9$8+Ea-@h2ZX@&LOUe{a>4%%F^VcyljA)?U5k?Cm&3mtVgP z)?$?jc!)v}dwoArV~ro_s?1KpA`eCox}))DMcHNplu3xdsvu ziX=;-q=>STkqc^8Q6&kC56`lNZbxnEm2ocSX?%~;Ko!NoU?2>#0tvgKTr3t74MoW? zL?#;g6vi1pTAC>6C~`s^P)vM~D8e?`r5evFJ!`=Wrm}uC9upgw7{fr61u1E10yNG4 zLp^Vbj%X8|*ZWW5s5K0b*hCT84ITDyouwpIpq4`fDG6JI^e0nn^av$Uj|8A>tpXD| z*iZZs-Za&!A5rK#sH$r`QxGtA)ncx&VaQ6UqU%{%Hsn${r|V@&QYuE?sN{1Ku1=g? z5BYS$bFH^D z`1%(^rfIWoG573n@4l{lW6^w7FSX(y?c*n@i|%qZb?t5HsJ6Jgw0Ysuvrp-}U*=q; qbogR^zAs%pynp;umR}uRS={FKzt27Xd0;+Z3S8Bw>u)x;_x}L&#YB_< diff --git a/public/images/ui/log.fold.open.png b/public/images/ui/log.fold.open.png deleted file mode 100644 index 2f0a4f71d07705213dda3f88e14ebb362ee955fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1027 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 diff --git a/public/images/ui/off.png b/public/images/ui/off.png deleted file mode 100644 index bee0a6505bf35ab4b7cf62434ed476a53fc36b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1302 zcmV+x1?l>UP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipb{ z3IhaK7Fm%1000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000DWNklVD;hg)|;Qe5_ z1{XRGfFQ6zQxxU@MGK};r%XDmC`v3agb=u{i|gxan5K!>*H>tohC-o$LZN_UG6~mp zadL8k_xJY@!&Ftp?CdN|(}Zo?p>aLW!@|M>lF4KwlYBN)N@E@TE|aSgwPL{%dU$vU z(=^f3(}RhL2|PbPqf{#4=H>?L>+5K>TDZEp!qd}}-)ay-kVqr|02db*ux%T)=0Vr8>=Wr-QM1!(P*Gp zEP^ox&N+k-n4FwMrBXqqQb9hS_k*j|YCcm^sT78XharRj=N$L<_h>eo;G83!P9u}a zL<)5<#eXD~IOotb4e4|`mQ{}9KnQ`Mp&_JFDWB1<>q6IcSeAu!I_(Si_V%_f?30s| z7#|-8r4;pg9XmTa;GDzrJj~C}V`*tAGDA4$V2nZ2w4bR;k`+E7%7NjV`I>D z9R~*o7#|;pVHj{-7pJGEuq+FUi;KR`LI?~G5BtoL_oXfk3=E*Zzd!VTT$;;NXP=eL z@6?#joFs%GlgVIudKyPZN7&lhLSJ7W>h(JA@9&Yz$Lh5;5Wb?*34*~X7 zVF*>FpJGg0WulZ~b#)b8U0panK1Qup0{~1-O<{R?8H_Qwt_wv`plMpG0XTRHu z$Zsw#E`Fwu2?q0(d7cMC2)equLjUErazUf^RqZZzkaeutY<{ZJ-vNy0d4Bi%CkIQv zduY}!FpWk7%(iVjJUk$q&2|JB$8m6Zd5L^J-?80%JD}UPjkmWq5ZkuJ?(QyndwU~K z)IQt#e|DT1rS_iZ;qmbiLqkI_4CAk?a@>Ba-S1`3ba!`$xw$#~2ZkMN#{zw?djJ3c M07*qoM6N<$f{}wu2><{9 diff --git a/public/images/ui/on.png b/public/images/ui/on.png deleted file mode 100644 index f0626a6f39777651833514d2b2fa24192c715420..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1442 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 diff --git a/public/images/ui/slider-open.png b/public/images/ui/slider-open.png deleted file mode 100644 index f3d33b97696926bec44d6f97a9a0610f9e4c6d68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmaJ=O^?z*7#`VmV@URyZZ;n6XYXVI0QmF9^e+X-RaXWxD3D!=XJWYYt>bU_=25cgv1XS z8-Vgr657rPQ`o};FVMK3A3k!>b2aWXZy_tx@z6V&MYug{be!49DY@Ly16WQ}Cg5Xg z!^A%iVl~mYrLM~EsaxdW5<*8BcbQbzYC@ev80H1UJE(wQK@y~#QY;qlLm5d(M6xK! zyi`rEx<_Lsb+flZi0N2_zbbQmIr*HDsA*2tJ+$)K2&y zK3pppICdg0q#g-is%ZDfm}(r$^s)p$+{gy;s!gn6Vq%A)B%rjUHPEvD5B2>GI;Jgr zmG3`=_wfNw1r=WyWUl zalp1cVryOJQTj{mHR~O7KA$fZiCo5vT|K;|vDb^7afkzqm2Y#8qzp1t@3;`1p5 diff --git a/public/images/ui/spinner.gif b/public/images/ui/spinner.gif deleted file mode 100644 index 6ac7d5b5541d5c4fdfa976b54e6921fe319ac3aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1709 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 i^ diff --git a/public/images/ui/user.png b/public/images/ui/user.png deleted file mode 100644 index f8842fd3dc2435c72b15b868569dd143528c1905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmaJ=O-K|`9G?*SFf{@p>@3 zwuXjQ2g3yd0at_PJs9D!dkrKz9>cCKD2TvTEX_n3G)PxbZi5*Vq;RB%Dd^_0tYIIO z2^WlUWRu}&)=jAZl%)Sdb^RD^qXamK_f%m!*=qtO0c@DD6x_J>YS)!1ge@Q=XeA-+ zE>tm|h6vheXp-TUT2hh~&2a4lyd()R!$z{9fS4GhumY`Vst~R7@gcu25EVt9<04!r z>=nf@%kt5PFB0{63tSN@866m?z*SGUp`u)O6m%1N7J;Sp05xhsojgcc(2B?6FRFLM zRg1?`SCq@(U>LWt|1`RAg{Q|o9*-?Hjt3tYc-k#I)^nip6@C(T<4ws(e}Dh*@Nh1d z8yg$j+1VKx8ChRn-`?Jyot@p^-(Ol<+S}V37#J8G9i5n%SX*10pPwHZ8k(G(+}+(> zSXkKD*qEA{+T7gC=kwP-*(+GK3MHCbuzBht&Uj1TVbFt^7)m3d;MaS(`!_Z-k1i~} mnJlk>6?@eeS39SFUT!5mx1RklKQev^yC7nbX7T0i*1^AO?UFnI diff --git a/public/images/ui/workers-close.png b/public/images/ui/workers-close.png deleted file mode 100644 index 664066c241f1e37085e9e518d95988ad4beea9c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmaJ=zi-n(6h5_3K}Dr5pqA<6uEajO`B7UnCAA%DsG}&cM8p)wzQk5*pRq5*?M5dU z_*WPhKmsA8Yz+JXurM*Ru!nORrwjxSzW1KK?|VP)-K$pf;l}#ibpXJId8D`5ncLTI ztg`>(53irHW1AXX+93lvb`lKg9_eFfhRzVTvE!XR`-1lYSmgq{OS{&w;*yYeatxn^ zF=GR;e~`tFdx9zK<6#h~+^>(HIT&~<_oQMWE7q_d9Gxe)bKbPw^AlJ0xP$v}KU0`M zh^Yg!@H9%5Oyy>}3bXUDz`+@Wo~YbqQC+JAHIiUh;Zey&RRpUdFYcCWwc0%>ArT2k z5=5ya)|6dIK?u%2j%7={fzs9+^IXhRIiJ#45rpx0%#U|@k_-h=mgQVSl1dCwO3xzd zWThzGDHL>^x=9ezfJ87?boyjORgP79*+LjEWTSLGCN?l3b7Dc{QQlGkw5#HJ_tPJ5bepDA=ewaUKT||tZQXm*AS8#M%8Fk%LP{_?kL0&Ex6tl z_i!mUUxhGcnRT25&#~7?NC;;wE5Y(w_Ll0+x!&?x;sdC=7BcJ{sBySB2n ohHegCe7m)I=jB&`MY#0w$AfTh#GJPrlJ@gq8%~?(mMauevM{oeU$U zK?H1sws+FVagQj+U3%z;n(*iIR{{H;COj%y#ENv<_xDa>+CFL6?#Yo`@r0c_cso@= zAfVjAX>c4SYN`nnT@~VNTN3aD!jClJ%v8r}Vx7el7e$hDNr~W+EXw&pxm@1D3XzFK z6iHTca#_tQDj|6K2~aKedTPt4O>04>34P8ZRg#9op*YNoEIyRvN~Mx%C`t|xxnvY_ zC(VV)=1jq$i5vS7_gRQDMW@RKTob_QSqnilmkpEYF~NaJsS`=ENV1k@K+F0+GzjMC zgtzFq--W`7J&LH*q6r(sE?iu1Gb7| zvebH*a3^$W-OvP35PjcMcggLFZdOV)!zjqIDOdG^Vd#V?HM3;aN`)EMVD2EGA)j%* zb8h)UZZ--*1eFaM`%kG?i&=mtEvxvWxxa zqGww$Jy|#(TS(@EPeYjY7{>bH`#0C%NnCC2+ve%%>3BT;(Enn?&Sl").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f .clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); -/*jshint evil:true*/ +;/*jshint evil:true*/ minispade = { root: null, @@ -57,7 +57,7 @@ minispade = { minispade.modules[name] = callback; } }; -// lib/handlebars/base.js +;// lib/handlebars/base.js /*jshint eqnull:true*/ this.Handlebars = {}; @@ -1952,7 +1952,7 @@ Handlebars.VM = { Handlebars.template = Handlebars.VM.template; ; -// Version: v1.0.pre-161-g4255d0a +;// Version: v1.0.pre-161-g4255d0a // Last commit: 4255d0a (2012-09-27 14:32:08 +0200) @@ -24322,7 +24322,7 @@ Ember })(); -ansiparse = function (str) { +;ansiparse = function (str) { // // I'm terrible at writing parsers. // @@ -24483,7 +24483,7 @@ if (typeof module == "object" && typeof window == "undefined") { } -(function() { +;(function() { window.DS = Ember.Namespace.create({ CURRENT_API_REVISION: 4 }); @@ -28659,7 +28659,7 @@ DS.RESTAdapter = DS.Adapter.extend({ })(); -/* +;/* Highcharts JS v2.2.5 (2012-06-08) (c) 2009-2011 Torstein H?nsi @@ -28898,7 +28898,7 @@ this,b=a.chart,c=b.renderer,d,e,f,g=a.options.shadow,h,i;n(a.points,function(j){ 0){if(r=C.pop(),B=r.i,r=r.y,s>r&&w[B+1]!==null||s0?_require(a,g):g()})(); -minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.set('auth', Travis.Auth.create({\n store: this.store,\n endpoint: Travis.config.api_endpoint\n }));\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher);\n return this.tailing = new Travis.Tailing();\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('showAuthenticated');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repository').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('