App-MFILE-WWW
view release on metacpan or search on metacpan
share/js/core/start.js view on Meta::CPAN
currentTarget,
//
// generalized handlers
//
// used to suppress submit events when we don't need them
suppressSubmitEvent = function (event) {
event.preventDefault();
console.log("Suppressed submit event");
},
//
// dmenu handlers
//
dmenuSubmit = function (dmn) {
// dmn is dmenu name
// dmo is dmenu object
var dmo = target.pull(dmn),
sel = $('input[name="sel"]').val(),
entry,
entries = dmo.menuObj.entries;
if ($.isNumeric(sel) && sel > 0 && sel <= entries.length) {
entry = entries[sel];
} else if (sel === 'X' || sel === 'x') {
stack.pop(undefined, { "logout": true });
return;
} else if (sel === '') {
// user hit 'enter'
return;
}
if (entry !== undefined) {
console.log("Selected " + dmn + " menu entry: " + entry.name);
stack.push(entry, {});
}
},
dmenuSubmitEvent = function (dmn) {
return function (event) {
console.log(dmn + " form submission event");
event.preventDefault();
dmenuSubmit(dmn);
};
},
dmenuKeyListener = function (dmn) {
return function (event) {
coreLib.logKeyDown(event);
if (event.keyCode === 13) {
console.log("Detected ENTER keydown; submitting " + dmn + " form");
event.preventDefault();
dmenuSubmit(dmn);
} else if (event.keyCode === 9) {
event.preventDefault();
} else if (event.keyCode === 27) {
stack.pop();
} // end of function - don't put anything after this line
};
},
//
// miniMenu handlers
//
mmVetEntry = function (n, entryName) {
var input = $("input[id='" + entryName + "']"),
vetted = true,
vettedVal,
vetter;
console.log("In writable entry " + entryName);
vetter = currentTarget.getVetter(entryName);
// console.log("vetter", vetter);
if (typeof vetter === 'function') {
// console.log("Current entry ->" + entryName +"<- has a vetter function!");
vettedVal = vetter(input.val());
if (vettedVal) {
input.val(vettedVal);
} else {
vetted = false;
coreLib.displayError("Bad " + entryDefs[entryName].text.toLowerCase() + " value!");
}
}
return vetted;
},
mmKeyListener = function (evt) {
var elid = $(document.activeElement).attr("id"),
elnam = $(document.activeElement).attr("name"),
len = $("input:text").length,
n = $("input:text").index($(document.activeElement)),
i;
coreLib.logKeyDown(evt);
coreLib.clearResult();
if (evt.keyCode === 13) {
// ENTER key in form
// console.log("This form has writable entries 0 through " + (len - 1));
// console.log("Entry " + n + " is active.");
evt.preventDefault();
if ( n === len - 1 ) {
console.log("Triggering submit button click");
for (i=0; i<len; i++) {
console.log("Entry " + i, $("input:text")[i]);
}
// FIXME: iterate over writable entries and vet all the values
$('#submitButton').click();
} else {
if (mmVetEntry(n, elid)) {
$("input:text")[n + 1].focus();
} else {
$("input:text")[n].focus();
}
}
} else if (evt.keyCode === 9) {
// TAB key in form
if (
(elnam === 'entry0' && evt.shiftKey) ||
(elnam === 'sel' && len === 1) ||
(elnam === 'sel' && ! evt.shiftKey)
) {
// prevent TAB keydown from navigating out of the form
evt.preventDefault();
} else if (! evt.shiftKey) {
if (! mmVetEntry(n, elid)) {
evt.preventDefault();
$("input:text")[n].focus();
}
}
} else if (evt.keyCode === 27) {
var xtgt = stack.getXTarget();
if (typeof xtgt === "string") {
stack.unwindToTarget(xtgt);
return null;
} else {
stack.pop();
return null;
}
}
},
mmSubmit = function (obj) {
console.log("Entering mmSubmit with object", obj);
console.log("Target is", currentTarget);
coreLib.clearResult();
var sel = $('input[name="sel"]').val(),
len,
i,
newObj,
selection,
formEntry,
menuEntry,
menuObj = currentTarget.miniMenu.menuObj;
if (menuObj.isEmpty) {
console.log("Setting sel to 'X' by default because miniMenu has no entries");
sel = 'X';
len = 0;
} else {
len = menuObj.entries.length;
}
if (len > 0 && sel === '') {
console.log("User hit ENTER ambiguously; doing nothing");
return;
}
// console.log("sel === " + sel + " and len === " + len);
if (sel > 0 && sel <= len) {
menuEntry = menuObj.entries[sel];
} else if (sel === 'X' || sel === 'x') {
var xtgt = stack.getXTarget();
if (typeof xtgt === "string") {
stack.unwindToTarget(xtgt);
} else {
stack.pop(undefined, { 'logout': true });
}
return;
} else {
console.log('Selection is ' + sel + ' (invalid) -- doing nothing');
}
if (menuEntry !== undefined) {
if (obj === undefined) {
newObj = {};
} else {
newObj = $.extend({}, obj);
}
// Vet all writable form entries
len = currentTarget.entriesWrite ? currentTarget.entriesWrite.length : 0;
console.log("Vetting " + len + " writable dform entries");
for (i = 0; i < len; i += 1) {
formEntry = currentTarget.entriesWrite[i];
if (! mmVetEntry(i, formEntry.name)) {
return;
}
newObj[formEntry.prop] = $('#' + formEntry.name).val();
}
if (currentTarget.rememberState) {
console.log("Changing stack state to", newObj);
stack.setState(newObj);
}
stack.push(menuEntry, newObj);
}
},
//
// dform handlers
//
dformListen = function (dfn, obj, focusId) {
console.log("Listening in form " + dfn);
$('#' + dfn).submit(suppressSubmitEvent);
$('input[name="sel"]').val('');
if (focusId) {
$('input[id="' + focusId + '"]').focus();
} else if (stack.getPush() === true && $('input[name="entry0"]').length) {
$('input[name="entry0"]').focus();
} else {
$('input[name="sel"]').focus();
}
$('#submitButton').on("click", function (event) {
event.preventDefault;
console.log("Submitting form " + dfn);
mmSubmit(obj);
});
$('#' + dfn).on("keydown", mmKeyListener);
},
//
// dbrowser handlers
//
dbrowserSubmit = function () {
var dbo = coreLib.dbrowserState.obj,
set = coreLib.dbrowserState.set,
pos = coreLib.dbrowserState.pos;
mmSubmit(set[pos]);
},
dbrowserKeyListener = function () {
var set = coreLib.dbrowserState.set,
pos = coreLib.dbrowserState.pos;
return function (evt) {
coreLib.logKeyDown(evt);
// since the dbrowser has (may have) a navigation menu, we
// check first for those keys before moving to miniMenu handler
if (evt.keyCode === 37) { // <-
if (evt.ctrlKey) {
console.log('Listener detected CTRL-\u2190 keydown');
if ($("#navJumpToBegin").length) {
coreLib.dbrowserState.pos = 0;
dbrowserListen();
}
} else {
console.log('Listener detected \u2190 keydown');
if ($("#navBack").length) {
coreLib.dbrowserState.pos -= 1;
dbrowserListen();
}
}
} else if (evt.keyCode === 39) { // ->
if (evt.ctrlKey) {
console.log('Listener detected CTRL-\u2192 keydown');
if ($("#navJumpToEnd").length) {
coreLib.dbrowserState.pos = set.length - 1;
dbrowserListen();
}
} else {
console.log('Listener detected \u2192 keydown');
if ($("#navForward").length) {
coreLib.dbrowserState.pos += 1;
dbrowserListen();
}
}
} else {
mmKeyListener(evt);
}
};
},
dbrowserListen = function (resultLine) {
var dbo = coreLib.dbrowserState.obj,
set = coreLib.dbrowserState.set,
pos = coreLib.dbrowserState.pos;
console.log("Listening in browser " + dbo.name);
console.log("Browser set is", set, "cursor position is " + pos);
$('#mainarea').html(dbo.source(set, pos));
if (resultLine) {
coreLib.displayResult(resultLine);
} else {
coreLib.displayResult("Displaying no. " + (pos + 1) + " of " +
coreLib.genObjStr(set.length) + " in result set");
}
$('#' + dbo.name).submit(suppressSubmitEvent);
$('input[name="sel"]').val('').focus();
$('#submitButton').on("click", function (event) {
event.preventDefault;
//console.log("Submitting browser " + dbo.name);
stack.getState().pos = pos;
dbrowserSubmit();
});
$('#' + dbo.name).on("keydown", dbrowserKeyListener());
},
//
// dnotice handlers
//
dnoticeListen = function (dno) {
$('#submitButton').on("click", function (event) {
event.preventDefault;
//console.log("Submitting form " + dno.name);
stack.pop();
return;
});
$('#' + dno.name).on("keydown", mmKeyListener);
},
//
// dtable handlers
//
dtableSubmit = function (dto) {
mmSubmit();
},
dtableListen = function (dto) {
console.log("Listening in table " + dto.name);
$('#' + dto.name).submit(suppressSubmitEvent);
$('input[name="sel"]').val('').focus();
$('#submitButton').on("click", function (event) {
event.preventDefault;
//console.log("Submitting table " + dto.name);
dtableSubmit(dto);
});
$('#' + dto.name).on("keydown", mmKeyListener);
},
//
// drowselect handlers
//
drowselectSubmit = function () {
var drso = coreLib.drowselectState.obj,
set = coreLib.drowselectState.set,
pos = coreLib.drowselectState.pos,
xtgt;
if (drso.hasOwnProperty('miniMenu')) {
if (drso.miniMenu.hasOwnProperty('entries')) {
if (drso.miniMenu.entries.length > 0) {
mmSubmit(set[pos]);
return;
}
}
}
if (drso.hasOwnProperty('submitAction')) {
stack.push(drso.submitAction, set[pos]);
} else {
// no miniMenu, no submitAction - just go back
xtgt = stack.getXTarget();
if (typeof xtgt === "string") {
stack.unwindToTarget(xtgt);
} else {
stack.pop();
}
}
},
drowselectKeyListener = function () {
var set = coreLib.drowselectState.set,
pos = coreLib.drowselectState.pos;
return function (evt) {
console.log("Entering drowselectKeyListener");
coreLib.logKeyDown(evt);
if (evt.keyCode === 37) { // up arrow
if (evt.ctrlKey) {
console.log('Listener detected CTRL-up arrow keydown');
coreLib.reverseVideo(coreLib.drowselectState.pos, false);
coreLib.drowselectState.pos = 0;
drowselectListen();
} else {
console.log('Listener detected up arrow keydown');
if (coreLib.drowselectState.pos > 0) {
coreLib.reverseVideo(coreLib.drowselectState.pos, false);
coreLib.drowselectState.pos -= 1;
drowselectListen();
}
}
} else if (evt.keyCode === 39) { // down arrow
if (evt.ctrlKey) {
console.log('Listener detected CTRL-down arrow keydown');
coreLib.reverseVideo(coreLib.drowselectState.pos, false);
coreLib.drowselectState.pos = set.length - 1;
drowselectListen();
} else {
console.log('Listener detected down arrow keydown');
if (coreLib.drowselectState.pos < set.length - 1) {
coreLib.reverseVideo(coreLib.drowselectState.pos, false);
coreLib.drowselectState.pos += 1;
drowselectListen();
}
}
} else {
mmKeyListener(evt);
}
};
},
drowselectListen = function (resultLine) {
var drso = coreLib.drowselectState.obj,
set = coreLib.drowselectState.set,
pos = coreLib.drowselectState.pos;
resultLine = resultLine ? resultLine : "Displaying rowselect with " + coreLib.genObjStr(set.length);
coreLib.displayResult(resultLine);
$('#mainarea').html(drso.source(set));
coreLib.reverseVideo(pos, true);
// console.log("Listening in rowselect " + drso.name);
$('#' + drso.name).submit(suppressSubmitEvent);
( run in 0.768 second using v1.01-cache-2.11-cpan-39bf76dae61 )