diff --git a/public/js/admin.js b/public/js/admin.js new file mode 100644 index 0000000..c2c3012 --- /dev/null +++ b/public/js/admin.js @@ -0,0 +1,25 @@ +var scanning = false; +function scan() { + scanning = true; + $('#scan-status > div').removeAttr('hidden'); + $('#scan-status > span').attr('hidden', ''); + var color = $('#scan').css('color'); + $('#scan').css('color', 'gray'); + $.post('/api/admin/scan', function (data) { + var ms = data.milliseconds; + var titles = data.titles; + $('#scan-status > span').text('Scanned ' + titles + ' titles in ' + ms + 'ms'); + $('#scan-status > span').removeAttr('hidden'); + $('#scan').css('color', color); + $('#scan-status > div').attr('hidden', ''); + scanning = false; + }); +} +$(function() { + $('li').click(function() { + url = $(this).attr('data-url'); + if (url) { + $(location).attr('href', url); + } + }); +}); diff --git a/public/js/title.js b/public/js/title.js new file mode 100644 index 0000000..077ee13 --- /dev/null +++ b/public/js/title.js @@ -0,0 +1,49 @@ +function showModal(title, zipPath, pages, percentage, title, entry) { + $('#modal button, #modal a').each(function(){ + $(this).removeAttr('hidden'); + }); + if (percentage === 0) { + $('#continue-btn').attr('hidden', ''); + $('#unread-btn').attr('hidden', ''); + } + else { + $('#continue-btn').text('Continue from ' + percentage + '%'); + } + if (percentage === 100) { + $('#read-btn').attr('hidden', ''); + } + $('#modal-title').text(title); + $('#path-text').text(zipPath); + $('#pages-text').text(pages + ' pages'); + + $('#beginning-btn').attr('href', '/reader/' + title + '/' + entry + '/1'); + $('#continue-btn').attr('href', '/reader/' + title + '/' + entry); + + $('#read-btn').click(function(){ + updateProgress(title, entry, pages); + }); + $('#unread-btn').click(function(){ + updateProgress(title, entry, 0); + }); + + UIkit.modal($('#modal')).show(); +} +function updateProgress(title, entry, page) { + $.post('/api/progress/' + title + '/' + entry + '/' + page, function(data) { + if (data.success) { + location.reload(); + } + else { + error = data.error; + alert('danger', error); + } + }); +} +function alert(level, text) { + hideAlert(); + var html = '
'; + $('#alert').append(html); +} +function hideAlert() { + $('#alert').empty(); +} diff --git a/public/js/user-edit.js b/public/js/user-edit.js new file mode 100644 index 0000000..12e4aa4 --- /dev/null +++ b/public/js/user-edit.js @@ -0,0 +1,16 @@ +$(function(){ + var target = '/admin/user/edit'; + if (username) target += username; + $('form').attr('action', target); + + function alert(level, text) { + hideAlert(); + var html = ''; + $('#alert').append(html); + } + function hideAlert() { + $('#alert').empty(); + } + + if (error) alert('danger', error); +}); diff --git a/public/js/user.js b/public/js/user.js new file mode 100644 index 0000000..9d6c111 --- /dev/null +++ b/public/js/user.js @@ -0,0 +1,19 @@ +function alert(level, text) { + hideAlert(); + var html = ''; + $('#alert').append(html); +} +function hideAlert() { + $('#alert').empty(); +} +function remove(username) { + $.post('/api/admin/user/delete/' + username, function(data) { + if (data.success) { + location.reload(); + } + else { + error = data.error; + alert('danger', error); + } + }); +} diff --git a/src/server.cr b/src/server.cr index 6c83bb6..3374c8d 100644 --- a/src/server.cr +++ b/src/server.cr @@ -287,6 +287,25 @@ class Server end end + post "/api/progress/:title/:entry/:page" do |env| + begin + username = get_username env + title = (@library.get_title env.params.url["title"]).not_nil! + entry = (title.get_entry env.params.url["entry"]).not_nil! + page = env.params.url["page"].to_i + + raise "incorrect page value" if page < 0 || page > entry.pages + title.save_progress username, entry.title, page + rescue e + send_json env, { + "success" => false, + "error" => e.message + }.to_json + else + send_json env, {"success" => true}.to_json + end + end + add_handler AuthHandler.new @storage {% if flag?(:release) %} # when building for relase, embed the static files in binary diff --git a/src/views/admin.ecr b/src/views/admin.ecr index ac2de52..6e0e089 100644 --- a/src/views/admin.ecr +++ b/src/views/admin.ecr @@ -14,31 +14,5 @@ Log Out <% content_for "script" do %> - + <% end %> diff --git a/src/views/title.ecr b/src/views/title.ecr index 878aad6..5d23176 100644 --- a/src/views/title.ecr +++ b/src/views/title.ecr @@ -1,19 +1,47 @@ +