view release on metacpan or search on metacpan
socialcalc/Changes.txt view on Meta::CPAN
Added sheet.renderneeded and sheet.celldisplayneeded
Added SocialCalc.ScheduleSheetCommands and started using it instead of ExecuteCommands directly
2008-09-19:
ScheduleSheetCommands now starts a time-sliced loop to execute commands
2008-09-20:
2008-09-21:
2008-09-22:
2008-09-23:
Made commands, recalc, and display all be timer driven
Added deferred command execution
Added edit.busy
Made most of UI observe the busy flag, including Button and Drag additions
2008-11-06:
Added calcorder as a timesliced part of recalc.
2008-11-07:
Added recalc to coded and decoded sheet attributes.
Sheet recalc attribute is now followed, as well as new sheet.recalconce.
socialcalc/simpleedit15.pl view on Meta::CPAN
result = "?&pagename=" + encodeURI(pagename);
}
return result;
}
// Additional formula functions
var funccache = {};
var functimer = null;
var funcquery = "";
SocialCalc.Formula.SocialtextFunction = function(fname, operand, foperand, sheet) {
var value1, t;
var scf = SocialCalc.Formula;
var query = "a="+foperand.length;
var num = 0;
socialcalc/socialcalc-3.js view on Meta::CPAN
// *************************************
//
// SocialCalc.SheetCommandInfo - object with information used during command execution
//
SocialCalc.SheetCommandInfo = { // only one of these
sheetobj: null, // sheet being operated on
parseobj: null, // SocialCalc.Parse object with the command string, etc.
timerobj: null, // used for timeslicing
firsttimerdelay: 50, // wait before starting cmds (for Chrome - to give time to update)
timerdelay: 1, // wait between slices
maxtimeslice: 100, // do another slice after this many milliseconds
saveundo: false, // arg for ExecuteSheetCommand
CmdExtensionCallbacks: {}, // for startcmdextension, in form: cmdname, {func:function(cmdname, data, sheet, SocialCalc.Parse object, saveundo), data:whatever}
cmdextensionbusy: "" // if length>0, command loop waits for SocialCalc.ResumeFromCmdExtension()
// statuscallback: null, // called during execution - obsolete: use sheet obj's
// statuscallbackparams: null
};
socialcalc/socialcalc-3.js view on Meta::CPAN
sci.saveundo = saveundo;
if (sci.sheetobj.statuscallback) { // notify others if requested
sheet.statuscallback(sci, "cmdstart", "", sci.sheetobj.statuscallbackparams);
}
if (sci.saveundo) {
sci.sheetobj.changes.PushChange(""); // add a step to undo stack
}
sci.timerobj = window.setTimeout(SocialCalc.SheetCommandsTimerRoutine, sci.firsttimerdelay);
}
SocialCalc.SheetCommandsTimerRoutine = function() {
var errortext;
var sci = SocialCalc.SheetCommandInfo;
var starttime = new Date();
sci.timerobj = null;
while (!sci.parseobj.EOF()) { // go through all commands (separated by newlines)
errortext = SocialCalc.ExecuteSheetCommand(sci.sheetobj, sci.parseobj, sci.saveundo);
if (errortext) alert(errortext);
sci.parseobj.NextLine();
if (sci.cmdextensionbusy.length > 0) { // forced wait
if (sci.sheetobj.statuscallback) { // notify others if requested
sci.sheetobj.statuscallback(sci, "cmdextension", sci.cmdextensionbusy, sci.sheetobj.statuscallbackparams);
}
return;
}
if (((new Date()) - starttime) >= sci.maxtimeslice) { // if taking too long, give up CPU for a while
sci.timerobj = window.setTimeout(SocialCalc.SheetCommandsTimerRoutine, sci.timerdelay);
return;
}
}
if (sci.sheetobj.statuscallback) { // notify others if requested
sci.sheetobj.statuscallback(sci, "cmdend", "", sci.sheetobj.statuscallbackparams);
}
}
socialcalc/socialcalc-3.js view on Meta::CPAN
// SocialCalc.RecalcInfo - object with global recalc info
SocialCalc.RecalcInfo = {
sheet: null, // which sheet is being recalced
currentState: 0, // current state
state: {start_calc: 1, order: 2, calc: 3, start_wait: 4, done_wait: 5}, // allowed state values
recalctimer: null, // value to cancel timer
maxtimeslice: 100, // maximum milliseconds per slice of recalc time before a wait
timeslicedelay: 1, // milliseconds to wait between recalc time slices
starttime: 0, // when recalc started
// LoadSheet: a function that returns true if started a load or false if not.
//
LoadSheet: function(sheetname) {return false;} // default returns not found
}
socialcalc/socialcalc-3.js view on Meta::CPAN
if (sheet.statuscallback) {
sheet.statuscallback(scri, "calcstart", null, sheet.statuscallbackparams);
}
SocialCalc.RecalcSetTimeout();
}
//
// SocialCalc.RecalcSetTimeout - set a timer for next recalc step
//
SocialCalc.RecalcSetTimeout = function() {
var scri = SocialCalc.RecalcInfo;
scri.recalctimer = window.setTimeout(SocialCalc.RecalcTimerRoutine, scri.timeslicedelay);
}
//
// SocialCalc.RecalcClearTimeout - cancel any timeouts
//
SocialCalc.RecalcClearTimeout = function() {
var scri = SocialCalc.RecalcInfo;
if (scri.recalctimer) {
window.clearTimeout(scri.recalctimer);
scri.recalctimer = null;
}
}
//
// SocialCalc.RecalcLoadedSheet(sheetname, str, recalcneeded)
//
// Called when a sheet finishes loading with name, string, and t/f whether it should be recalced.
// If loaded sheet has sheet.attribs.recalc=="off", then no recalc done.
socialcalc/socialcalc-3.js view on Meta::CPAN
if (((new Date()) - starttime) >= scri.maxtimeslice) { // if taking too long, give up CPU for a while
do_statuscallback("calcorder", {coord: coord, total: recalcdata.celllist.length, count: recalcdata.celllistitem});
SocialCalc.RecalcSetTimeout();
return;
}
}
do_statuscallback("calccheckdone", recalcdata.calclistlength);
recalcdata.nextcalc = recalcdata.firstcalc; // start at the beginning of the recalc chain
scri.currentState = scri.state.calc; // loop through cells on next timer call
SocialCalc.RecalcSetTimeout();
return;
}
if (scri.currentState == scri.state.start_wait) { // starting to wait for something
scri.currentState = scri.state.done_wait; // finished on next timer call
if (scri.LoadSheet) {
status = scri.LoadSheet(scf.SheetCache.waitingForLoading);
if (status) { // started a load operation
return;
}
}
SocialCalc.RecalcLoadedSheet(null, "", false);
return;
}
if (scri.currentState == scri.state.done_wait) {
scri.currentState = scri.state.calc; // loop through cells on next timer call
SocialCalc.RecalcSetTimeout();
return;
}
// otherwise should be scri.state.calc
if (scri.currentState != scri.state.calc) {
alert("Recalc state error: "+scri.currentState+". Error in SocialCalc code.");
}
coord = sheet.recalcdata.nextcalc;
while (coord) {
cell = sheet.cells[coord];
eresult = scf.evaluate_parsed_formula(cell.parseinfo, sheet, false);
if (scf.SheetCache.waitingForLoading) { // wait until restarted
recalcdata.nextcalc = coord; // start with this cell again
recalcdata.count += count;
do_statuscallback("calcloading", {sheetname: scf.SheetCache.waitingForLoading});
scri.currentState = scri.state.start_wait; // start load on next timer call
SocialCalc.RecalcSetTimeout();
return;
}
if (scf.RemoteFunctionInfo.waitingForServer) { // wait until restarted
recalcdata.nextcalc = coord; // start with this cell again
recalcdata.count += count;
do_statuscallback("calcserverfunc",
{funcname: scf.RemoteFunctionInfo.waitingForServer, coord: coord, total: recalcdata.calclistlength, count: recalcdata.count});
scri.currentState = scri.state.done_wait; // start load on next timer call
return; // return and wait for next recalc timer event
}
if (cell.datavalue != eresult.value ||
cell.valuetype != eresult.type) { // only update if changed from last time
cell.datavalue = eresult.value;
cell.valuetype = eresult.type;
delete cell.displaystring;
sheet.recalcchangedavalue = true; // remember something changed in case other code wants to know
}
if (eresult.error) {
socialcalc/socialcalcserver.pl view on Meta::CPAN
var cmdstr = cmd.RestOfString();
SocialCalc.SheetCommandInfo.cmdextensionbusy = "Load Clipboard Ext "+cmdstr;
loaddata(cmdstr);
// window.setTimeout(function(){SocialCalc.ResumeFromCmdExtension();}, 100);
// SocialCalc.ResumeFromCmdExtension();
}
var loaddatatimerobj;
function loaddata(url) {
var loadscript = document.createElement("script");
loadscript.type = "text/javascript";
loadscript.src = url+"?"+((new Date()).getTime()+'0');
document.body.appendChild(loadscript);
loaddatatimerobj = window.setTimeout(loaddatatimeout, 4000);
}
function doloaddataload(val) {
if (loaddatatimerobj) {
window.clearTimeout(loaddatatimerobj);
loaddatatimerobj = null;
}
var sview = SocialCalc.GetSpreadsheetControlObject();
parts = sview.DecodeSpreadsheetSave(val);
if (parts) {
if (parts.sheet) {
SocialCalc.Clipboard.clipboard = SocialCalc.decodeFromSave(val.substring(parts.sheet.start, parts.sheet.end));
}
}
// window.setTimeout(function(){SocialCalc.ResumeFromCmdExtension();}, 100);
SocialCalc.ResumeFromCmdExtension();
}
function loaddatatimeout() {
if (loaddatatimerobj) {
window.clearTimeout(loaddatatimerobj);
loaddatatimerobj = null;
}
window.setTimeout(function(){SocialCalc.ResumeFromCmdExtension();}, 10);
}
// Remote data lookup demo code
var loadtimerobj;
function loadsheet(sheetname) {
var matches = sheetname.match(/^\\{scdata\\:\\s+(.+?)\\}\$/); // {scdata: URL w/o http://)
if (!matches) {
return false;
}
var loadscript = document.createElement("script");
loadscript.type = "text/javascript";
loadscript.src = "http://"+matches[1]+"?"+((new Date()).getTime()+'0');
document.body.appendChild(loadscript);
loadtimerobj = window.setTimeout(loadframetimeout, 4000);
return true;
}
SocialCalc.RecalcInfo.LoadSheet = loadsheet;
function doloadframeload(val) {
if (loadtimerobj) {
window.clearTimeout(loadtimerobj);
loadtimerobj = null;
}
var sview = SocialCalc.GetSpreadsheetControlObject();
parts = sview.DecodeSpreadsheetSave(val);
if (parts) {
if (parts.sheet) {
SocialCalc.RecalcLoadedSheet(null, val.substring(parts.sheet.start, parts.sheet.end), true); // notify recalc loop
}
}
if (val=="") {
SocialCalc.RecalcLoadedSheet(null, "", true); // notify recalc loop that it's not available, but that we tried
}
}
function loadframetimeout() {
if (loadtimerobj) {
window.clearTimeout(loadtimerobj);
loadtimerobj = null;
}
SocialCalc.RecalcLoadedSheet(null, "", true); // notify recalc loop that it's not available, but that we tried
}
</script>
</body>
</html>
EOF
socialcalc/socialcalctableeditor.js view on Meta::CPAN
this.inputEcho = null;
this.verticaltablecontrol = null;
this.horizontaltablecontrol = null;
this.logo = null;
this.cellhandles = null;
// Dynamic properties:
this.timeout = null; // if non-null, timer id for position calculations
this.busy = false; // true when executing command, calculating, etc.
this.ensureecell = false; // if true, ensure ecell is visible after timeout
this.deferredCommands = []; // commands to execute after busy, in form: {cmdstr: "cmds", saveundo: t/f}
this.gridposition = null; // screen coords of full grid
this.headposition = null; // screen coords of upper left of grid within header rows
this.firstscrollingrow = null; // row number of top row in last (the scrolling) pane
this.firstscrollingrowtop = null; // position of top row in last (the scrolling) pane
this.lastnonscrollingrow = null; // row number of last displayed row in last non-scrolling
// pane, or zero (for thumb position calculations)
socialcalc/socialcalctableeditor.js view on Meta::CPAN
return;
}
// Timer-driven steps for use with SocialCalc.EditorSheetStatusCallback
SocialCalc.EditorStepInfo = {
// status: "", // saved value to pass to callback
editor: null // for callback
// arg: null, // for callback
// timerobj: null
};
/*
SocialCalc.EditorStepSet = function(editor, status, arg) {
var esi = SocialCalc.EditorStepInfo;
addmsg("step: "+status);
if (esi.timerobj) {
alert("Already waiting. Old/new: "+esi.status+"/"+status);
}
esi.editor = editor;
esi.status = status;
esi.timerobj = window.setTimeout(SocialCalc.EditorStepDone, 1);
}
SocialCalc.EditorStepDone = function() {
var esi = SocialCalc.EditorStepInfo;
esi.timerobj = null;
SocialCalc.EditorSheetStatusCallback(null, esi.status, null, esi.editor);
}
*/
//
// str = SocialCalc.EditorGetStatuslineString(editor, status, arg, params)
//
// Assumes params is an object where it can use "calculating" and "command"
// to keep track of state.
// Returns string for status line.
socialcalc/socialcalctableeditor.js view on Meta::CPAN
return;
}
//
// Handle auto-repeat of dragging the cursor into the borders of the sheet
//
SocialCalc.AutoRepeatInfo = {
timer: null, // timer object for repeating
mouseinfo: null, // result from SocialCalc.GridMousePosition
repeatinterval: 1000, // milliseconds to wait between repeats
editor: null, // editor object to use when it repeats
repeatcallback: null // used instead of default when repeating (e.g., for cellhandles)
// called as: repeatcallback(newcoord, direction)
};
// Control auto-repeat. If mouseinfo==null, cancel.
SocialCalc.SetDragAutoRepeat = function(editor, mouseinfo, callback) {
var repeatinfo = SocialCalc.AutoRepeatInfo;
var coord, direction;
repeatinfo.repeatcallback = callback; // null in regular case
if (!mouseinfo) { // cancel
if (repeatinfo.timer) { // If was repeating, stop
window.clearTimeout(repeatinfo.timer); // cancel timer
repeatinfo.timer = null;
}
repeatinfo.mouseinfo = null;
return; // done
}
repeatinfo.editor = editor;
if (repeatinfo.mouseinfo) { // check for change while repeating
if (mouseinfo.rowheader || mouseinfo.rowfooter) {
if (mouseinfo.row != repeatinfo.mouseinfo.row) { // changed row while dragging sidewards
socialcalc/socialcalctableeditor.js view on Meta::CPAN
}
}
repeatinfo.mouseinfo = mouseinfo;
if (mouseinfo.distance < 5) repeatinfo.repeatinterval = 333;
else if (mouseinfo.distance < 10) repeatinfo.repeatinterval = 250;
else if (mouseinfo.distance < 25) repeatinfo.repeatinterval = 100;
else if (mouseinfo.distance < 35) repeatinfo.repeatinterval = 75;
else { // too far - stop repeating
if (repeatinfo.timer) { // if repeating, cancel it
window.clearTimeout(repeatinfo.timer); // cancel timer
repeatinfo.timer = null;
}
return;
}
if (!repeatinfo.timer) { // start if not already running
repeatinfo.timer = window.setTimeout(SocialCalc.DragAutoRepeat, repeatinfo.repeatinterval);
}
return;
}
//
// DragAutoRepeat()
//
socialcalc/socialcalctableeditor.js view on Meta::CPAN
else if (direction == "up" && cr.row > 1) cr.row--;
else if (direction == "down") cr.row++;
coord = SocialCalc.crToCoord(cr.col, cr.row);
repeatinfo.repeatcallback(coord, direction);
}
else {
coord = repeatinfo.editor.MoveECellWithKey("[a"+direction+"]shifted");
if (coord) repeatinfo.editor.EditorMouseRange(coord);
}
repeatinfo.timer = window.setTimeout(SocialCalc.DragAutoRepeat, repeatinfo.repeatinterval);
}
//
// Handling Clicking
//
SocialCalc.ProcessEditorDblClick = function(e) {
var editor, result, coord, textarea, wval, range;
socialcalc/socialcalctableeditor.js view on Meta::CPAN
// It is draggable.
//
// *************************************
SocialCalc.InputEcho = function(editor) {
var scc = SocialCalc.Constants;
this.editor = editor; // the TableEditor this belongs to
this.text = ""; // current value of what is displayed
this.interval = null; // timer handle
this.container = null; // element containing main echo as well as prompt line
this.main = null; // main echo area
this.prompt = null;
this.functionbox = null; // function chooser dialog
this.container = document.createElement("div");
SocialCalc.setStyles(this.container, "display:none;position:absolute;zIndex:10;");
socialcalc/socialcalctableeditor.js view on Meta::CPAN
if (!editor.cellhandles.mouseDown) {
editor.cellhandles.ShowCellHandles(true, true); // show move handles, too
if (target == cellhandles.dragpalette) {
var whichhandle = SocialCalc.SegmentDivHit([scc.CH_radius1, scc.CH_radius2], editor.cellhandles.dragpalette, clientX, clientY);
if (whichhandle==0) { // off of active part of palette
SocialCalc.CellHandlesHoverTimeout();
return;
}
if (cellhandles.tooltipstimer) {
window.clearTimeout(cellhandles.tooltipstimer);
cellhandles.tooltipstimer = null;
}
cellhandles.tooltipswhichhandle = whichhandle;
cellhandles.tooltipstimer = window.setTimeout(SocialCalc.CellHandlesTooltipsTimeout, 700);
}
if (cellhandles.timer) {
window.clearTimeout(cellhandles.timer);
cellhandles.timer = null;
}
cellhandles.timer = window.setTimeout(SocialCalc.CellHandlesHoverTimeout, 3000);
}
return;
}
//
// whichsegment = SocialCalc.SegmentDivHit(segtable, divWithMouseHit, x, y)
//
// Takes segtable = [upperleft quadrant, upperright, bottomright, bottomleft]
socialcalc/socialcalctableeditor.js view on Meta::CPAN
//addmsg((x-divWithMouseHit.offsetLeft)+","+(y-divWithMouseHit.offsetTop)+"="+quadrant+" "+v);
return v;
}
SocialCalc.CellHandlesHoverTimeout = function() {
editor = SocialCalc.Keyboard.focusTable; // get TableEditor doing keyboard stuff
if (!editor) return true; // we're not handling it -- let browser do default
var cellhandles = editor.cellhandles;
if (cellhandles.timer) {
window.clearTimeout(cellhandles.timer);
cellhandles.timer = null;
}
if (cellhandles.tooltipstimer) {
window.clearTimeout(cellhandles.tooltipstimer);
cellhandles.tooltipstimer = null;
}
editor.cellhandles.ShowCellHandles(true, false); // hide move handles
}
SocialCalc.CellHandlesTooltipsTimeout = function() {
editor = SocialCalc.Keyboard.focusTable; // get TableEditor doing keyboard stuff
if (!editor) return true; // we're not handling it -- let browser do default
var cellhandles = editor.cellhandles;
if (cellhandles.tooltipstimer) {
window.clearTimeout(cellhandles.tooltipstimer);
cellhandles.tooltipstimer = null;
}
var whichhandle = cellhandles.tooltipswhichhandle;
if (whichhandle==0) { // off of active part of palette
SocialCalc.CellHandlesHoverTimeout();
return;
}
if (whichhandle==-3) {
cellhandles.dragtooltip.innerHTML = scc.s_CHfillAllTooltip;
}
socialcalc/socialcalctableeditor.js view on Meta::CPAN
editor = SocialCalc.Keyboard.focusTable; // get TableEditor doing keyboard stuff
if (!editor) return true; // we're not handling it -- let browser do default
if (editor.busy) return; // don't do anything when busy (is this correct?)
var cellhandles = editor.cellhandles;
cellhandles.movedmouse = false; // detect no-op
if (cellhandles.timer) { // cancel timer
window.clearTimeout(cellhandles.timer);
cellhandles.timer = null;
}
if (cellhandles.tooltipstimer) {
window.clearTimeout(cellhandles.tooltipstimer);
cellhandles.tooltipstimer = null;
}
cellhandles.dragtooltip.innerHTML = " ";
cellhandles.dragtooltip.style.display = "none";
range = editor.range;
var whichhandle = SocialCalc.SegmentDivHit([scc.CH_radius1, scc.CH_radius2], editor.cellhandles.dragpalette, clientX, clientY);
if (whichhandle==1 || whichhandle==-1 || whichhandle==0) {
cellhandles.ShowCellHandles(true, false); // hide move handles
return;
socialcalc/socialcalctableeditor.js view on Meta::CPAN
// Currently .functionobj can only contain .offsetx and .offsety.
// If present they are used instead of the default ones.
registeredElements: [],
registered: false, // if true, an event handler has been registered for this functionality
// Items used during hover over an element
tooltipElement: null, // item being processed (.element is the actual element)
timer: null, // timer object waiting to see if holding over element
popupElement: null, // tooltip element being displayed
clientX: 0, // modifyable version to restrict movement
clientY: 0,
offsetX: SocialCalc.Constants.TooltipOffsetX, // modifyable version to allow positioning
offsetY: SocialCalc.Constants.TooltipOffsetY
}
//
// TooltipRegister(element, tiptext, functionobj) - make element have a tooltip
socialcalc/socialcalctableeditor.js view on Meta::CPAN
var e = event || window.event;
var tooltipinfo = SocialCalc.TooltipInfo;
tooltipinfo.viewport = SocialCalc.GetViewportInfo();
tooltipinfo.clientX = e.clientX + tooltipinfo.viewport.horizontalScroll;
tooltipinfo.clientY = e.clientY + tooltipinfo.viewport.verticalScroll;
var tobj = SocialCalc.LookupElement(e.target || e.srcElement, tooltipinfo.registeredElements);
if (tooltipinfo.timer) { // waiting to see if holding still: didn't hold still
window.clearTimeout(tooltipinfo.timer); // cancel timer
tooltipinfo.timer = null;
}
if (tooltipinfo.popupElement) { // currently displaying a tip: hide it
SocialCalc.TooltipHide();
}
tooltipinfo.tooltipElement = tobj || null;
if (!tobj || SocialCalc.ButtonInfo.buttonDown) return; // if not an object with a tip or a "button" is down, ignore
tooltipinfo.timer = window.setTimeout(SocialCalc.TooltipWaitDone, 700);
if (tooltipinfo.tooltipElement.element.addEventListener) { // Register event for mouse down which cancels tooltip stuff
tooltipinfo.tooltipElement.element.addEventListener("mousedown", SocialCalc.TooltipMouseDown, false);
}
else if (tooltipinfo.tooltipElement.element.attachEvent) { // IE
tooltipinfo.tooltipElement.element.attachEvent("onmousedown", SocialCalc.TooltipMouseDown);
}
return;
socialcalc/socialcalctableeditor.js view on Meta::CPAN
//
// TooltipMouseDown(event)
//
SocialCalc.TooltipMouseDown = function(event) {
var e = event || window.event;
var tooltipinfo = SocialCalc.TooltipInfo;
if (tooltipinfo.timer) {
window.clearTimeout(tooltipinfo.timer); // cancel timer
tooltipinfo.timer = null;
}
if (tooltipinfo.popupElement) { // currently displaying a tip: hide it
SocialCalc.TooltipHide();
}
if (tooltipinfo.tooltipElement) {
if (tooltipinfo.tooltipElement.element.removeEventListener) { // DOM Level 2 -- Firefox, et al
tooltipinfo.tooltipElement.element.removeEventListener("mousedown", SocialCalc.TooltipMouseDown, false);
}
socialcalc/socialcalctableeditor.js view on Meta::CPAN
}
//
// TooltipWaitDone()
//
SocialCalc.TooltipWaitDone = function() {
var tooltipinfo = SocialCalc.TooltipInfo;
tooltipinfo.timer = null;
SocialCalc.TooltipDisplay(tooltipinfo.tooltipElement);
}
// *************************************
//
// Button functions:
//
socialcalc/socialcalctableeditor.js view on Meta::CPAN
// .functionobj is an object with optional function objects for:
// mouseover, mouseout, mousedown, repeatinterval, mouseup, disabled
registeredElements: [],
// Items used during hover over an element, clicking, repeating, etc.
buttonElement: null, // item being processed, hover or down (.element is the actual element)
doingHover: false, // true if mouse is over one of our elements
buttonDown: false, // true if button down and buttonElement not null
timer: null, // timer object for repeating
// Used while processing an event
horizontalScroll: 0,
verticalScroll: 0,
clientX: 0,
clientY: 0
}
socialcalc/socialcalctableeditor.js view on Meta::CPAN
else e.returnValue = false; // IE 5+
buttoninfo.horizontalScroll = viewportinfo.horizontalScroll;
buttoninfo.verticalScroll = viewportinfo.verticalScroll;
buttoninfo.clientX = e.clientX + buttoninfo.horizontalScroll; // get document-relative coordinates
buttoninfo.clientY = e.clientY + buttoninfo.verticalScroll;
if (bobj && bobj.functionobj && bobj.functionobj.MouseDown) bobj.functionobj.MouseDown(e, buttoninfo, bobj);
if (bobj.repeatwait) { // if a repeat wait is set, then starting waiting for first repetition
buttoninfo.timer = window.setTimeout(SocialCalc.ButtonRepeat, bobj.repeatwait);
}
return;
}
//
// ButtonMouseUp(event)
//
SocialCalc.ButtonMouseUp = function(event) {
var e = event || window.event;
var buttoninfo = SocialCalc.ButtonInfo;
var bobj = buttoninfo.buttonElement;
if (buttoninfo.timer) { // if repeating, cancel it
window.clearTimeout(buttoninfo.timer); // cancel timer
buttoninfo.timer = null;
}
if (!buttoninfo.buttonDown) return; // already did this (e.g., in IE, releaseCapture fires losecapture)
if (e.stopPropagation) e.stopPropagation(); // DOM Level 2
else e.cancelBubble = true; // IE 5+
if (e.preventDefault) e.preventDefault(); // DOM Level 2
else e.returnValue = false; // IE 5+
if (document.removeEventListener) { // DOM Level 2
socialcalc/socialcalctableeditor.js view on Meta::CPAN
SocialCalc.ButtonRepeat = function() {
var buttoninfo = SocialCalc.ButtonInfo;
var bobj = buttoninfo.buttonElement;
if (!bobj) return;
if (bobj && bobj.functionobj && bobj.functionobj.Repeat) bobj.functionobj.Repeat(null, buttoninfo, bobj);
buttoninfo.timer = window.setTimeout(SocialCalc.ButtonRepeat, bobj.repeatinterval || 100);
}
// *************************************
//
// MouseWheel functions:
//
// *************************************
SocialCalc.MouseWheelInfo = {
socialcalc/socialcalcviewer.js view on Meta::CPAN
spreadsheet.editor.ScheduleRender();
}
else {
spreadsheet.editor.EditorScheduleSheetCommands("recalc");
}
}
//
// SocialCalc.SpreadsheetViewerDoRepeatingMacro
//
// Called by a timer. Executes repeatingMacroCommands once.
// Use the "startcmdextension repeatmacro delay" command last to schedule this again.
//
SocialCalc.SpreadsheetViewerDoRepeatingMacro = function() {
var spreadsheet = SocialCalc.GetSpreadsheetViewerObject();
var editor = spreadsheet.editor;
spreadsheet.repeatingMacroTimer = null;
socialcalc/third-party/Socket.IO-node/support/socket.io-client/lib/transport.js view on Meta::CPAN
var msgs = this.decode(data);
if (msgs && msgs.length){
for (var i = 0, l = msgs.length; i < l; i++){
this.onMessage(msgs[i]);
}
}
};
/**
* All the transports have a dedicated timeout to detect if
* the connection is still alive. We clear the existing timer
* and set new one each time this function is called. When the
* timeout does occur it will call the `onTimeout` method.
*
* @api private
*/
Transport.prototype.setTimeout = function(){
var self = this;
if (this.timeout) clearTimeout(this.timeout);
this.timeout = setTimeout(function(){
self.onTimeout();
socialcalc/third-party/Socket.IO-node/support/socket.io-client/lib/transport.js view on Meta::CPAN
*
* @param {String} heartbeat Heartbeat response from the server.
* @api private
*/
Transport.prototype.onHeartbeat = function(heartbeat){
this.send('~h~' + heartbeat); // echo
};
/**
* Notifies the base when a connection to the Socket.IO server has
* been established. And it starts the connection `timeout` timer.
*
* @api private
*/
Transport.prototype.onConnect = function(){
this.connected = true;
this.connecting = false;
this.base.onConnect();
this.setTimeout();
};
socialcalc/third-party/Socket.IO-node/support/socket.io-client/socket.io.js view on Meta::CPAN
var msgs = this.decode(data);
if (msgs && msgs.length){
for (var i = 0, l = msgs.length; i < l; i++){
this.onMessage(msgs[i]);
}
}
};
/**
* All the transports have a dedicated timeout to detect if
* the connection is still alive. We clear the existing timer
* and set new one each time this function is called. When the
* timeout does occur it will call the `onTimeout` method.
*
* @api private
*/
Transport.prototype.setTimeout = function(){
var self = this;
if (this.timeout) clearTimeout(this.timeout);
this.timeout = setTimeout(function(){
self.onTimeout();
socialcalc/third-party/Socket.IO-node/support/socket.io-client/socket.io.js view on Meta::CPAN
*
* @param {String} heartbeat Heartbeat response from the server.
* @api private
*/
Transport.prototype.onHeartbeat = function(heartbeat){
this.send('~h~' + heartbeat); // echo
};
/**
* Notifies the base when a connection to the Socket.IO server has
* been established. And it starts the connection `timeout` timer.
*
* @api private
*/
Transport.prototype.onConnect = function(){
this.connected = true;
this.connecting = false;
this.base.onConnect();
this.setTimeout();
};
socialcalc/third-party/hippie/jquery-1.3.2.min.js view on Meta::CPAN
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
* Revision: 6246
*/
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;thi...
/*
* Sizzle CSS Selector Engine - v0.9.3
* Copyright 2009, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==...
socialcalc/third-party/lib/PocketIO/Connection.pm view on Meta::CPAN
sub type { shift->{type} }
sub is_connected { $_[0]->{is_connected} }
sub connecting {
my $self = shift;
DEBUG && warn "State 'connecting'\n";
$self->{connect_timer} = AnyEvent->timer(
after => $self->{connect_timeout},
cb => sub {
DEBUG && warn "Timeout 'connect_timeout'";
$self->on('connect_failed')->($self);
}
);
}
sub reconnecting {
my $self = shift;
DEBUG && warn "State 'reconnecting'\n";
$self->{reconnect_timer} = AnyEvent->timer(
after => $self->{reconnect_timeout},
cb => sub {
DEBUG && warn "Timeout 'reconnect_timeout'\n";
$self->on('reconnect_failed')->($self);
}
);
}
sub connected {
my $self = shift;
DEBUG && warn "State 'connected'\n";
delete $self->{connect_timer};
$self->{is_connected} = 1;
$self->on('connect')->($self);
return $self;
}
sub reconnected {
my $self = shift;
DEBUG && warn "State 'reconnected'\n";
delete $self->{reconnect_timer};
$self->on('reconnect')->($self);
return $self;
}
sub disconnected {
my $self = shift;
DEBUG && warn "State 'disconnected'\n";
delete $self->{connect_timer};
delete $self->{reconnect_timer};
$self->{data} = '';
$self->{messages} = [];
$self->{is_connected} = 0;
$self->{disconnect_timer} = AnyEvent->timer(
after => 0,
cb => sub {
$self->on('disconnect')->($self);
}
);
return $self;
}
sub id {