| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | <script src="../jquery.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .field { | 
					
						
							|  |  |  | 	width: auto; | 
					
						
							|  |  |  | 	overflow: visible; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .ribbon { | 
					
						
							|  |  |  | 	padding: 10px; | 
					
						
							|  |  |  | 	height: 100px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	width: auto; | 
					
						
							|  |  |  | 	overflow: visible; | 
					
						
							|  |  |  | 	white-space: nowrap; | 
					
						
							|  |  |  | 	font-size: 0px; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .image { | 
					
						
							|  |  |  | 	display: inline-block; | 
					
						
							|  |  |  | 	height: 80px; | 
					
						
							|  |  |  | 	width: 80px; | 
					
						
							|  |  |  | 	background: silver; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .current.image { | 
					
						
							|  |  |  | 	background: gray; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .unloaded.image { | 
					
						
							|  |  |  | 	opacity: 0.5; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-07 13:48:47 +04:00
										 |  |  | /* CSS visibility to make the load on the browser less */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .image:nth-child(3) ~ .image { | 
					
						
							|  |  |  | 	background: red; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | </style> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <div class="field"> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var json = { | 
					
						
							|  |  |  | 	position: 10,  | 
					
						
							|  |  |  | 	ribbons:[ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			3: {}, | 
					
						
							|  |  |  | 			4: {}, | 
					
						
							|  |  |  | 			6: {}, | 
					
						
							|  |  |  | 			7: {}, | 
					
						
							|  |  |  | 			8: {}, | 
					
						
							|  |  |  | 			10: {}, | 
					
						
							|  |  |  | 			12: {}, | 
					
						
							|  |  |  | 			13: {}, | 
					
						
							|  |  |  | 			18: {}, | 
					
						
							|  |  |  | 			19: {}, | 
					
						
							|  |  |  | 			20: {}, | 
					
						
							|  |  |  | 			30: {}, | 
					
						
							|  |  |  | 			34: {}, | 
					
						
							|  |  |  | 			37: {}, | 
					
						
							|  |  |  | 			40: {}, | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			103: {}, | 
					
						
							|  |  |  | 			104: {}, | 
					
						
							|  |  |  | 			106: {}, | 
					
						
							|  |  |  | 			107: {}, | 
					
						
							|  |  |  | 			108: {}, | 
					
						
							|  |  |  | 			1010: {}, | 
					
						
							|  |  |  | 			1012: {}, | 
					
						
							|  |  |  | 			1013: {}, | 
					
						
							|  |  |  | 			1018: {}, | 
					
						
							|  |  |  | 			1019: {}, | 
					
						
							|  |  |  | 			1020: {}, | 
					
						
							|  |  |  | 			1030: {}, | 
					
						
							|  |  |  | 			1034: {}, | 
					
						
							|  |  |  | 			1037: {}, | 
					
						
							|  |  |  | 			1040: {}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			203: {}, | 
					
						
							|  |  |  | 			204: {}, | 
					
						
							|  |  |  | 			206: {}, | 
					
						
							|  |  |  | 			207: {}, | 
					
						
							|  |  |  | 			208: {}, | 
					
						
							|  |  |  | 			2010: {}, | 
					
						
							|  |  |  | 			2012: {}, | 
					
						
							|  |  |  | 			2013: {}, | 
					
						
							|  |  |  | 			2018: {}, | 
					
						
							|  |  |  | 			2019: {}, | 
					
						
							|  |  |  | 			2020: {}, | 
					
						
							|  |  |  | 			2030: {}, | 
					
						
							|  |  |  | 			2034: {}, | 
					
						
							|  |  |  | 			2037: {}, | 
					
						
							|  |  |  | 			2040: {}, | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	] | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var LOAD = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | function enumerate(obj, predicate){ | 
					
						
							|  |  |  | 	if(predicate == null){ | 
					
						
							|  |  |  | 		predicate = function(o, a){return true} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var res = [] | 
					
						
							|  |  |  | 	for(var k in obj){ | 
					
						
							|  |  |  | 		predicate(obj, k) && res.push(k) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return res | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // build an image element... | 
					
						
							|  |  |  | function makeImage(id){ | 
					
						
							|  |  |  | 	return $('<div class="image"/>') | 
					
						
							|  |  |  | 			.attr({id: id}) | 
					
						
							| 
									
										
										
										
											2012-09-04 03:50:16 +04:00
										 |  |  | 			.mousedown(selectImage) | 
					
						
							| 
									
										
										
										
											2012-09-04 01:06:35 +04:00
										 |  |  | 			.addClass('unloaded') | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function loadJSON(json){ | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 	var field = $('.field') | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | 	var cur_id = json.position+'' | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 	var ribbons = json.ribbons | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | 	var r = Math.floor(LOAD/2) | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | 	var view_ribbons = $('.ribbon') | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | 	for(var i=0; i<ribbons.length; i++){ | 
					
						
							|  |  |  | 		var images = ribbons[i] | 
					
						
							|  |  |  | 		var index = enumerate(images) | 
					
						
							| 
									
										
										
										
											2012-09-04 01:06:35 +04:00
										 |  |  | 		var ribbon = $('<div class="ribbon"/>').appendTo(field) | 
					
						
							|  |  |  | 		for(var j in images){ | 
					
						
							|  |  |  | 			makeImage(j).appendTo(ribbon) | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-09-04 03:50:16 +04:00
										 |  |  | 	$('#'+cur_id).mousedown() | 
					
						
							| 
									
										
										
										
											2012-09-04 01:06:35 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-04 03:50:16 +04:00
										 |  |  | function updateRibbonImages(img, r){ | 
					
						
							| 
									
										
										
										
											2012-09-04 01:06:35 +04:00
										 |  |  | 	var images = img.parents('.ribbon').children('.image') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var cur_i = images.index(img) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// load... | 
					
						
							|  |  |  | 	var loading = $([]) | 
					
						
							|  |  |  | 	for(var i=Math.max(0, cur_i-r); i<=Math.min(images.length, cur_i+r); i++){ | 
					
						
							|  |  |  | 		loading.push(images[i]) | 
					
						
							|  |  |  | 		images[i] = {} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-09-04 03:50:16 +04:00
										 |  |  | 	// do the loading... | 
					
						
							|  |  |  | 	loading.filter('.unloaded') | 
					
						
							| 
									
										
										
										
											2012-09-04 01:06:35 +04:00
										 |  |  | 		.addClass('loaded') | 
					
						
							|  |  |  | 		.removeClass('unloaded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// unload... | 
					
						
							|  |  |  | 	images.filter('.loaded').removeClass('loaded').addClass('unloaded') | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-03 23:22:00 +04:00
										 |  |  | function selectImage(){ | 
					
						
							|  |  |  | 	// update view... | 
					
						
							|  |  |  | 	$('.current.image').removeClass('current') | 
					
						
							|  |  |  | 	$(this).addClass('current') | 
					
						
							|  |  |  | 	// update json... | 
					
						
							|  |  |  | 	json.position = $(this).attr('id') | 
					
						
							|  |  |  | 	// update visible images... | 
					
						
							| 
									
										
										
										
											2012-09-04 01:06:35 +04:00
										 |  |  | 	//loadJSON(json) | 
					
						
							| 
									
										
										
										
											2012-09-04 03:50:16 +04:00
										 |  |  | 	updateRibbonImages($('.current.image'), Math.floor(LOAD/2)) | 
					
						
							| 
									
										
										
										
											2012-09-03 22:03:43 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | loadJSON(json) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 |