App-SocialCalc-Multiplayer
view release on metacpan or search on metacpan
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
// Other replacements from spreadsheet.tabreplacements:
// replacementname: {regex: regular-expression-to-match-with-g, replacement: string}
// view: "viewname", // view to show when selected; "sheet" or missing/null is spreadsheet
// oncreate: function(spreadsheet, tab-name), // called when first created to initialize
// onclick: function(spreadsheet, tab-name), missing/null is sheet default
// onclickFocus: text, // spreadsheet.idPrefix+text is given the focus if present instead of normal KeyboardFocus
// or if text isn't a string, that value (e.g., true) is used for SocialCalc.CmdGotFocus
// onunclick: function(spreadsheet, tab-name), missing/null is sheet default
this.tabs = [];
this.tabnums = {}; // when adding tabs, add tab-name: array-index to this object
this.tabreplacements = {}; // see use above
this.currentTab = -1; // currently selected tab index in this.tabs or -1 (maintained by SocialCalc.SetTab)
// View definitions: An object where each view is an object of the form:
//
// name: "name", // localized when first set using SocialCalc.LocalizeString
// element: node-in-the-dom, // filled in when initialized
// replacements: {}, // see below
// html: "html-to-create div",
// replacements:
// "%s.": "SocialCalc", "%id.": spreadsheet.idPrefix, "%tbt.": spreadsheet.toolbartext, "%img.": spreadsheet.imagePrefix,
// SocialCalc.LocalizeSubstring replacements ("%loc!string!" and "%ssc!constant-name!")
// Other replacements from viewobject.replacements:
// replacementname: {regex: regular-expression-to-match-with-g, replacement: string}
// divStyle: attributes for sheet div (SocialCalc.setStyles format)
// oncreate: function(spreadsheet, viewobject), // called when first created to initialize
// needsresize: true/false/null, // if true, do resize calc after displaying
// onresize: function(spreadsheet, viewobject), // called if needs resize
// values: {} // optional values to share with onclick handlers, etc.
//
// There is always a "sheet" view.
this.views = {}; // {viewname: view-object, ...}
// Dynamic properties:
this.sheet = null;
this.context = null;
this.editor = null;
this.spreadsheetDiv = null;
this.editorDiv = null;
this.sortrange = ""; // remembered range for sort tab
this.moverange = ""; // remembered range from movefrom used by movepaste/moveinsert
// Constants:
this.idPrefix = "SocialCalc-"; // prefix added to element ids used here, should end in "-"
this.multipartBoundary = "SocialCalcSpreadsheetControlSave"; // boundary used by SpreadsheetControlCreateSpreadsheetSave
this.imagePrefix = scc.defaultImagePrefix; // prefix added to img src
this.toolbarbackground = scc.SCToolbarbackground;
this.tabbackground = scc.SCTabbackground; // "background-color:#CCC;";
this.tabselectedCSS = scc.SCTabselectedCSS;
this.tabplainCSS = scc.SCTabplainCSS;
this.toolbartext = scc.SCToolbartext;
this.formulabarheight = scc.SCFormulabarheight; // in pixels, will contain a text input box
this.statuslineheight = scc.SCStatuslineheight; // in pixels
this.statuslineCSS = scc.SCStatuslineCSS;
// Callbacks:
this.ExportCallback = null; // a function called for Clipboard Export button: this.ExportCallback(spreadsheet_control_object)
// Initialization Code:
this.sheet = new SocialCalc.Sheet();
this.context = new SocialCalc.RenderContext(this.sheet);
this.context.showGrid=true;
this.context.showRCHeaders=true;
this.editor = new SocialCalc.TableEditor(this.context);
this.editor.StatusCallback.statusline =
{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",
command: SocialCalc.SpreadsheetControl.DoMultiline},
link: {image: "linkdialog.gif", tooltip: "Link Input Box",
command: SocialCalc.SpreadsheetControl.DoLink},
sum: {image: "sumdialog.gif", tooltip: "Auto Sum",
command: SocialCalc.SpreadsheetControl.DoSum}
}
// Default tabs:
// Edit
this.tabnums.edit = this.tabs.length;
this.tabs.push({name: "edit", text: "Edit", html:
' <div id="%id.edittools" style="padding:10px 0px 0px 0px;">'+
' <img id="%id.button_undo" src="%img.undo.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_redo" src="%img.redo.gif" style="vertical-align:bottom;">'+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_copy" src="%img.copy.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_cut" src="%img.cut.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_paste" src="%img.paste.gif" style="vertical-align:bottom;">'+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_delete" src="%img.delete.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_pasteformats" src="%img.pasteformats.gif" style="vertical-align:bottom;">'+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_filldown" src="%img.filldown.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_fillright" src="%img.fillright.gif" style="vertical-align:bottom;">'+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_movefrom" src="%img.movefromoff.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_movepaste" src="%img.movepasteoff.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_moveinsert" src="%img.moveinsertoff.gif" style="vertical-align:bottom;">'+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_alignleft" src="%img.alignleft.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_aligncenter" src="%img.aligncenter.gif" style="vertical-align:bottom;">'+
' <img id="%id.button_alignright" src="%img.alignright.gif" style="vertical-align:bottom;">'+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_borderon" src="%img.borderson.gif" style="vertical-align:bottom;"> '+
' <img id="%id.button_borderoff" src="%img.bordersoff.gif" style="vertical-align:bottom;"> '+
' <img id="%id.button_swapcolors" src="%img.swapcolors.gif" style="vertical-align:bottom;"> '+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_merge" src="%img.merge.gif" style="vertical-align:bottom;"> '+
' <img id="%id.button_unmerge" src="%img.unmerge.gif" style="vertical-align:bottom;"> '+
' <img src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_insertrow" src="%img.insertrow.gif" style="vertical-align:bottom;"> '+
' <img id="%id.button_insertcol" src="%img.insertcol.gif" style="vertical-align:bottom;"> '+
' <img id="%id.button_deleterow" src="%img.deleterow.gif" style="vertical-align:bottom;"> '+
' <img id="%id.button_deletecol" src="%img.deletecol.gif" style="vertical-align:bottom;"> '+
' <img id="%id.divider_recalc" src="%img.divider1.gif" style="vertical-align:bottom;"> '+
'<img id="%id.button_recalc" src="%img.recalc.gif" style="vertical-align:bottom;"> '+
' </div>',
oncreate: null, //function(spreadsheet, viewobject) {SocialCalc.DoCmd(null, "fill-rowcolstuff");},
onclick: null});
// Settings (Format)
this.tabnums.settings = this.tabs.length;
this.tabs.push({name: "settings", text: "Format", html:
'<div id="%id.settingstools" style="display:none;">'+
' <div id="%id.sheetsettingstoolbar" style="display:none;">'+
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
html += ' </tr></table></div></div>';
spreadsheet.currentTab = 0; // this is where we started
for (style in spreadsheet.tabreplacements) {
html = html.replace(spreadsheet.tabreplacements[style].regex, spreadsheet.tabreplacements[style].replacement);
}
html = html.replace(/\%s\./g, "SocialCalc.");
html = html.replace(/\%id\./g, spreadsheet.idPrefix);
html = html.replace(/\%tbt\./g, spreadsheet.toolbartext);
html = html.replace(/\%img\./g, spreadsheet.imagePrefix);
html = SCLocSS(html); // localize with %loc!string! and %scc!constant!
spreadsheet.spreadsheetDiv.innerHTML = html;
node.appendChild(spreadsheet.spreadsheetDiv);
// Initialize SocialCalc buttons
spreadsheet.Buttons = {
button_undo: {tooltip: "Undo", command: "undo"},
button_redo: {tooltip: "Redo", command: "redo"},
button_copy: {tooltip: "Copy", command: "copy"},
button_cut: {tooltip: "Cut", command: "cut"},
button_paste: {tooltip: "Paste", command: "paste"},
button_pasteformats: {tooltip: "Paste Formats", command: "pasteformats"},
button_delete: {tooltip: "Delete Contents", command: "delete"},
button_filldown: {tooltip: "Fill Down", command: "filldown"},
button_fillright: {tooltip: "Fill Right", command: "fillright"},
button_movefrom: {tooltip: "Set/Clear Move From", command: "movefrom"},
button_movepaste: {tooltip: "Move Paste", command: "movepaste"},
button_moveinsert: {tooltip: "Move Insert", command: "moveinsert"},
button_alignleft: {tooltip: "Align Left", command: "align-left"},
button_aligncenter: {tooltip: "Align Center", command: "align-center"},
button_alignright: {tooltip: "Align Right", command: "align-right"},
button_borderon: {tooltip: "Borders On", command: "borderon"},
button_borderoff: {tooltip: "Borders Off", command: "borderoff"},
button_swapcolors: {tooltip: "Swap Colors", command: "swapcolors"},
button_merge: {tooltip: "Merge Cells", command: "merge"},
button_unmerge: {tooltip: "Unmerge Cells", command: "unmerge"},
button_insertrow: {tooltip: "Insert Row", command: "insertrow"},
button_insertcol: {tooltip: "Insert Column", command: "insertcol"},
button_deleterow: {tooltip: "Delete Row", command: "deleterow"},
button_deletecol: {tooltip: "Delete Column", command: "deletecol"},
button_recalc: {tooltip: "Recalc", command: "recalc"}
}
for (button in spreadsheet.Buttons) {
bele = document.getElementById(spreadsheet.idPrefix+button);
if (!bele) {alert("Button "+(spreadsheet.idPrefix+button)+" missing"); continue;}
bele.style.border = "1px solid "+scc.ISCButtonBorderNormal;
SocialCalc.TooltipRegister(bele, SCLoc(spreadsheet.Buttons[button].tooltip), {});
SocialCalc.ButtonRegister(bele,
{normalstyle: "border:1px solid "+scc.ISCButtonBorderNormal+";backgroundColor:"+scc.ISCButtonBorderNormal+";",
hoverstyle: "border:1px solid "+scc.ISCButtonBorderHover+";backgroundColor:"+scc.ISCButtonBorderNormal+";",
downstyle: "border:1px solid "+scc.ISCButtonBorderDown+";backgroundColor:"+scc.ISCButtonDownBackground+";"},
{MouseDown: SocialCalc.DoButtonCmd, command: spreadsheet.Buttons[button].command});
}
// create formula bar
spreadsheet.formulabarDiv = document.createElement("div");
spreadsheet.formulabarDiv.style.height = spreadsheet.formulabarheight + "px";
spreadsheet.formulabarDiv.innerHTML = '<input type="text" size="60" value=""> '; //'<textarea rows="4" cols="60" style="z-index:5;background-color:white;position:relative;"></textarea> ';
spreadsheet.spreadsheetDiv.appendChild(spreadsheet.formulabarDiv);
var inputbox = new SocialCalc.InputBox(spreadsheet.formulabarDiv.firstChild, spreadsheet.editor);
for (button in spreadsheet.formulabuttons) {
bele = document.createElement("img");
bele.id = spreadsheet.idPrefix+button;
bele.src = spreadsheet.imagePrefix+spreadsheet.formulabuttons[button].image;
bele.style.verticalAlign = "middle";
bele.style.border = "1px solid #FFF";
bele.style.marginLeft = "4px";
SocialCalc.TooltipRegister(bele, SCLoc(spreadsheet.formulabuttons[button].tooltip), {});
SocialCalc.ButtonRegister(bele,
{normalstyle: "border:1px solid #FFF;backgroundColor:#FFF;",
hoverstyle: "border:1px solid #CCC;backgroundColor:#FFF;",
downstyle: "border:1px solid #000;backgroundColor:#FFF;"},
{MouseDown: spreadsheet.formulabuttons[button].command});
spreadsheet.formulabarDiv.appendChild(bele);
}
// initialize tabs that need it
for (i=0; i<tabs.length; i++) { // execute any tab-specific initialization code
if (tabs[i].oncreate) {
tabs[i].oncreate(spreadsheet, tabs[i].name);
}
}
// create sheet view and others
spreadsheet.nonviewheight = spreadsheet.statuslineheight +
spreadsheet.spreadsheetDiv.firstChild.offsetHeight +
spreadsheet.spreadsheetDiv.lastChild.offsetHeight;
spreadsheet.viewheight = spreadsheet.height-spreadsheet.nonviewheight;
spreadsheet.editorDiv=spreadsheet.editor.CreateTableEditor(spreadsheet.width, spreadsheet.viewheight);
spreadsheet.spreadsheetDiv.appendChild(spreadsheet.editorDiv);
for (vname in views) {
html = views[vname].html;
for (style in views[vname].replacements) {
html = html.replace(views[vname].replacements[style].regex, views[vname].replacements[style].replacement);
}
html = html.replace(/\%s\./g, "SocialCalc.");
html = html.replace(/\%id\./g, spreadsheet.idPrefix);
html = html.replace(/\%tbt\./g, spreadsheet.toolbartext);
html = html.replace(/\%img\./g, spreadsheet.imagePrefix);
v = document.createElement("div");
SocialCalc.setStyles(v, views[vname].divStyle);
v.style.display = "none";
v.style.width = spreadsheet.width + "px";
v.style.height = spreadsheet.viewheight + "px";
html = SCLocSS(html); // localize with %loc!string!, etc.
v.innerHTML = html;
spreadsheet.spreadsheetDiv.appendChild(v);
views[vname].element = v;
if (views[vname].oncreate) {
views[vname].oncreate(spreadsheet, views[vname]);
}
}
views.sheet = {name: "sheet", element: spreadsheet.editorDiv};
// create statusline
spreadsheet.statuslineDiv = document.createElement("div");
spreadsheet.statuslineDiv.style.cssText = spreadsheet.statuslineCSS;
// spreadsheet.statuslineDiv.style.height = spreadsheet.statuslineheight + "px"; // didn't take padding into account!
spreadsheet.statuslineDiv.style.height = spreadsheet.statuslineheight -
(spreadsheet.statuslineDiv.style.paddingTop.slice(0,-2)-0) -
(spreadsheet.statuslineDiv.style.paddingBottom.slice(0,-2)-0) + "px";
spreadsheet.statuslineDiv.id = spreadsheet.idPrefix+"statusline";
spreadsheet.spreadsheetDiv.appendChild(spreadsheet.statuslineDiv);
// done - refresh screen needed
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
editor.range2.hasrange = true;
}
str = editor.range2.hasrange ? "" : "off";
ele = document.getElementById(spreadsheet.idPrefix+"button_movefrom");
ele.src=spreadsheet.imagePrefix+"movefrom"+str+".gif";
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";
ele = document.getElementById(spreadsheet.idPrefix+"button_moveinsert");
ele.src=spreadsheet.imagePrefix+"moveinsertoff.gif";
}
break;
case "swapcolors":
sheet = spreadsheet.sheet;
cell = sheet.GetAssuredCell(editor.ecell.coord);
defaultcolor = sheet.attribs.defaultcolor ? sheet.colors[sheet.attribs.defaultcolor] : "rgb(0,0,0)";
defaultbgcolor = sheet.attribs.defaultbgcolor ? sheet.colors[sheet.attribs.defaultbgcolor] : "rgb(255,255,255)";
color = cell.color ? sheet.colors[cell.color] : defaultcolor; // get color
if (color == defaultbgcolor) color = ""; // going to swap, so if same as background default, use default
bgcolor = cell.bgcolor ? sheet.colors[cell.bgcolor] : defaultbgcolor;
if (bgcolor == defaultcolor) bgcolor = ""; // going to swap, so if same as foreground default, use default
spreadsheet.ExecuteCommand("set %C color "+bgcolor+"%Nset %C bgcolor "+color, "");
break;
default:
combostr = SocialCalc.SpreadsheetCmdLookup[which] || "";
sstr = SocialCalc.SpreadsheetCmdSLookup[which] || "";
spreadsheet.ExecuteCommand(combostr, sstr);
break;
}
if (obj && obj.blur) obj.blur();
SocialCalc.KeyboardFocus();
}
SocialCalc.SpreadsheetCmdLookup = {
'copy': 'copy %C all',
'cut': 'cut %C all',
'paste': 'paste %C all',
'pasteformats': 'paste %C formats',
'delete': 'erase %C formulas',
'filldown': 'filldown %C all',
'fillright': 'fillright %C all',
'erase': 'erase %C all',
'borderon': 'set %C bt %S%Nset %C br %S%Nset %C bb %S%Nset %C bl %S',
'borderoff': 'set %C bt %S%Nset %C br %S%Nset %C bb %S%Nset %C bl %S',
'merge': 'merge %C',
'unmerge': 'unmerge %C',
'align-left': 'set %C cellformat left',
'align-center': 'set %C cellformat center',
'align-right': 'set %C cellformat right',
'align-default': 'set %C cellformat',
'insertrow': 'insertrow %C',
'insertcol': 'insertcol %C',
'deleterow': 'deleterow %C',
'deletecol': 'deletecol %C',
'undo': 'undo',
'redo': 'redo',
'recalc': 'recalc'
}
SocialCalc.SpreadsheetCmdSLookup = {
'borderon': '1px solid rgb(0,0,0)',
'borderoff': ''
}
/******* NO LONGER USED
SocialCalc.SpreadsheetCmdTable = {
cmd: [
{t:"Fill Right", s:"ffal", c:"fillright %C %S"},
{t:"Fill Down", s:"ffal", c:"filldown %C %S"},
{t:"Copy", s:"all", c:"copy %C %S"},
{t:"Cut", s:"all", c:"cut %C %S"},
{t:"Paste", s:"ffal", c:"paste %C %S"},
{t:"Erase", s:"ffal", c:"erase %C %S"},
{t:"Insert", s:"rowcol", c:"insert%S %C"},
{t:"Delete", s:"rowcol", c:"delete%S %C"},
{t:"Merge Cells", s:"none", c:"merge %C"},
{t:"Unmerge", s:"none", c:"unmerge %C"},
{t:"Sort", s:"sortcol", c:"sort %R %S"},
{t:"Cell Color", s:"colors", c:"set %C color %S"},
{t:"Cell Background", s:"colors", c:"set %C bgcolor %S"},
{t:"Cell Number Format", s:"ntvf", c:"set %C nontextvalueformat %S"},
{t:"Cell Font", s:"fonts", c:"set %C font %S"},
{t:"Cell Align", s:"cellformat", c:"set %C cellformat %S"},
{t:"Cell Borders", s:"borderOnOff", c:"set %C bt %S%Nset %C br %S%Nset %C bb %S%Nset %C bl %S"},
{t:"Column Width", s:"colWidths", c:"set %W width %S"},
{t:"Default Color", s:"colors", c:"set sheet defaultcolor %S"},
{t:"Default Background", s:"colors", c:"set sheet defaultbgcolor %S"},
{t:"Default Number Format", s:"ntvf", c:"set sheet defaultnontextvalueformat %S"},
{t:"Default Font", s:"fonts", c:"set sheet defaultfont %S"},
{t:"Default Text Align", s:"cellformat", c:"set sheet defaulttextformat %S"},
{t:"Default Number Align", s:"cellformat", c:"set sheet defaultnontextformat %S"},
{t:"Default Column Width", s:"colWidths", c:"set sheet defaultcolwidth %S"}
],
rowcolstuff: [
{t:"Insert", s:"rowcol", c:"insert%S %C"},
{t:"Delete", s:"rowcol", c:"delete%S %C"},
{t:"Paste", s:"ffal", c:"paste %C %S"},
{t:"Erase", s:"ffal", c:"erase %C %S"},
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
],
"cellformat": [
{t:"Default", s:""},
{t:"Left", s:"left"},
{t:"Right", s:"right"},
{t:"Center", s:"center"}
],
"borderOnOff": [
{t:"On", s:"1px solid rgb(0,0,0)"},
{t:"Off", s:""}
],
"colWidths": [
{t:"Default", s:""},
{t:"20", s:"20"},
{t:"40", s:"40"},
{t:"60", s:"60"},
{t:"80", s:"80"},
{t:"100", s:"100"},
{t:"120", s:"120"},
{t:"140", s:"140"},
{t:"160", s:"160"},
{t:"180", s:"180"},
{t:"200", s:"200"},
{t:"220", s:"220"},
{t:"240", s:"240"},
{t:"260", s:"260"},
{t:"280", s:"280"},
{t:"300", s:"300"}
],
"ntvf": [
{t:"Default", s:""},
{t:"1234", s:"0"},
{t:"1,234", s:"#,##0"},
{t:"1,234.5", s:"#,##0.0"},
{t:"1,234.56", s:"#,##0.00"},
{t:"1,234.567", s:"#,##0.000"},
{t:"1,234%", s:"#,##0%"},
{t:"1,234.5%", s:"#,##0.0%"},
{t:"(1,234)", s:"#,##0_);(#,##0)"},
{t:"(1,234.5)", s:"#,##0.0_);(#,##0.0)"},
{t:"(1,234.56)", s:"#,##0.00_);(#,##0.00)"},
{t:"00", s:"00"},
{t:"000", s:"000"},
{t:"0000", s:"0000"},
{t:"$1,234.56", s:"$#,##0.00"},
{t:"2006-01-04", s:"yyyy-mm-dd"},
{t:"01:23:45", s:"hh:mm:ss"},
{t:"2006-01-04 01:23:45", s:"yyyy-mm-dd hh:mm:ss"},
{t:"Hidden", s:"hidden"}
],
"tvf": [
{t:"Default", s:""},
{t:"Automatic", s:"general"},
{t:"Plain Text", s:"text-plain"},
{t:"HTML", s:"text-html"},
{t:"Wiki", s:"text-wiki"},
{t:"Hidden", s:"hidden"}
],
"ffal": [ // Formulas, Formats, All
{t:"All", s:"all"},
{t:"Contents", s:"formulas"},
{t:"Formats", s:"formats"}
],
"all": [ // All
{t:"All", s:"all"}
],
"rowcol": [
{t:"Row", s:"row"},
{t:"Column", s:"col"}
],
"sortcol": [
{t:"A up", s:"A up"},
{t:"B up", s:"B up"},
{t:"C up", s:"C up"},
{t:"A down", s:"A down"},
{t:"B down", s:"B down"},
{t:"C down", s:"C down"},
{t:"A, B, C up", s:"A up B up C up"}
],
"none": [ // nothing
{t:" ", s:" "}
]
}
}
*********/
//
// SocialCalc.SpreadsheetControlExecuteCommand(obj, combostr, sstr)
//
// xxx
//
SocialCalc.SpreadsheetControlExecuteCommand = function(obj, combostr, sstr) {
var i, commands;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var eobj = spreadsheet.editor;
var str = {};
str.P = "%";
str.N = "\n"
if (eobj.range.hasrange) {
str.R = SocialCalc.crToCoord(eobj.range.left, eobj.range.top)+
":"+SocialCalc.crToCoord(eobj.range.right, eobj.range.bottom);
str.C = str.R;
str.W = SocialCalc.rcColname(eobj.range.left) + ":" + SocialCalc.rcColname(eobj.range.right);
}
else {
str.C = eobj.ecell.coord;
str.R = eobj.ecell.coord+":"+eobj.ecell.coord;
str.W = SocialCalc.rcColname(SocialCalc.coordToCr(eobj.ecell.coord).col);
}
str.S = sstr;
combostr = combostr.replace(/%C/g, str.C);
combostr = combostr.replace(/%R/g, str.R);
combostr = combostr.replace(/%N/g, str.N);
combostr = combostr.replace(/%S/g, str.S);
combostr = combostr.replace(/%W/g, str.W);
combostr = combostr.replace(/%P/g, str.P);
eobj.EditorScheduleSheetCommands(combostr, true, false);
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
var text = "";
var ltsym, gtsym, obsym, cbsym;
if (popupele.checked) {
ltsym = "<<"; gtsym = ">>"; obsym = "[["; cbsym = "]]";
}
else {
ltsym = "<"; gtsym = ">"; obsym = "["; cbsym = "]";
}
if (pagenameele && pagenameele.value) {
if (workspaceele.value) {
text = descele.value+"{"+workspaceele.value+obsym+pagenameele.value+cbsym+"}";
}
else {
text = descele.value+obsym+pagenameele.value+cbsym;
}
}
else {
text = descele.value+ltsym+urlele.value+gtsym;
}
SocialCalc.SpreadsheetControl.HideLink();
switch (editor.state) {
case "start":
wval.partialexpr = "";
wval.ecoord = editor.ecell.coord;
wval.erow = editor.ecell.row;
wval.ecol = editor.ecell.col;
break;
case "input":
case "inputboxdirect":
editor.inputBox.Blur();
editor.inputBox.ShowInputBox(false);
editor.state = "start";
break;
}
if (formatele.checked) {
SocialCalc.SpreadsheetControlExecuteCommand(null, "set %C textvalueformat text-link", "");
}
editor.EditorSaveEdit(text);
}
SocialCalc.SpreadsheetControl.DoSum = function() {
var cmd, cell, row, col, sel, cr, foundvalue;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var sheet = editor.context.sheetobj;
if (editor.range.hasrange) {
sel = SocialCalc.crToCoord(editor.range.left, editor.range.top)+
":"+SocialCalc.crToCoord(editor.range.right, editor.range.bottom);
cmd = "set "+SocialCalc.crToCoord(editor.range.right, editor.range.bottom+1)+
" formula sum("+sel+")";
}
else {
row = editor.ecell.row - 1;
col = editor.ecell.col;
if (row<=1) {
cmd = "set "+editor.ecell.coord+" constant e#REF! 0 #REF!";
}
else {
foundvalue = false;
while (row>0) {
cr = SocialCalc.crToCoord(col, row);
cell = sheet.GetAssuredCell(cr);
if (!cell.datatype || cell.datatype=="t") {
if (foundvalue) {
row++;
break;
}
}
else {
foundvalue = true;
}
row--;
}
cmd = "set "+editor.ecell.coord+" formula sum("+
SocialCalc.crToCoord(col,row)+":"+SocialCalc.crToCoord(col, editor.ecell.row-1)+")";
}
}
editor.EditorScheduleSheetCommands(cmd, true, false);
}
//
// TAB Routines
//
// Sort
SocialCalc.SpreadsheetControlSortOnclick = function(s, t) {
var name, i;
var namelist = [];
var nl = document.getElementById(s.idPrefix+"sortlist");
SocialCalc.LoadColumnChoosers(s);
s.editor.RangeChangeCallback.sort = SocialCalc.UpdateSortRangeProposal;
for (name in s.sheet.names) {
namelist.push(name);
}
namelist.sort();
nl.length = 0;
nl.options[0] = new Option(SocialCalc.LocalizeString("[select range]"));
for (i=0; i<namelist.length; i++) {
name = namelist[i];
nl.options[i+1] = new Option(name, name);
if (name == s.sortrange) {
nl.options[i+1].selected = true;
}
}
if (s.sortrange == "") {
nl.options[0].selected = true;
}
SocialCalc.UpdateSortRangeProposal(s.editor);
SocialCalc.KeyboardFocus();
return;
}
SocialCalc.SpreadsheetControlSortSave = function(editor, setting) {
// Format is:
// sort:sortrange:major:up/down:minor:up/down:last:up/down
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var str, sele, rele;
str = "sort:"+SocialCalc.encodeForSave(spreadsheet.sortrange)+":";
sele = document.getElementById(spreadsheet.idPrefix+"majorsort");
rele = document.getElementById(spreadsheet.idPrefix+"majorsortup");
str += sele.selectedIndex + (rele.checked ? ":up" : ":down");
sele = document.getElementById(spreadsheet.idPrefix+"minorsort");
if (sele.selectedIndex>0) {
rele = document.getElementById(spreadsheet.idPrefix+"minorsortup");
( run in 0.964 second using v1.01-cache-2.11-cpan-a5162978ef8 )