Passing spec for user product information
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
//= require jquery
|
||||
//= require jquery_ujs
|
||||
//= require jquery.ui.all
|
||||
//= require bootstrap
|
||||
// require bootstrap
|
||||
// require twitter/bootstrap
|
||||
//= require_directory .
|
||||
//= require_self
|
||||
|
||||
@@ -58,7 +58,7 @@ App.ApplicationController = Ember.Controller.extend
|
||||
if list.get('join_requests').toArray().length
|
||||
@transitionToRoute 'join_requests'
|
||||
callback.call(@) if callback
|
||||
error = (emberError)=>
|
||||
error = @ajaxError (emberError)=>
|
||||
# if jqXHR.status == 404 officially, now assume close list on error
|
||||
#@redirect_to 'index', message: 'the_list_has_been_closed'
|
||||
console.log "Error: #{emberError.message}" if emberError.message
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
ControllerExtensions = Ember.Mixin.create
|
||||
ajaxError: (callback)->
|
||||
handler = (jqXHR, textStatus, errorThrown)=>
|
||||
console.log "Error: #{textStatus}: #{errorThrown}"
|
||||
callback.call(@, jqXHR)
|
||||
if jqXHR.status == 401
|
||||
handler = (emberError)=>
|
||||
console.log "Error: status #{emberError.status}"
|
||||
if emberError.status == 401
|
||||
App.__container__.lookup('route:application').unauthorized()
|
||||
else
|
||||
callback.call(@, emberError)
|
||||
handler
|
||||
showModal: (options={})->
|
||||
$(document).foundation('reflow') # needed (stupid!!!)
|
||||
@@ -12,6 +13,7 @@ ControllerExtensions = Ember.Mixin.create
|
||||
@set 'controllers.application.modal.title', options.title if options.title
|
||||
@set 'controllers.application.modal.content', options.content if options.content
|
||||
Ember.ArrayController.reopen ControllerExtensions
|
||||
Ember.Controller.reopen ControllerExtensions
|
||||
Ember.Controller.reopen
|
||||
needs: ['application']
|
||||
secured: (callback)->
|
||||
|
||||
@@ -14,6 +14,7 @@ App.ApplicationRoute = Ember.Route.extend
|
||||
Qstorage.setItem('auth_token', '')
|
||||
@controllerFor('application').set 'list', null
|
||||
App.obtain_token(t('messages.unauthorized'))
|
||||
@controllerFor('application').redirect_to 'index', message: 'unauthorized'
|
||||
actions:
|
||||
openModal: (modalName, model)->
|
||||
@controllerFor(modalName).set('model', model)
|
||||
|
||||
@@ -59,20 +59,21 @@ header.top-menu
|
||||
App.MenuItemListNeedsHelpView
|
||||
App.MenuItemListNeedsPaymentView
|
||||
section.extra-info
|
||||
.supplier-info-row
|
||||
.supplier-name= list.supplier.name
|
||||
.table-number
|
||||
|
|
||||
= t 'models.table'
|
||||
|
|
||||
= list.table.number
|
||||
.supplier-info-row
|
||||
.counter.supplier-orders-placed-count
|
||||
= list.supplier.orders_placed_count
|
||||
span.orders-placed-count-icon
|
||||
.counter.supplier-orders-in-process-count
|
||||
= list.supplier.orders_in_process_count
|
||||
span.orders-in-process-count-icon
|
||||
if list
|
||||
.supplier-info-row
|
||||
.supplier-name= list.supplier.name
|
||||
.table-number
|
||||
|
|
||||
= t 'models.table'
|
||||
|
|
||||
= list.table.number
|
||||
.supplier-info-row
|
||||
.counter.supplier-orders-placed-count
|
||||
= list.supplier.orders_placed_count
|
||||
span.orders-placed-count-icon
|
||||
.counter.supplier-orders-in-process-count
|
||||
= list.supplier.orders_in_process_count
|
||||
span.orders-in-process-count-icon
|
||||
aside.side-menu
|
||||
ul
|
||||
li
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
hr
|
||||
ul.product_category-products
|
||||
each product in product_category.products
|
||||
li
|
||||
li class="order-product-#{unbound product.id}"
|
||||
if product.description
|
||||
button.show-product-description{action showProductDescription product}
|
||||
span
|
||||
|
||||
@@ -1,217 +0,0 @@
|
||||
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
||||
// listed below.
|
||||
//
|
||||
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
||||
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
||||
//
|
||||
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
||||
// the compiled file.
|
||||
//
|
||||
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
||||
// GO AFTER THE REQUIRES BELOW.
|
||||
//
|
||||
//= require jquery
|
||||
//= require jquery_ujs
|
||||
// require bootstrap-transition
|
||||
// require bootstrap-affix
|
||||
// require bootstrap-alert
|
||||
// require bootstrap-button
|
||||
// require bootstrap-carousel
|
||||
// require bootstrap-collapse
|
||||
// require bootstrap-dropdown
|
||||
// require bootstrap-modal
|
||||
// require bootstrap-scrollspy
|
||||
// require bootstrap-tab
|
||||
// require bootstrap-tooltip
|
||||
// require bootstrap-popover
|
||||
// require bootstrap-typeahead
|
||||
//= require bootstrap
|
||||
//= require qwaiter
|
||||
//= require supplier/order
|
||||
//= require supplier/list
|
||||
//= require mustache
|
||||
//= require faye
|
||||
//= require_directory .
|
||||
//= require_self
|
||||
var path_mapping = {
|
||||
user_root: '/index',
|
||||
join_occupied_table: '/join_occupied_table',
|
||||
list_products_for_table: '/list_products_for_table',
|
||||
list_products: '/list_products',
|
||||
active_list: '/active_list',
|
||||
history_list: '/history_list',
|
||||
obtain_token: '/obtain_token',
|
||||
lists_history: '/list_history'
|
||||
}
|
||||
var $translations = {
|
||||
en: {
|
||||
messages: <%= I18n.t('messages', locale: :en).to_json %>,
|
||||
confirmations: {
|
||||
},
|
||||
// Moved to yml
|
||||
list_needs_help: {
|
||||
help_is_on_its_way: 'Help is already on its way',
|
||||
title: 'Request a waiter',
|
||||
content: 'Request a waiter to your table'
|
||||
},
|
||||
// Moved to yml
|
||||
list_needs_payment: {
|
||||
payment_already_requested: 'You already asked for the bill',
|
||||
title: 'Ask for the check',
|
||||
content: 'Do you want to pay?'
|
||||
},
|
||||
selected_products: {
|
||||
order: 'Order',
|
||||
clear: 'Clear'
|
||||
},
|
||||
join_request: {
|
||||
title: 'Join request',
|
||||
body: '%{email} wants to join the table',
|
||||
reject: 'Reject',
|
||||
approve: 'Approve',
|
||||
requestor: {
|
||||
title: 'This table is occupied',
|
||||
go_back: 'Back',
|
||||
show_the_products: 'Show the menu',
|
||||
join_this_table: 'Join this table',
|
||||
waiting_for_confirmation: 'Waiting for approval of the person on this table...'
|
||||
}
|
||||
},
|
||||
// Moved to yml
|
||||
move_table: {
|
||||
cannot_move_to_occupied_table: 'You cannot move to an occupied table',
|
||||
moved_to_another_table: 'The table is changed.',
|
||||
confirmation_title: 'Move to another table?',
|
||||
confirmation_body: 'Do you want to move to another table?'
|
||||
},
|
||||
models: <%= I18n.t('activemodel.models', locale: :en).to_json %>,
|
||||
attributes: <%= I18n.t('activemodel.attributes', locale: :en).to_json %>,
|
||||
<%= I18n.t('user', locale: :en).to_json[1..-2] %>
|
||||
},
|
||||
nl: {
|
||||
messages: <%= I18n.t('messages', locale: :nl).to_json %>,
|
||||
confirmations: {
|
||||
},
|
||||
// Moved to yml
|
||||
list_needs_help: {
|
||||
help_is_on_its_way: 'Er wordt al iemand naar je tafel gestuurd',
|
||||
title: 'Ik heb een vraag',
|
||||
content: 'Wil je een vraag stellen?'
|
||||
},
|
||||
// Moved to yml
|
||||
list_needs_payment: {
|
||||
payment_already_requested: 'De rekening is reeds gevraagd',
|
||||
title: 'Vraag om de rekening',
|
||||
content: 'Wil je betalen?'
|
||||
},
|
||||
selected_products: {
|
||||
order: 'Bestellen',
|
||||
clear: 'Leegmaken'
|
||||
},
|
||||
join_request: {
|
||||
title: 'Lijst deling',
|
||||
body: '%{email} wil ook op jouw lijst bestellen',
|
||||
reject: 'Afwijzen',
|
||||
approve: 'Toestaan',
|
||||
requestor: {
|
||||
title: 'Deze tafel is bezet',
|
||||
go_back: 'Terug',
|
||||
show_the_products: 'Toon het menu',
|
||||
join_this_table: 'Ook bestellen aan deze tafel',
|
||||
waiting_for_confirmation: 'Wachten op toestemming van huidige gebruikers om hier te kunnen bestellen...'
|
||||
}
|
||||
},
|
||||
move_table: {
|
||||
cannot_move_to_occupied_table: 'Je kan niet verhuizen naar een tafel die reeds gebruikt wordt.',
|
||||
moved_to_another_table: 'De tafel is gewijzigd.',
|
||||
confirmation_title: 'Naar een andere tafel verhuizen?',
|
||||
confirmation_body: 'Wil je aan een andere tafel gaan zitten?'
|
||||
},
|
||||
models: <%= I18n.t('activemodel.models', locale: :nl).to_json %>,
|
||||
attributes: <%= I18n.t('activemodel.attributes', locale: :nl).to_json %>,
|
||||
<%= I18n.t('user', locale: :nl).to_json[1..-2] %>
|
||||
}
|
||||
}
|
||||
function redirect_to(mapping, variables){
|
||||
window.redirecting = true;
|
||||
variables || (variables = {});
|
||||
var vars = [];
|
||||
for(var name in variables){
|
||||
vars.push(name + '=' +variables[name]);
|
||||
Qstorage.setItem(name, variables[name]);
|
||||
}
|
||||
window.location.href = QMobile.root_url() + path_mapping[mapping] + '.html'
|
||||
}
|
||||
function direct_to_site(mapping, variables){
|
||||
variables || (variables = {});
|
||||
var vars = []
|
||||
for(var name in variables){
|
||||
vars.push(name + '=' +variables[name])
|
||||
}
|
||||
window.location = data_host + path_mapping[mapping] + '.html?' + vars.join('&')
|
||||
}
|
||||
function currency(num) {
|
||||
return Qwaiter.currency(num);
|
||||
}
|
||||
String.prototype.capitalize = function() {
|
||||
return this.charAt(0).toUpperCase() + this.slice(1);
|
||||
}
|
||||
function t(path, vars){
|
||||
vars || (vars = {});
|
||||
var parts = path.split('.');
|
||||
var locale = Qstorage.getItem('locale') || 'en';
|
||||
var accessor = '$translations.'+locale+'["' + parts.join('"]["')+ '"]';
|
||||
var result;
|
||||
try{
|
||||
result = eval(accessor);
|
||||
} catch(err){
|
||||
result = parts[parts.length - 1].capitalize();
|
||||
}
|
||||
if(!result) return parts[parts.length - 1].capitalize();
|
||||
$.each(vars, function(v, value){ result = result.replace('%{'+v+'}', value)});
|
||||
return result;
|
||||
}
|
||||
$.ajaxSetup({
|
||||
error: function(xhr, ajaxOptions, error, another){
|
||||
if(xhr.status == 401){
|
||||
redirect_to('obtain_token');
|
||||
}else if(xhr.status == 0){
|
||||
QMobile.connection_problem();
|
||||
}
|
||||
}
|
||||
});
|
||||
$(function(){
|
||||
if(Qstorage.getItem('message')){
|
||||
var container = $('.alert-success');
|
||||
var msg_finder = Qstorage.getItem('message');
|
||||
if(msg_finder.indexOf('.') == -1) msg_finder = 'messages.'+msg_finder;
|
||||
container.find('div').text(t(msg_finder));
|
||||
container.show();
|
||||
Qstorage.removeItem('message');
|
||||
}
|
||||
if(Qstorage.getItem('list_closed')){
|
||||
var container = $('.alert-error');
|
||||
container.find('div').text(t('messages.the_list_has_been_closed'));
|
||||
container.show();
|
||||
Qstorage.removeItem('list_closed');
|
||||
}
|
||||
setTranslations();
|
||||
});
|
||||
function setLocale(locale){
|
||||
Qstorage.setItem('locale', locale);
|
||||
setTranslations();
|
||||
}
|
||||
function Qupdate(selector){
|
||||
setTranslations(selector);
|
||||
}
|
||||
function setTranslations(selector){
|
||||
var list = $('#top-navigation-list');
|
||||
var locale = Qstorage.getItem('locale');
|
||||
list.find('.locale').show();
|
||||
list.find('.locale-'+locale).hide();
|
||||
if(selector){
|
||||
$(selector).find('[data-t]').each(function(){$(this).text(t($(this).attr('data-t')))})
|
||||
}else{
|
||||
$('[data-t]').each(function(){$(this).text(t($(this).attr('data-t')))})
|
||||
}
|
||||
}
|
||||
@@ -1,136 +0,0 @@
|
||||
var Base64 = {
|
||||
|
||||
// private property
|
||||
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
|
||||
// public method for encoding
|
||||
encode : function (input) {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
input = Base64._utf8_encode(input);
|
||||
|
||||
while (i < input.length) {
|
||||
|
||||
chr1 = input.charCodeAt(i++);
|
||||
chr2 = input.charCodeAt(i++);
|
||||
chr3 = input.charCodeAt(i++);
|
||||
|
||||
enc1 = chr1 >> 2;
|
||||
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
||||
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
||||
enc4 = chr3 & 63;
|
||||
|
||||
if (isNaN(chr2)) {
|
||||
enc3 = enc4 = 64;
|
||||
} else if (isNaN(chr3)) {
|
||||
enc4 = 64;
|
||||
}
|
||||
|
||||
output = output +
|
||||
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
|
||||
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
||||
|
||||
}
|
||||
|
||||
return output;
|
||||
},
|
||||
|
||||
// public method for decoding
|
||||
decode : function (input) {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3;
|
||||
var enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||||
|
||||
while (i < input.length) {
|
||||
|
||||
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
||||
|
||||
chr1 = (enc1 << 2) | (enc2 >> 4);
|
||||
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||||
chr3 = ((enc3 & 3) << 6) | enc4;
|
||||
|
||||
output = output + String.fromCharCode(chr1);
|
||||
|
||||
if (enc3 != 64) {
|
||||
output = output + String.fromCharCode(chr2);
|
||||
}
|
||||
if (enc4 != 64) {
|
||||
output = output + String.fromCharCode(chr3);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
output = Base64._utf8_decode(output);
|
||||
|
||||
return output;
|
||||
|
||||
},
|
||||
|
||||
// private method for UTF-8 encoding
|
||||
_utf8_encode : function (string) {
|
||||
string = string.replace(/\r\n/g,"\n");
|
||||
var utftext = "";
|
||||
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
|
||||
var c = string.charCodeAt(n);
|
||||
|
||||
if (c < 128) {
|
||||
utftext += String.fromCharCode(c);
|
||||
}
|
||||
else if((c > 127) && (c < 2048)) {
|
||||
utftext += String.fromCharCode((c >> 6) | 192);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
else {
|
||||
utftext += String.fromCharCode((c >> 12) | 224);
|
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return utftext;
|
||||
},
|
||||
|
||||
// private method for UTF-8 decoding
|
||||
_utf8_decode : function (utftext) {
|
||||
var string = "";
|
||||
var i = 0;
|
||||
var c = c1 = c2 = 0;
|
||||
|
||||
while ( i < utftext.length ) {
|
||||
|
||||
c = utftext.charCodeAt(i);
|
||||
|
||||
if (c < 128) {
|
||||
string += String.fromCharCode(c);
|
||||
i++;
|
||||
}
|
||||
else if((c > 191) && (c < 224)) {
|
||||
c2 = utftext.charCodeAt(i+1);
|
||||
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
||||
i += 2;
|
||||
}
|
||||
else {
|
||||
c2 = utftext.charCodeAt(i+1);
|
||||
c3 = utftext.charCodeAt(i+2);
|
||||
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
||||
i += 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user