mirror of
				https://github.com/flynx/PortableMag.git
				synced 2025-10-31 03:50:16 +00:00 
			
		
		
		
	significant refactoring and reorganization...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									58418a1bff
								
							
						
					
					
						commit
						0600d0febe
					
				
							
								
								
									
										2
									
								
								TODO.otl
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								TODO.otl
									
									
									
									
									
								
							| @ -6,6 +6,8 @@ | |||||||
| 		[_] BUG: no drag threshold on excludedElements (TouchSwipe) | 		[_] BUG: no drag threshold on excludedElements (TouchSwipe) | ||||||
| 		| stalled... | 		| stalled... | ||||||
| 	[_] 75% general todo | 	[_] 75% general todo | ||||||
|  | 		[_] BUG: as on android before, on loading from json view does not reach cur page... | ||||||
|  | 		| likely due to animation/transition stopping for some reason.... | ||||||
| 		[_] 0% add two main page themes (global/local applicable): | 		[_] 0% add two main page themes (global/local applicable): | ||||||
| 			[_] light | 			[_] light | ||||||
| 			[_] dark | 			[_] dark | ||||||
|  | |||||||
| @ -45,6 +45,7 @@ $(document).ready(function(){ | |||||||
| 		// setup internal events... | 		// setup internal events... | ||||||
| 		.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState) | 		.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState) | ||||||
| 		.on('pageChanged', updatePageNumberIndicator) | 		.on('pageChanged', updatePageNumberIndicator) | ||||||
|  | 		.on('magazineDataLoaded', loadMagazineChrome) | ||||||
| 
 | 
 | ||||||
