mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-04 03:45:32 -04:00
- option to resume/start from beginning at the title view
- option to toggle read/unread status at the title view - move all embeded JS to public/
This commit is contained in:
parent
08a1052ca4
commit
93e6d7cae6
25
public/js/admin.js
Normal file
25
public/js/admin.js
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
49
public/js/title.js
Normal file
49
public/js/title.js
Normal file
@ -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 = '<div class="uk-alert-' + level + '" uk-alert><a class="uk-alert-close" uk-close></a><p>' + text + '</p></div>';
|
||||||
|
$('#alert').append(html);
|
||||||
|
}
|
||||||
|
function hideAlert() {
|
||||||
|
$('#alert').empty();
|
||||||
|
}
|
16
public/js/user-edit.js
Normal file
16
public/js/user-edit.js
Normal file
@ -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 = '<div class="uk-alert-' + level + '" uk-alert><a class="uk-alert-close" uk-close></a><p>' + text + '</p></div>';
|
||||||
|
$('#alert').append(html);
|
||||||
|
}
|
||||||
|
function hideAlert() {
|
||||||
|
$('#alert').empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error) alert('danger', error);
|
||||||
|
});
|
19
public/js/user.js
Normal file
19
public/js/user.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
function alert(level, text) {
|
||||||
|
hideAlert();
|
||||||
|
var html = '<div class="uk-alert-' + level + '" uk-alert><a class="uk-alert-close" uk-close></a><p>' + text + '</p></div>';
|
||||||
|
$('#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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -287,6 +287,25 @@ class Server
|
|||||||
end
|
end
|
||||||
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
|
add_handler AuthHandler.new @storage
|
||||||
{% if flag?(:release) %}
|
{% if flag?(:release) %}
|
||||||
# when building for relase, embed the static files in binary
|
# when building for relase, embed the static files in binary
|
||||||
|
@ -14,31 +14,5 @@
|
|||||||
<a class="uk-button uk-button-danger" href="/logout">Log Out</a>
|
<a class="uk-button uk-button-danger" href="/logout">Log Out</a>
|
||||||
|
|
||||||
<% content_for "script" do %>
|
<% content_for "script" do %>
|
||||||
<script>
|
<script src="/js/admin.js"></script>
|
||||||
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)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
|
<div id="alert"></div>
|
||||||
<h2 class=uk-title><%= title.title %></h2>
|
<h2 class=uk-title><%= title.title %></h2>
|
||||||
<p class="uk-text-meta"><%= title.entries.size %> entries found</p>
|
<p class="uk-text-meta"><%= title.entries.size %> entries found</p>
|
||||||
<div class="uk-child-width-1-4@m uk-child-width-1-2" uk-grid>
|
<div class="uk-child-width-1-4@m uk-child-width-1-2" uk-grid>
|
||||||
<%- title.entries.each_with_index do |e, i| -%>
|
<%- title.entries.each_with_index do |e, i| -%>
|
||||||
<div>
|
<div>
|
||||||
<a class="acard" href="/reader/<%= title.title %>/<%= e.title %>">
|
<a class="acard">
|
||||||
<div class="uk-card uk-card-default">
|
<div class="uk-card uk-card-default" onclick="showModal('<%= e.title %>', '<%= e.zip_path %>', '<%= e.pages %>', <%= (percentage[i] * 100).round(1) %>, '<%= title.title %>', '<%= e.title %>')">
|
||||||
<div class="uk-card-media-top">
|
<div class="uk-card-media-top">
|
||||||
<img src="<%= e.cover_url %>" alt="">
|
<img src="<%= e.cover_url %>" alt="">
|
||||||
</div>
|
</div>
|
||||||
@ -17,3 +18,30 @@
|
|||||||
</div>
|
</div>
|
||||||
<%- end -%>
|
<%- end -%>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="modal" class="uk-flex-top" uk-modal>
|
||||||
|
<div class="uk-modal-dialog uk-margin-auto-vertical">
|
||||||
|
<button class="uk-modal-close-default" type="button" uk-close></button>
|
||||||
|
<div class="uk-modal-header">
|
||||||
|
<h3 class="uk-modal-title" id="modal-title"></h3>
|
||||||
|
<p class="uk-text-meta" id="path-text" style="margin-bottom:0"></p>
|
||||||
|
<p class="uk-text-meta" id="pages-text" style="margin-top:0"></p>
|
||||||
|
</div>
|
||||||
|
<div class="uk-modal-body">
|
||||||
|
<p>Read</p>
|
||||||
|
<p uk-margin>
|
||||||
|
<a id="beginning-btn" class="uk-button uk-button-default">From beginning</a>
|
||||||
|
<a id="continue-btn" class="uk-button uk-button-primary"></a>
|
||||||
|
</p>
|
||||||
|
<p>Progress</p>
|
||||||
|
<p uk-margin>
|
||||||
|
<button id="read-btn" class="uk-button uk-button-default">Mark as read (100%)</button>
|
||||||
|
<button id="unread-btn" class="uk-button uk-button-default">Mark as unread (0%)</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% content_for "script" do %>
|
||||||
|
<script src="/js/title.js"></script>
|
||||||
|
<% end %>
|
||||||
|
@ -40,28 +40,16 @@
|
|||||||
<input type="submit" value="Save" class="uk-button uk-button-primary">
|
<input type="submit" value="Save" class="uk-button uk-button-primary">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
<% content_for "script" do %>
|
<% content_for "script" do %>
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
var username;
|
||||||
var target = '/admin/user/edit';
|
var error;
|
||||||
<%- if !new_user -%>
|
<%- if !new_user -%>
|
||||||
target += '/<%= username %>';
|
username = '/<%= username %>';
|
||||||
<%- end -%>
|
<%- end -%>
|
||||||
$('form').attr('action', target);
|
|
||||||
|
|
||||||
function alert(level, text) {
|
|
||||||
hideAlert();
|
|
||||||
var html = '<div class="uk-alert-' + level + '" uk-alert><a class="uk-alert-close" uk-close></a><p>' + text + '</p></div>';
|
|
||||||
$('#alert').append(html);
|
|
||||||
}
|
|
||||||
function hideAlert() {
|
|
||||||
$('#alert').empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
<%- if error -%>
|
<%- if error -%>
|
||||||
alert('danger', '<%= error %>');
|
error = '<%= error %>';
|
||||||
<%- end -%>
|
<%- end -%>
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
<script src="/js/user-edit.js"></script>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -27,25 +27,5 @@
|
|||||||
|
|
||||||
|
|
||||||
<% content_for "script" do %>
|
<% content_for "script" do %>
|
||||||
<script>
|
<script src="/js/user.js"></script>
|
||||||
function alert(level, text) {
|
|
||||||
hideAlert();
|
|
||||||
var html = '<div class="uk-alert-' + level + '" uk-alert><a class="uk-alert-close" uk-close></a><p>' + text + '</p></div>';
|
|
||||||
$('#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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user