Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/symphony-solusi.co.id/public_html/theme/jotform/js/ |
Upload File : |
/* eslint-disable */ /** * UI Elements used in forms * this file is a sub document of protoplus-ui file * document.createNewWindow => Creates a new floating window * Element.tooltip => show a floating tooltip when mouse overed * Element.slider => Custom input slider * Element.spinner => Custom input spinner * Element.textshadow => Mimics CSS textshadow * Element.rating => Prints rating stars * Element.hint => Places hint texts into text boxs */ if(window.Protoplus === undefined){ throw("Error: ProtoPlus is required by ProtoPlus-UI.js"); } Object.extend(document, { getViewPortDimensions: function (){ // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight var height; var width; if (typeof window.innerWidth != 'undefined') { width = window.innerWidth; height = window.innerHeight; } else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth !== 0) { width = document.documentElement.clientWidth; height = document.documentElement.clientHeight; } else { // older IE width = document.getElementsByTagName('body')[0].clientWidth; height = document.getElementsByTagName('body')[0].clientHeight; } return {height: height, width: width}; }, /** * Stops and destroys all tooltips */ stopTooltips: function(){ document.stopTooltip = true; $$(".pp_tooltip_").each(function(t){ t.remove(); }); return true; }, /** * Resumes tooltips */ startTooltips: function(){ document.stopTooltip = false; } }); Protoplus.ui = { /** * Recursively check if the given element is visible or not */ isVisible: function(element){ element = $(element); if (!element.parentNode) { return false; } if (element && element.tagName == "BODY") { return true; } if (element.style.display == "none" || element.style.visibility == "hidden") { return false; } return Protoplus.ui.isVisible(element.parentNode); }, /** * Makes element draggable * @param {Object} element * @param {Object} options */ setDraggable:function(element, options){ options = Object.extend({ dragClass: "", handler: false, dragFromOriginal: false, // Disabled drag event on child elements onStart: Prototype.K, changeClone: Prototype.K, onDrag: Prototype.K, onDragEnd: Prototype.K, onEnd: Prototype.K, dragEffect: false, revert: false, clone: false, snap: false, cursor: "move", offset: false, // Constraints are somewhat buggy in internet explorer constraint: false, constrainLeft:false, constrainRight:false, constrainTop:false, constrainBottom:false, constrainOffset:false, // [top, right, bottom, left] constrainViewport:false, constrainParent: false, dynamic:true }, options || {}); if(options.snap && (typeof options.snap == "number" || typeof options.snap == "string")){ options.snap = [options.snap, options.snap]; } var mouseUp = "mouseup", mouseDown = "mousedown", mouseMove = "mousemove"; /* if(Prototype.Browser.MobileSafari){ // It's nice and all but There is a problem with finishing the event // Until it's fixed we cannot use this mouseUp = "touchend"; mouseDown = "touchstart"; mouseMove = "touchmove"; } */ if(options.constrainOffset){ if(options.constrainOffset.length == 4){ options.constrainTop = options.constrainTop? options.constrainTop : options.constrainOffset[0]; options.constrainRight = options.constrainRight? options.constrainRight : options.constrainOffset[1]; options.constrainBottom = options.constrainBottom? options.constrainBottom : options.constrainOffset[2]; options.constrainLeft = options.constrainLeft? options.constrainLeft : options.constrainOffset[3]; } } var handler; var stopDragTimer = false; var drag = function (e){ Event.stop(e); if(mouseMove == "touchmove"){ e = e.touches[0]; } if(options.onDrag(drag_element, handler, e) === false){ return; } var top = startY+(Number(Event.pointerY(e)-mouseY)); var left = startX+(Number(Event.pointerX(e)-mouseX)); if(options.offset){ top = options.offset[1]+ Event.pointerY(e); left = options.offset[0]+ Event.pointerX(e); } if(options.snap){ top = (top/options.snap[1]).round()*options.snap[1]; left = (left/options.snap[0]).round()*options.snap[0]; } top = (options.constrainBottom !== false && top >= options.constrainBottom)? options.constrainBottom : top; // Check for max top top = (options.constrainTop !== false && top <= options.constrainTop)? options.constrainTop : top; // Check for min top left = (options.constrainRight !== false && left >= options.constrainRight)? options.constrainRight : left; // Check for max left left = (options.constrainLeft !== false && left <= options.constrainLeft)? options.constrainLeft : left; // Check for min left if(options.constraint == "vertical"){ drag_element.setStyle({top: top+"px"}); }else if(options.constraint == "horizontal"){ drag_element.setStyle({left: left+"px"}); }else{ drag_element.setStyle({top: top+"px", left: left+"px"}); } if(stopDragTimer){ clearTimeout(stopDragTimer); } options.onDrag(drag_element, handler, e); stopDragTimer = setTimeout(function(){ options.onDragEnd(drag_element, handler, e); }, 50); }; var mouseup = function (ev){ Event.stop(ev); if(mouseUp == "touchend"){ ev = e.touches[0]; } if(options.dynamic !== true){ document.temp.setStyle({top:element.getStyle('top'), left:element.getStyle('left')}); element.parentNode.replaceChild(document.temp, element); document.temp.oldZIndex = element.oldZIndex; element = document.temp; } if(options.onEnd(drag_element, handler, ev) !== false){ if(element.oldZIndex){ drag_element.setStyle({zIndex: element.oldZIndex}); }else{ drag_element.setStyle({zIndex: ''}); } if(options.revert){ if(options.revert === true){ options.revert = { easing: "sineIn", duration: 0.5 }; } options.revert = Object.extend({ left:drag_element.startX, top:drag_element.startY, opacity:1, duration:0.5, easing:'sineIn' }, options.revert || {}); drag_element.shift(options.revert); drag_element.startX = false; drag_element.startY = false; }else{ if(options.dragEffect){ drag_element.shift({opacity: 1, duration:0.2}); } } } element.__dragging = false; drag_element.removeClassName(options.dragClass); handler.setSelectable(); drag_element.setSelectable(); $(document.body).setSelectable(); document.stopObserving(mouseMove, drag); document.stopObserving(mouseUp, mouseup); }; if (options.handler) { if (typeof options.handler == "string") { handler = (options.handler.startsWith(".")) ? element.descendants().find(function(h){ return h.className == options.handler.replace(/^\./, ""); }) : $(options.handler); } else { handler = $(options.handler); } }else{ handler = element; } handler.setStyle({cursor:options.cursor}); handler.observe(mouseDown, function(e){ Event.stop(e); var evt = e; if(mouseDown == "touchstart"){ e = e.touches[0]; } element.__dragging = true; if(document.stopDrag){ return true; } if(options.dragFromOriginal && e.target != handler) { return false; } var vdim = false, voff = false; if(options.constrainElement) { voff = (Prototype.Browser.IE)? {top:0, left:0} : $(options.constrainElement).cumulativeOffset(); vdim = $(options.constrainElement).getDimensions(); } if(options.constrainParent) { if($(element.parentNode).getStyle('position') == "relative" || $(element.parentNode).getStyle('position') == "absolute"){ voff = {top:0, left:0}; }else{ voff = (Prototype.Browser.IE)? {top:0, left:0} : $(element.parentNode).cumulativeOffset(); } vdim = $(element.parentNode).getDimensions(); } if(options.constrainViewport){ voff = $(document.body).cumulativeScrollOffset(); //{top:0, left:0}; vdim = document.viewport.getDimensions(); } if(vdim){ vdim.height+=voff.top; vdim.width+=voff.left; options.constrainTop = voff.top+1; options.constrainBottom = vdim.height-(element.getHeight()+3); options.constrainRight = vdim.width-(element.getWidth()+3); options.constrainLeft = voff.left+1; } var temp_div; if(options.dynamic !== true){ try{ document.temp = element; temp_div = new Element('div').setStyle({ height: element.getHeight()+"px", width:element.getWidth()+"px", border:'1px dashed black', top: element.getStyle('top') || 0, left: element.getStyle('left') || 0, zIndex: element.getStyle('zIndex')||0, position:element.getStyle('position'), background:'#f5f5f5', opacity:0.3 }); }catch(err){} element.parentNode.replaceChild(temp_div, element); element = temp_div; } if(["relative", "absolute"].include($(element.parentNode).getStyle('position'))){ startX = element.getStyle("left")? parseInt(element.getStyle("left"), 10) : element.offsetLeft; startY = element.getStyle("top")? parseInt(element.getStyle("top"), 10) : element.offsetTop; }else{ var eloff = element.cumulativeOffset(); startX = eloff.left; startY = eloff.top; } mouseX = Number(Event.pointerX(e)); mouseY = Number(Event.pointerY(e)); if (options.clone) { drag_element = options.changeClone(element.cloneNode({deep: true}), startX, startY); $(document.body).insert(drag_element); }else{ drag_element = element; } options.onStart(drag_element, handler, e); drag_element.addClassName(options.dragClass); element.oldZIndex = element.getStyle("z-index")||0; if(options.dragEffect){ drag_element.shift({opacity: 0.7, duration:0.2}); } drag_element.setStyle({position: "absolute", zIndex:99998}); if(options.revert && !drag_element.startX && !drag_element.startY){ drag_element.startX = startX; drag_element.startY = startY; } drag_element.setUnselectable(); handler.setUnselectable(); $(document.body).setUnselectable(); document.observe(mouseMove, drag); document.observe(mouseUp, mouseup); }); return element; }, /** * Creates a tooltion on an element * @param {Object} element * @param {Object} text * @param {Object} options */ tooltip: function(element, text, options){ element = $(element); // If prototip is included use it instead if('Prototip' in window){ options = Object.extend({ delay: 0.01 }, options || {}); var T = new Tip(element, text, options); return element; } // removed for whatever.. // return element; if(typeof text != "string"){ return element; } options = Object.extend({ className: false, fixed:false, opacity:1, title:false, width:200, height:100, offset:false, zIndex:100000, delay:false, duration:false, fadeIn:false, fadeOut:false, shadow:false }, options || {}); text = (options.title)? "<b>"+options.title+"</b><br>"+text : text; element.hover(function(el, evt){ var vpd = document.viewport.getDimensions(); var getBoxLocation = function(e){ var offTop = options.offset.top? options.offset.top : 15; var offLeft = options.offset.left? options.offset.left : 15; var top = (Event.pointerY(e)+offTop); var left = (Event.pointerX(e)+offLeft); var dim = tooldiv.getDimensions(); // Keep the box in viewport if(left + dim.width > (vpd.width - 20)) { left -= dim.width + 20 + offLeft; } if(top + dim.height > (vpd.height - 20)){ top -= dim.height + offTop; } return {top:top, left:left}; }; if(document.stopTooltip){ $$(".pp_tooltip_").each(function(t){ t.remove(); }); return true; } outer = new Element("div", {className:'pp_tooltip_'}).setStyle({ opacity:options.opacity, position:"absolute", zIndex:options.zIndex}); if(options.className){ tooldiv = new Element("div", {className:options.className}).setStyle({position:"relative", top:"0px", left:"0px", zIndex:10}).update(text); }else{ tooldiv = new Element("div").setStyle({padding:"4px", background: "#eee", width:(options.width == "auto"? "auto" : options.width+"px"), border:"1px solid #333", position:"absolute", top:"0px", left:"0px", zIndex:10}).update(text); tooldiv.setCSSBorderRadius('5px'); } if(options.shadow){ shadTop = options.shadow.top? parseInt(options.shadow.top, 10) : 4; shadLeft = options.shadow.left? parseInt(options.shadow.left, 10) : 4; shadBack = options.shadow.back? options.shadow.back : "#000"; shadOp = options.shadow.opacity? options.shadow.opacity : 0.2; if (options.className) { shadow = new Element("div", {className: options.className || ""}).setStyle({position:"absolute", borderColor:"#000", color:"#000", top:shadTop+"px", left:shadLeft+"px", zIndex:9, background:shadBack, opacity:shadOp}); shadow.update(text); }else{ shadow = new Element("div", {className: options.className || ""}).setStyle({padding:"4px", border:"1px solid black", color:"#000", width:options.width+"px", position:"absolute", top:shadTop+"px", left:shadLeft+"px", zIndex:9, background:shadBack, opacity:shadOp}); shadow.setCSSBorderRadius('5px'); shadow.update(text); } outer.appendChild(shadow); } outer.appendChild(tooldiv); /* var removeButton = new Element('div'); removeButton.innerHTML = 'X'; removeButton.setStyle({ cursor:'pointer', border:'1px solid #666', background:'#cecece', textAlign:'center', top:'1px', width:'15px', position:'absolute', right:'1px', zIndex:1000 }); removeButton.setCSSBorderRadius('4px'); tooldiv.appendChild(removeButton); removeButton.observe('click', function(){ outer.parentNode.removeChild(outer); }); */ var makeItAppear = function(){ if (options.fixed) { var fixTop = options.fixed.top? parseInt(options.fixed.top, 10) : element.getHeight(); var fixLeft = options.fixed.left? parseInt(options.fixed.left, 10) : element.getWidth()-50; outer.setStyle({ top: fixTop+"px", left: fixLeft+"px"}); }else{ element.observe("mousemove", function(e){ if(document.stopTooltip){ $$(".pp_tooltip_").each(function(t){ t.remove(); }); return true; } var loc = getBoxLocation(e); // Keep the box in viewport outer.setStyle({ top: loc.top+"px", left: loc.left+"px"}); }); } }; outer.delay = setTimeout(function(){ if(options.fadeIn){ document.body.appendChild(outer); var fl = getBoxLocation(evt); outer.setStyle({opacity: 0, top:fl.top+"px", left:fl.left+"px"}); dur = options.fadeIn.duration? options.fadeIn.duration : 1; outer.appear({duration:dur, onEnd:makeItAppear()}); }else{ document.body.appendChild(outer); var l = getBoxLocation(evt); outer.setStyle({top:l.top+"px", left:l.left+"px"}); setTimeout(makeItAppear, 100); } if (options.duration) { outer.duration = setTimeout(function(){ if (options.fadeOut) { dur = options.fadeOut.duration ? options.fadeOut.duration : 1; outer.fade({duration: dur, onEnd: function(){ if(outer.parentNode){ outer.remove(); } }}); }else{ if(outer.parentNode){ outer.remove(); } } }, options.duration * 1000 || 0); } }, options.delay*1000 || 0); },function(){ if(document.stopTooltip){ $$(".pp_tooltip_").each(function(t){ t.remove(); }); return true; } if(outer){ clearTimeout(outer.delay); clearTimeout(outer.duration); } if(options.fadeOut){ dur = options.fadeOut.duration? options.fadeOut.duration : 0.2; outer.fade({duration:dur, onEnd:function(){ if(outer.parentNode){ outer.remove(); } }}); }else{ if(outer.parentNode){ outer.remove(); } } }); return element; }, /** * Creates Star rating element. Requires stars.png * @param {Object} element * @param {Object} options */ rating: function(element, options){ var isNewTheme = element.getAttribute('data-version') === 'v2'; var starWidth = isNewTheme ? 32 : 16; var starHeight = isNewTheme ? 30 : 16; element = $(element); options = Object.extend({ imagePath: "stars.png", onRate: Prototype.K, resetButtonImage:false, resetButtonTitle: 'Cancel Your Rating', resetButton:true, inputClassName:'', titles: [], // Give an array of titles for corresponding stars disable:false, // Disable element just after user gives a rating. disabled: element.getAttribute("disabled")? element.getAttribute("disabled") : false, stars: element.getAttribute("stars")? element.getAttribute("stars") : 5, name: element.getAttribute("name")? element.getAttribute("name") : "rating", value: element.getAttribute("value")? element.getAttribute("value") : 0, cleanFirst: false }, options || {}); // Don't allow element to be starred again if(element.converted){ return element; } element.converted = true; element.addClassName('form-star-rating'); var image = { blank: "0px 0px", over: -1 * starWidth + "px 0px", clicked: -2 * starWidth + "px 0px", half: -3 * starWidth + "px 0px", error: -4 * starWidth + "px 0px" }; var hidden = new Element("input", {type:"hidden", name:options.name, className:options.inputClassName}); var stardivs = $A([]); // Make Element Disabled element.disabled = (options.disabled=="true" || options.disabled === true)? true : false; element.setStyle({ cursor: options.disabled ? "default" : "pointer" /*, clear:"left"*/ }); element.setUnselectable(); if(options.cleanFirst){ element.update(); } var setStar = function(i){ var elval = i; i = i || 0; var desc = $A(element.descendants()); if (isNewTheme && element.querySelectorAll('.rated').length === i){ desc[i-1].setStyle({ backgroundPosition:image.blank}).removeClassName("rated"); i = i-1; } desc.each(function(e,c){ if((i-1) < c){ e.setStyle({ backgroundPosition:image.blank}).removeClassName("rated"); } else { if(c<i){ e.setStyle({backgroundPosition:image.clicked}).addClassName("rated") } } }); hidden.value = i || ""; if(options.disable){ element.disabled = true; element.setStyle({cursor:"default"}); } element.value = elval; options.onRate(element, options.name, i); element.run('keyup'); hidden.run('change'); if(!isNewTheme && options.resetButton){ cross[ (i === 0)? "hide" : "show" ](); // Show or hide the resetButton } }; /** * External method for setting the rating manually */ element.setRating = setStar; $A($R(1, options.stars)).each(function(i){ var starStyle = { backgroundImage: "url("+options.imagePath+")" }; var star = new Element("div").setStyle(starStyle); star.observe("mouseover", function(){ if(!element.disabled){ var desc = $A(element.descendants()); desc.each(function(e, c){ if(c < i){ e.setStyle({ backgroundPosition: e.hasClassName("rated")? image.clicked : image.over }); } }); } }).observe("click", function(){ if (!element.disabled) { setStar(i); } }); if(options.titles && options.titles[i-1]){ star.title = options.titles[i-1]; } stardivs.push(star); }); if (!options.disabled) { element.observe("mouseout", function(){ element.descendants().each(function(e){ // if rated then clicked, if not check if errored and new themethen apply errored if not apply blank e.setStyle({ backgroundPosition: e.hasClassName("rated") ? image.clicked : hidden.errored && isNewTheme ? image.error : image.blank }); }); }); } if(options.resetButton){ var cross = new Element("div").setStyle({height:"16px", width:"16px", margin:"0.5px", cssFloat:"left", color:'#999', fontSize:'12px', textAlign:'center'}); if(options.resetButtonImage){ cross.insert(new Element('img', {src:options.resetButtonImage, align:'absmiddle'})); }else{ cross.insert(' x '); } cross.title = options.resetButtonTitle; cross.hide(); cross.observe('click', function(){ setStar(undefined); }); stardivs.push(cross); } stardivs.each(function(star){ element.insert(star); }); element.insert(hidden); if(options.value > 0){ element.descendants().each(function(e, c){ c++; if(c <= options.value){ e.setStyle({backgroundPosition:image.clicked }).addClassName("rated"); } if(options.value > c-1 && options.value < c){ e.setStyle({backgroundPosition:image.half }).addClassName("rated"); } }); hidden.value = options.value; } return element; }, /** * Slider tool * @param {Object} element * @param {Object} options */ slider:function(element, options){ element = $(element); options = Object.extend({ width:100, onUpdate:Prototype.K, maxValue:100, value:0, buttonBack:'url("../images/ball.png") no-repeat scroll 0px 0px transparent' }, options || {}); if("JotForm" in window && "url" in JotForm){ options.buttonBack = 'url("'+JotForm.url+'/images/ball.png") no-repeat scroll 0px 0px transparent'; } var valueToPixel = function(value){ var val = (value*100/options.maxValue)*barWidth/100; val = val < 3? 3 : val; return Math.round(val); }; var sliderOut = new Element('div', {tabindex:1}); var sliderBar = new Element('div'); var sliderButton = new Element('div', {id:new Date().getTime()}); var sliderTable = new Element('table', {cellpadding:0, cellspacing:1, border:0, width:options.width, className:element.className}); var tbody = new Element('tbody'); var tr = new Element('tr'); var tr2 = new Element('tr'); var sliderTD = new Element('td', {colspan:3}); var startTD = new Element('td', {align:'center', width:20}).insert('0'); var statTD = new Element('td', {align:'center', width:options.width-40}).insert(options.value).setStyle('font-weight:bold'); var endTD = new Element('td', {align:'center', width:20}).insert(options.maxValue); var barWidth = options.width-18; var defaultValue = options.value; options.value = valueToPixel(options.value); /** * Moves the button left side by given value * @param {Object} amount */ var moveLEFT = function(amount){ var l = parseInt(sliderButton.getStyle('left'),10)-amount; l = (l <= 3)? 3 : l; sliderButton.setStyle({left:l+"px"}); updateValue(l); }; /** * Moves the button right side by given value * @param {Object} amount */ var moveRIGTH = function(amount){ var l = parseInt(sliderButton.getStyle('left'),10)+amount; l = (l >= barWidth)? barWidth : l; sliderButton.setStyle({left:l+"px"}); updateValue(l); }; /** * Handle key events * @param {Object} e */ var sliderKeys = function(e){ e = document.getEvent(e); if(e.keyCode == 37){ moveLEFT(5); }else if(e.keyCode == 39){ moveRIGTH(5); } }; /** * Handle wheel events * @param {Object} e */ var sliderWheel = function(e){ if(!sliderOut.__hasFocus){ return true; } e.stop(); sliderOut.focus(); var w = Event.wheel(e); if(w > 0){ moveRIGTH(5); // If scroll up then move to the right }else if(w < 0){ moveLEFT(5); } // else move to the left }; /** * Calculate the selected value ove 100 * @param {Object} pos * @param {Object} start * @param {Object} end */ var updateValue = function(pos){ var total = barWidth; if(parseInt(pos, 10) <= 3){ element.value = 0; }else{ var a = Math.round( (parseInt(pos, 10) * options.maxValue) / total ); element.value = parseInt(a, 10); } sliderOut.value = element.value === 0? "" : element.value; sliderTable.value = sliderOut.value; options.onUpdate(element.value); statTD.innerHTML = element.value; element.run('keyup'); return element.value; }; // Set styles sliderOut.setStyle({ //border: '1px solid #ccc', //background: '#f5f5f5', width: options.width + 'px', position: 'relative', overflow:'hidden', outline:'none' }); sliderBar.setStyle({ border: '1px solid #999', background: '#eee', margin: '8px', overflow:'hidden', height: '3px' }).setCSSBorderRadius('4px'); sliderButton.setStyle({ position: 'absolute', height: '13px', width: '13px', background: options.buttonBack, overflow:'hidden', border: '1px solid transparent', top: '3px', left: options.value + 'px' }).setCSSBorderRadius('8px'); startTD.setStyle({fontFamily:'Verdana', fontSize:'9px'}); statTD.setStyle({fontFamily:'Verdana', fontSize:'9px'}); endTD.setStyle({fontFamily:'Verdana', fontSize:'9px'}); sliderOut.insert(sliderBar).insert(sliderButton); sliderTable.insert(tbody.insert(tr).insert(tr2)); sliderTD.insert(sliderOut); tr.insert(sliderTD); tr2.insert(startTD).insert(statTD).insert(endTD); // Set button draggable sliderButton.setDraggable({constraint:'horizontal', /*snap:10,*/ dragEffect:false, cursor:'default', constrainLeft:3, constrainRight:barWidth, onDrag:function(i){ updateValue(i.getStyle('left')); // Calculate the amount while dragging }}); sliderOut.observe('focus', function(){ sliderOut.__hasFocus = true; sliderOut.setStyle({borderColor:'#333'}); }).observe('blur', function(){ sliderOut.__hasFocus = false; sliderOut.setStyle({borderColor:'#ccc'}); }); // Set key and mousewheel events sliderOut.observe('keypress', sliderKeys).observe(Event.mousewheel, sliderWheel); sliderOut.observe('click', function(e){ // Set bar click event if(e.target.id == sliderButton.id){ return false; } var l = (Event.pointerX(e)-sliderBar.cumulativeOffset().left); l = l < 3? 3 : l; l = l > barWidth? barWidth : l; sliderButton.shift({left:l, duration:0.5}); // move the button where it's clicked updateValue(l); }); // Create an hidden field var hidden = new Element('input', {type:'hidden', className: 'form-slider ' + element.className, name:element.name, value:defaultValue, id:element.id}); element.parentNode.replaceChild(hidden, element); // replace the hidden with original box element = hidden; $(hidden.parentNode).insert(sliderTable.setUnselectable()); // add slider to the page hidden.setSliderValue = function(val){ var v =valueToPixel(val); sliderButton.shift({left:v, duration:0.5}); updateValue(v); }; return hidden; }, /** * Spinner input box * @param {Object} element * @param {Object} options */ spinner: function(element, options){ element = $(element); options = Object.extend({ width:60, cssFloat:false, allowNegative:false, addAmount:1, maxValue:false, minValue:false, readonly:false, value:false, size: 5, iconPath: '//cdn.jotfor.ms/assets/img/builder/flat_arrow.svg', onChange: Prototype.K }, options || {}); element.size = options.size; // Set a size to make it look good if(options.value === false){ element.value = parseFloat(element.value) || '0'; }else{ element.value = options.value; } //set to minimum if smaller if(options.minValue) { if(parseFloat(element.value) < parseFloat(options.minValue)) { element.value = options.minValue; } } //check negative if minimum is not set else if (!options.allowNegative && parseFloat(element.value) < 0) { element.value = '0'; } element.writeAttribute('autocomplete', 'off'); // button Styles var spinnerContainer = new Element('div', {tabindex:'1'}); if(options.cssFloat){ spinnerContainer.setStyle({cssFloat:options.cssFloat, marginRight:'5px'}); } var spinnerTable, arrowCont, inputCont, upTD, downTD, upArrow, downArrow; // define values spinnerTable = new Element('div', { className: 'form-spinner'}); spinnerContainer.insert(spinnerTable); element.parentNode.replaceChild(spinnerContainer, element); // Construcy the input spinnerTable.insert(inputCont = new Element('div', {className: 'form-spinner-input-td'}).insert(element)); // Construct the arrow button container spinnerTable.insert(arrowCont = new Element('div', {className: 'form-spinner-button-container'})); // Construct the up arrow arrowCont.insert(upTD = new Element('div', {className: 'form-spinner-button form-spinner-up'}).insert(upArrow = new Element('img', {className: 'form-spinner-image form-spinner-up-image', src:options.iconPath, alt:'up arrow'}))); // Construct the down arrow arrowCont.insert(downTD = new Element('div', {className: 'form-spinner-button form-spinner-down'}).insert(downArrow = new Element('img', {className: 'form-spinner-image form-spinner-down-image', src:options.iconPath, alt:'down arrow'}))); var spinnerTableWidth = (options && options.width >= 180 ? options.width : 180)+'px'; spinnerTable.setStyle({ width:spinnerTableWidth }); /** * Up click handler */ var numberUP = function(e){ // Do not change disabled inputs if(element.hasAttribute("disabled")) { return; } if(!parseFloat(element.value)){ element.value = 0; } if(options.maxValue && Number(element.value) >= Number(options.maxValue)){ return; } // Don't go up to maxValue var elementValueDP = parseInt(element.value) === parseFloat(element.value) ? 0 : (element.value + '').split('.')[1].length; var addAmountDP = parseFloat(options.addAmount) === parseInt(options.addAmount) ? 0 : (options.addAmount + '').split('.')[1].length; var decimalPoints = elementValueDP > addAmountDP ? elementValueDP : addAmountDP; element.value = (parseFloat(element.value)+parseFloat(options.addAmount)).toFixed(decimalPoints); options.onChange(element.value); }; /** * Down click handler */ var numberDOWN = function(e){ // Do not change disabled inputs if(element.hasAttribute("disabled")) { return; } if(!parseFloat(element.value)){ element.value = 0; } var elementValueDP = parseInt(element.value) === parseFloat(element.value) ? 0 : (element.value + '').split('.')[1].length; var addAmountDP = parseFloat(options.addAmount) === parseInt(options.addAmount) ? 0 : (options.addAmount + '').split('.')[1].length; var decimalPoints = elementValueDP > addAmountDP ? elementValueDP : addAmountDP; var newValue = (parseFloat(element.value)-parseFloat(options.addAmount)).toFixed(decimalPoints); if(options.minValue) { // Don't go below to minValue if(Number(newValue) < Number(options.minValue)){ return; } } else if(!options.allowNegative && newValue < 0){ return; } // Don't go negative element.value = newValue; options.onChange(element.value); }; /** * Handle key events * @param {Object} e * @param {Object} mode */ var spinnerKeys = function(e, mode){ if(e.target.tagName == "INPUT" && mode == 2){ return; } e = document.getEvent(e); if(e.keyCode == 38){ numberUP(e); e.stop(); }else if(e.keyCode == 40){ numberDOWN(e); e.stop(); } }; upTD.observe('click', function(e){ numberUP(e); element.run('keyup'); }).setUnselectable(); downTD.observe('click', function(e){ numberDOWN(e); element.run('keyup'); }).setUnselectable(); element.observe(Prototype.Browser.Gecko? 'keypress' : 'keydown', function(e){ spinnerKeys(e, 1); }); spinnerContainer.observe(Prototype.Browser.Gecko? 'keypress' : 'keydown', function(e){ spinnerKeys(e, 2); }); if(options.readonly){ element.writeAttribute('readonly', "readonly"); } element.observe('change', function(){ options.onChange(element.value); }); return element; }, /** * Places a small label boz at the specified position on an input box * @param {Object} element * @param {Object} label * @param {Object} options */ miniLabel:function(element, label, options){ options = Object.extend({ position: 'bottom', color: '#666', size: 9, text:'', nobr: false }, options || {}); element.wrap('span'); span = $(element.parentNode); span.setStyle({whiteSpace:'nowrap', cssFloat:'left', marginRight:'5px'}); var labelStyle = {paddingLeft:'1px', fontSize:options.size+"px", color:options.color, cursor:'default'}; var labelClick = function(){ element.focus(); }; var br = '<br>'; if(options.nobr){ br = ''; } if(options.position == "top"){ element.insert({before:new Element('span').setText(label+br).setStyle(labelStyle).observe('click', labelClick)}).insert({after:options.text}); }else{ element.insert({after:new Element('span').setText(br+label).setStyle(labelStyle).observe('click', labelClick)}).insert({after:options.text}); } return span; }, /** * Places hint texts into input boxes * @param {Object} element * @param {Object} value */ hint: function(element, value, options){ element = $(element); if("placeholder" in element){ element.writeAttribute('placeholder', value); return element; } if(element.type == 'number'){ element.value="0"; return element; } if(element.removeHint){ return element.hintClear(); } options = Object.extend({ hintColor:'#bbb' }, options || {}); var color = element.getStyle('color') || '#000'; if (element.value === '') { element.setStyle({color:options.hintColor}); element.value = value; element.hinted = true; } var focus = function(){ if(element.value == value){ element.value = ""; element.setStyle({color:color}).hinted = false; } else if(element.readAttribute("masked") == "true") { element.setStyle({color:color}).hinted = false; } }; var blur = function(){ setTimeout(function() { if(element.value === "") { element.value = value; element.setStyle({ color:options.hintColor }).hinted = true; } }, element.readAttribute("masked") == "true" ? 10 : 0); }; if(element.readAttribute("masked") == "true") { element.observe('mouseleave', blur); } var submit = function(){ if(element.value == value){ element.value = ""; element.hinted = false; } }; element.observe('focus', focus); element.observe('blur', blur); if(element.form){ $(element.form).observe('submit', submit); } element.runHint = blur; element.clearHint = function(){ element.value = ""; element.setStyle({color:color}).hinted = false; }; element.hintClear = function(){ element.value = value; element.setStyle({ color:options.hintColor }).hinted = true; return element; }; element.removeHint = function(){ element.setStyle({color:color}); if(element.value == value){ element.value = ""; } element.hintClear = undefined; element.hinted = undefined; element.removeHint = undefined; element.stopObserving('focus', focus); element.stopObserving('blur', blur); if(element.form){ $(element.form).stopObserving('submit', submit); } return element; }; return element; } }; Element.addMethods(Protoplus.ui);