view release on metacpan or search on metacpan
socialcalc/formula1.js
socialcalc/images/sc-1x1.gif
socialcalc/images/sc-aligncenter.gif
socialcalc/images/sc-alignleft.gif
socialcalc/images/sc-alignright.gif
socialcalc/images/sc-bordersoff.gif
socialcalc/images/sc-borderson.gif
socialcalc/images/sc-chooserarrow.gif
socialcalc/images/sc-commentbg.gif
socialcalc/images/sc-copy.gif
socialcalc/images/sc-cursorinsertleft.gif
socialcalc/images/sc-cursorinsertup.gif
socialcalc/images/sc-cut.gif
socialcalc/images/sc-defaultcolor.gif
socialcalc/images/sc-delete.gif
socialcalc/images/sc-deletecol.gif
socialcalc/images/sc-deleterow.gif
socialcalc/images/sc-divider1.gif
socialcalc/images/sc-drag-handles.gif
socialcalc/images/sc-drag-handles.png
socialcalc/images/sc-endcap-h.gif
socialcalc/images/sc-endcap-v.gif
socialcalc/Changes.txt view on Meta::CPAN
Added SocialCalc.TestCriteria.
2008-02-19:
Added DAVERAGE, DCOUNT, DCOUNTA, DGET, DMAX, DMIN, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DVAR, and DVARP.
Added HLOOKUP, VLOOKUP, MATCH, INDEX, COUNTIF, and SUMIF.
2008-02-21:
Added the rest of the wikiCalc/SocialCalc 1.1 normal functions.
2008-03-10:
Replaced cursor use of editor.ReplaceCell with editor.UpdateCellCSS for speedup.
2008-03-12:
Made 702 maximum number of columns (ZZ) for number to characters.
2008-03-14:
First implementation of socialcalcspeadsheetcontrol.js.
2008-03-20:
Fixed up name support in formulas, including getting names defined by formulas working.
socialcalc/Changes.txt view on Meta::CPAN
2008-04-18:
Added dorecalc argument to SocialCalc.ConvertSaveToOtherFormat.
2008-04-21:
Added editor.SettingsCallbacks.
Added named ranges to Sort.
2008-04-23:
Added SocialCalc.defaultvalues.minimumcolwidth.
Added column drag resizing.
Fixed bug with dragging cursor out of grid losing capture on Firefox and Safari.
2008-04-24:
Made drag resize display work in Opera.
Removed dependency on body setting for font-size:small.
Added more button bar buttons: Reverse, Wiki Text, Align, etc.
Added spreadsheet control ExportCallback.
2008-04-25:
Fixed thumbstatus font size.
More drag resize for Opera and Firefox 3.
socialcalc/Changes.txt view on Meta::CPAN
2008-05-04:
Added optional styles for table control elements.
Moved table control repeat settings to constants.
Made thumbstatus settings skinnable with constants.
2008-05-05:
More constants: The rest of socialcalctableeditor.js, formatnumber2.js, and some of formula1.js.
2008-05-06:
More constants: The rest of formula1.js and HighlightTypes for cursor and range.
Fixed recent bug with unable to click inside of input box.
Fixed -1 1/2 => -0.5 bug.
2008-05-09:
Mostly finished InputBox/InputEcho stuff.
Fixed SocialCalc.intFunc bug which led to 2/3/08 (all Feb) being wrong.
2008-05-11:
Fixes some "event" references that should have been "e" in socialcalctableeditor.js.
Made InputEcho draggable.
socialcalc/Changes.txt view on Meta::CPAN
2009-09-03:
Put in SocialCalc.CanonicalizeSheet to do a pass before save to minimize sheet extents, remove unused items from
saved lists and alphabetize them. The saved data is upwards and downwards compatible.
Added SocialCalc.Constants.doCanonicalizeSheet to turn this off.
2009-09-09:
Added sampleWidth, sampleHeight, backgroundImage, backgroundImageDefault, and backgroundImageDisabled to color chooser attribs.
2009-09-23:
Added ensureWithin to socialcalcpopup.js.
Changed cursor position detection a bit in color chooser.
Made border color chooser moveable.
Fixed "-", ".", "e1" and other things being considered a number on input.
2009-10-21:
Added text subtype "tr" (text rich) to formula1.js TypeLookupTable and to socialcalc3.js format_text_for_display
2009-11-02:
Minor change to SocialCalc.special_chars to clean up regex. Not a bug, but a minor performance thing.
2009-11-03:
socialcalc/README view on Meta::CPAN
1. Then check out this project and run the stand-alone server:
git clone git://github.com/audreyt/socialcalc.git
cd socialcalc
perl multiserver.pl
2. Open port 9999 in multiple browsers with WebSocket support.
3. See red triangles representing peer cursors.
Type in a browser, appears in all others!
Browsers currently tested:
Native WebSocket: Safari 5, Chrome 5, Firefox 4 beta1.
Flash emulation: Firefox 3, Opera 10.
Share & Enjoy!
Audrey
socialcalc/index.mt view on Meta::CPAN
var scc = SocialCalc.Constants;
var b1 = window.location.search.charAt(1) || "4";
var b2 = window.location.search.charAt(2) || "C";
var b3 = window.location.search.charAt(3) || "8";
var b4 = window.location.search.charAt(4) || "9";
var b5 = window.location.search.charAt(5) || "8";
scc.SCToolbarbackground = "background-color:#4040"+b1+"0;";
scc.SCTabbackground = "background-color:#CC"+b2+";";
scc.SCTabselectedCSS = "font-size:small;padding:6px 30px 6px 8px;color:#FFF;background-color:#4040"+b1+"0;cursor:default;border-right:1px solid #CC"+b2+";";
scc.SCTabplainCSS = "font-size:small;padding:6px 30px 6px 8px;color:#FFF;background-color:#8080"+b3+"0;cursor:default;border-right:1px solid #CC"+b2+";";
scc.SCToolbartext = "font-size:x-small;font-weight:bold;color:#FFF;padding-bottom:4px;";
scc.ISCButtonBorderNormal = "#4040"+b1+"0";
scc.ISCButtonBorderHover = "#99"+b4+"";
scc.ISCButtonBorderDown = "#FFF";
scc.ISCButtonDownBackground = "#88"+b5+"";
SocialCalc.Popup.LocalizeString = SocialCalc.LocalizeString; // needed for localization
var spreadsheet = new SocialCalc.SpreadsheetControl();
var savestr = document.getElementById("savestr");
socialcalc/socialcalc-3.js view on Meta::CPAN
this.coordToCR = {}; // for cells starting spans, coordToCR[coord]={row:row, col:col}
this.colwidth = []; // precomputed column widths, taking into account defaults
this.totalwidth = 0; // precomputed total table width
this.rowpanes = []; // for each pane, {first: firstrow, last: lastrow}
this.colpanes = []; // for each pane, {first: firstrow, last: lastrow}
this.maxcol=0; // max col and row to display, adding long spans, etc.
this.maxrow=0;
this.highlights = {}; // for each cell with special display: coord:highlightType (see this.highlightTypes)
this.cursorsuffix = ""; // added to highlights[cr]=="cursor" to get type to lookup
this.highlightTypes = // attributes to change when highlit
{
cursor: {style: scc.defaultHighlightTypeCursorStyle, className: scc.defaultHighlightTypeCursorClass},
range: {style: scc.defaultHighlightTypeRangeStyle, className: scc.defaultHighlightTypeRangeClass},
cursorinsertup: {style: "color:#FFF;backgroundColor:#A6A6A6;backgroundRepeat:repeat-x;backgroundPosition:top left;backgroundImage:url("+scc.defaultImagePrefix+"cursorinsertup.gif);", className: scc.defaultHighlightTypeCursorClass},
cursorinsertleft: {style: "color:#FFF;backgroundColor:#A6A6A6;backgroundRepeat:repeat-y;backgroundPosition:top left;backgroundImage:url("+scc.defaultImagePrefix+"cursorinsertleft.gif);", className: scc.defaultHighlightTypeCursorClass},
range2: {style: "color:#000;backgroundColor:#FFF;backgroundImage:url("+scc.defaultImagePrefix+"range2.gif);", className: ""}
}
this.cellIDprefix = scc.defaultCellIDPrefix; // if non-null, each cell will render with an ID
this.defaultlinkstyle = null; // default linkstyle object (allows you to pass values to link renderer)
this.defaultHTMLlinkstyle = {type: "html"}; // default linkstyle for standalone HTML
// constants:
socialcalc/socialcalc-3.js view on Meta::CPAN
result.style.cssText=stylestr;
//!!!!!!!!!
// NOTE: csss and cssc are not supported yet.
// csss needs to be parsed into pieces to override just the attributes specified, not all with assignment to cssText.
// cssc just needs to set the className.
t = context.highlights[coord];
if (t) { // this is a highlit cell: Override style appropriately
if (t=="cursor") t += context.cursorsuffix; // cursor can take alternative forms
if (context.highlightTypes[t].className) {
result.className = (result.className ? result.className+" " : "") + context.highlightTypes[t].className;
}
SocialCalc.setStyles(result, context.highlightTypes[t].style);
}
return result;
}
SocialCalc.CoordInPane = function(context, coord, rowpane, colpane) {
socialcalc/socialcalc.css view on Meta::CPAN
inset 0 0 0 8px lime,
inset 0 0 0 10px cyan,
inset 0 0 0 12px blue,
inset 0 0 0 14px purple;
*/
}
.defaultComment {background-repeat:no-repeat;background-position:top right;background-image:url(images/sc-commentbg.gif);}
.defaultCommentNoGridStyle {}
.defaultHighlightTypeCursor {color:#FFF;background-color:#A6A6A6;}
.defaultHighlightTypeRange {color:#000;background-color:#E5E5E5;}
.defaultColname {font-size:small;text-align:center;color:#FFFFFF;background-color:#808080;cursor:e-resize;}
.defaultSelectedColname {font-size:small;text-align:center;color:#FFFFFF;background-color:#404040;cursor:e-resize;}
.defaultRowname {font-size:small;text-align:right;color:#FFFFFF;background-color:#808080;}
.defaultSelectedRowname {font-size:small;text-align:right;color:#FFFFFF;background-color:#404040;}
.defaultUpperLeft {font-size:small;}
.defaultSkippedCell {font-size:small;background-color:#CCC;}
.defaultPaneDivider {font-size:small;background-color:#ECECEC;padding:0px;}
.cteGriddiv {}
.defaultInputEcho {background-color:#FFD;border:1px solid #884;
font-size:small;padding:2px 10px 1px 2px;cursor:default;}
.TCmain {background-color:#EEE;}
.TCendcap {background-color:#FFF;}
.TCpaneslider {background-color:#CCC;}
.TClessbutton {background-color:#AAA;}
.TCmorebutton {background-color:#AAA;}
.TCscrollarea {background-color:#DDD;}
.TCthumb {background-color:#CCC;}
.TCPStrackingline {overflow:hidden;position:absolute;z-index:100;}
.TCTDFSthumbstatus {height:20px;width:auto;border:1px solid black;padding:2px;
background-color:#FFF;font-size:small;position:absolute;z-index:100;}
socialcalc/socialcalcconstants.js view on Meta::CPAN
defaultColWidth: "80", // text
defaultMinimumColWidth: 10, // numeric
// For each of the following default sheet display values at least one of class and/or style are needed
defaultHighlightTypeCursorClass: "",
defaultHighlightTypeCursorStyle: "color:#FFF;backgroundColor:#A6A6A6;",
defaultHighlightTypeRangeClass: "",
defaultHighlightTypeRangeStyle: "color:#000;backgroundColor:#E5E5E5;",
defaultColnameClass: "", // regular column heading letters, needs a cursor property
defaultColnameStyle: "font-size:small;text-align:center;color:#FFFFFF;background-color:#808080;cursor:e-resize;",
defaultSelectedColnameClass: "", // column with selected cell, needs a cursor property
defaultSelectedColnameStyle: "font-size:small;text-align:center;color:#FFFFFF;background-color:#404040;cursor:e-resize;",
defaultRownameClass: "", // regular row heading numbers
defaultRownameStyle: "font-size:small;text-align:right;color:#FFFFFF;background-color:#808080;",
defaultSelectedRownameClass: "", // column with selected cell, needs a cursor property
defaultSelectedRownameStyle: "font-size:small;text-align:right;color:#FFFFFF;background-color:#404040;",
defaultUpperLeftClass: "", // Corner cell in upper left
defaultUpperLeftStyle: "font-size:small;",
defaultSkippedCellClass: "", // used if present for spanned cells peeking into a pane (at least one of class/style needed)
defaultSkippedCellStyle: "font-size:small;background-color:#CCC", // used if present
defaultPaneDividerClass: "", // used if present for the look of the space between panes (at least one of class/style needed)
defaultPaneDividerStyle: "font-size:small;background-color:#C0C0C0;padding:0px;", // used if present
s_rcMissingSheet: "Render Context must have a sheet object", // unlikely thrown error
socialcalc/socialcalcconstants.js view on Meta::CPAN
defaultDisplayFALSE: 'FALSE',
//
// SocialCalc Table Editor module, socialcalctableeditor.js:
//
//*** SocialCalc.TableEditor
defaultImagePrefix: "images/sc-", // URL prefix for images (e.g., "/images/sc")
defaultTableEditorIDPrefix: "te_", // if present, many TableEditor elements are assigned IDs with this prefix
defaultPageUpDnAmount: 15, // number of rows to move cursor on PgUp/PgDn keys (numeric)
AllowCtrlS: true, // turns on Ctrl-S trapdoor for setting custom numeric formats and commands if true
//*** SocialCalc.CreateTableEditor
defaultTableControlThickness: 20, // the short size for the scrollbars, etc. (numeric in pixels)
cteGriddivClass: "", // if present, the class for the TableEditor griddiv element
//** SocialCalc.EditorGetStatuslineString -- strings shown on status line
socialcalc/socialcalcconstants.js view on Meta::CPAN
s_statusline_circref: '<span style="color:red;">Circular reference: ',
//** SocialCalc.InputBoxDisplayCellContents
s_inputboxdisplaymultilinetext: "[Multi-line text: Click icon on right to edit]",
//** SocialCalc.InputEcho
defaultInputEchoClass: "", // if present, the class of the popup inputEcho div
defaultInputEchoStyle: "filter:alpha(opacity=90);opacity:.9;backgroundColor:#FFD;border:1px solid #884;"+
"fontSize:small;padding:2px 10px 1px 2px;cursor:default;", // if present, pseudo style
defaultInputEchoPromptClass: "", // if present, the class of the popup inputEcho div
defaultInputEchoPromptStyle: "filter:alpha(opacity=90);opacity:.9;backgroundColor:#FFD;"+
"borderLeft:1px solid #884;borderRight:1px solid #884;borderBottom:1px solid #884;"+
"fontSize:small;fontStyle:italic;padding:2px 10px 1px 2px;cursor:default;", // if present, pseudo style
//** SocialCalc.InputEchoText
ietUnknownFunction: "Unknown function ", // displayed when typing "=unknown("
//** SocialCalc.CellHandles
CH_radius1: 29.0, // extent of inner circle within 90px image
CH_radius2: 41.0, // extent of outer circle within 90px image
s_CHfillAllTooltip: "Fill Contents and Formats Down/Right", // tooltip for fill all handle
socialcalc/socialcalcconstants.js view on Meta::CPAN
//
// SocialCalc Spreadsheet Control module, socialcalcspreadsheetcontrol.js:
//
//*** SocialCalc.SpreadsheetControl
SCToolbarbackground: "background-color:#404040;",
SCTabbackground: "background-color:#CCC;",
SCTabselectedCSS: "font-size:small;padding:6px 30px 6px 8px;color:#FFF;background-color:#404040;cursor:default;border-right:1px solid #CCC;",
SCTabplainCSS: "font-size:small;padding:6px 30px 6px 8px;color:#FFF;background-color:#808080;cursor:default;border-right:1px solid #CCC;",
SCToolbartext: "font-size:x-small;font-weight:bold;color:#FFF;padding-bottom:4px;",
SCFormulabarheight: 30, // in pixels, will contain a text input box
SCStatuslineheight: 20, // in pixels
SCStatuslineCSS: "font-size:10px;padding:3px 0px;",
// Constants for default Format tab (settings)
//
// *** EVEN THOUGH THESE DON'T START WITH s_: ***
socialcalc/socialcalcpopup.js view on Meta::CPAN
main.style.border = "1px solid black";
if (attribs.width) {
main.style.width = attribs.width;
}
spcdata.mainele.appendChild(main);
if (attribs.title) {
main.innerHTML = '<table cellspacing="0" cellpadding="0" style="border-bottom:1px solid black;"><tr>'+
'<td style="font-size:10px;cursor:default;width:100%;background-color:#999;color:#FFF;">'+attribs.title+'</td>'+
'<td style="font-size:10px;cursor:default;color:#666;" onclick="SocialCalc.Popup.Cancel();"> X </td></tr></table>';
if (attribs.moveable) {
spcdata.dragregistered = main.firstChild.firstChild.firstChild.firstChild;
SocialCalc.DragRegister(spcdata.dragregistered, true, true, {MouseDown: SocialCalc.DragFunctionStart, MouseMove: SocialCalc.DragFunctionPosition,
MouseUp: SocialCalc.DragFunctionPosition,
Disabled: null, positionobj: main});
}
}
return main;
socialcalc/socialcalcpopup.js view on Meta::CPAN
spc[id] = spcid;
var spcdata = spcid.data;
spcdata.attribs = attribs || {};
var ele = document.getElementById(id);
if (!ele) {alert("Missing element "+id); return;}
spcdata.mainele = ele;
ele.innerHTML = '<input style="cursor:pointer;width:'+(spcdata.attribs.inputWidth||'100px')+';font-size:smaller;" onfocus="this.blur();" onclick="SocialCalc.Popup.CClick(\''+id+'\');" value="">';
spcdata.options = []; // set to nothing - use Initialize to fill
}
SocialCalc.Popup.Types.List.SetValue = function(type, id, value) {
var i;
var sp = SocialCalc.Popup;
socialcalc/socialcalcpopup.js view on Meta::CPAN
var spcdata = spc[id].data
var str = "";
spcdata.popupele = sp.CreatePopupDiv(id, spcdata.attribs);
if (spcdata.custom) {
str = SocialCalc.Popup.Types.List.MakeCustom(type, id);
ele = document.createElement("div");
ele.innerHTML = '<div style="cursor:default;padding:4px;background-color:#CCC;">'+str+'</div>';
spcdata.customele = ele.firstChild.firstChild.childNodes[1];
spcdata.listdiv = null;
spcdata.contentele = ele;
}
else {
str = SocialCalc.Popup.Types.List.MakeList(type, id);
ele = document.createElement("div");
ele.innerHTML = '<div style="cursor:default;padding:4px;">'+str+'</div>';
spcdata.customele = null;
spcdata.listdiv = ele.firstChild;
spcdata.contentele = ele;
}
if (spcdata.mainele && spcdata.mainele.firstChild) {
spcdata.mainele.firstChild.disabled = true;
}
socialcalc/socialcalcpopup.js view on Meta::CPAN
var spt = sp.Types;
var spc = sp.Controls;
var spcdata = spc[id].data;
var a = spcdata.options[num].a;
if (a && a.custom) {
oele = spcdata.contentele;
str = SocialCalc.Popup.Types.List.MakeCustom("List", id);
nele = document.createElement("div");
nele.innerHTML = '<div style="cursor:default;padding:4px;background-color:#CCC;">'+str+'</div>';
spcdata.customele = nele.firstChild.firstChild.childNodes[1];
spcdata.listdiv = null;
spcdata.contentele = nele;
spcdata.popupele.replaceChild(nele, oele);
if (spcdata.attribs.ensureWithin) {
SocialCalc.Popup.EnsurePosition(id, spcdata.attribs.ensureWithin);
}
return;
}
socialcalc/socialcalcpopup.js view on Meta::CPAN
var oele, str, nele;
var sp = SocialCalc.Popup;
var spt = sp.Types;
var spc = sp.Controls;
var spcdata = spc[id].data;
oele = spcdata.contentele;
str = SocialCalc.Popup.Types.List.MakeList("List", id);
nele = document.createElement("div");
nele.innerHTML = '<div style="cursor:default;padding:4px;">'+str+'</div>';
spcdata.customele = null;
spcdata.listdiv = nele.firstChild;
spcdata.contentele = nele;
spcdata.popupele.replaceChild(nele, oele);
if (spcdata.attribs.ensureWithin) {
SocialCalc.Popup.EnsurePosition(id, spcdata.attribs.ensureWithin);
}
}
socialcalc/socialcalcpopup.js view on Meta::CPAN
spcdata.attribs = attribs || {};
var spca = spcdata.attribs;
spcdata.value = "";
var ele = document.getElementById(id);
if (!ele) {alert("Missing element "+id); return;}
spcdata.mainele = ele;
ele.innerHTML = '<div style="cursor:pointer;border:1px solid black;vertical-align:top;width:'+
(spca.sampleWidth || '15px')+';height:'+(spca.sampleHeight || '15px')+
';" onclick="SocialCalc.Popup.Types.ColorChooser.ControlClicked(\''+id+'\');"> </div>';
}
SocialCalc.Popup.Types.ColorChooser.SetValue = function(type, id, value) {
var i, img, pos;
var sp = SocialCalc.Popup;
socialcalc/socialcalcpopup.js view on Meta::CPAN
var str = "";
spcdata.oldvalue = spcdata.value; // remember starting value
spcdata.popupele = sp.CreatePopupDiv(id, spcdata.attribs);
if (spcdata.custom) {
str = SocialCalc.Popup.Types.ColorChooser.MakeCustom(type, id);
ele = document.createElement("div");
ele.innerHTML = '<div style="cursor:default;padding:4px;background-color:#CCC;">'+str+'</div>';
spcdata.customele = ele.firstChild.firstChild.childNodes[2];
spcdata.contentele = ele;
}
else {
mainele = SocialCalc.Popup.Types.ColorChooser.CreateGrid(type, id);
ele = document.createElement("div");
ele.style.padding = "3px";
ele.style.backgroundColor = "#CCC";
socialcalc/socialcalcpopup.js view on Meta::CPAN
rowele.appendChild(ele);
g.ele = ele;
}
grid.tbody.appendChild(rowele);
}
mainele.appendChild(grid.table);
ele = document.createElement("div");
ele.style.marginTop = "3px";
ele.innerHTML = '<table cellspacing="0" cellpadding="0"><tr>'+
'<td style="width:17px;background-color:#FFF;background-image:url('+sp.imagePrefix+'defaultcolor.gif);height:16px;font-size:10px;cursor:pointer;" title="'+SPLoc("Default")+'"> </td>'+
'<td style="width:23px;height:16px;font-size:10px;text-align:center;cursor:pointer;" title="'+SPLoc("Custom")+'">#</td>'+
'<td style="width:60px;height:16px;font-size:10px;text-align:center;cursor:pointer;">'+SPLoc("OK")+'</td>'+
'</tr></table>';
grid.defaultbox = ele.firstChild.firstChild.firstChild.childNodes[0];
grid.defaultbox.onclick = spt.ColorChooser.DefaultClicked;
grid.custom = ele.firstChild.firstChild.firstChild.childNodes[1];
grid.custom.onclick = spt.ColorChooser.CustomClicked;
grid.msg = ele.firstChild.firstChild.firstChild.childNodes[2];
grid.msg.onclick = spt.ColorChooser.CloseOK;
mainele.appendChild(ele);
grid.table.onmousedown = spt.ColorChooser.GridMouseDown;
socialcalc/socialcalcpopup.js view on Meta::CPAN
var id = sp.Current.id;
if (!id) return;
var spcdata = spc[id].data;
var oele, str, nele;
oele = spcdata.contentele;
str = SocialCalc.Popup.Types.ColorChooser.MakeCustom("ColorChooser", id);
nele = document.createElement("div");
nele.innerHTML = '<div style="cursor:default;padding:4px;background-color:#CCC;">'+str+'</div>';
spcdata.customele = nele.firstChild.firstChild.childNodes[2];
spcdata.contentele = nele;
spcdata.popupele.replaceChild(nele, oele);
spcdata.customele.value = sp.RGBToHex(spcdata.value);
if (spcdata.attribs.ensureWithin) {
SocialCalc.Popup.EnsurePosition(id, spcdata.attribs.ensureWithin);
}
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
{func: SocialCalc.SpreadsheetControlStatuslineCallback,
params: {statuslineid: this.idPrefix+"statusline",
recalcid1: this.idPrefix+"divider_recalc",
recalcid2: this.idPrefix+"button_recalc"}};
SocialCalc.CurrentSpreadsheetControlObject = this; // remember this for rendezvousing on events
this.editor.MoveECellCallback.movefrom = function(editor) {
var cr;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
spreadsheet.context.cursorsuffix = "";
if (editor.range2.hasrange && !editor.cellhandles.noCursorSuffix) {
if (editor.ecell.row==editor.range2.top && (editor.ecell.col<editor.range2.left || editor.ecell.col>editor.range2.right+1)) {
spreadsheet.context.cursorsuffix = "insertleft";
}
if (editor.ecell.col==editor.range2.left && (editor.ecell.row<editor.range2.top || editor.ecell.row>editor.range2.bottom+1)) {
spreadsheet.context.cursorsuffix = "insertup";
}
}
};
// formula bar buttons
this.formulabuttons = {
formulafunctions: {image: "formuladialog.gif", tooltip: "Functions", // tooltips are localized when set below
command: SocialCalc.SpreadsheetControl.DoFunctionList},
multilineinput: {image: "multilinedialog.gif", tooltip: "Multi-line Input Box",
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
sstr = SocialCalc.SpreadsheetCmdSLookup[which] || "";
spreadsheet.ExecuteCommand(combostr, sstr);
if (editor.range.hasrange) { // set ecell to upper left
editor.MoveECell(SocialCalc.crToCoord(editor.range.left, editor.range.top));
editor.RangeRemove();
}
break;
case "movefrom":
if (editor.range2.hasrange) { // toggle if already there
spreadsheet.context.cursorsuffix = "";
editor.Range2Remove();
spreadsheet.ExecuteCommand("redisplay", "");
}
else if (editor.range.hasrange) { // set range2 to range or one cell
editor.range2.top = editor.range.top;
editor.range2.right = editor.range.right;
editor.range2.bottom = editor.range.bottom;
editor.range2.left = editor.range.left;
editor.range2.hasrange = true;
editor.MoveECell(SocialCalc.crToCoord(editor.range.left, editor.range.top));
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
ele = document.getElementById(spreadsheet.idPrefix+"button_movepaste");
ele.src=spreadsheet.imagePrefix+"movepaste"+str+".gif";
ele = document.getElementById(spreadsheet.idPrefix+"button_moveinsert");
ele.src=spreadsheet.imagePrefix+"moveinsert"+str+".gif";
if (editor.range2.hasrange) editor.RangeRemove();
break;
case "movepaste":
case "moveinsert":
if (editor.range2.hasrange) {
spreadsheet.context.cursorsuffix = "";
combostr = which+" "+
SocialCalc.crToCoord(editor.range2.left, editor.range2.top) + ":" +
SocialCalc.crToCoord(editor.range2.right, editor.range2.bottom)
+" "+editor.ecell.coord;
spreadsheet.ExecuteCommand(combostr, "");
editor.Range2Remove();
ele = document.getElementById(spreadsheet.idPrefix+"button_movefrom");
ele.src=spreadsheet.imagePrefix+"movefromoff.gif";
ele = document.getElementById(spreadsheet.idPrefix+"button_movepaste");
ele.src=spreadsheet.imagePrefix+"movepasteoff.gif";
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
main.style.top = (vp.height/3)+"px";
main.style.left = (vp.width/3)+"px";
main.style.zIndex = 100;
main.style.backgroundColor = "#FFF";
main.style.border = "1px solid black";
main.style.width = "400px";
str = '<table cellspacing="0" cellpadding="0" style="border-bottom:1px solid black;"><tr>'+
'<td style="font-size:10px;cursor:default;width:100%;background-color:#999;color:#FFF;">'+" %loc!Function List!"+'</td>'+
'<td style="font-size:10px;cursor:default;color:#666;" onclick="SocialCalc.SpreadsheetControl.HideFunctions();"> X </td></tr></table>'+
'<div style="background-color:#DDD;">'+str+'</div>';
str = SocialCalc.LocalizeSubstrings(str);
main.innerHTML = str;
SocialCalc.DragRegister(main.firstChild.firstChild.firstChild.firstChild, true, true, {MouseDown: SocialCalc.DragFunctionStart, MouseMove: SocialCalc.DragFunctionPosition,
MouseUp: SocialCalc.DragFunctionPosition,
Disabled: null, positionobj: main});
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
main.style.top = (vp.height/3)+"px";
main.style.left = (vp.width/3)+"px";
main.style.zIndex = 100;
main.style.backgroundColor = "#FFF";
main.style.border = "1px solid black";
main.style.width = "400px";
main.innerHTML = '<table cellspacing="0" cellpadding="0" style="border-bottom:1px solid black;"><tr>'+
'<td style="font-size:10px;cursor:default;width:100%;background-color:#999;color:#FFF;">'+
SCLocSS(" %loc!Multi-line Input Box!")+'</td>'+
'<td style="font-size:10px;cursor:default;color:#666;" onclick="SocialCalc.SpreadsheetControl.HideMultiline();"> X </td></tr></table>'+
'<div style="background-color:#DDD;">'+str+'</div>';
SocialCalc.DragRegister(main.firstChild.firstChild.firstChild.firstChild, true, true, {MouseDown: SocialCalc.DragFunctionStart, MouseMove: SocialCalc.DragFunctionPosition,
MouseUp: SocialCalc.DragFunctionPosition,
Disabled: null, positionobj: main});
spreadsheet.spreadsheetDiv.appendChild(main);
ele = document.getElementById(idp+"textarea");
ele.focus();
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
main.style.top = (vp.height/3)+"px";
main.style.left = (vp.width/3)+"px";
main.style.zIndex = 100;
main.style.backgroundColor = "#FFF";
main.style.border = "1px solid black";
main.style.width = "400px";
main.innerHTML = '<table cellspacing="0" cellpadding="0" style="border-bottom:1px solid black;"><tr>'+
'<td style="font-size:10px;cursor:default;width:100%;background-color:#999;color:#FFF;">'+" "+SCLoc("Link Input Box")+'</td>'+
'<td style="font-size:10px;cursor:default;color:#666;" onclick="SocialCalc.SpreadsheetControl.HideLink();"> X </td></tr></table>'+
'<div style="background-color:#DDD;">'+str+'</div>';
SocialCalc.DragRegister(main.firstChild.firstChild.firstChild.firstChild, true, true, {MouseDown: SocialCalc.DragFunctionStart, MouseMove: SocialCalc.DragFunctionPosition,
MouseUp: SocialCalc.DragFunctionPosition,
Disabled: null, positionobj: main});
spreadsheet.spreadsheetDiv.appendChild(main);
ele = document.getElementById(idp+"url");
ele.focus();
socialcalc/socialcalctableeditor.js view on Meta::CPAN
this.ecell = null; // either null or {coord: c, row: r, col: c}
this.state = "start"; // the keyboard states: see EditorProcessKey
this.workingvalues = {}; // values used during keyboard editing, etc.
// Constants:
this.imageprefix = scc.defaultImagePrefix; // URL prefix for images (e.g., "/images/sc")
this.idPrefix = scc.defaultTableEditorIDPrefix;
this.pageUpDnAmount = scc.defaultPageUpDnAmount; // number of rows to move cursor on PgUp/PgDn keys (numeric)
// Callbacks
// recalcFunction: if present, function(editor) {...}, called to do a recalc
// Default (sheet.RecalcSheet) does all the right stuff.
this.recalcFunction = function(editor) {
if (editor.context.sheetobj.RecalcSheet) {
editor.context.sheetobj.RecalcSheet(SocialCalc.EditorSheetStatusCallback, editor);
}
socialcalc/socialcalctableeditor.js view on Meta::CPAN
// specialkey, keyname ("[esc]")
//
this.StatusCallback = {};
this.MoveECellCallback = {}; // all values are called with editor as arg; add with unique name, delete when done
this.RangeChangeCallback = {}; // all values are called with editor as arg; add with unique name, delete when done
this.SettingsCallbacks = {}; // See SocialCalc.SaveEditorSettings
// Set initial cursor
this.ecell = {coord: "A1", row: 1, col: 1};
context.highlights[this.ecell.coord] = "cursor";
// Initialize range data
// Range has at least hasrange (true/false).
// It may also have: anchorcoord, anchorrow, anchorcol, top, bottom, left, and right.
this.range = {hasrange: false};
// Initialize range2 data (used to show selections, such as for move)
// Range2 has at least hasrange (true/false).
// It may also have: top, bottom, left, and right.
socialcalc/socialcalctableeditor.js view on Meta::CPAN
editor.toplevel = document.createElement("div");
editor.width = width;
editor.height = height;
editor.griddiv = document.createElement("div");
editor.tablewidth = Math.max(0, width - scc.defaultTableControlThickness);
editor.tableheight = Math.max(0, height - scc.defaultTableControlThickness);
editor.griddiv.style.width=editor.tablewidth+"px";
editor.griddiv.style.height=editor.tableheight+"px";
editor.griddiv.style.overflow="hidden";
editor.griddiv.style.cursor="default";
if (scc.cteGriddivClass) editor.griddiv.className = scc.cteGriddivClass;
AssignID(editor, editor.griddiv, "griddiv");
editor.FitToEditTable();
editor.EditorRenderSheet();
editor.griddiv.appendChild(editor.fullgrid);
editor.verticaltablecontrol = new SocialCalc.TableControl(editor, true, editor.tableheight);
socialcalc/socialcalctableeditor.js view on Meta::CPAN
tr.appendChild(td);
tr = document.createElement("tr");
tbody.appendChild(tr);
td = document.createElement("td");
td.appendChild(editor.horizontaltablecontrol.main);
tr.appendChild(td);
td = document.createElement("td"); // logo display: Required by CPAL License for this code!
td.style.background="url("+editor.imageprefix+"logo.gif) no-repeat center center";
td.innerHTML = "<div style='cursor:pointer;font-size:1px;'><img src='"+editor.imageprefix+"1x1.gif' border='0' width='18' height='18'></div>";
tr.appendChild(td);
editor.logo = td;
AssignID(editor, editor.logo, "logo");
SocialCalc.TooltipRegister(td.firstChild.firstChild, "SocialCalc", null);
editor.toplevel.appendChild(editor.layouttable);
if (!editor.noEdit) {
editor.inputEcho = new SocialCalc.InputEcho(editor);
AssignID(editor, editor.inputEcho.main, "inputecho");
socialcalc/socialcalctableeditor.js view on Meta::CPAN
context.rowpanes[parts[1]-0] = {first: parts[2]-0, last: parts[3]-0};
break;
case "colpane":
context.colpanes[parts[1]-0] = {first: parts[2]-0, last: parts[3]-0};
break;
case "ecell":
editor.ecell = SocialCalc.coordToCr(parts[1]);
editor.ecell.coord = parts[1];
highlights[parts[1]] = "cursor";
break;
case "range":
range.hasrange = true;
range.anchorcoord = parts[1];
cr = SocialCalc.coordToCr(range.anchorcoord);
range.anchorrow = cr.row;
range.anchorcol = cr.col;
range.top = parts[2]-0;
range.bottom = parts[3]-0;
range.left = parts[4]-0;
range.right = parts[5]-0;
for (row=range.top; row<=range.bottom; row++) {
for (col=range.left; col<=range.right; col++) {
coord = SocialCalc.crToCoord(col, row);
if (highlights[coord]!="cursor") {
highlights[coord] = "range";
}
}
}
break;
default:
if (editor.SettingsCallbacks[setting]) {
editor.SettingsCallbacks[setting].load(editor, setting, line, flags);
}
socialcalc/socialcalctableeditor.js view on Meta::CPAN
progress = "";
switch (status) {
case "moveecell":
case "rangechange":
case "startup":
break;
case "cmdstart":
params.command = true;
document.body.style.cursor = "progress";
editor.griddiv.style.cursor = "progress";
progress = scc.s_statusline_executing;
break;
case "cmdextension":
progress = "Command Extension: "+arg;
break;
case "cmdend":
params.command = false;
break;
case "schedrender":
progress = scc.s_statusline_displaying;
break;
case "renderdone":
progress = " ";
break;
case "schedposcalc":
progress = scc.s_statusline_displaying;
break;
case "cmdendnorender":
case "doneposcalc":
document.body.style.cursor = "default";
editor.griddiv.style.cursor = "default";
break;
case "calcorder":
progress = scc.s_statusline_ordering+Math.floor(100*arg.count/(arg.total||1))+"%";
break;
case "calcstep":
progress = scc.s_statusline_calculating+Math.floor(100*arg.count/(arg.total||1))+"%";
break;
case "calcloading":
progress = scc.s_statusline_calculatingls+": "+arg.sheetname;
break;
case "calcserverfunc":
progress = scc.s_statusline_calculating+Math.floor(100*arg.count/(arg.total||1))+"%, "+scc.s_statusline_doingserverfunc+arg.funcname+scc.s_statusline_incell+arg.coord;
break;
case "calcstart":
params.calculating = true;
document.body.style.cursor = "progress";
editor.griddiv.style.cursor = "progress"; // griddiv has an explicit cursor style
progress = scc.s_statusline_calcstart;
break;
case "calccheckdone":
break;
case "calcfinished":
params.calculating = false;
break;
default:
progress = status;
break;
socialcalc/socialcalctableeditor.js view on Meta::CPAN
// editor.EditorRenderSheet();
// editor.SchedulePositionCalculations();
mouseinfo.editor = null;
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)
socialcalc/socialcalctableeditor.js view on Meta::CPAN
editor.SetECellHeaders(""); // set to regular col/rowname styles
editor.cellhandles.ShowCellHandles(false);
}
else if (SocialCalc.Callbacks.broadcast) {
SocialCalc.Callbacks.broadcast('ecell', { ecell: newcell });
}
newcell = editor.context.cellskip[newcell] || newcell;
editor.ecell = SocialCalc.coordToCr(newcell);
editor.ecell.coord = newcell;
cell=SocialCalc.GetEditorCellElement(editor, editor.ecell.row, editor.ecell.col);
highlights[newcell] = "cursor";
for (f in editor.MoveECellCallback) { // let others know
editor.MoveECellCallback[f](editor);
}
editor.UpdateCellCSS(cell, editor.ecell.row, editor.ecell.col);
editor.SetECellHeaders("selected");
for (f in editor.StatusCallback) { // let status line, etc., know
editor.StatusCallback[f].func(editor, "moveecell", newcell, editor.StatusCallback[f].params);
socialcalc/socialcalctableeditor.js view on Meta::CPAN
}
}
for (row=range.top; row<=range.bottom; row++) {
for (col=range.left; col<=range.right; col++) {
coord = SocialCalc.crToCoord(col, row);
switch (highlights[coord]) {
case "unrange":
highlights[coord] = "range";
break;
case "cursor":
break;
case "unrange2":
default:
highlights[coord] = "newrange";
break;
}
}
}
for (row=range2.top; range2.hasrange && row<=range2.bottom; row++) {
for (col=range2.left; col<=range2.right; col++) {
coord = SocialCalc.crToCoord(col, row);
switch (highlights[coord]) {
case "unrange2":
highlights[coord] = "range2";
break;
case "range":
case "newrange":
case "cursor":
break;
default:
highlights[coord] = "newrange2";
break;
}
}
}
for (coord in highlights) {
socialcalc/socialcalctableeditor.js view on Meta::CPAN
delete highlights[coord];
break;
case "newrange":
highlights[coord] = "range";
break;
case "newrange2":
highlights[coord] = "range2";
break;
case "range":
case "range2":
case "cursor":
continue;
}
cr = SocialCalc.coordToCr(coord);
cell = SocialCalc.GetEditorCellElement(editor, cr.row, cr.col);
editor.UpdateCellCSS(cell, cr.row, cr.col);
}
for (f in editor.RangeChangeCallback) { // let others know
socialcalc/socialcalctableeditor.js view on Meta::CPAN
if (!range.hasrange && !range2.hasrange) return;
for (row=range2.top; range2.hasrange && row<=range2.bottom; row++) {
for (col=range2.left; col<=range2.right; col++) {
coord = SocialCalc.crToCoord(col, row);
switch (highlights[coord]) {
case "range":
highlights[coord] = "newrange2";
break;
case "range2":
case "cursor":
break;
default:
highlights[coord] = "newrange2";
break;
}
}
}
for (coord in highlights) {
switch (highlights[coord]) {
case "range":
delete highlights[coord];
break;
case "newrange2":
highlights[coord] = "range2";
break;
case "cursor":
continue;
}
cr = SocialCalc.coordToCr(coord);
cell=SocialCalc.GetEditorCellElement(editor, cr.row, cr.col);
editor.UpdateCellCSS(cell, cr.row, cr.col);
}
range.hasrange = false;
for (f in editor.RangeChangeCallback) { // let others know
socialcalc/socialcalctableeditor.js view on Meta::CPAN
var range2 = editor.range2;
if (!range2.hasrange) return;
for (coord in highlights) {
switch (highlights[coord]) {
case "range2":
delete highlights[coord];
break;
case "range":
case "cursor":
continue;
}
cr = SocialCalc.coordToCr(coord);
cell=SocialCalc.GetEditorCellElement(editor, cr.row, cr.col);
editor.UpdateCellCSS(cell, cr.row, cr.col);
}
range2.hasrange = false;
return;
socialcalc/socialcalctableeditor.js view on Meta::CPAN
editor.inputBox.element.focus();
// return false;
};
// *************************************
//
// CellHandles class:
//
// This object creates and controls the elements around the cursor cell for dragging, etc.
//
// *************************************
SocialCalc.CellHandles = function(editor) {
var scc = SocialCalc.Constants;
var functions;
if (editor.noEdit) return; // leave us with nothing
this.editor = editor; // the TableEditor this belongs to
this.noCursorSuffix = false;
this.movedmouse = false; // used to detect no-op
this.draghandle = document.createElement("div");
SocialCalc.setStyles(this.draghandle, "display:none;position:absolute;zIndex:8;border:1px solid white;width:4px;height:4px;fontSize:1px;backgroundColor:#0E93D8;cursor:default;");
this.draghandle.innerHTML = ' ';
editor.toplevel.appendChild(this.draghandle);
SocialCalc.AssignID(editor, this.draghandle, "draghandle");
var imagetype = "png";
if (navigator.userAgent.match(/MSIE 6\.0/)) {
imagetype = "gif";
}
this.dragpalette = document.createElement("div");
SocialCalc.setStyles(this.dragpalette, "display:none;position:absolute;zIndex:8;width:90px;height:90px;fontSize:1px;textAlign:center;cursor:default;"+
"backgroundImage:url("+SocialCalc.Constants.defaultImagePrefix+"drag-handles."+imagetype+");");
this.dragpalette.innerHTML = ' ';
editor.toplevel.appendChild(this.dragpalette);
SocialCalc.AssignID(editor, this.dragpalette, "dragpalette");
this.dragtooltip = document.createElement("div");
SocialCalc.setStyles(this.dragtooltip, "display:none;position:absolute;zIndex:9;border:1px solid black;width:100px;height:auto;fontSize:10px;backgroundColor:#FFFFFF;");
this.dragtooltip.innerHTML = ' ';
editor.toplevel.appendChild(this.dragtooltip);
SocialCalc.AssignID(editor, this.dragtooltip, "dragtooltip");
socialcalc/socialcalctableeditor.js view on Meta::CPAN
else {
cmdtype = "down";
}
cstr = "fill"+cmdtype+" "+SocialCalc.crToCoord(editor.range.left, editor.range.top)+
":"+SocialCalc.crToCoord(editor.range.right, editor.range.bottom)+cmdtype2;
editor.EditorScheduleSheetCommands(cstr, true, false);
break;
case "Move":
case "MoveC":
editor.context.cursorsuffix = "";
cstr = "movepaste "+
SocialCalc.crToCoord(editor.range2.left, editor.range2.top) + ":" +
SocialCalc.crToCoord(editor.range2.right, editor.range2.bottom)
+" "+editor.ecell.coord+cmdtype2;
editor.EditorScheduleSheetCommands(cstr, true, false);
editor.Range2Remove();
break;
case "MoveI":
case "MoveIC":
editor.context.cursorsuffix = "";
sizec = editor.range2.right - editor.range2.left;
sizer = editor.range2.bottom - editor.range2.top;
deltac = editor.ecell.col - editor.range2.left;
deltar = editor.ecell.row - editor.range2.top;
cstr = "moveinsert "+
SocialCalc.crToCoord(editor.range2.left, editor.range2.top) + ":" +
SocialCalc.crToCoord(editor.range2.right, editor.range2.bottom)
+" "+editor.ecell.coord+cmdtype2;
editor.EditorScheduleSheetCommands(cstr, true, false);
editor.Range2Remove();
socialcalc/ssctrltest1.html view on Meta::CPAN
var scc = SocialCalc.Constants;
var b1 = window.location.search.charAt(1) || "4";
var b2 = window.location.search.charAt(2) || "C";
var b3 = window.location.search.charAt(3) || "8";
var b4 = window.location.search.charAt(4) || "9";
var b5 = window.location.search.charAt(5) || "8";
scc.SCToolbarbackground = "background-color:#4040"+b1+"0;";
scc.SCTabbackground = "background-color:#CC"+b2+";";
scc.SCTabselectedCSS = "font-size:small;padding:6px 30px 6px 8px;color:#FFF;background-color:#4040"+b1+"0;cursor:default;border-right:1px solid #CC"+b2+";";
scc.SCTabplainCSS = "font-size:small;padding:6px 30px 6px 8px;color:#FFF;background-color:#8080"+b3+"0;cursor:default;border-right:1px solid #CC"+b2+";";
scc.SCToolbartext = "font-size:x-small;font-weight:bold;color:#FFF;padding-bottom:4px;";
scc.ISCButtonBorderNormal = "#4040"+b1+"0";
scc.ISCButtonBorderHover = "#99"+b4+"";
scc.ISCButtonBorderDown = "#FFF";
scc.ISCButtonDownBackground = "#88"+b5+"";
SocialCalc.Popup.LocalizeString = SocialCalc.LocalizeString; // needed for localization
var spreadsheet = new SocialCalc.SpreadsheetControl();
var savestr = document.getElementById("savestr");
socialcalc/third-party/Socket.IO-node/example/chat-ssl.html view on Meta::CPAN
<form id="form" onsubmit="send(); return false">
<input type="text" autocomplete="off" id="text"><input type="submit" value="Send">
</form>
<style>
#chat { height: 300px; overflow: auto; width: 800px; border: 1px solid #eee; font: 13px Helvetica, Arial; }
#chat p { padding: 8px; margin: 0; }
#chat p:nth-child(odd) { background: #F6F6F6; }
#form { width: 782px; background: #333; padding: 5px 10px; display: none; }
#form input[type=text] { width: 700px; padding: 5px; background: #fff; border: 1px solid #fff; }
#form input[type=submit] { cursor: pointer; background: #999; border: none; padding: 6px 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; margin-left: 5px; text-shadow: 0 1px 0 #fff; }
#form input[type=submit]:hover { background: #A2A2A2; }
#form input[type=submit]:active { position: relative; top: 2px; }
</style>
</body>
</html>
socialcalc/third-party/Socket.IO-node/example/chat.html view on Meta::CPAN
<form id="form" onSubmit="send(); return false">
<input type="text" autocomplete="off" id="text"><input type="submit" value="Send">
</form>
<style>
#chat { height: 300px; overflow: auto; width: 800px; border: 1px solid #eee; font: 13px Helvetica, Arial; }
#chat p { padding: 8px; margin: 0; }
#chat p:nth-child(odd) { background: #F6F6F6; }
#form { width: 782px; background: #333; padding: 5px 10px; display: none; }
#form input[type=text] { width: 700px; padding: 5px; background: #fff; border: 1px solid #fff; }
#form input[type=submit] { cursor: pointer; background: #999; border: none; padding: 6px 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; margin-left: 5px; text-shadow: 0 1px 0 #fff; }
#form input[type=submit]:hover { background: #A2A2A2; }
#form input[type=submit]:active { position: relative; top: 2px; }
</style>
</body>
</html>