added hash urls -- support page, @name refs and special home, end and thumbnails hash parts...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-01-23 04:10:05 +04:00
parent 35361370be
commit c2f23d1483
3 changed files with 55 additions and 15 deletions

View File

@ -1,5 +1,8 @@
[_] 25% Priority work [_] 25% Priority work
[_] 50% general todo [_] 50% general todo
[_] BUG: href to existing anchors will mess up layout...
| need to find out how can we disable anchor links from actually
| going to the anchor...
[_] something made phonegap version unhappy... [_] something made phonegap version unhappy...
| likely the URL logic... | likely the URL logic...
| |

View File

@ -8,10 +8,6 @@
<script src="magazine.js"></script> <script src="magazine.js"></script>
<script>
</script>
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
@ -29,6 +25,7 @@ $(document).ready(function(){
}) })
.bind('hashchange', function(){ .bind('hashchange', function(){
setCurrentPage(loadURLState()) setCurrentPage(loadURLState())
return false
}) })
$('.viewer') $('.viewer')
@ -46,8 +43,10 @@ $(document).ready(function(){
click: function(evt, elem){ click: function(evt, elem){
if($(elem).hasClass('page')){ if($(elem).hasClass('page')){
setCurrentPage(elem) setCurrentPage(elem)
//togglePageView('on')
} else if($(elem).hasClass('content')){ } else if($(elem).hasClass('content')){
setCurrentPage($(elem).parents('.page').first()) setCurrentPage($(elem).parents('.page').first())
//togglePageView('on')
} }
return true return true
} }
@ -100,7 +99,18 @@ $(document).ready(function(){
<div class="magazine"> <div class="magazine">
<div class="cover page current"> <div class="cover page current">
<div class="content"> <div class="content">
Magazine Cover <h1>Magazine Cover</h1>
<br><br><br>
<a href="#1">Article 1</a><br>
<a href="#ArticleAnchorExample">Article 2</a><br>
<a href="#11">Article 3</a><br>
<br><br><br>
<h3>Special anchors</h3>
<a href="#home">Magazine cover</a><br>
<a href="#end">Last Page</a><br>
<a href="#thumbnails">Thumbnail view</a><br>
</div> </div>
</div> </div>
@ -109,7 +119,8 @@ $(document).ready(function(){
<div class="article"> <div class="article">
<div class="cover page"> <div class="cover page">
<div class="content"> <div class="content">
Article Cover<br> <h1>Article Cover</h1>
<a href="#home">home</a><br>
some more text... some more text...
</div> </div>
</div> </div>
@ -135,8 +146,10 @@ $(document).ready(function(){
</div> </div>
<div class="article"> <div class="article">
<div class="cover page"> <div class="cover page">
<div class="content"> <div class="content" name="ArticleAnchorExample">
Article Cover <!--a name="ArticleAnchorExample"></a-->
<h1>Article Cover</h1>
<a href="#home">home</a><br>
</div> </div>
</div> </div>
@ -169,7 +182,8 @@ $(document).ready(function(){
<div class="article"> <div class="article">
<div class="cover page"> <div class="cover page">
<div class="content"> <div class="content">
Article Cover <h1>Article Cover</h1>
<a href="#home">home</a><br>
</div> </div>
</div> </div>
@ -195,7 +209,8 @@ $(document).ready(function(){
</div> </div>
<div class="page"> <div class="page">
<div class="content"> <div class="content">
Page Page<br>
<a href="#home">home</a><br>
</div> </div>
</div> </div>
</div> </div>

View File

@ -444,26 +444,48 @@ function prevArticle(){
/*********************************************************************/ /*********************************************************************/
// XXX make these magazine-specific... // XXX make these magazine-specific...
// XXX BUG: if the hach url part coresponds to a real anchor the browser
// shifts the page, need to disable this...
// URL state managers... // URL state managers...
function loadURLState(){ function loadURLState(){
if(window.location.hash == ''){ if(window.location.hash == ''){
return null return null
} }
var n = parseInt(window.location.hash.split('#')[1]) var anchor = window.location.hash.split('#')[1]
if(n != null){ var n = parseInt(anchor)
if(typeof(n) == typeof(1) && n >= 0){
return n return n
// XXX add real external aliases...
} else if(anchor == 'thumbnails') {
togglePageView('off')
return getPageNumber()
} else if(anchor == 'home') {
return 0
} else if(anchor == 'end') {
return $('.page').length-1
} else { } else {
alert('textual anchors not yet supported...') return getPageNumber($('[name='+anchor+']').parents('.page'))
return
} }
} }
function saveURLState(){ function saveURLState(){
var anchor = window.location.hash.split('#')[1]
var page = $('[name='+anchor+']')
if(!page.hasClass('page')){
page = page.parents('.page')
}
var n = getPageNumber()
// XXX use real aliases...
if(n == getPageNumber(page)
|| (anchor == 'home' && n == 0)
|| (anchor == 'end' && n == $('.page').length-1)){
return
}
window.location.hash = getPageNumber() window.location.hash = getPageNumber()
} }
// local storage state managers... // local storage state managers...
function loadStorageState(){ function loadStorageState(){
return parseInt($.jStorage.get('current_page'), 0) return parseInt($.jStorage.get('current_page', 0))
} }
function saveStorageState(){ function saveStorageState(){
$.jStorage.set('current_page', getPageNumber()) $.jStorage.set('current_page', getPageNumber())