Merge branch 'master' into i18n

Conflicts:
	app/assets/javascripts/application.js
This commit is contained in:
wvengen 2013-10-18 12:30:34 +02:00
commit 98e7189d31
24 changed files with 223 additions and 248 deletions

10
Gemfile
View File

@ -9,11 +9,10 @@ gem "rails", '~> 3.2.9'
group :assets do group :assets do
gem 'sass-rails', '~> 3.2.3' gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1' gem 'coffee-rails', '~> 3.2.1'
gem 'less-rails'
gem 'uglifier', '>= 1.0.3'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes # See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby gem 'therubyracer', platforms: :ruby
gem 'uglifier', '>= 1.0.3'
end end
gem 'jquery-rails' gem 'jquery-rails'
@ -27,8 +26,9 @@ gem 'mysql2'
gem 'prawn' gem 'prawn'
gem 'haml-rails' gem 'haml-rails'
gem 'kaminari' gem 'kaminari'
gem 'client_side_validations'
gem 'simple_form' gem 'simple_form'
gem 'client_side_validations'
gem 'client_side_validations-simple_form'
gem 'inherited_resources' gem 'inherited_resources'
gem 'localize_input', git: "git://github.com/bennibu/localize_input.git" gem 'localize_input', git: "git://github.com/bennibu/localize_input.git"
gem 'wikicloth' gem 'wikicloth'
@ -44,7 +44,7 @@ gem 'resque'
gem 'whenever', require: false # For defining cronjobs, see config/schedule.rb gem 'whenever', require: false # For defining cronjobs, see config/schedule.rb
group :production do group :production do
gem 'exception_notification', require: 'exception_notifier' gem 'exception_notification'
end end
group :development do group :development do

View File

