mirror of
https://github.com/ACSPRI/queXS
synced 2024-04-02 12:12:16 +00:00
Merged from McMasterReports branch
This commit is contained in:
225
include/limesurvey/scripts/survey_runtime.js
Normal file
225
include/limesurvey/scripts/survey_runtime.js
Normal file
@@ -0,0 +1,225 @@
|
||||
var DOM1;
|
||||
$(document).ready(function()
|
||||
{
|
||||
DOM1 = (typeof document.getElementsByTagName!='undefined');
|
||||
if (typeof checkconditions!='undefined') checkconditions();
|
||||
if (typeof template_onload!='undefined') template_onload();
|
||||
prepCellAdapters();
|
||||
document['onkeypress'] = checkEnter;
|
||||
|
||||
if (typeof(focus_element) != 'undefined')
|
||||
{
|
||||
$(focus_element).focus();
|
||||
}
|
||||
});
|
||||
|
||||
Array.prototype.push = function()
|
||||
{
|
||||
var n = this.length >>> 0;
|
||||
for (var i = 0; i < arguments.length; i++)
|
||||
{
|
||||
this[n] = arguments[i];
|
||||
n = n + 1 >>> 0;
|
||||
}
|
||||
this.length = n;
|
||||
return n;
|
||||
};
|
||||
|
||||
Array.prototype.pop = function() {
|
||||
var n = this.length >>> 0, value;
|
||||
if (n) {
|
||||
value = this[--n];
|
||||
delete this[n];
|
||||
}
|
||||
this.length = n;
|
||||
return value;
|
||||
};
|
||||
|
||||
|
||||
//defined in group.php & question.php & survey.php, but a static function
|
||||
function inArray(needle, haystack)
|
||||
{
|
||||
for (h in haystack)
|
||||
{
|
||||
if (haystack[h] == needle)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//defined in group.php & survey.php, but a static function
|
||||
function match_regex(testedstring,str_regexp)
|
||||
{
|
||||
// Regular expression test
|
||||
if (str_regexp == '' || testedstring == '') return false;
|
||||
pattern = new RegExp(str_regexp);
|
||||
return pattern.test(testedstring)
|
||||
}
|
||||
|
||||
function cellAdapter(evt,src)
|
||||
{
|
||||
var eChild = null, eChildren = src.getElementsByTagName('INPUT');
|
||||
var curCount = eChildren.length;
|
||||
//This cell contains multiple controls, don't know which to set.
|
||||
if (eChildren.length > 1)
|
||||
{
|
||||
//Some cells contain hidden fields
|
||||
for (i = 0; i < eChildren.length; i++)
|
||||
{
|
||||
if ( ( eChildren[i].type == 'radio' || eChildren[i].type == 'checkbox' ) && eChild == null)
|
||||
eChild = eChildren[i];
|
||||
else if ( ( eChildren[i].type == 'radio' || eChildren[i].type == 'checkbox' ) && eChild != null)
|
||||
{
|
||||
//A cell with multiple radio buttons -- unhandled
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else eChild = eChildren[0];
|
||||
|
||||
if (eChild && eChild.type == 'radio')
|
||||
{
|
||||
eChild.checked = true;
|
||||
//Make sure the change propagates to the conditions handling mechanism
|
||||
if(eChild.onclick) eChild.onclick(evt);
|
||||
if(eChild.onchange) eChild.onchange(evt);
|
||||
}
|
||||
else if (eChild && eChild.type == 'checkbox')
|
||||
{
|
||||
eChild.checked = !eChild.checked;
|
||||
//Make sure the change propagates to the conditions handling mechanism
|
||||
if(eChild.onclick) eChild.onclick(evt);
|
||||
if(eChild.onchange) eChild.onchange(evt);
|
||||
}
|
||||
}
|
||||
|
||||
function prepCellAdapters()
|
||||
{
|
||||
if (!DOM1) return;
|
||||
var formCtls = document.getElementsByTagName('INPUT');
|
||||
var ptr = null;
|
||||
var foundTD = false;
|
||||
var donefocus = false;
|
||||
for (var i = 0; i < formCtls.length; i++)
|
||||
{
|
||||
ptr = formCtls[i];
|
||||
if (ptr.type == 'radio' || ptr.type == 'checkbox')
|
||||
{
|
||||
foundTD = false;
|
||||
while (ptr && !foundTD)
|
||||
{
|
||||
if(ptr.nodeName == 'TD')
|
||||
{
|
||||
foundTD = true;
|
||||
ptr.onclick =
|
||||
function(evt){
|
||||
return cellAdapter(evt,this);
|
||||
};
|
||||
continue;
|
||||
}
|
||||
ptr = ptr.parentNode;
|
||||
}
|
||||
}
|
||||
if (ptr.type != 'submit' && ptr.type != 'hidden' && donefocus == false)
|
||||
{
|
||||
ptr.focus();
|
||||
donefocus = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkEnter(e){ //e is event object passed from function invocation
|
||||
var evt = e || event;
|
||||
var whi = 0;
|
||||
var counter = 1;
|
||||
|
||||
whi = evt.which;
|
||||
//alert(evt.which);
|
||||
|
||||
if (whi >= 49 && whi <= 57) //keys 1-9 select appropriate box
|
||||
{
|
||||
y = document.getElementsByTagName('input');
|
||||
for (var i = 0; i < y.length; i++)
|
||||
{
|
||||
a = y[i];
|
||||
if (a.type == 'checkbox' || a.type == 'radio')
|
||||
{
|
||||
if (counter == (whi - 48))
|
||||
{
|
||||
if (a.checked && a.type == 'checkbox')
|
||||
{
|
||||
a.checked = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
a.checked = 'checked';
|
||||
}
|
||||
}
|
||||
counter++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (whi == 13)
|
||||
{
|
||||
document.forms[0].submit();
|
||||
return false;
|
||||
}
|
||||
|
||||
return document.defaultAction;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function addHiddenField(theform,thename,thevalue)
|
||||
{
|
||||
var myel = document.createElement('input');
|
||||
myel.type = 'hidden';
|
||||
myel.name = thename;
|
||||
theform.appendChild(myel);
|
||||
myel.value = thevalue;
|
||||
}
|
||||
|
||||
function cancelBubbleThis(eventObject)
|
||||
{
|
||||
if (!eventObject) var eventObject = window.event;
|
||||
eventObject.cancelBubble = true;
|
||||
if (eventObject && eventObject.stopPropagation) {
|
||||
eventObject.stopPropagation();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getkey(e)
|
||||
{
|
||||
if (window.event) return window.event.keyCode;
|
||||
else if (e) return e.which; else return null;
|
||||
}
|
||||
|
||||
function goodchars(e, goods)
|
||||
{
|
||||
var key, keychar;
|
||||
key = getkey(e);
|
||||
if (key == null) return true;
|
||||
|
||||
// get character
|
||||
keychar = String.fromCharCode(key);
|
||||
keychar = keychar.toLowerCase();
|
||||
goods = goods.toLowerCase();
|
||||
|
||||
// check goodkeys
|
||||
if (goods.indexOf(keychar) != -1)
|
||||
return true;
|
||||
|
||||
// control keys
|
||||
if ( key==null || key==0 || key==8 || key==9 || key==27 || key==13)
|
||||
return true;
|
||||
|
||||
// else return false
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user