diff --git a/app/assets/images/supplier/flags/flag-en.png b/app/assets/images/supplier/flags/flag-en.png new file mode 100755 index 00000000..51a27cf1 Binary files /dev/null and b/app/assets/images/supplier/flags/flag-en.png differ diff --git a/app/assets/images/supplier/flags/flag-nl.png b/app/assets/images/supplier/flags/flag-nl.png new file mode 100755 index 00000000..362c9f06 Binary files /dev/null and b/app/assets/images/supplier/flags/flag-nl.png differ diff --git a/app/assets/javascripts/supplier/app/app.js.coffee b/app/assets/javascripts/supplier/app/app.js.coffee index d7d07acb..5508a3e5 100644 --- a/app/assets/javascripts/supplier/app/app.js.coffee +++ b/app/assets/javascripts/supplier/app/app.js.coffee @@ -5,3 +5,29 @@ store: -> @__container__.lookup('controller:application').store @App.modals = Ember.Namespace.create() @Modals = @App.modals + +Ember.$.ajaxPrefilter (options) -> + locale = $locale + app_version = 0 + params = + locale: $locale + app_version: 0 + if options.type.toUpperCase() == 'GET' + if options.data + options.data += "&#{$.param(params)}" + else + options.data = $.param(params) + if options.type.toUpperCase() == 'POST' + if options.data + if typeof(options.data) == 'string' + if options.data[0] == '{' || options.data[0] == '[' # json + object = JSON.parse(options.data) + $.extend object, params + options.data = JSON.stringify(object) + else + options.data += "&#{$.param(params)}" + else + options.data = params + else + options.data = $.param(params) + true diff --git a/app/assets/javascripts/supplier/app/components/language-switcher.js.coffee b/app/assets/javascripts/supplier/app/components/language-switcher.js.coffee new file mode 100644 index 00000000..2fc9781b --- /dev/null +++ b/app/assets/javascripts/supplier/app/components/language-switcher.js.coffee @@ -0,0 +1,7 @@ +App.LanguageSwitcherComponent = Ember.Component.extend + classNames: ['language-switcher-container'] + locales: (-> ['en', 'nl']).property() + actions: + switchTo: (locale)-> + setLocale locale + @get('targetObject.store').all("page").invoke 'reload' diff --git a/app/assets/javascripts/supplier/app/controllers/schedule_controller.js.coffee b/app/assets/javascripts/supplier/app/controllers/schedule_controller.js.coffee index b9f176f4..9fc70c9d 100644 --- a/app/assets/javascripts/supplier/app/controllers/schedule_controller.js.coffee +++ b/app/assets/javascripts/supplier/app/controllers/schedule_controller.js.coffee @@ -1,8 +1,8 @@ App.ScheduleController = Ember.ArrayController.extend event_changed: (event)-> @store.find('employee-shift', event.id).then (employee_shift)-> - employee_shift.set 'start_from', event.start.toDate() - employee_shift.set 'end_on', event.end.toDate() + employee_shift.set 'start_from', event.start + employee_shift.set 'end_on', event.end employee_shift.save() editEvent: (id, callbacks)-> if employee_shift = @store.all('employee-shift').findBy('id', id) diff --git a/app/assets/javascripts/supplier/app/helpers/flag.js.coffee b/app/assets/javascripts/supplier/app/helpers/flag.js.coffee new file mode 100644 index 00000000..ed6d4e4d --- /dev/null +++ b/app/assets/javascripts/supplier/app/helpers/flag.js.coffee @@ -0,0 +1,2 @@ +Ember.Handlebars.helper 'flag', (locale, options)-> + "".htmlSafe() diff --git a/app/assets/javascripts/supplier/app/helpers/page-body.js.coffee b/app/assets/javascripts/supplier/app/helpers/page-body.js.coffee new file mode 100644 index 00000000..cd77863d --- /dev/null +++ b/app/assets/javascripts/supplier/app/helpers/page-body.js.coffee @@ -0,0 +1,4 @@ +Ember.Handlebars.registerHelper 'page-body-helper', (resource, params..., options)-> + body = @get resource + template = Ember.Handlebars.compile('body') + body.htmlSafe() diff --git a/app/assets/javascripts/supplier/app/models/page.js.coffee b/app/assets/javascripts/supplier/app/models/page.js.coffee new file mode 100644 index 00000000..0c95e75b --- /dev/null +++ b/app/assets/javascripts/supplier/app/models/page.js.coffee @@ -0,0 +1,4 @@ +attr = DS.attr +App.Page = DS.Model.extend + title: attr 'string' + body: attr 'string' diff --git a/app/assets/javascripts/supplier/app/router.js.coffee b/app/assets/javascripts/supplier/app/router.js.coffee index a0536ea4..cffb579f 100644 --- a/app/assets/javascripts/supplier/app/router.js.coffee +++ b/app/assets/javascripts/supplier/app/router.js.coffee @@ -14,6 +14,8 @@ App.Router.map -> @resource 'list', path: ':list_id' @resource 'employees', -> @resource 'employee', path: ':employee_id' + @resource 'pages', -> + @resource 'page', path: ':page_id' @route 'orders_display' # chromecast etc @route 'menu' @route 'settings' diff --git a/app/assets/javascripts/supplier/app/templates/components/language-switcher.emblem b/app/assets/javascripts/supplier/app/templates/components/language-switcher.emblem new file mode 100644 index 00000000..1d0e302e --- /dev/null +++ b/app/assets/javascripts/supplier/app/templates/components/language-switcher.emblem @@ -0,0 +1,2 @@ +each locale in locales + a.language-switch-button{ action "switchTo" locale}= flag locale diff --git a/app/assets/javascripts/supplier/app/templates/page.emblem b/app/assets/javascripts/supplier/app/templates/page.emblem new file mode 100644 index 00000000..1e861fd6 --- /dev/null +++ b/app/assets/javascripts/supplier/app/templates/page.emblem @@ -0,0 +1,4 @@ +.row: .small-12.columns + h2=model.title + /= page-body model.body + view page-body templateBody=model.body diff --git a/app/assets/javascripts/supplier/app/templates/settings.emblem b/app/assets/javascripts/supplier/app/templates/settings.emblem index d56c0d25..81383513 100644 --- a/app/assets/javascripts/supplier/app/templates/settings.emblem +++ b/app/assets/javascripts/supplier/app/templates/settings.emblem @@ -36,6 +36,7 @@ if editIensProfile App.NumberField valueBinding="controller.model.iens_profile" = image_tag 'supplier/settings/iens-example.png' span=t "settings.reviews.explanation" +.row: .small-12.columns= language-switcher .form-row.form-actions if saving button.button.submit-supplier-settings.disabled diff --git a/app/assets/javascripts/supplier/app/views/page-body.js.coffee b/app/assets/javascripts/supplier/app/views/page-body.js.coffee new file mode 100644 index 00000000..e4e96d1a --- /dev/null +++ b/app/assets/javascripts/supplier/app/views/page-body.js.coffee @@ -0,0 +1,11 @@ +App.PageBodyView = Ember.View.extend + setTemplate: (-> + body = @get('templateBody') + body ||= "" + try + template = Ember.Handlebars.compile(body) + catch + template = Ember.Handlebars.compile(tspan('page.cannot_compile')) + @set 'template', template + @rerender() + ).on('init').observes('templateBody') diff --git a/app/assets/javascripts/supplier/foundation1/application.js.erb b/app/assets/javascripts/supplier/foundation1/application.js.erb index ae08e194..b3121e8b 100644 --- a/app/assets/javascripts/supplier/foundation1/application.js.erb +++ b/app/assets/javascripts/supplier/foundation1/application.js.erb @@ -25,6 +25,7 @@ String.prototype.capitalize = function() { return this.charAt(0).toUpperCase() + window.time_zones = <%= ActiveSupport::TimeZone.all.map{|tz| {name: tz.name, formatted: "GMT#{tz.formatted_offset} #{tz.name}"}}.to_json.html_safe %>; window.countries = <%= IsoCountryCodes.all.map{|cc| {name: cc.name}}.to_json.html_safe %>; + var path_mapping = { user_root: '/user', join_occupied_table: '/user/join_occupied_table', diff --git a/app/assets/javascripts/supplier/foundation1/list.js.coffee b/app/assets/javascripts/supplier/foundation1/list.js.coffee deleted file mode 100644 index 6717dd7c..00000000 --- a/app/assets/javascripts/supplier/foundation1/list.js.coffee +++ /dev/null @@ -1,21 +0,0 @@ -class List - constructor: (@attributes)-> - id: -> @attributes.id || @attributes._id - table_number: -> @attributes.table_number - total_amount: -> @attributes.total_amount - section_title: -> @attributes.section_title - needs_help: -> @attributes.needs_help - needs_payment: -> @attributes.needs_payment - active: -> @attributes.state == 'active' - table_id: -> @attributes.table_id - products: -> @attributes.products || [] - has_active_orders: -> @attributes.has_active_orders - supplier_name: -> @attributes.supplier_name - created_at: -> @attributes.created_at - display: -> - txt = @supplier_name() - txt += ' - ' - txt += Quser.format_date(@created_at()) - txt - -@List = List diff --git a/app/assets/javascripts/supplier/foundation1/order.js.coffee b/app/assets/javascripts/supplier/foundation1/order.js.coffee deleted file mode 100644 index 39e74cbc..00000000 --- a/app/assets/javascripts/supplier/foundation1/order.js.coffee +++ /dev/null @@ -1,17 +0,0 @@ -class Order - constructor: (@attributes)-> - table_number: -> @attributes.table_number - id: -> @attributes.id || @attributes._id - total_amount: -> @attributes.total_amount - section_title: -> @attributes.section_title - list_id: -> @attributes.list_id - state: -> @attributes.state - display: -> - order_txts = [] - return '' unless @attributes.products - for product in @attributes.products - order_txts.push(product.name + ' (' + product.number + ')') - order_txts.join(', ') - can_process: -> @attributes.state == 'placed' - -@Order = Order diff --git a/app/assets/stylesheets/supplier/foundation1/components/_language_switcher.css.sass b/app/assets/stylesheets/supplier/foundation1/components/_language_switcher.css.sass new file mode 100644 index 00000000..5f5a6593 --- /dev/null +++ b/app/assets/stylesheets/supplier/foundation1/components/_language_switcher.css.sass @@ -0,0 +1,5 @@ +.language-switcher-container + .language-switch-button + +button($bg: $secondary-color, $padding: $button-tny) + margin: 0 + margin-right: 8px diff --git a/app/controllers/suppliers/pages_controller.rb b/app/controllers/suppliers/pages_controller.rb new file mode 100644 index 00000000..423fbd10 --- /dev/null +++ b/app/controllers/suppliers/pages_controller.rb @@ -0,0 +1,19 @@ +module Suppliers + class PagesController < Suppliers::ApplicationController + prepend_before_action :find_page, only: [:show] + def index + @pages = Page.all_for_suppliers(locale: params[:locale]) + render json: @pages, each_serializer: Suppliers::PageSerializer + end + + def show + render json: @page, serializer: Suppliers::PageSerializer + end + + private + + def find_page + @page = Page.suppliers_page(params[:id], locale: params[:locale]) + end + end +end diff --git a/app/models/page.rb b/app/models/page.rb index 0d82da70..cb825c92 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -1,6 +1,24 @@ class Page include Cmtool::Includes::Page + include ActiveModel::SerializerSupport def self.layouts %w[theme1 theme1-home] end + + def self.suppliers_page(name, locale: :en) + find_by_name_and_locale("suppliers-#{name}", locale) || NullPage.new(name, locale: locale) + end + + class NullPage < NullModel + attr_reader :name, :locale, :title, :body + def initialize(name, locale: 'en') + @name = name + @locale = locale + @body = ::I18n.t('page.not_found', locale: locale) + end + + def title + @title ||= name.to_s.humanize.gsub(/\W/, ' ') + end + end end diff --git a/app/serializers/suppliers/page_serializer.rb b/app/serializers/suppliers/page_serializer.rb new file mode 100644 index 00000000..cc54f327 --- /dev/null +++ b/app/serializers/suppliers/page_serializer.rb @@ -0,0 +1,11 @@ +class Suppliers::PageSerializer < Qwaiter::Serializer + self.root = :page + attributes :name, :title, :body, :locale, :position + def name + object.name.to_s.sub /^suppliers-/, '' + end + + def id + name + end +end diff --git a/app/services/null_model.rb b/app/services/null_model.rb new file mode 100644 index 00000000..f603d534 --- /dev/null +++ b/app/services/null_model.rb @@ -0,0 +1,7 @@ +NullModel = Naught.build do + include ActiveModel::SerializerSupport + def created_at + @created_at ||= Time.current + end + alias_method :updated_at, :created_at +end diff --git a/app/views/suppliers/application/_head.html.erb b/app/views/suppliers/application/_head.html.erb index eb616d49..a36c82b6 100644 --- a/app/views/suppliers/application/_head.html.erb +++ b/app/views/suppliers/application/_head.html.erb @@ -4,6 +4,7 @@ var supplier_object=<%= {id: current_supplier.id}.to_json.html_safe %>; var employee_object=<%=raw Suppliers::EmployeeSerializer.new(current_employee, root: false).to_json %>; var data_host = ''; +var $asset_path = '/assets/'; var event_host = '<%= Qwaiter.event_host %>'; //var datepicker_options = {dateFormat: 'yy-mm-dd', firstDay: <%= current_supplier.week_starts_on_monday? ? 1 : 0 %>}; diff --git a/config/locales/en.yml b/config/locales/en.yml index ad792bbc..3f33567f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2,6 +2,8 @@ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. en: hello: "Hello world" + page: + not_found: "404 The page you were looking for could not be found" menu: home: Home about: About diff --git a/config/locales/nl.yml b/config/locales/nl.yml index b868e8e7..7475c843 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1,6 +1,8 @@ # 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. nl: + page: + not_found: "404 de pagina die u probeert te bereiken kan niet worden gevonden" menu: home: Home about: Over mozo.bar diff --git a/config/locales/supplier.en.yml b/config/locales/supplier.en.yml index d9dc1148..53277de4 100644 --- a/config/locales/supplier.en.yml +++ b/config/locales/supplier.en.yml @@ -1,5 +1,7 @@ en: supplier: + page: + cannot_compile: There is an error in the page that prevented it from being displayed. confirm: cancel: "Cancel" confirm: "OK" diff --git a/config/locales/supplier.nl.yml b/config/locales/supplier.nl.yml index 45aad9b3..6ea19349 100644 --- a/config/locales/supplier.nl.yml +++ b/config/locales/supplier.nl.yml @@ -1,5 +1,7 @@ nl: supplier: + page: + cannot_compile: There is an error in the page that prevented it from being displayed. confirm: cancel: Sluit confirm: Ja diff --git a/config/routes.rb b/config/routes.rb index 985dc35e..5eb35f85 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -165,6 +165,7 @@ Qwaiter::Application.routes.draw do post :mark_delivered end end + resources :pages, only: [:index, :show], constraints: {id: /.*/} root to: 'sections#index' end diff --git a/spec/factories/page_factory.rb b/spec/factories/page_factory.rb new file mode 100644 index 00000000..d8ffe9d0 --- /dev/null +++ b/spec/factories/page_factory.rb @@ -0,0 +1,4 @@ +FactoryGirl.define do + factory :page do + end +end diff --git a/spec/models/page_spec.rb b/spec/models/page_spec.rb new file mode 100644 index 00000000..dca36dc7 --- /dev/null +++ b/spec/models/page_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe Page do + describe '.suppliers_page' do + it 'finds by symbol locale' do + page = create :page, name: "suppliers-about", locale: 'en', title: 'About' + Page.suppliers_page('about', locale: :en).should eq page + end + + it 'actually uses the locale argument' do + page = create :page, name: "suppliers-about", locale: 'nl', title: 'About' + Page.suppliers_page('about', locale: 'nl').should eq page + end + + it 'returns a NullPage when no page found' do + page = Page.suppliers_page('non-existent', locale: 'nl') + page.should be_a Page::NullPage + page.title.should == 'Non existent' + page.locale.should == 'nl' + end + + end +end