* ResetPassword.txt: Un message pour le mot de passe oublié * style.css: fixe un 404 * UpdatePassword.aspx: Implémente le formulaire de mise à jour du mot de passe, accessible depuis l'e-mail. * Contact.aspx: implémente la page de contact préstataire * UpdatePassword.cs: modèle de la modification de mot de passe au jeton de securité (qui est encore un fake en l'état) * CommandRegistration.cs: un enregistrement de commande * NominativeCommandRegistration.cs: un enregistrement de commande nominative * .gitignore: ignore ma config LuaDebug * NpgsqlMembershipProvider.cs: ne pas crasher à la lecture en base de la question de recupération du mot de passe quand elle est nulle. * BasketController.cs: renvoie l'objet décrivant la prise de commande * Global.asax.cs: ignorer les routes vers App_Data et App_Code * instdbws.sql: passage du type json à jsonb pour les paramètres de la commande * RegistrationMail.txt: un piti message à l'enregistrement * AccountController.cs: Envoi du message du mot de passe oublié, methode de changemnet du mot de passe. * AdminController.cs: xmldoc + refabrication helper Notify * HomeController.cs: * BlogsController.cs: * GoogleController.cs: refabrication helper Notify * FrontOfficeController.cs: Refabrication: Utilisation du nouvel enregistrement de commande. + refabrication helper Notify * YavscHelpers.cs: implémente la methode d'envoi du message de mot de passe oublié + refabrication helper Notify * App.master: Corrige la notification Html * AppAdmin.master: Le lien vers la page de contact était associé à tort à la classe css "thanks" * yavsc.js: message plus parlant en cas de requête Ajax mal formée. * Login.aspx: Implémente le lien vers le formulaire de recupération du mot de passe * UserPost.aspx: . * Booking.aspx: format du code * Performer.ascx: l'e-mail préstataire ne sera jamais fourni par l'application, aussi, on parlera de "prendre contact", d'échanger ... mais pas de donner l'adresse e-mail. L'information "son email" n'est donc pas disponible meme à l'utilisateur autorisé. La prise de contact, ou autre fux de comunication le sont. * Performers.aspx: affiche la notification à l'envoi de la demande de devis * Product.aspx: * Service.aspx: les periodes du catalogue et du calendrier sont fondue. * Contact.aspx: traduction en français * Web.config: * la procédure de recupération du mot de passe est activée * l'e-message envoyé est construit à partir d'un modèle, un fichier texte trouvé dans /App_Data, et indiqué à l'application par le paramêtre applicatif "LostPasswordMessage" * Yavsc.csproj: reference les nouveaux fichiers * Product.cs: utilise la période du calendrier * Commande.cs: renvoie un objet à la prise de commande, indiquant l'identifiant de commande, et les messages envoyés en cas de commande nominative. * GoogleHelpers.cs: icone à la notification mobile * LocalizedText.resx: * LocalizedText.fr.resx: * LocalizedText.Designer.cs: * LocalizedText.fr.Designer.cs: traductions * UserNameBase.cs: fixe la dé-sérialisation * WorkFlowManager.cs: refabrication de la prise de commande * YavscModel.csproj: nouveaux objets du modèle * OtherWebException.aspx: page obsolete * Period.cs: fondre la période: celle du catalogue disparait, au profit de celle du calendrier.
126 lines
3.3 KiB
JavaScript
126 lines
3.3 KiB
JavaScript
|
|
var Yavsc = (function(apiBaseUrl){
|
|
var self = {};
|
|
|
|
self.apiBaseUrl = (apiBaseUrl || '/api');
|
|
|
|
self.dumpprops = function (obj) {
|
|
var str = "";
|
|
for(var k in obj)
|
|
if (obj.hasOwnProperty(k))
|
|
str += "."+k + " = " + obj[k] + "\n";
|
|
return str;}
|
|
self.logObj = function(obj) {
|
|
console.log('obj:'+obj);
|
|
console.log(self.dumpprops(obj));
|
|
};
|
|
|
|
self.showHide = function () {
|
|
var id = $(this).attr('did');
|
|
var target = $('#'+id);
|
|
if (target.hasClass('hidden')) {
|
|
target.removeClass('hidden');
|
|
if (typeof this.oldhtml == "undefined")
|
|
this.oldhtml = $(this).html();
|
|
$(this).html('['+this.oldhtml+']');
|
|
}
|
|
else {
|
|
target.addClass('hidden');
|
|
$(this).html(this.oldhtml);
|
|
}
|
|
};
|
|
|
|
self.dimiss = function () {
|
|
$(this).parent().remove();
|
|
};
|
|
|
|
self.ajax = function (method,data,callback,badInputCallback,errorCallBack) {
|
|
if (!badInputCallback) badInputCallback=Yavsc.onAjaxBadInput;
|
|
if (!errorCallBack) errorCallBack=Yavsc.onAjaxError;
|
|
$.ajax({
|
|
url: self.apiBaseUrl+'/'+method,
|
|
type: "POST",
|
|
data: data,
|
|
success: function (response) {
|
|
if (callback) callback(response);
|
|
},
|
|
statusCode: {
|
|
400: Yavsc.onAjaxBadInput
|
|
},
|
|
error: Yavsc.onAjaxError});
|
|
};
|
|
|
|
self.onScroll = function() {
|
|
var $notifications = $('#notifications');
|
|
if ($notifications.has('*').length>0) {
|
|
if ($(window).scrollTop()>0) {
|
|
$notifications.addClass("dispmodal");
|
|
}
|
|
else {
|
|
$notifications.removeClass("dispmodal");
|
|
}}
|
|
};
|
|
|
|
self.notice = function (msg, callback, msgok) {
|
|
if (!msgok) msgok='Ok';
|
|
var note = $('<div class="notification">'+msg+'<br></div>');
|
|
var btn = $('<a class="actionlink"><i class="fa fa-check">'+msgok+'</i></a>');
|
|
if (callback) btn.click(callback);
|
|
btn.click(self.dimiss).appendTo(note);
|
|
note.appendTo("#notifications");
|
|
self.onScroll();
|
|
};
|
|
|
|
self.onAjaxBadInput = function (data)
|
|
{
|
|
if (!data) { Yavsc.notice('Bad input, no data'); return; }
|
|
if (!data.responseJSON) { Yavsc.notice('Bad input, no json data response'); return; }
|
|
if (!Array.isArray(data.responseJSON)) { Yavsc.notice('Bad Input: '+data.responseJSON); return; }
|
|
$.each(data.responseJSON, function (key, value) {
|
|
var errspanid = "Err_" + value.key;
|
|
var errspan = document.getElementById(errspanid);
|
|
if (errspan==null)
|
|
Yavsc.notice('ENOTANODE: '+errspanid);
|
|
else
|
|
errspan.innerHTML=value.errors.join("<br/>");
|
|
});
|
|
};
|
|
|
|
self.onAjaxError = function (xhr, ajaxOptions, thrownError) {
|
|
if (xhr.status!=400)
|
|
Yavsc.notice(xhr.status+" : "+xhr.responseText);
|
|
};
|
|
|
|
$(document).ready(function(){
|
|
|
|
$('.maskable').each( function() {
|
|
var $mobj = $(this);
|
|
var $btnshow = $('#'+$mobj.data('btn-show'));
|
|
var $btnhide = $('#'+$mobj.data('btn-hide'));
|
|
var onClickHide = function(){
|
|
$mobj.addClass('hidden');
|
|
$btnshow.removeClass('hidden');
|
|
$btnhide.addClass('hidden');
|
|
};
|
|
$btnhide.click(onClickHide);
|
|
onClickHide();
|
|
$btnshow.click(function(){
|
|
$mobj.removeClass('hidden');
|
|
$btnshow.addClass('hidden');
|
|
$btnhide.removeClass('hidden');
|
|
});
|
|
});
|
|
});
|
|
|
|
$(document).ready(function(){
|
|
$body = $("body");
|
|
$(document).on({
|
|
ajaxStart: function() { $body.addClass("loading"); },
|
|
ajaxStop: function() { $body.removeClass("loading"); }
|
|
});
|
|
$(window).scroll(self.onScroll);
|
|
});
|
|
return self;
|
|
})();
|
|
|