$('#cats').collapse({ toggle: false }); on_title_click=function(event) { if (event.target.tagName=='BUTTON') { return; } var title=$(this); var panel=title.parent().parent(); var panel_collapse=panel.find('.panel-collapse'); var show=!panel_collapse.hasClass('in'); $('.panel-collapse').each(function(idx,div) { $(div).collapse('hide'); }); if (show) { panel_collapse.collapse('show'); } } /*********************** * Add scase **********************/ on_add_scase_btn_click=function(event) { navbar_collapse_hide(); $('#add_scase_modal').modal('show'); } on_valid_add_scase_modal=function (e) { e.preventDefault(); var name=$('#add_scase_name')[0].value; if (name=='') { alert("Vous devez saisir le nom de la valise !"); return; } var nameshake=scases.byName(name); if (nameshake) { if (nameshake.removed) { alert("Une valise de ce nom existe dans la corbeille !"); } else { alert("Cette valise existe déjà !"); } return; } var scase=scases.newSCase(name); if (scase) { scases.save(); show_scase(scase); } $('#add_scase_modal').modal('hide'); } on_show_add_scase_modal=function () { $('#add_scase_name').focus(); } on_close_add_scase_modal=function () { $('#add_scase_modal form')[0].reset(); } /*********************** * Rename scase **********************/ on_rename_scase_btn_click=function(event) { navbar_collapse_hide(); $('#rename_scase_name')[0].value=$('#cats').data('scase'); $('#rename_scase_modal').modal('show'); } on_valid_rename_scase_modal=function (e) { e.preventDefault(); var name=$('#rename_scase_name')[0].value; if (name=='') { alert("Vous devez saisir le nouveau nom de la valise !"); return; } if ($('#cats').data('scase')!=name) { var nameshake=scases.byName(name); if (nameshake) { if (nameshake.removed) { alert("Une valise portant ce nom existe dans la corbeille !"); } else { alert("Une valise portant ce nom existe déjà !"); } return; } var scase=scases.renameSCase($('#cats').data('scase'),name); if (scase) { scases.save(); show_scase(scase); } else { alert('Une erreur est survenue en renomant la valise...'); } } $('#rename_scase_modal').modal('hide'); } on_show_rename_scase_modal=function () { $('#rename_scase_name').focus(); } on_close_rename_scase_modal=function () { $('#rename_scase_modal form')[0].reset(); } /*********************** * Copy scase **********************/ on_copy_scase_btn_click=function(event) { navbar_collapse_hide(); $('#copy_scase_modal').modal('show'); } on_valid_copy_scase_modal=function (e) { e.preventDefault(); var name=$('#copy_scase_name')[0].value; if (name=='') { alert("Vous devez saisir le nom de la nouvelle valise !"); return; } var nameshake=scases.byName(name); if (nameshake) { if (nameshake.removed) { alert("Une valise portant ce nom existe dans la corbeille !"); } else { alert("Une valise portant ce nom existe déjà !"); } return; } var scase=scases.copySCase($('#cats').data('scase'),name); if (scase) { scases.save(); show_scase(scase); } else { alert('Une erreur est survenue en copiant la valise...'); } $('#copy_scase_modal').modal('hide'); } on_show_copy_scase_modal=function () { $('#copy_scase_name').focus(); } on_close_copy_scase_modal=function () { $('#copy_scase_modal form')[0].reset(); } /*********************** * Reset scase **********************/ on_reset_scase_btn_click=function(event) { navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { myconfirm('Voulez-vous vraiment réinitialiser la valise '+$('#cats').data('scase')+' ?', function(data) { scases.resetSCase(scase.name); scases.save(); show_scase(scase); }); } } /*********************** * Delete scase **********************/ on_delete_scase_btn_click=function(event) { navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { myconfirm('Voulez-vous vraiment supprimer la valise '+$('#cats').data('scase')+' ?', function(data) { scases.removeSCase(scase.name); scases.save(); show_scases(); }); } } on_restore_scase_btn_click=function(event) { navbar_collapse_hide(); var scase=event.data.scase; if (scase) { myconfirm('Voulez-vous vraiment restaurer la valise '+scase.name+' ?', function(data) { scase.restore(); scases.save(); show_scases(); }); } } on_scase_trash_btn_click=function(event) { event.preventDefault(); navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { show_scase_trash(scase); } } /*********************** * Add cat **********************/ on_add_cat_btn_click=function(event) { navbar_collapse_hide(); $('#add_cat_modal').modal('show'); } on_valid_add_cat_modal=function (e) { e.preventDefault(); var name=$('#add_cat_name')[0].value; if (name=='') { alert("Vous devez saisir le nom de la catégorie !"); return; } var scase=scases.byName($('#cats').data('scase')); if (scase) { var nameshake=scase.cats.byName(name); if (nameshake) { if (nameshake.removed) { alert("Une catégorie portant ce nom existe dans la corbeille !"); } else { alert("Une catégorie portant ce nom existe déjà !"); } return; } var cat=scase.cats.newCat(name); if (cat) { scases.save(); show_scase(scase,cat.name); } } $('#add_cat_modal').modal('hide'); } on_show_add_cat_modal=function () { $('#add_cat_name').focus(); } on_close_add_cat_modal=function () { $('#add_cat_modal form')[0].reset(); } /*********************** * Rename cat **********************/ on_rename_cat_btn_click=function(event) { navbar_collapse_hide(); $('#rename_cat_modal').data('cat',event.data.cat.name); $('#rename_cat_name')[0].value=event.data.cat.name; $('#rename_cat_modal').modal('show'); } on_valid_rename_cat_modal=function (e) { e.preventDefault(); var name=$('#rename_cat_name')[0].value; if (name=='') { alert("Vous devez saisir le nouveau nom de la catégorie !"); return; } var scase=scases.byName($('#cats').data('scase')); if (scase) { if (scase.cats.byName(name)) { var namesake=scase.cats.byName(name); if (namesake.removed) { alert("Une catégorie de se nom existe dans la corbeille !"); } else { alert("Cette catégorie existe déjà !"); } return; } var cat=scase.cats.renameCat($('#rename_cat_modal').data('cat'),name); if (cat) { scases.save(); show_scase(scase,cat.name); } } $('#rename_cat_modal').modal('hide'); } on_show_rename_cat_modal=function () { $('#rename_cat_name').focus(); } on_close_rename_cat_modal=function () { $('#rename_cat_modal form')[0].reset(); } /*********************** * Delete cat **********************/ on_delete_cat_btn_click=function(event) { navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=event.data.cat.name; myconfirm('Voulez-vous vraiment supprimer la catégorie '+cat+' ?', function(data) { scase.cats.removeCat(cat); scases.save(); show_scase(scase); }); } } on_restore_cat_btn_click=function(event) { navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=event.data.cat.name; myconfirm('Voulez-vous vraiment restaure la catégorie '+cat+' ?', function(data) { scase.cats.restoreCat(cat); scases.save(); show_scase(scase); }); } } /************************ * Check/Uncheck thing ***********************/ on_li_click=function(event) { if (event.target.tagName!='LI') { return; } var li=$(this); if (li.hasClass('checked')) { li.removeClass('checked'); } else { li.addClass('checked'); } var ul=li.parent(); var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=scase.cats.byName(ul.data('cat')); if (cat) { var thing=cat.byLabel(li.data('label')); if (thing) { thing.setChecked(li.hasClass('checked')); scases.save(); } show_scase(scase,cat.name); } } } /*********************** * Add thing **********************/ on_li_add_click=function(event) { var li=$(this); var cat=li.parent().data('cat'); var modal=$('#add_thing_modal'); modal.data('cat',cat); modal.modal('show'); } on_valid_add_thing_modal=function (e) { e.preventDefault(); var modal=$('#add_thing_modal'); var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=scase.cats.byName(modal.data('cat')); if (cat) { var things=[]; var labels=[]; var error=false; var add_thing_nbs=$('input.add_thing_nb'); $('input.add_thing_label').each(function(idx,input) { var label=$(input).val(); if (label && label!='') { if (labels.indexOf(label)>-1) { alert("Deux élements ne peuvent porter le même nom !"); error=true; return; } if (cat.byLabel(label)) { alert("L'élément '"+label+"' existe déjà !"); error=true; return; } var nb=1; if (add_thing_nbs[idx]) { nb=parseInt($(add_thing_nbs[idx]).val()); if (!nb || nb==0) { nb=1; } } things.push({ 'label': label, 'nb': nb }); labels.push(label); } }); if (error) { return; } if (things.length==0) { alert("Vous devez saisir au moins un nom d'élément !"); return; } for (idx in things) { cat.newThing(things[idx]['label'], things[idx]['nb']); } scases.save(); show_scase(scase,cat.name); } } modal.modal('hide'); } on_show_add_thing_modal=function () { $('.add_thing_other').remove(); $('input.add_thing_label').val(''); $('input.add_thing_nb').val(''); $('input.add_thing_label').first().focus(); } on_close_add_thing_modal=function () { $('#add_thing_modal form')[0].reset(); } on_add_thing_label_focus=function(event) { if ($('input.add_thing_label').last()[0] == event.target) { var new_input_group=$('
'); var new_input_label=$(''); var new_input_nb=$(''); new_input_group.append(new_input_label); new_input_group.append(' '); new_input_group.append(new_input_nb); new_input_label.bind('focus', on_add_thing_label_focus); $(event.target).parent().after(new_input_group); } } /*********************** * Edit thing **********************/ on_edit_thing_btn_click=function(event) { navbar_collapse_hide(); $('#edit_thing_modal').data('cat',event.data.cat.name); $('#edit_thing_modal').data('thing',event.data.thing.label); $('#edit_thing_label').val(event.data.thing.label); $('#edit_thing_nb').val(event.data.thing.nb); $('#edit_thing_modal').modal('show'); } on_valid_edit_thing_modal=function (e) { e.preventDefault(); var label=$('#edit_thing_label').val(); if (label=='') { alert("Vous devez saisir le nouveau nom de l'élément !"); return; } var nb=parseInt($('#edit_thing_nb').val()); if (!nb || nb==0) { nb=1; } var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=scase.cats.byName($('#edit_thing_modal').data('cat')); if (cat) { if (label!=$('#edit_thing_modal').data('thing')) { var namesake=cat.byLabel(label); if (namesake) { if (namesake.removed) { alert("Un élément de ce nom existe dans la corbeille !"); } else { alert("Un élément de ce nom existe déjà !"); } return; } var thing=cat.renameThing($('#edit_thing_modal').data('thing'),label); } else { var thing=cat.byLabel(label); } if (thing) { thing.setNb(nb); scases.save(); show_scase(scase,cat.name); } } } $('#edit_thing_modal').modal('hide'); } on_show_edit_thing_modal=function () { $('#edit_thing_label').focus(); } on_close_edit_thing_modal=function () { $('#edit_thing_modal form')[0].reset(); } /*********************** * Delete thing **********************/ on_delete_thing_btn_click=function(event) { navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=scase.cats.byName(event.data.cat.name); if (cat) { var thing=event.data.thing.label; myconfirm("Voulez-vous vraiment supprimer l'élément "+thing+" ?", function(data) { cat.removeThing(thing); scases.save(); show_scase(scase,cat.name); }); } } } on_restore_thing_btn_click=function(event) { navbar_collapse_hide(); var scase=scases.byName($('#cats').data('scase')); if (scase) { var cat=scase.cats.byName(event.data.cat.name); if (cat) { var thing=event.data.thing.label; myconfirm("Voulez-vous vraiment restaurer l'élément "+thing+" ?", function(data) { cat.restoreThing(thing); scases.save(); show_scase(scase,cat.name); }); } } } /******************** * Show one scase *******************/ show_cat=function(cat,displayed) { var panel=$('
'); var panel_heading=$(''); var panel_title=$('

'+cat.name+'

'); panel_title.bind('click',on_title_click); var stats=cat.stats(); var tag=$(''); if (stats.things==stats.done) { tag.append($('')); } else { tag.append($(''+stats.done+' / '+stats.things+'')); } var delete_btn=$(''); delete_btn.bind('click',{'cat': cat},on_delete_cat_btn_click); tag.append(delete_btn); var rename_btn=$(''); rename_btn.bind('click',{'cat': cat},on_rename_cat_btn_click); tag.append(rename_btn); panel_title.append(tag); panel_heading.append(panel_title); panel.append(panel_heading); var panel_collapse=$('
'); if (displayed) { panel_collapse.addClass('in'); } var ul=$(''); for (idx in cat.things) { if (cat.things[idx].removed) { continue; } var li=$('
  • '+cat.things[idx].label+'
  • '); if (cat.things[idx].nb>1) { li.append(' ('+cat.things[idx].nb+')'); } if (cat.things[idx].checked) { li.addClass('checked'); } li.bind('click',on_li_click); var li_actions=$(''); var delete_el_btn=$(''); delete_el_btn.bind('click',{'cat': cat,'thing': cat.things[idx]},on_delete_thing_btn_click); li_actions.append(delete_el_btn); var edit_el_btn=$(''); edit_el_btn.bind('click',{'cat': cat,'thing': cat.things[idx]},on_edit_thing_btn_click); li_actions.append(edit_el_btn); li.append(li_actions); ul.append(li); } var li=$('
  • Ajouter un élément
  • '); li.bind('click',on_li_add_click); ul.append(li); panel_collapse.append(ul); panel.append(panel_collapse); $('#cats').append(panel); } show_scase=function(scase,display_cat) { clear_page('

    '+scase.name+'

    '); scase.cats.each(function(idx,cat) { if (cat.removed) { return; } show_cat(cat,(cat.name==display_cat)); }); show_menu('scase'); } on_back_to_scases_btn_click=function(e) { e.preventDefault(); navbar_collapse_hide(); show_scases(); } /******************** * Show scase trash *******************/ show_scase_trash=function(scase,display_cat) { clear_page('

    '+scase.name+' : Corbeille

    '); $('#content h3 #back_btn').bind('click', {'scase': scase}, function(event) { show_scase(event.data.scase); }); scase.cats.each(function(idx,cat) { show_cat_trash(cat,(cat.name==display_cat)); }); if ($('#cats .panel').length==0) { $('#content').append('

    La corbeille est vide.

    '); } show_menu('scase'); } show_cat_trash=function(cat,displayed) { var panel=$('
    '); var panel_heading=$(''); var panel_title=$('

    '+cat.name+'

    '); var tag=$(''); panel_title.append(tag); panel_heading.append(panel_title); panel.append(panel_heading); if (cat.removed) { var stats=cat.stats(); tag.append($(''+stats.things+'')); var restore_btn=$(''); restore_btn.bind('click',{'cat': cat},on_restore_cat_btn_click); tag.append(restore_btn); } else { var deleted_things=[]; for (idx in cat.things) { if (cat.things[idx].removed) { deleted_things.push(cat.things[idx]); } } if (deleted_things.length==0) { return true; } panel_title.bind('click',on_title_click); tag.append($(''+deleted_things.length+'')); var panel_collapse=$('
    '); if (displayed) { panel_collapse.addClass('in'); } var ul=$(''); for (idx in deleted_things) { var li=$('
  • '+deleted_things[idx].label+'
  • '); var li_actions=$(''); var restore_el_btn=$(''); restore_el_btn.bind('click',{'cat': cat,'thing': deleted_things[idx]},on_restore_thing_btn_click); li_actions.append(restore_el_btn); li.append(li_actions); ul.append(li); } panel_collapse.append(ul); panel.append(panel_collapse); } $('#cats').append(panel); } on_back_to_scase_btn_click=function(e) { e.preventDefault(); navbar_collapse_hide(); show_scase(e.data.scase); } /******************** * Show scases *******************/ show_scases=function() { clear_page('

    Vos valises

    '); scases.each(function(idx,scase) { if (scase.removed) { return; } var stats=scase.stats(); var tag=''; if (stats.things==stats.done) { tag+=''; } else { tag+=''+stats.done+' / '+stats.things+''; } tag+=''; var li=$('
  • '+scase.name+''+tag+'
  • '); li.bind('click',on_scase_click); $('#scases').append(li); }); show_menu('scases'); } on_scase_click=function(event) { var li=$(this); var scase=scases.byName(li.data('name')); show_scase(scase); } /******************** * Show scases trash *******************/ show_scases_trash=function() { clear_page('

    Corbeille

    '); $('#content h3 #back_btn').bind('click', function(event) { show_scases(); }); scases.each(function(idx,scase) { if (!scase.removed) { return; } var stats=scase.stats(); var tags=$(''); tags.append(''+stats.things+''); var restore_btn=$(''); restore_btn.bind('click',{'scase': scase},on_restore_scase_btn_click); tags.append(restore_btn); var li=$('
  • '+scase.name+'
  • '); li.append(tags); $('#scases').append(li); }); if ($('#scases li').length==0) { $('#content').append('

    Aucune valise dans la corbeille.

    '); } show_menu('scases'); } on_scases_trash_btn=function(e) { e.preventDefault(); navbar_collapse_hide(); show_scases_trash(); } clear_page=function(new_content) { if (new_content) { $('#content').html(new_content); } else { $('#content').html(''); } } /************************ * Show menu ***********************/ show_menu=function(menu) { $('.menu').css('display','none'); $('.menu-'+menu).css('display','block'); } /******************* * pleaseWaitDialog *******************/ pleaseWaitShow=function() { $('#please_wait_modal').modal('show'); } pleaseWaitHide=function() { $('#please_wait_modal').modal('hide'); } /**************** * Nav bars ****************/ navbar_collapse_hide=function() { if ($('#navbar-top-collapse').hasClass('in')) { $('#navbar-top-collapse').collapse('hide'); } } /************************** * Cache / Update *************************/ _checkForUpgrade=false; onUpdateReady=function() { if (_checkForUpgrade) { pleaseWaitHide(); } myconfirm( "Une nouvelle version de l'application est disponible. Voulez-vous lancer la mise à jour ?", onConfirmUpdate,null,{} ); } onConfirmUpdate=function() { window.applicationCache.swapCache(); location.reload(); } updateApp = function() { navbar_collapse_hide(); pleaseWaitShow(); _checkForUpgrade=true; window.applicationCache.update(); } onNoUpdate = function() { if (_checkForUpgrade) { pleaseWaitHide(); _checkForUpgrade=false; alert('Aucune mise à jour disponible'); } } /******************** * Clear local data ********************/ clear_local_data=function() { navbar_collapse_hide(); myconfirm('Etes-vous sûre de vouloir supprimer les données locales ?',on_confirm_clear_local_data); } on_confirm_clear_local_data=function(data) { delete localStorage.scases; location.reload(); } /******************************* * Import/Export local data *******************************/ export_local_data=function() { navbar_collapse_hide(); $('#export_local_data').attr('href','data:application/json;base64,' + btoa(JSON.stringify(scases.export()))); } import_local_data=function() { navbar_collapse_hide(); var input=$(''); input.css('display', 'none'); input.bind('change',{'input': input},function(e) { pleaseWaitShow(); var input=e.data.input; var file=input.prop('files')[0]; if (file) { var reader = new FileReader(); $(reader).bind('load',function(e) { if ($.type(e.target.result)=='string') { if (e.target.result.startsWith('data:application/json;base64,')) { try { json_data=atob(e.target.result.replace('data:application/json;base64,','')); data=JSON.parse(json_data); pleaseWaitHide(); myconfirm('Etes-vous sûre de vouloir écraser vos données locales par celle issues de ce fichier ?',function() { scases.save(); var backData=localStorage.scases; localStorage.scases=json_data; scases=new SCaseList(); scases.loadFromLocalStorage(backData); show_scases(); }); } catch (e) { alert('Impossible de décodé le fichier.'); pleaseWaitHide(); } } else { alert('Fichier invalide.'); pleaseWaitHide(); } } }); reader.readAsDataURL(file); } }); $('body').append(input); input[0].click(); } /********************* * Activate *********************/ $( document ).ready( function() { pleaseWaitShow(); if(typeof(localStorage)!=="undefined"){ scases=new SCaseList(); scases.loadFromLocalStorage(); show_scases(); } else { alert('Local storage not supported !'); pleaseWaitHide(); return; } $('#clear_local_data').bind('click',clear_local_data); $('#import_local_data').bind('click',import_local_data); $('#export_local_data').bind('click',export_local_data); $('#add_scase_btn').bind('click',on_add_scase_btn_click); $('#add_scase_submit').bind('click',on_valid_add_scase_modal); $("#add_scase_modal").on('shown.bs.modal',on_show_add_scase_modal); $("#add_scase_modal").on('hidden.bs.modal',on_close_add_scase_modal); $("#add_scase_modal form").bind('submit',on_valid_add_scase_modal); $('#scases_trash_btn').bind('click',on_scases_trash_btn); $('#rename_scase_btn').bind('click',on_rename_scase_btn_click); $('#rename_scase_submit').bind('click',on_valid_rename_scase_modal); $("#rename_scase_modal").on('shown.bs.modal',on_show_rename_scase_modal); $("#rename_scase_modal").on('hidden.bs.modal',on_close_rename_scase_modal); $("#rename_scase_modal form").bind('submit',on_valid_rename_scase_modal); $('#copy_scase_btn').bind('click',on_copy_scase_btn_click); $('#copy_scase_submit').bind('click',on_valid_copy_scase_modal); $("#copy_scase_modal").on('shown.bs.modal',on_show_copy_scase_modal); $("#copy_scase_modal").on('hidden.bs.modal',on_close_copy_scase_modal); $("#copy_scase_modal form").bind('submit',on_valid_copy_scase_modal); $('#reset_scase_btn').bind('click',on_reset_scase_btn_click); $('#delete_scase_btn').bind('click',on_delete_scase_btn_click); $('#scase_trash_btn').bind('click',on_scase_trash_btn_click); $('#add_cat_btn').bind('click',on_add_cat_btn_click); $('#add_cat_submit').bind('click',on_valid_add_cat_modal); $("#add_cat_modal").on('shown.bs.modal',on_show_add_cat_modal); $("#add_cat_modal").on('hidden.bs.modal',on_close_add_cat_modal); $("#add_cat_modal form").bind('submit',on_valid_add_cat_modal); $('#rename_cat_submit').bind('click',on_valid_rename_cat_modal); $("#rename_cat_modal").on('shown.bs.modal',on_show_rename_cat_modal); $("#rename_cat_modal").on('hidden.bs.modal',on_close_rename_cat_modal); $("#rename_cat_modal form").bind('submit',on_valid_rename_cat_modal); $('#back_to_scases').bind('click',on_back_to_scases_btn_click); $('input.add_thing_label').bind('focus',on_add_thing_label_focus); $('#add_thing_submit').bind('click',on_valid_add_thing_modal); $("#add_thing_modal").on('shown.bs.modal',on_show_add_thing_modal); $("#add_thing_modal").on('hidden.bs.modal',on_close_add_thing_modal); $("#add_thing_modal form").bind('submit',on_valid_add_thing_modal); $('#edit_thing_submit').bind('click',on_valid_edit_thing_modal); $("#edit_thing_modal").on('shown.bs.modal',on_show_edit_thing_modal); $("#edit_thing_modal").on('hidden.bs.modal',on_close_edit_thing_modal); $("#edit_thing_modal form").bind('submit',on_valid_edit_thing_modal); $('#app-name').bind('click', show_scases); if (window.applicationCache.status==window.applicationCache.UNCACHED) { $('#update_app').parent().remove(); } else { $('#update_app').bind('click',updateApp); window.applicationCache.addEventListener('updateready', onUpdateReady); window.applicationCache.addEventListener('noupdate', onNoUpdate); if(window.applicationCache.status === window.applicationCache.UPDATEREADY) { onUpdateReady(); } } pleaseWaitHide(); });