diff --git a/app/controllers/articles_controller.rb b/app/controllers/articles_controller.rb index f1425737..aeed1c88 100644 --- a/app/controllers/articles_controller.rb +++ b/app/controllers/articles_controller.rb @@ -25,68 +25,35 @@ class ArticlesController < ApplicationController sort = "article_categories.name, articles.name" end - # if somebody uses the search field: - conditions = ["articles.name LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? + @articles = @supplier.articles.includes(:article_category).order(sort) + @articles = @articles.where(:name.matches => "%#{params[:query]}%") unless params[:query].nil? - @total = @supplier.articles.count(:conditions => conditions) - @articles = @supplier.articles.paginate( - :order => sort, - :conditions => conditions, - :page => params[:page], - :per_page => @per_page, - :include => :article_category - ) + @total = @articles.size + @articles = @articles.paginate(:page => params[:page], :per_page => @per_page) respond_to do |format| - format.html # list.haml - format.js do - render :update do |page| - page.replace_html 'table', :partial => "articles" - end - end + format.html + format.js { render :layout => false } end end def new @article = @supplier.articles.build(:tax => 7.0) - - render :update do |page| - page["edit_article"].replace_html :partial => 'new' - page["edit_article"].show - end + render :layout => false end def create @article = Article.new(params[:article]) if @article.valid? and @article.save - render :update do |page| - page.Element.hide('edit_article') - page.insert_html :top, 'listbody', :partial => 'new_article_row' - page[@article.id.to_s].visual_effect(:highlight, - :duration => 2) - # highlights article - if !@article.availability - page[@article.id.to_s].addClassName 'unavailable' - else - page[@article.id.to_s].addClassName 'just_updated' - end - end + render :layout => false else - render :update do |page| - page.replace_html 'edit_article', :partial => "new" - end - end + render :action => 'new', :layout => false + end end - # edit an article and its price def edit @article = Article.find(params[:id]) - - render :update do |page| - page["edit_article"].replace_html :partial => 'edit' - page["edit_article"].show - end - #render :partial => "quick_edit", :layout => false + render :action => 'new', :layout => false end # Updates one Article and highlights the line if succeded @@ -94,46 +61,17 @@ class ArticlesController < ApplicationController @article = Article.find(params[:id]) if @article.update_attributes(params[:article]) - render :update do |page| - page["edit_article"].hide - page[@article.id.to_s].replace_html :partial => 'article_row' - - # hilights an updated article if the article ist available - page[@article.id.to_s].addClassName 'just_updated' if @article.availability - - # highlights an available article and de-highlights in other case - if !@article.availability - page[@article.id.to_s].addClassName 'unavailable' - # remove updated-class - page[@article.id.to_s].removeClassName 'just_updated' - else - page[@article.id.to_s].removeClassName 'unavailable' - end - - page[@article.id.to_s].visual_effect(:highlight, :delay => 0.5, :duration => 2) - end + render :layout => false else - render :update do |page| - page["edit_article"].replace_html :partial => "edit" - end + render :action => 'new', :layout => false end end # Deletes article from database. send error msg, if article is used in a current order def destroy @article = Article.find(params[:id]) - - @order = @article.in_open_order # If article is in an active Order, the Order will be returned - if @order - render :update do |page| - page.insert_html :after, @article.id.to_s, :partial => 'destroyActiveArticle' - end - else - @article.destroy - render :update do |page| - page[@article.id.to_s].remove - end - end + @article.destroy unless @order = @article.in_open_order # If article is in an active Order, the Order will be returned + render :layout => false end # Renders a form for editing all articles from a supplier diff --git a/app/views/articles/_article_row.rhtml b/app/views/articles/_article_row.rhtml index 7ad87f48..fc26c2b5 100644 --- a/app/views/articles/_article_row.rhtml +++ b/app/views/articles/_article_row.rhtml @@ -2,11 +2,11 @@ <%= check_box_tag 'selected_articles[]', @article.id.to_s, false, {:id => "checkbox_#{@article.id.to_s}", :onclick => "checkRow('#{@article.id.to_s}')"} %> -<%=h @article.name -%> +<%= @article.name -%> <%= @article.origin -%> -<%=h truncate(@article.article_category.name, :length => 11) if @article.article_category -%> -<%=h @article.unit -%> -<%=h truncate(@article.note, :length => 11) -%> +<%= truncate(@article.article_category.name, :length => 11) if @article.article_category -%> +<%= @article.unit -%> +<%= truncate(@article.note, :length => 11) -%> <%= @article.unit_quantity -%> edit_supplier_article_path(@supplier, @article) %> - <%= remote_link_to icon(:delete, :onclick => "checkRow('#{@article.id.to_s}')"), - :url => [@supplier, @article], - :method => :delete, - :confirm => 'Bist du sicher?' %> + <%= link_to icon(:edit, :onclick => "checkRow('#{@article.id.to_s}')"), edit_supplier_article_path(@supplier, @article), + :remote => true %> + <%= link_to icon(:delete, :onclick => "checkRow('#{@article.id.to_s}')"), [@supplier, @article], + :method => :delete, :confirm => 'Bist du sicher?', :remote => true %> \ No newline at end of file diff --git a/app/views/articles/_destroyActiveArticle.haml b/app/views/articles/_destroy_active_article.haml similarity index 76% rename from app/views/articles/_destroyActiveArticle.haml rename to app/views/articles/_destroy_active_article.haml index c18bde5a..ea742199 100644 --- a/app/views/articles/_destroyActiveArticle.haml +++ b/app/views/articles/_destroy_active_article.haml @@ -4,6 +4,4 @@ wird in laufenden Bestellungen verwendet und kann nicht gelöscht werden. Bitte zuerst den Artikel aus den Bestellungen = link_to "entfernen", :controller => 'orders', :action => 'edit', :id => @order - oder - = link_to_function 'abbrechen', "Element.remove('edit_#{@article.id.to_s}')" \ No newline at end of file diff --git a/app/views/articles/_form.html.haml b/app/views/articles/_form.html.haml index f2430210..be3dc68e 100644 --- a/app/views/articles/_form.html.haml +++ b/app/views/articles/_form.html.haml @@ -1,45 +1,18 @@ -- remote_form_for [@supplier, @article], :before => "Element.show('loader')", | - :success => "Element.hide('loader')" do |form| | += simple_form_for [@supplier, @article], :remote => true do |f| + = f.input :availability + = f.input :name + = f.input :origin + = f.input :manufacturer + = f.input :unit + = f.input :note + = f.association :article_category - = form.error_messages - %p - %b Verfügbar? - = form.check_box :availability - %table{ :style => "width: 20em"} - %tr - %th Name - %th Herkunft - %th Hersteller - %th Einheit - %th Notiz - %th kategorie - %tbody - %tr - %td= form.text_field :name, :size => 15 - %td= form.text_field :origin, :size => 5 - %td= form.text_field :manufacturer, :size => 8 - %td= form.text_field :unit, :size => 5 - %td= form.text_field :note, :size => 15 - %td= form.select :article_category_id, ArticleCategory.find(:all, :order => 'name').collect {|a| [ a.name, a.id ] } - %br/ - %table{ :style=>"width:35em"} - %tr - %th Nettopreis - %th Gebindegröße - %th Bestellnummer - %th MwSt - %th Pfand - %tbody - %tr - %td= form.text_field :price, :size => 5 - %td= form.text_field :unit_quantity, :size => 5 - %td= form.text_field :order_number, :size => 10 - %td= form.text_field :tax, :size => 5 - %td= form.text_field :deposit, :size => 5 - - = form.hidden_field :shared_updated_on - = form.hidden_field :supplier_id + = f.input :price + = f.input :unit_quantity + = f.input :order_number + = f.input :tax + = f.input :deposit + = f.submit - = submit_tag "Speichern" - | - = link_to_function "Abbrechen", "Element.hide('edit_article')" \ No newline at end of file + = f.hidden_field :shared_updated_on + = f.hidden_field :supplier_id \ No newline at end of file diff --git a/app/views/articles/_new.haml b/app/views/articles/_new.haml deleted file mode 100644 index 8b07a58b..00000000 --- a/app/views/articles/_new.haml +++ /dev/null @@ -1,2 +0,0 @@ -%h3 Neuer Artikel -= render :partial => 'form' \ No newline at end of file diff --git a/app/views/articles/_new_article_row.haml b/app/views/articles/_new_article_row.haml index 5fc86275..c236606a 100644 --- a/app/views/articles/_new_article_row.haml +++ b/app/views/articles/_new_article_row.haml @@ -1,2 +1,2 @@ -%tr{:class => cycle('even','odd'), :id => @article.id, :onclick => "checkRow('#{@article.id.to_s}')"} +%tr{:class => row_classes(@article), :id => @article.id, :onclick => "checkRow('#{@article.id.to_s}')"} = render :partial => 'article_row' \ No newline at end of file diff --git a/app/views/articles/create.js.erb b/app/views/articles/create.js.erb new file mode 100644 index 00000000..a06276fd --- /dev/null +++ b/app/views/articles/create.js.erb @@ -0,0 +1,2 @@ +$('#listbody').prepend('<%= escape_javascript(render("new_article_row")) %>'); +$.fancybox.close(); \ No newline at end of file diff --git a/app/views/articles/destroy.js.erb b/app/views/articles/destroy.js.erb new file mode 100644 index 00000000..d59480f9 --- /dev/null +++ b/app/views/articles/destroy.js.erb @@ -0,0 +1,5 @@ +<% if @order %> +$('#<%= @article.id %>').after('<%= escape_javascript(render("destroy_active_article")) %>'); +<% else %> +$('#<%= @article.id %>').remove(); +<% end %> \ No newline at end of file diff --git a/app/views/articles/index.haml b/app/views/articles/index.haml index b368cd82..d8d26897 100644 --- a/app/views/articles/index.haml +++ b/app/views/articles/index.haml @@ -7,19 +7,19 @@ %li Zugriff auf externe Datenbank %ul - %li= link_to_function "Suchen/Importieren", "Element.toggle('import')" + %li= link_to "Suchen/Importieren", "#import", 'data-toggle_this' => '#import' %li= link_to "Synchronisieren", sync_supplier_articles_path(@supplier), :method => :post #change_supplier{:style => "padding:0 0 0.5em 0.7em;"} %span{:style => "float:left"} Lieferantin wechseln: - - form_tag do - = select_tag :switch_supplier, | - options_for_select( Supplier.all(:order => 'name').collect {|s| [s.name, url_for(supplier_articles_path(s))] }, | - url_for(supplier_articles_path(@supplier)) ), | - :onchange => "redirectTo(this)", | - :style => "font-size: 0.9em;margin-left:1em;" | + = form_tag do + = select_tag :switch_supplier, + options_for_select( Supplier.all(:order => 'name').collect {|s| [s.name, url_for(supplier_articles_path(s))] }, + url_for(supplier_articles_path(@supplier)) ), + :onchange => "redirectTo(this)", + :style => "font-size: 0.9em;margin-left:1em;" - unless @supplier.shared_supplier.nil? #import.single_column{:style => "display:none; clear:both"} @@ -27,9 +27,7 @@ %h2 Artikel importieren .column_content #search{:style => "padding-bottom:3em"} - - form_remote_tag :url => shared_supplier_articles_path(@supplier), | - :before => "Element.show('loader')", :success => "Element.hide('loader')", | - :method => :get do | + = form_tag shared_supplier_articles_path(@supplier), :method => :get, :remote => true do = text_field_tag :import_query, params['import_query'], :size => 10 = submit_tag "Suchen" - if @supplier.shared_supplier.lists @@ -42,30 +40,29 @@ = check_box_tag "regional", "1", false #search_results // "import_search_results" will be rendered - = link_to_function "Schließen", "Element.hide('import')" + = link_to "Schließen", "#import", 'data-toggle_this' => '#import' .single_column{:style => 'width:100%; clear:both'} .box_title .column_content #links - %b= remote_link_to "Neuer Artikel", :url => new_supplier_article_path(@supplier) + %b= link_to "Neuer Artikel", new_supplier_article_path(@supplier), :remote => true | = link_to "Alle bearbeiten", edit_all_supplier_articles_path(@supplier) | = link_to "Artikel hochladen", upload_supplier_articles_path(@supplier) - | - = link_to_if @current_user.role_orders?, "Bestellung anlegen", {:controller => 'orders', :action => 'new', :supplier_id => @supplier } + - if current_user.role_orders? + | + = link_to "Bestellung anlegen", new_order_path(:supplier_id => @supplier) #article_filter #article_search_form{:style=>"display:inline;"} - - form_remote_tag :url => supplier_articles_path(@supplier), | - :before => "Element.show('loader')", :success => "Element.hide('loader')", | - :method => :get do | + = form_tag supplier_articles_path(@supplier), :method => :get, :remote => true do %label{:for => 'article_name'} Suche im Artikelnamen: = text_field_tag("query", params['query'], :size => 10 ) = submit_tag "Suchen" - - %form{ :action => url_for(update_selected_supplier_articles_path(@supplier)), :method => "post", :id => "articlesInListForm" } - #table= render :partial => 'articles' + + = form_tag update_selected_supplier_articles_path(@supplier), :id => "articlesInListForm" do + #table= render 'articles' #edit_article{:style => "display:none"} diff --git a/app/views/articles/index.js.erb b/app/views/articles/index.js.erb new file mode 100644 index 00000000..1af9cf9d --- /dev/null +++ b/app/views/articles/index.js.erb @@ -0,0 +1 @@ +$('#table').html('<%= escape_javascript(render("articles")) %>'); \ No newline at end of file diff --git a/app/views/articles/new.js.erb b/app/views/articles/new.js.erb new file mode 100644 index 00000000..3c8d6f34 --- /dev/null +++ b/app/views/articles/new.js.erb @@ -0,0 +1 @@ +$.fancybox('<%= escape_javascript(render("form")) %>'); \ No newline at end of file diff --git a/app/views/articles/update.js.erb b/app/views/articles/update.js.erb new file mode 100644 index 00000000..1f2a3df0 --- /dev/null +++ b/app/views/articles/update.js.erb @@ -0,0 +1,2 @@ +$('#<%= @article.id %>').html('<%= escape_javascript(render("article_row")) %>'); +$.fancybox.close(); \ No newline at end of file diff --git a/app/views/layouts/application.haml b/app/views/layouts/application.haml index 8fe95f04..be33c9b3 100644 --- a/app/views/layouts/application.haml +++ b/app/views/layouts/application.haml @@ -3,13 +3,14 @@ %head %meta{"http-equiv" => "content-type", :content => "text/html;charset=UTF-8"} %title= "FoodSoft - " + (yield(:title) or controller.controller_name) - = stylesheet_link_tag 'main', 'rails_messages', 'nav', 'simple_form', 'token-input', :cache => "all_cached" + = stylesheet_link_tag 'main', 'rails_messages', 'nav', 'simple_form', 'token-input', 'jquery.fancybox-1.3.4', + :cache => "all_cached" = stylesheet_link_tag "print", :media => "print" = javascript_include_tag 'jquery.min', 'jquery-ui.min', 'jquery_ujs', 'jquery.tokeninput', 'jquery.observe_field', - 'application', 'ordering', :cache => "all_cached" + 'application', 'ordering', 'jquery.fancybox-1.3.4.pack', :cache => 'all_cached' = csrf_meta_tag = yield(:head) %body diff --git a/config/locales/de.yml b/config/locales/de.yml index 65586699..5d293998 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -244,9 +244,23 @@ de: order_howto: 'Howto Bestellen' note: 'Notiz' min_order_quantity: 'Mindestbestellmenge' + article: + availability: 'Artikel ist verfügbar?' + origin: 'Herkunft' + manufacturer: 'Produzent' + unit: 'Einheit' + note: 'Notiz' + article_category: 'Kategorie' + price: 'Preis (netto)' + unit_quantity: 'Gebindegröße' + order_number: 'Bestellnummer' + tax: 'MwSt' + deposit: 'Pfand' hints: task: duration: 'Wie lange dauert die Aufgabe, 1-3 Stunden' required_users: 'Wieviel Benutzerinnen werden insgesamt benötigt?' supplier: min_order_quantity: 'Die Mindestbestellmenge wird während der Bestellung angezeigt und soll motivieren' + article: + unit: 'z.B. KG oder 1L oder 500g' diff --git a/public/javascripts/jquery.fancybox-1.3.4.pack.js b/public/javascripts/jquery.fancybox-1.3.4.pack.js new file mode 100644 index 00000000..1373ed08 --- /dev/null +++ b/public/javascripts/jquery.fancybox-1.3.4.pack.js @@ -0,0 +1,46 @@ +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("
")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

