mirror of
https://github.com/flynx/PortableMag.git
synced 2025-10-29 11:10:08 +00:00
almost finished bookmark support (only next/prev bookmarks left to do)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
a022c11743
commit
c715262f0d
9
TODO.otl
9
TODO.otl
@ -6,6 +6,15 @@
|
|||||||
[_] BUG: no drag threshold on excludedElements (TouchSwipe)
|
[_] BUG: no drag threshold on excludedElements (TouchSwipe)
|
||||||
| stalled...
|
| stalled...
|
||||||
[_] 80% general todo
|
[_] 80% general todo
|
||||||
|
[_] 75% bookmarks
|
||||||
|
[_] add next/prev bookmark actions
|
||||||
|
[_] bookmark indicators in page view
|
||||||
|
[X] #bookmark anchor
|
||||||
|
[X] bookmark indicators in navigator
|
||||||
|
[X] bookmark indicators in thumbnails
|
||||||
|
[X] bookmark persistence
|
||||||
|
[X] set bookmark from keyboard...
|
||||||
|
[X] set bookmark touch control
|
||||||
[_] magazine loader and data format...
|
[_] magazine loader and data format...
|
||||||
| this is simple, just use a restyled magazine viewer...
|
| this is simple, just use a restyled magazine viewer...
|
||||||
[_] 0% populate an example issue
|
[_] 0% populate an example issue
|
||||||
|
|||||||
@ -88,6 +88,7 @@ $(document).ready(function(){
|
|||||||
$('.button.cover').swipe({click: goToMagazineCover})
|
$('.button.cover').swipe({click: goToMagazineCover})
|
||||||
$('.button.next-article').swipe({click: nextArticle})
|
$('.button.next-article').swipe({click: nextArticle})
|
||||||
$('.button.prev-article').swipe({click: prevArticle})
|
$('.button.prev-article').swipe({click: prevArticle})
|
||||||
|
$('.button.bookmark').swipe({click: function(){toggleBookmark()}})
|
||||||
|
|
||||||
loadState()
|
loadState()
|
||||||
setupNavigator()
|
setupNavigator()
|
||||||
@ -123,6 +124,7 @@ $(document).ready(function(){
|
|||||||
<div class="button cover">Issue Cover</div>
|
<div class="button cover">Issue Cover</div>
|
||||||
<div class="button prev-article">Prev Article</div>
|
<div class="button prev-article">Prev Article</div>
|
||||||
<div class="button next-article">Next Article</div>
|
<div class="button next-article">Next Article</div>
|
||||||
|
<div class="button bookmark">Bookmark</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom-toolbar">
|
<div class="bottom-toolbar">
|
||||||
<!-- this is just an example-->
|
<!-- this is just an example-->
|
||||||
@ -197,6 +199,7 @@ $(document).ready(function(){
|
|||||||
<span name="example-layer" class="hidden">
|
<span name="example-layer" class="hidden">
|
||||||
<a href="#hideLayers">Hide all layers</a><br>
|
<a href="#hideLayers">Hide all layers</a><br>
|
||||||
</span>
|
</span>
|
||||||
|
<a href="#bookmark">Toggle bookmark</a><br>
|
||||||
|
|
||||||
<h3>Relative special anchors</h3>
|
<h3>Relative special anchors</h3>
|
||||||
<p>These will get replaced by corresponding page numbers in the URL</p>
|
<p>These will get replaced by corresponding page numbers in the URL</p>
|
||||||
|
|||||||
@ -74,6 +74,8 @@ var keybindings = {
|
|||||||
32: 39, // Space
|
32: 39, // Space
|
||||||
190: 39, // >
|
190: 39, // >
|
||||||
|
|
||||||
|
66: toggleBookmark, // B
|
||||||
|
|
||||||
// combined navigation with actions..
|
// combined navigation with actions..
|
||||||
38: function(){togglePageView()}, // Up
|
38: function(){togglePageView()}, // Up
|
||||||
40: function(){togglePageView()}, // Down
|
40: function(){togglePageView()}, // Down
|
||||||
|
|||||||
25
magazine.css
25
magazine.css
@ -65,6 +65,28 @@ body {
|
|||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page .bookmark {
|
||||||
|
position: absolute;
|
||||||
|
font-size: 0px;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
|
||||||
|
background: red;
|
||||||
|
|
||||||
|
/* XXX make this relative... */
|
||||||
|
margin-top: -50px;
|
||||||
|
margin-left: 750px;
|
||||||
|
|
||||||
|
z-index: 9999;
|
||||||
|
opacity: 0,5;
|
||||||
|
|
||||||
|
-webkit-transform: rotate(45deg);
|
||||||
|
-moz-transform: rotate(45deg);
|
||||||
|
-o-transform: rotate(45deg);
|
||||||
|
-ms-transform: rotate(45deg);
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
|
||||||
.page-view-mode .page {
|
.page-view-mode .page {
|
||||||
|
|
||||||
/* XXX change to relative units... */
|
/* XXX change to relative units... */
|
||||||
@ -74,6 +96,9 @@ body {
|
|||||||
.page-view-mode .page .content {
|
.page-view-mode .page .content {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page-view-mode .page .bookmark {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************************** general layout ***/
|
/************************************************** general layout ***/
|
||||||
|
|||||||
84
magazine.js
84
magazine.js
@ -168,16 +168,20 @@ function swipeHandler(evt, phase, direction, distance, duration, fingers){
|
|||||||
// prev page...
|
// prev page...
|
||||||
if(direction == 'right'){
|
if(direction == 'right'){
|
||||||
// two+ fingers moves to closest article...
|
// two+ fingers moves to closest article...
|
||||||
if(fingers >= 2){
|
if(fingers == 2){
|
||||||
prevArticle()
|
prevArticle()
|
||||||
|
} else if(fingers >= 3){
|
||||||
|
prevBookmark()
|
||||||
} else {
|
} else {
|
||||||
setCurrentPage(Math.max(n-p, 0))
|
setCurrentPage(Math.max(n-p, 0))
|
||||||
}
|
}
|
||||||
// next page...
|
// next page...
|
||||||
} else if(direction == 'left'){
|
} else if(direction == 'left'){
|
||||||
// two+ fingers moves to closest article...
|
// two+ fingers moves to closest article...
|
||||||
if(fingers >= 2){
|
if(fingers == 2){
|
||||||
nextArticle()
|
nextArticle()
|
||||||
|
} else if(fingers >= 3){
|
||||||
|
nextBookmark()
|
||||||
} else {
|
} else {
|
||||||
setCurrentPage(Math.min(n+p, pages.length-1))
|
setCurrentPage(Math.min(n+p, pages.length-1))
|
||||||
}
|
}
|
||||||
@ -457,6 +461,18 @@ function loadURLState(){
|
|||||||
prevArticle()
|
prevArticle()
|
||||||
return getPageNumber()
|
return getPageNumber()
|
||||||
|
|
||||||
|
} else if(anchor == 'nextBookmark') {
|
||||||
|
nextBookmark()
|
||||||
|
return getPageNumber()
|
||||||
|
|
||||||
|
} else if(anchor == 'prevBookmark') {
|
||||||
|
prevBookmark()
|
||||||
|
return getPageNumber()
|
||||||
|
|
||||||
|
} else if(anchor == 'bookmark'){
|
||||||
|
toggleBookmark()
|
||||||
|
return getPageNumber()
|
||||||
|
|
||||||
// hide all visible layers on current page...
|
// hide all visible layers on current page...
|
||||||
} else if(anchor == 'hideLayers') {
|
} else if(anchor == 'hideLayers') {
|
||||||
$('.current.page .shown')
|
$('.current.page .shown')
|
||||||
@ -514,7 +530,7 @@ function loadStorageState(){
|
|||||||
}
|
}
|
||||||
function saveStorageState(){
|
function saveStorageState(){
|
||||||
$.jStorage.set('current_page', getPageNumber())
|
$.jStorage.set('current_page', getPageNumber())
|
||||||
$.jStorage.set('bookmarks', getBookmarkList())
|
$.jStorage.set('bookmarks', buildBookmarkList())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -659,23 +675,63 @@ function makeBookmarkIndicator(n){
|
|||||||
setCurrentPage(n)
|
setCurrentPage(n)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearBookmarkIndicators(){
|
||||||
|
$('.navigator .bar .bookmark').remove()
|
||||||
|
}
|
||||||
|
function removeBookmarkIndicator(n){
|
||||||
|
$('.navigator .bar .bookmark[page="'+n+'"]').remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX move to actions...
|
||||||
|
function loadBookmarks(lst){
|
||||||
|
clearBookmarks()
|
||||||
|
$(lst).each(function(i, e){toggleBookmark(e)})
|
||||||
|
}
|
||||||
|
function clearBookmarks(){
|
||||||
|
$('.magazine .page .bookmark').remove()
|
||||||
|
clearBookmarkIndicators()
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildBookmarkList(){
|
||||||
|
var res = []
|
||||||
|
$('.magazine .page .bookmark').each(function(_, e){
|
||||||
|
res.push(getPageNumber($(e).parents('.page')))
|
||||||
|
})
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleBookmark(n){
|
||||||
|
if(n == null){
|
||||||
|
n = getPageNumber()
|
||||||
|
} else if(typeof(n) != typeof(1)){
|
||||||
|
n = getPageNumber(n)
|
||||||
|
}
|
||||||
|
var res
|
||||||
|
var cur = getPageAt(n)
|
||||||
|
|
||||||
|
if(cur.children('.bookmark').length == 0){
|
||||||
|
var res = $('<div/>')
|
||||||
|
.prependTo(cur)
|
||||||
|
.addClass('bookmark')
|
||||||
|
.click(function(){
|
||||||
|
toggleBookmark(n)
|
||||||
|
})
|
||||||
|
|
||||||
|
makeBookmarkIndicator(n)
|
||||||
|
} else {
|
||||||
|
cur.children('.bookmark').remove()
|
||||||
|
removeBookmarkIndicator(n)
|
||||||
|
}
|
||||||
|
|
||||||
// XXX should this be here???
|
// XXX should this be here???
|
||||||
saveState()
|
saveState()
|
||||||
|
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadBookmarks(lst){
|
|
||||||
$(lst).each(function(i, e){makeBookmarkIndicator(e)})
|
|
||||||
}
|
|
||||||
function getBookmarkList(){
|
|
||||||
var res = []
|
|
||||||
$('.navigator .bar .bookmark').each(function(_, e){res.push(parseInt($(e).attr('page')))})
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
function clearBookmarkIndicators(){
|
|
||||||
$('.navigator .bar .bookmark').remove()
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX move this to actions...
|
// XXX move this to actions...
|
||||||
function nextBookmark(){
|
function nextBookmark(){
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user