mirror of
				https://github.com/flynx/PortableMag.git
				synced 2025-11-03 21:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			289 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			289 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
<html>
 | 
						|
<head>
 | 
						|
<title>Magazine</title>
 | 
						|
<link rel="stylesheet" href="magazine.css">
 | 
						|
<script src="jquery.js"></script>
 | 
						|
<script src="jquery.touchSwipe.js"></script>
 | 
						|
<script>
 | 
						|
 | 
						|
$(document).ready(function(){
 | 
						|
	$('.viewer')
 | 
						|
		.swipe({
 | 
						|
			/* for some reason these do not work within pages... */
 | 
						|
			//swipeLeft: nextPage,
 | 
						|
			//swipeRight: prevPage,
 | 
						|
			swipeStatus: swipeUpdate,
 | 
						|
			swipeUp: function(){fitNPages(6)},
 | 
						|
			swipeDown: function(){fitNPages(1)},
 | 
						|
			click: function(evt, elem){
 | 
						|
				if($(elem).hasClass('page')){
 | 
						|
					var pages = $('.page')
 | 
						|
					setCurrentPage(pages.index(elem))
 | 
						|
				}
 | 
						|
				return true
 | 
						|
			}
 | 
						|
		})
 | 
						|
 | 
						|
	// XXX add splash screen...
 | 
						|
 | 
						|
	fitNPages(1)
 | 
						|
})
 | 
						|
 | 
						|
function swipeUpdate(evt, phase, direction, distance){
 | 
						|
	var pages = $('.page')
 | 
						|
	var cur = $('.current.page')
 | 
						|
	var n = pages.index(cur)
 | 
						|
	var scale = getElementScale($('.scaler'))
 | 
						|
 | 
						|
	if( phase=="move" && (direction=="left" || direction=="right") ){
 | 
						|
		// XXX set the transition time to 0...
 | 
						|
		// XXX
 | 
						|
		if (direction == "left"){
 | 
						|
			//$('.magazine').css({left: -n*cur.width()-distance/scale})
 | 
						|
			$('.magazine').css({left: -n*800-distance/scale})
 | 
						|
		} else if (direction == "right") {
 | 
						|
			//$('.magazine').css({left: -n*cur.width()+distance/scale})
 | 
						|
			$('.magazine').css({left: -n*800+distance/scale})
 | 
						|
		}
 | 
						|
	} else if ( phase == "cancel") {
 | 
						|
		setCurrentPage(pages.index($('.current.page')))
 | 
						|
	} else if ( phase =="end" ) {
 | 
						|
		// see which page is closer to the middle of the screen and set it...
 | 
						|
		var p = Math.ceil((distance/scale)/cur.width())
 | 
						|
 | 
						|
		if(direction == "right") {
 | 
						|
			//prevPage()
 | 
						|
			setCurrentPage(Math.max(n-p, 0))
 | 
						|
		} else if (direction == "left"){
 | 
						|
			//nextPage()
 | 
						|
			setCurrentPage(Math.min(n+p, pages.length-1))
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function setCurrentPage(n){
 | 
						|
	var pages = $('.page')
 | 
						|
	var cur = $(pages[n])
 | 
						|
 | 
						|
	$('.current.page').removeClass('current')
 | 
						|
	cur.addClass('current')
 | 
						|
 | 
						|
	$('.magazine').css({left: -n*pages.width()})
 | 
						|
 | 
						|
	return cur
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function nextPage(){
 | 
						|
	var pages = $('.page')
 | 
						|
	var cur = $('.current.page')
 | 
						|
	return setCurrentPage(Math.min(pages.index(cur)+1, pages.length-1))
 | 
						|
}
 | 
						|
function prevPage(){
 | 
						|
	var pages = $('.page')
 | 
						|
	var cur = $('.current.page')
 | 
						|
	return setCurrentPage(Math.max(pages.index(cur)-1, 0))
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function nextArticle(){
 | 
						|
	var pages = $('.page')
 | 
						|
	var cur = $('.current.page').parents('.article')
 | 
						|
	// we are at the magazine cover cover...
 | 
						|
	if(cur.length == 0){
 | 
						|
		var a = $('.article .page:first-child').first()
 | 
						|
		return setCurrentPage(pages.index(a))
 | 
						|
	}
 | 
						|
	// just find the next one...
 | 
						|
	var articles = $('.article')
 | 
						|
	return setCurrentPage(
 | 
						|
		pages.index(
 | 
						|
			$(articles[Math.min(articles.index(cur)+1, articles.length-1)])
 | 
						|
				.children('.page')
 | 
						|
				.first()))
 | 
						|
 | 
						|
}
 | 
						|
// XXX this is almost exactly the same as nextArticle...
 | 
						|
function prevArticle(){
 | 
						|
	var pages = $('.page')
 | 
						|
	var cur = $('.current.page').parents('.article')
 | 
						|
	// we are at the magazine cover cover...
 | 
						|
	if(cur.length == 0){
 | 
						|
		return $('.current.page')
 | 
						|
	}
 | 
						|
	// just find the prev one...
 | 
						|
	var articles = $('.article')
 | 
						|
	return setCurrentPage(
 | 
						|
		pages.index(
 | 
						|
			$(articles[Math.max(articles.index(cur)-1, 0)])
 | 
						|
				.children('.page')
 | 
						|
				.first()))
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
// Return a scale value for the given element(s).
 | 
						|
// NOTE: this will only return a single scale value...
 | 
						|
function getElementScale(elem){
 | 
						|
	//var transform = elem.css('transform')
 | 
						|
	var vendors = ['o', 'moz', 'ms', 'webkit']
 | 
						|
	var transform = elem.css('transform')
 | 
						|
	var res
 | 
						|
 | 
						|
	// go through vendor prefixes... (hate this!)
 | 
						|
	if(!transform || transform == 'none'){
 | 
						|
		for(var i in vendors){
 | 
						|
			transform = elem.css('-' + vendors[i] + '-transform')
 | 
						|
			if(transform && transform != 'none'){
 | 
						|
				break
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	// no transform is set...
 | 
						|
	if(!transform || transform == 'none'){
 | 
						|
		return 1
 | 
						|
	}
 | 
						|
	// get the scale value -- first argument of scale/matrix...
 | 
						|
	return parseFloat((/(scale|matrix)\(([^,]*),.*\)/).exec(transform)[2])
 | 
						|
}
 | 
						|
 | 
						|
function setElementScale(elem, scale){
 | 
						|
	return elem.css({
 | 
						|
		'transform': 'scale('+scale+')',
 | 
						|
		'-moz-transform': 'scale('+scale+')',
 | 
						|
		'-o-transform': 'scale('+scale+')',
 | 
						|
		'-ms-transform': 'scale('+scale+')',
 | 
						|
		'-webkit-transform': 'scale('+scale+')',
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function fitNPages(n){
 | 
						|
	if(n==null){
 | 
						|
		n = 1
 | 
						|
	}
 | 
						|
	var pages = $('.page')
 | 
						|
	var scale = $('.viewer').width()/(pages.width()*n)
 | 
						|
 | 
						|
	setElementScale($('.scaler'), scale)
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// XXX create magazine...
 | 
						|
function createMagazine(){
 | 
						|
}
 | 
						|
 | 
						|
// XXX create article (magazine, title, position)...
 | 
						|
function createArticle(magazine, title){
 | 
						|
}
 | 
						|
 | 
						|
// XXX create page (article, template, position)...
 | 
						|
function createPage(article, template){
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
</script>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
 | 
						|
<div class="viewer">
 | 
						|
<div class="scaler">
 | 
						|
<div class="aligner">
 | 
						|
	<div class="magazine">
 | 
						|
		<div class="cover page current">
 | 
						|
			Magazine Cover
 | 
						|
		</div>
 | 
						|
 | 
						|
		<!-- XXX do we need a Magazine Credits page??? -->
 | 
						|
 | 
						|
		<div class="article">
 | 
						|
			<div class="cover page">
 | 
						|
				Article Cover<br>
 | 
						|
				some more text...
 | 
						|
			</div>
 | 
						|
 | 
						|
			<!-- XXX do we need an Article Credits page??? -->
 | 
						|
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
		<div class="article">
 | 
						|
			<div class="cover page">
 | 
						|
				Article Cover
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
		<div class="article">
 | 
						|
			<div class="cover page">
 | 
						|
				Article Cover
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
		<div class="article">
 | 
						|
			<div class="cover page">
 | 
						|
				Article Cover
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
			<div class="page">
 | 
						|
				Page
 | 
						|
			</div>
 | 
						|
		</div>
 | 
						|
	</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
</body>
 | 
						|
</html>
 |