The requested content cannot be loaded.
Please try again later.

'); +F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| +c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= +false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", +function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== +"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, +opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? +d.titlePosition=="float"?'
'+s+'
':'
'+s+"
":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); +y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== +i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); +f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== +37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); +s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); +f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); +j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== +"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), +10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; +b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= +0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ +1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= +true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; +b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- +d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
'),t=b('
'),u=b('
'),f=b('
'));D=b('
').append('
').appendTo(f); +D.append(j=b('
'),E=b(''),n=b('
'),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); +b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; +b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", +easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); \ No newline at end of file diff --git a/public/stylesheets/fancybox/blank.gif b/public/stylesheets/fancybox/blank.gif new file mode 100644 index 00000000..35d42e80 Binary files /dev/null and b/public/stylesheets/fancybox/blank.gif differ diff --git a/public/stylesheets/fancybox/fancy_close.png b/public/stylesheets/fancybox/fancy_close.png new file mode 100644 index 00000000..07035307 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_close.png differ diff --git a/public/stylesheets/fancybox/fancy_loading.png b/public/stylesheets/fancybox/fancy_loading.png new file mode 100644 index 00000000..25030179 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_loading.png differ diff --git a/public/stylesheets/fancybox/fancy_nav_left.png b/public/stylesheets/fancybox/fancy_nav_left.png new file mode 100644 index 00000000..ebaa6a4f Binary files /dev/null and b/public/stylesheets/fancybox/fancy_nav_left.png differ diff --git a/public/stylesheets/fancybox/fancy_nav_right.png b/public/stylesheets/fancybox/fancy_nav_right.png new file mode 100644 index 00000000..873294e9 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_nav_right.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_e.png b/public/stylesheets/fancybox/fancy_shadow_e.png new file mode 100644 index 00000000..2eda0893 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_e.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_n.png b/public/stylesheets/fancybox/fancy_shadow_n.png new file mode 100644 index 00000000..69aa10e2 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_n.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_ne.png b/public/stylesheets/fancybox/fancy_shadow_ne.png new file mode 100644 index 00000000..79f6980a Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_ne.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_nw.png b/public/stylesheets/fancybox/fancy_shadow_nw.png new file mode 100644 index 00000000..7182cd93 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_nw.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_s.png b/public/stylesheets/fancybox/fancy_shadow_s.png new file mode 100644 index 00000000..d8858bfb Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_s.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_se.png b/public/stylesheets/fancybox/fancy_shadow_se.png new file mode 100644 index 00000000..541e3ffd Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_se.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_sw.png b/public/stylesheets/fancybox/fancy_shadow_sw.png new file mode 100644 index 00000000..b451689f Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_sw.png differ diff --git a/public/stylesheets/fancybox/fancy_shadow_w.png b/public/stylesheets/fancybox/fancy_shadow_w.png new file mode 100644 index 00000000..8a4e4a88 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_shadow_w.png differ diff --git a/public/stylesheets/fancybox/fancy_title_left.png b/public/stylesheets/fancybox/fancy_title_left.png new file mode 100644 index 00000000..6049223d Binary files /dev/null and b/public/stylesheets/fancybox/fancy_title_left.png differ diff --git a/public/stylesheets/fancybox/fancy_title_main.png b/public/stylesheets/fancybox/fancy_title_main.png new file mode 100644 index 00000000..8044271f Binary files /dev/null and b/public/stylesheets/fancybox/fancy_title_main.png differ diff --git a/public/stylesheets/fancybox/fancy_title_over.png b/public/stylesheets/fancybox/fancy_title_over.png new file mode 100644 index 00000000..d9f458f4 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_title_over.png differ diff --git a/public/stylesheets/fancybox/fancy_title_right.png b/public/stylesheets/fancybox/fancy_title_right.png new file mode 100644 index 00000000..e36d9db2 Binary files /dev/null and b/public/stylesheets/fancybox/fancy_title_right.png differ diff --git a/public/stylesheets/fancybox/fancybox-x.png b/public/stylesheets/fancybox/fancybox-x.png new file mode 100644 index 00000000..c2130f86 Binary files /dev/null and b/public/stylesheets/fancybox/fancybox-x.png differ diff --git a/public/stylesheets/fancybox/fancybox-y.png b/public/stylesheets/fancybox/fancybox-y.png new file mode 100644 index 00000000..7ef399b9 Binary files /dev/null and b/public/stylesheets/fancybox/fancybox-y.png differ diff --git a/public/stylesheets/fancybox/fancybox.png b/public/stylesheets/fancybox/fancybox.png new file mode 100644 index 00000000..65e14f68 Binary files /dev/null and b/public/stylesheets/fancybox/fancybox.png differ diff --git a/public/stylesheets/jquery.fancybox-1.3.4.css b/public/stylesheets/jquery.fancybox-1.3.4.css new file mode 100644 index 00000000..46c5f396 --- /dev/null +++ b/public/stylesheets/jquery.fancybox-1.3.4.css @@ -0,0 +1,359 @@ +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + width: 40px; + height: 40px; + margin-top: -20px; + margin-left: -20px; + cursor: pointer; + overflow: hidden; + z-index: 1104; + display: none; +} + +#fancybox-loading div { + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 480px; + background-image: url('fancybox/fancybox.png'); +} + +#fancybox-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 1100; + display: none; +} + +#fancybox-tmp { + padding: 0; + margin: 0; + border: 0; + overflow: auto; + display: none; +} + +#fancybox-wrap { + position: absolute; + top: 0; + left: 0; + padding: 20px; + z-index: 1101; + outline: none; + display: none; +} + +#fancybox-outer { + position: relative; + width: 100%; + height: 100%; + background: #fff; +} + +#fancybox-content { + width: 0; + height: 0; + padding: 0; + outline: none; + position: relative; + overflow: hidden; + z-index: 1102; + border: 0px solid #fff; +} + +#fancybox-hide-sel-frame { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 1101; +} + +#fancybox-close { + position: absolute; + top: -15px; + right: -15px; + width: 30px; + height: 30px; + background: transparent url('fancybox/fancybox.png') -40px 0px; + cursor: pointer; + z-index: 1103; + display: none; +} + +#fancybox-error { + color: #444; + font: normal 12px/20px Arial; + padding: 14px; + margin: 0; +} + +#fancybox-img { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + line-height: 0; + vertical-align: top; +} + +#fancybox-frame { + width: 100%; + height: 100%; + border: none; + display: block; +} + +#fancybox-left, #fancybox-right { + position: absolute; + bottom: 0px; + height: 100%; + width: 35%; + cursor: pointer; + outline: none; + background: transparent url('fancybox/blank.gif'); + z-index: 1102; + display: none; +} + +#fancybox-left { + left: 0px; +} + +#fancybox-right { + right: 0px; +} + +#fancybox-left-ico, #fancybox-right-ico { + position: absolute; + top: 50%; + left: -9999px; + width: 30px; + height: 30px; + margin-top: -15px; + cursor: pointer; + z-index: 1102; + display: block; +} + +#fancybox-left-ico { + background-image: url('fancybox/fancybox.png'); + background-position: -40px -30px; +} + +#fancybox-right-ico { + background-image: url('fancybox/fancybox.png'); + background-position: -40px -60px; +} + +#fancybox-left:hover, #fancybox-right:hover { + visibility: visible; /* IE6 */ +} + +#fancybox-left:hover span { + left: 20px; +} + +#fancybox-right:hover span { + left: auto; + right: 20px; +} + +.fancybox-bg { + position: absolute; + padding: 0; + margin: 0; + border: 0; + width: 20px; + height: 20px; + z-index: 1001; +} + +#fancybox-bg-n { + top: -20px; + left: 0; + width: 100%; + background-image: url('fancybox/fancybox-x.png'); +} + +#fancybox-bg-ne { + top: -20px; + right: -20px; + background-image: url('fancybox/fancybox.png'); + background-position: -40px -162px; +} + +#fancybox-bg-e { + top: 0; + right: -20px; + height: 100%; + background-image: url('fancybox/fancybox-y.png'); + background-position: -20px 0px; +} + +#fancybox-bg-se { + bottom: -20px; + right: -20px; + background-image: url('fancybox/fancybox.png'); + background-position: -40px -182px; +} + +#fancybox-bg-s { + bottom: -20px; + left: 0; + width: 100%; + background-image: url('fancybox/fancybox-x.png'); + background-position: 0px -20px; +} + +#fancybox-bg-sw { + bottom: -20px; + left: -20px; + background-image: url('fancybox/fancybox.png'); + background-position: -40px -142px; +} + +#fancybox-bg-w { + top: 0; + left: -20px; + height: 100%; + background-image: url('fancybox/fancybox-y.png'); +} + +#fancybox-bg-nw { + top: -20px; + left: -20px; + background-image: url('fancybox/fancybox.png'); + background-position: -40px -122px; +} + +#fancybox-title { + font-family: Helvetica; + font-size: 12px; + z-index: 1102; +} + +.fancybox-title-inside { + padding-bottom: 10px; + text-align: center; + color: #333; + background: #fff; + position: relative; +} + +.fancybox-title-outside { + padding-top: 10px; + color: #fff; +} + +.fancybox-title-over { + position: absolute; + bottom: 0; + left: 0; + color: #FFF; + text-align: left; +} + +#fancybox-title-over { + padding: 10px; + background-image: url('fancybox/fancy_title_over.png'); + display: block; +} + +.fancybox-title-float { + position: absolute; + left: 0; + bottom: -20px; + height: 32px; +} + +#fancybox-title-float-wrap { + border: none; + border-collapse: collapse; + width: auto; +} + +#fancybox-title-float-wrap td { + border: none; + white-space: nowrap; +} + +#fancybox-title-float-left { + padding: 0 0 0 15px; + background: url('fancybox/fancybox.png') -40px -90px no-repeat; +} + +#fancybox-title-float-main { + color: #FFF; + line-height: 29px; + font-weight: bold; + padding: 0 0 3px 0; + background: url('fancybox/fancybox-x.png') 0px -40px; +} + +#fancybox-title-float-right { + padding: 0 0 0 15px; + background: url('fancybox/fancybox.png') -55px -90px no-repeat; +} + +/* IE6 */ + +.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } +.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { + height: expression(this.parentNode.clientHeight + "px"); +} + +#fancybox-loading.fancybox-ie6 { + position: absolute; margin-top: 0; + top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); +} + +#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); } + +/* IE6, IE7, IE8 */ + +.fancybox-ie .fancybox-bg { background: transparent !important; } + +.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } \ No newline at end of file