From 1650d86440c3373f928cf1253d5adc88744ba67f Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 9 Jul 2012 17:29:35 +0800 Subject: [PATCH 01/28] tinyscrollbar extension --- .../javascripts/jquery.tinyscrollbar.js | 1 - app/assets/javascripts/orbitdesktop.js | 75 ++++++++++--------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/app/assets/javascripts/jquery.tinyscrollbar.js b/app/assets/javascripts/jquery.tinyscrollbar.js index e9aeffde..4bca0dfa 100644 --- a/app/assets/javascripts/jquery.tinyscrollbar.js +++ b/app/assets/javascripts/jquery.tinyscrollbar.js @@ -66,7 +66,6 @@ { oSelf.update(); setEvents(); - return oSelf; } diff --git a/app/assets/javascripts/orbitdesktop.js b/app/assets/javascripts/orbitdesktop.js index 86b68c9f..e84349a3 100755 --- a/app/assets/javascripts/orbitdesktop.js +++ b/app/assets/javascripts/orbitdesktop.js @@ -608,12 +608,18 @@ var orbitDesktop = function(dom){ $('.tinycanvas').each(function(){ var h = $(this).parent().height(), sh = $(this).siblings('.s_tab').height(); - $(this) - .css({'height': h-sh-24}) - .tinyscrollbar({ axis: 'y'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main : $(this), + height : h-sh-24, + },{ + axis : "y" + }) + // $(this) + // .css({'height': h-sh-24}) + // .tinyscrollbar({ axis: 'y'}) + // .find('.scrollbar') + // .delay(1500) + // .addClass('op00', 500); }); $("a#name_save_btn").click(function(){ @@ -1390,18 +1396,10 @@ var orbitDesktop = function(dom){ var list = function(){ var bindHandlers = function(){ - // fill width for tiny scroll bar - var e = $('.list_t'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main : ".tinycanvas", + fill : ".list_t" + }) } $("div#seminar_p div#panel_r").load("/desktop/seminar_p_list",function(){ @@ -1483,34 +1481,43 @@ var orbitDesktop = function(dom){ o.notify("Wallpaper saving failed!!","imp",2); }) }; - this.tinyscrollbar_ext = function(target,fill,tinysettings){ - tinysettings = ( typeof tinysettings == 'undefined' ) ? {} : tinysettings ; - tinysettings.theight = ( typeof tinysettings.theight == 'undefined' ) ? '' : tinysettings.theight ; + this.tinyscrollbar_ext = function(target,tinysettings){ + //main : dom on which tinyscrollbar has to be applied + //fill : number or object for width + //height : height for the target element + //tinysettings : tinyscrollbar settings + + if(typeof target.main == "undefined"){ + o.notify('tinyscrollbar: target undefined','imp',2); + return; + }else{ + target.main = $(target.main); + } + //var target.fill = $ + var tinysettings = ( typeof tinysettings == 'undefined' ) ? {"axis":"x"} : tinysettings ; - var count,baseWidth; + var count,baseWidth,fillArray,pxs; - if( typeof fill == 'object' ){ - count = fill.length; - baseWidth = fill.eq(1).outerWidth(true); - fill.parents('.overview').width( baseWidth * count ); + if( typeof target.fill == 'object' ){ + fillArray = target.main.find(target.fill); + count = fillArray.length; + baseWidth = fillArray.eq(1).outerWidth(true); + target.main.find('.overview').width( baseWidth * count); } else if( typeof fill == 'number' ){ - fill.parents('.overview').width( fill ); + target.main.find('.overview').width( target.fill ); } else if( typeof fill == 'undefined' ){ - fill = fill; + } else { o.notify('tinyscrollbar: setting width failed','imp',2); } + if(target.height) + target.main.height(target.height); - - if( typeof $(target) !== 'undefined' ){ - $(target) + target.main .tinyscrollbar( tinysettings ) .find('.scrollbar') .delay(1500) .addClass('op00', 500); - } else { - o.notify('tinyscrollbar: target undefined','imp',2); - } }; this.simple_drop_down = function(){ // simple dropdown menu From ff4b131aed6e57df4a50a6f9a3a38118172c2ce8 Mon Sep 17 00:00:00 2001 From: devin Date: Tue, 10 Jul 2012 16:34:50 +0800 Subject: [PATCH 02/28] tinyscroll bar update --- app/assets/javascripts/orbitdesktop.js | 160 ++++++++----------------- 1 file changed, 49 insertions(+), 111 deletions(-) diff --git a/app/assets/javascripts/orbitdesktop.js b/app/assets/javascripts/orbitdesktop.js index e84349a3..f3101e49 100755 --- a/app/assets/javascripts/orbitdesktop.js +++ b/app/assets/javascripts/orbitdesktop.js @@ -249,13 +249,11 @@ var orbitDesktop = function(dom){ } } }); - $('div#desktop .tinycanvas') - .tinyscrollbar({ axis: 'x' }) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); - + o.tinyscrollbar_ext({ + main: '.tinycanvas' + }) + o.simple_drop_down(); $("div#group_wrapper ul li[data-category=app]").click(function(){ o.appWindow({ @@ -432,11 +430,9 @@ var orbitDesktop = function(dom){ }) return false; }) - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas' + }) } var loadApps = function(){ //this load apps for sorting and searching $.getJSON("/desktop/getapplist",{desktopid:o.desktopId},function(appss){ @@ -517,11 +513,9 @@ var orbitDesktop = function(dom){ }, accept: '.to_drop' }); - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas' + }) }; @@ -614,12 +608,6 @@ var orbitDesktop = function(dom){ },{ axis : "y" }) - // $(this) - // .css({'height': h-sh-24}) - // .tinyscrollbar({ axis: 'y'}) - // .find('.scrollbar') - // .delay(1500) - // .addClass('op00', 500); }); $("a#name_save_btn").click(function(){ @@ -668,12 +656,13 @@ var orbitDesktop = function(dom){ $('.tinycanvas').each(function(){ var h = $(this).parent().height(), sh = $(this).siblings('.s_tab').height(); - $(this) - .css({'height': h-sh-24}) - .tinyscrollbar({ axis: 'y'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + + o.tinyscrollbar_ext({ + main: $(this), + height: h-sh-24 + },{ + axis: 'y' + }) }); o.single_select(); @@ -819,11 +808,9 @@ var orbitDesktop = function(dom){ $('#connection_setting').width(conlist_w); - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas' + }) } var saveaccount = function(usernm,pwd,type,what){ @@ -916,18 +903,10 @@ var orbitDesktop = function(dom){ var bindHandlers = function(){ // to bind handlers for list page o.simple_drop_down(); - // fill width for tiny scroll bar - var e = $('.list_t'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.list_t' + }) $("#journal_selection_options a").click(function(){ @@ -1064,20 +1043,10 @@ var orbitDesktop = function(dom){ var bindHandlers = function(){ // to bind handlers for add page o.simple_drop_down(); - // fill width for tiny scroll bar - var e = $('.s_grid_con'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) } $("div#journal_p div#panel_r").load("/desktop/journal_p_add",function(){ bindHandlers(); @@ -1187,18 +1156,11 @@ var orbitDesktop = function(dom){ } return false; }); - // fill width for tiny scroll bar - var e = $('.list_t'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.list_t' + }) } $("div#apps_store div#panel_r").load("/desktop_appstore/widgets",function(){ @@ -1309,18 +1271,10 @@ var orbitDesktop = function(dom){ var bindHandlers = function(){ o.simple_drop_down(); - // fill width for tiny scroll bar - var e = $('.list_t'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.list_t' + }) } $("div#books div#panel_r").load("/desktop/books_list",function(){ @@ -1332,18 +1286,10 @@ var orbitDesktop = function(dom){ var bindHandlers = function(){ o.simple_drop_down(); - // fill width for tiny scroll bar - var e = $('.s_grid_con'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) } @@ -1411,18 +1357,10 @@ var orbitDesktop = function(dom){ var bindHandlers = function(){ o.simple_drop_down(); - // fill width for tiny scroll bar - var e = $('.s_grid_con'), - count = e.length, - baseWidth = e.eq(1).outerWidth(true); - - e.parents('.overview').width( baseWidth * count ); - - $('.tinycanvas') - .tinyscrollbar({ axis: 'x'}) - .find('.scrollbar') - .delay(1500) - .addClass('op00', 500); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) } $("div#seminar_p div#panel_r").load("/desktop/seminar_p_add",function(){ @@ -1498,14 +1436,14 @@ var orbitDesktop = function(dom){ var count,baseWidth,fillArray,pxs; - if( typeof target.fill == 'object' ){ + if( typeof target.fill == 'string' ){ fillArray = target.main.find(target.fill); count = fillArray.length; - baseWidth = fillArray.eq(1).outerWidth(true); + baseWidth = $(target.fill).eq(1).outerWidth(true); target.main.find('.overview').width( baseWidth * count); - } else if( typeof fill == 'number' ){ + } else if( typeof target.fill == 'number' ){ target.main.find('.overview').width( target.fill ); - } else if( typeof fill == 'undefined' ){ + } else if( typeof target.fill == 'undefined' ){ } else { o.notify('tinyscrollbar: setting width failed','imp',2); From ba3d13790ceef65ac958eda1ea46decb4f457cf1 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Tue, 10 Jul 2012 17:43:21 +0800 Subject: [PATCH 03/28] gallery module update --- vendor/built_in_modules/gallery/.gitignore | 6 ++ vendor/built_in_modules/gallery/Gemfile | 17 ++++++ vendor/built_in_modules/gallery/MIT-LICENSE | 20 +++++++ vendor/built_in_modules/gallery/README.rdoc | 3 + vendor/built_in_modules/gallery/Rakefile | 39 ++++++++++++ .../app/assets/images/gallery/.gitkeep | 0 .../app/assets/javascripts/gallery/.gitkeep | 0 .../app/assets/stylesheets/gallery/.gitkeep | 0 .../gallery/app/controllers/.gitkeep | 0 .../gallery/app/helpers/.gitkeep | 0 .../gallery/app/mailers/.gitkeep | 0 .../gallery/app/models/.gitkeep | 0 .../gallery/app/views/.gitkeep | 0 .../built_in_modules/gallery/config/routes.rb | 2 + .../built_in_modules/gallery/gallery.gemspec | 23 +++++++ .../built_in_modules/gallery/lib/gallery.rb | 4 ++ .../gallery/lib/gallery/engine.rb | 4 ++ .../gallery/lib/gallery/version.rb | 3 + .../gallery/lib/tasks/gallery_tasks.rake | 4 ++ vendor/built_in_modules/gallery/script/rails | 6 ++ .../gallery/test/dummy/Rakefile | 7 +++ .../app/assets/javascripts/application.js | 9 +++ .../app/assets/stylesheets/application.css | 7 +++ .../app/controllers/application_controller.rb | 3 + .../dummy/app/helpers/application_helper.rb | 2 + .../gallery/test/dummy/app/mailers/.gitkeep | 0 .../gallery/test/dummy/app/models/.gitkeep | 0 .../app/views/layouts/application.html.erb | 14 +++++ .../gallery/test/dummy/config.ru | 4 ++ .../gallery/test/dummy/config/application.rb | 45 ++++++++++++++ .../gallery/test/dummy/config/boot.rb | 10 ++++ .../gallery/test/dummy/config/database.yml | 25 ++++++++ .../gallery/test/dummy/config/environment.rb | 5 ++ .../dummy/config/environments/development.rb | 30 ++++++++++ .../dummy/config/environments/production.rb | 60 +++++++++++++++++++ .../test/dummy/config/environments/test.rb | 39 ++++++++++++ .../initializers/backtrace_silencers.rb | 7 +++ .../dummy/config/initializers/inflections.rb | 10 ++++ .../dummy/config/initializers/mime_types.rb | 5 ++ .../dummy/config/initializers/secret_token.rb | 7 +++ .../config/initializers/session_store.rb | 8 +++ .../config/initializers/wrap_parameters.rb | 14 +++++ .../gallery/test/dummy/config/locales/en.yml | 5 ++ .../gallery/test/dummy/config/routes.rb | 58 ++++++++++++++++++ .../gallery/test/dummy/lib/assets/.gitkeep | 0 .../gallery/test/dummy/log/.gitkeep | 0 .../gallery/test/dummy/public/404.html | 26 ++++++++ .../gallery/test/dummy/public/422.html | 26 ++++++++ .../gallery/test/dummy/public/500.html | 26 ++++++++ .../gallery/test/dummy/public/favicon.ico | 0 .../gallery/test/dummy/script/rails | 6 ++ .../gallery/test/gallery_test.rb | 7 +++ .../test/integration/navigation_test.rb | 10 ++++ .../gallery/test/test_helper.rb | 10 ++++ 54 files changed, 616 insertions(+) create mode 100644 vendor/built_in_modules/gallery/.gitignore create mode 100644 vendor/built_in_modules/gallery/Gemfile create mode 100644 vendor/built_in_modules/gallery/MIT-LICENSE create mode 100644 vendor/built_in_modules/gallery/README.rdoc create mode 100644 vendor/built_in_modules/gallery/Rakefile create mode 100644 vendor/built_in_modules/gallery/app/assets/images/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/assets/stylesheets/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/controllers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/helpers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/mailers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/models/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/views/.gitkeep create mode 100644 vendor/built_in_modules/gallery/config/routes.rb create mode 100644 vendor/built_in_modules/gallery/gallery.gemspec create mode 100644 vendor/built_in_modules/gallery/lib/gallery.rb create mode 100644 vendor/built_in_modules/gallery/lib/gallery/engine.rb create mode 100644 vendor/built_in_modules/gallery/lib/gallery/version.rb create mode 100644 vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake create mode 100755 vendor/built_in_modules/gallery/script/rails create mode 100644 vendor/built_in_modules/gallery/test/dummy/Rakefile create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/mailers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/models/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config.ru create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/application.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/boot.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/database.yml create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environment.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/routes.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/lib/assets/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/log/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/404.html create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/422.html create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/500.html create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/favicon.ico create mode 100755 vendor/built_in_modules/gallery/test/dummy/script/rails create mode 100644 vendor/built_in_modules/gallery/test/gallery_test.rb create mode 100644 vendor/built_in_modules/gallery/test/integration/navigation_test.rb create mode 100644 vendor/built_in_modules/gallery/test/test_helper.rb diff --git a/vendor/built_in_modules/gallery/.gitignore b/vendor/built_in_modules/gallery/.gitignore new file mode 100644 index 00000000..1463de6d --- /dev/null +++ b/vendor/built_in_modules/gallery/.gitignore @@ -0,0 +1,6 @@ +.bundle/ +log/*.log +pkg/ +test/dummy/db/*.sqlite3 +test/dummy/log/*.log +test/dummy/tmp/ \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/Gemfile b/vendor/built_in_modules/gallery/Gemfile new file mode 100644 index 00000000..ecdc12cc --- /dev/null +++ b/vendor/built_in_modules/gallery/Gemfile @@ -0,0 +1,17 @@ +source "http://rubygems.org" + +# Declare your gem's dependencies in gallery.gemspec. +# Bundler will treat runtime dependencies like base dependencies, and +# development dependencies will be added by default to the :development group. +gemspec + +# jquery-rails is used by the dummy application +gem "jquery-rails" + +# Declare any dependencies that are still in development here instead of in +# your gemspec. These might include edge Rails or gems from your path or +# Git. Remember to move these dependencies to your gemspec before releasing +# your gem to rubygems.org. + +# To use debugger +# gem 'ruby-debug19', :require => 'ruby-debug' diff --git a/vendor/built_in_modules/gallery/MIT-LICENSE b/vendor/built_in_modules/gallery/MIT-LICENSE new file mode 100644 index 00000000..406f17b7 --- /dev/null +++ b/vendor/built_in_modules/gallery/MIT-LICENSE @@ -0,0 +1,20 @@ +Copyright 2012 YOURNAME + +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/vendor/built_in_modules/gallery/README.rdoc b/vendor/built_in_modules/gallery/README.rdoc new file mode 100644 index 00000000..546bcede --- /dev/null +++ b/vendor/built_in_modules/gallery/README.rdoc @@ -0,0 +1,3 @@ += Gallery + +This project rocks and uses MIT-LICENSE. \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/Rakefile b/vendor/built_in_modules/gallery/Rakefile new file mode 100644 index 00000000..518b4f85 --- /dev/null +++ b/vendor/built_in_modules/gallery/Rakefile @@ -0,0 +1,39 @@ +#!/usr/bin/env rake +begin + require 'bundler/setup' +rescue LoadError + puts 'You must `gem install bundler` and `bundle install` to run rake tasks' +end +begin + require 'rdoc/task' +rescue LoadError + require 'rdoc/rdoc' + require 'rake/rdoctask' + RDoc::Task = Rake::RDocTask +end + +RDoc::Task.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'rdoc' + rdoc.title = 'Gallery' + rdoc.options << '--line-numbers' + rdoc.rdoc_files.include('README.rdoc') + rdoc.rdoc_files.include('lib/**/*.rb') +end + +APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__) +load 'rails/tasks/engine.rake' + + +Bundler::GemHelper.install_tasks + +require 'rake/testtask' + +Rake::TestTask.new(:test) do |t| + t.libs << 'lib' + t.libs << 'test' + t.pattern = 'test/**/*_test.rb' + t.verbose = false +end + + +task :default => :test diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/images/gallery/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/assets/stylesheets/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/stylesheets/gallery/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/controllers/.gitkeep b/vendor/built_in_modules/gallery/app/controllers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/helpers/.gitkeep b/vendor/built_in_modules/gallery/app/helpers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/mailers/.gitkeep b/vendor/built_in_modules/gallery/app/mailers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/models/.gitkeep b/vendor/built_in_modules/gallery/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/views/.gitkeep b/vendor/built_in_modules/gallery/app/views/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/config/routes.rb b/vendor/built_in_modules/gallery/config/routes.rb new file mode 100644 index 00000000..1daf9a41 --- /dev/null +++ b/vendor/built_in_modules/gallery/config/routes.rb @@ -0,0 +1,2 @@ +Rails.application.routes.draw do +end diff --git a/vendor/built_in_modules/gallery/gallery.gemspec b/vendor/built_in_modules/gallery/gallery.gemspec new file mode 100644 index 00000000..675fb9a7 --- /dev/null +++ b/vendor/built_in_modules/gallery/gallery.gemspec @@ -0,0 +1,23 @@ +$:.push File.expand_path("../lib", __FILE__) + +# Maintain your gem's version: +require "gallery/version" + +# Describe your gem and declare its dependencies: +Gem::Specification.new do |s| + s.name = "gallery" + s.version = Gallery::VERSION + s.authors = ["TODO: Your name"] + s.email = ["TODO: Your email"] + s.homepage = "TODO" + s.summary = "TODO: Summary of Gallery." + s.description = "TODO: Description of Gallery." + + s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"] + s.test_files = Dir["test/**/*"] + + s.add_dependency "rails", "~> 3.1.4" + # s.add_dependency "jquery-rails" + + s.add_development_dependency "sqlite3" +end diff --git a/vendor/built_in_modules/gallery/lib/gallery.rb b/vendor/built_in_modules/gallery/lib/gallery.rb new file mode 100644 index 00000000..b2f89e69 --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/gallery.rb @@ -0,0 +1,4 @@ +require "gallery/engine" + +module Gallery +end diff --git a/vendor/built_in_modules/gallery/lib/gallery/engine.rb b/vendor/built_in_modules/gallery/lib/gallery/engine.rb new file mode 100644 index 00000000..f798ebb0 --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/gallery/engine.rb @@ -0,0 +1,4 @@ +module Gallery + class Engine < Rails::Engine + end +end diff --git a/vendor/built_in_modules/gallery/lib/gallery/version.rb b/vendor/built_in_modules/gallery/lib/gallery/version.rb new file mode 100644 index 00000000..c925aa16 --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/gallery/version.rb @@ -0,0 +1,3 @@ +module Gallery + VERSION = "0.0.1" +end diff --git a/vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake b/vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake new file mode 100644 index 00000000..82b1f13f --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake @@ -0,0 +1,4 @@ +# desc "Explaining what the task does" +# task :gallery do +# # Task goes here +# end diff --git a/vendor/built_in_modules/gallery/script/rails b/vendor/built_in_modules/gallery/script/rails new file mode 100755 index 00000000..e323e44b --- /dev/null +++ b/vendor/built_in_modules/gallery/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +ENGINE_PATH = File.expand_path('../..', __FILE__) +load File.expand_path('../../test/dummy/script/rails', __FILE__) diff --git a/vendor/built_in_modules/gallery/test/dummy/Rakefile b/vendor/built_in_modules/gallery/test/dummy/Rakefile new file mode 100644 index 00000000..36458522 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Dummy::Application.load_tasks diff --git a/vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js b/vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js new file mode 100644 index 00000000..37c7bfcd --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js @@ -0,0 +1,9 @@ +// This is a manifest file that'll be compiled into including all the files listed below. +// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically +// be included in the compiled file accessible from http://example.com/assets/application.js +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css b/vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css new file mode 100644 index 00000000..fc25b572 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css @@ -0,0 +1,7 @@ +/* + * This is a manifest file that'll automatically include all the stylesheets available in this directory + * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at + * the top of the compiled file, but it's generally better to create a new file per style scope. + *= require_self + *= require_tree . +*/ \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb b/vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb new file mode 100644 index 00000000..e8065d95 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb @@ -0,0 +1,3 @@ +class ApplicationController < ActionController::Base + protect_from_forgery +end diff --git a/vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb b/vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb new file mode 100644 index 00000000..de6be794 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/vendor/built_in_modules/gallery/test/dummy/app/mailers/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/app/mailers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/app/models/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb b/vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb new file mode 100644 index 00000000..9a8a761b --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Dummy + <%= stylesheet_link_tag "application" %> + <%= javascript_include_tag "application" %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/vendor/built_in_modules/gallery/test/dummy/config.ru b/vendor/built_in_modules/gallery/test/dummy/config.ru new file mode 100644 index 00000000..1989ed8d --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Dummy::Application diff --git a/vendor/built_in_modules/gallery/test/dummy/config/application.rb b/vendor/built_in_modules/gallery/test/dummy/config/application.rb new file mode 100644 index 00000000..19872ae5 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/application.rb @@ -0,0 +1,45 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +Bundler.require +require "gallery" + +module Dummy + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Custom directories with classes and modules you want to be autoloadable. + # config.autoload_paths += %W(#{config.root}/extras) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password] + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + end +end + diff --git a/vendor/built_in_modules/gallery/test/dummy/config/boot.rb b/vendor/built_in_modules/gallery/test/dummy/config/boot.rb new file mode 100644 index 00000000..eba06813 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/boot.rb @@ -0,0 +1,10 @@ +require 'rubygems' +gemfile = File.expand_path('../../../../Gemfile', __FILE__) + +if File.exist?(gemfile) + ENV['BUNDLE_GEMFILE'] = gemfile + require 'bundler' + Bundler.setup +end + +$:.unshift File.expand_path('../../../../lib', __FILE__) \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/test/dummy/config/database.yml b/vendor/built_in_modules/gallery/test/dummy/config/database.yml new file mode 100644 index 00000000..51a4dd45 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +development: + adapter: sqlite3 + database: db/development.sqlite3 + pool: 5 + timeout: 5000 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: sqlite3 + database: db/test.sqlite3 + pool: 5 + timeout: 5000 + +production: + adapter: sqlite3 + database: db/production.sqlite3 + pool: 5 + timeout: 5000 diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environment.rb b/vendor/built_in_modules/gallery/test/dummy/config/environment.rb new file mode 100644 index 00000000..3da5eb91 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environment.rb @@ -0,0 +1,5 @@ +# Load the rails application +require File.expand_path('../application', __FILE__) + +# Initialize the rails application +Dummy::Application.initialize! diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb b/vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb new file mode 100644 index 00000000..95a50b91 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb @@ -0,0 +1,30 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb b/vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb new file mode 100644 index 00000000..ca2c5888 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb @@ -0,0 +1,60 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # Code is not reloaded between requests + config.cache_classes = true + + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false + + # Compress JavaScripts and CSS + config.assets.compress = true + + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = false + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + + # Specifies the header that your server uses for sending files + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # See everything in the log (default is :info) + # config.log_level = :debug + + # Use a different logger for distributed setups + # config.logger = SyslogLogger.new + + # Use a different cache store in production + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # config.assets.precompile += %w( search.js ) + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb b/vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb new file mode 100644 index 00000000..6810c914 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb @@ -0,0 +1,39 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Log error messages when you accidentally call methods on nil + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Use SQL instead of Active Record's schema dumper when creating the test database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb new file mode 100644 index 00000000..59385cdf --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb new file mode 100644 index 00000000..9e8b0131 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb @@ -0,0 +1,10 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb new file mode 100644 index 00000000..72aca7e4 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb new file mode 100644 index 00000000..8c675cbe --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +Dummy::Application.config.secret_token = '3df28ce44b3fd9f39a8054cbbfbe942821da69666f30a7e438a61e6ded529e98a5de469bc867c04f3a8d9a182e2417707dfcf4105ecc4b05950728096cf1840f' diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb new file mode 100644 index 00000000..952473ff --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +Dummy::Application.config.session_store :cookie_store, key: '_dummy_session' + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rails generate session_migration") +# Dummy::Application.config.session_store :active_record_store diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb new file mode 100644 index 00000000..999df201 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml b/vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml new file mode 100644 index 00000000..179c14ca --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml @@ -0,0 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + hello: "Hello world" diff --git a/vendor/built_in_modules/gallery/test/dummy/config/routes.rb b/vendor/built_in_modules/gallery/test/dummy/config/routes.rb new file mode 100644 index 00000000..bb509f27 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/routes.rb @@ -0,0 +1,58 @@ +Dummy::Application.routes.draw do + # The priority is based upon order of creation: + # first created -> highest priority. + + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action + + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) + + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end + + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end + + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. + # root :to => 'welcome#index' + + # See how all your routes lay out with "rake routes" + + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. + # match ':controller(/:action(/:id(.:format)))' +end diff --git a/vendor/built_in_modules/gallery/test/dummy/lib/assets/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/lib/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/log/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/log/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/public/404.html b/vendor/built_in_modules/gallery/test/dummy/public/404.html new file mode 100644 index 00000000..9a48320a --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/public/404.html @@ -0,0 +1,26 @@ + + + + The page you were looking for doesn't exist (404) + + + + + +
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+ + diff --git a/vendor/built_in_modules/gallery/test/dummy/public/422.html b/vendor/built_in_modules/gallery/test/dummy/public/422.html new file mode 100644 index 00000000..83660ab1 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/public/422.html @@ -0,0 +1,26 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+ + diff --git a/vendor/built_in_modules/gallery/test/dummy/public/500.html b/vendor/built_in_modules/gallery/test/dummy/public/500.html new file mode 100644 index 00000000..b80307fc --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/public/500.html @@ -0,0 +1,26 @@ + + + + We're sorry, but something went wrong (500) + + + + + +
+

We're sorry, but something went wrong.

+

We've been notified about this issue and we'll take a look at it shortly.

+
+ + diff --git a/vendor/built_in_modules/gallery/test/dummy/public/favicon.ico b/vendor/built_in_modules/gallery/test/dummy/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/script/rails b/vendor/built_in_modules/gallery/test/dummy/script/rails new file mode 100755 index 00000000..f8da2cff --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +APP_PATH = File.expand_path('../../config/application', __FILE__) +require File.expand_path('../../config/boot', __FILE__) +require 'rails/commands' diff --git a/vendor/built_in_modules/gallery/test/gallery_test.rb b/vendor/built_in_modules/gallery/test/gallery_test.rb new file mode 100644 index 00000000..107de446 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/gallery_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class GalleryTest < ActiveSupport::TestCase + test "truth" do + assert_kind_of Module, Gallery + end +end diff --git a/vendor/built_in_modules/gallery/test/integration/navigation_test.rb b/vendor/built_in_modules/gallery/test/integration/navigation_test.rb new file mode 100644 index 00000000..97a94c9b --- /dev/null +++ b/vendor/built_in_modules/gallery/test/integration/navigation_test.rb @@ -0,0 +1,10 @@ +require 'test_helper' + +class NavigationTest < ActionDispatch::IntegrationTest + fixtures :all + + # test "the truth" do + # assert true + # end +end + diff --git a/vendor/built_in_modules/gallery/test/test_helper.rb b/vendor/built_in_modules/gallery/test/test_helper.rb new file mode 100644 index 00000000..dcd3b276 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/test_helper.rb @@ -0,0 +1,10 @@ +# Configure Rails Environment +ENV["RAILS_ENV"] = "test" + +require File.expand_path("../dummy/config/environment.rb", __FILE__) +require "rails/test_help" + +Rails.backtrace_cleaner.remove_silencers! + +# Load support files +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } From 833c08eafcab54726701a447895624cfae8f6281 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 16 Jul 2012 17:29:46 +0800 Subject: [PATCH 04/28] fixed db error --- config/mongoid.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/mongoid.yml b/config/mongoid.yml index fb792d6b..1d3607e7 100644 --- a/config/mongoid.yml +++ b/config/mongoid.yml @@ -8,8 +8,8 @@ defaults: &defaults development: <<: *defaults - # database: prototype_r4_development - database: demo_site_development + database: prototype_r4_development + #database: demo_site_development test: <<: *defaults From b51e656909f6e074ddbf8fa5ff64e51dee31d4cf Mon Sep 17 00:00:00 2001 From: Joshua Date: Mon, 16 Jul 2012 13:25:35 +0100 Subject: [PATCH 05/28] database fixing --- config/mongoid.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/mongoid.yml b/config/mongoid.yml index fb792d6b..f333e2e6 100644 --- a/config/mongoid.yml +++ b/config/mongoid.yml @@ -8,8 +8,7 @@ defaults: &defaults development: <<: *defaults - # database: prototype_r4_development - database: demo_site_development + database: prototype_r4_development test: <<: *defaults From 87be934aa36747163879507e17cc3f9565fa1476 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Tue, 10 Jul 2012 17:43:21 +0800 Subject: [PATCH 06/28] gallery module update --- vendor/built_in_modules/gallery/.gitignore | 6 ++ vendor/built_in_modules/gallery/Gemfile | 17 ++++++ vendor/built_in_modules/gallery/MIT-LICENSE | 20 +++++++ vendor/built_in_modules/gallery/README.rdoc | 3 + vendor/built_in_modules/gallery/Rakefile | 39 ++++++++++++ .../app/assets/images/gallery/.gitkeep | 0 .../app/assets/javascripts/gallery/.gitkeep | 0 .../app/assets/stylesheets/gallery/.gitkeep | 0 .../gallery/app/controllers/.gitkeep | 0 .../gallery/app/helpers/.gitkeep | 0 .../gallery/app/mailers/.gitkeep | 0 .../gallery/app/models/.gitkeep | 0 .../gallery/app/views/.gitkeep | 0 .../built_in_modules/gallery/config/routes.rb | 2 + .../built_in_modules/gallery/gallery.gemspec | 23 +++++++ .../built_in_modules/gallery/lib/gallery.rb | 4 ++ .../gallery/lib/gallery/engine.rb | 4 ++ .../gallery/lib/gallery/version.rb | 3 + .../gallery/lib/tasks/gallery_tasks.rake | 4 ++ vendor/built_in_modules/gallery/script/rails | 6 ++ .../gallery/test/dummy/Rakefile | 7 +++ .../app/assets/javascripts/application.js | 9 +++ .../app/assets/stylesheets/application.css | 7 +++ .../app/controllers/application_controller.rb | 3 + .../dummy/app/helpers/application_helper.rb | 2 + .../gallery/test/dummy/app/mailers/.gitkeep | 0 .../gallery/test/dummy/app/models/.gitkeep | 0 .../app/views/layouts/application.html.erb | 14 +++++ .../gallery/test/dummy/config.ru | 4 ++ .../gallery/test/dummy/config/application.rb | 45 ++++++++++++++ .../gallery/test/dummy/config/boot.rb | 10 ++++ .../gallery/test/dummy/config/database.yml | 25 ++++++++ .../gallery/test/dummy/config/environment.rb | 5 ++ .../dummy/config/environments/development.rb | 30 ++++++++++ .../dummy/config/environments/production.rb | 60 +++++++++++++++++++ .../test/dummy/config/environments/test.rb | 39 ++++++++++++ .../initializers/backtrace_silencers.rb | 7 +++ .../dummy/config/initializers/inflections.rb | 10 ++++ .../dummy/config/initializers/mime_types.rb | 5 ++ .../dummy/config/initializers/secret_token.rb | 7 +++ .../config/initializers/session_store.rb | 8 +++ .../config/initializers/wrap_parameters.rb | 14 +++++ .../gallery/test/dummy/config/locales/en.yml | 5 ++ .../gallery/test/dummy/config/routes.rb | 58 ++++++++++++++++++ .../gallery/test/dummy/lib/assets/.gitkeep | 0 .../gallery/test/dummy/log/.gitkeep | 0 .../gallery/test/dummy/public/404.html | 26 ++++++++ .../gallery/test/dummy/public/422.html | 26 ++++++++ .../gallery/test/dummy/public/500.html | 26 ++++++++ .../gallery/test/dummy/public/favicon.ico | 0 .../gallery/test/dummy/script/rails | 6 ++ .../gallery/test/gallery_test.rb | 7 +++ .../test/integration/navigation_test.rb | 10 ++++ .../gallery/test/test_helper.rb | 10 ++++ 54 files changed, 616 insertions(+) create mode 100644 vendor/built_in_modules/gallery/.gitignore create mode 100644 vendor/built_in_modules/gallery/Gemfile create mode 100644 vendor/built_in_modules/gallery/MIT-LICENSE create mode 100644 vendor/built_in_modules/gallery/README.rdoc create mode 100644 vendor/built_in_modules/gallery/Rakefile create mode 100644 vendor/built_in_modules/gallery/app/assets/images/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/assets/stylesheets/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/controllers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/helpers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/mailers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/models/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/views/.gitkeep create mode 100644 vendor/built_in_modules/gallery/config/routes.rb create mode 100644 vendor/built_in_modules/gallery/gallery.gemspec create mode 100644 vendor/built_in_modules/gallery/lib/gallery.rb create mode 100644 vendor/built_in_modules/gallery/lib/gallery/engine.rb create mode 100644 vendor/built_in_modules/gallery/lib/gallery/version.rb create mode 100644 vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake create mode 100755 vendor/built_in_modules/gallery/script/rails create mode 100644 vendor/built_in_modules/gallery/test/dummy/Rakefile create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/mailers/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/models/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config.ru create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/application.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/boot.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/database.yml create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environment.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml create mode 100644 vendor/built_in_modules/gallery/test/dummy/config/routes.rb create mode 100644 vendor/built_in_modules/gallery/test/dummy/lib/assets/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/log/.gitkeep create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/404.html create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/422.html create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/500.html create mode 100644 vendor/built_in_modules/gallery/test/dummy/public/favicon.ico create mode 100755 vendor/built_in_modules/gallery/test/dummy/script/rails create mode 100644 vendor/built_in_modules/gallery/test/gallery_test.rb create mode 100644 vendor/built_in_modules/gallery/test/integration/navigation_test.rb create mode 100644 vendor/built_in_modules/gallery/test/test_helper.rb diff --git a/vendor/built_in_modules/gallery/.gitignore b/vendor/built_in_modules/gallery/.gitignore new file mode 100644 index 00000000..1463de6d --- /dev/null +++ b/vendor/built_in_modules/gallery/.gitignore @@ -0,0 +1,6 @@ +.bundle/ +log/*.log +pkg/ +test/dummy/db/*.sqlite3 +test/dummy/log/*.log +test/dummy/tmp/ \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/Gemfile b/vendor/built_in_modules/gallery/Gemfile new file mode 100644 index 00000000..ecdc12cc --- /dev/null +++ b/vendor/built_in_modules/gallery/Gemfile @@ -0,0 +1,17 @@ +source "http://rubygems.org" + +# Declare your gem's dependencies in gallery.gemspec. +# Bundler will treat runtime dependencies like base dependencies, and +# development dependencies will be added by default to the :development group. +gemspec + +# jquery-rails is used by the dummy application +gem "jquery-rails" + +# Declare any dependencies that are still in development here instead of in +# your gemspec. These might include edge Rails or gems from your path or +# Git. Remember to move these dependencies to your gemspec before releasing +# your gem to rubygems.org. + +# To use debugger +# gem 'ruby-debug19', :require => 'ruby-debug' diff --git a/vendor/built_in_modules/gallery/MIT-LICENSE b/vendor/built_in_modules/gallery/MIT-LICENSE new file mode 100644 index 00000000..406f17b7 --- /dev/null +++ b/vendor/built_in_modules/gallery/MIT-LICENSE @@ -0,0 +1,20 @@ +Copyright 2012 YOURNAME + +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/vendor/built_in_modules/gallery/README.rdoc b/vendor/built_in_modules/gallery/README.rdoc new file mode 100644 index 00000000..546bcede --- /dev/null +++ b/vendor/built_in_modules/gallery/README.rdoc @@ -0,0 +1,3 @@ += Gallery + +This project rocks and uses MIT-LICENSE. \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/Rakefile b/vendor/built_in_modules/gallery/Rakefile new file mode 100644 index 00000000..518b4f85 --- /dev/null +++ b/vendor/built_in_modules/gallery/Rakefile @@ -0,0 +1,39 @@ +#!/usr/bin/env rake +begin + require 'bundler/setup' +rescue LoadError + puts 'You must `gem install bundler` and `bundle install` to run rake tasks' +end +begin + require 'rdoc/task' +rescue LoadError + require 'rdoc/rdoc' + require 'rake/rdoctask' + RDoc::Task = Rake::RDocTask +end + +RDoc::Task.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'rdoc' + rdoc.title = 'Gallery' + rdoc.options << '--line-numbers' + rdoc.rdoc_files.include('README.rdoc') + rdoc.rdoc_files.include('lib/**/*.rb') +end + +APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__) +load 'rails/tasks/engine.rake' + + +Bundler::GemHelper.install_tasks + +require 'rake/testtask' + +Rake::TestTask.new(:test) do |t| + t.libs << 'lib' + t.libs << 'test' + t.pattern = 'test/**/*_test.rb' + t.verbose = false +end + + +task :default => :test diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/images/gallery/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/assets/stylesheets/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/stylesheets/gallery/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/controllers/.gitkeep b/vendor/built_in_modules/gallery/app/controllers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/helpers/.gitkeep b/vendor/built_in_modules/gallery/app/helpers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/mailers/.gitkeep b/vendor/built_in_modules/gallery/app/mailers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/models/.gitkeep b/vendor/built_in_modules/gallery/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/app/views/.gitkeep b/vendor/built_in_modules/gallery/app/views/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/config/routes.rb b/vendor/built_in_modules/gallery/config/routes.rb new file mode 100644 index 00000000..1daf9a41 --- /dev/null +++ b/vendor/built_in_modules/gallery/config/routes.rb @@ -0,0 +1,2 @@ +Rails.application.routes.draw do +end diff --git a/vendor/built_in_modules/gallery/gallery.gemspec b/vendor/built_in_modules/gallery/gallery.gemspec new file mode 100644 index 00000000..675fb9a7 --- /dev/null +++ b/vendor/built_in_modules/gallery/gallery.gemspec @@ -0,0 +1,23 @@ +$:.push File.expand_path("../lib", __FILE__) + +# Maintain your gem's version: +require "gallery/version" + +# Describe your gem and declare its dependencies: +Gem::Specification.new do |s| + s.name = "gallery" + s.version = Gallery::VERSION + s.authors = ["TODO: Your name"] + s.email = ["TODO: Your email"] + s.homepage = "TODO" + s.summary = "TODO: Summary of Gallery." + s.description = "TODO: Description of Gallery." + + s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"] + s.test_files = Dir["test/**/*"] + + s.add_dependency "rails", "~> 3.1.4" + # s.add_dependency "jquery-rails" + + s.add_development_dependency "sqlite3" +end diff --git a/vendor/built_in_modules/gallery/lib/gallery.rb b/vendor/built_in_modules/gallery/lib/gallery.rb new file mode 100644 index 00000000..b2f89e69 --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/gallery.rb @@ -0,0 +1,4 @@ +require "gallery/engine" + +module Gallery +end diff --git a/vendor/built_in_modules/gallery/lib/gallery/engine.rb b/vendor/built_in_modules/gallery/lib/gallery/engine.rb new file mode 100644 index 00000000..f798ebb0 --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/gallery/engine.rb @@ -0,0 +1,4 @@ +module Gallery + class Engine < Rails::Engine + end +end diff --git a/vendor/built_in_modules/gallery/lib/gallery/version.rb b/vendor/built_in_modules/gallery/lib/gallery/version.rb new file mode 100644 index 00000000..c925aa16 --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/gallery/version.rb @@ -0,0 +1,3 @@ +module Gallery + VERSION = "0.0.1" +end diff --git a/vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake b/vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake new file mode 100644 index 00000000..82b1f13f --- /dev/null +++ b/vendor/built_in_modules/gallery/lib/tasks/gallery_tasks.rake @@ -0,0 +1,4 @@ +# desc "Explaining what the task does" +# task :gallery do +# # Task goes here +# end diff --git a/vendor/built_in_modules/gallery/script/rails b/vendor/built_in_modules/gallery/script/rails new file mode 100755 index 00000000..e323e44b --- /dev/null +++ b/vendor/built_in_modules/gallery/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +ENGINE_PATH = File.expand_path('../..', __FILE__) +load File.expand_path('../../test/dummy/script/rails', __FILE__) diff --git a/vendor/built_in_modules/gallery/test/dummy/Rakefile b/vendor/built_in_modules/gallery/test/dummy/Rakefile new file mode 100644 index 00000000..36458522 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Dummy::Application.load_tasks diff --git a/vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js b/vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js new file mode 100644 index 00000000..37c7bfcd --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/assets/javascripts/application.js @@ -0,0 +1,9 @@ +// This is a manifest file that'll be compiled into including all the files listed below. +// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically +// be included in the compiled file accessible from http://example.com/assets/application.js +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css b/vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css new file mode 100644 index 00000000..fc25b572 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/assets/stylesheets/application.css @@ -0,0 +1,7 @@ +/* + * This is a manifest file that'll automatically include all the stylesheets available in this directory + * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at + * the top of the compiled file, but it's generally better to create a new file per style scope. + *= require_self + *= require_tree . +*/ \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb b/vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb new file mode 100644 index 00000000..e8065d95 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/controllers/application_controller.rb @@ -0,0 +1,3 @@ +class ApplicationController < ActionController::Base + protect_from_forgery +end diff --git a/vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb b/vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb new file mode 100644 index 00000000..de6be794 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/vendor/built_in_modules/gallery/test/dummy/app/mailers/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/app/mailers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/app/models/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb b/vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb new file mode 100644 index 00000000..9a8a761b --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Dummy + <%= stylesheet_link_tag "application" %> + <%= javascript_include_tag "application" %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/vendor/built_in_modules/gallery/test/dummy/config.ru b/vendor/built_in_modules/gallery/test/dummy/config.ru new file mode 100644 index 00000000..1989ed8d --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Dummy::Application diff --git a/vendor/built_in_modules/gallery/test/dummy/config/application.rb b/vendor/built_in_modules/gallery/test/dummy/config/application.rb new file mode 100644 index 00000000..19872ae5 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/application.rb @@ -0,0 +1,45 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +Bundler.require +require "gallery" + +module Dummy + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Custom directories with classes and modules you want to be autoloadable. + # config.autoload_paths += %W(#{config.root}/extras) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password] + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + end +end + diff --git a/vendor/built_in_modules/gallery/test/dummy/config/boot.rb b/vendor/built_in_modules/gallery/test/dummy/config/boot.rb new file mode 100644 index 00000000..eba06813 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/boot.rb @@ -0,0 +1,10 @@ +require 'rubygems' +gemfile = File.expand_path('../../../../Gemfile', __FILE__) + +if File.exist?(gemfile) + ENV['BUNDLE_GEMFILE'] = gemfile + require 'bundler' + Bundler.setup +end + +$:.unshift File.expand_path('../../../../lib', __FILE__) \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/test/dummy/config/database.yml b/vendor/built_in_modules/gallery/test/dummy/config/database.yml new file mode 100644 index 00000000..51a4dd45 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +development: + adapter: sqlite3 + database: db/development.sqlite3 + pool: 5 + timeout: 5000 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: sqlite3 + database: db/test.sqlite3 + pool: 5 + timeout: 5000 + +production: + adapter: sqlite3 + database: db/production.sqlite3 + pool: 5 + timeout: 5000 diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environment.rb b/vendor/built_in_modules/gallery/test/dummy/config/environment.rb new file mode 100644 index 00000000..3da5eb91 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environment.rb @@ -0,0 +1,5 @@ +# Load the rails application +require File.expand_path('../application', __FILE__) + +# Initialize the rails application +Dummy::Application.initialize! diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb b/vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb new file mode 100644 index 00000000..95a50b91 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environments/development.rb @@ -0,0 +1,30 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb b/vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb new file mode 100644 index 00000000..ca2c5888 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environments/production.rb @@ -0,0 +1,60 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # Code is not reloaded between requests + config.cache_classes = true + + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false + + # Compress JavaScripts and CSS + config.assets.compress = true + + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = false + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + + # Specifies the header that your server uses for sending files + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # See everything in the log (default is :info) + # config.log_level = :debug + + # Use a different logger for distributed setups + # config.logger = SyslogLogger.new + + # Use a different cache store in production + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # config.assets.precompile += %w( search.js ) + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb b/vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb new file mode 100644 index 00000000..6810c914 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/environments/test.rb @@ -0,0 +1,39 @@ +Dummy::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Log error messages when you accidentally call methods on nil + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Use SQL instead of Active Record's schema dumper when creating the test database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb new file mode 100644 index 00000000..59385cdf --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb new file mode 100644 index 00000000..9e8b0131 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/inflections.rb @@ -0,0 +1,10 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb new file mode 100644 index 00000000..72aca7e4 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb new file mode 100644 index 00000000..8c675cbe --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/secret_token.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +Dummy::Application.config.secret_token = '3df28ce44b3fd9f39a8054cbbfbe942821da69666f30a7e438a61e6ded529e98a5de469bc867c04f3a8d9a182e2417707dfcf4105ecc4b05950728096cf1840f' diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb new file mode 100644 index 00000000..952473ff --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/session_store.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +Dummy::Application.config.session_store :cookie_store, key: '_dummy_session' + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rails generate session_migration") +# Dummy::Application.config.session_store :active_record_store diff --git a/vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb b/vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb new file mode 100644 index 00000000..999df201 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml b/vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml new file mode 100644 index 00000000..179c14ca --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/locales/en.yml @@ -0,0 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + hello: "Hello world" diff --git a/vendor/built_in_modules/gallery/test/dummy/config/routes.rb b/vendor/built_in_modules/gallery/test/dummy/config/routes.rb new file mode 100644 index 00000000..bb509f27 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/config/routes.rb @@ -0,0 +1,58 @@ +Dummy::Application.routes.draw do + # The priority is based upon order of creation: + # first created -> highest priority. + + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action + + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) + + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end + + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end + + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. + # root :to => 'welcome#index' + + # See how all your routes lay out with "rake routes" + + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. + # match ':controller(/:action(/:id(.:format)))' +end diff --git a/vendor/built_in_modules/gallery/test/dummy/lib/assets/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/lib/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/log/.gitkeep b/vendor/built_in_modules/gallery/test/dummy/log/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/public/404.html b/vendor/built_in_modules/gallery/test/dummy/public/404.html new file mode 100644 index 00000000..9a48320a --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/public/404.html @@ -0,0 +1,26 @@ + + + + The page you were looking for doesn't exist (404) + + + + + +
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+ + diff --git a/vendor/built_in_modules/gallery/test/dummy/public/422.html b/vendor/built_in_modules/gallery/test/dummy/public/422.html new file mode 100644 index 00000000..83660ab1 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/public/422.html @@ -0,0 +1,26 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+ + diff --git a/vendor/built_in_modules/gallery/test/dummy/public/500.html b/vendor/built_in_modules/gallery/test/dummy/public/500.html new file mode 100644 index 00000000..b80307fc --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/public/500.html @@ -0,0 +1,26 @@ + + + + We're sorry, but something went wrong (500) + + + + + +
+

We're sorry, but something went wrong.

+

We've been notified about this issue and we'll take a look at it shortly.

+
+ + diff --git a/vendor/built_in_modules/gallery/test/dummy/public/favicon.ico b/vendor/built_in_modules/gallery/test/dummy/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/vendor/built_in_modules/gallery/test/dummy/script/rails b/vendor/built_in_modules/gallery/test/dummy/script/rails new file mode 100755 index 00000000..f8da2cff --- /dev/null +++ b/vendor/built_in_modules/gallery/test/dummy/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +APP_PATH = File.expand_path('../../config/application', __FILE__) +require File.expand_path('../../config/boot', __FILE__) +require 'rails/commands' diff --git a/vendor/built_in_modules/gallery/test/gallery_test.rb b/vendor/built_in_modules/gallery/test/gallery_test.rb new file mode 100644 index 00000000..107de446 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/gallery_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class GalleryTest < ActiveSupport::TestCase + test "truth" do + assert_kind_of Module, Gallery + end +end diff --git a/vendor/built_in_modules/gallery/test/integration/navigation_test.rb b/vendor/built_in_modules/gallery/test/integration/navigation_test.rb new file mode 100644 index 00000000..97a94c9b --- /dev/null +++ b/vendor/built_in_modules/gallery/test/integration/navigation_test.rb @@ -0,0 +1,10 @@ +require 'test_helper' + +class NavigationTest < ActionDispatch::IntegrationTest + fixtures :all + + # test "the truth" do + # assert true + # end +end + diff --git a/vendor/built_in_modules/gallery/test/test_helper.rb b/vendor/built_in_modules/gallery/test/test_helper.rb new file mode 100644 index 00000000..dcd3b276 --- /dev/null +++ b/vendor/built_in_modules/gallery/test/test_helper.rb @@ -0,0 +1,10 @@ +# Configure Rails Environment +ENV["RAILS_ENV"] = "test" + +require File.expand_path("../dummy/config/environment.rb", __FILE__) +require "rails/test_help" + +Rails.backtrace_cleaner.remove_silencers! + +# Load support files +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } From 9f0c0bee7173c8c58e5cbdfaf6dc2cfba9b822bb Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 16 Jul 2012 17:29:46 +0800 Subject: [PATCH 07/28] fixed db error --- config/mongoid.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/mongoid.yml b/config/mongoid.yml index f333e2e6..0f5d06c4 100644 --- a/config/mongoid.yml +++ b/config/mongoid.yml @@ -9,7 +9,7 @@ defaults: &defaults development: <<: *defaults database: prototype_r4_development - + test: <<: *defaults database: prototype_r4_test From 37f6037333c1aae74d5ea6817db8d68bc9f209f8 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 19 Jul 2012 15:44:44 +0800 Subject: [PATCH 08/28] Gallery started. --- app/assets/javascripts/rss.js | 8 ++--- app/controllers/desktop_controller.rb | 1 - app/views/layouts/_side_bar.html.erb | 1 + .../gallery/app/assets/javascripts/gallery.js | 1 + .../app/assets/javascripts/gallery/.gitkeep | 0 .../app/assets/javascripts/galleryAPI.js | 27 +++++++++++++++++ .../back_end/orbit_galleries_controller.rb | 11 +++++++ .../gallery/app/models/gallery_category.rb | 6 ++++ .../back_end/orbit_galleries/index.html.erb | 29 +++++++++++++++++++ .../built_in_modules/gallery/config/routes.rb | 9 ++++++ 10 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/gallery.js delete mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js create mode 100644 vendor/built_in_modules/gallery/app/controllers/panel/gallery/back_end/orbit_galleries_controller.rb create mode 100644 vendor/built_in_modules/gallery/app/models/gallery_category.rb create mode 100644 vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb diff --git a/app/assets/javascripts/rss.js b/app/assets/javascripts/rss.js index 737b08b7..5c17622f 100644 --- a/app/assets/javascripts/rss.js +++ b/app/assets/javascripts/rss.js @@ -384,14 +384,12 @@ modalWindow : function(settings,callbackFn){ if(tempheight>maxheight) tempheight=maxheight; }else{tempheight="auto";} - if(typeof tempwidth!="undefined"){ if(tempwidth.charAt(tempwidth.length-1)=='%') tempwidth=(rgmaskWidth*parseInt(tempwidth.substr(0,tempwidth.length)))/100; if(tempwidth>maxwidth) tempwidth=maxwidth; }else{tempwidth="auto";} - $rss("body").append('
'); $rss("#rgsheath").css({background: "#000", width: "100%", position: "fixed", top: 0, left: 0,opacity:0.5,'z-index':199}); $rss("body").append('
'); @@ -400,7 +398,7 @@ modalWindow : function(settings,callbackFn){ var rgWLeft = (rgmaskWidth-20)/2; $rss("#rgWindow").css({top:rgWTop+"px", left:rgWLeft+"px"}); if(typeof settings.loadDiv!="undefined"){ - dhtml = $rss("#"+settings.loadDiv).html(); + dhtml = $rss(settings.loadDiv).html(); $rss("#rgWindow").html(dhtml).hide(); prepareWindow(); } @@ -416,7 +414,7 @@ modalWindow : function(settings,callbackFn){ if(tempheight!="auto") rgWTop = (rgmaskHeight-tempheight)/2; else{ - tempheight=$rss("#rgWindow").height(); + tempheight=$rss("#rgWindow").height()+30; if(tempheight>maxheight) tempheight=maxheight; rgWTop=(rgmaskHeight-tempheight)/2; @@ -451,7 +449,7 @@ modalWindow : function(settings,callbackFn){ $rss("#rgWindow").animate({top:x+"px", left:y+"px","width":"50px","height":"50px"},300,function(){$rss(this).fadeOut(100).remove();$rss("#rgsheath").fadeOut(500).remove();});}) if(typeof callbackFn=="function") - callbackFn.call(this,dhtml); + callbackFn.call(this,$rss("#rgWindow")); }); } }, diff --git a/app/controllers/desktop_controller.rb b/app/controllers/desktop_controller.rb index 93816d71..286ec1c4 100644 --- a/app/controllers/desktop_controller.rb +++ b/app/controllers/desktop_controller.rb @@ -1,4 +1,3 @@ - class DesktopController< ApplicationController layout 'desktop' before_filter :authenticate_user! diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index 73b5191a..e0028938 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -75,3 +75,4 @@ <%#= content_tag :li, link_to(t('admin.tags'), admin_asset_tags_path), :class => active_for_action('/admin/asset_tags', 'index') %> <%# end -%> <%# end -%> + diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/gallery.js b/vendor/built_in_modules/gallery/app/assets/javascripts/gallery.js new file mode 100644 index 00000000..a683941f --- /dev/null +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/gallery.js @@ -0,0 +1 @@ +//= require galleryAPI \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep b/vendor/built_in_modules/gallery/app/assets/javascripts/gallery/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js new file mode 100644 index 00000000..e05fb2eb --- /dev/null +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js @@ -0,0 +1,27 @@ +var galleryAPI = function(){ + g = this; + + this.initialize = function(){ + $(document).ready(function(){ + bindHandlers() + }) + var bindHandlers = function(){ + $("#gallery_panel a.btn").click(function(){ + rcom.modalWindow({loadDiv:"#"+$(this).attr("href"),width:"400"},function(dom){ + console.log(dom) + dom.find("#category_save_btn").click(function(){ + var lang = { + "en" : dom.find("#category_name_en").val(), + "zh_tw" : dom.find("#category_name_zh_tw").val() + } + $.post("gallery_category_save",{"category":lang},function(){ + + }) + return false; + }) + }); + return false; + }) + } + } +} \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/controllers/panel/gallery/back_end/orbit_galleries_controller.rb b/vendor/built_in_modules/gallery/app/controllers/panel/gallery/back_end/orbit_galleries_controller.rb new file mode 100644 index 00000000..cbe9880b --- /dev/null +++ b/vendor/built_in_modules/gallery/app/controllers/panel/gallery/back_end/orbit_galleries_controller.rb @@ -0,0 +1,11 @@ +class Panel::Gallery::BackEnd::OrbitGalleriesController < OrbitBackendController + + def index + end + + def new_category + GalleryCategory.create(language_value: params["category"]) + render :json=>{"success"=>"true"}.to_json + end + +end \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/models/gallery_category.rb b/vendor/built_in_modules/gallery/app/models/gallery_category.rb new file mode 100644 index 00000000..17e98272 --- /dev/null +++ b/vendor/built_in_modules/gallery/app/models/gallery_category.rb @@ -0,0 +1,6 @@ +class GalleryCategory + include Mongoid::Document + include Mongoid::Timestamps + + has_one :i18n_variable, :as => :language_value, :autosave => true, :dependent => :destroy +end \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb new file mode 100644 index 00000000..2228143c --- /dev/null +++ b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb @@ -0,0 +1,29 @@ +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "galleryAPI" %> +<% end %> + + + + + \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/config/routes.rb b/vendor/built_in_modules/gallery/config/routes.rb index 1daf9a41..ae516d3f 100644 --- a/vendor/built_in_modules/gallery/config/routes.rb +++ b/vendor/built_in_modules/gallery/config/routes.rb @@ -1,2 +1,11 @@ Rails.application.routes.draw do + namespace :panel do + namespace :gallery do + namespace :back_end do + match "orbit_gallery" => "orbit_galleries#index" + match "gallery_category_save" => "orbit_galleries#new_category" + + end + end + end end From 642e0c20aeb5251db40b0f6a131d7b9451120e0c Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 19 Jul 2012 15:54:04 +0800 Subject: [PATCH 09/28] Routes conflicts removed --- vendor/built_in_modules/gallery/config/routes.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/vendor/built_in_modules/gallery/config/routes.rb b/vendor/built_in_modules/gallery/config/routes.rb index 9b221060..ae516d3f 100644 --- a/vendor/built_in_modules/gallery/config/routes.rb +++ b/vendor/built_in_modules/gallery/config/routes.rb @@ -1,6 +1,4 @@ Rails.application.routes.draw do -<<<<<<< HEAD -======= namespace :panel do namespace :gallery do namespace :back_end do @@ -10,5 +8,4 @@ Rails.application.routes.draw do end end end ->>>>>>> gallery_orbit end From 8f23755c0d9d62f1d53f79c84fd9b4f62c65a80b Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 25 Jul 2012 16:20:07 +0800 Subject: [PATCH 10/28] Gallery update --- app/assets/javascripts/rss.js | 7 +- app/uploaders/gallery_uploader.rb | 62 + .../app/assets/images/gallery/albumframe.png | Bin 0 -> 1155 bytes .../app/assets/images/gallery/default.jpg | Bin 0 -> 3857 bytes .../assets/images/gallery/icon_100 copy.png | Bin 0 -> 9240 bytes .../app/assets/images/gallery/icon_100.png | Bin 0 -> 9240 bytes .../app/assets/images/gallery/icon_128.png | Bin 0 -> 12666 bytes .../app/assets/images/gallery/icon_48.png | Bin 0 -> 3017 bytes .../app/assets/images/gallery/icon_75.png | Bin 0 -> 8583 bytes .../app/assets/images/gallery/inputui.png | Bin 0 -> 4244 bytes .../app/assets/images/gallery/pbar-ani.gif | Bin 0 -> 3159 bytes .../app/assets/images/gallery/playall.png | Bin 0 -> 8760 bytes .../app/assets/images/gallery/rgui.png | Bin 0 -> 34844 bytes .../app/assets/images/gallery/sample.jpg | Bin 0 -> 12675 bytes .../app/assets/images/gallery/sampleb.jpg | Bin 0 -> 149083 bytes .../app/assets/images/gallery/slidelistbg.png | Bin 0 -> 194 bytes .../app/assets/images/gallery/slidenav.png | Bin 0 -> 514 bytes .../assets/images/gallery/slidetitlebg.png | Bin 0 -> 219 bytes .../app/assets/images/gallery/slideui.gif | Bin 0 -> 372 bytes .../app/assets/images/gallery/upicon.png | Bin 0 -> 2831 bytes .../app/assets/images/gallery/uploadbg.gif | Bin 0 -> 5150 bytes .../app/assets/images/gallery/uppt.png | Bin 0 -> 658 bytes .../app/assets/images/gallery/upsep.png | Bin 0 -> 231 bytes .../app/assets/javascripts/galleryAPI.js | 180 +- .../app/assets/javascripts/jquery-latest.js | 9404 +++++++++++++++++ .../app/assets/javascripts/jquery-ui.min.js | 414 + .../javascripts/jquery.fileupload-ui.js | 651 ++ .../assets/javascripts/jquery.fileupload.js | 782 ++ .../javascripts/jquery.iframe-transport.js | 156 + .../app/assets/javascripts/jquery.tmpl.min.js | 1 + .../gallery/app/assets/javascripts/upload.js | 39 + .../app/assets/stylesheets/gallery.css | 465 + .../app/assets/stylesheets/jquery-ui.css | 566 + .../stylesheets/jquery.fileupload-ui.css | 168 + .../back_end/orbit_galleries_controller.rb | 80 +- .../gallery/app/models/gallery_album.rb | 12 + .../gallery/app/models/gallery_category.rb | 5 +- .../gallery/app/models/gallery_image.rb | 12 + .../orbit_galleries/add_album.html.erb | 21 + .../orbit_galleries/categorylist.html.erb | 18 + .../back_end/orbit_galleries/index.html.erb | 38 +- .../back_end/orbit_galleries/theater.html.erb | 44 + .../orbit_galleries/upload_panel.html.erb | 108 + .../built_in_modules/gallery/config/routes.rb | 10 +- 44 files changed, 13203 insertions(+), 40 deletions(-) create mode 100644 app/uploaders/gallery_uploader.rb create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/albumframe.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/default.jpg create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/icon_100 copy.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/icon_100.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/icon_128.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/icon_48.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/icon_75.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/inputui.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/pbar-ani.gif create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/playall.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/rgui.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/sample.jpg create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/sampleb.jpg create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/slidelistbg.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/slidenav.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/slidetitlebg.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/slideui.gif create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/upicon.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/uploadbg.gif create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/uppt.png create mode 100755 vendor/built_in_modules/gallery/app/assets/images/gallery/upsep.png create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/jquery-latest.js create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/jquery-ui.min.js create mode 100755 vendor/built_in_modules/gallery/app/assets/javascripts/jquery.fileupload-ui.js create mode 100755 vendor/built_in_modules/gallery/app/assets/javascripts/jquery.fileupload.js create mode 100755 vendor/built_in_modules/gallery/app/assets/javascripts/jquery.iframe-transport.js create mode 100644 vendor/built_in_modules/gallery/app/assets/javascripts/jquery.tmpl.min.js create mode 100755 vendor/built_in_modules/gallery/app/assets/javascripts/upload.js create mode 100755 vendor/built_in_modules/gallery/app/assets/stylesheets/gallery.css create mode 100644 vendor/built_in_modules/gallery/app/assets/stylesheets/jquery-ui.css create mode 100755 vendor/built_in_modules/gallery/app/assets/stylesheets/jquery.fileupload-ui.css create mode 100644 vendor/built_in_modules/gallery/app/models/gallery_album.rb create mode 100644 vendor/built_in_modules/gallery/app/models/gallery_image.rb create mode 100644 vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/add_album.html.erb create mode 100644 vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/categorylist.html.erb create mode 100755 vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/theater.html.erb create mode 100755 vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/upload_panel.html.erb diff --git a/app/assets/javascripts/rss.js b/app/assets/javascripts/rss.js index 5c17622f..7b132c0d 100644 --- a/app/assets/javascripts/rss.js +++ b/app/assets/javascripts/rss.js @@ -379,12 +379,14 @@ modalWindow : function(settings,callbackFn){ var maxwidth = (rgmaskWidth*85)/100; if(typeof tempheight!="undefined"){ + tempheight = tempheight.toString(); if(tempheight.charAt(tempheight.length-1)=='%') tempheight=(rgmaskHeight*parseInt(tempheight.substr(0,tempheight.length)))/100; if(tempheight>maxheight) tempheight=maxheight; }else{tempheight="auto";} if(typeof tempwidth!="undefined"){ + tempwidth = tempwidth.toString(); if(tempwidth.charAt(tempwidth.length-1)=='%') tempwidth=(rgmaskWidth*parseInt(tempwidth.substr(0,tempwidth.length)))/100; if(tempwidth>maxwidth) @@ -462,13 +464,14 @@ modalWindowUpdate : function(settings,callbackFn){ var maxheight = (rgmaskHeight*85)/100; var maxwidth = (rgmaskWidth*85)/100; if(typeof tempheight!="undefined"){ + tempheight = tempheight.toString(); if(tempheight.charAt(tempheight.length-1)=='%') tempheight=(rgmaskHeight*parseInt(tempheight.substr(0,tempheight.length)))/100; if(tempheight>maxheight) tempheight=maxheight; }else{tempheight="auto";} - if(typeof tempwidth!="undefined"){ + tempwidth = tempwidth.toString(); if(tempwidth.charAt(tempwidth.length-1)=='%') tempwidth=(rgmaskWidth*parseInt(tempwidth.substr(0,tempwidth.length)))/100; if(tempwidth>maxwidth) @@ -493,7 +496,7 @@ modalWindowUpdate : function(settings,callbackFn){ if(tempheight!="auto") rgWTop = (rgmaskHeight-tempheight)/2; else{ - tempheight=$rss("#rgwindow_temp_div").height(); + tempheight=$rss("#rgwindow_temp_div").height()+30; if(tempheight>maxheight) tempheight=maxheight; rgWTop=(rgmaskHeight-tempheight)/2; diff --git a/app/uploaders/gallery_uploader.rb b/app/uploaders/gallery_uploader.rb new file mode 100644 index 00000000..773d86d8 --- /dev/null +++ b/app/uploaders/gallery_uploader.rb @@ -0,0 +1,62 @@ +# encoding: utf-8 + +class GalleryUploader < CarrierWave::Uploader::Base + + # Include RMagick or ImageScience support: + # include CarrierWave::RMagick + # include CarrierWave::ImageScience + include CarrierWave::MiniMagick + + # Choose what kind of storage to use for this uploader: + # storage :file + # storage :s3 + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "gallery/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + # version :thumb do + # process :scale => [50, 50] + # end + + version :thumb do + process :resize_to_fit => [120, 90] + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + # def extension_white_list + # %w(jpg jpeg gif png) + # end + + # Override the filename of the uploaded files: + # def filename + # "something.jpg" if original_filename + # end + +# def manipulate! +# raise current_path.inspect +# image = ::MiniMagick::Image.open(current_path) +# image = yield(image) +# image.write(current_path) +# ::MiniMagick::Image.open(current_path) +# rescue ::MiniMagick::Error, ::MiniMagick::Invalid => e +# raise CarrierWave::ProcessingError.new("Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: #{e}") +# end + +end diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/albumframe.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/albumframe.png new file mode 100755 index 0000000000000000000000000000000000000000..531087bca2608ca305a447cdd0addc1b19a719f4 GIT binary patch literal 1155 zcmeAS@N?(olHy`uVBq!ia0vp^Z9tsK!3HG%XGb3cQY^(zo*^7SP{WbZ0pxQQctjR6 zFmMZjFyp1Wb$@_@awV=2CBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^Brh0~}UBIv1rTmSpDVDTHL^rZN~B>Vwhz1B*Qv7?^K*x;TbZ%z1ljqjz??#PN^!JD-2^ zco34@>$qIuh~tGzGpscD?%sK)uw%!avtRYzKDxyBk2SVr!s^3&gQqXbwk|2yaIj1$ zuXTcF$KDAUDiwK2_xSF4WX(GinWa!?|6tPNM)7mgA3vUbz4+Y9#Q_?7CVh#zH2qNV zr_D>QA5GeL=jQ>Scz{Na*RAPaHu-Zq|BroX*H`Q5Rr9OBex}bpp2HjRS3A|WCR$AL zQM+IBYqg^O{PX)KeNp3aPBoH@jfq)tG2=_=#EPhsDM7)(!K*^FR$YHR=}YhW-!q-Q zR>hW=m(Q9zH*{sluMPY5*~zgq+MIv=deO)K1?N_Vt$z98!-vCPzI^#{^Je6C?uXSt zlXt(9-gGl3H9K2-^2rnziRROm%Qd<}R)%cZyEj&I`stbPUjKV69TpyLJk!TbSXlT| z?R*2aDaC$k!@Mv3HNJoI=FjV2k35!cQV0-WaWQ;gbAIys-~8u)8}6@`UtH|`oV|JN z?@0T13!e8fdbBkDcaSg;Wb?5-tUgb@&HsoKnAgH6d{|w@utrJkP(!Cdf)dY+sy6?& zi_ec+9{PI@jp>BdhNAE4^Q11=HiYn0eT!_n60tf?z?qAww?XF z$4-~qf8pmj*5~&`pO;qdQgRJk61Mti_y^`QmdnFdF9k-(+OX<%zx(ZP+`j$W!rc7( zOchqg1JTJ2md{08CweWN#K*@M^(sqoqQ{-8&!0c5hlhv9dk0ChMMXtjI(hQs+hfO$ z6=+QjQaUJM)N$+WwpCYG-P>1Ny?e(Fi<+96HC21{Jf$Qhf8LFbj{f})m^|7qUcC4) z$80swsP^~+p9R_$7VVsK>glGet+(EO`t)hLv$nQ&d7wzIiB#{-*RQj$W^JuoFYLd@ zIDFgfxBbS(#`b-^y?>3iY}oLj+-h!J;QH%}PoF+Lr+8iZy8{oh&1PSX(c5lpY58;c zlKA$nqmS+aZHs?d^2=3gYE^x4@#Gw{+3^A=K0o+fS6Wl^XM2s^f4!+*d#8W7{O(=e zlhS{xckkTcQK?nU47>EaHb#5iy{$`(J?r1Rd*?Rk3;%!V8Eigno3nt$0E4HipUXO@ GgeCwe?G-Kn literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/default.jpg b/vendor/built_in_modules/gallery/app/assets/images/gallery/default.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9c925d34fd2c3fb34761fdacc1f244a9e05c6304 GIT binary patch literal 3857 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 literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/icon_48.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/icon_48.png new file mode 100755 index 0000000000000000000000000000000000000000..7b43f298b723639c48c02e996d9799e57f51d69b GIT binary patch literal 3017 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 LNkvXXu0mjfe2mcM literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/icon_75.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/icon_75.png new file mode 100755 index 0000000000000000000000000000000000000000..1bf4b38718789260f2c28dc4b58b9cb74bdece0f GIT binary patch literal 8583 zcmV;2A$Z=2P)002t}1^@s6I8J)%00009a7bBm000XT z000XT0n*)m`~Uz7PiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000)UNklPsr@;t|>Q>T#Ud1rER@>3UHc;Tn7yz#@fk!y}J8f)K)&*Q{A{P_DlE>fg`v{Gq*j z_hRSHodEE<)To6tY|WZAn3$Nr@#Dwel4aRx&hz|Zn>KC2)~#FL5LE4oa@f9oJ2r0I zh%C!K=CUlCo}HbAh@2(a*SnwqfSIvw-8ww;%rnytK*`MT-lu^?gwv-_qu1?X`SRrm z2=OTZq7dT)2?4?0CBR0LjTjz1upuMfe`PBj`cN8}s;!|ugQy(9nfW$atrlixW|AC2 z2xv4K08qMxOpl1r?RN3)Z+{2R{_uZ63^1|XY#&(HJQ|z_QGJMtlA<`t=AITsLo3zy z(i-jAI-UUdBmn{q+!3G)Oq*&CiJwUWla22MgrGkgH(Z3PuDSv%R;(D1Nqp@_ZP3ij zaym-@kgcekQBq}r^c<;faCQrmB zAOOs!imE+Puc8?c)ijg2QVRf0vjnzhgqnRb0{~ZANbxBuz_M(D0QeBVL=fSz0nQDp zS{h8ca2A1UI5=_kAp&9*mI{RtpdS_j5D5C(dpOpeC1QY71Bpe21p+g{hmbTdEhdm^ zUo>ZCP@EqKB81?90B@S6n;1d~c!0!QhS$v?kpb5c5WpbBm{t@88jXfo!3cSb(<}ra zc#80RROMIe1^{COa7uw@p|h@sv4iw%ultv>0NTIjZ&%6M{X4lMM%e;yotRByd9M zy_vcIP!mNh&~gkQP$d-;UKu=u8G!&H(jZ`_sZx-$qN)g+*HVq95aXbJzK?!!5p0>D zL;WYpHz25~5t}x#E|#J^snRy6`iIhkMUu(FCJ_Tdfc~BmbyA-eow*370HUVL6&`_V z2&VuOg-YtD5@e`FP#cq?F~tqmAQk{f5D04k3!(B^!!jA;vrO8oCMF`fAOI9NMJ2^H zsx85rzliaNDdDrYYh(fg0vx*v@DhPSbw6N!CqT6(Sok-2IC4;X4W>aVY;cT>antPa zfs%%c=$brvc&`y#4R;YUTnr7XuM*uIA0Q$M7nn`zu;@h52EhqCRe~20AP{`;>VHJQ zAe0s@qd%g`DS?>Ig5YE*lcA;`9X|pNfI*=En9Q2a z(+oqxE2QB*XhaO+bw>aQqMhqv0|yYef=nq)SI9X;lL!?CXXYwUmA?rL6*h)S@f{!U75e4-a914;}&m91wy=doq(=k{PP`3&3&5&8Dg5ODt>( z0B>f=EGhj+j@x_HMtHCZDa0rhahmzL2qEf_ftZJ~xlj|dYCkCGPJ%6pRz3?Ms9*E? zgeWlY^=D2O~P9%XvjbuJ0U}Axw)9Iqu>qVPHYhn^p%UY&Yl!5_; zpeAGBmH|WeQ9y$!R`k9k1PalQsdjUOBBCCViQvg1x(V8sB}7Ccv6&>ZzJFHce_p~$ zh*x)uDy$DO%@Jk20+E&PSRF!`b-W9b`Yg3O9Az{raQwn z3g|>cSj~c6%Id|^95PdFx972G(?)#cL-%9%?yIn@HJLu-=V#{e@85b9fBCt;!HJh% zMyu6IIa)pMQ@kWK(5ey92TtjcYM3rgNMVe(C>mlkHBC!V(rinG98%Iv95gTy+eWCY z7V_bXM?6OjQ!B$J7Ww)z)aoFY-xbXF7eUfBq-z@dzVsBetPI@dI;4nzY0 zN1$8*ZlW_rTs)pbqZ(;uej@o313k=J(98UlI49c<`cve}KI5XeIC2!k? z2ag?sFr)MumDr*d*CJ8$Pi)bTMSlX>Vx?jl#7W9E1Hr(hML(_}3>hO5@nQ@YOd2^u z-Tj=eu!i$QW=g3_WFABqy>1Ve?AV6iyy^;cd;O7*@ZO`>&v4B(yRdD`W|XD32}VS3 zSc@p7NC;#}yk-%iQc@5}mA{JgFWUyPaN@5-!~~~cS1hL`f{jzHbmD66;5>vCDP|Bs zoEW$x1&TyqsL-4^^!t6RUq6efWs}JBd}Mw_M98uX7hJFc>t@#~Q$Yk_ffF&KR)L5u zf<*m|_nHqfGaO5L9Y0F%5jb{Wi$u&a07ZliOh+vi2Np5&4fTv__Qew~RZC3=1g>%mBzq65P1b7>~>i;{YOvICY>lNfNQ0V6<8- zJo)th;H&@ob+jfY7VMGGa*{){(ZE-~_D%fg$IqkLXsT(aEWvi(sAmy@bIvFmGY`X2 zEGi^QnYRj9qqO-X7V}e@P^)l_MTwZqv|5P3PQWBe+bjiVCE_k32%$vH)YFKjbNIqP zJc11y*W}fu!(aRon$3m^!SEXy70pcW26nvn`uv!g z!%Pzu)x#7`Hl|7e1Tn~=P{$iH63c19z-izLQ<3*oeQrtV4uD|(L0L-uA*~>Qourc0 zx~rO6s2^#yCeZI^`264gBmV8{-@@wEt02xH1dkIZUdHp!pFne>iHT+t zK7^Fz2LqphDOE_K)`gmO*V$s_##AHALTi3^?%#{`v+M9zfBgmc$h(P}wz3-f02Z$3 zpUBAxP?mmyiuD*_4cjSMSd9QqjC~N6gtuT!X+S`0asoaCy!7%(oH+55#9uKprlyu9 zeG$BrTCJI&Fm9j3%K(=t*tjoHSP>m55k7 zfTWyIoFud^rrkwZqTB7^-M8F`qlfMUESb;q0?mfQvBP&`)0@_#+wFs$8wmfzWJOmK z5{uH}VXOrX3TvTINmfaT39Sgj86Te(#8tS~{LvZ6M5-C4L>WU#b3*+A5;^#oQY8u* zi40^?LHVLojXHc6h#7faqz&lxGpt>+8V|nzFlJ_^koEd-;^3UKc~iv#8>5ltPNV6W z@t`zu*Sfn}S=NWD^R%58Q5;5`OpYwflL=BpAOM_5%KG&_HdAyUvS&s<-o}C`@$6+; zqVy#W-hDfc9KH)a1Y}u$R+cc|Ze!cl&A8{lKI8L4@|}@u7pfD3is?dXE;(-mU)A6+ zkdIe@PNSkk@RIVjiukA0Oaf->LEuF2MaraVFsZ6T6|0~cofjpFvc#bS`?3G_Tao8E z@;o1jxI3L5Zn$Fw#l0l&-hSy@(e3uMFyY)lmkwf@#k^=^9mfYRnDS5+`NT3W=kuh#O=6Q0hHi3;S>$r&rMcIhh32$hs;@DM6?GPqDE~n3CT@ZG6ONscS|U z;uvH^AFQ&>M98un!h&N*?#8}%--II1&thR0ySm*T)~#EMyWVpfCMG6O1u_Cn6NrAoK|BPqG_5x)9Q5tc~PL*XyDk< zyK(DHdyw_}D7{}&V{o_I#buYi6}RoZ5oKAXIwcX%?e)=YHqmT0;Ddi96b&a(E9RIZ zEz9JRmQaj}RHZ+mmXiv*inOcwtHg<$32WqSpePE6bGY~L0bF;@E}WTfYdW&TO95<# zJ=b4@-B(|UZodx@(CKz@(M4-<|Ive3vwF4q!KL6V4XM@Q)ES0Uq)2_BL=cixd=sJ6 z{Kl?fP{At5BuczREi^wR&LuO?iyV!H!~I7OV$b!v(d+fjiCA2Wmn%!{!+OuYo3ZsR zb7*(_xO&%>_?-{EA6H!dcGMdkmR1T&jkcVkRrEbkGhjX~Snp`nS6Y?LB8gY;tfQ1f zbK=ZY$y&E$_Mkv$Jc^?sOrf6tb4KtZ?8Q`dN;dnQ1(5?7i4^#m--d>5aRJvP3`2 z1{(K<3oCVboMYXv!c5|v`W7=scCLzSv2WDa&dhSPg9q-weMj!beMj!Wy0xn@-{~e^ zjI9pX>-90Sd!u;+%|m~VIR=8HGtLk}LshKpv=&vKCHr21Ko3oclJ2aX-Wr8~A^zTJLR4q8!& zG!iYbA|0D7r0U{zA{E^sRCCTM(6T7eY&LQ4;k&Wt`fJeb_E7o~y+tBWGUcG}&6pX)r1*I?;7p|?+G?4ExNmUURhdeJZ zF)@J;K6nIsZrF`Zw`;vtI%vM#!P+&e@W8zX@urO%uy*w-JoMoEaLL=Yq21}es;9uJ zew*w};tvDyYqKn@0MmUng-9(W23C(R3#z)%LpE?P1&2&A9*G_hNQ-E#}*u zU;FdadgjnC>a)h;EUxvR1BChcd2D&h96oUW5zMYzdrm&;*G62SIy*TEn7YxFgfawd zC9Qte!{s|K#X}!Bh6`5AATNqqNAlT+%m<1dBZ$Stxye`Jh3Kr`t9R>%kYPIHRL)w>$XU=l>2xUep{TrE@*$oMEV)KTJn?Yv*r>YV06YE!h$C)mo)O zsA`7wLs234#Ih<)1Z#2|^g&e-m}@7~D;Wj=MOom)iI;Kln`W2hvwFQAR<2xu8?WD; z`0A{mA@jzmzj?n7@d9X?x^k5RzPQ}M#aPbtFN1Z~cozAy^ zef@Zhr7-m~)*wPCtEzOU_07VUc-!_lteBocmSrP-up33g5;L}K-GX;qep#(TUGIVb z7Kd@8EO5w7#&)j^i{+Q&;Dd2pjb?LXGC%T!#q{(vR<2x$=9ruRKVIH@6h(1<4Y(m_ zv&Cx?ZU0KrA39Ig;f-ry=&%rt`g*_Wa(P3umZDkXj*$E+e8DT(`CpbsEi`8rLJ%TC zqtQ64hnn1!l83w-VhrxhM`6M`?f}Q;nc>}ZNEN#_;td0wf?Lqz}S!y zH-%~~OmS@eYZ2-xC(8TG%# zzc(7%bMfSpPvXRh6L8Lb(#_1weEMfU``J6c_r34kGBq`Yty{OIfeQ&EzK&Wq>b-G- z9;b?bi3WTC!ToX zGeuF{v}4B(%+1Xu{}nszMw!b(CRR7kQGXxSqH)f8*v}1r1Iaj3JC`x_=ZWYkji;Y} z8bA2K58#~p%I3|RA8NH)&$yx}Fg-o}%<|>S@0p*U|L|jvJ@(Njo_HdC1MX6zTir?5 z6WU>izL0|-6`|^5#y$I$M9}yRxLKBUn$6~?rl+SrJvB9TI?FQr-vDsr*TOqZK!*ST N002ovPDHLkV1h)JO}+pC literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/inputui.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/inputui.png new file mode 100755 index 0000000000000000000000000000000000000000..cfb2ca9237c5e15c1723966ba0f387878d7193ff GIT binary patch literal 4244 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 literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/playall.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/playall.png new file mode 100755 index 0000000000000000000000000000000000000000..1ec2d3da4468e0c283dcaef61bb7e8ae4599f2f3 GIT binary patch literal 8760 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 nx)E_Dfu(xUJB6s)T@AJJqZS7+HrA(mnS~g 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

>SD8d3D<@-2GMHCsMfnZMtk4J(b>s&t6Y(8 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 literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/slidelistbg.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/slidelistbg.png new file mode 100755 index 0000000000000000000000000000000000000000..8d468d00048c31f5610f665839e2ea63ab9eae6e GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u@pObhHwBu4M$1`kk47*5n0T@ zz%2yAjF;}#{Q(NfmAFQf1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(6>KU$<_jnCd zDF#yMT$Gwvl9`{U5R#dj%3x@yZ)B`*XjqgfC=65~;pyTSA~7{NB_ZL)83&dGCAW(! doL*_NFzEI(9RH=v%@0(=;OXk;vd$@?2>=`+GOqvt literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/slidenav.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/slidenav.png new file mode 100755 index 0000000000000000000000000000000000000000..79fd32ea0803ee352b6a78dcfcf7f87eb141b7ec GIT binary patch literal 514 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 E1cvlQ`v3p{ literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/uploadbg.gif b/vendor/built_in_modules/gallery/app/assets/images/gallery/uploadbg.gif new file mode 100755 index 0000000000000000000000000000000000000000..e5fac4244e2982f1139d841e39fc5d1994111ec4 GIT binary patch literal 5150 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 MOePz~005W&2i3)}9{>OV literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/uppt.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/uppt.png new file mode 100755 index 0000000000000000000000000000000000000000..b1c0db0a6a74c79a86afa30cba134f4e9bfef8b9 GIT binary patch literal 658 zcmV;D0&V??P)X)>i_@& z=t)FDR5*=&luMExF$jY{gpZK>A1||>^$#cuKQh^*tGe248?c1rux)-kGlQfzUfz;9D$V>pb`vvKxQh=eVN#&jk zp+2x?OjTjbr;AX~(b!asvAxQDHAX&lkVCjLKqVP@(jv6eSjHbhK&x?(|86V_Qq<0c!yO+ z5(sR@(3cddC6n}R2Mj& z1~M0l-FkI5D;GK~SBUARy0AeJ@cDcQ1yx045E-O|J;;X4d@`#~ZL$myXlAxRk2Z6y z+ZJrIq$79f2?s;2q^eot9ksP7V2I4;Fkw@l&t~6492D1C>!;N9qs%qWGfuE4E~2|> zeX5>%LVkxH(vjy8tuH5$T-VK7m9vaYry`(sohaq5k8#okn73=r!ugBWGI3nV`x>wG1cRUjx sCcnPE{^`NJ)NX$Q_{D!7{cjQA4@g#xTD4Q{i~s-t07*qoM6N<$g6*RYWdHyG literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/images/gallery/upsep.png b/vendor/built_in_modules/gallery/app/assets/images/gallery/upsep.png new file mode 100755 index 0000000000000000000000000000000000000000..314f8ac9cbeaf1e87a43a7035e6a7497fe0a26e2 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx`!3HF+G-{UsDVAa<&kznEsNqQI0P;BtJR*x3 z7`TN%nDNrxx<5ccu@cva66d1S#FEVXJcW?V+*AfbLwzG7eM7@jSIf$PD&#;ag7ec# z$`gxH85~pclTsDjGK*5n^NX^J6`X@j^$b_bd%Om!wDojx43U^R)qkfTg968C!{yQ& zr#7pGWh`cr75{YTZu^qVNem2b#{^GQ<~});sF!|tgWB`m{&K%w2XnkV6RD6~Rrt)Y R?=8?E22WQ%mvv4FO#qWpN1Olv literal 0 HcmV?d00001 diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js index e05fb2eb..0eb8e6d7 100644 --- a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js @@ -1,27 +1,173 @@ var galleryAPI = function(){ g = this; - + this.urlVars = rcom.getUrlVars(); + this.albumArea = $("#orbit_gallery"); + this.loadArea = ""; this.initialize = function(){ $(document).ready(function(){ - bindHandlers() + bindHandlers(); + if(typeof g.urlVars['cat']!= "undefined"){ + g.loadAlbums(g.urlVars['cat']); + g.loadArea = "albums"; + }else if(typeof g.urlVars['album']!= "undefined"){ + g.loadImages(g.urlVars['album']); + g.loadArea = "images"; + }else if(typeof g.urlVars['theater']!= "undefined"){ + g.loadTheater(g.urlVars['theater']); + g.loadArea = "theater"; + }else{ + g.loadAlbums("all"); + g.loadArea = "albums"; + } }) var bindHandlers = function(){ $("#gallery_panel a.btn").click(function(){ - rcom.modalWindow({loadDiv:"#"+$(this).attr("href"),width:"400"},function(dom){ - console.log(dom) - dom.find("#category_save_btn").click(function(){ - var lang = { - "en" : dom.find("#category_name_en").val(), - "zh_tw" : dom.find("#category_name_zh_tw").val() - } - $.post("gallery_category_save",{"category":lang},function(){ - - }) - return false; - }) - }); - return false; + switch ($(this).attr("href")){ + case "categories": + g.initializeCategories(); + break; + } + }); + $("select#category_filter").change(function(){ + var val = $(this).val(); + window.location = "orbit_gallery?cat="+val; }) } } -} \ No newline at end of file + + this.initializeCategories = function(){ + var deleteCategory = function(a){ + var cid = a.attr("href"); + $.post("gallery_category_delete",{id:cid},function(response){ + if(response.success) + a.parent().hide("slide",function(){a.parent().remove();}) + }) + } + + $.get("categorylist",function(html){ + rcom.modalWindow({loadHtml:html,width:"400","closeBtn":false},function(dom){ + dom.find("ul#category_list a.delete").click(function(){ + var a = $(this); + deleteCategory(a); + }) + dom.find("#category_save_btn").click(function(){ + var lang = { + "en" : dom.find("#category_name_en").val(), + "zh_tw" : dom.find("#category_name_zh_tw").val() + }; + $.post("gallery_category_save",{"category":lang},function(response){ + if(response.success){ + var $li = $("

  • "+lang.en+" Delete
  • "); + dom.find("ul#category_list").append($li); + $li.show('slide'); + $li.find("a.delete").click(function(){ + deleteCategory($(this)); + }) + dom.find("input[type=text]").val(""); + } + }) + }) + dom.find("#category_close_btn").click(function(){ + rcom.modalWindowClose(); + }) + }); + }) + } + this.makeNewAlbum = function(){ + $.get("add_album",function(html){ + rcom.modalWindow({loadHtml:html,width:400,"closeBtn":false},function(dom){ + dom.find("#album_name_save_btn").click(function(){ + var options ={ + cid : dom.find("select#category_list").val(), + albumname : dom.find("#name_en").val(), + albumdesc : dom.find("#desc_en").val() + } + if(options.cid){ + $.post("create_album",options,function(response){ + if(g.loadArea == "albums") + g.loadAlbums("all"); + rcom.modalWindowClose(); + }) + } + }) + dom.find("#album_name_close_btn").click(function(){ + rcom.modalWindowClose(); + }) + }) + + }) + } + this.loadAlbums = function(id){ + var headbtn = $('Add Album'); + headbtn.click(function(){g.makeNewAlbum();}) + g.albumArea.find(".rghead .rgfn").html(headbtn); + g.albumArea.find("#imgholder").empty(); + var $addsign = $(''); + $addsign.find("a").click(function(){g.makeNewAlbum();}) + $.getJSON("get_albums",{cid:id},function(albums){ + $.each(albums,function(i,album){ + var $img = $("
    "+album.name+"
    "); + g.albumArea.find("#imgholder").append($img); + }) + g.albumArea.find("#imgholder").append($addsign); + }) + } + this.loadImages = function(id){ + //'); + headarea.find("a.bt-add").click(function(){ + showUploadPanel(); + }) + uploadpanel.find("a.bt-cls").click(function(){ + uploadpanel.hide("slide"); + frame.remove(); + g.loadImages(id); + panelopen = false; + }) + var panelopen = false; + var showUploadPanel = function(){ + if(!panelopen){ + uploadpanel.prepend(frame); + uploadpanel.show("slide"); + panelopen = true; + } + } + g.albumArea.find(".rghead .rgfn").html(headarea); + g.albumArea.find(".rghead .rgfn").append(uploadpanel); + g.albumArea.find("#imgholder").empty(); + var $addsign = $(''); + $addsign.find("a").click(function(){showUploadPanel();}) + $.getJSON("get_images",{aid:id},function(images){ + $.each(images,function(i,image){ + var thumb = image.file.thumb.url; + var $img = $("
    "); + g.albumArea.find("#imgholder").append($img); + }) + g.albumArea.find("#imgholder").append($addsign); + }) + g.albumArea.find("#imgholder").append($addsign); + + } + this.loadTheater = function(id){ + var head = $('Back to photos
    Gallery
    '); + g.albumArea.find("#imgholder").load("theater?pic="+id,function(theater){ + var albumid = $(theater).find("#main_pic").attr("data-content"); + head.attr("href","orbit_gallery?album="+albumid); + g.albumArea.find(".rghead .rgfn").html(head); + }) + } +} + + + + + + + + + + diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/jquery-latest.js b/vendor/built_in_modules/gallery/app/assets/javascripts/jquery-latest.js new file mode 100644 index 00000000..3774ff98 --- /dev/null +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/jquery-latest.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
    " + + "" + + "
    "; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

    "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
    "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
    ", "
    " ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + col: [ 2, "", "
    " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + + <%= javascript_include_tag "jquery-ui.min" %> + <%= javascript_include_tag "jquery.tmpl.min" %> + <%= javascript_include_tag "jquery.iframe-transport" %> + <%= javascript_include_tag "jquery.fileupload" %> + <%= javascript_include_tag "jquery.fileupload-ui" %> + <%= javascript_include_tag "upload" %> + + + + + diff --git a/vendor/built_in_modules/gallery/config/routes.rb b/vendor/built_in_modules/gallery/config/routes.rb index ae516d3f..4c4f71ac 100644 --- a/vendor/built_in_modules/gallery/config/routes.rb +++ b/vendor/built_in_modules/gallery/config/routes.rb @@ -4,7 +4,15 @@ Rails.application.routes.draw do namespace :back_end do match "orbit_gallery" => "orbit_galleries#index" match "gallery_category_save" => "orbit_galleries#new_category" - + match "categorylist" => "orbit_galleries#categorylist" + match "gallery_category_delete" => "orbit_galleries#gallery_category_delete" + match "add_album" => "orbit_galleries#add_album" + match "create_album" => "orbit_galleries#create_album" + match "get_albums" => "orbit_galleries#get_albums" + match "upload_image" => "orbit_galleries#upload_image" + match "upload_panel" => "orbit_galleries#upload_panel" + match "get_images" => "orbit_galleries#get_images" + match "theater" => "orbit_galleries#theater" end end end From 929cd3b0ccea9ad84689f0c941320949f751fb8e Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Sun, 29 Jul 2012 18:52:30 +0800 Subject: [PATCH 11/28] Gallery update.. --- app/uploaders/gallery_uploader.rb | 2 +- .../app/assets/javascripts/galleryAPI.js | 238 +++++++++++++++++- .../app/assets/stylesheets/gallery.css | 8 +- .../back_end/orbit_galleries_controller.rb | 49 +++- .../gallery/app/models/gallery_album.rb | 3 +- .../orbit_galleries/edit_album.html.erb | 24 ++ .../back_end/orbit_galleries/theater.html.erb | 35 +-- .../built_in_modules/gallery/config/routes.rb | 5 + 8 files changed, 324 insertions(+), 40 deletions(-) create mode 100644 vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/edit_album.html.erb diff --git a/app/uploaders/gallery_uploader.rb b/app/uploaders/gallery_uploader.rb index 773d86d8..8f04cc2f 100644 --- a/app/uploaders/gallery_uploader.rb +++ b/app/uploaders/gallery_uploader.rb @@ -35,7 +35,7 @@ class GalleryUploader < CarrierWave::Uploader::Base # end version :thumb do - process :resize_to_fit => [120, 90] + process :resize_to_fill => [120, 90] end # Add a white list of extensions which are allowed to be uploaded. diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js index 0eb8e6d7..37db6b92 100644 --- a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js @@ -15,6 +15,9 @@ var galleryAPI = function(){ }else if(typeof g.urlVars['theater']!= "undefined"){ g.loadTheater(g.urlVars['theater']); g.loadArea = "theater"; + }else if(typeof g.urlVars['edit']!= "undefined"){ + g.editAlbum(g.urlVars['edit']); + g.loadArea = "edit"; }else{ g.loadAlbums("all"); g.loadArea = "albums"; @@ -97,6 +100,14 @@ var galleryAPI = function(){ }) } + this.deleteAlbum = function(id){ + if(confirm("Delete this Album?")){ + $.post("delete_album",{aid:id},function(){ + window.location = "orbit_gallery"; + }) + } + } + this.loadAlbums = function(id){ var headbtn = $('Add Album'); headbtn.click(function(){g.makeNewAlbum();}) @@ -106,7 +117,10 @@ var galleryAPI = function(){ $addsign.find("a").click(function(){g.makeNewAlbum();}) $.getJSON("get_albums",{cid:id},function(albums){ $.each(albums,function(i,album){ - var $img = $("
    "+album.name+"
    "); + if(album.cover == "default") + var $img = $("
    "+album.name+"
    "); + else + var $img = $("
    "+album.name+"
    "); g.albumArea.find("#imgholder").append($img); }) g.albumArea.find("#imgholder").append($addsign); @@ -115,13 +129,20 @@ var galleryAPI = function(){ this.loadImages = function(id){ //'); - headarea.find("a.bt-add").click(function(){ + g.albumArea.find(".rghead .rgfn").html(headarea); + g.albumArea.find(".rghead .rgfn a.bt-add").click(function(){ showUploadPanel(); }) + g.albumArea.find(".rghead .rgfn a.bt-del").click(function(){ + g.deleteAlbum(id); + }) uploadpanel.find("a.bt-cls").click(function(){ uploadpanel.hide("slide"); frame.remove(); @@ -136,7 +157,7 @@ var galleryAPI = function(){ panelopen = true; } } - g.albumArea.find(".rghead .rgfn").html(headarea); + g.albumArea.find(".rghead .rgfn").append(uploadpanel); g.albumArea.find("#imgholder").empty(); var $addsign = $(''); @@ -153,13 +174,216 @@ var galleryAPI = function(){ } this.loadTheater = function(id){ - var head = $('Back to photos
    Gallery
    '); - g.albumArea.find("#imgholder").load("theater?pic="+id,function(theater){ + var imageArray; + var imagecount = 0; + var picHeight = 0; + var bindHandlers = function(){ + var $slidelist = $('.slidelist'), + $rslide = $('.rslide'), + $rslidenav = $('.rslidenav'), + $img = $("#main_pic img"); + $(".slidectrl a.togglelist").click(function(){ + var rslide_h = $rslide.outerHeight(); + if ( $slidelist.height() < 1 ){ + $slidelist.stop().animate({'height':rslide_h - 30}, 300); + $slidelist.find("ul").show(); + } else { + $slidelist.stop().animate({'height':'0px'}, 300); + $slidelist.find("ul").hide(); + } + }) + $(".slidectrl a.togglescreen").click(function(){ + toggleFullscreen(); + }) + $slidelist.find("a.list_element").click(function(){ + imagecount = parseInt($(this).parent().attr("for")); + changeImage($(this)); + }) + $rslidenav.find("a.navN").click(function(){ + nextpic($(this)); + }) + $rslidenav.find("a.navP").click(function(){ + prevpic($(this)); + }) + $("a#nextpic").click(function(){ + nextpic($(this)); + }) + + $(document).keydown(function(e){ + if (e.keyCode == 37){ + prevpic($rslidenav.find("a.navP")); + return false; + } + if(e.keyCode == 39){ + nextpic($rslidenav.find("a.navN")); + return false; + } + if(e.keyCode == 27){ + + toggleFullscreen(); + return false; + } + }); + + var nextpic = function(dom){ + if(imagecount == imageArray.length - 1) + imagecount = 0; + else + imagecount++; + changeImage(dom); + } + + var prevpic = function(dom){ + if(imagecount == 0) + imagecount = imageArray.length - 1 + else + imagecount--; + changeImage(dom); + } + + var toggleFullscreen = function(){ + if($rslide.hasClass("fullscreen")){ + $rslide.css("position","relative"); + $rslide.removeClass("fullscreen"); + $img.css({"padding":""}) + }else{ + $rslide.css("position",""); + $rslide.addClass("fullscreen"); + $img.css({"padding":($rslide.height()-$img.height())/2}) + } + } + var changeImage = function(dom){ + var pageurl = dom.attr('href'); + $img.attr({"src":dom.attr("data-content"),"height":picHeight+"px"}); + if($rslide.hasClass("fullscreen")){ + $img.css({"padding":($rslide.height()-$img.height())/2}) + } + $slidelist.stop().animate({'height':'0px'}, 300); + $slidelist.find("ul").hide(); + if(pageurl!=window.location){ + window.history.pushState({path:pageurl},'',pageurl); + } + // $(".slideinfo b.info").text(imageArray[imagecount].title); + $(".slideinfo span.info").text(imageArray[imagecount].description); + updateNavigation(); + } + var updateNavigation = function(){ + var next, prev; + if(imagecount == 0){ + next = 1; + prev = imageArray.length - 1; + }else if(imagecount == imageArray.length - 1){ + next = 0 + prev = imageArray.length - 2; + }else{ + next = imagecount + 1; + prev = imagecount - 1; + } + $("a.navN").attr({"href":"orbit_gallery?theater="+imageArray[next]._id,"data-content":imageArray[next].file.url}); + $("a.navP").attr({"href":"orbit_gallery?theater="+imageArray[prev]._id,"data-content":imageArray[prev].file.url}); + }; + updateNavigation(); + } + + var preparestage = function(albumid){ + $.getJSON("get_images",{aid:albumid},function(images){ + imageArray = eval(images); + $.each(images,function(i,image){ + if(image._id == id) + imagecount = i; + }) + bindHandlers(); + }) + } + + var head = $('Back to photos'); + var head1 = $('Edit'); + g.albumArea.find("#imgholder").load("theater?pic="+id,function(theater,response,xhr){ + if(xhr.status == 404){ + $(this).text("Pic not found."); + return false; + } var albumid = $(theater).find("#main_pic").attr("data-content"); head.attr("href","orbit_gallery?album="+albumid); + head1.attr("href","orbit_gallery?edit="+albumid); g.albumArea.find(".rghead .rgfn").html(head); + g.albumArea.find(".rghead .rgfn").append(head1); + picHeight = $(window).height() - ($("#orbit-bar").outerHeight() + $("#gallery_panel").outerHeight() + $("#orbit_gallery .rghead").outerHeight()); + preparestage(albumid); }) } + + this.editAlbum = function(id){ + var bindHandlers = function(){ + $("#description_loader .edit_fn .bt-cover").click(function(){ + $(".bt-cover").removeClass("setcover"); + $(this).addClass("setcover"); + $.post("set_cover",{"imageid":$(this).attr("href"),"aid":id},function(){}) + }) + $("#description_loader .edit_fn .bt-dels").click(function(){ + $(this).toggleClass("setdelete"); + if($("#description_loader .edit_fn .setdelete").length > 0){ + g.albumArea.find(".rghead .rgfn .bt-delete").show(); + }else{ + g.albumArea.find(".rghead .rgfn .bt-delete").hide(); + } + }) + g.albumArea.find(".rghead .rgfn .bt-save").click(function(){ + var dataArray = Array(); + $("#description_loader .txtchange").each(function(){ + dataArray.push({"id":$(this).attr("for"),"text": $(this).val()}); + }) + + $.post("update_album",{data:dataArray},function(){ + + }) + }) + var tempval; + $(".txtchange").focus(function(){ + tempval = $(this).val(); + }).keyup(function(){ + if($(this).val() != tempval) + g.albumArea.find(".rghead .rgfn .bt-save").show(); + }) + g.albumArea.find(".rghead .rgfn .bt-delete").click(function(){ + var images_to_delete = new Array(); + var delete_cover = false; + var doms_to_delete = new Array(); + var thiscover = $("#description_loader .edit_fn .setcover").attr("href"); + $("#description_loader .edit_fn .bt-dels").each(function(){ + if($(this).hasClass("setdelete")){ + images_to_delete.push($(this).attr("href")); + doms_to_delete.push($(this).parent().parent()); + if(thiscover == $(this).attr("href")) + delete_cover = true; + } + }) + if(confirm("Deleting "+images_to_delete.length+" image(s)?")){ + $.post("delete_images",{"images":images_to_delete,"delete_cover":delete_cover,"aid":id},function(response){ + if(response.success){ + for(dom in doms_to_delete){ + doms_to_delete[dom].hide("slide",function(){$(this).remove();}) + } + } + }) + } + }) + } + + var head = 'Back to photos'; + head+=''; + head+='
    +
    + + + +
    +
    + Delete + <% if image.id.to_s == @cover %> + Set Cover + <% else %> + Set Cover + <% end %> +
    +
    + <% end %> +
    \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/theater.html.erb b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/theater.html.erb index 5564554a..e0a83459 100755 --- a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/theater.html.erb +++ b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/theater.html.erb @@ -7,38 +7,27 @@ -->
    -
    +
    - Prev - Next + Prev + Next
    - Screen - List - Share + Screen + List
    - PORSCHE - + + <%= @image.description %>
    \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/config/routes.rb b/vendor/built_in_modules/gallery/config/routes.rb index 4c4f71ac..d295f913 100644 --- a/vendor/built_in_modules/gallery/config/routes.rb +++ b/vendor/built_in_modules/gallery/config/routes.rb @@ -13,6 +13,11 @@ Rails.application.routes.draw do match "upload_panel" => "orbit_galleries#upload_panel" match "get_images" => "orbit_galleries#get_images" match "theater" => "orbit_galleries#theater" + match "delete_album" => "orbit_galleries#delete_album" + match "edit_album" => "orbit_galleries#edit_album" + match "set_cover" => "orbit_galleries#set_cover" + match "delete_images" => "orbit_galleries#delete_images" + match "update_album" => "orbit_galleries#update_album" end end end From 17dffb15e1761d4f7e7d40bd95569bf4def086e0 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Tue, 31 Jul 2012 01:15:48 +0800 Subject: [PATCH 12/28] Major updates for gallery --- .../app/assets/javascripts/galleryAPI.js | 62 +++++++++++++------ .../app/assets/stylesheets/gallery.css | 1 + .../back_end/orbit_galleries_controller.rb | 10 +++ .../back_end/orbit_galleries/index.html.erb | 4 ++ .../back_end/orbit_galleries/theater.html.erb | 3 +- 5 files changed, 59 insertions(+), 21 deletions(-) diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js index 37db6b92..c052ca17 100644 --- a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js @@ -181,7 +181,12 @@ var galleryAPI = function(){ var $slidelist = $('.slidelist'), $rslide = $('.rslide'), $rslidenav = $('.rslidenav'), - $img = $("#main_pic img"); + $img = $("#main_pic img"), + wHeight = $(window).height(); + + $("#main_pic").height(picHeight); + $img.height("100%"); + $(".slidectrl a.togglelist").click(function(){ var rslide_h = $rslide.outerHeight(); if ( $slidelist.height() < 1 ){ @@ -195,6 +200,9 @@ var galleryAPI = function(){ $(".slidectrl a.togglescreen").click(function(){ toggleFullscreen(); }) + $(".slidectrl a.browserfullscreen").click(function(){ + browserFullScreen(); + }) $slidelist.find("a.list_element").click(function(){ imagecount = parseInt($(this).parent().attr("for")); changeImage($(this)); @@ -219,12 +227,19 @@ var galleryAPI = function(){ return false; } if(e.keyCode == 27){ - toggleFullscreen(); return false; } + if(e.keyCode == 70 || e.keyCode == 102){ + if($rslide.hasClass("fullscreen")) + browserFullScreen(); + } }); - + var browserFullScreen = function(){ + var el = document.documentElement, + rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen; + rfs.call(el); + } var nextpic = function(dom){ if(imagecount == imageArray.length - 1) imagecount = 0; @@ -232,7 +247,6 @@ var galleryAPI = function(){ imagecount++; changeImage(dom); } - var prevpic = function(dom){ if(imagecount == 0) imagecount = imageArray.length - 1 @@ -240,32 +254,39 @@ var galleryAPI = function(){ imagecount--; changeImage(dom); } - var toggleFullscreen = function(){ if($rslide.hasClass("fullscreen")){ $rslide.css("position","relative"); $rslide.removeClass("fullscreen"); + $(".slidectrl a.browserfullscreen").hide(); $img.css({"padding":""}) + $("#main_pic").height(picHeight); }else{ + $("#main_pic").height(wHeight); + // $img.height("100%"); $rslide.css("position",""); $rslide.addClass("fullscreen"); $img.css({"padding":($rslide.height()-$img.height())/2}) + $(".slidectrl a.browserfullscreen").show(); } } var changeImage = function(dom){ var pageurl = dom.attr('href'); - $img.attr({"src":dom.attr("data-content"),"height":picHeight+"px"}); - if($rslide.hasClass("fullscreen")){ - $img.css({"padding":($rslide.height()-$img.height())/2}) - } - $slidelist.stop().animate({'height':'0px'}, 300); - $slidelist.find("ul").hide(); - if(pageurl!=window.location){ - window.history.pushState({path:pageurl},'',pageurl); - } - // $(".slideinfo b.info").text(imageArray[imagecount].title); - $(".slideinfo span.info").text(imageArray[imagecount].description); - updateNavigation(); + $img.fadeOut(200,function(){ + $img.attr({"src":dom.attr("data-content"),"height":picHeight+"px"}); + $img.fadeIn(200); + if($rslide.hasClass("fullscreen")){ + $img.css({"padding":($rslide.height()-$img.height())/2}) + } + $slidelist.stop().animate({'height':'0px'}, 300); + $slidelist.find("ul").hide(); + if(pageurl!=window.location){ + window.history.pushState({path:pageurl},'',pageurl); + } + // $(".slideinfo b.info").text(imageArray[imagecount].title); + $(".slideinfo span.info").text(imageArray[imagecount].description); + updateNavigation(); + }) } var updateNavigation = function(){ var next, prev; @@ -333,8 +354,8 @@ var galleryAPI = function(){ $("#description_loader .txtchange").each(function(){ dataArray.push({"id":$(this).attr("for"),"text": $(this).val()}); }) - - $.post("update_album",{data:dataArray},function(){ + albumnm = $(".albumname_edit #album_name_text").val(); + $.post("update_album",{data:dataArray,"aid":id,"name":albumnm},function(){ }) }) @@ -365,15 +386,16 @@ var galleryAPI = function(){ doms_to_delete[dom].hide("slide",function(){$(this).remove();}) } } + g.albumArea.find(".rghead .rgfn .bt-delete").hide(); }) } }) } - var head = 'Back to photos'; head+=''; head+=' @@ -25,6 +25,7 @@
    Screen List + F
    <%= @image.description %> From 7accbed1a07fe7e53a0602e7706fe649930281a3 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Tue, 31 Jul 2012 21:15:42 +0800 Subject: [PATCH 13/28] gallery translation supported --- app/assets/javascripts/rss.js | 22 +++++----- .../{galleryAPI.js => galleryAPI.js.erb} | 42 +++++++++++-------- .../back_end/orbit_galleries_controller.rb | 24 ++++++++--- .../gallery/app/models/gallery_album.rb | 5 ++- .../gallery/app/models/gallery_category.rb | 5 +-- .../gallery/app/models/gallery_image.rb | 2 + .../gallery/app/models/gallery_tag.rb | 6 +++ .../orbit_galleries/add_album.html.erb | 14 ++++--- .../orbit_galleries/categorylist.html.erb | 12 +++--- .../orbit_galleries/edit_album.html.erb | 2 +- .../back_end/orbit_galleries/index.html.erb | 6 +-- .../gallery/config/locales/en.yml | 25 +++++++++++ .../gallery/config/locales/zh_tw.yml | 14 +++++++ 13 files changed, 124 insertions(+), 55 deletions(-) rename vendor/built_in_modules/gallery/app/assets/javascripts/{galleryAPI.js => galleryAPI.js.erb} (86%) create mode 100644 vendor/built_in_modules/gallery/app/models/gallery_tag.rb create mode 100644 vendor/built_in_modules/gallery/config/locales/en.yml create mode 100644 vendor/built_in_modules/gallery/config/locales/zh_tw.yml diff --git a/app/assets/javascripts/rss.js b/app/assets/javascripts/rss.js index 7b132c0d..a82d86fa 100644 --- a/app/assets/javascripts/rss.js +++ b/app/assets/javascripts/rss.js @@ -436,20 +436,18 @@ modalWindow : function(settings,callbackFn){ closebtn='X'; $rss("#rgWindow").animate({"width":tempwidth+"px","height":tempheight+"px",top:rgWTop+"px", left:rgWLeft+"px"},500,function(){$rss("#rgWindow").html(closebtn+"
    "+dhtml+"
    "); $rss("#close_modal").mouseover(function(){$rss(this).css("color","#999");}).mouseout(function(){$rss(this).css("color","#666");}) - $rss("#close_modal").click(function(){ - $rss("#rgWindow").empty(); - var x = (rgmaskHeight-20)/2; - var y = (rgmaskWidth-20)/2; - $rss("#rgWindow").animate({top:x+"px", left:y+"px","width":"50px","height":"50px"},300,function(){$rss(this).fadeOut(100).remove();$rss("#rgsheath").fadeOut(500).remove();}); - return false; - }) + $rss("#close_modal").click(function(){rcom.modalWindowClose(); return false;}) if(envClose) $rss("#rgsheath").click(function(){ - $rss("#rgWindow").empty(); - var x = (rgmaskHeight-20)/2; - var y = (rgmaskWidth-20)/2; - $rss("#rgWindow").animate({top:x+"px", left:y+"px","width":"50px","height":"50px"},300,function(){$rss(this).fadeOut(100).remove();$rss("#rgsheath").fadeOut(500).remove();});}) - + rcom.modalWindowClose(); + }) + $rss(document).one("keydown",function(e){ + if (e.keyCode == 27){ + rcom.modalWindowClose(); + return false; + } + }) + if(typeof callbackFn=="function") callbackFn.call(this,$rss("#rgWindow")); }); diff --git a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js.erb similarity index 86% rename from vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js rename to vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js.erb index c052ca17..1beb9e0b 100644 --- a/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js +++ b/vendor/built_in_modules/gallery/app/assets/javascripts/galleryAPI.js.erb @@ -82,8 +82,14 @@ var galleryAPI = function(){ dom.find("#album_name_save_btn").click(function(){ var options ={ cid : dom.find("select#category_list").val(), - albumname : dom.find("#name_en").val(), - albumdesc : dom.find("#desc_en").val() + albumname : { + "en" : dom.find("#name_en").val(), + "zh_tw" : dom.find("#name_zh_tw").val() + }, + albumdesc : { + "en" : dom.find("#desc_en").val(), + "zh_tw" : dom.find("#desc_zh_tw").val() + } } if(options.cid){ $.post("create_album",options,function(response){ @@ -101,7 +107,7 @@ var galleryAPI = function(){ }) } this.deleteAlbum = function(id){ - if(confirm("Delete this Album?")){ + if(confirm("<%= I18n.t('gallery.del_album?') %>")){ $.post("delete_album",{aid:id},function(){ window.location = "orbit_gallery"; }) @@ -109,7 +115,7 @@ var galleryAPI = function(){ } this.loadAlbums = function(id){ - var headbtn = $('Add Album'); + var headbtn = $('" href="albums" onclick="return false;"><%= I18n.t("gallery.add_album") %>'); headbtn.click(function(){g.makeNewAlbum();}) g.albumArea.find(".rghead .rgfn").html(headbtn); g.albumArea.find("#imgholder").empty(); @@ -129,10 +135,10 @@ var galleryAPI = function(){ this.loadImages = function(id){ //'); @@ -260,7 +266,7 @@ var galleryAPI = function(){ $rslide.removeClass("fullscreen"); $(".slidectrl a.browserfullscreen").hide(); $img.css({"padding":""}) - $("#main_pic").height(picHeight); + $("#main_pic").height(picHeight ); }else{ $("#main_pic").height(wHeight); // $img.height("100%"); @@ -285,7 +291,8 @@ var galleryAPI = function(){ } // $(".slideinfo b.info").text(imageArray[imagecount].title); $(".slideinfo span.info").text(imageArray[imagecount].description); - updateNavigation(); + if(imageArray.length > 1) + updateNavigation(); }) } var updateNavigation = function(){ @@ -303,7 +310,8 @@ var galleryAPI = function(){ $("a.navN").attr({"href":"orbit_gallery?theater="+imageArray[next]._id,"data-content":imageArray[next].file.url}); $("a.navP").attr({"href":"orbit_gallery?theater="+imageArray[prev]._id,"data-content":imageArray[prev].file.url}); }; - updateNavigation(); + if(imageArray.length > 1) + updateNavigation(); } var preparestage = function(albumid){ @@ -317,11 +325,11 @@ var galleryAPI = function(){ }) } - var head = $('Back to photos
    '); - var head1 = $('Edit'); + var head = $('"><%= I18n.t("gallery.back_to_photos") %>
    '); + var head1 = $('" href="" ><%= I18n.t("gallery.edit") %>'); g.albumArea.find("#imgholder").load("theater?pic="+id,function(theater,response,xhr){ if(xhr.status == 404){ - $(this).text("Pic not found."); + $(this).text("<%= I18n.t('gallery.pic_not_found') %>."); return false; } var albumid = $(theater).find("#main_pic").attr("data-content"); @@ -391,14 +399,14 @@ var galleryAPI = function(){ } }) } - var head = 'Back to photos'; - head+=''; + var head ='"><%= I18n.t("gallery.back_to_photos") %>'; + head+=''; head+=' \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/categorylist.html.erb b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/categorylist.html.erb index 7c4f5b10..476f5e89 100644 --- a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/categorylist.html.erb +++ b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/categorylist.html.erb @@ -1,18 +1,18 @@ \ No newline at end of file diff --git a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/edit_album.html.erb b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/edit_album.html.erb index 933b0827..fa4c9a1e 100644 --- a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/edit_album.html.erb +++ b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/edit_album.html.erb @@ -5,7 +5,7 @@
    <% @images.each do |image| %>
    - +
    diff --git a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb index 2030c313..6ac592bd 100644 --- a/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb +++ b/vendor/built_in_modules/gallery/app/views/panel/gallery/back_end/orbit_galleries/index.html.erb @@ -5,10 +5,10 @@ <%= stylesheet_link_tag "gallery" %> +
    +
    + + + + + + + + + + + + + + + + + + + -