mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-03 04:40:10 +00:00 
			
		
		
		
	made the previews load in a async maner, making the general response faster and less laggy when multiple ribbons get aligned...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									416dab37f0
								
							
						
					
					
						commit
						a719079472
					
				
							
								
								
									
										66
									
								
								ui/data.js
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								ui/data.js
									
									
									
									
									
								
							@ -1097,13 +1097,32 @@ function convertDataGen1(data, cmp){
 | 
			
		||||
* Loaders
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// helper...
 | 
			
		||||
function _loadImageURL(image, url){
 | 
			
		||||
	// pre-cache and load image...
 | 
			
		||||
	// NOTE: this will make images load without a blackout...
 | 
			
		||||
	var img = new Image()
 | 
			
		||||
	img.onload = function(){
 | 
			
		||||
		image.css({
 | 
			
		||||
				'background-image': 'url("'+ url +'")',
 | 
			
		||||
			})
 | 
			
		||||
	}
 | 
			
		||||
	img.src = url
 | 
			
		||||
	return img
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var SYNC_IMG_LOADER = true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Update an image element
 | 
			
		||||
//
 | 
			
		||||
// NOTE: care must be taken to reset ALL attributes an image can have,
 | 
			
		||||
// 		a common bug if this is not done correctly, is that some settings
 | 
			
		||||
// 		may leak to newly loaded images...
 | 
			
		||||
// XXX do a pre-caching framework...
 | 
			
		||||
function updateImage(image, gid, size){
 | 
			
		||||
function updateImage(image, gid, size, sync){
 | 
			
		||||
	sync = sync == null ? SYNC_IMG_LOADER : sync
 | 
			
		||||
	image = $(image)
 | 
			
		||||
	var oldgid = getImageGID(image)
 | 
			
		||||
 | 
			
		||||
@ -1137,33 +1156,25 @@ function updateImage(image, gid, size){
 | 
			
		||||
 | 
			
		||||
	// preview...
 | 
			
		||||
	var p_url = getBestPreview(gid, size).url
 | 
			
		||||
	// NOTE: due to the fact that loading/caching the image might be at 
 | 
			
		||||
	// 		a different pace than calling updateImage(...) and .onload
 | 
			
		||||
	// 		events may trigger in any sequence, we need to update the
 | 
			
		||||
	// 		url in a persistent way so as to load the last call's image
 | 
			
		||||
	// 		regardless of actual handler call sequence...
 | 
			
		||||
	image.data().loading = p_url
 | 
			
		||||
	// sync load...
 | 
			
		||||
	if(sync){
 | 
			
		||||
		_loadImageURL(image, p_url)
 | 
			
		||||
 | 
			
		||||
	// pre-cache and load image...
 | 
			
		||||
	// NOTE: this will make images load without a blackout...
 | 
			
		||||
	// XXX add a cache of the form:
 | 
			
		||||
	// 			{
 | 
			
		||||
	// 				[<gid>, <size>]: Image,
 | 
			
		||||
	// 				...
 | 
			
		||||
	// 			}
 | 
			
		||||
	// 		- sort by use...
 | 
			
		||||
	// 		- limit length...
 | 
			
		||||
	//
 | 
			
		||||
	// 		...might also be a good idea to split cache to sizes and have
 | 
			
		||||
	// 		different  but as limits for different sizes, but as sizes 
 | 
			
		||||
	// 		can differ between images this is not trivial...
 | 
			
		||||
	var img = new Image()
 | 
			
		||||
	img.onload = function(){
 | 
			
		||||
		image.css({
 | 
			
		||||
				'background-image': 'url("'+ image.data().loading +'")',
 | 
			
		||||
			})
 | 
			
		||||
	// async load...
 | 
			
		||||
	} else {
 | 
			
		||||
		// NOTE: storing the url in .data() makes the image load the 
 | 
			
		||||
		// 		last preview and last preview only in the case that we
 | 
			
		||||
		// 		manage to call updateImage(...) on the same element 
 | 
			
		||||
		// 		multiple times before the previews get loaded...
 | 
			
		||||
		// 		...setting the data().loading is sync while loading an 
 | 
			
		||||
		// 		image is not and if several loads are done in sequence
 | 
			
		||||
		// 		there is no guarantee that they will happen in the same
 | 
			
		||||
		// 		order as requested...
 | 
			
		||||
		image.data().loading = p_url
 | 
			
		||||
		setTimeout(function(){ 
 | 
			
		||||
			_loadImageURL(image, image.data().loading)
 | 
			
		||||
		}, 0)
 | 
			
		||||
	}
 | 
			
		||||
	img.src = p_url
 | 
			
		||||
 | 
			
		||||
	// main attrs...
 | 
			
		||||
	image
 | 
			
		||||
@ -1185,6 +1196,9 @@ function updateImage(image, gid, size){
 | 
			
		||||
		image.removeClass('marked')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// XXX load filter settings...
 | 
			
		||||
	// XXX
 | 
			
		||||
 | 
			
		||||
	return image
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,12 +20,15 @@ var toggleEditor = createCSSClassToggler(
 | 
			
		||||
				if(ed.length == 0){
 | 
			
		||||
					$('.viewer')
 | 
			
		||||
						.append(makeEditorControls('.current.image')
 | 
			
		||||
							//.draggable('option', 'snap', '.viewer')
 | 
			
		||||
							.addClass('noScroll')
 | 
			
		||||
							.css({
 | 
			
		||||
								// prevent the editor from moving under 
 | 
			
		||||
								// the title bar, that will prevent us from
 | 
			
		||||
								// ever moving it away or closing it...
 | 
			
		||||
								'margin-top': '20px',
 | 
			
		||||
								top: '50px',
 | 
			
		||||
								left: '5px',
 | 
			
		||||
							})
 | 
			
		||||
							// make clicks on unfocusable elements remove focus...
 | 
			
		||||
							.click(function(){
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user