App-SocialCalc-Multiplayer
view release on metacpan or search on metacpan
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
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() {
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var wval = editor.workingvalues;
var ele = document.getElementById(spreadsheet.idPrefix+"multilinetextarea");
var text = ele.value;
SocialCalc.SpreadsheetControl.HideMultiline();
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;
}
editor.EditorSaveEdit(text);
}
SocialCalc.SpreadsheetControl.DoLink = function() {
var SCLoc = SocialCalc.LocalizeString;
var str, ele, text, cell, setformat, popup;
var scc = SocialCalc.Constants;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var wval = editor.workingvalues;
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var idp = spreadsheet.idPrefix+"link";
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;
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();
}
SocialCalc.SpreadsheetControl.DoLinkPaste = function() {
var spreadsheet = SocialCalc.GetSpreadsheetControlObject();
var editor = spreadsheet.editor;
var wval = editor.workingvalues;
var descele = document.getElementById(spreadsheet.idPrefix+"linkdesc");
var urlele = document.getElementById(spreadsheet.idPrefix+"linkurl");
var pagenameele = document.getElementById(spreadsheet.idPrefix+"linkpagename");
var workspaceele = document.getElementById(spreadsheet.idPrefix+"linkworkspace");
var formatele = document.getElementById(spreadsheet.idPrefix+"linkformat");
var popupele = document.getElementById(spreadsheet.idPrefix+"linkpopup");
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;
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
blanklineregex.lastIndex = boundaryregex.lastIndex;
searchinfo = blanklineregex.exec(str); // skip to after blank line
if (!searchinfo) return parts;
start = blanklineregex.lastIndex;
boundaryregex.lastIndex = start;
searchinfo = boundaryregex.exec(str); // find end of header
if (!searchinfo) return parts;
ending = searchinfo.index;
lines = str.substring(start, ending).split(/\r\n|\n/); // get header as lines
for (i=0;i<lines.length;i++) {
line=lines[i];
p = line.split(":");
switch (p[0]) {
case "version":
break;
case "part":
partlist.push(p[1]);
break;
}
}
for (pnum=0; pnum<partlist.length; pnum++) { // get each part
blanklineregex.lastIndex = ending;
searchinfo = blanklineregex.exec(str); // find blank line ending mime-part header
if (!searchinfo) return parts;
start = blanklineregex.lastIndex;
if (pnum==partlist.length-1) { // last one has different boundary
boundaryregex = new RegExp("^--"+boundary+"--$", "mg");
}
boundaryregex.lastIndex = start;
searchinfo = boundaryregex.exec(str); // find ending boundary
if (!searchinfo) return parts;
ending = searchinfo.index;
parts[partlist[pnum]] = {start: start, end: ending}; // return position within full string
}
return parts;
}
/*
* SettingsControls
*
* Each settings panel has an object in the following form:
*
* {ctrl-name1: {setting: setting-nameA, type: ctrl-type, id: id-component},
* ctrl-name2: {setting: setting-nameB, type: ctrl-type, id: id-component, initialdata: optional-initialdata-override},
* ...}
*
* The ctrl-types are names that correspond to:
*
* SocialCalc.SettingsControls.Controls = {
* ctrl-type1: {
* SetValue: function(panel-obj, ctrl-name, {def: true/false, val: value}) {...;},
* ColorValues: if true, Onchanged converts between hex and RGB
* GetValue: function(panel-obj, ctrl-name) {...return {def: true/false, val: value};},
* Initialize: function(panel-obj, ctrl-name) {...;}, // used to fill dropdowns, etc.
* InitialData: control-dependent, // used by Initialize (if no panel ctrlname.initialdata)
* OnReset: function(ctrl-name) {...;}, // called to put down popups, etc.
* ChangedCallback: function(ctrl-name) {...;} // if not null, called by control when user changes value
* }
*
*/
SocialCalc.SettingsControls = {
Controls: {},
CurrentPanel: null // panel object to search on events
};
//
// SocialCalc.SettingsControlSetCurrentPanel(panel-object)
//
SocialCalc.SettingsControlSetCurrentPanel = function(panelobj) {
SocialCalc.SettingsControls.CurrentPanel = panelobj;
SocialCalc.SettingsControls.PopupChangeCallback({panelobj: panelobj}, "", null);
}
//
// SocialCalc.SettingsControlInitializePanel(panel-object)
//
SocialCalc.SettingsControlInitializePanel = function(panelobj) {
var ctrlname;
var sc = SocialCalc.SettingsControls;
for (ctrlname in panelobj) {
if (ctrlname=="name") continue;
ctrl = sc.Controls[panelobj[ctrlname].type];
if (ctrl && ctrl.Initialize) ctrl.Initialize(panelobj, ctrlname);
}
}
//
// SocialCalc.SettingsControlLoadPanel(panel-object, attribs)
//
SocialCalc.SettingsControlLoadPanel = function(panelobj, attribs) {
var ctrlname;
var sc = SocialCalc.SettingsControls;
for (ctrlname in panelobj) {
if (ctrlname=="name") continue;
ctrl = sc.Controls[panelobj[ctrlname].type];
if (ctrl && ctrl.SetValue) ctrl.SetValue(panelobj, ctrlname, attribs[panelobj[ctrlname].setting]);
}
}
//
// attribs = SocialCalc.SettingsControlUnloadPanel(panel-object)
( run in 0.616 second using v1.01-cache-2.11-cpan-364913b4093 )