@ -22,12 +22,12 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
Ascii85 (1.0.2) Ascii85 (1.0.2)
actionmailer (3.2.13) actionmailer (3.2.14)
actionpack (= 3.2.13) actionpack (= 3.2.14)
mail (~> 2.5.3) mail (~> 2.5.4)
actionpack (3.2.13) actionpack (3.2.14)
activemodel (= 3.2.13) activemodel (= 3.2.14)
activesupport (= 3.2.13) activesupport (= 3.2.14)
builder (~> 3.0.0) builder (~> 3.0.0)
erubis (~> 2.7.0) erubis (~> 2.7.0)
journey (~> 1.0.4) journey (~> 1.0.4)
@ -35,31 +35,33 @@ GEM
rack-cache (~> 1.2) rack-cache (~> 1.2)
rack-test (~> 0.6.1) rack-test (~> 0.6.1)
sprockets (~> 2.2.1) sprockets (~> 2.2.1)
activemodel (3.2.13) activemodel (3.2.14)
activesupport (= 3.2.13) activesupport (= 3.2.14)
builder (~> 3.0.0) builder (~> 3.0.0)
activerecord (3.2.13) activerecord (3.2.14)
activemodel (= 3.2.13) activemodel (= 3.2.14)
activesupport (= 3.2.13) activesupport (= 3.2.14)
arel (~> 3.0.2) arel (~> 3.0.2)
tzinfo (~> 0.3.29) tzinfo (~> 0.3.29)
activeresource (3.2.13) activeresource (3.2.14)
activemodel (= 3.2.13) activemodel (= 3.2.14)
activesupport (= 3.2.13) activesupport (= 3.2.14)
activesupport (3.2.13) activesupport (3.2.14)
i18n (= 0.6.1) i18n (~> 0.6, >= 0.6.4)
multi_json (~> 1.0) multi_json (~> 1.0)
acts_as_tree (1.2.0) acts_as_tree (1.4.0)
activerecord (>= 3.0.0) activerecord (>= 3.0.0)
afm (0.2.0)
arel (3.0.2) arel (3.0.2)
better_errors (0.2.0) better_errors (1.0.1)
coderay (>= 1.0.0) coderay (>= 1.0.0)
erubis (>= 2.7.0) erubis (>= 2.6.6)
binding_of_caller (0.6.8) binding_of_caller (0.7.2)
bootstrap-datepicker-rails (1.1.1.1) debug_inspector (>= 0.0.1)
bootstrap-datepicker-rails (1.1.1.8)
railties (>= 3.0) railties (>= 3.0)
builder (3.0.4) builder (3.0.4)
bullet (4.3.0) bullet (4.6.0)
uniform_notifier uniform_notifier
capistrano (2.13.5) capistrano (2.13.5)
highline highline
@ -77,72 +79,78 @@ GEM
xpath (~> 2.0) xpath (~> 2.0)
childprocess (0.3.9) childprocess (0.3.9)
ffi (~> 1.0, >= 1.0.11) ffi (~> 1.0, >= 1.0.11)
chronic (0.9.0) chronic (0.10.2)
client_side_validations (3.1.4) client_side_validations (3.2.6)
coderay (1.0.8) client_side_validations-simple_form (2.1.0)
client_side_validations (~> 3.2.5)
simple_form (~> 2.1.0)
coderay (1.1.0)
coffee-rails (3.2.2) coffee-rails (3.2.2)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
railties (~> 3.2.0) railties (~> 3.2.0)
coffee-script (2.2.0) coffee-script (2.2.0)
coffee-script-source coffee-script-source
execjs execjs
coffee-script-source (1.3.3) coffee-script-source (1.6.3)
commonjs (0.2.6) commonjs (0.2.7)
daemons (1.1.9) daemons (1.1.9)
database_cleaner (0.7.1) database_cleaner (1.2.0)
debug_inspector (0.0.2)
diff-lcs (1.2.4) diff-lcs (1.2.4)
erubis (2.7.0) erubis (2.7.0)
eventmachine (1.0.3) eventmachine (1.0.3)
exception_notification (2.6.1) exception_notification (4.0.1)
actionmailer (>= 3.0.4) actionmailer (>= 3.0.4)
execjs (1.4.0) activesupport (>= 3.0.4)
multi_json (~> 1.0) execjs (2.0.2)
expression_parser (0.9.0) expression_parser (0.9.0)
factory_girl (4.2.0) factory_girl (4.2.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
factory_girl_rails (4.2.1) factory_girl_rails (4.2.1)
factory_girl (~> 4.2.0) factory_girl (~> 4.2.0)
railties (>= 3.0.0) railties (>= 3.0.0)
faker (1.1.2) faker (1.2.0)
i18n (~> 0.5) i18n (~> 0.5)
ffi (1.9.0) ffi (1.9.0)
haml (3.1.7) haml (4.0.3)
haml-rails (0.3.5) tilt
haml-rails (0.4)
actionpack (>= 3.1, < 4.1) actionpack (>= 3.1, < 4.1)
activesupport (>= 3.1, < 4.1) activesupport (>= 3.1, < 4.1)
haml (~> 3.1) haml (>= 3.1, < 4.1)
railties (>= 3.1, < 4.1) railties (>= 3.1, < 4.1)
has_scope (0.5.1) has_scope (0.6.0.rc)
hashery (2.0.1) actionpack (>= 3.2, < 5)
activesupport (>= 3.2, < 5)
hashery (2.1.1)
highline (1.6.19) highline (1.6.19)
hike (1.2.3) hike (1.2.3)
i18n (0.6.1) i18n (0.6.5)
i18n-spec (0.4.0) i18n-spec (0.4.0)
iso iso
inherited_resources (1.3.1) inherited_resources (1.4.1)
has_scope (~> 0.5.0) has_scope (~> 0.6.0.rc)
responders (~> 0.6) responders (~> 1.0.0.rc)
iso (0.2.0) iso (0.2.0)
i18n i18n
journey (1.0.4) journey (1.0.4)
jquery-rails (2.1.3) jquery-rails (3.0.4)
railties (>= 3.1.0, < 5.0) railties (>= 3.0, < 5.0)
thor (~> 0.14) thor (>= 0.14, < 2.0)
json (1.7.7) json (1.8.0)
kaminari (0.14.1) kaminari (0.14.1)
actionpack (>= 3.0.0) actionpack (>= 3.0.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
less (2.2.2) less (2.4.0)
commonjs (~> 0.2.6) commonjs (~> 0.2.7)
less-rails (2.2.3) less-rails (2.4.2)
actionpack (>= 3.1) actionpack (>= 3.1)
less (~> 2.2.0) less (~> 2.4.0)
libv8 (3.3.10.4) libv8 (3.16.14.3)
mail (2.5.3) mail (2.5.4)
i18n (>= 0.4.0)
mime-types (~> 1.16) mime-types (~> 1.16)
treetop (~> 1.4.8) treetop (~> 1.4.8)
mailcatcher (0.5.11) mailcatcher (0.5.12)
activesupport (~> 3.0) activesupport (~> 3.0)
eventmachine (~> 1.0.0) eventmachine (~> 1.0.0)
haml (>= 3.1, < 5) haml (>= 3.1, < 5)
@ -156,24 +164,26 @@ GEM
activerecord (~> 3.1) activerecord (~> 3.1)
activesupport (~> 3.1) activesupport (~> 3.1)
polyamorous (~> 0.5.0) polyamorous (~> 0.5.0)
mime-types (1.21) mime-types (1.25)
mini_portile (0.5.1) mini_portile (0.5.1)
mono_logger (1.1.0) mono_logger (1.1.0)
multi_json (1.7.9) multi_json (1.8.1)
mysql2 (0.3.11) mysql2 (0.3.13)
net-scp (1.1.1) net-scp (1.1.2)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
net-sftp (2.1.2) net-sftp (2.1.2)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
net-ssh (2.6.7) net-ssh (2.7.0)
net-ssh-gateway (1.2.0) net-ssh-gateway (1.2.0)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
nokogiri (1.6.0) nokogiri (1.6.0)
mini_portile (~> 0.5.0) mini_portile (~> 0.5.0)
pdf-reader (1.2.0) pdf-reader (1.3.3)
Ascii85 (~> 1.0.0) Ascii85 (~> 1.0.0)
afm (~> 0.2.0)
hashery (~> 2.0) hashery (~> 2.0)
ruby-rc4 ruby-rc4
ttfunk
polyamorous (0.5.0) polyamorous (0.5.0)
activerecord (~> 3.0) activerecord (~> 3.0)
polyglot (0.3.3) polyglot (0.3.3)
@ -191,14 +201,14 @@ GEM
rack rack
rack-test (0.6.2) rack-test (0.6.2)
rack (>= 1.0) rack (>= 1.0)
rails (3.2.13) rails (3.2.14)
actionmailer (= 3.2.13) actionmailer (= 3.2.14)
actionpack (= 3.2.13) actionpack (= 3.2.14)
activerecord (= 3.2.13) activerecord (= 3.2.14)
activeresource (= 3.2.13) activeresource (= 3.2.14)
activesupport (= 3.2.13) activesupport (= 3.2.14)
bundler (~> 1.0) bundler (~> 1.0)
railties (= 3.2.13) railties (= 3.2.14)
rails-assets-listjs (0.2.0.beta.4) rails-assets-listjs (0.2.0.beta.4)
railties (>= 3.1) railties (>= 3.1)
rails-i18n (3.0.0) rails-i18n (3.0.0)
@ -206,31 +216,32 @@ GEM
rails (>= 3.0.0, < 4.0.0) rails (>= 3.0.0, < 4.0.0)
rails-settings-cached (0.2.4) rails-settings-cached (0.2.4)
rails (>= 3.0.0) rails (>= 3.0.0)
railties (3.2.13) railties (3.2.14)
actionpack (= 3.2.13) actionpack (= 3.2.14)
activesupport (= 3.2.13) activesupport (= 3.2.14)
rack-ssl (~> 1.3.2) rack-ssl (~> 1.3.2)
rake (>= 0.8.7) rake (>= 0.8.7)
rdoc (~> 3.4) rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0) thor (>= 0.14.6, < 2.0)
rake (10.0.3) rake (10.1.0)
rdoc (3.12.2) rdoc (3.12.2)
json (~> 1.4) json (~> 1.4)
redis (3.0.4) redis (3.0.5)
redis-namespace (1.3.1) redis-namespace (1.3.1)
redis (~> 3.0.0) redis (~> 3.0.0)
responders (0.9.3) ref (1.0.5)
railties (~> 3.1) responders (1.0.0)
resque (1.24.1) railties (>= 3.2, < 5)
resque (1.25.1)
mono_logger (~> 1.0) mono_logger (~> 1.0)
multi_json (~> 1.0) multi_json (~> 1.0)
redis-namespace (~> 1.2) redis-namespace (~> 1.2)
sinatra (>= 0.9.2) sinatra (>= 0.9.2)
vegas (~> 0.1.2) vegas (~> 0.1.2)
rspec-core (2.14.2) rspec-core (2.14.5)
rspec-expectations (2.14.0) rspec-expectations (2.14.3)
diff-lcs (>= 1.1.3, < 2.0) diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.14.1) rspec-mocks (2.14.3)
rspec-rails (2.14.0) rspec-rails (2.14.0)
actionpack (>= 3.0) actionpack (>= 3.0)
activesupport (>= 3.0) activesupport (>= 3.0)
@ -241,22 +252,22 @@ GEM
ruby-prof (0.13.0) ruby-prof (0.13.0)
ruby-rc4 (0.1.5) ruby-rc4 (0.1.5)
rubyzip (0.9.9) rubyzip (0.9.9)
sass (3.2.1) sass (3.2.12)
sass-rails (3.2.5) sass-rails (3.2.6)
railties (~> 3.2.0) railties (~> 3.2.0)
sass (>= 3.1.10) sass (>= 3.1.10)
tilt (~> 1.3) tilt (~> 1.3)
select2-rails (3.4.2) select2-rails (3.5.0)
sass-rails
thor (~> 0.14) thor (~> 0.14)
selenium-webdriver (2.35.1) selenium-webdriver (2.35.1)
childprocess (>= 0.2.5) childprocess (>= 0.2.5)
multi_json (~> 1.0) multi_json (~> 1.0)
rubyzip (< 1.0.0) rubyzip (< 1.0.0)
websocket (~> 1.0.4) websocket (~> 1.0.4)
simple-navigation (3.9.0) simple-navigation (3.11.0)
activesupport (>= 2.3.2) activesupport (>= 2.3.2)
simple-navigation-bootstrap (0.0.4) simple-navigation-bootstrap (1.0.0)
railties (>= 3.1)
simple-navigation (>= 3.7.0) simple-navigation (>= 3.7.0)
simple_form (2.1.0) simple_form (2.1.0)
actionpack (~> 3.0) actionpack (~> 3.0)
@ -265,10 +276,10 @@ GEM
multi_json (~> 1.0) multi_json (~> 1.0)
simplecov-html (~> 0.7.1) simplecov-html (~> 0.7.1)
simplecov-html (0.7.1) simplecov-html (0.7.1)
sinatra (1.3.6) sinatra (1.4.3)
rack (~> 1.4) rack (~> 1.4)
rack-protection (~> 1.3) rack-protection (~> 1.4)
tilt (~> 1.3, >= 1.3.3) tilt (~> 1.3, >= 1.3.4)
skinny (0.2.3) skinny (0.2.3)
eventmachine (~> 1.0.0) eventmachine (~> 1.0.0)
thin (~> 1.5.0) thin (~> 1.5.0)
@ -277,33 +288,34 @@ GEM
multi_json (~> 1.0) multi_json (~> 1.0)
rack (~> 1.0) rack (~> 1.0)
tilt (~> 1.1, != 1.3.0) tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.6) sqlite3 (1.3.8)
therubyracer (0.10.2) therubyracer (0.12.0)
libv8 (~> 3.3.10) libv8 (~> 3.16.14.0)
ref
thin (1.5.1) thin (1.5.1)
daemons (>= 1.0.9) daemons (>= 1.0.9)
eventmachine (>= 0.12.6) eventmachine (>= 0.12.6)
rack (>= 1.0.0) rack (>= 1.0.0)
thor (0.17.0) thor (0.18.1)
tilt (1.4.1) tilt (1.4.1)
treetop (1.4.12) treetop (1.4.15)
polyglot polyglot
polyglot (>= 0.3.1) polyglot (>= 0.3.1)
ttfunk (1.0.3) ttfunk (1.0.3)
twitter-bootstrap-rails (2.1.3) twitter-bootstrap-rails (2.2.8)
actionpack (>= 3.1) actionpack (>= 3.1)
less-rails (~> 2.2.3) execjs
rails (>= 3.1)
railties (>= 3.1) railties (>= 3.1)
therubyracer (~> 0.10.2) tzinfo (0.3.38)
tzinfo (0.3.37) uglifier (2.2.1)
uglifier (1.3.0)
execjs (>= 0.3.0) execjs (>= 0.3.0)
multi_json (~> 1.0, >= 1.0.2) multi_json (~> 1.0, >= 1.0.2)
uniform_notifier (1.1.1) uniform_notifier (1.3.0)
vegas (0.1.11) vegas (0.1.11)
rack (>= 1.0.0) rack (>= 1.0.0)
websocket (1.0.7) websocket (1.0.7)
whenever (0.8.1) whenever (0.8.4)
activesupport (>= 2.3.4) activesupport (>= 2.3.4)
chronic (>= 0.6.3) chronic (>= 0.6.3)
wikicloth (0.8.0) wikicloth (0.8.0)
@ -326,6 +338,7 @@ DEPENDENCIES
capistrano-ext capistrano-ext
capybara (~> 2.1.0) capybara (~> 2.1.0)
client_side_validations client_side_validations
client_side_validations-simple_form
coffee-rails (~> 3.2.1) coffee-rails (~> 3.2.1)
daemons daemons
database_cleaner database_cleaner
@ -338,6 +351,7 @@ DEPENDENCIES
inherited_resources inherited_resources
jquery-rails jquery-rails
kaminari kaminari
less-rails
localize_input! localize_input!
mailcatcher mailcatcher
meta_search meta_search

