--- a/src/ztfy/myams/resources/js/myams.js Wed May 14 15:46:05 2014 +0200
+++ b/src/ztfy/myams/resources/js/myams.js Wed May 14 15:47:14 2014 +0200
@@ -88,15 +88,10 @@
*/
if ($.scrollbarWidth === undefined) {
$.scrollbarWidth = function() {
- var parent,
- child,
- width;
- if (width === undefined) {
- parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');
- child = parent.children();
- width = child.innerWidth() - child.height(99).innerWidth();
- parent.remove();
- }
+ var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body');
+ var child = parent.children();
+ var width = child.innerWidth() - child.height(99).innerWidth();
+ parent.remove();
return width;
};
}
@@ -530,12 +525,19 @@
ajax: function(event, request /*, settings*/) {
if (request.statusText == 'OK')
return;
- ams.skin.messageBox('error', {
- title: ams.i18n.ERROR_OCCURED,
- content: '<h4>' + event.type + '</h4><p>' + request.statusText + '</p>',
- icon: 'fa fa-warning animated shake',
- timeout: 10000
- });
+ var response = ams.ajax.getResponse(request);
+ if (response.content_type == 'json') {
+ ams.ajax.handleJSON(response.data);
+ } else {
+ var title = event.statusText || event.type;
+ var message = request.responseText;
+ ams.skin.messageBox('error', {
+ title: ams.i18n.ERROR_OCCURED,
+ content: '<h4>' + title + '</h4><p>' + message + '</p>',
+ icon: 'fa fa-warning animated shake',
+ timeout: 10000
+ });
+ }
if (window.console) {
console.error(event);
console.debug(request);
@@ -548,12 +550,17 @@
show: function(request, status, error) {
if (!error)
return;
- ams.skin.messageBox('error', {
- title: ams.i18n.ERRORS_OCCURED,
- content: '<h4>' + status + '</h4><p>' + error + '</p>',
- icon: "fa fa-warning animated shake",
- timeout: 10000
- });
+ var response = ams.ajax.getResponse(request);
+ if (response.content_type == 'json') {
+ ams.ajax.handleJSON(response.data);
+ } else {
+ ams.skin.messageBox('error', {
+ title: ams.i18n.ERRORS_OCCURED,
+ content: '<h4>' + status + '</h4><p>' + error + '</p>',
+ icon: "fa fa-warning animated shake",
+ timeout: 10000
+ });
+ }
if (window.console) {
console.error(error);
console.debug(request);
@@ -650,28 +657,41 @@
var content_type = request.getResponseHeader('content-type'),
data_type,
result;
- if (content_type.startsWith('application/javascript')) {
- data_type = 'script';
- result = request.responseText;
- } else if (content_type.startsWith('text/html')) {
- data_type = 'html';
- result = request.responseText;
- } else if (content_type.startsWith('text/xml')) {
- data_type = 'xml';
- result = request.responseText;
- } else {
- result = request.responseJSON;
- if (result)
- data_type = 'json';
- else {
- try {
- result = JSON.parse(request.responseText);
+ if (content_type) {
+ // Got server response
+ if (content_type.startsWith('application/javascript')) {
+ data_type = 'script';
+ result = request.responseText;
+ } else if (content_type.startsWith('text/html')) {
+ data_type = 'html';
+ result = request.responseText;
+ } else if (content_type.startsWith('text/xml')) {
+ data_type = 'xml';
+ result = request.responseText;
+ } else {
+ result = request.responseJSON;
+ if (result)
data_type = 'json';
- } catch (e) {
- result = request.responseText;
- data_type = 'text';
+ else {
+ try {
+ result = JSON.parse(request.responseText);
+ data_type = 'json';
+ } catch (e) {
+ result = request.responseText;
+ data_type = 'text';
+ }
}
}
+ } else {
+ // Probably no response from server...
+ data_type = 'json';
+ result = {
+ status: 'alert',
+ alert: {
+ title: ams.i18n.ERROR_OCCURED,
+ content: ams.i18n.NO_SERVER_RESPONSE
+ }
+ };
}
return {content_type: data_type,
data: result};
@@ -697,10 +717,13 @@
*
* For errors data structure, please see MyAMS.form.showErrors function
*/
- handleJSON: function(result, form) {
+ handleJSON: function(result, form, target) {
var status = result.status;
var url;
switch (status) {
+ case 'alert':
+ alert(result.alert.title + '\n\n' + result.alert.content);
+ break;
case 'error':
ams.form.showErrors(form, result);
break;
@@ -724,9 +747,8 @@
ams.dialog.close(form);
url = result.location;
if (url.startsWith('#'))
- ams.skin.loadURL(url.substr(1), result.target || '#content');
- else
- ams.skin.loadURL(url, result.target || '#content');
+ url = url.substr(1);
+ ams.skin.loadURL(url, result.target || target || '#content');
break;
case 'redirect':
url = result.location;
@@ -765,13 +787,17 @@
{title: ams.i18n.ERROR_OCCURED,
content: message,
timeout: 10000});
- else
- ams.skin.messageBox(message.status || 'info',
+ else {
+ var message_status = message.status || 'info';
+ if (message_status == 'error' && form && target)
+ ams.executeFunctionByName(form.data('ams-form-submit-error') || 'MyAMS.form.finalizeSubmitOnError', form, target);
+ ams.skin.messageBox(message_status,
{title: message.title || ams.i18n.ERROR_OCCURED,
content: message.content,
icon: message.icon,
number: message.number,
timeout: message.timeout || 10000});
+ }
}
if (result.callback)
ams.executeFunctionByName(result.callback, form, result.options);
@@ -842,7 +868,7 @@
method: method,
params: params,
async: typeof(callback) == 'function',
- success: callback || function(data, status) {
+ success: callback || function(data /*, status*/) {
result = data.result;
},
error: ams.error.show
@@ -972,8 +998,9 @@
url = ams.ajax.getAddr() + action;
url += handler || buttonHandler || data.amsFormHandler || '';
+ var target = null;
if (data.amsFormInitSubmitTarget) {
- var target = $(buttonTarget || data.amsFormSubmitTarget || '#content');
+ target = $(buttonTarget || data.amsFormSubmitTarget || '#content');
ams.executeFunctionByName(data.amsFormInitSubmit || 'MyAMS.form.initSubmit', form, target);
} else if (!data.amsFormHideSubmitFooter)
ams.executeFunctionByName(data.amsFormInitSubmit || 'MyAMS.form.initSubmitFooter', form);
@@ -998,8 +1025,9 @@
beforeSubmit: function(data, form /*, options*/) {
form.data('submitted', true);
},
- error: function(request, status, error) {
- ams.error.show(request, status, error);
+ error: function(request, status, error, form) {
+ if (target)
+ ams.executeFunctionByName(data.amsFormSubmitError || 'MyAMS.form.finalizeSubmitOnError', form, target);
if (form.is(':visible')) {
var button = form.data('ams-submit-button');
if (button)
@@ -1065,6 +1093,17 @@
},
/**
+ * Finalize AJAX submit call
+ *
+ * @param target: the form submit container target
+ */
+ finalizeSubmitOnError: function(target) {
+ $('i', target).removeClass('fa-spin')
+ .removeClass('fa-gear')
+ .addClass('fa-ambulance');
+ },
+
+ /**
* Initialize AJAX submit call in form footer
*
* @param this: the submitted form
@@ -1088,7 +1127,7 @@
* @param this: the submitted form
* @param target: the form submit container target
*/
- finalizeSubmitFooter: function(target) {
+ finalizeSubmitFooter: function(/*target*/) {
var form = $(this);
var footer = $('footer', form);
if (footer) {
@@ -1130,9 +1169,15 @@
data_type = request_data.content_type;
result = request_data.data;
}
+
+ if (button)
+ var target = $(button.amsFormSubmitTarget || data.amsFormSubmitTarget || '#content');
+ else
+ target = $(data.amsFormSubmitTarget || '#content');
+
switch (data_type) {
case 'json':
- ams.ajax.handleJSON(result, form);
+ ams.ajax.handleJSON(result, form, target);
break;
case 'script':
break;
@@ -1143,10 +1188,6 @@
default:
if (button && (button.data('ams-keep-modal') !== true))
ams.dialog.close(form);
- if (button)
- var target = $(button.amsFormSubmitTarget || data.amsFormSubmitTarget || '#content');
- else
- target = $(data.amsFormSubmitTarget || '#content');
if (!target.exists())
target = $('body');
target.parents('.hidden').removeClass('hidden');
@@ -1437,6 +1478,10 @@
timeout: 10000
});
break;
+ case 'modal':
+ $(this).data('select2').dropdown.hide();
+ ams.dialog.open(result.location);
+ break;
default:
return {
results: data.results || data,
@@ -1449,6 +1494,11 @@
/** Select2 JSON-RPC success callback */
select2QueryMethodSuccessCallback: function(data, status, options) {
var result = data.result;
+ if (typeof(result) == 'string') {
+ try {
+ result = JSON.parse(result);
+ } catch (e) {}
+ }
switch (result.status) {
case 'error':
ams.skin.messageBox('error', {
@@ -1458,6 +1508,10 @@
timeout: 10000
});
break;
+ case 'modal':
+ $(this).data('select2').dropdown.hide();
+ ams.dialog.open(result.location);
+ break;
default:
options.callback({
results: result.results || result,
@@ -1670,9 +1724,16 @@
var data = legend.data();
if (!data.amsChecker) {
var checker = $('<label class="checkbox"></label>');
- var input = $('<input type="checkbox">').attr('name', data.amsCheckerFieldname)
- .attr('id', (data.amsCheckerFieldname ||
- ('checker_'+ams.generateId())).replace(/\./, '_'))
+ var fieldname = data.amsCheckerFieldname || ('checker_'+ams.generateId());
+ var prefix = data.amsCheckerHiddenPrefix;
+ if (prefix) {
+ $('<input type="hidden">').attr('name', prefix + fieldname)
+ .val(true)
+ .appendTo(checker);
+ }
+ var input = $('<input type="checkbox">').attr('name', fieldname)
+ .attr('id', fieldname.replace(/\./, '_'))
+ .data('ams-checker-init', true)
.val(data.amsCheckerState == 'on')
.on('change', function(e) {
e.preventDefault();
@@ -1700,8 +1761,12 @@
.prependTo(legend);
if (data.amsCheckerState == 'on')
input.attr('checked', true);
- else
- fieldset.addClass('switched');
+ else {
+ if (data.amsCheckerMode == 'disable')
+ fieldset.attr('disabled', 'disabled');
+ else
+ fieldset.addClass('switched');
+ }
legend.data('ams-checker', 'on');
}
});
@@ -1849,7 +1914,7 @@
method: data.amsSelect2QueryMethod,
params: data.amsSelect2QueryParams || {},
success: function(data, status) {
- return ams.helpers.select2QueryMethodSuccessCallback(data, status, options);
+ return ams.helpers.select2QueryMethodSuccessCallback.call(select, data, status, options);
},
error: ams.error.show
};
@@ -1875,7 +1940,8 @@
if (data.amsSelect2EnableFreeTags) {
data_options.createSearchChoice = function(term) {
- return {id: term, text: term};
+ return {id: term,
+ text: (data.amsSelect2FreeTagsPrefix || ams.i18n.SELECT2_FREETAG_PREFIX) + term};
};
}
@@ -3099,6 +3165,7 @@
WAIT: "Please wait!",
FORM_SUBMITTED: "This form was already submitted...",
+ NO_SERVER_RESPONSE: "No response from server!",
ERROR_OCCURED: "An error occured!",
ERRORS_OCCURED: "Some errors occured!",
@@ -3131,6 +3198,7 @@
SELECT2_INPUT_TOOSHORT: "Please enter {0} more character{1}",
SELECT2_INPUT_TOOLONG: "Please delete {0} character{1}",
SELECT2_SELECTION_TOOBIG: "You can only select {0} item{1}",
+ SELECT2_FREETAG_PREFIX: "Free text: ",
DT_COLUMNS: "Columns"