view release on metacpan or search on metacpan
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
//
// name: "name",
// text: "text-on-tab",
// html: "html-to-create div",
// replacements:
// "%s.": "SocialCalc", "%id.": spreadsheet.idPrefix, "%tbt.": spreadsheet.toolbartext
// 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;
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
' <td %bodypart. colspan="3"><div %parttitle.>%loc!Right Border!</div></td>'+
' <td %bodypart. colspan="3"><div %parttitle.>%loc!Bottom Border!</div></td>'+
' <td %bodypart. colspan="3"><div %parttitle.>%loc!Left Border!</div></td>'+
' </tr><tr>'+
' <td %bodypart.>'+
' <input id="%id.cbt-onoff-bcb" onclick="SocialCalc.SettingsControlOnchangeBorder(this);" type="checkbox">'+
' </td>'+
' <td %bodypart.>'+
' <div id="%id.cbt-color"></div>'+
' </td>'+
' <td> </td>'+
' <td %bodypart.>'+
' <input id="%id.cbr-onoff-bcb" onclick="SocialCalc.SettingsControlOnchangeBorder(this);" type="checkbox">'+
' </td>'+
' <td %bodypart.>'+
' <div id="%id.cbr-color"></div>'+
' </td>'+
' <td> </td>'+
' <td %bodypart.>'+
' <input id="%id.cbb-onoff-bcb" onclick="SocialCalc.SettingsControlOnchangeBorder(this);" type="checkbox">'+
' </td>'+
' <td %bodypart.>'+
' <div id="%id.cbb-color"></div>'+
' </td>'+
' <td> </td>'+
' <td %bodypart.>'+
' <input id="%id.cbl-onoff-bcb" onclick="SocialCalc.SettingsControlOnchangeBorder(this);" type="checkbox">'+
' </td>'+
' <td %bodypart.>'+
' <div id="%id.cbl-color"></div>'+
' </td>'+
' <td> </td>'+
' </tr></table>'+
' </td>'+
'</tr>'+
'<tr>'+
' <td %itemtitle.><br>%loc!Padding!:</td>'+
' <td %itembody.>'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td %bodypart.>'+
' <div %parttitle.>%loc!Top!</div>'+
' <span id="%id.cpadtop"></span>'+
' </td>'+
' <td %bodypart.>'+
' <div %parttitle.>%loc!Right!</div>'+
' <span id="%id.cpadright"></span>'+
' </td>'+
' <td %bodypart.>'+
' <div %parttitle.>%loc!Bottom!</div>'+
' <span id="%id.cpadbottom"></span>'+
' </td>'+
' <td %bodypart.>'+
' <div %parttitle.>%loc!Left!</div>'+
' <span id="%id.cpadleft"></span>'+
' </td>'+
' </tr></table>'+
' </td>'+
'</tr>'+
'</table>'+
' </td><td style="vertical-align:top;padding:12px 0px 0px 12px;">'+
' <div style="width:100px;height:100px;overflow:hidden;border:1px solid black;background-color:#EEE;padding:6px;">'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td id="sample-text" style="height:100px;width:100px;"><div>%loc!This is a<br>sample!</div><div>-1234.5</div></td>'+
' </tr></table>'+
' </div>'+
' </td></tr></table>'+
'<br>'
};
// Sort
this.tabnums.sort = this.tabs.length;
this.tabs.push({name: "sort", text: "Sort", html:
' <div id="%id.sorttools" style="display:none;">'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td style="vertical-align:top;padding-right:4px;width:160px;">'+
' <div style="%tbt.">%loc!Set Cells To Sort!</div>'+
' <select id="%id.sortlist" size="1" onfocus="%s.CmdGotFocus(this);"><option selected>[select range]</option></select>'+
' <input type="button" value="%loc!OK!" onclick="%s.DoCmd(this, \'ok-setsort\');" style="font-size:x-small;">'+
' </td>'+
' <td style="vertical-align:middle;padding-right:16px;width:100px;text-align:right;">'+
' <div style="%tbt."> </div>'+
' <input type="button" id="%id.sortbutton" value="%loc!Sort Cells! A1:A1" onclick="%s.DoCmd(this, \'dosort\');" style="visibility:hidden;">'+
' </td>'+
' <td style="vertical-align:top;padding-right:16px;">'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td style="vertical-align:top;">'+
' <div style="%tbt.">%loc!Major Sort!</div>'+
' <select id="%id.majorsort" size="1" onfocus="%s.CmdGotFocus(this);"></select>'+
' </td><td>'+
' <input type="radio" name="majorsort" id="%id.majorsortup" value="up" checked><span style="font-size:x-small;color:#FFF;">%loc!Up!</span><br>'+
' <input type="radio" name="majorsort" id="%id.majorsortdown" value="down"><span style="font-size:x-small;color:#FFF;">%loc!Down!</span>'+
' </td>'+
' </tr></table>'+
' </td>'+
' <td style="vertical-align:top;padding-right:16px;">'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td style="vertical-align:top;">'+
' <div style="%tbt.">%loc!Minor Sort!</div>'+
' <select id="%id.minorsort" size="1" onfocus="%s.CmdGotFocus(this);"></select>'+
' </td><td>'+
' <input type="radio" name="minorsort" id="%id.minorsortup" value="up" checked><span style="font-size:x-small;color:#FFF;">%loc!Up!</span><br>'+
' <input type="radio" name="minorsort" id="%id.minorsortdown" value="down"><span style="font-size:x-small;color:#FFF;">%loc!Down!</span>'+
' </td>'+
' </tr></table>'+
' </td>'+
' <td style="vertical-align:top;padding-right:16px;">'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td style="vertical-align:top;">'+
' <div style="%tbt.">%loc!Last Sort!</div>'+
' <select id="%id.lastsort" size="1" onfocus="%s.CmdGotFocus(this);"></select>'+
' </td><td>'+
' <input type="radio" name="lastsort" id="%id.lastsortup" value="up" checked><span style="font-size:x-small;color:#FFF;">%loc!Up!</span><br>'+
' <input type="radio" name="lastsort" id="%id.lastsortdown" value="down"><span style="font-size:x-small;color:#FFF;">%loc!Down!</span>'+
' </td>'+
' </tr></table>'+
' </td>'+
' </tr></table>'+
' </div>',
onclick: SocialCalc.SpreadsheetControlSortOnclick});
this.editor.SettingsCallbacks.sort = {save: SocialCalc.SpreadsheetControlSortSave, load: SocialCalc.SpreadsheetControlSortLoad};
// Audit
this.tabnums.audit = this.tabs.length;
this.tabs.push({name: "audit", text: "Audit", html:
'<div id="%id.audittools" style="display:none;">'+
' <div style="%tbt."> </div>'+
'</div>',
view: "audit",
onclick:
function(s, t) {
var SCLoc = SocialCalc.LocalizeString;
var i, j;
var str = '<table cellspacing="0" cellpadding="0" style="margin-bottom:10px;"><tr><td style="font-size:small;padding:6px;"><b>'+SCLoc("Audit Trail This Session")+':</b><br><br>';
var stack = s.sheet.changes.stack;
var tos = s.sheet.changes.tos;
for (i=0; i<stack.length; i++) {
if (i==tos+1) str += '<br></td></tr><tr><td style="font-size:small;background-color:#EEE;padding:6px;">'+SCLoc("UNDONE STEPS")+':<br>';
for (j=0; j<stack[i].command.length; j++) {
str += SocialCalc.special_chars(stack[i].command[j]) + "<br>";
}
}
s.views.audit.element.innerHTML = str+"</td></tr></table>";
SocialCalc.CmdGotFocus(true);
},
onclickFocus: true
});
this.views["audit"] = {name: "audit",
divStyle: "border:1px solid black;overflow:auto;",
html: 'Audit Trail'
};
// Comment
this.tabnums.comment = this.tabs.length;
this.tabs.push({name: "comment", text: "Comment", html:
'<div id="%id.commenttools" style="display:none;">'+
'<table cellspacing="0" cellpadding="0"><tr><td>'+
'<textarea id="%id.commenttext" style="font-size:small;height:32px;width:600px;overflow:auto;" onfocus="%s.CmdGotFocus(this);"></textarea>'+
'</td><td style="vertical-align:top;">'+
' <input type="button" value="%loc!Save!" onclick="%s.SpreadsheetControlCommentSet();" style="font-size:x-small;">'+
'</td></tr></table>'+
'</div>',
view: "sheet",
onclick: SocialCalc.SpreadsheetControlCommentOnclick,
onunclick: SocialCalc.SpreadsheetControlCommentOnunclick
});
// Names
this.tabnums.names = this.tabs.length;
this.tabs.push({name: "names", text: "Names", html:
'<div id="%id.namestools" style="display:none;">'+
' <table cellspacing="0" cellpadding="0"><tr>'+
' <td style="vertical-align:top;padding-right:24px;">'+
' <div style="%tbt.">%loc!Existing Names!</div>'+
' <select id="%id.nameslist" size="1" onchange="%s.SpreadsheetControlNamesChangedName();" onfocus="%s.CmdGotFocus(this);"><option selected>[New]</option></select>'+
' </td>'+
' <td style="vertical-align:top;padding-right:6px;">'+
' <div style="%tbt.">%loc!Name!</div>'+
' <input type="text" id="%id.namesname" style="font-size:x-small;width:75px;" onfocus="%s.CmdGotFocus(this);">'+
' </td>'+
' <td style="vertical-align:top;padding-right:6px;">'+
' <div style="%tbt.">%loc!Description!</div>'+
' <input type="text" id="%id.namesdesc" style="font-size:x-small;width:150px;" onfocus="%s.CmdGotFocus(this);">'+
' </td>'+
' <td style="vertical-align:top;padding-right:6px;">'+
' <div style="%tbt.">%loc!Value!</div>'+
' <input type="text" id="%id.namesvalue" width="16" style="font-size:x-small;width:100px;" onfocus="%s.CmdGotFocus(this);">'+
' </td>'+
' <td style="vertical-align:top;padding-right:12px;width:100px;">'+
' <div style="%tbt.">%loc!Set Value To!</div>'+
' <input type="button" id="%id.namesrangeproposal" value="A1" onclick="%s.SpreadsheetControlNamesSetValue();" style="font-size:x-small;">'+
' </td>'+
' <td style="vertical-align:top;padding-right:6px;">'+
' <div style="%tbt."> </div>'+
' <input type="button" value="%loc!Save!" onclick="%s.SpreadsheetControlNamesSave();" style="font-size:x-small;">'+
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
SocialCalc.SpreadsheetControl.prototype.CreateCellHTMLSave =
function(range) {return SocialCalc.SpreadsheetControlCreateCellHTMLSave(this, range);};
// Sheet Methods to make things a little easier:
SocialCalc.SpreadsheetControl.prototype.ParseSheetSave = function(str) {return this.sheet.ParseSheetSave(str);};
SocialCalc.SpreadsheetControl.prototype.CreateSheetSave = function() {return this.sheet.CreateSheetSave();};
// Functions:
//
// InitializeSpreadsheetControl(spreadsheet, node, height, width, spacebelow)
//
// Creates the control elements and makes them the child of node (string or element).
// If present, height and width specify size.
// If either is 0 or null (missing), the maximum that fits on the screen
// (taking spacebelow into account) is used.
//
// Displays the tabs and creates the views (other than "sheet").
// The first tab is set as selected, but onclick is not invoked.
//
// You should do a redisplay or recalc (which redisplays) after running this.
//
SocialCalc.InitializeSpreadsheetControl = function(spreadsheet, node, height, width, spacebelow) {
var scc = SocialCalc.Constants;
var SCLoc = SocialCalc.LocalizeString;
var SCLocSS = SocialCalc.LocalizeSubstrings;
var html, child, i, vname, v, style, button, bele;
var tabs = spreadsheet.tabs;
var views = spreadsheet.views;
spreadsheet.requestedHeight = height;
spreadsheet.requestedWidth = width;
spreadsheet.requestedSpaceBelow = spacebelow;
if (typeof node == "string") node = document.getElementById(node);
if (node == null) {
alert("SocialCalc.SpreadsheetControl not given parent node.");
}
spreadsheet.parentNode = node;
// create node to hold spreadsheet control
spreadsheet.spreadsheetDiv = document.createElement("div");
spreadsheet.SizeSSDiv(); // calculate and fill in the size values
for (child=node.firstChild; child!=null; child=node.firstChild) {
node.removeChild(child);
}
// create the tabbed UI at the top
html = '<div><div style="'+spreadsheet.toolbarbackground+'padding:12px 10px 10px 4px;height:40px;">';
for (i=0; i<tabs.length; i++) {
html += tabs[i].html;
}
html += '</div>'+
'<div style="'+spreadsheet.tabbackground+'padding-bottom:4px;margin:0px 0px 8px 0px;">'+
'<table cellpadding="0" cellspacing="0"><tr>';
for (i=0; i<tabs.length; i++) {
html += ' <td id="%id.' + tabs[i].name + 'tab" style="' +
(i==0 ? spreadsheet.tabselectedCSS : spreadsheet.tabplainCSS) +
'" onclick="%s.SetTab(this);">' + SCLoc(tabs[i].text) + '</td>';
}
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);
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
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',
'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"},
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
cellHTML = SocialCalc.FormatValueForDisplay(spreadsheet.sheet, cell.datavalue, coord, (linkstyle || spreadsheet.context.defaultHTMLlinkstyle));
}
else {
cellHTML = cell.displaystring;
}
if (cellHTML == " ") continue;
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
else {
editor.EditorAddToInput(text, "=");
}
}
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
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/socialcalcspreadsheetcontrol.js view on Meta::CPAN
}
//
// 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)
//
SocialCalc.SettingsControlUnloadPanel = function(panelobj) {
var ctrlname;
var sc = SocialCalc.SettingsControls;
var attribs = {};
for (ctrlname in panelobj) {
if (ctrlname=="name") continue;
ctrl = sc.Controls[panelobj[ctrlname].type];
if (ctrl && ctrl.GetValue) attribs[panelobj[ctrlname].setting] = ctrl.GetValue(panelobj, ctrlname);
}
return attribs;
}
//
// SocialCalc.SettingsControls.PopupChangeCallback
//
SocialCalc.SettingsControls.PopupChangeCallback = function(attribs, id, value) {
var sc = SocialCalc.Constants;
var ele = document.getElementById("sample-text");
if (!ele || !attribs || !attribs.panelobj) return;
var idPrefix = SocialCalc.CurrentSpreadsheetControlObject.idPrefix;
var c = attribs.panelobj.name == "cell" ? "c" : "";
var v, a, parts, str1, str2, i;
parts = sc.defaultCellLayout.match(/^padding.(\S+) (\S+) (\S+) (\S+).vertical.align.(\S+);$/) || [];
var cv = {color: ["textcolor"], backgroundColor: ["bgcolor", "#FFF"],
fontSize: ["fontsize", sc.defaultCellFontSize], fontFamily: ["fontfamily"],
paddingTop: ["padtop", parts[1]], paddingRight: ["padright", parts[2]],
paddingBottom: ["padbottom", parts[3]], paddingLeft: ["padleft", parts[4]],
verticalAlign: ["alignvert", parts[5]]};
for (a in cv) {
v = SocialCalc.Popup.GetValue(idPrefix+c+cv[a][0]) || cv[a][1] || "";
ele.style[a] = v;
}
if (c=="c") {
cv = {borderTop: "cbt", borderRight: "cbr", borderBottom: "cbb", borderLeft: "cbl"};
for (a in cv) {
v = SocialCalc.SettingsControls.BorderSideGetValue(attribs.panelobj, cv[a]);
ele.style[a] = v ? (v.val || "") : "";
}
v = SocialCalc.Popup.GetValue(idPrefix+"calignhoriz");
ele.style.textAlign = v || "left";
ele.childNodes[1].style.textAlign = v || "right";
}
else {
ele.style.border = "";
v = SocialCalc.Popup.GetValue(idPrefix+"textalignhoriz");
ele.style.textAlign = v || "left";
v = SocialCalc.Popup.GetValue(idPrefix+"numberalignhoriz");
ele.childNodes[1].style.textAlign = v || "right";
}
v = SocialCalc.Popup.GetValue(idPrefix+c+"fontlook");
parts = v ? (v.match(/^(\S+) (\S+)$/) || []) : [];
ele.style.fontStyle = parts[1] || "";
ele.style.fontWeight = parts[2] || "";
v = SocialCalc.Popup.GetValue(idPrefix+c+"formatnumber") || "General";
str1 = SocialCalc.FormatNumber.formatNumberWithFormat(9.8765, v, "");
str2 = SocialCalc.FormatNumber.formatNumberWithFormat(-1234.5, v, "");
if (str2 != "??-???-?? ??:??:??") { // not bad date from negative number
str1 += "<br>"+str2;
}
ele.childNodes[1].innerHTML = str1;
}
//
// PopupList Control
//
SocialCalc.SettingsControls.PopupListSetValue = function(panelobj, ctrlname, value) {
if (!value) {alert(ctrlname+" no value"); return;}
var sp = SocialCalc.Popup;
if (!value.def) {
sp.SetValue(panelobj[ctrlname].id, value.val);
}
else {
sp.SetValue(panelobj[ctrlname].id, "");
}
socialcalc/socialcalcspreadsheetcontrol.js view on Meta::CPAN
var ctrlsubid = nameparts[3]
var ctrlidsuffix = nameparts[4];
var ctrltype = panelobj[ctrlname].type;
switch (ctrlidsuffix) {
case "bcb": // border checkbox
if (ele.checked) {
sc.Controls[ctrltype].SetValue(sc.CurrentPanel, ctrlname, {def: false, val: ele.value || "1px solid rgb(0,0,0)"});
}
else {
sc.Controls[ctrltype].SetValue(sc.CurrentPanel, ctrlname, {def: false, val: ""});
}
break;
}
}
SocialCalc.SettingsControls.Controls.BorderSide = {
SetValue: SocialCalc.SettingsControls.BorderSideSetValue,
GetValue: SocialCalc.SettingsControls.BorderSideGetValue,
OnClick: SocialCalc.SettingsControls.ColorComboOnClick,
Initialize: SocialCalc.SettingsControls.BorderSideInitialize,
InitialData: {thickness: "1 pixel:1px", style: "Solid:solid"},
ChangedCallback: null
}
SocialCalc.SettingControlReset = function() {
var sc = SocialCalc.SettingsControls;
var ctrlname;
for (ctrlname in sc.Controls) {
if (sc.Controls[ctrlname].OnReset) sc.Controls[ctrlname].OnReset(ctrlname);
}
}
/**********************
*
* CtrlSEditor implementation for editing SocialCalc.OtherSaveParts
*
*/
SocialCalc.OtherSaveParts = {}; // holds other parts to save - must be set when loaded if you want to keep
SocialCalc.CtrlSEditor = function(whichpart) {
var strtoedit, partname;
if (whichpart.length > 0) {
strtoedit = SocialCalc.special_chars(SocialCalc.OtherSaveParts[whichpart] || "");
}
else {
strtoedit = "Listing of Parts\n";
for (partname in SocialCalc.OtherSaveParts) {
strtoedit += SocialCalc.special_chars("\nPart: "+partname+"\n=====\n"+SocialCalc.OtherSaveParts[partname]+"\n");
}
}
var editbox = document.createElement("div");
editbox.style.cssText = "position:absolute;z-index:500;width:300px;height:300px;left:100px;top:200px;border:1px solid black;background-color:#EEE;text-align:center;";
editbox.id = "socialcalc-editbox";
editbox.innerHTML = whichpart+'<br><br><textarea id="socialcalc-editbox-textarea" style="width:250px;height:200px;">'+
strtoedit + '</textarea><br><br><input type=button ' +
'onclick="SocialCalc.CtrlSEditorDone (\'socialcalc-editbox\', \''+whichpart+'\');" value="OK">';
document.body.appendChild(editbox);
var ebta = document.getElementById("socialcalc-editbox-textarea");
ebta.focus();
SocialCalc.CmdGotFocus(ebta);
}
SocialCalc.CtrlSEditorDone = function(idprefix, whichpart) {
var edittextarea = document.getElementById(idprefix+"-textarea");
var text = edittextarea.value;
if (whichpart.length > 0) {
if (text.length > 0) {
SocialCalc.OtherSaveParts[whichpart] = text;
}
else {
delete SocialCalc.OtherSaveParts[whichpart];
}
}
var editbox = document.getElementById(idprefix);
SocialCalc.KeyboardFocus();
editbox.parentNode.removeChild(editbox);
}