CGI-WebToolkit

 view release on metacpan or  search on metacpan

t/private/javascripts/jscolor.js  view on Meta::CPAN

				jscolor.picker.box.appendChild(jscolor.picker.sldM)
				jscolor.picker.padB.appendChild(jscolor.picker.pad)
				jscolor.picker.box.appendChild(jscolor.picker.padB)
				jscolor.picker.box.appendChild(jscolor.picker.padM)
				jscolor.picker.boxB.appendChild(jscolor.picker.box)
			}

			var p = jscolor.picker

			// recompute controls positions
			posPad = [
				x+THIS.pickerBorder+THIS.pickerFace+THIS.pickerInset,
				y+THIS.pickerBorder+THIS.pickerFace+THIS.pickerInset ]
			posSld = [
				null,
				y+THIS.pickerBorder+THIS.pickerFace+THIS.pickerInset ]

			// controls interaction
			p.box.onmouseup =
			p.box.onmouseout = function() { target.focus() }
			p.box.onmousedown = function() { abortBlur=true }
			p.box.onmousemove = function(e) { holdPad && setPad(e); holdSld && setSld(e) }
			p.padM.onmouseup =
			p.padM.onmouseout = function() { if(holdPad) { holdPad=false; jscolor.fireEvent(valueElement,'change') } }
			p.padM.onmousedown = function(e) { holdPad=true; setPad(e) }
			p.sldM.onmouseup =
			p.sldM.onmouseout = function() { if(holdSld) { holdSld=false; jscolor.fireEvent(valueElement,'change') } }
			p.sldM.onmousedown = function(e) { holdSld=true; setSld(e) }

			// picker
			p.box.style.width = 4*THIS.pickerInset + 2*THIS.pickerFace + jscolor.images.pad[0] + 2*jscolor.images.arrow[0] + jscolor.images.sld[0] + 'px'
			p.box.style.height = 2*THIS.pickerInset + 2*THIS.pickerFace + jscolor.images.pad[1] + 'px'

			// picker border
			p.boxB.style.position = 'absolute'
			p.boxB.style.clear = 'both'
			p.boxB.style.left = x+'px'
			p.boxB.style.top = y+'px'
			p.boxB.style.zIndex = THIS.pickerZIndex
			p.boxB.style.border = THIS.pickerBorder+'px solid'
			p.boxB.style.borderColor = THIS.pickerBorderColor
			p.boxB.style.background = THIS.pickerFaceColor

			// pad image
			p.pad.style.width = jscolor.images.pad[0]+'px'
			p.pad.style.height = jscolor.images.pad[1]+'px'

			// pad border
			p.padB.style.position = 'absolute'
			p.padB.style.left = THIS.pickerFace+'px'
			p.padB.style.top = THIS.pickerFace+'px'
			p.padB.style.border = THIS.pickerInset+'px solid'
			p.padB.style.borderColor = THIS.pickerInsetColor

			// pad mouse area
			p.padM.style.position = 'absolute'
			p.padM.style.left = '0'
			p.padM.style.top = '0'
			p.padM.style.width = THIS.pickerFace + 2*THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px'
			p.padM.style.height = p.box.style.height
			p.padM.style.cursor = 'crosshair'

			// slider image
			p.sld.style.overflow = 'hidden'
			p.sld.style.width = jscolor.images.sld[0]+'px'
			p.sld.style.height = jscolor.images.sld[1]+'px'

			// slider border
			p.sldB.style.position = 'absolute'
			p.sldB.style.right = THIS.pickerFace+'px'
			p.sldB.style.top = THIS.pickerFace+'px'
			p.sldB.style.border = THIS.pickerInset+'px solid'
			p.sldB.style.borderColor = THIS.pickerInsetColor

			// slider mouse area
			p.sldM.style.position = 'absolute'
			p.sldM.style.right = '0'
			p.sldM.style.top = '0'
			p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2*THIS.pickerInset + 'px'
			p.sldM.style.height = p.box.style.height
			try {
				p.sldM.style.cursor = 'pointer'
			} catch(eOldIE) {
				p.sldM.style.cursor = 'hand'
			}

			// load images in optimal order
			switch(modeID) {
				case 0: var padImg = 'hs.png'; break
				case 1: var padImg = 'hv.png'; break
			}
			p.padM.style.background = "url('"+jscolor.getDir()+"cross.gif') no-repeat"
			p.sldM.style.background = "url('"+jscolor.getDir()+"arrow.gif') no-repeat"
			p.pad.style.background = "url('"+jscolor.getDir()+padImg+"') 0 0 no-repeat"

			// place pointers
			redrawPad()
			redrawSld()

			jscolor.picker.owner = THIS
			document.getElementsByTagName('body')[0].appendChild(p.boxB)
		}


		function redrawPad() {
			// redraw the pad pointer
			switch(modeID) {
				case 0: var yComponent = 1; break
				case 1: var yComponent = 2; break
			}
			var x = Math.round((THIS.hsv[0]/6) * (jscolor.images.pad[0]-1))
			var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.pad[1]-1))
			jscolor.picker.padM.style.backgroundPosition =
				(THIS.pickerFace+THIS.pickerInset+x - Math.floor(jscolor.images.cross[0]/2)) + 'px ' +
				(THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.cross[1]/2)) + 'px'

			// redraw the slider image
			var seg = jscolor.picker.sld.childNodes

			switch(modeID) {
				case 0:
					var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1)
					for(var i=0; i<seg.length; i++) {
						seg[i].style.backgroundColor = 'rgb('+
							(rgb[0]*(1-i/seg.length)*100)+'%,'+
							(rgb[1]*(1-i/seg.length)*100)+'%,'+
							(rgb[2]*(1-i/seg.length)*100)+'%)'
					}
					break
				case 1:
					var rgb, s, c = [ THIS.hsv[2], 0, 0 ]
					var i = Math.floor(THIS.hsv[0])
					var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i)
					switch(i) {
						case 6:
						case 0: rgb=[0,1,2]; break
						case 1: rgb=[1,0,2]; break
						case 2: rgb=[2,0,1]; break
						case 3: rgb=[2,1,0]; break
						case 4: rgb=[1,2,0]; break
						case 5: rgb=[0,2,1]; break
					}
					for(var i=0; i<seg.length; i++) {
						s = 1 - 1/(seg.length-1)*i



( run in 1.679 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )