X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Flsl.js;h=de4104e5bf8b4e723e31cee1f22d0935eafd2903;hb=52688859f55cc3ee271f8e10583f354e1f6eabd8;hp=bd767d3ce6a25b666e17d982ce7bdbda32844dbb;hpb=502a8eff1497c00691d1d7da92d43e6497113696;p=lsl.git diff --git a/public/javascripts/lsl.js b/public/javascripts/lsl.js index bd767d3..de4104e 100644 --- a/public/javascripts/lsl.js +++ b/public/javascripts/lsl.js @@ -1,12 +1,19 @@ "use strict"; (function(){ +var uri_base, environment, devel_env; // filled on page load from an HTML attribute +var start_time = Date.now(); + var ui_icon_class_re = new RegExp('\\bui-icon-\\S+\\b'); var uri_id_re = new RegExp('/(\\d+)$'); -var uri_base; // filled on page load from an HTML attribute var lists_version = -1; var lists = []; var selected_list; +function debug(...args) { + if (devel_env) + console.debug.apply(console, args); +} + function uri_id(uri) { var m = uri.match(uri_id_re); return m ? m[1] : null; @@ -19,7 +26,8 @@ function add_list_item(data) { item.append($('').text(data.description || '')); item.append($('').text('…')); - $('#list-items').append(item).addClass('have-list-items'); + $('#list-items').append(item); + $('#list-contents').addClass('have-list-items'); } function got_lists_version(new_version) { if (new_version != lists_version) @@ -39,7 +47,8 @@ function load_list_items(uri, target) { // keep track of the last existing item, and append new one // after it, prepending if there is no last existing item // the newly prepended/inserted item becomes the last existing - var item_list = $('#list-items').empty().removeClass('have-list-items'); + $('#list-contents').removeClass('have-list-items'); + var item_list = $('#list-items').empty(); $.each(item_data.items, (i,item) => { add_list_item(item); @@ -71,8 +80,99 @@ function select_list(new_selected_list) { selected_list = new_selected_list; } +function edit_list(li) { + li.addClass('editing'); + + var d = $('
') + .append( + $('
') + .append( + $('').text('List name'), + $('').val(li.data('lsl-name')) + ) + ); + + d.dialog({ + autoOpen: true, + modal: true, + title: 'Edit list', + close: ()=>{ + li.removeClass('editing'); + }, + width: 'max-content', + buttons: [ + { + class: 'btn-delete', + icon: 'ui-icon-trash', + text: 'Delete', + click: () => { + delete_list(li, d); + }, + }, + { + text: 'Cancel', + click: ()=>{ d.dialog('destroy'); }, + }, + { + icon: 'ui-icon-disk', + text: 'OK', + click: () => { + save_list(li, d); + }, + }, + ], + }); +} +function delete_list(li, dlg) { + var lists_ver = lists_version; + $.ajax( li.data('lsl-uri'), + { type: 'DELETE' } + ) + .done((d)=>{ + lists_version = lists_ver + 1; + if (li.hasClass('selected')) { + var new_selected = li.next(); + if (new_selected.length) { + select_list(new_selected) + } + else { + new_selected = li.prev(); + if (new_selected.length) { + select_list(new_selected); + } + else { + $('#page').removeClass('have-lists'); + } + } + } + + li.remove(); + dlg.dialog('destroy'); + got_lists_version(d.lists_version); + }); +} function load_lists() { $.get(uri_base + '/api/v1/list') + .always(()=>{ + var splash = $('#splash'); + if (splash.length) { + var dur = splash.css('transition-duration'); + if (dur && dur.endsWith('s')) { + dur = 1000 * parseFloat(dur.substring(0, dur.length-1)); + } + else + dur = 1000; + + var now = Date.now(); + window.setTimeout(() => { + splash.addClass('done'); + debug('scheduling splash removal in '+dur+'ms'); + window.setTimeout(()=>{ splash.remove(); }, dur); + }, + Math.max(0, 500 - (now - start_time)) + ); + } + }) .done(data => { lists_version = data.lists_version; @@ -94,7 +194,14 @@ function load_lists() { .data('lsl-uri', list.uri) .data('lsl-version', list.version) .data('lsl-name', list.name) - .text(list.name); + .append( + $('') + .text(list.name) + ) + .append( + $('') + .append('') + ); lists.append(list_item); } }); @@ -169,6 +276,9 @@ function handle_list_item_state_changed(ev) { } $(function(){ uri_base = $('#page').attr('lsl-uri-base'); + environment = $('#page').attr('lsl-environment'); + devel_env = environment == 'development'; + $(document).ajaxStart(function(){ $(document).addClass('blocked'); window.setTimeout( @@ -201,9 +311,14 @@ $(function(){ return true; }); - $('ul#lists').on('click', 'li', ev=>{ - select_list($(ev.target)); - }); + $('ul#lists') + .on('click', 'li', ev=>{ + select_list($(ev.target).closest('li')); + }) + .on('click', 'li > span.list-edit-trigger', ev => { + edit_list($(ev.target).closest('li')); + return false; + }); $('#new-list-item button').on('click', handle_new_list_item_submission); $('#new-list-item input').on('keypress', ev => { if (13 == ev.keyCode) {