mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-01 03:40:09 +00:00 
			
		
		
		
	several fixes, sorting is broken -- need to rethink the id scheme...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									531710c883
								
							
						
					
					
						commit
						6aa31daf70
					
				| @ -1065,6 +1065,17 @@ function setupEvents(){ | |||||||
| 				updated = true | 				updated = true | ||||||
| 			}) | 			}) | ||||||
| 		*/ | 		*/ | ||||||
|  | 	// zooming...
 | ||||||
|  | 	$(document) | ||||||
|  | 		.on([ | ||||||
|  | 				'scaleContainerUp', | ||||||
|  | 				'scaleContainerDown', | ||||||
|  | 				'fitNImages' | ||||||
|  | 			].join(' '), | ||||||
|  | 			function(e){ | ||||||
|  | 				// update images on zooming...
 | ||||||
|  | 				updateRibbonImages($('.current.image'), true) | ||||||
|  | 			}) | ||||||
| 	// save things if updated within a minute...
 | 	// save things if updated within a minute...
 | ||||||
| 	// XXX this gets very slow when saving a large data dump...
 | 	// XXX this gets very slow when saving a large data dump...
 | ||||||
| 	setInterval(function(){ | 	setInterval(function(){ | ||||||
| @ -1156,38 +1167,76 @@ function setupImageEventHandlers(image){ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // build an image element...
 | // build an image element...
 | ||||||
| function makeImage(url, order, set_order){ | function makeImage(order, set_order){ | ||||||
| 	if(set_order == null){ | 	if(set_order == null){ | ||||||
| 		set_order = setImageOrder | 		set_order = setImageOrder | ||||||
| 	} | 	} | ||||||
| 	return (setupImageEventHandlers( | 	return (setupImageEventHandlers( | ||||||
| 				set_order($('<div class="image"/>') | 				set_order($('<div class="image"/>') | ||||||
| 					//.css({ 'background-image': 'url('+url.replace(/ /g, '%20')+')' }), order)))
 |  | ||||||
| 					, order))) | 					, order))) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NOTE: this is largely independent of ImageGrid.image_data structure, 
 | 
 | ||||||
| // 		it needs only content...
 | // NOTE: if there is not id image this will return null
 | ||||||
| function getURL(id){ | function getImageData(id){ | ||||||
| 	var json = ImageGrid.image_data | 	var json = ImageGrid.image_data | ||||||
| 	var ribbons = json.ribbons | 	var ribbons = json.ribbons | ||||||
| 
 | 
 | ||||||
| 	for(var i=0; i<ribbons.length; i++){ | 	for(var i=0; i<ribbons.length; i++){ | ||||||
| 		var ribbon = ribbons[i] | 		var ribbon = ribbons[i] | ||||||
| 		if(ribbon[id] != null){ | 		if(ribbon[id] != null){ | ||||||
| 			return ribbon[id].url | 			return ribbon[id] | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NOTE: this is largely independent of ImageGrid.image_data structure, 
 | ||||||
|  | // 		it needs only content...
 | ||||||
|  | function getURL(id, size){ | ||||||
|  | 	if(size == null){ | ||||||
|  | 		size = 0 | ||||||
|  | 	} | ||||||
|  | 	var json = ImageGrid.image_data | ||||||
|  | 	var ribbons = json.ribbons | ||||||
|  | 
 | ||||||
|  | 	var image = getImageData(id) | ||||||
|  | 	// select appropriate preview...
 | ||||||
|  | 	if(image.preview != null){ | ||||||
|  | 		var sizes = [] | ||||||
|  | 		var keys = [] | ||||||
|  | 		var max | ||||||
|  | 		for(var s in image.preview){ | ||||||
|  | 			if(max == null || max <= s){ | ||||||
|  | 				max = s | ||||||
|  | 			} | ||||||
|  | 			if(parseInt(s) >= size){ | ||||||
|  | 				sizes.push(parseInt(s)) | ||||||
|  | 				keys.push(s) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		// we are bigger than any preview...
 | ||||||
|  | 		if(sizes.length < 1){ | ||||||
|  | 			return image.preview[max] | ||||||
|  | 		} else { | ||||||
|  | 			var cur_size = Math.min.apply(Math, sizes) | ||||||
|  | 			return image.preview[keys[sizes.indexOf(cur_size)]] | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		// legacy default...
 | ||||||
|  | 		return image.url | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| var SCREEN_WIDTH_CACHE = 2 | var SCREEN_WIDTH_CACHE = 4 | ||||||
| 
 | 
 | ||||||
| // XXX make this update only when the threshold is passed...
 | // XXX make this update only when the threshold is passed...
 | ||||||
| // XXX make this size aware...
 | // XXX update images on zoom...
 | ||||||
| // NOTE: this is largely independent of ImageGrid.image_data...
 | // NOTE: this is largely independent of ImageGrid.image_data...
 | ||||||
| function updateRibbonImages(img, r){ | function updateRibbonImages(img, force){ | ||||||
|  | 	var r = getViewerWidthImages() | ||||||
|  | 	var size = getCurrentImageSize() | ||||||
| 	var R = r*SCREEN_WIDTH_CACHE | 	var R = r*SCREEN_WIDTH_CACHE | ||||||
| 	var images = img.parents('.ribbon').children('.image') | 	var images = img.parents('.ribbon').children('.image') | ||||||
| 
 | 
 | ||||||
| @ -1209,9 +1258,10 @@ function updateRibbonImages(img, r){ | |||||||
| 		var img = $(images[i]) | 		var img = $(images[i]) | ||||||
| 		loading.push(img[0]) | 		loading.push(img[0]) | ||||||
| 		// update only the images that are not set...
 | 		// update only the images that are not set...
 | ||||||
|  | 		// XXX update images on zoom...
 | ||||||
| 		var bg = img.css('background-image') | 		var bg = img.css('background-image') | ||||||
| 		if(bg == 'none' || bg == null){ | 		if(force || bg == 'none' || bg == null){ | ||||||
| 			img.css({ 'background-image': 'url('+getURL(img.attr('id'))+')' }) | 			img.css({ 'background-image': 'url('+getURL(img.attr('id'), size)+')' }) | ||||||
| 		} | 		} | ||||||
| 		//img.not('.loaded').css({ 'background-image': 'url('+getURL(img.attr('id'))+')' })
 | 		//img.not('.loaded').css({ 'background-image': 'url('+getURL(img.attr('id'))+')' })
 | ||||||
| 		// remove the processed images from the list...
 | 		// remove the processed images from the list...
 | ||||||
| @ -1221,7 +1271,8 @@ function updateRibbonImages(img, r){ | |||||||
| 	loading.not('.loaded') | 	loading.not('.loaded') | ||||||
| 		.addClass('loaded') | 		.addClass('loaded') | ||||||
| 	// unload...
 | 	// unload...
 | ||||||
| 	images.filter('.loaded').removeClass('loaded') | 	images.filter('.loaded') | ||||||
|  | 		.removeClass('loaded') | ||||||
| 		.css({ 'background-image': 'none' }) | 		.css({ 'background-image': 'none' }) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1261,7 +1312,6 @@ function loadImagesFromList(images){ | |||||||
|  * 	} |  * 	} | ||||||
|  */ |  */ | ||||||
| // XXX add incremental or partial updates...
 | // XXX add incremental or partial updates...
 | ||||||
| // XXX this will break when trying to read unloaded images...
 |  | ||||||
| function buildJSON(get_order){ | function buildJSON(get_order){ | ||||||
| 	/* XXX can't return this yet as we are not updating this properly yet... | 	/* XXX can't return this yet as we are not updating this properly yet... | ||||||
| 	if(ImageGrid.image_data != null){ | 	if(ImageGrid.image_data != null){ | ||||||
| @ -1271,6 +1321,7 @@ function buildJSON(get_order){ | |||||||
| 	if(get_order == null){ | 	if(get_order == null){ | ||||||
| 		get_order = getImageOrder | 		get_order = getImageOrder | ||||||
| 	} | 	} | ||||||
|  | 	var size = getCurrentImageSize() | ||||||
| 	var ribbons = $('.ribbon') | 	var ribbons = $('.ribbon') | ||||||
| 	res = { | 	res = { | ||||||
| 		position: $('.current.image').attr('id'), | 		position: $('.current.image').attr('id'), | ||||||
| @ -1287,21 +1338,17 @@ function buildJSON(get_order){ | |||||||
| 		for(var j=0; j < images.length; j++){ | 		for(var j=0; j < images.length; j++){ | ||||||
| 			var image = $(images[j]) | 			var image = $(images[j]) | ||||||
| 			var id = get_order(image) | 			var id = get_order(image) | ||||||
| 			ribbon[id] = { | 			ribbon[id] = getImageData(id) | ||||||
| 				// unwrap the url...
 |  | ||||||
| 				// XXX would be nice to make this a relative path... (???)
 |  | ||||||
| 				//url: /url\((.*)\)/.exec(image.css('background-image'))[1],
 |  | ||||||
| 				url: getURL(id) |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	ImageGrid.image_data = res | ||||||
| 	return res | 	return res | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // XXX might be good to add images in packs here, not one by one...
 | // XXX might be good to add images in packs here, not one by one...
 | ||||||
| function loadJSON(data, position, set_order, escape_urls){ | function loadJSON(data, position, set_order){ | ||||||
| 	if(position == null){ | 	if(position == null){ | ||||||
| 		position = data.position | 		position = data.position | ||||||
| 	} | 	} | ||||||
| @ -1312,9 +1359,6 @@ function loadJSON(data, position, set_order, escape_urls){ | |||||||
| 	if(ribbons == null){ | 	if(ribbons == null){ | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	if(escape_urls == null){ |  | ||||||
| 		escape_urls = true |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	// store the structure...
 | 	// store the structure...
 | ||||||
| 	ImageGrid.image_data = data | 	ImageGrid.image_data = data | ||||||
| @ -1324,6 +1368,8 @@ function loadJSON(data, position, set_order, escape_urls){ | |||||||
| 	// drop all old content...
 | 	// drop all old content...
 | ||||||
| 	field.children('.ribbon').remove() | 	field.children('.ribbon').remove() | ||||||
| 
 | 
 | ||||||
|  | 	var order = 0 | ||||||
|  | 
 | ||||||
| 	for(var i=0; i < ribbons.length; i++){ | 	for(var i=0; i < ribbons.length; i++){ | ||||||
| 		var images = ribbons[i] | 		var images = ribbons[i] | ||||||
| 		// skip empty ribbons...
 | 		// skip empty ribbons...
 | ||||||
| @ -1333,13 +1379,19 @@ function loadJSON(data, position, set_order, escape_urls){ | |||||||
| 		// create ribbon...
 | 		// create ribbon...
 | ||||||
| 		var ribbon = $('<div class="ribbon"></div>') | 		var ribbon = $('<div class="ribbon"></div>') | ||||||
| 			.appendTo(field) | 			.appendTo(field) | ||||||
|  | 		var new_images = {} | ||||||
| 		for(var j in images){ | 		for(var j in images){ | ||||||
| 			var image = images[j] | 			var image = images[j] | ||||||
|  | 			// update index...
 | ||||||
|  | 			new_images[order] = image | ||||||
| 			// create image...
 | 			// create image...
 | ||||||
| 			makeImage(image.url, j, set_order) | 			makeImage(order, set_order) | ||||||
| 				.appendTo(ribbon) | 				.appendTo(ribbon) | ||||||
|  | 			order++ | ||||||
| 		} | 		} | ||||||
|  | 		ribbons[i] = new_images | ||||||
| 	} | 	} | ||||||
|  | 	console.log('loaded: ', order) | ||||||
| 	if(position != null && $('#' + position).length != 0){ | 	if(position != null && $('#' + position).length != 0){ | ||||||
| 		$('#' + position).click() | 		$('#' + position).click() | ||||||
| 	} else { | 	} else { | ||||||
| @ -1366,14 +1418,13 @@ function handleImageClick(){ | |||||||
| 	centerIndicator() | 	centerIndicator() | ||||||
| 	alignRibbons() | 	alignRibbons() | ||||||
| 	// update this ribbon...
 | 	// update this ribbon...
 | ||||||
| 	var w = getViewerWidthImages() | 	updateRibbonImages($(this)) | ||||||
| 	updateRibbonImages($(this), w) |  | ||||||
| 	// update other ribbons...
 | 	// update other ribbons...
 | ||||||
| 	var id = $(this).attr('id') | 	var id = $(this).attr('id') | ||||||
| 	for(var i=0; i<ribbons.length; i++){ | 	for(var i=0; i<ribbons.length; i++){ | ||||||
| 		var img = getImageBefore(id, $(ribbons[i])) | 		var img = getImageBefore(id, $(ribbons[i])) | ||||||
| 		// XXX revise: should we check if ribbon is empty if img is null??
 | 		// XXX revise: should we check if ribbon is empty if img is null??
 | ||||||
| 		updateRibbonImages(img?img:$(ribbons[i]).children('.image').first(), w) | 		updateRibbonImages(img?img:$(ribbons[i]).children('.image').first()) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -2133,7 +2184,7 @@ ImageGrid.GROUP('Image manipulation', | |||||||
| 		function sortImagesVia(cmp){ | 		function sortImagesVia(cmp){ | ||||||
| 			// reverse ID order...
 | 			// reverse ID order...
 | ||||||
| 			$($('.image').get().sort(cmp)) | 			$($('.image').get().sort(cmp)) | ||||||
| 				.each(function(i, e){$(e).attr({'id': i})}) | 				.each(function(i, e){e.id = i})}) | ||||||
| 			// resort the images...
 | 			// resort the images...
 | ||||||
| 			ImageGrid.sortImages() | 			ImageGrid.sortImages() | ||||||
| 		}), | 		}), | ||||||
| @ -2161,8 +2212,8 @@ ImageGrid.GROUP('Image manipulation', | |||||||
| 		// XXX this should use a normalized path...
 | 		// XXX this should use a normalized path...
 | ||||||
| 		function sortImagesByPath(){ | 		function sortImagesByPath(){ | ||||||
| 			ImageGrid.sortImagesVia(function(a, b){  | 			ImageGrid.sortImagesVia(function(a, b){  | ||||||
| 				a = $(a).css('background-image') | 				a = getURL($(a).attr('id')) | ||||||
| 				b = $(b).css('background-image')  | 				b = getURL($(b).attr('id')) | ||||||
| 				return a > b ? 1 : a < b ? -1 : 0 | 				return a > b ? 1 : a < b ? -1 : 0 | ||||||
| 			}) | 			}) | ||||||
| 		})) | 		})) | ||||||
|  | |||||||
| @ -29,10 +29,9 @@ function loadJSONfile(path, escape_urls){ | |||||||
| 				var image = images[id] | 				var image = images[id] | ||||||
| 				// escape the url ...
 | 				// escape the url ...
 | ||||||
| 				var o = /([a-zA-Z0-9]*:)(.*)/.exec(image.url) | 				var o = /([a-zA-Z0-9]*:)(.*)/.exec(image.url) | ||||||
| 				if(o.length == 3){ | 				if(o != null){ | ||||||
| 					image.url = o[1] + escape(o[2]) | 					image.url = o[1] + escape(o[2]) | ||||||
| 				} else { | 				} else { | ||||||
| 					console.log('no schema...') |  | ||||||
| 					image.url = escape(image.url) | 					image.url = escape(image.url) | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user