App-SocialCalc-Multiplayer
view release on metacpan or search on metacpan
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
// 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");},
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
if (lele.selectedIndex==0) {
if (editor.range.hasrange) {
spreadsheet.sortrange = SocialCalc.crToCoord(editor.range.left, editor.range.top) + ":" +
SocialCalc.crToCoord(editor.range.right, editor.range.bottom);
}
else {
spreadsheet.sortrange = editor.ecell.coord+":"+editor.ecell.coord;
}
}
else {
spreadsheet.sortrange = lele.options[lele.selectedIndex].value;
}
ele = document.getElementById(spreadsheet.idPrefix+"sortbutton");
ele.value = SocialCalc.LocalizeString("Sort ")+spreadsheet.sortrange;
ele.style.visibility = "visible";
SocialCalc.LoadColumnChoosers(spreadsheet);
if (obj && obj.blur) obj.blur();
SocialCalc.KeyboardFocus();
return;
case "dosort":
if (spreadsheet.sortrange && spreadsheet.sortrange.indexOf(":")==-1) { // sortrange is a named range
nrange = SocialCalc.Formula.LookupName(spreadsheet.sheet, spreadsheet.sortrange || "");
if (nrange.type != "range") return;
rparts = nrange.value.match(/^(.*)\|(.*)\|$/);
sortrange = rparts[1] + ":" + rparts[2];
}
else {
sortrange = spreadsheet.sortrange;
}
if (sortrange == "A1:A1") return;
str = "sort "+sortrange+" ";
sele = document.getElementById(spreadsheet.idPrefix+"majorsort");
rele = document.getElementById(spreadsheet.idPrefix+"majorsortup");
str += sele.options[sele.selectedIndex].value + (rele.checked ? " up" : " down");
sele = document.getElementById(spreadsheet.idPrefix+"minorsort");
if (sele.selectedIndex>0) {
rele = document.getElementById(spreadsheet.idPrefix+"minorsortup");
str += " "+sele.options[sele.selectedIndex].value + (rele.checked ? " up" : " down");
}
sele = document.getElementById(spreadsheet.idPrefix+"lastsort");
if (sele.selectedIndex>0) {
rele = document.getElementById(spreadsheet.idPrefix+"lastsortup");
str += " "+sele.options[sele.selectedIndex].value + (rele.checked ? " up" : " down");
}
spreadsheet.ExecuteCommand(str, "");
break;
case "merge":
combostr = SocialCalc.SpreadsheetCmdLookup[which] || "";
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));
}
else {
editor.range2.top = editor.ecell.row;
editor.range2.right = editor.ecell.col;
editor.range2.bottom = editor.ecell.row;
editor.range2.left = editor.ecell.col;
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',
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
result.push(coord+":"+SocialCalc.encodeForSave(cellHTML));
}
}
result.push(""); // one extra to get extra \n
return result.join("\n");
}
//
// Formula Bar Button Routines
//
SocialCalc.SpreadsheetControl.DoFunctionList = function() {
var i, cname, str, f, ele;
var scf = SocialCalc.Formula;
var scc = SocialCalc.Constants;
var fcl = scc.function_classlist;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var idp = spreadsheet.idPrefix+"function";
ele = document.getElementById(idp+"dialog");
if (ele) return; // already have one
scf.FillFunctionInfo();
str = '<table><tr><td><span style="font-size:x-small;font-weight:bold">%loc!Category!</span><br>'+
'<select id="'+idp+'class" size="'+fcl.length+'" style="width:120px;" onchange="SocialCalc.SpreadsheetControl.FunctionClassChosen(this.options[this.selectedIndex].value);">';
for (i=0; i<fcl.length; i++) {
str += '<option value="'+fcl[i]+'"'+(i==0?' selected>':'>')+SocialCalc.special_chars(scf.FunctionClasses[fcl[i]].name)+'</option>';
}
str += '</select></td><td> </td><td id="'+idp+'list"><span style="font-size:x-small;font-weight:bold">%loc!Functions!</span><br>'+
'<select id="'+idp+'name" size="'+fcl.length+'" style="width:240px;" '+
'onchange="SocialCalc.SpreadsheetControl.FunctionChosen(this.options[this.selectedIndex].value);" ondblclick="SocialCalc.SpreadsheetControl.DoFunctionPaste();">';
str += SocialCalc.SpreadsheetControl.GetFunctionNamesStr("all");
str += '</td></tr><tr><td colspan="3">'+
'<div id="'+idp+'desc" style="width:380px;height:80px;overflow:auto;font-size:x-small;">'+SocialCalc.SpreadsheetControl.GetFunctionInfoStr(scf.FunctionClasses[fcl[0]].items[0])+'</div>'+
'<div style="width:380px;text-align:right;padding-top:6px;font-size:small;">'+
'<input type="button" value="%loc!Paste!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.DoFunctionPaste();"> '+
'<input type="button" value="%loc!Cancel!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.HideFunctions();"></div>'+
'</td></tr></table>';
var main = document.createElement("div");
main.id = idp+"dialog";
main.style.position = "absolute";
var vp = SocialCalc.GetViewportInfo();
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});
spreadsheet.spreadsheetDiv.appendChild(main);
ele = document.getElementById(idp+"name");
ele.focus();
SocialCalc.CmdGotFocus(ele);
//!!! need to do keyboard handling: if esc, hide; if All, letter scrolls to there
}
SocialCalc.SpreadsheetControl.GetFunctionNamesStr = function(cname) {
var i, f;
var scf = SocialCalc.Formula;
var str = "";
f = scf.FunctionClasses[cname];
for (i=0; i<f.items.length; i++) {
str += '<option value="'+f.items[i]+'"'+(i==0?' selected>':'>')+f.items[i]+'</option>';
}
return str;
}
SocialCalc.SpreadsheetControl.FillFunctionNames = function(cname, ele) {
var i, f;
var scf = SocialCalc.Formula;
ele.length = 0;
f = scf.FunctionClasses[cname];
for (i=0; i<f.items.length; i++) {
ele.options[i] = new Option(f.items[i], f.items[i]);
if (i==0) {
ele.options[i].selected = true;
}
}
}
SocialCalc.SpreadsheetControl.GetFunctionInfoStr = function(fname) {
var scf = SocialCalc.Formula;
var f = scf.FunctionList[fname];
var scsc = SocialCalc.special_chars;
var str = "<b>"+fname+"("+scsc(scf.FunctionArgString(fname))+")</b><br>";
str += scsc(f[3]);
return str;
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
SocialCalc.SpreadsheetControl.DoMultiline = function() {
var SCLocSS = SocialCalc.LocalizeSubstrings;
var str, ele, text;
var scc = SocialCalc.Constants;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var wval = editor.workingvalues;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var idp = spreadsheet.idPrefix+"multiline";
ele = document.getElementById(idp+"dialog");
if (ele) return; // already have one
switch (editor.state) {
case "start":
wval.ecoord = editor.ecell.coord;
wval.erow = editor.ecell.row;
wval.ecol = editor.ecell.col;
editor.RangeRemove();
text = SocialCalc.GetCellContents(editor.context.sheetobj, wval.ecoord);
break;
case "input":
case "inputboxdirect":
text = editor.inputBox.GetText();
break;
}
editor.inputBox.element.disabled = true;
text = SocialCalc.special_chars(text);
str = '<textarea id="'+idp+'textarea" style="width:380px;height:120px;margin:10px 0px 0px 6px;">'+text+'</textarea>'+
'<div style="width:380px;text-align:right;padding:6px 0px 4px 6px;font-size:small;">'+
SCLocSS('<input type="button" value="%loc!Set Cell Contents!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.DoMultilinePaste();"> '+
'<input type="button" value="%loc!Clear!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.DoMultilineClear();"> '+
'<input type="button" value="%loc!Cancel!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.HideMultiline();"></div>'+
'</div>');
var main = document.createElement("div");
main.id = idp+"dialog";
main.style.position = "absolute";
var vp = SocialCalc.GetViewportInfo();
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.CmdGotFocus(ele);
//!!! need to do keyboard handling: if esc, hide?
}
SocialCalc.SpreadsheetControl.HideMultiline = function() {
var scc = SocialCalc.Constants;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var ele = document.getElementById(spreadsheet.idPrefix+"multilinedialog");
ele.innerHTML = "";
SocialCalc.DragUnregister(ele);
SocialCalc.KeyboardFocus();
if (ele.parentNode) {
ele.parentNode.removeChild(ele);
}
switch (editor.state) {
case "start":
editor.inputBox.DisplayCellContents(null);
break;
case "input":
case "inputboxdirect":
editor.inputBox.element.disabled = false;
editor.inputBox.Focus();
break;
}
}
SocialCalc.SpreadsheetControl.DoMultilineClear = function() {
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var ele = document.getElementById(spreadsheet.idPrefix+"multilinetextarea");
ele.value = "";
ele.focus();
}
SocialCalc.SpreadsheetControl.DoMultilinePaste = function() {
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
}
editor.inputBox.element.disabled = true;
if (text.charAt(0)=="'") {
text = text.slice(1);
}
var parts = SocialCalc.ParseCellLinkText(text);
text = SocialCalc.special_chars(text);
cell = spreadsheet.sheet.cells[editor.ecell.coord];
if (!cell || !cell.textvalueformat) { // set to link format, but don't override
setformat = " checked";
}
else {
setformat = "";
}
popup = parts.newwin ? " checked" : "";
str = '<div style="padding:6px 0px 4px 6px;">'+
'<span style="font-size:smaller;">'+SCLoc("Description")+'</span><br>'+
'<input type="text" id="'+idp+'desc" style="width:380px;" value="'+SocialCalc.special_chars(parts.desc)+'"><br>'+
'<span style="font-size:smaller;">'+SCLoc("URL")+'</span><br>'+
'<input type="text" id="'+idp+'url" style="width:380px;" value="'+SocialCalc.special_chars(parts.url)+'"><br>';
if (SocialCalc.Callbacks.MakePageLink) { // only show if handling pagenames here
str += '<span style="font-size:smaller;">'+SCLoc("Page Name")+'</span><br>'+
'<input type="text" id="'+idp+'pagename" style="width:380px;" value="'+SocialCalc.special_chars(parts.pagename)+'"><br>'+
'<span style="font-size:smaller;">'+SCLoc("Workspace")+'</span><br>'+
'<input type="text" id="'+idp+'workspace" style="width:380px;" value="'+SocialCalc.special_chars(parts.workspace)+'"><br>';
}
str += SocialCalc.LocalizeSubstrings('<input type="checkbox" id="'+idp+'format"'+setformat+'> '+
'<span style="font-size:smaller;">%loc!Set to Link format!</span><br>'+
'<input type="checkbox" id="'+idp+'popup"'+popup+'> '+
'<span style="font-size:smaller;">%loc!Show in new browser window!</span>'+
'</div>'+
'<div style="width:380px;text-align:right;padding:6px 0px 4px 6px;font-size:small;">'+
'<input type="button" value="%loc!Set Cell Contents!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.DoLinkPaste();"> '+
'<input type="button" value="%loc!Clear!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.DoLinkClear();"> '+
'<input type="button" value="%loc!Cancel!" style="font-size:smaller;" onclick="SocialCalc.SpreadsheetControl.HideLink();"></div>'+
'</div>');
var main = document.createElement("div");
main.id = idp+"dialog";
main.style.position = "absolute";
var vp = SocialCalc.GetViewportInfo();
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.CmdGotFocus(ele);
//!!! need to do keyboard handling: if esc, hide?
}
SocialCalc.SpreadsheetControl.HideLink = function() {
var scc = SocialCalc.Constants;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var ele = document.getElementById(spreadsheet.idPrefix+"linkdialog");
ele.innerHTML = "";
SocialCalc.DragUnregister(ele);
SocialCalc.KeyboardFocus();
if (ele.parentNode) {
ele.parentNode.removeChild(ele);
}
switch (editor.state) {
case "start":
editor.inputBox.DisplayCellContents(null);
break;
case "input":
case "inputboxdirect":
editor.inputBox.element.disabled = false;
editor.inputBox.Focus();
break;
}
}
SocialCalc.SpreadsheetControl.DoLinkClear = function() {
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
document.getElementById(spreadsheet.idPrefix+"linkdesc").value = "";
document.getElementById(spreadsheet.idPrefix+"linkpagename").value = "";
document.getElementById(spreadsheet.idPrefix+"linkworkspace").value = "";
var ele = document.getElementById(spreadsheet.idPrefix+"linkurl");
ele.value = "";
ele.focus();
}
( run in 0.839 second using v1.01-cache-2.11-cpan-39bf76dae61 )