View File

@ -1,5 +1,4 @@
//= require jquery //= require jquery
//= require jquery-ui
//= require jquery_ujs //= require jquery_ujs
//= require select2 //= require select2
//= require twitter/bootstrap //= require twitter/bootstrap
@ -7,12 +6,14 @@
//= require bootstrap-datepicker/core //= require bootstrap-datepicker/core
//= require bootstrap-datepicker/locales/bootstrap-datepicker.de //= require bootstrap-datepicker/locales/bootstrap-datepicker.de
//= require bootstrap-datepicker/locales/bootstrap-datepicker.nl //= require bootstrap-datepicker/locales/bootstrap-datepicker.nl
//= require bootstrap-datepicker/locales/bootstrap-datepicker.fr
//= require jquery.observe_field //= require jquery.observe_field
//= require list //= require list
//= require list.unlist //= require list.unlist
//= require list.delay //= require list.delay
//= require list.reset //= require list.reset
//= require rails.validations //= require rails.validations
//= require rails.validations.simple_form
//= require i18n //= require i18n
//= require i18n/translations //= require i18n/translations
//= require_self //= require_self
@ -36,19 +37,19 @@ $.fn.extend({
$(function() { $(function() {
// Show/Hide a specific DOM element // Show/Hide a specific DOM element
$('a[data-toggle-this]').live('click', function() { $(document).on('click', 'a[data-toggle-this]', function() {
$($(this).data('toggle-this')).toggle(); $($(this).data('toggle-this')).toggle();
return false; return false;
}); });
// Remove this item from DOM // Remove this item from DOM
$('a[data-remove-this]').live('click', function() { $(document).on('click', 'a[data-remove-this]', function() {
$($(this).data('remove-this')).remove(); $($(this).data('remove-this')).remove();
return false; return false;
}); });
// Check/Uncheck a single checkbox // Check/Uncheck a single checkbox
$('[data-check-this]').live('click', function() { $(document).on('click', '[data-check-this]', function() {
var checkbox = $($(this).data('check-this')); var checkbox = $($(this).data('check-this'));
checkbox.attr('checked', !checkbox.is(':checked')); checkbox.attr('checked', !checkbox.is(':checked'));
highlightRow(checkbox); highlightRow(checkbox);
@ -56,7 +57,7 @@ $(function() {
}); });
// Check/Uncheck all checkboxes for a specific form // Check/Uncheck all checkboxes for a specific form
$('input[data-check-all]').live('click', function() { $(document).on('click', 'input[data-check-all]', function() {
var status = $(this).is(':checked'); var status = $(this).is(':checked');
var context = $(this).data('check-all'); var context = $(this).data('check-all');
var elms = $('input[type="checkbox"]', context); var elms = $('input[type="checkbox"]', context);
@ -68,7 +69,7 @@ $(function() {
}); });
// Submit form when changing a select menu. // Submit form when changing a select menu.
$('form[data-submit-onchange] select').live('change', function() { $(document).on('change', 'form[data-submit-onchange] select', function() {
var confirmMessage = $(this).children(':selected').data('confirm'); var confirmMessage = $(this).children(':selected').data('confirm');
if (confirmMessage) { if (confirmMessage) {
if (confirm(confirmMessage)) { if (confirm(confirmMessage)) {
@ -101,7 +102,7 @@ $(function() {
}); });
// Remote paginations // Remote paginations
$('div.pagination[data-remote] a').live('click', function() { $(document).on('click', 'div.pagination[data-remote] a', function() {
$.getScript($(this).attr('href')); $.getScript($(this).attr('href'));
return false; return false;
}); });
@ -122,6 +123,20 @@ $(function() {
// Use bootstrap datepicker for dateinput // Use bootstrap datepicker for dateinput
$('.datepicker').datepicker({format: 'yyyy-mm-dd', language: I18n.locale}); $('.datepicker').datepicker({format: 'yyyy-mm-dd', language: I18n.locale});
// bootstrap tooltips (for price)
// Extra options don't work when using selector, so override defaults
// https://github.com/twbs/bootstrap/issues/3875 . These can still be
// overridden per tooltip using data-placement attributes and the like.
$.extend($.fn.tooltip.defaults, {
html: true,
animation: false,
placement: 'left',
container: 'body'
});
$(document).tooltip({
selector: '[data-toggle~="tooltip"]',
});
// See stupidtable.js for initialization of local table sorting // See stupidtable.js for initialization of local table sorting
}); });
@ -148,3 +163,5 @@ function highlightRow(checkbox) {
function setHiddenId(text, li) { function setHiddenId(text, li) {
$('hidden_id').value = li.id; $('hidden_id').value = li.id;
} }

View File

@ -1,4 +1,3 @@
jQuery -> jQuery ->
$("a[rel=popover]").popover() $("a[rel~=popover], .has-popover").popover()
$(".tooltip").tooltip() $("a[rel~=tooltip], .has-tooltip").tooltip()
$("a[rel=tooltip]").tooltip()

View File

@ -1,24 +1,23 @@
@import "twitter/bootstrap/bootstrap"; @import "twitter/bootstrap/bootstrap";
@import "twitter/bootstrap/responsive";
body { body {
padding-top: 10px; padding-top: 10px;
} }
@import "twitter/bootstrap/responsive";
// Set the correct sprite paths // Set the correct sprite paths
@iconSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings.png'); @iconSpritePath: image-url('twitter/bootstrap/glyphicons-halflings.png');
@iconWhiteSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings-white.png'); @iconWhiteSpritePath: image-url('twitter/bootstrap/glyphicons-halflings-white.png');
// Set the Font Awesome (Font Awesome is default. You can disable by commenting below lines) // Set the Font Awesome (Font Awesome is default. You can disable by commenting below lines)
// Note: If you use asset_path() here, your compiled boostrap_and_overrides.css will not @fontAwesomeEotPath: asset-url('fontawesome-webfont.eot');
// have the proper paths. So for now we use the absolute path. @fontAwesomeEotPath_iefix: asset-url('fontawesome-webfont.eot?#iefix');
@fontAwesomeEotPath: '/assets/fontawesome-webfont.eot'; @fontAwesomeWoffPath: asset-url('fontawesome-webfont.woff');
@fontAwesomeWoffPath: '/assets/fontawesome-webfont.woff'; @fontAwesomeTtfPath: asset-url('fontawesome-webfont.ttf');
@fontAwesomeTtfPath: '/assets/fontawesome-webfont.ttf'; @fontAwesomeSvgPath: asset-url('fontawesome-webfont.svg#fontawesomeregular');
@fontAwesomeSvgPath: '/assets/fontawesome-webfont.svg'; @import 'fontawesome/font-awesome';
// Font Awesome // Glyphicons
@import "fontawesome"; //@import "twitter/bootstrap/sprites.less";
// Your custom LESS stylesheets goes here // Your custom LESS stylesheets goes here
// //
@ -26,7 +25,7 @@ body {
// you may use and inherit here // you may use and inherit here
// //
// If you'd like to override bootstrap's own variables, you can do so here as well // If you'd like to override bootstrap's own variables, you can do so here as well
// See http://twitter.github.com/bootstrap/less.html for their names and documentation // See http://twitter.github.com/bootstrap/customize.html#variables for their names and documentation
// //
// Example: // Example:
// @linkColor: #ff0000; // @linkColor: #ff0000;

View File

@ -98,6 +98,8 @@ class OrdersController < ApplicationController
order = Order.find(params[:id]) order = Order.find(params[:id])
order.finish!(@current_user) order.finish!(@current_user)
redirect_to order, notice: I18n.t('orders.finish.notice') redirect_to order, notice: I18n.t('orders.finish.notice')
rescue => error
redirect_to orders_url, alert: I18n.t('errors.general_msg', :msg => error.message)
end end
# Renders the fax-text-file # Renders the fax-text-file

View File

@ -155,7 +155,7 @@ class Order < ActiveRecord::Base
unless finished? unless finished?
Order.transaction do Order.transaction do
# set new order state (needed by notify_order_finished) # set new order state (needed by notify_order_finished)
update_attributes(:state => 'finished', :ends => Time.now, :updated_by => user) update_attributes!(:state => 'finished', :ends => Time.now, :updated_by => user)
# Update order_articles. Save the current article_price to keep price consistency # Update order_articles. Save the current article_price to keep price consistency
# Also save results for each group_order_result # Also save results for each group_order_result

View File

@ -66,7 +66,7 @@ class Ordergroup < Group
end end
def avg_jobs_per_euro def avg_jobs_per_euro
stats[:orders_sum] != 0 ? stats[:jobs_size].to_f / stats[:orders_sum].to_f : 0 stats[:jobs_size].to_f / stats[:orders_sum].to_f rescue 0
end end
# This is the ordergroup job per euro performance # This is the ordergroup job per euro performance
@ -90,7 +90,7 @@ class Ordergroup < Group
# Global average # Global average
def self.avg_jobs_per_euro def self.avg_jobs_per_euro
stats = Ordergroup.pluck(:stats) stats = Ordergroup.pluck(:stats)
stats.sum {|s| s[:jobs_size].to_f } / stats.sum {|s| s[:orders_sum].to_f } stats.sum {|s| s[:jobs_size].to_f } / stats.sum {|s| s[:orders_sum].to_f } rescue 0
end end
def account_updated def account_updated

View File

@ -61,8 +61,6 @@
return true; return true;
} }
}); });
enablePriceTooltips();
}); });
function mark_article_for_delivery(stock_article_id) { function mark_article_for_delivery(stock_article_id) {
@ -80,14 +78,6 @@
return ( 0 == $('#stock_change_stock_article_' + stock_article_id).length ); return ( 0 == $('#stock_change_stock_article_' + stock_article_id).length );
} }
function enablePriceTooltips(context) {
$('[data-toggle~="tooltip"]', context).tooltip({
animation: false,
html: true,
placement: 'left'
});
}
= simple_form_for [@supplier, @delivery], validate: true do |f| = simple_form_for [@supplier, @delivery], validate: true do |f|
= f.error_notification = f.error_notification
= base_errors f.object = base_errors f.object

View File

@ -13,7 +13,6 @@
var stock_change = $( var stock_change = $(
'<%= j(render(:partial => 'stock_change', :locals => {:stock_change => @stock_change})) %>' '<%= j(render(:partial => 'stock_change', :locals => {:stock_change => @stock_change})) %>'
).addClass('success'); ).addClass('success');
enablePriceTooltips(stock_change);
$('input.stock-change-quantity', stock_change).val(quantity); $('input.stock-change-quantity', stock_change).val(quantity);
$('#stock_changes').append(stock_change); $('#stock_changes').append(stock_change);

View File

@ -8,7 +8,6 @@ $('div.container-fluid').prepend(
var stock_article_for_adding = $( var stock_article_for_adding = $(
'<%= j(render(:partial => 'stock_article_for_adding', :locals => {:article => @stock_article})) %>' '<%= j(render(:partial => 'stock_article_for_adding', :locals => {:article => @stock_article})) %>'
).addClass('success'); ).addClass('success');
enablePriceTooltips(stock_article_for_adding);
$('#stock_articles_for_adding tbody').append(stock_article_for_adding); $('#stock_articles_for_adding tbody').append(stock_article_for_adding);
updateSort('#stock_articles_for_adding'); updateSort('#stock_articles_for_adding');

View File

@ -10,7 +10,6 @@ $('div.container-fluid').prepend(
var stock_article_for_adding = $( var stock_article_for_adding = $(
'<%= j(render(:partial => 'stock_article_for_adding', :locals => {:article => @stock_article, :delivery => @delivery})) %>' '<%= j(render(:partial => 'stock_article_for_adding', :locals => {:article => @stock_article, :delivery => @delivery})) %>'
).addClass('success'); ).addClass('success');
enablePriceTooltips(stock_article_for_adding);
$('#stock_article_<%= @stock_article.id %>').replaceWith(stock_article_for_adding); $('#stock_article_<%= @stock_article.id %>').replaceWith(stock_article_for_adding);
updateSort('#stock_articles_for_adding'); updateSort('#stock_articles_for_adding');

View File

@ -5,12 +5,12 @@
var ordergroup = "#{escape_javascript(render('ordergroup'))}" var ordergroup = "#{escape_javascript(render('ordergroup'))}"
$(function() { $(function() {
$('a[data-remove-transaction]').live('click', function() { $(document).on('click', 'a[data-remove-transaction]', function() {
$(this).parents('tr').remove(); $(this).parents('tr').remove();
return false; return false;
}); });
$('a[data-add-transaction]').click(function() { $(document).on('click', 'a[data-add-transaction]', function() {
$('#ordergroups').append(ordergroup); $('#ordergroups').append(ordergroup);
return false; return false;
}); });

View File

@ -2,7 +2,7 @@
%h2= t '.title' %h2= t '.title'
- if ordergroup.not_enough_apples? - if ordergroup.not_enough_apples?
.alert .alert
= t '.not_enough_apples' = t '.not_enough_apples'
- unless Order.open.empty? - unless Order.open.empty?
%table.table.table-striped %table.table.table-striped
%thead %thead

View File

@ -1,20 +1,5 @@
- title t('.title') - title t('.title')
- content_for :javascript do
:javascript
$(function() {
enablePriceTooltips();
});
function enablePriceTooltips(context) {
$('[data-toggle~="tooltip"]', context).tooltip({
animation: false,
html: true,
placement: 'left',
container: 'body'
});
}
- content_for :sidebar do - content_for :sidebar do
%p %p
%i= t('.text_deviations', inv_link: link_to(t('.temp_inventory'), stock_articles_path)).html_safe %i= t('.text_deviations', inv_link: link_to(t('.temp_inventory'), stock_articles_path)).html_safe

View File

@ -1,7 +1,7 @@
= simple_form_for @supplier do |f| = simple_form_for @supplier do |f|
- if @supplier.shared_supplier - if @supplier.shared_supplier
.alert.alert-success .alert.alert-info
= t 'suppliers.shared_supplier_note' = t 'suppliers.shared_supplier_note'
= f.hidden_field :shared_supplier_id = f.hidden_field :shared_supplier_id
= f.input :name = f.input :name
= f.input :address = f.input :address

View File

@ -4,7 +4,7 @@
.span6 .span6
- if shared_supplier = @supplier.shared_supplier - if shared_supplier = @supplier.shared_supplier
.alert.alert-info .alert.alert-info
= t 'suppliers.shared_supplier_note' = t 'suppliers.shared_supplier_note'
%dl.dl-horizontal %dl.dl-horizontal
%dt= heading_helper(Supplier, :address) + ':' %dt= heading_helper(Supplier, :address) + ':'

View File

@ -1,7 +1,15 @@
# ClientSideValidations Initializer # ClientSideValidations Initializer
require 'client_side_validations/simple_form' if defined?(::SimpleForm) # Uncomment to disable uniqueness validator, possible security issue
require 'client_side_validations/formtastic' if defined?(::Formtastic) # Disabled because of possible security issue and because of bug
# https://github.com/bcardarella/client_side_validations/pull/532
ClientSideValidations::Config.disabled_validators = [:uniqueness]
# Uncomment to validate number format with current I18n locale
# Foodsoft is currently using localize_input which is activated on certain
# fields only, meaning we can't globally turn this on. The non-i18n number
# format is still supported - so for now keep false.
# ClientSideValidations::Config.number_format_with_locale = true
# Uncomment the following block if you want each input field to have the validation messages attached. # Uncomment the following block if you want each input field to have the validation messages attached.
# ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| # ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|

View File

@ -14,13 +14,15 @@ url_options.merge!({:port => FoodsoftConfig[:port]}) if FoodsoftConfig[:port]
Foodsoft::Application.configure do Foodsoft::Application.configure do
config.action_mailer.default_url_options = url_options config.action_mailer.default_url_options = url_options
if Rails.env !~ /development|test/ if %w(production).include? Rails.env
# Configuration of the exception_notification plugin # Configuration of the exception_notification plugin
# Mailadresses are set in config/app_config.yml # Mailadresses are set in config/app_config.yml
config.middleware.use ExceptionNotifier, config.middleware.use ExceptionNotification::Rack,
:email_prefix => FoodsoftConfig[:notification]['email_prefix'], :email => {
:sender_address => FoodsoftConfig[:notification]['sender_address'], :email_prefix => FoodsoftConfig[:notification]['email_prefix'],
:exception_recipients => FoodsoftConfig[:notification]['error_recipients'] :sender_address => FoodsoftConfig[:notification]['sender_address'],
:exception_recipients => FoodsoftConfig[:notification]['error_recipients']
}
end end
end end

View File

@ -507,6 +507,7 @@ fr:
filename: Commande %{name}-%{date} - Répartition par cellules filename: Commande %{name}-%{date} - Répartition par cellules
rows: rows:
- Nom de l'article - Nom de l'article
- Commandée
- Quantité - Quantité
- Prix unitaire - Prix unitaire
- Unités par lot - Unités par lot

View File

@ -8,10 +8,10 @@ nl:
fc_price: prijs foodcoop fc_price: prijs foodcoop
fc_share: marge foodcoop fc_share: marge foodcoop
gross_price: bruto prijs gross_price: bruto prijs
name: name: Naam
note: note: Notitie
price: netto prijs price: netto prijs
supplier: supplier: Leverancier
tax: BTW tax: BTW
unit: eenheid unit: eenheid
unit_quantity: groothandelseenheid unit_quantity: groothandelseenheid
@ -271,7 +271,7 @@ nl:
one: Er moet éen artikel bijgewerkt worden. one: Er moet éen artikel bijgewerkt worden.
other: Er moeten %{count} artikelen bijgewerkt worden. other: Er moeten %{count} artikelen bijgewerkt worden.
upload: upload:
body: body: <p>Het bestand moet een utf-8 tekstbestand zijn met als extensie '.csv'. De eerste regel wordt overgeslagen.</p> <p>Velden moeten met een puntkomma (';') gescheiden worden, en tekst mag tussen dubbele aanhalingstekstens ("Tekst...") staan.</p> <p>Volgende van de kolommen:</p>
fields: fields:
season_amount: season_amount:
season_price: season_price:
@ -346,6 +346,7 @@ nl:
filename: Bestelling %{name}-%{date} - Huishoudenslijst filename: Bestelling %{name}-%{date} - Huishoudenslijst
rows: rows:
- Artikel - Artikel
- Besteld
- Hoeveelheid - Hoeveelheid
- Prijs - Prijs
- Gr.Eenh. - Gr.Eenh.
@ -679,7 +680,7 @@ nl:
remaining: nog %{remaining} remaining: nog %{remaining}
title: Lopende bestellingen title: Lopende bestellingen
update: update:
error_general: error_general: Er is een probleem opgetreden, de bestelling kon niet bijgewerkt worden.
error_stale: In de tussentijd heeft iemand anders ook bestelt, daarom kon je bestelling niet opgeslagen worden. Sorry! error_stale: In de tussentijd heeft iemand anders ook bestelt, daarom kon je bestelling niet opgeslagen worden. Sorry!
notice: De bestelling is opgeslagen. notice: De bestelling is opgeslagen.
helpers: helpers:
@ -717,8 +718,8 @@ nl:
index: index:
due_date_format: ! '%A %d %B' due_date_format: ! '%A %d %B'
messages: messages:
title: title: Nieuwste berichten
view_all: view_all: Alle berichten bekijken
my_ordergroup: my_ordergroup:
funds: ! '| Beschikbaar tegoed:' funds: ! '| Beschikbaar tegoed:'
last_update: Laatst gewijzigd %{when} geleden last_update: Laatst gewijzigd %{when} geleden
@ -748,7 +749,7 @@ nl:
description: Omschrijving description: Omschrijving
funds: ! 'Beschikbaar krediet:' funds: ! 'Beschikbaar krediet:'
invite: Iemand uitnodigen invite: Iemand uitnodigen
people: people: Personen
search: Zoeken ... search: Zoeken ...
title: Mijn huishouden title: Mijn huishouden
ordergroup_cancelled: Je bent geen lid meer van de groep %{group}. ordergroup_cancelled: Je bent geen lid meer van de groep %{group}.
@ -786,19 +787,25 @@ nl:
write_message: Bericht schrijven write_message: Bericht schrijven
invites: invites:
errors: errors:
already_member: already_member: is al lid van de foodcoop.
modal_form: modal_form:
body: body: <p>Hier kun je iemand die nog geen lid is uitnodigen voor de groep<b>%{group}</b>.</p> <p>Na aanmelding is hij of zij automatisch lid van deze groep.</p>
title: title: Iemand uitnodigen
new: new:
action: action: Uitnodiging versturen
body: body: <p>Hier kun je iemand die nog geen lid is, uitnodigen voor de groep <b>%{group}</b>.</p>
success: success: Persoon is uitgenodigd.
layouts: layouts:
application1: application1:
title: Foodsoft - %{title} title: Foodsoft - %{title}
email: email:
footer: footer: ! '--
Foodsoft: %{foodsoft}
Foodcoop-Homepage: %{foodcoop}
Help: %{help}'
foodsoft: Foodsoft foodsoft: Foodsoft
header: header:
feedback: feedback:
@ -815,7 +822,7 @@ nl:
page: Pagina %{number} page: Pagina %{number}
login: login:
accept_invitation: accept_invitation:
body: body: <p>Je bent uitgenodigd als lid voor foodcoop %{foodcoop} in de groep <b>%{group}</b>.</p> <p>Als je wilt meedoen, vul dan dit formulier in.</p> <p>Natuurlijk zullen we je informatie niet delen met anderen. Je kunt zelf aangeven, welke informatie voor andere leden beschikbaar is (maar beheerders hebben daar altijd toegang toe).</p>
submit: Foodsoft account aanmaken submit: Foodsoft account aanmaken
title: Uitnodiging voor %{name} title: Uitnodiging voor %{name}
controller: controller:
@ -837,9 +844,9 @@ nl:
submit: Nieuw wachtwoord opslaan submit: Nieuw wachtwoord opslaan
title: Nieuw wachtwoord title: Nieuw wachtwoord
mailer: mailer:
dateformat: dateformat: ! '%d %b'
feedback: feedback:
header: header: ! '%{user} schreef op %{date}:'
subject: subject:
foodsoft_message: foodsoft_message:
footer: footer:
@ -911,21 +918,21 @@ nl:
new: new:
list: list:
desc: desc:
mail: mail: bijvoorbeeld door een email te sturen naar %{email}.
subscribe: subscribe:
subscribe_msg: subscribe_msg:
wiki: wiki:
no_user_found: Geen gebruiker gevonden no_user_found: Geen gebruiker gevonden
search: Zoeken ... search: Zoeken ...
search_user: Gebruiker zoeken search_user: Gebruiker zoeken
title: title: Nieuw bericht
show: show:
all_messages: all_messages: Berichtenoverzicht
from: from: ! 'Van:'
reply: reply: Antwoorden
sent_on: sent_on: ! 'Verzonden:'
subject: subject: ! 'Onderwerp:'
title: title: Bericht lezen
model: model:
delivery: delivery:
each_stock_article_must_be_unique: In een levering mag ieder voorraadsartikel maar een keer voorkomen. each_stock_article_must_be_unique: In een levering mag ieder voorraadsartikel maar een keer voorkomen.
@ -1014,9 +1021,9 @@ nl:
title: Artikel title: Artikel
unit_quantity: unit_quantity:
index: index:
action_end: action_end: Sluiten
confirm_delete: confirm_delete: Wil je de bestelling werkelijk verwijderen?
confirm_end: confirm_end: Wil je de bestelling %{order} werkelijk sluiten? Dit kun je niet ongedaan maken.
ended_orders: Gesloten bestellingen ended_orders: Gesloten bestellingen
ending: ending:
new_order: new_order:
@ -1037,11 +1044,11 @@ nl:
title: title:
orders: orders:
ending: ending:
start: start: Start
status: status:
supplier: supplier: Leverancier
show: show:
action_end: action_end: Sluiten!
amounts: amounts:
articles: articles:
articles_ordered: articles_ordered:

View File

@ -1,10 +0,0 @@
#!/usr/bin/ruby1.8
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
require "dispatcher"
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Dispatcher.dispatch

View File

@ -1,26 +0,0 @@
#!/usr/bin/ruby1.8
#
# You may specify the path to the FastCGI crash log (a log of unhandled
# exceptions which forced the FastCGI instance to exit, great for debugging)
# and the number of requests to process before running garbage collection.
#
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
# and the GC period is nil (turned off). A reasonable number of requests
# could range from 10-100 depending on the memory footprint of your app.
#
# Example:
# # Default log path, normal GC behavior.
# RailsFCGIHandler.process!
#
# # Default log path, 50 requests between GC.
# RailsFCGIHandler.process! nil, 50
#
# # Custom log path, normal GC behavior.
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
#
RAILS_ENV = "production"
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'
RailsFCGIHandler.process!

View File

@ -1,10 +0,0 @@
#!/usr/bin/ruby1.8
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
require "dispatcher"
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Dispatcher.dispatch