diff options
author | 2017-02-07 11:47:55 -0500 | |
---|---|---|
committer | 2017-02-07 12:51:32 -0500 | |
commit | 1faf201e8608dfa4d7af3460fd3d1fc7ebec398b (patch) | |
tree | 2208f76271cc6b1a81dbfb9143cd7118b071a909 /ecomp-sdk/sdk-app/src/main/webapp/static/fusion/raptor/js/script.js | |
parent | ca23569858b8cc9f60010e193b7041feb2d3227b (diff) |
Initial OpenECOMP Portal SDK commit
Change-Id: I66a3491600a4b9ea241128dc29267eed6a78ed76
Signed-off-by: talasila <talasila@research.att.com>
Diffstat (limited to 'ecomp-sdk/sdk-app/src/main/webapp/static/fusion/raptor/js/script.js')
-rw-r--r-- | ecomp-sdk/sdk-app/src/main/webapp/static/fusion/raptor/js/script.js | 482 |
1 files changed, 482 insertions, 0 deletions
diff --git a/ecomp-sdk/sdk-app/src/main/webapp/static/fusion/raptor/js/script.js b/ecomp-sdk/sdk-app/src/main/webapp/static/fusion/raptor/js/script.js new file mode 100644 index 00000000..ea153016 --- /dev/null +++ b/ecomp-sdk/sdk-app/src/main/webapp/static/fusion/raptor/js/script.js @@ -0,0 +1,482 @@ +// A few configuration settings +var CROSSHAIRS_LOCATION = 'static/fusion/raptor/images/crosshairs.png'; +var HUE_SLIDER_LOCATION = 'static/fusion/raptor/images/h.png'; +var HUE_SLIDER_ARROWS_LOCATION = 'static/fusion/raptor/images/position.png'; +var SAT_VAL_SQUARE_LOCATION = 'static/fusion/raptor/images/sv.png'; + +// Here are some boring utility functions. The real code comes later. + +function hexToRgb(hex_string, default_) +{ + if (default_ == undefined) + { + default_ = null; + } + + if (hex_string.substr(0, 1) == '#') + { + hex_string = hex_string.substr(1); + } + + var r; + var g; + var b; + if (hex_string.length == 3) + { + r = hex_string.substr(0, 1); + r += r; + g = hex_string.substr(1, 1); + g += g; + b = hex_string.substr(2, 1); + b += b; + } + else if (hex_string.length == 6) + { + r = hex_string.substr(0, 2); + g = hex_string.substr(2, 2); + b = hex_string.substr(4, 2); + } + else + { + return default_; + } + + r = parseInt(r, 16); + g = parseInt(g, 16); + b = parseInt(b, 16); + if (isNaN(r) || isNaN(g) || isNaN(b)) + { + return default_; + } + else + { + return {r: r / 255, g: g / 255, b: b / 255}; + } +} + +function rgbToHex(r, g, b, includeHash) +{ + r = Math.round(r * 255); + g = Math.round(g * 255); + b = Math.round(b * 255); + if (includeHash == undefined) + { + includeHash = true; + } + + r = r.toString(16); + if (r.length == 1) + { + r = '0' + r; + } + g = g.toString(16); + if (g.length == 1) + { + g = '0' + g; + } + b = b.toString(16); + if (b.length == 1) + { + b = '0' + b; + } + return ((includeHash ? '#' : '') + r + g + b).toUpperCase(); +} + +var arVersion = navigator.appVersion.split("MSIE"); +var version = parseFloat(arVersion[1]); + +function fixPNG(myImage) +{ + if ((version >= 5.5) && (version < 7) && (document.body.filters)) + { + var node = document.createElement('span'); + node.id = myImage.id; + node.className = myImage.className; + node.title = myImage.title; + node.style.cssText = myImage.style.cssText; + node.style.setAttribute('filter', "progid:DXImageTransform.Microsoft.AlphaImageLoader" + + "(src=\'" + myImage.src + "\', sizingMethod='scale')"); + node.style.fontSize = '0'; + node.style.width = myImage.width.toString() + 'px'; + node.style.height = myImage.height.toString() + 'px'; + node.style.display = 'inline-block'; + return node; + } + else + { + return myImage.cloneNode(false); + } +} + +function trackDrag(node, handler) +{ + function fixCoords(x, y) + { + var nodePageCoords = pageCoords(node); + x = (x - nodePageCoords.x) + document.documentElement.scrollLeft; + y = (y - nodePageCoords.y) + document.documentElement.scrollTop; + if (x < 0) x = 0; + if (y < 0) y = 0; + if (x > node.offsetWidth - 1) x = node.offsetWidth - 1; + if (y > node.offsetHeight - 1) y = node.offsetHeight - 1; + return {x: x, y: y}; + } + function mouseDown(ev) + { + var coords = fixCoords(ev.clientX, ev.clientY); + var lastX = coords.x; + var lastY = coords.y; + handler(coords.x, coords.y); + + function moveHandler(ev) + { + var coords = fixCoords(ev.clientX, ev.clientY); + if (coords.x != lastX || coords.y != lastY) + { + lastX = coords.x; + lastY = coords.y; + handler(coords.x, coords.y); + } + } + function upHandler(ev) + { + myRemoveEventListener(document, 'mouseup', upHandler); + myRemoveEventListener(document, 'mousemove', moveHandler); + myAddEventListener(node, 'mousedown', mouseDown); + } + myAddEventListener(document, 'mouseup', upHandler); + myAddEventListener(document, 'mousemove', moveHandler); + myRemoveEventListener(node, 'mousedown', mouseDown); + if (ev.preventDefault) ev.preventDefault(); + } + myAddEventListener(node, 'mousedown', mouseDown); + node.onmousedown = function(e) { return false; }; + node.onselectstart = function(e) { return false; }; + node.ondragstart = function(e) { return false; }; +} + +var eventListeners = []; + +function findEventListener(node, event, handler) +{ + var i; + for (i in eventListeners) + { + if (eventListeners[i].node == node && eventListeners[i].event == event + && eventListeners[i].handler == handler) + { + return i; + } + } + return null; +} +function myAddEventListener(node, event, handler) +{ + if (findEventListener(node, event, handler) != null) + { + return; + } + + if (!node.addEventListener) + { + node.attachEvent('on' + event, handler); + } + else + { + node.addEventListener(event, handler, false); + } + + eventListeners.push({node: node, event: event, handler: handler}); +} + +function removeEventListenerIndex(index) +{ + var eventListener = eventListeners[index]; + delete eventListeners[index]; + + if (!eventListener.node.removeEventListener) + { + eventListener.node.detachEvent('on' + eventListener.event, + eventListener.handler); + } + else + { + eventListener.node.removeEventListener(eventListener.event, + eventListener.handler, false); + } +} + +function myRemoveEventListener(node, event, handler) +{ + removeEventListenerIndex(findEventListener(node, event, handler)); +} + +function cleanupEventListeners() +{ + var i; + for (i = eventListeners.length; i > 0; i--) + { + if (eventListeners[i] != undefined) + { + removeEventListenerIndex(i); + } + } +} +myAddEventListener(window, 'unload', cleanupEventListeners); + +// This copyright statement applies to the following two functions, +// which are taken from MochiKit. +// +// Copyright 2005 Bob Ippolito <bob@redivi.com> +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject +// to the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +function hsvToRgb(hue, saturation, value) +{ + var red; + var green; + var blue; + if (value == 0.0) + { + red = 0; + green = 0; + blue = 0; + } + else + { + var i = Math.floor(hue * 6); + var f = (hue * 6) - i; + var p = value * (1 - saturation); + var q = value * (1 - (saturation * f)); + var t = value * (1 - (saturation * (1 - f))); + switch (i) + { + case 1: red = q; green = value; blue = p; break; + case 2: red = p; green = value; blue = t; break; + case 3: red = p; green = q; blue = value; break; + case 4: red = t; green = p; blue = value; break; + case 5: red = value; green = p; blue = q; break; + case 6: // fall through + case 0: red = value; green = t; blue = p; break; + } + } + return {r: red, g: green, b: blue}; +} + +function rgbToHsv(red, green, blue) +{ + var max = Math.max(Math.max(red, green), blue); + var min = Math.min(Math.min(red, green), blue); + var hue; + var saturation; + var value = max; + if (min == max) + { + hue = 0; + saturation = 0; + } + else + { + var delta = (max - min); + saturation = delta / max; + if (red == max) + { + hue = (green - blue) / delta; + } + else if (green == max) + { + hue = 2 + ((blue - red) / delta); + } + else + { + hue = 4 + ((red - green) / delta); + } + hue /= 6; + if (hue < 0) + { + hue += 1; + } + if (hue > 1) + { + hue -= 1; + } + } + return { + h: hue, + s: saturation, + v: value + }; +} + +function pageCoords(node) +{ + var x = node.offsetLeft; + var y = node.offsetTop; + var parent = node.offsetParent; + while (parent != null) + { + x += parent.offsetLeft; + y += parent.offsetTop; + parent = parent.offsetParent; + } + return {x: x, y: y}; +} + +// The real code begins here. +var huePositionImg = document.createElement('img'); +huePositionImg.galleryImg = false; +huePositionImg.width = 35; +huePositionImg.height = 11; +huePositionImg.src = HUE_SLIDER_ARROWS_LOCATION; +huePositionImg.style.position = 'absolute'; + +var hueSelectorImg = document.createElement('img'); +hueSelectorImg.galleryImg = false; +hueSelectorImg.width = 35; +hueSelectorImg.height = 200; +hueSelectorImg.src = HUE_SLIDER_LOCATION; +hueSelectorImg.style.display = 'block'; + +var satValImg = document.createElement('img'); +satValImg.galleryImg = false; +satValImg.width = 200; +satValImg.height = 200; +satValImg.src = SAT_VAL_SQUARE_LOCATION; +satValImg.style.display = 'block'; + +var crossHairsImg = document.createElement('img'); +crossHairsImg.galleryImg = false; +crossHairsImg.width = 21; +crossHairsImg.height = 21; +crossHairsImg.src = CROSSHAIRS_LOCATION; +crossHairsImg.style.position = 'absolute'; + +function makeColorSelector(inputBox) +{ + var rgb, hsv + + function colorChanged() + { + var hex = rgbToHex(rgb.r, rgb.g, rgb.b); + var hueRgb = hsvToRgb(hsv.h, 1, 1); + var hueHex = rgbToHex(hueRgb.r, hueRgb.g, hueRgb.b); + previewDiv.style.background = hex; + inputBox.value = hex; + satValDiv.style.background = hueHex; + crossHairs.style.left = ((hsv.v*199)-10).toString() + 'px'; + crossHairs.style.top = (((1-hsv.s)*199)-10).toString() + 'px'; + huePos.style.top = ((hsv.h*199)-5).toString() + 'px'; + } + function rgbChanged() + { + hsv = rgbToHsv(rgb.r, rgb.g, rgb.b); + colorChanged(); + } + function hsvChanged() + { + rgb = hsvToRgb(hsv.h, hsv.s, hsv.v); + colorChanged(); + } + + var colorSelectorDiv = document.createElement('div'); + colorSelectorDiv.style.padding = '15px'; + colorSelectorDiv.style.position = 'relative'; + colorSelectorDiv.style.height = '275px'; + colorSelectorDiv.style.width = '250px'; + + var satValDiv = document.createElement('div'); + satValDiv.style.position = 'relative'; + satValDiv.style.width = '200px'; + satValDiv.style.height = '200px'; + var newSatValImg = fixPNG(satValImg); + satValDiv.appendChild(newSatValImg); + var crossHairs = crossHairsImg.cloneNode(false); + satValDiv.appendChild(crossHairs); + function satValDragged(x, y) + { + hsv.s = 1-(y/199); + hsv.v = (x/199); + hsvChanged(); + } + trackDrag(satValDiv, satValDragged) + colorSelectorDiv.appendChild(satValDiv); + + var hueDiv = document.createElement('div'); + hueDiv.style.position = 'absolute'; + hueDiv.style.left = '230px'; + hueDiv.style.top = '15px'; + hueDiv.style.width = '35px'; + hueDiv.style.height = '200px'; + var huePos = fixPNG(huePositionImg); + hueDiv.appendChild(hueSelectorImg.cloneNode(false)); + hueDiv.appendChild(huePos); + function hueDragged(x, y) + { + hsv.h = y/199; + hsvChanged(); + } + trackDrag(hueDiv, hueDragged); + colorSelectorDiv.appendChild(hueDiv); + + var previewDiv = document.createElement('div'); + previewDiv.style.height = '50px' + previewDiv.style.width = '50px'; + previewDiv.style.position = 'absolute'; + previewDiv.style.top = '225px'; + previewDiv.style.left = '15px'; + previewDiv.style.border = '1px solid black'; + colorSelectorDiv.appendChild(previewDiv); + + function inputBoxChanged() + { + rgb = hexToRgb(inputBox.value, {r: 0, g: 0, b: 0}); + rgbChanged(); + } + myAddEventListener(inputBox, 'change', inputBoxChanged); + inputBox.size = 8; + inputBox.style.position = 'absolute'; + inputBox.style.right = '15px'; + inputBox.style.top = (225 + (25 - (inputBox.offsetHeight/2))).toString() + 'px'; + colorSelectorDiv.appendChild(inputBox); + + inputBoxChanged(); + + return colorSelectorDiv; +} + +function makeColorSelectors(ev) +{ + var inputNodes = document.getElementsByTagName('input'); + var i; + for (i = 0; i < inputNodes.length; i++) + { + var node = inputNodes[i]; + if (node.className != 'color') + { + continue; + } + var parent = node.parentNode; + var prevNode = node.previousSibling; + var selector = makeColorSelector(node); + parent.insertBefore(selector, (prevNode ? prevNode.nextSibling : null)); + } +} + +myAddEventListener(window, 'load', makeColorSelectors); |