| 		// templates... | 		// templates... | ||||||
| 		.on('pageCreated articleCreated magazineCreated ' + | 		.on('pageCreated articleCreated magazineCreated ' + | ||||||
| @ -118,8 +119,12 @@ $(document).ready(function(){ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	// load state and setup everything that depends on it... | 	// load state and setup everything that depends on it... | ||||||
|  | 	// XXX load the data with loadJSON() | ||||||
| 	loadState() | 	loadState() | ||||||
| 	loadMagazineChrome() | 	// need to call this once per whole page load.... | ||||||
|  | 	setupNavigator() | ||||||
|  | 	// XXX STUB, needed untill we load everything frim JSON... | ||||||
|  | 	$('.viewer').trigger('magazineDataLoaded') | ||||||
| 
 | 
 | ||||||
| 	// set default view... | 	// set default view... | ||||||
| 	togglePageView('on') | 	togglePageView('on') | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ | |||||||
| // 		as all events are ahndled by the viewer...
 | // 		as all events are ahndled by the viewer...
 | ||||||
| function loadMagazine(mag, position, bookmarks){ | function loadMagazine(mag, position, bookmarks){ | ||||||
| 	mag = loadMagazineData(mag) | 	mag = loadMagazineData(mag) | ||||||
| 	loadMagazineChrome(position, bookmarks) | 	loadMagazineUserData(position, bookmarks) | ||||||
| 	return mag | 	return mag | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -189,9 +189,5 @@ function removePage(page){ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /*********************************************************************/ | /*********************************************************************/ | ||||||
| // vim:set ts=4 sw=4 :
 | // vim:set ts=4 sw=4 :
 | ||||||
|  | |||||||
| @ -43,6 +43,7 @@ $(document).ready(function(){ | |||||||
| 		// setup internal events... | 		// setup internal events... | ||||||
| 		.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState) | 		.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState) | ||||||
| 		.on('pageChanged', updatePageNumberIndicator) | 		.on('pageChanged', updatePageNumberIndicator) | ||||||
|  | 		.on('magazineDataLoaded', loadMagazineChrome) | ||||||
| 
 | 
 | ||||||
| 		// user interactions... | 		// user interactions... | ||||||
| 		.swipe({ | 		.swipe({ | ||||||
| @ -106,7 +107,10 @@ $(document).ready(function(){ | |||||||
| 	// load state and setup everything that depends on it... | 	// load state and setup everything that depends on it... | ||||||
| 	// XXX load the data with loadJSON() | 	// XXX load the data with loadJSON() | ||||||
| 	loadState() | 	loadState() | ||||||
| 	loadMagazineChrome() | 	// need to call this once per whole page load.... | ||||||
|  | 	setupNavigator() | ||||||
|  | 	// XXX STUB, needed untill we load everything frim JSON... | ||||||
|  | 	$('.viewer').trigger('magazineDataLoaded') | ||||||
| 
 | 
 | ||||||
| 	// set default view... | 	// set default view... | ||||||
| 	togglePageView('on') | 	togglePageView('on') | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								magazine.js
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								magazine.js
									
									
									
									
									
								
							| @ -400,7 +400,7 @@ function goToMagazineCover(){ | |||||||
| 	return setCurrentPage(0) | 	return setCurrentPage(0) | ||||||
| } | } | ||||||
| function goToMagazineEnd(){ | function goToMagazineEnd(){ | ||||||
| 	return setCurrentPage($('.page').length-1) | 	return setCurrentPage(-1) | ||||||
| } | } | ||||||
| function goToArticleCover(){ | function goToArticleCover(){ | ||||||
| 	// try and get the actual first cover...
 | 	// try and get the actual first cover...
 | ||||||
| @ -897,7 +897,7 @@ function buildJSON(export_bookmarks, export_position){ | |||||||
| 	return res | 	return res | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function loadJSON(data, ignore_chrome){ | function loadJSON(data, load_user_data){ | ||||||
| 	function _build(block, elem){ | 	function _build(block, elem){ | ||||||
| 
 | 
 | ||||||
| 		// page...
 | 		// page...
 | ||||||
| @ -955,8 +955,8 @@ function loadJSON(data, ignore_chrome){ | |||||||
| 	mag.children('.current.page').removeClass('current') | 	mag.children('.current.page').removeClass('current') | ||||||
| 	loadMagazineData(mag) | 	loadMagazineData(mag) | ||||||
| 
 | 
 | ||||||
| 	if(!ignore_chrome){ | 	if(load_user_data){ | ||||||
| 		loadMagazineChrome(data.position, data.bookmarks) | 		loadMagazineUserData(data.position, data.bookmarks) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1080,29 +1080,34 @@ function runMagazineTemplates(){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| /******************************************* basic magazine editor ***/ | /******************************************* basic magazine editor ***/ | ||||||
|  | // NOTE: these are mostly needed for loading magazines...
 | ||||||
| 
 | 
 | ||||||
| // load the data...
 | // load the data...
 | ||||||
| function loadMagazineData(mag){ | function loadMagazineData(mag){ | ||||||
| 	removeMagazine() | 	removeMagazine() | ||||||
| 	mag.appendTo($('.aligner')) | 	mag.appendTo($('.aligner')) | ||||||
|  | 	$('.viewer').trigger('magazineDataLoaded') | ||||||
| 	return mag | 	return mag | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NOTE: this needs to be called once per magazine load...
 | ||||||
|  | function loadMagazineChrome(){ | ||||||
|  | 	setupBookmarkTouchZones() | ||||||
|  | 	runMagazineTemplates() | ||||||
|  | 	updateView() | ||||||
|  | 	$('.viewer').trigger('magazineChromeLoaded') | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| // load chrome elements like bookmarks and navigator....
 | // load chrome elements like bookmarks and navigator....
 | ||||||
| function loadMagazineChrome(position, bookmarks){ | function loadMagazineUserData(position, bookmarks){ | ||||||
| 	setupBookmarkTouchZones() |  | ||||||
| 	setupNavigator() |  | ||||||
| 	if(position){ | 	if(position){ | ||||||
| 		setCurrentPage(position) | 		setCurrentPage(position) | ||||||
| 	} | 	} | ||||||
| 	if(bookmarks){ | 	if(bookmarks){ | ||||||
| 		loadBookmarks(bookmarks != null ? bookmarks : []) | 		loadBookmarks(bookmarks != null ? bookmarks : []) | ||||||
| 	} | 	} | ||||||
| 	runMagazineTemplates() |  | ||||||
| 	// XXX do we need to cover this with a splash???
 |  | ||||||
| 	updateView() |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -1113,7 +1118,7 @@ function loadMagazineChrome(position, bookmarks){ | |||||||
| // 		on removed elements -- unbind and remove or just forget about it?
 | // 		on removed elements -- unbind and remove or just forget about it?
 | ||||||
| function removeMagazine(){ | function removeMagazine(){ | ||||||
| 	$('.magazine').remove() | 	$('.magazine').remove() | ||||||
| 	clearNavigator() | 	$('.viewer').trigger('magazineRemoved') | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										174
									
								
								navigator.js
									
									
									
									
									
								
							
							
						
						
									
										174
									
								
								navigator.js
									
									
									
									
									
								
							| @ -6,6 +6,95 @@ | |||||||
| * TODO make the bar (indicator) clickable -- go to this point. | * TODO make the bar (indicator) clickable -- go to this point. | ||||||
| * | * | ||||||
| **********************************************************************/ | **********************************************************************/ | ||||||
|  | 
 | ||||||
|  | function setupNavigator(skip_events){ | ||||||
|  | 	var bar = $('.navigator .bar') | ||||||
|  | 	var elems = $('.navigator .indicator, .navigator .article') | ||||||
|  | 	var pos = $('.navigator .indicator').fadeIn() | ||||||
|  | 	var pages = $('.page').length | ||||||
|  | 	var mag = $('.magazine') | ||||||
|  | 
 | ||||||
|  | 	var W = bar.width()/pages | ||||||
|  | 
 | ||||||
|  | 	setupArticleIndicators(W) | ||||||
|  | 
 | ||||||
|  | 	// set navigator element sizes...
 | ||||||
|  | 	elems.css({ | ||||||
|  | 		width: W | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	updateNavigator() | ||||||
|  | 
 | ||||||
|  | 	// need to reconstruct indicators...
 | ||||||
|  | 	$('.magazine .page .bookmark').each(function(_, e){ | ||||||
|  | 		makeBookmarkIndicator($(e).parents('.page')) | ||||||
|  | 	}) | ||||||
|  | 	 | ||||||
|  | 	// XXX make these run only once...
 | ||||||
|  | 	if(!skip_events){ | ||||||
|  | 		// setup event handlers...
 | ||||||
|  | 		$('.viewer') | ||||||
|  | 			// basic functions...
 | ||||||
|  | 			.on('pageChanged', function(e, n){updateNavigator(n)}) | ||||||
|  | 			.on('magazineDragging', function(){updateNavigator()}) | ||||||
|  | 			// bookmarks...
 | ||||||
|  | 			.on('bookmarksCleared', clearBookmarkIndicators) | ||||||
|  | 			.on('bookmarkAdded', function(_, n){makeBookmarkIndicator(n)}) | ||||||
|  | 			.on('bookmarkRemoved', function(_, n){removeBookmarkIndicator(n)}) | ||||||
|  | 			// editor specific events...
 | ||||||
|  | 			.on('pageCreated articleCreated magazineCreated ' + | ||||||
|  | 					'pageMoved articleMoved pageRemoved articleRemoved', resetNavigator) | ||||||
|  | 			// lifecycle events...
 | ||||||
|  | 			.on('magazineDataLoaded', resetNavigator) | ||||||
|  | 			.on('magazineRemoved', clearNavigator) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // XXX this needs to unbind events...
 | ||||||
|  | function clearNavigator(){ | ||||||
|  | 	$('.navigator .indicator').hide() | ||||||
|  | 	clearBookmarkIndicators() | ||||||
|  | 	clearArticleIndicators() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function resetNavigator(){ | ||||||
|  | 	clearNavigator() | ||||||
|  | 	setupNavigator(skip_events=true) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function updateNavigator(n){ | ||||||
|  | 	var mag = $('.magazine') | ||||||
|  | 	var page = $('.page') | ||||||
|  | 	var bar = $('.navigator .bar') | ||||||
|  | 	var pos = $('.navigator .indicator') | ||||||
|  | 
 | ||||||
|  | 	var pn = page.length | ||||||
|  | 
 | ||||||
|  | 	var bW = bar.width() | ||||||
|  | 	var mW = mag.width() | ||||||
|  | 	var PW = page.width() | ||||||
|  | 	var pW = bar.width()/pn | ||||||
|  | 
 | ||||||
|  | 	if(n == null){ | ||||||
|  | 		// XXX this behaves erratically if the page is zoomed...
 | ||||||
|  | 		var res = (-parseFloat(mag.css('left'))/(mW-PW)) * (bW-pW) | ||||||
|  | 	} else { | ||||||
|  | 		res = pW*n | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// normalize the position...
 | ||||||
|  | 	res = res > 0 ? res: 0 | ||||||
|  | 	res = res < (bW-pW) ? res: (bW-pW) | ||||||
|  | 
 | ||||||
|  | 	// set indicator position...
 | ||||||
|  | 	pos.css({ | ||||||
|  | 		left: res  | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // NOTE: the navigator is not live and will need to get regenerated on
 | // NOTE: the navigator is not live and will need to get regenerated on
 | ||||||
| // 		each magazine edit...
 | // 		each magazine edit...
 | ||||||
| 
 | 
 | ||||||
| @ -47,91 +136,6 @@ function clearArticleIndicators(){ | |||||||
| } | } | ||||||
| 	 | 	 | ||||||
| 
 | 
 | ||||||
| function setupNavigator(skip_events){ |  | ||||||
| 	var bar = $('.navigator .bar') |  | ||||||
| 	var elems = $('.navigator .indicator, .navigator .article') |  | ||||||
| 	var pos = $('.navigator .indicator').fadeIn() |  | ||||||
| 	var pages = $('.page').length |  | ||||||
| 	var mag = $('.magazine') |  | ||||||
| 
 |  | ||||||
| 	var W = bar.width()/pages |  | ||||||
| 
 |  | ||||||
| 	setupArticleIndicators(W) |  | ||||||
| 
 |  | ||||||
| 	// set navigator element sizes...
 |  | ||||||
| 	elems.css({ |  | ||||||
| 		width: W |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	updateNavigator() |  | ||||||
| 
 |  | ||||||
| 	// need to reconstruct indicators...
 |  | ||||||
| 	$('.magazine .page .bookmark').each(function(_, e){ |  | ||||||
| 		makeBookmarkIndicator($(e).parents('.page')) |  | ||||||
| 	}) |  | ||||||
| 	 |  | ||||||
| 	if(!skip_events){ |  | ||||||
| 		// setup event handlers...
 |  | ||||||
| 		$('.viewer') |  | ||||||
| 			// basic functions...
 |  | ||||||
| 			.on('pageChanged', function(e, n){updateNavigator(n)}) |  | ||||||
| 			.on('magazineDragging', function(){updateNavigator()}) |  | ||||||
| 			// bookmarks...
 |  | ||||||
| 			.on('bookmarksCleared', clearBookmarkIndicators) |  | ||||||
| 			.on('bookmarkAdded', function(_, n){makeBookmarkIndicator(n)}) |  | ||||||
| 			.on('bookmarkRemoved', function(_, n){removeBookmarkIndicator(n)}) |  | ||||||
| 			// editor specific events...
 |  | ||||||
| 			.on('pageCreated articleCreated magazineCreated', resetNavigator) |  | ||||||
| 			.on('pageMoved articleMoved', resetNavigator) |  | ||||||
| 			.on('pageRemoved articleRemoved', resetNavigator) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // XXX this needs to unbind events...
 |  | ||||||
| function clearNavigator(){ |  | ||||||
| 	$('.navigator .indicator').hide() |  | ||||||
| 	clearBookmarkIndicators() |  | ||||||
| 	clearArticleIndicators() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function resetNavigator(){ |  | ||||||
| 	clearNavigator() |  | ||||||
| 	setupNavigator() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| function updateNavigator(n){ |  | ||||||
| 	var mag = $('.magazine') |  | ||||||
| 	var page = $('.page') |  | ||||||
| 	var bar = $('.navigator .bar') |  | ||||||
| 	var pos = $('.navigator .indicator') |  | ||||||
| 
 |  | ||||||
| 	var pn = page.length |  | ||||||
| 
 |  | ||||||
| 	var bW = bar.width() |  | ||||||
| 	var mW = mag.width() |  | ||||||
| 	var PW = page.width() |  | ||||||
| 	var pW = bar.width()/pn |  | ||||||
| 
 |  | ||||||
| 	if(n == null){ |  | ||||||
| 		// XXX this behaves erratically if the page is zoomed...
 |  | ||||||
| 		var res = (-parseFloat(mag.css('left'))/(mW-PW)) * (bW-pW) |  | ||||||
| 	} else { |  | ||||||
| 		res = pW*n |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// normalize the position...
 |  | ||||||
| 	res = res > 0 ? res: 0 |  | ||||||
| 	res = res < (bW-pW) ? res: (bW-pW) |  | ||||||
| 
 |  | ||||||
| 	// set indicator position...
 |  | ||||||
| 	pos.css({ |  | ||||||
| 		left: res  |  | ||||||
| 	}) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /******************************************************* bookmarks ***/ | /******************************************************* bookmarks ***/ | ||||||
| 
 | 
 | ||||||
| function makeBookmarkIndicator(n){ | function makeBookmarkIndicator(n){ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user