diff --git a/public/css/mango.css b/public/css/mango.css index 8b9df2a..08a9723 100644 --- a/public/css/mango.css +++ b/public/css/mango.css @@ -56,3 +56,6 @@ td > .uk-dropdown { white-space: pre-line; } +.title-rename > .uk-inline { + width: 100%; +} diff --git a/public/js/title.js b/public/js/title.js index a719fb7..4c9f748 100644 --- a/public/js/title.js +++ b/public/js/title.js @@ -15,7 +15,10 @@ function showModal(encodedPath, pages, percentage, encodedeTitle, encodedEntryTi if (percentage === 100) { $('#read-btn').attr('hidden', ''); } - $('#modal-title').text(entry); + $('#modal-title').find('span').text(entry); + $('#modal-title').next().attr('data-id', titleID); + $('#modal-title').next().attr('data-entry-id', entryID); + $('#modal-title').next().find('.title-rename-field').val(entry); $('#path-text').text(zipPath); $('#pages-text').text(pages + ' pages'); @@ -43,3 +46,60 @@ function updateProgress(titleID, entryID, page) { } }); } + +const rename = ele => { + const h2 = $(ele).parent(); + + $(h2).attr('hidden', true); + $(h2).next().removeAttr('hidden'); +}; + +const renameSubmit = ele => { + const group = $(ele).closest('.title-rename'); + const id = $(group).attr('data-id'); + const eid = $(group).attr('data-entry-id'); + const name = $(ele).next().val(); + + console.log(name); + + $(group).attr('hidden', true); + $(group).prev().removeAttr('hidden'); + + if (name.length === 0) { + alert('danger', 'The display name should not be empty'); + return; + } + + $(group).prev().find('span').text(name); + + const query = $.param({ entry: eid }); + let url = `/api/admin/display_name/${id}/${name}`; + if (eid) + url += `?${query}`; + + $.ajax({ + type: 'POST', + url: url, + contentType: "application/json", + dataType: 'json' + }) + .done(data => { + console.log(data); + if (data.error) { + alert('danger', `Failed to update display name. Error: ${data.error}`); + return; + } + location.reload(); + }) + .fail((jqXHR, status) => { + alert('danger', `Failed to update display name. Error: [${jqXHR.status}] ${jqXHR.statusText}`); + }); +}; + +$(() => { + $('.uk-input.title-rename-field').keyup(event => { + if (event.keyCode === 13) { + renameSubmit($(event.currentTarget).prev()); + } + }); +}); diff --git a/src/library.cr b/src/library.cr index 1eab5f4..6b3e068 100644 --- a/src/library.cr +++ b/src/library.cr @@ -51,6 +51,14 @@ class Entry end end + def display_name + @book.display_name @title + end + + def encoded_display_name + URI.encode display_name + end + def read_page(page_num) Zip::File.open @zip_path do |file| page = file.entries @@ -191,6 +199,10 @@ class Title dn.empty? ? @title : dn end + def encoded_display_name + URI.encode display_name + end + def display_name(entry_name) info = TitleInfo.new @dir dn = info.entry_display_name[entry_name]? diff --git a/src/routes/api.cr b/src/routes/api.cr index 387320d..c0423cb 100644 --- a/src/routes/api.cr +++ b/src/routes/api.cr @@ -94,13 +94,13 @@ class APIRouter < Router begin title = (@context.library.get_title env.params.url["title"]) .not_nil! - entry = title.get_entry env.params.query["entry"]? name = env.params.url["name"] - + entry = env.params.query["entry"]? if entry.nil? title.set_display_name name else - title.set_display_name entry.title, name + eobj = title.get_entry entry + title.set_display_name eobj.not_nil!.title, name end rescue e @context.error e diff --git a/src/views/index.ecr b/src/views/index.ecr index b7a9727..543394f 100644 --- a/src/views/index.ecr +++ b/src/views/index.ecr @@ -36,7 +36,7 @@ <%- if t.entries.size > 0 -%>
<%= t.size %> entries
diff --git a/src/views/title.ecr b/src/views/title.ecr index ef502df..a2c25e9 100644 --- a/src/views/title.ecr +++ b/src/views/title.ecr @@ -1,10 +1,18 @@ -<%= t.size %> entries