App-SocialCalc-Multiplayer
view release on metacpan or search on metacpan
socialcalc/socialcalc-3.js view on Meta::CPAN
else if (ch>=97) c = 26*c + ch-96;
else if (ch>=65) c = 26*c + ch-64;
}
SocialCalc.coordToCol[cr] = c;
SocialCalc.coordToRow[cr] = r;
return {row: r, col: c};
}
SocialCalc.ParseRange = function(range) {
var pos, cr, cr1, cr2;
if (!range) range = "A1:A1"; // error return, hopefully benign
range = range.toUpperCase();
pos = range.indexOf(":");
if (pos>=0) {
cr = range.substring(0,pos);
cr1 = SocialCalc.coordToCr(cr);
cr1.coord = cr;
cr = range.substring(pos+1);
cr2 = SocialCalc.coordToCr(cr);
cr2.coord = cr;
}
else {
cr1 = SocialCalc.coordToCr(range);
cr1.coord = range;
cr2 = SocialCalc.coordToCr(range);
cr2.coord = range;
}
return {cr1: cr1, cr2: cr2};
}
SocialCalc.decodeFromSave = function(s) {
if (typeof s != "string") return s;
if (s.indexOf("\\")==-1) return s; // for performace reasons: replace nothing takes up time
var r=s.replace(/\\c/g,":");
r=r.replace(/\\n/g,"\n");
return r.replace(/\\b/g,"\\");
}
SocialCalc.decodeFromAjax = function(s) {
if (typeof s != "string") return s;
if (s.indexOf("\\")==-1) return s; // for performace reasons: replace nothing takes up time
var r=s.replace(/\\c/g,":");
r=r.replace(/\\n/g,"\n");
r=r.replace(/\\e/g,"]]");
return r.replace(/\\b/g,"\\");
}
SocialCalc.encodeForSave = function(s) {
if (typeof s != "string") return s;
if (s.indexOf("\\")!=-1) // for performace reasons: replace nothing takes up time
s=s.replace(/\\/g,"\\b");
if (s.indexOf(":")!=-1)
s=s.replace(/:/g,"\\c");
if (s.indexOf("\n")!=-1)
s=s.replace(/\n/g,"\\n");
return s;
}
//
// Returns estring where &, <, >, " are HTML escaped
//
SocialCalc.special_chars = function(string) {
if (/[&<>"]/.test(string)) { // only do "slow" replaces if something to replace
string = string.replace(/&/g, "&");
string = string.replace(/</g, "<");
string = string.replace(/>/g, ">");
string = string.replace(/"/g, """);
}
return string;
}
SocialCalc.Lookup = function(value, list) {
for (i=0; i<list.length; i++) {
if (list[i] > value) {
if (i>0) return i-1;
else return null;
}
}
return list.length-1; // if all smaller, matches last
}
//
// setStyles(element, cssText)
//
// Takes a pseudo style string (e.g., text-align must be textAlign) and sets
// the element's style value for each style name listed (leaving others unchanged).
// OK to call with null cssText.
//
SocialCalc.setStyles = function (element, cssText) {
var parts, part, pos, name, value;
if (!cssText) return;
parts = cssText.split(";");
for (part=0; part<parts.length; part++) {
pos = parts[part].indexOf(":"); // find first colon (could be one in url)
if (pos != -1) {
name = parts[part].substring(0, pos);
value = parts[part].substring(pos+1);
if (name && value) { // if non-null name and value, set style
element.style[name] = value;
}
}
// namevalue = parts[part].split(":");
// if (namevalue[0]) element.style[namevalue[0]] = namevalue[1];
}
}
//
// GetViewportInfo() - returns object with viewport width and height, and scroll offsets
//
// Flanagan, JavaScript, 5th Edition, page 276
//
( run in 1.459 second using v1.01-cache-2.11-cpan-7f9471e7e0a )