"
+ " EnterpriseSheet and EnterpriseSheet logos are the trademarks of the Feyasoft Inc. All right reserved.
"
+ " Want to run Spreadsheet in your server and maximize your Performance, Productivity and Security, "
+ " please send the email to:
info@enterpriseSheet.com. For more detail, please visit:
www.enterpriseSheet.com"
+ "
"
+ " Warning: This computer program is protected by the copyright law and international treaties. Unauthorized "
+ " reproduction or distribution this program, or any portion of it, maybe result in severe civil and "
+ " criminal penalties, and will be prosecuted to the maximum extent possible under the law.";
this.aboutPanel = new Ext.Panel({
baseCls : "x-plain",
html : myHtml
});
this.activeId = 0;
this.releasePanel = new Ext.Panel({
layout : "fit",
autoScroll : true,
border : false,
autoLoad : {
url : "static/_release.html",
scripts : true
}
});
Ext.ss.popup.about.AboutSS.superclass.constructor.call(this, {
iconCls : "icon_enterpriseSheet",
title : "About EnterpriseSheet.com [ "
+ Ext.ss.common.Mask.version + " ]",
width : 600,
height : 350,
closable : true,
resizable : false,
modal : true,
layout : "card",
border : true,
activeItem : 0,
layoutConfig : {
animate : false,
deferredRender : true
},
items : [this.aboutPanel, this.releasePanel],
buttons : [{
text : " Release Notes ",
handler : function() {
this.getLayout()
.setActiveItem(this.releasePanel);
this.activeId = 1;
},
scope : this
}, {
text : "Ok",
handler : function() {
if (this.activeId == 0) {
this.close();
} else {
this.activeId = 0;
this.getLayout()
.setActiveItem(this.aboutPanel);
}
},
scope : this
}]
});
this.show();
};
Ext.extend(Ext.ss.popup.about.AboutSS, Ext.Window, {});
Ext.ns("feyaSoft.word.popup");
feyaSoft.word.popup.HeadFootWin = Ext.extend(Ext.Window, {
layout : "form",
bodyStyle : "padding: 10px;background: white;",
buttonAlign : "center",
initComponent : function() {
this.headField = new Ext.form.TextArea({
emptyText : feyaSoft.word.lang.leftHead,
flex : 1,
hideLabel : true
});
this.headLeftField = new Ext.form.TextArea({
emptyText : feyaSoft.word.lang.centerHead,
flex : 1,
hideLabel : true
});
this.headRightField = new Ext.form.TextArea({
emptyText : feyaSoft.word.lang.rightHead,
flex : 1,
hideLabel : true
});
this.footLeftField = new Ext.form.TextArea({
emptyText : feyaSoft.word.lang.leftFoot,
flex : 1,
hideLabel : true
});
this.footField = new Ext.form.TextArea({
emptyText : feyaSoft.word.lang.centerFoot,
flex : 1,
hideLabel : true
});
this.footRightField = new Ext.form.TextArea({
emptyText : feyaSoft.word.lang.rightFoot,
flex : 1,
hideLabel : true
});
this.items = [{
xtype : "fieldset",
title : feyaSoft.word.lang.head,
height : 150,
layout : {
type : "hbox",
align : "stretch"
},
items : [this.headLeftField, {
xtype : "box",
width : 10
}, this.headField, {
xtype : "box",
width : 10
}, this.headRightField]
}, {
xtype : "fieldset",
title : feyaSoft.word.lang.foot,
height : 150,
layout : {
type : "hbox",
align : "stretch"
},
items : [this.footLeftField, {
xtype : "box",
width : 10
}, this.footField, {
xtype : "box",
width : 10
}, this.footRightField]
}];
this.buttons = [{
text : feyaSoft.lang.common.clear,
handler : this.onClear,
scope : this
}, {
text : feyaSoft.lang.common.ok,
handler : this.onApply,
scope : this
}, {
text : feyaSoft.lang.common.cancel,
handler : this.onClose,
scope : this
}];
feyaSoft.word.popup.HeadFootWin.superclass.initComponent
.call(this);
},
popup : function(info) {
if (info) {
this.headLeftField.setValue(info.headLeft);
this.headRightField.setValue(info.headRight);
this.footLeftField.setValue(info.footLeft);
this.footRightField.setValue(info.footRight);
this.headField.reset();
this.footField.reset();
if ("left" == info.headAlign) {
this.headLeftField.setValue(info.head);
this.footLeftField.setValue(info.foot);
} else if ("right" == info.headAlign) {
this.headRightField.setValue(info.head);
this.footRightField.setValue(info.foot);
} else {
this.headField.setValue(info.head);
this.footField.setValue(info.foot);
}
} else {
this.headField.reset();
this.headLeftField.reset();
this.headRightField.reset();
this.footField.reset();
this.footLeftField.reset();
this.footRightField.reset();
}
this.show();
},
onClose : function() {
this.hide();
},
onApply : function() {
var head = this.headField.getValue();
var headLeft = this.headLeftField.getValue();
var headRight = this.headRightField.getValue();
var foot = this.footField.getValue();
var footLeft = this.footLeftField.getValue();
var footRight = this.footRightField.getValue();
if (this.applyCallback) {
this.applyCallback.call(this.scope, {
head : head,
headLeft : headLeft,
headRight : headRight,
foot : foot,
footLeft : footLeft,
footRight : footRight
});
}
this.onClose();
},
onClear : function() {
this.headLeftField.setValue("");
this.headField.setValue("");
this.headRightField.setValue("");
this.footLeftField.setValue("");
this.footField.setValue("");
this.footRightField.setValue("");
}
});
Ext.ns("Ext.ss.popup");
Ext.ss.popup.PrintSettingWin = function(config) {
this.config = config || {};
Ext.form.Field.prototype.msgTarget = "side";
this.noGrid = new Ext.form.Checkbox({
hideLabel : true,
boxLabel : feyaSoft.ss.lang.notGridLine,
name : "noGrid",
checked : false
});
this.optionsSet = new Ext.form.FieldSet({
title : feyaSoft.lang.common.options,
collapsible : true,
autoHeight : true,
items : [this.noGrid]
});
this.landRadio = new Ext.form.Radio({
columnWidth : 0.05,
hideLabel : true,
listeners : {
check : {
fn : this.onChangeFn,
scope : this
}
},
inputValue : "land",
name : "printway"
});
this.portraitRadio = new Ext.form.Radio({
columnWidth : 0.05,
hideLabel : true,
listeners : {
check : {
fn : this.onChangeFn,
scope : this
}
},
inputValue : "portrait",
checked : true,
name : "printway"
});
this.htmlWay = new Ext.form.Radio({
columnWidth : 0.05,
hideLabel : true,
listeners : {
check : {
fn : this.onChangeFn,
scope : this
}
},
inputValue : "htmlway",
name : "printway"
});
this.outPutSet = new Ext.form.FieldSet({
title : feyaSoft.lang.common.outputWays,
collapsible : true,
autoHeight : true,
layout : "column",
items : [this.landRadio, {
columnWidth : 0.26,
html : "
"
+ feyaSoft.lang.ss.landscape
+ " |
|
"
+ feyaSoft.lang.ss.landscape + " |
",
style : "margin-right:30px;",
height : 91
}, this.portraitRadio, {
columnWidth : 0.26,
html : "
"
+ feyaSoft.lang.ss.portrait
+ " |
|
"
+ feyaSoft.lang.ss.portrait + " |
",
style : "margin-right:30px;",
height : 91
}, this.htmlWay, {
columnWidth : 0.26,
html : "
"
+ feyaSoft.lang.ss.HTMLformat
+ " |
|
"
+ feyaSoft.lang.ss.HTMLformat + " |
",
style : "margin-right:30px;",
height : 91
}]
});
this.formPanel = new Ext.form.FormPanel({
bodyStyle : "padding:10px;",
baseCls : "x-plain",
labelWidth : 80,
defaultType : "textfield",
items : [this.optionsSet, this.outPutSet]
});
this.printerPanel = new Ext.Panel({
layout : "border",
autoScroll : true,
border : false,
items : [{
region : "north",
autoHeight : true,
border : false,
bodyStyle : "background:white;border-bottom:1px solid #bfbfbf;padding:5px;",
html : feyaSoft.ss.lang.printDesc
}, {
region : "center",
baseCls : "x-plain",
border : false,
items : [this.formPanel]
}]
});
Ext.ss.popup.PrintSettingWin.superclass.constructor.call(this, {
title : feyaSoft.ss.lang.printSheet,
width : 550,
height : 350,
layout : "fit",
buttonAlign : "right",
shim : false,
animCollapse : false,
constrainHeader : true,
modal : true,
items : this.printerPanel,
resizable : false,
buttons : [{
iconCls : "icon_no",
text : feyaSoft.lang.common.cancel,
handler : function() {
this.close();
},
scope : this
}, {
text : feyaSoft.lang.common.print,
handler : function() {
var printWay = "portrait";
if (this.landRadio.getValue()) {
printWay = "landscape";
} else if (this.htmlWay.getValue()) {
printWay = "html";
}
var noGrid = this.noGrid.getValue();
var exportPDF = feyaSoft.home.CONST.spreadSheetUrl.exportPDF;
var url = exportPDF + "?noGrid=" + noGrid
+ "&printWay=" + printWay + "&id="
+ this.config.fileId;
if (this.config.callback) {
this.config.callback.call(this.config.scope, url,
this);
}
this.close();
},
scope : this
}]
});
this.show();
this.outPutSet.body.on("click", this.outputClickFn, this);
};
Ext.extend(Ext.ss.popup.PrintSettingWin, Ext.Window, {
onChangeFn : function(ro, nval, oval) {
if (nval) {
this.chanageTableCss(ro.inputValue);
}
},
chanageTableCss : function(inputVal) {
var doms = Ext.query("table[radiotype*=x-radiocss-]",
this.outPutSet.body.dom);
for (var i = 0; i < doms.length; i++) {
var radiotype = doms[i].getAttribute("radiotype");
var tmary = radiotype.split("x-radiocss-");
if (tmary[1] == inputVal) {
doms[i].style.background = "#8ace28";
} else {
doms[i].style.background = "none";
}
}
},
outputClickFn : function(e) {
var target = e.getTarget();
var tgEl = Ext.get(target);
var evtEl;
if (tgEl.hasClass("x-radiocss")) {
evtEl = tgEl;
} else {
evtEl = tgEl.parent(".x-radiocss");
}
if (evtEl) {
var radiotype = evtEl.getAttribute("radiotype");
var tmary = radiotype.split("x-radiocss-");
var inputVal = tmary[1];
if (inputVal == "land") {
this.landRadio.setValue(true);
} else if (inputVal == "portrait") {
this.portraitRadio.setValue(true);
} else if (inputVal == "htmlway") {
this.htmlWay.setValue(true);
}
this.chanageTableCss(inputVal);
}
}
});
/**上传Excel*/
Ext.ns("Ext.ss.popup");
Ext.ss.popup.ImportFileWin = function(config) {
Ext.apply(this, config);
var maxExcelImportSize = Ext.get("maxExcelImportSize")
.getAttribute("value");
Ext.form.Field.prototype.msgTarget = "side";
this.filePath = new Ext.form.FileUploadField({
emptyText : feyaSoft.lang.file.supportFormat,
fieldLabel : feyaSoft.lang.file.fileName,
name : "file",
allowBlank : false,
style : "margin-bottom:50px;",
anchor : "95%",
buttonCfg : {
text : " ",
iconCls : "upload-icon"
}
});
this.tipLabel = new Ext.form.DisplayField({
hideLabel : true,
labelSeparator : "",
value : feyaSoft.lang.file.uploadHint,
anchor : "95%"
});
this.formPanel = new Ext.form.FormPanel({
bodyStyle : "padding:10px;",
fileUpload : true,
baseCls : "x-plain",
labelWidth : 80,
url : feyaSoft.home.CONST.spreadSheetUrl.importExcelUpload,
defaultType : "textfield",
items : [this.filePath, this.tipLabel]
});
this.importPanel = new Ext.Panel({
layout : "border",
autoScroll : true,
border : false,
items : [{
region : "north",
autoHeight : true,
border : false,
bodyStyle : "background:white;border-bottom:1px solid #bfbfbf;padding:5px;",
html : "
"
+ feyaSoft.lang.file.importExcel
+ ""
+ "
"
+ "- "
+ feyaSoft.lang.file.ssFileUploadDesc
+ maxExcelImportSize
+ "k.
"
+ "- "
+ feyaSoft.lang.file.takeWhileToProcess + "
" + "
"
}, {
region : "center",
baseCls : "x-plain",
border : false,
layout : "fit",
items : [this.formPanel]
}]
});
Ext.ss.popup.ImportFileWin.superclass.constructor.call(this, {
title : feyaSoft.lang.common.fileImport,
width : 500,
height : 280,
minWidth : 500,
layout : "fit",
buttonAlign : "right",
shim : false,
animCollapse : false,
constrainHeader : true,
modal : true,
items : this.importPanel,
resizable : false,
buttons : [{
iconCls : "icon_no",
text : feyaSoft.lang.common.cancel,
handler : function() {
this.close();
},
scope : this
}, {
text : feyaSoft.lang.common['import'],
handler : function() {
if (this.formPanel.form.isValid()) {
this.formPanel.form.submit({
waitMsg : "In processing",
failure : function(form, action) {
Ext.MessageBox.alert(
"Error Message",
action.result.info);
},
success : function(form, action) {
var jsonData = action.result;
if (jsonData.success) {
var fileId = jsonData.filepath;
config.parentView
.openExcelFile(fileId);
this.close();
} else {
Ext.MessageBox.alert(
"Failed",
jsonData.info);
}
},
scope : this
});
}
},
scope : this
}]
});
this.show();
};
Ext.extend(Ext.ss.popup.ImportFileWin, Ext.Window, {});
Ext.ns("Ext.ss.popup");
Ext.ss.popup.ConditionFormatWin = Ext.extend(Ext.Window, {
width : 800,
autoHeight : true,
maxHeight : 300,
bodyStyle : "min-height:60px;",
autoScroll : true,
closeAction : "hide",
title : feyaSoft.ss.lang.conditionFormat,
initComponent : function() {
this.colorPalette = new Ext.ColorPalette({
allowReselect : true
});
this.colorMenu = new Ext.menu.Menu({
items : [this.colorPalette]
});
this.buttons = [{
text : feyaSoft.lang.common.add,
minWidth : 80,
handler : this.onAddFn,
scope : this
}, {
text : feyaSoft.lang.common.ok,
minWidth : 80,
handler : this.onApply,
scope : this
}, {
iconCls : "icon_no",
text : feyaSoft.lang.common.cancel,
minWidth : 80,
handler : function() {
this.hide();
},
scope : this
}];
this.items = [this.createConditionFormat(true)];
Ext.ss.popup.ConditionFormatWin.superclass.initComponent.call(this);
this.colorPalette.on("select", this.onColorSelectFn, this);
this.on("hide", this.onHideFn, this);
},
createConditionFormat : function(hideDelete) {
var rangeField = new Ext.form.TextField({
hideLabel : true,
labelSeparator : "",
validator : this.validator || Ext.ss.common.Mask.dataRangeValidator,
allowBlank : false
});
var combo = new Ext.form.ComboBox({
typeAhead : true,
triggerAction : "all",
lazyRender : true,
mode : "local",
margins : "0 0 0 10",
store : Ext.ss.common.Mask.getConditionStore(),
valueField : "id",
displayField : "text",
value : "include"
});
this.mon(combo, {
scope : this,
select : this.onSelectOption
});
var numField = new Ext.form.NumberField({
hidden : true,
width : 110,
margins : "0 0 0 10",
allowBlank : false
});
var textField = new Ext.form.TextField({
width : 110,
margins : "0 0 0 10",
allowBlank : false
});
var minField = new Ext.form.NumberField({
hidden : true,
width : 50,
margins : "0 0 0 10",
allowBlank : false
});
var maxField = new Ext.form.NumberField({
hidden : true,
width : 50,
margins : "0 0 0 10",
allowBlank : false
});
var textCb = new Ext.form.Checkbox({
boxLabel : "文本",
margins : "0 0 0 20",
listeners : {
check : {
fn : function(cb, checked) {
if (false === checked) {
var ct = cb.ownerCt;
var index = ct.items.indexOf(cb);
var box = ct.items.get(index + 1);
box.getEl()
.setStyle("background-color", "");
}
},
scope : this
}
}
});
var textBox = new Ext.BoxComponent({
cls : "x-condition-text-box",
margins : "0 0 0 10",
listeners : {
afterrender : {
fn : function(box) {
var el = box.getEl();
el.on("click", function() {
var ct = box.ownerCt;
var index = ct.items.indexOf(box);
var checkBox = ct.items.get(index
- 1);
this.colorPalette.sender = box;
this.colorPalette.checkbox = checkBox;
this.colorMenu.show(el, "tl-bl?");
}, this);
},
scope : this
}
}
});
var backgroundCb = new Ext.form.Checkbox({
boxLabel : "背景",
margins : "0 0 0 10",
listeners : {
check : {
fn : function(cb, checked) {
if (false === checked) {
var ct = cb.ownerCt;
var index = ct.items.indexOf(cb);
var box = ct.items.get(index + 1);
box.getEl()
.setStyle("background-color", "");
}
},
scope : this
}
}
});
var backgroundBox = new Ext.BoxComponent({
cls : "x-condition-text-box",
margins : "0 0 0 10",
listeners : {
afterrender : {
fn : function(box) {
var el = box.getEl();
el.on("click", function() {
var ct = box.ownerCt;
var index = ct.items.indexOf(box);
var checkBox = ct.items.get(index
- 1);
this.colorPalette.sender = box;
this.colorPalette.checkbox = checkBox;
this.colorMenu.show(el, "tl-bl?");
}, this);
},
scope : this
}
}
});
var deleteBtn = new Ext.Button({
iconCls : "delete",
hidden : hideDelete,
handler : this.onDeleteConditionFormat,
scope : this
});
var ct = new Ext.Container({
style : "padding:10px;",
layout : {
type : "hbox"
},
items : [rangeField, {
xtype : "button",
margins : "0 0 0 5",
iconCls : "icon_window_anchorin",
handler : this.popupDataRange,
scope : this
}, combo, textField, numField, minField, maxField,
textCb, textBox, backgroundCb, backgroundBox, {
xtype : "box",
flex : 1
}, deleteBtn],
isValid : function() {
var flag = true;
this.items.each(function(it) {
if (it.isValid && it.isVisible()) {
if (!it.isValid()) {
flag = false;
return false;
}
}
});
return flag;
}
});
ct.rangeField = rangeField;
ct.optionCombo = combo;
ct.targetField = textField;
ct.numField = numField;
ct.minField = minField;
ct.maxField = maxField;
ct.textCb = textCb;
ct.textBox = textBox;
ct.backgroundCb = backgroundCb;
ct.backgroundBox = backgroundBox;
return ct;
},
onSelectOption : function(combo, rec) {
var ct = combo.ownerCt;
var id = rec.data.id;
if ("empty" == id) {
ct.targetField.disable();
ct.numField.disable();
} else {
ct.targetField.enable();
ct.numField.enable();
}
if ("bw" == id || "nbw" == id) {
ct.minField.show();
ct.maxField.show();
ct.targetField.hide();
ct.numField.hide();
} else if ("gt" == id || "lt" == id || "eq" == id || "ne" == id) {
ct.minField.hide();
ct.maxField.hide();
ct.targetField.hide();
ct.numField.show();
} else {
ct.minField.hide();
ct.maxField.hide();
ct.targetField.show();
ct.numField.hide();
}
ct.doLayout();
},
showDataRangeBorder : function(flag, saveflag) {
if (this.dataRange) {
this.spreadsheet.sm.showDataRangeBorder(this.dataRange, flag,
saveflag);
}
},
pushdown : function(stop) {
this.stopHideDataRange = stop;
this.hide();
},
onHideFn : function() {
if (!this.stopHideDataRange) {
this.showDataRangeBorder();
this.spreadsheet.sm.fireEvent("renderborder");
}
delete this.stopHideDataRange;
},
popupDataRange : function(btn) {
var rangeField = btn.ownerCt.items.first();
var ss = this.spreadsheet;
var ds = ss.ds;
var drSelector = ss.dataRangeSelector;
var sender = this;
sender.pushdown();
drSelector.popup(null, rangeField.getValue(), function(range) {
var parts = range.split(",");
var arr = [];
for (var i = 0, len = parts.length; i < len; i++) {
arr.push(ds.parseText2Pos(parts[i]));
}
rangeField.setValue(range);
sender.show();
sender.initDataRange(arr);
sender.showDataRangeBorder(true);
}, this);
},
onColorSelectFn : function(cp, color) {
var sender = this.colorPalette.sender;
var checkBox = this.colorPalette.checkbox;
var el = sender.getEl();
checkBox.setValue(true);
el.setStyle("background-color", "#" + color);
this.colorMenu.hide();
},
addCondtionFormat : function() {
var ct = this.createConditionFormat();
var count = this.items.getCount();
if (0 == count) {
this.body.update("");
}
if (count) {
var first = this.items.get(0);
} else {
}
this.add(ct);
this.doLayout();
var rangeField = ct.items.get(0);
rangeField.setValue(this.getDataRangeStr());
this.syncShadow();
},
onDeleteConditionFormat : function(btn) {
var ct = btn.ownerCt;
var len = this.items.getCount();
if (1 <= len) {
this.remove(ct);
if (2 == len) {
var first = this.items.get(0);
}
this.doLayout();
this.syncShadow();
if (1 == len) {
this.body.update("
"
+ feyaSoft.ss.lang.noConditionFormat + "
");
}
}
},
getConditionFormatInfo : function() {
var json = [];
var ss = this.spreadsheet;
var ds = ss.ds;
this.items.each(function(it) {
var refStr = it.rangeField.getValue();
var pos = ds.parseText2Pos(refStr);
var o = {
pos : pos,
opt : it.optionCombo.getValue(),
color : it.textBox.getEl().getStyle("background-color"),
bgc : it.backgroundBox.getEl()
.getStyle("background-color")
};
var opt = o.opt;
if ("empty" != opt) {
if ("bw" == opt || "nbw" == opt) {
o.min = it.minField.getValue();
o.max = it.maxField.getValue();
} else if ("gt" == opt || "lt" == opt || "eq" == opt
|| "ne" == opt) {
o.tgt = it.numField.getValue();
} else {
o.tgt = it.targetField.getValue();
}
}
json.push(o);
}, this);
return json;
},
onApply : function() {
var valid = true;
this.items.each(function(it) {
if (!it.isValid()) {
valid = false;
}
});
if (valid) {
var json = this.getConditionFormatInfo();
this.spreadsheet.updateConditionFormat(json);
this.hide();
} else {
Ext.Msg.alert(feyaSoft.ss.lang.hint, feyaSoft.ss.lang.fixInvalid);
}
},
onAddFn : function() {
this.addCondtionFormat();
},
initDataRange : function(rt) {
var ss = this.spreadsheet;
var setting = this.setting || {};
var sm = ss.sm;
var ds = ss.ds;
if (!rt) {
var res = sm
.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
rt = [{
x : res.minPos.x,
y : res.minPos.y,
ex : res.maxPos.x,
ey : res.maxPos.y,
ab : true,
sheetIndex : ds.activeSheet
}];
}
this.dataRange = rt;
this.combineDir = "y";
this.dataMatrix = ss.combineRanges(rt, this.combineDir);
},
getDataRangeStr : function() {
var ss = this.spreadsheet;
if (this.dataRange) {
var arr = [];
for (var i = 0, len = this.dataRange.length; i < len; i++) {
var it = this.dataRange[i];
arr.push(ss.encodeDataRange({
minPos : {
x : it.x,
y : it.y
},
maxPos : {
x : it.ex,
y : it.ey
}
}));
}
return arr.join(",");
} else {
return "";
}
},
popup : function(config) {
config = config || {};
var ss = this.spreadsheet;
var cfm = config.cfm;
if (cfm && 0 < cfm.length) {
for (var i = 0, count = this.items.getCount(); i < count; i++) {
var it = this.items.get(0);
this.remove(it);
}
if (this.body) {
this.body.update("");
}
for (var i = 0, len = cfm.length; i < len; i++) {
var it = cfm[i], pos = it.pos;
var ct = this.createConditionFormat();
this.add(ct);
var posStr = ss.encodeDataRange({
minPos : {
x : pos.x,
y : pos.y
},
maxPos : {
x : pos.ex,
y : pos.ey
}
});
ct.rangeField.setValue(posStr);
ct.optionCombo.setValue(it.opt);
if ("empty" == it.opt) {
ct.targetField.disable();
} else {
ct.targetField.enable();
}
var opt = it.opt;
if ("gt" == opt || "lt" == opt || "eq" == opt || "ne" == opt) {
ct.numField.setValue(it.tgt);
} else {
ct.targetField.setValue(it.tgt);
}
ct.minField.setValue(it.min);
ct.maxField.setValue(it.max);
if ("bw" == opt || "nbw" == opt) {
ct.minField.show();
ct.maxField.show();
ct.targetField.hide();
ct.numField.hide();
} else if ("gt" == opt || "lt" == opt || "eq" == opt
|| "ne" == opt) {
ct.minField.hide();
ct.maxField.hide();
ct.targetField.hide();
ct.numField.show();
} else {
ct.minField.hide();
ct.maxField.hide();
ct.targetField.show();
ct.numField.hide();
}
if (it.color) {
ct.textCb.setValue("transparent" !== it.color);
var el = ct.textBox.getEl();
if (el) {
el.setStyle("background-color", it.color);
} else {
ct.textBox.style = "background-color:" + it.color + ";";
}
} else {
ct.textCb.setValue(false);
var el = ct.textBox.getEl();
if (el) {
el.setStyle("background-color", "transparent");
} else {
ct.textBox.style = "background-color:transparent;";
}
}
if (it.bgc) {
ct.backgroundCb.setValue("transparent" !== it.bgc);
var el = ct.backgroundBox.getEl();
if (el) {
el.setStyle("background-color", it.bgc);
} else {
ct.backgroundBox.style = "background-color:" + it.bgc
+ ";";
}
} else {
ct.backgroundCb.setValue(false);
var el = ct.backgroundBox.getEl();
if (el) {
el.setStyle("background-color", "transparent");
} else {
ct.backgroundBox.style = "background-color:transparent;";
}
}
}
if (1 == this.items.getCount()) {
}
this.show();
} else {
var count = this.items.getCount();
if (0 < count) {
for (var i = 1; i < count; i++) {
var it = this.items.get(1);
this.remove(it);
}
if (this.body) {
this.body.update("");
}
} else {
if (this.body) {
this.body.update("");
}
var ct = this.createConditionFormat();
this.add(ct);
}
this.initDataRange();
var str = this.getDataRangeStr();
var ct = this.items.get(0);
ct.rangeField.setValue(str);
ct.optionCombo.setValue("include");
ct.targetField.reset();
this.show();
}
}
});
Ext.ns("Ext.ss");
Ext.ss.FormulaDropList = Ext.extend(Ext.Container, {
width : 250,
height : 180,
layout : "fit",
initComponent : function() {
this.cls = this.cls || "";
this.cls += " x-spreadsheet-fromula-drop-list ";
this.renderTo = Ext.getBody();
var tpl = new Ext.XTemplate("
",
"",
"{formula}", "
", "");
this.store = Ext.ss.common.Mask.getFormulaStore();
this.view = new Ext.DataView({
cls : "x-spreadsheet-formula-listview",
store : this.store,
tpl : tpl,
autoScroll : true,
singleSelect : true,
overClass : "x-view-over",
itemSelector : "div.x-spreadsheet-formula-item"
});
this.items = [this.view];
this.detailsCt = new Ext.Container({
cls : "x-spreadsheet-formula-details",
hidden : true,
width : 250,
height : 220,
layout : "fit",
autoScroll : true,
renderTo : Ext.getBody()
});
Ext.ss.FormulaDropList.superclass.initComponent.call(this);
this.view.on("click", this.onNodeClick, this);
this.view.on("mouseenter", this.onMouseEnter, this);
this.on("hide", function() {
this.view.clearSelections();
this.detailsCt.hide();
}, this);
},
searchMatch : function(name, textCoverEl, textVal) {
var ss = this.spreadsheet, ds = ss.ds;
name = name.toUpperCase();
var details;
this.store.removeAll();
var nameRanges = ds.fileExtraInfo.nameRanges;
var data = ds.deepClone(Ext.ss.common.Mask.formulaData);
if (nameRanges) {
for (var i = 0, len = nameRanges.length; i < len; i++) {
var it = nameRanges[i];
data.unshift([
it.name,
"

"
+ it.name, it.coord, true]);
}
}
this.store.loadData(data);
this.store.filterBy(function(rec) {
var fname = rec.data.id;
fname = fname.toUpperCase();
if (0 == fname.indexOf(name)) {
if (!details) {
details = rec.data.details;
}
return true;
}
return false;
}, this);
if (0 < this.store.getCount()) {
var el = this.getEl();
var dEl = this.detailsCt.getEl();
this.detailsCt.show();
dEl.update(details);
this.show();
el.alignTo(textCoverEl);
dEl.alignTo(el, "tl-tr?");
} else {
this.hide();
}
},
onNodeClick : function(dataView, index, node) {
var rec = this.view.getRecord(node);
var formula = rec.data.id;
this.fireEvent("selectformula", formula, rec.data.isVar, this);
this.hide();
},
selectFormula : function() {
var recs = this.view.getSelectedRecords();
if (recs.length) {
var rec = recs[0];
var formula = rec.data.id;
this.fireEvent("selectformula", formula, rec.data.isVar,
this);
this.hide();
}
},
selectField : function() {
var recs = this.view.getSelectedRecords();
if (recs.length) {
var rec = recs[0];
var field = rec.data.dsd_field;
this.fireEvent("selectField", field, rec.data.isVar,
this);
this.hide();
}
},
onMouseEnter : function(dataView, index, node) {
var rec = dataView.getRecord(node);
var dEl = this.detailsCt.getEl();
if (dEl) {
dEl.update(rec.data.details);
}
},
selectDown : function() {
var indexs = this.view.getSelectedIndexes();
var index = 0;
if (0 < indexs.length) {
index = indexs[0];
index++;
}
var count = this.store.getCount() - 1;
if (index > count) {
index = count;
}
this.view.select(index);
var dEl = this.detailsCt.getEl();
if (dEl) {
var rec = this.store.getAt(index);
if (rec != null) {
dEl.update(rec.data.details);
}
}
},
selectUp : function() {
var indexs = this.view.getSelectedIndexes();
var index = this.store.getCount() - 1;
if (0 < indexs.length) {
index = indexs[0];
index--;
}
if (0 > index) {
index = 0;
}
this.view.select(index);
var dEl = this.detailsCt.getEl();
if (dEl) {
var rec = this.store.getAt(index);
if (rec != null) {
dEl.update(rec.data.details);
}
}
},
isSelected : function() {
var indexs = this.view.getSelectedIndexes();
return 0 < indexs.length;
}
});
/**定义字段列表*/
Ext.ns("Ext.ss");
Ext.ss.FieldDropList = Ext.extend(Ext.Container, {
width : 250,
height : 180,
layout : "fit",
initComponent : function() {
this.cls = this.cls || "";
this.cls += " x-spreadsheet-fromula-drop-list ";
this.renderTo = Ext.getBody();
var tpl = new Ext.XTemplate("
",
"",
"{dsd_field}", "
", "");
this.store = Ext.ss.common.Mask.getFieldStore();
this.view = new Ext.DataView({
cls : "x-spreadsheet-formula-listview",
store : this.store,
tpl : tpl,
autoScroll : true,
singleSelect : true,
overClass : "x-view-over",
itemSelector : "div.x-spreadsheet-formula-item"
});
this.items = [this.view];
this.detailsCt = new Ext.Container({
cls : "x-spreadsheet-formula-details",
hidden : true,
width : 250,
height : 220,
layout : "fit",
autoScroll : true,
renderTo : Ext.getBody()
});
Ext.ss.FieldDropList.superclass.initComponent.call(this);
this.view.on("click", this.onNodeClick, this);
this.view.on("mouseenter", this.onMouseEnter, this);
this.on("hide", function() {
this.view.clearSelections();
this.detailsCt.hide();
}, this);
},
searchMatch : function(name, textCoverEl, textVal) {
console.log(this.spreadsheet);
var ss = this.spreadsheet, ds = ss.ds;
name = name.toUpperCase();
var details;
this.store.removeAll();
var nameRanges = ds.fileExtraInfo.nameRanges;
var data = ds.deepClone(Ext.decode(FieldData.replace(/{/g,"[").replace(/}/,"]")));
if (nameRanges) {
for (var i = 0, len = nameRanges.length; i < len; i++) {
var it = nameRanges[i];
data.unshift([
it.name,
"

"
+ it.name, it.coord, true]);
}
}
this.store.loadData(data);
this.store.filterBy(function(rec) {
var fname = rec.data.dsd_field;
fname = fname.toUpperCase();
if (0 == fname.indexOf(name)) {
if (!details) {
details = rec.data.dsd_caption;
}
return true;
}
return false;
}, this);
if (0 < this.store.getCount()) {
var el = this.getEl();
var dEl = this.detailsCt.getEl();
this.detailsCt.show();
dEl.update(details);
this.show();
el.alignTo(textCoverEl);
dEl.alignTo(el, "tl-tr?");
} else {
this.hide();
}
},
/**选中一个字段*/
onNodeClick : function(dataView, index, node) {
var rec = this.view.getRecord(node);
var field =rec.data.dsd_field;
this.fireEvent("selectfield", field, rec.data.dsd_caption, this);
this.hide();
},
selectField : function() {
var recs = this.view.getSelectedRecords();
if (recs.length) {
var rec = recs[0];
var formula = rec.data.dsd_id;
this.fireEvent("selectfield", formula, rec.data.isVar,
this);
this.hide();
}
},
onMouseEnter : function(dataView, index, node) {
var rec = dataView.getRecord(node);
var dEl = this.detailsCt.getEl();
if (dEl) {
dEl.update(rec.data.dsd_caption);
}
},
selectDown : function() {
var indexs = this.view.getSelectedIndexes();
var index = 0;
if (0 < indexs.length) {
index = indexs[0];
index++;
}
var count = this.store.getCount() - 1;
if (index > count) {
index = count;
}
this.view.select(index);
var dEl = this.detailsCt.getEl();
if (dEl) {
var rec = this.store.getAt(index);
if (rec != null) {
dEl.update(rec.data.dsd_caption);
}
}
},
selectUp : function() {
var indexs = this.view.getSelectedIndexes();
var index = this.store.getCount() - 1;
if (0 < indexs.length) {
index = indexs[0];
index--;
}
if (0 > index) {
index = 0;
}
this.view.select(index);
var dEl = this.detailsCt.getEl();
if (dEl) {
var rec = this.store.getAt(index);
if (rec != null) {
dEl.update(rec.data.dsd_caption);
}
}
},
isSelected : function() {
var indexs = this.view.getSelectedIndexes();
return 0 < indexs.length;
}
});
//定义函数列表
Ext.ns("Ext.ss");
Ext.ss.FnDropList = Ext.extend(Ext.Container, {
width : 250,
height : 180,
layout : "fit",
initComponent : function() {
this.cls = this.cls || "";
this.cls += " x-spreadsheet-fromula-drop-list ";
this.renderTo = Ext.getBody();
var tpl = new Ext.XTemplate("
",
"",
"{ef_fullname}", "
", "");
this.store = Ext.ss.common.Mask.getFnStore();
this.view = new Ext.DataView({
cls : "x-spreadsheet-formula-listview",
store : this.store,
tpl : tpl,
autoScroll : true,
singleSelect : true,
overClass : "x-view-over",
itemSelector : "div.x-spreadsheet-formula-item"
});
this.items = [this.view];
this.detailsCt = new Ext.Container({
cls : "x-spreadsheet-formula-details",
hidden : true,
width : 250,
height : 220,
layout : "fit",
autoScroll : true,
renderTo : Ext.getBody()
});
Ext.ss.FnDropList.superclass.initComponent.call(this);
this.view.on("click", this.onNodeClick, this);
this.view.on("mouseenter", this.onMouseEnter, this);
this.on("hide", function() {
this.view.clearSelections();
this.detailsCt.hide();
}, this);
},
searchMatch : function(name, textCoverEl, textVal) {
var ss = this.spreadsheet, ds = ss.ds;
name = name.toUpperCase();
var details;
this.store.removeAll();
var nameRanges = ds.fileExtraInfo.nameRanges;
var data = ds.deepClone(Ext.decode(FnData.replace(/{/g,"[").replace(/}/,"]")));
if (nameRanges) {
for (var i = 0, len = nameRanges.length; i < len; i++) {
var it = nameRanges[i];
data.unshift([
it.name,
"

"
+ it.name, it.coord, true]);
}
}
this.store.loadData(data);
this.store.filterBy(function(rec) {
var fname = rec.data.ef_fullname;
fname = fname.toUpperCase();
if (0 == fname.indexOf(name)) {
if (!details) {
details = rec.data.ef_description;
}
return true;
}
return false;
}, this);
if (0 < this.store.getCount()) {
var el = this.getEl();
var dEl = this.detailsCt.getEl();
this.detailsCt.show();
dEl.update(details);
this.show();
el.alignTo(textCoverEl);
dEl.alignTo(el, "tl-tr?");
} else {
this.hide();
}
},
/**选中一个字段*/
onNodeClick : function(dataView, index, node) {
var rec = this.view.getRecord(node);
var fn =rec.data.ef_fullname;
this.fireEvent("selectfn", fn, rec.data.ef_description, this);
this.hide();
},
selectFn : function() {
var recs = this.view.getSelectedRecords();
if (recs.length) {
var rec = recs[0];
var formula = rec.data.dsd_id;
this.fireEvent("selectfield", formula, rec.data.isVar,
this);
this.hide();
}
},
onMouseEnter : function(dataView, index, node) {
var rec = dataView.getRecord(node);
var dEl = this.detailsCt.getEl();
if (dEl) {
dEl.update(rec.data.ef_description);
}
},
selectDown : function() {
var indexs = this.view.getSelectedIndexes();
var index = 0;
if (0 < indexs.length) {
index = indexs[0];
index++;
}
var count = this.store.getCount() - 1;
if (index > count) {
index = count;
}
this.view.select(index);
var dEl = this.detailsCt.getEl();
if (dEl) {
var rec = this.store.getAt(index);
if (rec != null) {
dEl.update(rec.data.ef_description);
}
}
},
selectUp : function() {
var indexs = this.view.getSelectedIndexes();
var index = this.store.getCount() - 1;
if (0 < indexs.length) {
index = indexs[0];
index--;
}
if (0 > index) {
index = 0;
}
this.view.select(index);
var dEl = this.detailsCt.getEl();
if (dEl) {
var rec = this.store.getAt(index);
if (rec != null) {
dEl.update(rec.data.ef_description);
}
}
},
isSelected : function() {
var indexs = this.view.getSelectedIndexes();
return 0 < indexs.length;
}
});
Ext.ns("Ext.ss.company");
Ext.ss.company.FormulaDropList = Ext.extend(Ext.ss.FormulaDropList, {
searchMatch : function(name, textCoverEl, partVal) {
if (/^['"]/.test(name)) {
if (/ISIF\([^\(\)]*$/i.test(partVal)) {
name = name.slice(1, name.length);
if (name && 1 < name.length) {
this.searchCompanyMatch(name, textCoverEl)
}
return
}
}
Ext.ss.company.FormulaDropList.superclass.searchMatch.apply(
this, arguments)
},
searchCompanyMatch : function(name, textCoverEl) {
if (5 <= name.length) {
feyaSoft.api.JsonP.searchCompanyName(name, function(data,
response) {
if (response && 200 == response.status) {
var data = response.data;
var items = data.items;
var len = items.length;
if (15 < len) {
len = 15
}
var companies = [];
for (var i = 0; i < len; i++) {
var it = items[i];
var id = Number(it.company);
if (Ext.isNumber(id)) {
id = '"' + id + '"'
}
companies
.push([id, it.name, null, true])
}
this.store.removeAll();
this.store.loadData(companies);
name = name.toUpperCase();
this.store.filterBy(function(rec) {
var fname = rec.data.formula;
fname = fname.toUpperCase();
if (0 == fname.indexOf(name)) {
return true
}
return false
}, this);
if (0 < this.store.getCount()) {
var el = this.getEl();
this.show();
el.alignTo(textCoverEl)
} else {
this.hide()
}
}
}, this)
}
}
});
Ext.ns("Ext.ss.field");
/**创建FieldList*/
Ext.ss.field.FieldDropList = Ext.extend(Ext.ss.FieldDropList, {
searchMatch : function(name, textCoverEl, partVal) {
if (/^['"]/.test(name)) {
if (/ISIF\([^\(\)]*$/i.test(partVal)) {
name = name.slice(1, name.length);
if (name && 1 < name.length) {
this.searchCompanyMatch(name, textCoverEl)
}
return
}
}
Ext.ss.field.FieldDropList.superclass.searchMatch.apply(
this, arguments)
},
searchCompanyMatch : function(name, textCoverEl) {
if (5 <= name.length) {
feyaSoft.api.JsonP.searchCompanyName(name, function(data,
response) {
if (response && 200 == response.status) {
var data = response.data;
var items = data.items;
var len = items.length;
if (15 < len) {
len = 15
}
var companies = [];
for (var i = 0; i < len; i++) {
var it = items[i];
var id = Number(it.company);
if (Ext.isNumber(id)) {
id = '"' + id + '"'
}
companies
.push([id, it.name, null, true])
}
this.store.removeAll();
this.store.loadData(companies);
name = name.toUpperCase();
this.store.filterBy(function(rec) {
var fname = rec.data.formula;
fname = fname.toUpperCase();
if (0 == fname.indexOf(name)) {
return true
}
return false
}, this);
if (0 < this.store.getCount()) {
var el = this.getEl();
this.show();
el.alignTo(textCoverEl)
} else {
this.hide()
}
}
}, this)
}
}
});
/**创建fnList*/
Ext.ns("Ext.ss.fn");
Ext.ss.fn.FnDropList = Ext.extend(Ext.ss.FnDropList, {
searchMatch : function(name, textCoverEl, partVal) {
if (/^['"]/.test(name)) {
if (/ISIF\([^\(\)]*$/i.test(partVal)) {
name = name.slice(1, name.length);
if (name && 1 < name.length) {
this.searchCompanyMatch(name, textCoverEl)
}
return
}
}
Ext.ss.fn.FnDropList.superclass.searchMatch.apply(
this, arguments)
},
searchCompanyMatch : function(name, textCoverEl) {
if (5 <= name.length) {
feyaSoft.api.JsonP.searchCompanyName(name, function(data,
response) {
if (response && 200 == response.status) {
var data = response.data;
var items = data.items;
var len = items.length;
if (15 < len) {
len = 15
}
var companies = [];
for (var i = 0; i < len; i++) {
var it = items[i];
var id = Number(it.company);
if (Ext.isNumber(id)) {
id = '"' + id + '"'
}
companies
.push([id, it.name, null, true])
}
this.store.removeAll();
this.store.loadData(companies);
name = name.toUpperCase();
this.store.filterBy(function(rec) {
var fname = rec.data.formula;
fname = fname.toUpperCase();
if (0 == fname.indexOf(name)) {
return true
}
return false
}, this);
if (0 < this.store.getCount()) {
var el = this.getEl();
this.show();
el.alignTo(textCoverEl)
} else {
this.hide()
}
}
}, this)
}
}
});
Ext.ns("Ext.ss");
Ext.ss.StatusBar = Ext.extend(Ext.ux.StatusBar, {
initComponent : function() {
this.cls += " ";
delete this.statusAlign;
Ext.ss.StatusBar.superclass.initComponent.call(this);
},
afterRender : function() {
Ext.ux.StatusBar.superclass.afterRender.call(this);
this.currIconCls = this.iconCls || this.defaultIconCls;
this.statusEl = new Ext.Toolbar.TextItem({
cls : "x-status-text " + (this.currIconCls || ""),
text : this.text || this.defaultText || ""
});
this.demoEl = new Ext.Toolbar.TextItem({
text : "
优软科技 |
技术支持"
});
this.insert(0, this.statusEl);
this.insert(0, "->");
this.insert(1, this.demoEl);
this.doLayout();
}
});
Ext.ns("Ext.ss");
Ext.ss.DoList = Ext.extend(Ext.menu.Menu, {
minWidth : 200,
maxHeight : 300,
scrollerOffset : 18,
defaultDisplay : " ",
plain : true,
onRender : function(ct, position) {
if (!ct) {
ct = Ext.getBody();
}
var dh = {
id : this.getId(),
cls : "x-menu " + (this.floating ? "x-menu-floating x-layer " : "")
+ (this.cls || "") + (this.plain ? " x-menu-plain" : "")
+ (this.showSeparator ? "" : " x-menu-nosep"),
style : this.style,
cn : [{
tag : "div",
cls : "x-spreadsheet-dolist",
cn : [{
tag : "a",
cls : "x-menu-focus",
href : "#",
onclick : "return false;",
tabIndex : "-1"
}, {
tag : "ul",
cls : "x-menu-list"
}]
}, {
tag : "span",
cls : "x-menu-sep",
html : " "
}, {
tag : "div",
cls : "x-spreadsheet-dolist-foot",
html : this.defaultDisplay
}]
};
if (this.floating) {
this.el = new Ext.Layer({
shadow : this.shadow,
dh : dh,
constrain : false,
parentEl : ct,
zindex : this.zIndex
});
} else {
this.el = ct.createChild(dh);
}
Ext.menu.Menu.superclass.onRender.call(this, ct, position);
this.focusEl = this.el.child("a.x-menu-focus");
this.list = this.el.child("div.x-spreadsheet-dolist");
this.ul = this.el.child("ul.x-menu-list");
this.foot = this.el.child("div.x-spreadsheet-dolist-foot");
this.mon(this.ul, {
scope : this,
click : this.onClick,
mouseover : this.onMouseOver,
mouseout : this.onMouseOut
});
},
onMouseOver : function(e) {
var t = this.findTargetItem(e);
if (t) {
var index = this.items.indexOf(t);
var i;
for (i = 0; i <= index; i++) {
var it = this.items.get(i);
if (it.canActivate && !it.disabled) {
this.setActiveItem(it, true);
}
}
for (var len = this.items.getCount(); i < len; i++) {
var it = this.items.get(i);
it.deactivate();
}
this.activeCount = index + 1;
this.fireEvent("mouseover", this, e, t);
} else {
this.fireEvent("mouseover", this, e);
}
this.over = true;
},
deactiveAllItems : function() {
for (var i = 0, len = this.items.getCount(); i < len; i++) {
var it = this.items.get(i);
it.deactivate();
}
this.foot.dom.innerHTML = this.defaultDisplay;
},
onMouseOut : function(e) {
var t = this.findTargetItem(e);
this.over = false;
this.fireEvent("mouseout", this, e, t);
},
setActiveItem : function(item, autoExpand) {
if (item != this.activeItem) {
if ((this.activeItem = item).isFormField) {
item.focus();
} else {
item.activate(autoExpand);
}
} else if (autoExpand) {
item.expandMenu();
}
},
show : function(el, pos, parentMenu) {
if (this.floating) {
this.parentMenu = parentMenu;
if (!this.el) {
this.render();
this.doLayout(false, true);
}
this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign,
this.defaultOffsets), parentMenu);
} else {
Ext.menu.Menu.superclass.show.call(this);
}
this.deactiveAllItems();
},
showAt : function(xy, parentMenu) {
if (this.fireEvent("beforeshow", this) !== false) {
this.parentMenu = parentMenu;
if (!this.el) {
this.render();
}
if (this.enableScrolling) {
this.el.setXY(xy);
this.constrainScroll(xy[1]);
xy = [this.el.adjustForConstraints(xy)[0], xy[1]];
} else {
xy = this.el.adjustForConstraints(xy);
}
this.el.setStyle("width", "");
if (this.el.getWidth() < this.minWidth) {
this.el.setWidth(this.minWidth);
}
this.el.setXY(xy);
this.el.show();
Ext.menu.Menu.superclass.onShow.call(this);
if (Ext.isIE) {
this.fireEvent("autosize", this);
if (!Ext.isIE8) {
this.el.repaint();
}
}
this.hidden = false;
this.focus();
this.fireEvent("show", this);
}
},
constrainScroll : function(y) {
var max, full = this.ul.setHeight("auto").getHeight(), returnY = y, normalY, parentEl, scrollTop, viewHeight;
if (this.floating) {
parentEl = Ext.fly(this.el.dom.parentNode);
scrollTop = parentEl.getScroll().top;
viewHeight = parentEl.getViewSize().height;
normalY = y - scrollTop;
max = this.maxHeight ? this.maxHeight : viewHeight - normalY;
if (full > viewHeight) {
max = viewHeight;
returnY = y - normalY;
} else if (max < full) {
returnY = y - (full - max);
max = full;
}
} else {
max = this.getHeight();
}
if (this.maxHeight) {
max = Math.min(this.maxHeight, max);
}
if (full > max && max > 0) {
this.activeMax = max - this.scrollerHeight * 2
- this.el.getFrameWidth("tb")
- Ext.num(this.el.shadowOffset, 0);
this.list.setHeight(this.activeMax);
this.el.select(".x-menu-scroller").setDisplayed("none");
} else {
this.list.setHeight(full);
this.el.select(".x-menu-scroller").setDisplayed("none");
}
this.ul.dom.scrollTop = 0;
return returnY;
}
});
Ext.ns("Ext.ss");
Ext.ss.ChartManager = function(config) {
Ext.apply(this, config);
Ext.ss.ChartManager.superclass.constructor.call(this, {});
this.changedCharts = {};
this.addEvents("beforeselectionchange");
this.on("beforeselectionchange", this.onBeforeSelectionChangeFn, this);
this.initContextMenu();
var ds = this.spreadsheet.ds;
ds.on("afterdatachange", this.afterDataChange, this);
this.on("syncchart", this.onSyncChart, this, {
buffer : 100
});
};
Ext.extend(Ext.ss.ChartManager, Ext.util.Observable, {
afterDataChange : function(x, y, sheetIndex, ds) {
var ss = this.spreadsheet;
var activeSheet = ds.activeSheet;
var asheet = ds.sheets[activeSheet];
asheet.chartSet = asheet.chartSet || {};
var chartSet = asheet.chartSet;
var changed = false;
for (var p in chartSet) {
var chart = chartSet[p];
var setting = chart.setting;
var span = chart.span;
if (span) {
for (var i = 0, len = span.length; i < len; i++) {
var it = span[i];
if (activeSheet == it.sheetIndex && it.x <= x && x <= it.ex
&& it.y <= y && y <= it.ey) {
changed = true;
this.changedCharts[p] = chart;
}
}
}
}
if (changed) {
this.fireEvent("syncchart", this);
}
},
onSyncChart : function() {
var changed = false;
var ss = this.spreadsheet, ds = ss.ds;
for (var p in this.changedCharts) {
if (this.changedCharts.hasOwnProperty(p)) {
changed = true;
var chart = this.changedCharts[p];
var setting = chart.setting;
var span = chart.span;
setting.data = ss.combineRanges(chart.span, "y");
this.generateChart(setting, chart.type, chart.span,
chart.chartEl);
}
}
if (changed) {
ds.saveChanges();
}
this.changedCharts = {};
},
deselectChart : function() {
var sm = this.spreadsheet.sm;
var cEl = this.selectedChartEl;
if (cEl) {
if (cEl.span) {
sm.showDataRangeBorder(cEl.span);
}
cEl.removeClass("x-spreadsheet-chart-element-selected");
delete this.selectedChartEl;
sm.fireEvent("renderborder");
}
},
onBeforeSelectionChangeFn : function(os, ns) {
var sm = this.spreadsheet.sm;
if (os && os.span) {
sm.showDataRangeBorder(os.span);
}
if (ns && ns.span) {
sm.showDataRangeBorder(ns.span, true);
}
},
initContextMenu : function() {
this.deleteItem = new Ext.menu.Item({
iconCls : "icon_delete",
text : feyaSoft.lang.common['delete'],
handler : this.onDeleteChartFn,
scope : this
});
this.settingItem = new Ext.menu.Item({
iconCls : "editItem",
text : feyaSoft.lang.common.edit,
handler : this.onEditChartFn,
scope : this
});
this.downloadItem = new Ext.menu.Item({
iconCls : "save",
text : feyaSoft.lang.common.saveAsImage,
handler : this.onSaveAsImageFn,
scope : this
});
this.cmenu = new Ext.menu.Menu({
items : [this.settingItem, this.downloadItem, "-",
this.deleteItem]
});
this.cmenu = Ext.menu.MenuMgr.get(this.cmenu);
},
addChart : function(chartId, setting, type, span, existedChartEl) {
var ss = this.spreadsheet;
var ds = ss.ds;
var chartEl = existedChartEl;
if (!chartEl) {
if (false == Ext.type(chartId)) {
chartEl = Ext.DomHelper.append(ss.sctInner,
"",
true);
} else {
chartEl = Ext.DomHelper
.append(
ss.sctInner,
"",
true);
}
chartEl.center(ss.sct);
}
var obj = this.initChartEl(setting, chartEl, type, span);
var asheet = ds.sheets[ds.activeSheet];
asheet.chartSet = asheet.chartSet || {};
asheet.chartSet[chartEl.id] = obj;
return obj;
},
initChartEl : function(setting, chartEl, type, span, flag) {
var ss = this.spreadsheet;
var sm = ss.sm;
if ("image" == type) {
this.generateImage(setting, chartEl);
} else if ("gadgets" == type) {
this.generateGadgets(setting, chartEl);
} else if ("chart" == type) {
if (!span) {
span = sm.getMinMaxFromStartEnd(sm.selectedStart,
sm.selectedEnd);
span = [span];
}
chartEl.update("");
this.generateChart(setting, type, span, chartEl);
}
var linkEl = chartEl.child("a");
if (!linkEl) {
linkEl = Ext.DomHelper
.append(
chartEl.dom,
"",
true);
}
chartEl.on("mousedown", this.onChartMouseDownFn, {
sender : this,
chartEl : chartEl
});
linkEl.on("keydown", this.onChartKeydown, {
sender : this,
chartEl : chartEl
});
chartEl.on("dblclick", function(e) {
e.stopEvent();
});
chartEl.on("contextmenu", this.onChartContextMenuFn, {
sender : this,
chartEl : chartEl
});
if (!flag) {
chartEl.dd = new Ext.dd.DD(chartEl.id, "ss-group", {
onMouseDown : function(e) {
e.stopEvent();
},
onDrag : function(e) {
e.stopEvent();
},
onMouseUp : function(e) {
e.stopEvent();
}
});
var ds = this.spreadsheet.ds;
var sm = this.spreadsheet.sm;
chartEl.dd.endDrag = function() {
ds.saveActiveSheet(true);
ds.saveExtraInfo();
};
chartEl.rz = new Ext.Resizable(chartEl.id, {
handles : "all",
pinned : false,
transparent : true
});
chartEl.rz.on("resize", function() {
ds.saveActiveSheet(true);
ds.saveExtraInfo();
}, this);
}
return {
chartEl : chartEl,
span : span,
type : type,
setting : Ext.apply({}, setting)
};
},
generateData : function(xflag, span) {
var ss = this.spreadsheet;
var ds = ss.ds;
var fields = ["x"], data = [];
var minx = span.minPos.x, miny = span.minPos.y, maxx = span.maxPos.x, maxy = span.maxPos.y;
var tl = ds.getCell(span.minPos.x, span.minPos.y);
var aflag = false, xaxis, yaxis;
if (!tl.data || !Number(tl.data)) {
xaxis = minx;
yaxis = miny;
minx++;
miny++;
aflag = true;
}
if ("y" == xflag) {
for (var j = minx; j <= maxx; j++) {
fields.push(j.toString());
}
var index = 0;
for (var i = miny; i <= maxy; i++) {
var it = {
x : ++index
};
for (var j = minx; j <= maxx; j++) {
it[j] = parseInt(ds.getCell(j, i).data);
}
data.push(it);
}
} else {
for (var j = miny; j <= maxy; j++) {
fields.push(j.toString());
}
var index = 0;
for (var i = minx; i <= maxx; i++) {
var it = {
x : ++index
};
for (var j = miny; j <= maxy; j++) {
it[j] = parseInt(ds.getCell(i, j).data);
}
data.push(it);
}
}
return {
fields : fields,
data : data
};
},
transferSetting2Params : function(setting) {
var dataMatrix = setting.data;
var params = {}, category = [], series = [], label = [], dataObj = {};
var needNumber = this.needNumberInXAxis(setting.type);
if ("col" == setting.series_position) {
var matrix = [];
if (Ext.isObject(dataMatrix)) {
for (var p in dataMatrix) {
var it = dataMatrix[p];
var arr = [];
for (var q in it) {
arr.push(it[q]);
}
matrix.push(arr);
}
dataMatrix = matrix;
}
var i = 0, j = 0, len = dataMatrix.length, count = dataMatrix[0].length;
if (setting.col_label) {
i++;
}
if (setting.row_label) {
j++;
}
if (setting.col_label) {
var col = dataMatrix[0];
for (var k = j; k < count; k++) {
label.push(col[k]);
}
dataObj.label = label;
}
if (setting.row_label) {
for (var k = i; k < len; k++) {
category.push(dataMatrix[k][0]);
}
dataObj.category = category;
}
for (; i < len; i++) {
var col = dataMatrix[i];
var arr = [];
for (var k = j; k < count; k++) {
arr.push(col[k]);
}
series.push(arr);
}
dataObj.series = series;
} else {
var i = 0, j = 0, len = dataMatrix.length, count = dataMatrix[0].length;
if (setting.col_label) {
i++;
}
if (setting.row_label) {
j++;
}
if (setting.col_label) {
var col = dataMatrix[0];
for (var k = j; k < count; k++) {
category.push(col[k]);
}
dataObj.category = category;
}
if (setting.row_label) {
for (var k = i; k < len; k++) {
label.push(dataMatrix[k][0]);
}
dataObj.label = label;
}
for (; j < count; j++) {
var arr = [];
for (var k = i; k < len; k++) {
arr.push(dataMatrix[k][j]);
}
series.push(arr);
}
dataObj.series = series;
}
params.title = setting.title || " ";
if (setting.subtitle) {
if (params.title) {
params.title += " - " + setting.subtitle;
} else {
params.title = setting.subtitle;
}
}
if (setting.x_field_title) {
params.x_field_title = setting.x_field_title;
}
if (setting.y_field_title) {
params.y_field_title = setting.y_field_title;
}
if (setting.display_legend_pos) {
params.display_legend_pos = setting.display_legend_pos;
}
if (setting.look3D) {
params.look3D = setting.look3D;
}
params.fontfamily = setting.fontfamily || "Arial";
params.fontsize = setting.fontsize || "12";
params.fontcolor = setting.fontcolor || "000000";
params.fontstyle = setting.fontstyle || "PLAIN";
params.data = Ext.encode(dataObj);
params.uid = Ext.id() + "-" + (new Date).format("YmdHis");
return params;
},
needNumberInXAxis : function(type) {
if ("line" == type || "scatter" == type || "bubble" == type
|| "stock" == type) {
return true;
}
return false;
},
getURLbyType : function(type, subtype) {
var ssUrl = feyaSoft.home.CONST.spreadSheetUrl;
var URL = ssUrl.barChart;
if ("column" == type) {
URL = URL + "?subtype=" + subtype;
} else if ("bar" == type) {
URL = URL + "?type=horizontal&subtype=" + subtype;
} else if ("pie" == type) {
URL = ssUrl.pieChart + "?subtype=" + subtype;
} else if ("area" == type) {
URL = ssUrl.areaChart + "?subtype=" + subtype;
} else if ("line" == type) {
URL = ssUrl.lineChart + "?subtype=" + subtype;
} else if ("scatter" == type) {
URL = ssUrl.scatterChart + "?subtype=" + subtype;
} else if ("bubble" == type) {
URL = ssUrl.bubbleChart + "?subtype=" + subtype;
} else if ("stock" == type) {
URL = ssUrl.tseriesChart + "?subtype=" + subtype;
} else if ("columnline" == type) {
URL = ssUrl.columnline + "?subtype=" + subtype;
}
return URL;
},
generateChart : function(setting, type, span, chartEl) {
chartEl.setting = setting;
chartEl.span = span;
var params = this.transferSetting2Params(setting);
Ext.Ajax.request({
timeout : 300000,
url : this.getURLbyType(setting.type, setting.subtype),
params : params,
success : function(response, option) {
var json = Ext.decode(response.responseText);
chartEl.chartImagePath = json.path;
chartEl
.child(".inner")
.update("

");
},
failure : function(response, option) {
},
scope : this
});
},
onChartMouseDownFn : function(e) {
e.stopEvent();
var sender = this.sender;
if (sender.selectedChartEl) {
sender.selectedChartEl
.removeClass("x-spreadsheet-chart-element-selected");
}
this.chartEl.addClass("x-spreadsheet-chart-element-selected");
sender.fireEvent("beforeselectionchange", sender.selectedChartEl,
this.chartEl);
sender.selectedChartEl = this.chartEl;
var linkEl = this.chartEl.child("a");
linkEl.focus(500);
},
resetDataRangeBorder : function() {
var sm = this.spreadsheet.sm;
var cEl = this.selectedChartEl;
if (cEl) {
cEl.removeClass("x-spreadsheet-chart-element-selected");
if (cEl.span) {
sm.showDataRangeBorder(cEl.span);
}
delete this.selectedChartEl;
sm.fireEvent("renderborder");
}
},
getChartConfig : function(index, chartIndex) {
var ss = this.spreadsheet;
var ds = ss.ds;
var asheet = ds.sheets[index];
var chart = asheet.chartSet[chartIndex];
var cEl = chart.chartEl;
var setting = chart.setting;
var o = {
setting : setting,
chartImagePath : cEl.chartImagePath,
span : ds.deepClone(chart.span),
type : chart.type
};
if (cEl.isVisible()) {
Ext.apply(o, {
top : cEl.getTop(),
left : cEl.getLeft(),
width : cEl.getWidth(),
height : cEl.getHeight()
});
} else {
Ext.apply(o, cEl.cachePos);
}
return o;
},
getCharts : function(index) {
var ss = this.spreadsheet;
var ds = ss.ds;
var asheet = ds.sheets[index];
var arr = [];
for (var p in asheet.chartSet) {
arr.push(this.getChartConfig(index, p));
}
return arr;
},
generateCharts : function(charts) {
var ss = this.spreadsheet;
var ds = ss.ds;
var asheet = ds.sheets[ds.activeSheet];
asheet.chartSet = {};
for (var i = 0, len = charts.length; i < len; i++) {
var chart = charts[i];
this.generateChartByConfig(chart);
}
},
generateChartByConfig : function(chartConfig) {
var obj = this.addChart(chartConfig.chartId, chartConfig.setting,
chartConfig.type, chartConfig.span);
var chartEl = obj.chartEl, parentEl = chartEl.parent();
chartEl.setTop(chartConfig.top - parentEl.getTop());
chartEl.setLeft(chartConfig.left - parentEl.getLeft());
chartEl.setWidth(chartConfig.width);
chartEl.setHeight(chartConfig.height);
},
onChartContextMenuFn : function(e) {
e.stopEvent();
var chartEl = this.chartEl;
var sender = this.sender;
sender.cmenu.chartEl = chartEl;
var ftNode = chartEl.dom.firstChild;
if (ftNode.tagName.toLowerCase() == "img") {
sender.downloadItem.setDisabled(true);
sender.settingItem.setDisabled(true);
} else {
sender.downloadItem.setDisabled(false);
sender.settingItem.setDisabled(false);
}
sender.cmenu.showAt(e.getXY());
},
onDeleteChartFn : function(item) {
var cmenu = item.parentMenu;
var chartEl = cmenu.chartEl;
var ss = this.spreadsheet;
var ds = ss.ds, sm = ss.sm;
var og = {
action : "delete-chart",
type : "undo",
sheetIndex : ds.activeSheet,
chartId : chartEl.id,
chartConfig : this.getChartConfig(ds.activeSheet, chartEl.id)
};
var md = {
action : "delete-chart",
type : "redo",
sheetIndex : ds.activeSheet,
chartId : chartEl.id
};
ds.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
ds.trace(feyaSoft.ss.lang.deletePicture);
this.deleteChartById(ds.activeSheet, chartEl.id);
},
deleteChartById : function(sheetIndex, chartId) {
var ss = this.spreadsheet;
var sm = ss.sm;
var ds = ss.ds;
this.fireEvent("beforeselectionchange", this.selectedChartEl);
var asheet = ds.sheets[ds.activeSheet];
var chartObj = asheet.chartSet[chartId];
chartObj.chartEl.remove();
delete asheet.chartSet[chartId];
delete this.selectedChartEl;
sm.fireEvent("renderborder");
ds.saveActiveSheet(true);
ds.saveExtraInfo();
},
onEditChartFn : function(item) {
var ss = this.spreadsheet;
var ds = ss.ds;
var cmenu = item.parentMenu;
var chartEl = cmenu.chartEl;
var asheet = ds.sheets[ds.activeSheet];
ss.chartSelector.popup(asheet.chartSet[chartEl.id], chartEl);
},
onSaveAsImageFn : function(item) {
var cmenu = item.parentMenu;
var chartEl = cmenu.chartEl;
window.open(chartEl.chartImagePath, "_blank");
},
sysnChartPos : function(fr, sr, ofr, osr) {
var ss = this.spreadsheet;
var ds = ss.ds;
var asheet = ds.sheets[ds.activeSheet];
var offsetx, offsety;
var flagx = ofr.col.end > fr.col.end ? 1 : -1;
var flagy = ofr.row.end > fr.row.end ? 1 : -1;
if (0 > flagx) {
offsetx = flagx * ds.getWidth(ofr.col.end + 1, fr.col.end);
} else {
offsetx = flagx * ds.getWidth(fr.col.end + 1, ofr.col.end);
}
if (0 > flagy) {
offsety = flagy * ds.getHeight(ofr.row.end + 1, fr.row.end);
} else {
offsety = flagy * ds.getHeight(fr.row.end + 1, ofr.row.end);
}
var sl = ss.sctInner.getLeft();
var st = ss.sctInner.getTop();
for (var p in asheet.chartSet) {
var chart = asheet.chartSet[p];
var cEl = chart.chartEl;
var cl = cEl.getLeft();
var ct = cEl.getTop();
var l = cl - sl + offsetx;
var t = ct - st + offsety;
this.splitChart(chart, 0 > t, 0 > l);
cEl.setLeft(l);
cEl.setTop(t);
}
},
splitChart : function(chart, yflag, xflag) {
var ss = this.spreadsheet;
if (yflag) {
}
if (xflag) {
}
if (yflag && xflag) {
}
},
displayCharts : function(index, display) {
var ss = this.spreadsheet;
var ds = ss.ds;
var sheets = ds.sheets;
var charts = sheets[index].chartSet;
for (var p in charts) {
var cEl = charts[p].chartEl;
cEl.cachePos = {
left : cEl.getLeft(),
top : cEl.getTop(),
width : cEl.getWidth(),
height : cEl.getHeight()
};
cEl.dom.style.display = display || "";
}
},
cleanCharts : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sheets = ds.sheets;
var charts = sheets[ds.activeSheet].chartSet;
for (var p in charts) {
var cEl = charts[p].chartEl;
cEl.remove();
}
},
generateImage : function(setting, iEl) {
iEl.dom.innerHTML = "

";
return iEl;
},
generateGadgets : function(setting, gEl) {
var url = encodeURIComponent(setting.script);
gEl.dom.innerHTML = "
";
return gEl;
},
onChartKeydown : function(e) {
var me = this.sender;
e.stopEvent();
var key = e.getKey();
if (e.DELETE == key) {
me.onDeleteChartFn({
parentMenu : {
chartEl : this.chartEl
}
});
}
}
});
Ext.ns("Ext.ss.menu");
Ext.ss.menu.ContextMenu = function(config) {
Ext.apply(this, config);
var lan_ss = feyaSoft.ss.lang;
this.nameRangeItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.markRange,
handler : this.nameSelectionRange,
scope : this
});
this.spItem = new Ext.menu.Item({
iconCls : "icon_ss_split",
text : feyaSoft.ss.lang.splitGrid,
handler : this.onSplitGridFn,
scope : this
});
this.fzItem = new Ext.menu.Item({
iconCls : "icon_fz",
text : feyaSoft.ss.lang.freezeGrid,
handler : this.onFreezeFn,
scope : this
});
this.cutItem = new Ext.menu.Item({
iconCls : "icon_cut",
text : feyaSoft.lang.common.cut,
handler : this.onCutFn,
scope : this
});
this.copyItem = new Ext.menu.Item({
iconCls : "icon_copy",
text : feyaSoft.lang.common.copy,
handler : this.onCopyFn,
scope : this
});
this.pasteItem = new Ext.menu.Item({
iconCls : "icon_paste",
text : feyaSoft.lang.common.paste,
handler : this.onPasteFn,
scope : this
});
this.commentAddItem = new Ext.menu.Item({
iconCls : "icon_comment_add",
text : feyaSoft.lang.common.newComment,
handler : this.onAddCommentFn,
scope : this
});
this.commentEditItem = new Ext.menu.Item({
iconCls : "icon_comment_edit",
text : feyaSoft.lang.common.editComment,
handler : this.onEditCommentFn,
scope : this
});
this.commentDeleteItem = new Ext.menu.Item({
iconCls : "icon_comment_delete",
text : feyaSoft.word.lang.delete_comment,
handler : this.onDeleteCommentFn,
scope : this
});
this.combineItem = new Ext.menu.Item({
iconCls : "icon_combine_cell",
text : feyaSoft.ss.lang.combineCells,
handler : this.onCombineFn,
scope : this
});
this.splitItem = new Ext.menu.Item({
iconCls : "icon_split_cell",
text : feyaSoft.ss.lang.splitCell,
handler : this.onSplitFn,
scope : this
});
this.clearItem = new Ext.menu.Item({
iconCls : "icon_ss_clear",
text : feyaSoft.ss.lang.clearSelection,
handler : this.onClearContentFn,
scope : this
});
this.removeFormatItem = new Ext.menu.Item({
iconCls : "icon_remove_format",
text : lan_ss.remove_format,
handler : this.onRemoveFormatFn,
scope : this
});
this.insertItem = new Ext.menu.Item({
text : feyaSoft.lang.common.insert,
handler : this.onInsertFn,
scope : this
});
this.insertRangeItem = new Ext.menu.Item({
text : feyaSoft.lang.common.insert,
menu : [{
iconCls : "icon_insert_row_above",
text : lan_ss.insertRowAbove,
handler : function() {
this.spreadsheet.toolbar.onInsertRowAboveFn();
},
scope : this
}, {
iconCls : "icon_insert_row_below",
text : lan_ss.insertRowBelow,
handler : function() {
this.spreadsheet.toolbar.onInsertRowBelowFn();
},
scope : this
}, {
iconCls : "icon_insert_col_before",
text : lan_ss.insertColBefore,
handler : function() {
this.spreadsheet.toolbar.onInsertColBeforeFn();
},
scope : this
}, {
iconCls : "icon_insert_col_after",
text : lan_ss.insertColAfter,
handler : function() {
this.spreadsheet.toolbar.onInsertColAfterFn();
},
scope : this
}]
});
this.deleteItem = new Ext.menu.Item({
iconCls : "icon_delete",
text : feyaSoft.lang.common['delete'],
handler : this.onDeleteFn,
scope : this
});
this.colWidthField = new Ext.form.NumberField({
xtype : "numberfield",
emptyText : "Enter a number(> 0)",
allowBlank : false,
enableKeyEvents : true,
listeners : {
keydown : {
fn : this.onColWidthFn,
scope : this
}
}
});
this.colWidthItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.columnWidth,
menu : {
items : [this.colWidthField]
}
});
this.rowHeightField = new Ext.form.NumberField({
emptyText : "Enter a number(> 0)",
allowBlank : false,
enableKeyEvents : true,
listeners : {
keydown : {
fn : this.onRowHeightFn,
scope : this
}
}
});
this.rowHeightItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.rowHeight,
menu : {
items : [this.rowHeightField]
}
});
this.hideItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.hideRow,
handler : this.onHideFn,
scope : this
});
this.unhideItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.unhideRow,
handler : this.onUnhideFn,
scope : this
});
this.insertIncellImageItem = new Ext.menu.Item({
iconCls : "icon_insert_image",
text : feyaSoft.ss.lang.insertCellImage,
menu : {
items : [{
iconCls : "icon_insert_image_open",
text : feyaSoft.ss.lang.selectImage,
handler : this.onInsertIncellImageByOpenFn,
scope : this
}, {
iconCls : "icon_insert_image_link",
text : feyaSoft.ss.lang.linkImage,
menu : {
items : [{
xtype : "textarea",
width : 300,
height : 150,
emptyText : feyaSoft.word.lang.insert_image_url,
allowBlank : false,
enableKeyEvents : true,
listeners : {
keydown : {
fn : this.onInsertIncellImageByLinkFn,
scope : this
}
}
}]
}
}]
}
});
this.cropItem = new Ext.menu.Item({
text : "Crop",
handler : this.onCropFn,
scope : this
});
this.fitImageItem = new Ext.menu.Item({
text : "Fit Image in Cell",
handler : this.onFitImageFn,
scope : this
});
this.fitCellItem = new Ext.menu.Item({
text : "Fit Cell Around Image",
handler : this.onFitCellFn,
scope : this
});
this.incellImageOptionItem = new Ext.menu.Item({
iconCls : "icon_setting",
text : "In-cell Image Option",
menu : {
items : [this.cropItem, this.fitImageItem, this.fitCellItem]
}
});
this.addGroupItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.addGroup,
handler : this.onAddGroup,
scope : this
});
this.cancelGroupItem = new Ext.menu.Item({
text : feyaSoft.ss.lang.cancelGroup,
handler : this.onCancelGroup,
scope : this
});
this.hyperlinkItem = new Ext.menu.Item({
iconCls : "icon_link",
text : feyaSoft.ss.lang.hyperlink,
handler : this.onHyperlink,
scope : this
});
this.editFormula = new Ext.menu.Item({
text : feyaSoft.ss.lang.isi_add_formula,
hidden : true,
handler : function() {
this.emisOpenDialog("AL");
},
scope : this
});
this.companyLookup = new Ext.menu.Item({
text : feyaSoft.ss.lang.isi_company_lookup,
hidden : true,
handler : function() {
this.emisOpenDialog("CL");
},
scope : this
});
this.importCompanies = new Ext.menu.Item({
text : feyaSoft.ss.lang.isi_import_company,
hidden : true,
handler : function() {
this.emisOpenDialog("IC");
},
scope : this
});
this.copyTpl = (new Ext.XTemplate([
"
",
"", "", "",
"{data} | ", "", "
", "", "
"]
.join(""))).compile();
this.copyRandomId = Ext.ss.CONST.copySourceID
+ (new Date).format("YmdHisu");
Ext.ss.menu.ContextMenu.superclass.constructor.call(this, {
items : [this.fzItem, this.spItem, this.combineItem, this.splitItem,
"-", this.cutItem, this.copyItem, this.pasteItem, "-",
this.commentAddItem, this.commentEditItem,
this.commentDeleteItem, "-", this.clearItem,
this.removeFormatItem, this.insertItem, this.insertRangeItem,
this.deleteItem, this.colWidthItem, this.rowHeightItem,
this.hideItem, this.unhideItem, this.insertIncellImageItem,
this.incellImageOptionItem, this.addGroupItem,
this.cancelGroupItem, this.nameRangeItem, this.hyperlinkItem,
"-", this.editFormula, this.companyLookup, this.importCompanies],
listeners : {
mouseover : {
fn : function() {
var ss = this.spreadsheet;
ss.commenttip.hide();
},
scope : this
}
}
});
};
Ext.extend(Ext.ss.menu.ContextMenu, Ext.menu.Menu, {
onBodyContextMenuFn : function(e) {
e.stopEvent();
var ss = this.spreadsheet;
var sm = ss.sm;
var ds = ss.ds;
sm.transferFocus();
var target = e.getTarget();
var tgEl = Ext.get(target);
var xy = e.getXY();
var xlimit = ss.ylivescroller.getLeft();
var ylimit = ss.xlivescroller.getTop();
ss.hyperlinktip.hide();
if (xy[0] <= xlimit && xy[1] <= ylimit) {
var pos = ds.getPosFromXY(xy[0], xy[1]);
if (pos) {
if (false == sm.isSelected(pos.x, pos.y)) {
sm.handleLeftClick(pos, true);
}
if (sm.isInRange(sm.focusCell)) {
if (ss.splitFlag) {
this.spItem.setText(feyaSoft.ss.lang.cancelSplit);
this.spItem.show();
this.fzItem.hide();
} else {
if (0 == ss.freezeRange.col.end
&& 0 == ss.freezeRange.row.end) {
this.fzItem.setText(feyaSoft.ss.lang.freezeGrid);
this.spItem.setText(feyaSoft.ss.lang.splitGrid);
this.spItem.show();
} else {
this.fzItem.setText(feyaSoft.ss.lang.cancelFreeze);
this.spItem.hide();
}
this.fzItem.show();
}
} else {
this.fzItem.hide();
this.spItem.hide();
}
this.colWidthItem.hide();
this.rowHeightItem.hide();
this.hideItem.hide();
this.unhideItem.hide();
this.deleteItem.hide();
this.insertItem.hide();
this.insertRangeItem.show();
this.addGroupItem.hide();
this.cancelGroupItem.hide();
var selectedStart = sm.selectedStart, selectedEnd = sm.selectedEnd;
var rt = sm.getMinMaxFromStartEnd(selectedStart, selectedEnd);
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
var cflag = 0 == selectedStart.x && 0 == selectedEnd.x;
var rflag = 0 == selectedStart.y && 0 == selectedEnd.y;
if (cflag && rflag) {
} else if (cflag) {
this.colWidthField.setValue(ds.getColWidth(pos.y));
this.colWidthItem.show();
if (sm.isContainHideCol()) {
this.unhideItem.show();
this.unhideItem.setText(feyaSoft.ss.lang.unhideCol);
}
this.deleteItem.show();
this.insertItem.show();
this.insertRangeItem.hide();
this.hideItem.setText(feyaSoft.ss.lang.hideCol);
this.hideItem.show();
if (0 < maxy - miny) {
this.addGroupItem.show();
}
var colSetting = ds.data.colSetting;
for (var i = miny; i <= maxy; i++) {
var it = colSetting[i];
if (it && it.group) {
this.cancelGroupItem.show();
break;
}
}
} else if (rflag) {
this.rowHeightField.setValue(ds.getRowHeight(pos.x));
this.rowHeightItem.show();
if (sm.isContainHideRow()) {
this.unhideItem.show();
this.unhideItem.setText(feyaSoft.ss.lang.unhideRow);
}
this.deleteItem.show();
this.insertItem.show();
this.insertRangeItem.hide();
this.hideItem.setText(feyaSoft.ss.lang.hideRow);
this.hideItem.show();
if (0 < maxx - minx) {
this.addGroupItem.show();
}
var rowSetting = ds.data.rowSetting;
for (var i = minx; i <= maxx; i++) {
var it = rowSetting[i];
if (it && it.group) {
this.cancelGroupItem.show();
break;
}
}
}
var cell = ds.getCellObj(pos.x, pos.y) || {};
this.bindCell = cell;
if (Ext.ss.common.Mask.isImage(cell.data)) {
this.incellImageOptionItem.show();
} else {
this.incellImageOptionItem.hide();
}
if (tgEl.hasClass(Ext.ss.CONST.cssHash[3])) {
this.commentAddItem.hide();
} else {
this.commentAddItem.show();
}
var x = sm.focusCell.x, y = sm.focusCell.y;
var wrap = cell.wrap;
if (wrap) {
this.fitCellItem.hide();
} else {
this.fitCellItem.show();
}
if (false == sm.isSingleSelected()) {
this.splitItem.hide();
this.combineItem.show();
if (wrap) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart,
sm.selectedEnd);
if (rs.minPos.x == wrap.minx
&& rs.minPos.y == wrap.miny
&& rs.maxPos.x == wrap.maxx
&& rs.maxPos.y == wrap.maxy) {
this.combineItem.hide();
this.splitItem.show();
}
}
} else {
this.combineItem.hide();
this.splitItem.hide();
if (wrap) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart,
sm.selectedEnd);
if (rs.minPos.x == wrap.minx
&& rs.minPos.y == wrap.miny
&& rs.maxPos.x == wrap.maxx
&& rs.maxPos.y == wrap.maxy) {
this.splitItem.show();
}
}
}
if (feyaSoft.home.CONST.CLIENT_NAME == "isi") {
this.editFormula.show();
this.companyLookup.show();
this.importCompanies.show();
} else {
this.editFormula.hide();
this.companyLookup.hide();
this.importCompanies.hide();
}
this.showAt(xy);
}
}
},
onFreezeFn : function(item) {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var action;
if (!ss.isFreezed()) {
var x = sm.focusCell.x;
var y = sm.focusCell.y;
ss.MoveFreezer(x, y);
action = feyaSoft.ss.lang.freezeAction;
} else {
ss.CancelFreezer();
action = feyaSoft.ss.lang.unfreezeAction;
}
ds.trace(action);
sm.transferFocus();
},
onCutFn : function(item) {
var ss = this.spreadsheet;
var sm = ss.sm;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
this.copy(function(content) {
this.sm
.clearFormatRange(minx, miny, maxx, maxy, true,
true);
this.resetCutStatus();
});
},
onCopyFn : function(item) {
this.copy();
},
copy : function(cb, scope) {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var data = sm.getSelectedData();
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
ss.setCutStatus(minx, miny, maxx, maxy);
var span = data.span;
var v = ss.editor.getSelectionValue();
if (minx == maxx && miny == maxy && v) {
var da = data.data;
var md = da[minx];
if (md) {
md[miny].data = v;
}
}
var fromRange = {
sheetIndex : ds.activeSheet,
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy
};
var textCover = sm.getTextCover();
var psTxt = ss.sview.dom.firstChild;
minx = maxx = miny = maxy = false;
var datas = data.data;
for (var p in datas) {
p = Number(p);
if (false === minx) {
minx = p;
} else if (minx > p) {
minx = p;
}
if (false === maxx) {
maxx = p;
} else if (maxx < p) {
maxx = p;
}
var o = datas[p];
for (var q in o) {
q = Number(q);
if (false === miny) {
miny = q;
} else if (miny > q) {
miny = q;
}
if (false === maxy) {
maxy = q;
} else if (maxy < q) {
maxy = q;
}
}
}
var rows = [];
for (var i = minx; i <= maxx; i++) {
var arr = [];
for (var j = miny; j <= maxy; j++) {
arr.push("");
}
rows.push(arr);
}
var html, strs = [];
for (var p in datas) {
p = Number(p);
var o = datas[p];
for (var q in o) {
q = Number(q);
var val = o[q]['origin-data'] || o[q].data || "";
if (Ext.isString(val)) {
val = Ext.util.Format.htmlDecode(val);
val = val.replace(/"/g, "\"");
val = val.replace(/\s/gi, " ");
}
rows[p - minx][q - miny] = val;
}
strs.push(rows[p - minx].join("\t"));
}
html = strs.join("\n");
psTxt.value = html;
psTxt.focus();
psTxt.select();
if (Ext.isIE) {
window.clipboardData.setData("Text", html);
}
Ext.util.GlobalBoard.setBoard({
cb : cb,
scope : scope,
type : ".ss",
content : data,
snapshot : html,
path : null,
source : null,
fromRange : fromRange,
paste2Fn : ss.pasteDataFromBoard2SS
});
},
onPasteFn : function(item) {
var me = this;
var ss = this.spreadsheet, cmenu = ss.contextmenu;
var sm = ss.sm;
var textCover = sm.getTextCover();
var display = textCover.style.display;
var psTxt = ss.sview.dom.firstChild;
if (Ext.isIE) {
psTxt.value = "";
}
psTxt.focus();
psTxt.select();
(function() {
var v = psTxt.value;
var board = Ext.util.GlobalBoard.getBoard();
var snapshot = board.snapshot;
if (Ext.isString(snapshot)) {
snapshot = snapshot.replace(/\s/gi, "");
}
var cur = v.replace(/\s/gi, "");
if (v && -1 == v.indexOf(me.copyRandomId) && cur !== snapshot
&& (-1 == cur.indexOf(snapshot) || !snapshot)) {
if (display == "none") {
v = v.trim();
var lt = v.match(/\t/gi);
lt = lt ? lt.length : 0;
var lbr = v.match(/
/gi);
lbr = lbr ? lbr.length : 0;
var ln = v.match(/\n/gi);
ln = ln ? ln.length : 1;
var dataVal = Ext.util.Format.htmlEncode(v);
var param = {
flag : "cells",
span : {
minx : 1,
miny : 1,
maxx : 1,
maxy : 1
},
data : {
'1' : {}
},
rowSetting : {},
colSetting : {}
};
if (false != Ext.type(dataVal) && "" != dataVal) {
dataVal = dataVal.replace(/\s/gi, " ");
param.data[1] = {
'1' : {
data : dataVal
}
};
}
if (ln > 0 && lt > 0) {
var nary = v.split("\n");
var nLeng = nary.length;
param.span.maxx = nLeng;
var maxAry = [];
var split_tAry = [];
for (var n = 0; n < nLeng; n++) {
var tary = nary[n].split("\t");
maxAry.push(tary.length);
split_tAry.push(tary);
}
var maxLeng = Ext.max(maxAry);
param.span.maxy = maxLeng;
for (var k = 0; k < split_tAry.length; k++) {
var itAry = split_tAry[k];
if (k == 0 && itAry.length < maxLeng) {
var subtractValue = maxLeng - itAry.length;
for (r = 0; r < subtractValue; r++) {
itAry.unshift("");
}
}
var tmp = {};
for (var t = 0; t < itAry.length; t++) {
var dataVal = Ext.util.Format
.htmlEncode(itAry[t]);
if (false != Ext.type(dataVal) && "" != dataVal) {
dataVal = dataVal.replace(/\s/gi, " ");
tmp[t + 1] = {
data : dataVal
};
}
}
param.data[k + 1] = tmp;
}
} else if (ln > 0) {
var nary = v.split("\n");
var nLeng = nary.length;
param.span.maxx = nLeng;
param.span.maxy = 1;
for (var n = 0; n < nLeng; n++) {
var dataVal = Ext.util.Format.htmlEncode(nary[n]);
if (false != Ext.type(dataVal) && "" != dataVal) {
dataVal = dataVal.replace(/\s/gi, " ");
param.data[n + 1] = {
1 : {
data : dataVal
}
};
}
}
} else if (lbr > 0) {
var brary = v.split("
");
var brLeng = brary.length;
param.span.maxx = brLeng;
param.span.maxy = 1;
for (var b = 0; b < brLeng; b++) {
var dataVal = Ext.util.Format.htmlEncode(nary[n]);
if (false != Ext.type(dataVal) && "" != dataVal) {
dataVal = dataVal.replace(/\s/gi, " ");
param.data[b + 1] = {
1 : {
data : dataVal
}
};
}
}
}
ss.pasteDataFromBoard2SS(ss, ".ss", undefined, {
content : param
}, true);
} else {
}
psTxt.value = "";
} else {
board.paste2Fn(ss, ".ss");
}
}).defer(50);
},
onAddCommentFn : function() {
this.spreadsheet.commenteditor.show(Ext.ss.CONST.Comment.ADD);
},
onEditCommentFn : function() {
this.spreadsheet.commenteditor.show(Ext.ss.CONST.Comment.EDIT);
},
onDeleteCommentFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var focusCell = sm.focusCell;
var x = focusCell.x, y = focusCell.y;
var cels = ss.getCellHEls(x, y);
if (cels) {
for (var i = 0, len = cels.length; i < len; i++) {
var cEl = Ext.get(cels[i]);
cEl.removeClass(Ext.ss.CONST.cssHash[3]);
}
}
ss.ds.deleteCommentFn(x, y);
ds.trace(feyaSoft.ss.lang.action_delete_comment(ds
.getNameFromPos(focusCell)));
},
onCombineFn : function(item) {
var ss = this.spreadsheet;
var fr = ss.freezeRange;
var sm = ss.sm;
var ds = ss.ds;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
var span = {
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy
};
sm.focusCell = {
x : minx,
y : miny
};
var ltel;
for (var x = minx; x <= maxx; x++) {
for (var y = miny; y <= maxy; y++) {
var cels = ss.getCellHEls(x, y);
if (cels) {
for (var i = 0, len = cels.length; i < len; i++) {
var cEl = Ext.get(cels[i]);
var tel = cEl.dom.parentNode;
if (x == minx && y == miny) {
ltel = tel;
} else if (ltel) {
tel.style.backgroundColor = ltel.style.backgroundColor;
cEl.dom.innerHTML = "";
}
if (x != maxx && x != fr.row.end) {
cEl.addClass("x-spreadsheet-bottom-none");
}
if (y != maxy && y != fr.col.end) {
cEl.addClass("x-spreadsheet-right-none");
}
}
}
ds.fireEvent("attributechange", x, y, [["wrap",
Ext.apply({}, span)]]);
var obj = ds.getCell(x, y);
obj.x = x;
obj.y = y;
ss.refreshCell(obj);
}
}
delete ds.formulaRelatedMap;
ds.onCheckFormulaFn();
ds.trace(feyaSoft.ss.lang.merge_cell, "wrap");
sm.fireEvent("renderborder");
sm.transferFocus();
},
onSplitFn : function(item) {
var ss = this.spreadsheet;
var sm = ss.sm;
var ds = ss.ds;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
sm.focusCell = {
x : minx,
y : miny
};
for (var x = minx; x <= maxx; x++) {
for (var y = miny; y <= maxy; y++) {
var cels = ss.getCellHEls(x, y);
if (cels) {
for (var i = 0, len = cels.length; i < len; i++) {
var cEl = Ext.get(cels[i]);
if (x != maxx) {
cEl.removeClass("x-spreadsheet-bottom-none");
}
if (y != maxy) {
cEl.removeClass("x-spreadsheet-right-none");
}
}
}
ds.fireEvent("attributechange", x, y, [["wrap", null]]);
var obj = ds.getCell(x, y);
obj.x = x;
obj.y = y;
ss.refreshCell(obj);
}
}
delete ds.formulaRelatedMap;
ds.onCheckFormulaFn();
ds.trace(feyaSoft.ss.lang.cancel_merge, "unwrap");
sm.fireEvent("renderborder");
sm.transferFocus();
},
onClearAllFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
sm.clearSelectedAll();
var ds = ss.ds;
var sc = ds.getLetter(sm.selectedStart.y) + sm.selectedStart.x;
var ec = ds.getLetter(sm.selectedEnd.y) + sm.selectedEnd.x;
ds.trace(feyaSoft.ss.lang.action_clear(sc, ec), "clear-all");
},
onClearContentFn : function() {
var ss = this.spreadsheet;
ss.fxField.setValue("");
var sm = ss.sm;
sm.clearSelectedData();
var ds = ss.ds;
var sc = ds.getLetter(sm.selectedStart.y) + sm.selectedStart.x;
var ec = ds.getLetter(sm.selectedEnd.y) + sm.selectedEnd.x;
ds.trace(feyaSoft.ss.lang.action_clear(sc, ec));
},
onRemoveFormatFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
sm.clearSelectedFormat();
var ds = ss.ds;
var sc = ds.getLetter(sm.selectedStart.y) + sm.selectedStart.x;
var ec = ds.getLetter(sm.selectedEnd.y) + sm.selectedEnd.x;
ds.trace(feyaSoft.ss.lang.action_clear_format(sc, ec));
},
onDeleteFn : function() {
var sm = this.spreadsheet.sm;
var toolbar = this.spreadsheet.toolbar;
if (0 == sm.selectedStart.x) {
toolbar.onDeleteColFn();
} else {
toolbar.onDeleteRowFn();
}
},
onColWidthFn : function(nf, e) {
var key = e.getKey();
if (Ext.EventObject.ENTER == key) {
if (nf.isValid()) {
var ss = this.spreadsheet;
var ds = ss.ds;
var w = nf.getValue() - ss.xpaddingOffset;
var sm = ss.sm;
var min = ss.xpaddingOffset + 1;
if (min > w) {
w = min;
}
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart,
sm.selectedEnd);
var miny = rt.minPos.y, maxy = rt.maxPos.y;
for (var j = miny; j <= maxy; j++) {
ss.fireEvent("updatecss", "colSetting", j, "cw", w);
}
ds.trace(feyaSoft.ss.lang.action_col_resize(ds.getLetter(miny),
ds.getLetter(maxy)));
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.fireEvent("renderborder");
this.hide();
}
}
},
onRowHeightFn : function(nf, e) {
var key = e.getKey();
if (Ext.EventObject.ENTER == key) {
if (nf.isValid()) {
var ss = this.spreadsheet;
var h = nf.getValue() - ss.ypaddingOffset;
var sm = ss.sm;
var min = ss.ypaddingOffset + 1;
if (min > h) {
h = min;
}
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart,
sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x;
for (var i = minx; i <= maxx; i++) {
ss.fireEvent("updatecss", "rowSetting", i, "ch", h);
}
ss.ds.trace(feyaSoft.ss.lang.action_row_resize(minx, maxx));
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.fireEvent("renderborder");
this.hide();
}
}
},
onHideFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var cs = ds.data.colSetting, rs = ds.data.rowSetting;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
if (0 == sm.selectedStart.x && 0 == sm.selectedEnd.x) {
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var miny = rt.minPos.y, maxy = rt.maxPos.y;
sm.selectedStart.y = sm.selectedEnd.y + 1;
sm.selectedEnd.y = sm.selectedStart.y;
sm.focusCell.y = sm.selectedStart.y;
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, [["display", "none"]]);
}
ss.refreshRange();
ds.trace(feyaSoft.ss.lang.action_col_hide(miny, maxy));
sm.fireEvent("renderborder");
} else if (0 == sm.selectedStart.y && 0 == sm.selectedEnd.y) {
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x;
sm.selectedStart.x = sm.selectedEnd.x + 1;
sm.selectedEnd.x = sm.selectedStart.x;
sm.focusCell.x = sm.selectedStart.x;
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [["display", "none"]]);
}
ss.refreshRange();
ds.trace(feyaSoft.ss.lang.action_row_hide(minx, maxx));
sm.fireEvent("renderborder");
}
},
onUnhideFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var cs = ds.data.colSetting, rs = ds.data.rowSetting;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
if (0 == sm.selectedStart.x && 0 == sm.selectedEnd.x) {
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var miny = rt.minPos.y, maxy = rt.maxPos.y;
if (1 != miny) {
if (0 == ds.getVisibleColOffset(miny, 1)) {
miny = 1;
}
}
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, [["display", ""]]);
}
ds.trace(feyaSoft.ss.lang.action_col_show(miny, maxy));
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.fireEvent("renderborder");
} else if (0 == sm.selectedStart.y && 0 == sm.selectedEnd.y) {
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x;
if (1 != minx) {
if (0 == ds.getVisibleRowOffset(minx, 1)) {
minx = 1;
}
}
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [["display", ""]]);
}
ds.trace(feyaSoft.ss.lang.action_row_show(minx, maxx));
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.fireEvent("renderborder");
}
},
onInsertIncellImageByOpenFn : function() {
new feyaSoft.ss.popup.ImagePopup(function(imagePath) {
var ss = this.spreadsheet;
ss.insertImageInCell(imagePath);
}, this);
},
onInsertIncellImageByLinkFn : function(tf, e, pm) {
pm = pm || this;
var key = e.getKey();
if (Ext.EventObject.ENTER == key) {
var ss = this.spreadsheet;
var v = tf.getValue();
tf.reset();
ss.insertImageInCell(v);
pm.hide();
}
},
onCropFn : function() {
var ss = this.spreadsheet;
var bindCell = this.bindCell;
var x = bindCell.x, y = bindCell.y;
var data = bindCell.data;
var m = data.match(/style\s*=\s*"[^"]*"/);
if (m) {
data = data.replace(m, "");
ss.setInCellImage(x, y, data);
}
},
onFitImageFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var bindCell = this.bindCell;
var x = bindCell.x, y = bindCell.y;
ds.fireEvent("attributechange", x, y, [["align", "top"]]);
var data = bindCell.data;
var m = data.match(/style\s*=\s*"[^"]*"/);
if (!m) {
m = data.match(/
![]()
it[0]) {
min = it[0];
}
if (max < it[1]) {
max = it[1];
}
}
return [min, max];
} else {
var groups = {}, colSetting = ds.data.colSetting;
for (var i = min; i <= max; i++) {
var it = colSetting[i];
if (it && it.group) {
var id = it.group.join("-");
groups[id] = it.group;
}
}
for (var p in groups) {
var it = groups[p];
if (min > it[0]) {
min = it[0];
}
if (max < it[1]) {
max = it[1];
}
}
return [min, max];
}
},
onAddGroup : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
if (0 == minx) {
if (0 < maxy - miny) {
var span = this.findExtendGroupSpan(miny, maxy);
miny = span[0];
maxy = span[1];
for (var i = miny; i <= maxy; i++) {
ds.fireEvent("colattributechange", i, [
["group", [miny, maxy]], ["display", ""],
["groupCollapsed", false]]);
}
ds.trace(feyaSoft.ss.lang.addGroup);
ss.refreshRange();
sm.fireEvent("renderborder");
}
} else {
if (0 < maxx - minx) {
var span = this.findExtendGroupSpan(minx, maxx, "row");
minx = span[0];
maxx = span[1];
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [
["group", [minx, maxx]], ["display", ""],
["groupCollapsed", false]]);
}
ds.trace(feyaSoft.ss.lang.addGroup);
ss.refreshRange();
sm.fireEvent("renderborder");
}
}
},
onCancelGroup : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
if (0 == minx) {
maxy++;
var span = this.findExtendGroupSpan(miny, maxy);
miny = span[0];
maxy = span[1];
for (var i = miny; i <= maxy; i++) {
ds.fireEvent("colattributechange", i, [["group", false],
["display", ""], ["groupCollapsed", false]]);
}
ds.trace(feyaSoft.ss.lang.cancelGroup);
ss.refreshRange();
sm.fireEvent("renderborder");
} else {
maxx++;
var span = this.findExtendGroupSpan(minx, maxx, "row");
minx = span[0];
maxx = span[1];
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [["group", false],
["display", ""], ["groupCollapsed", false]]);
}
ds.trace(feyaSoft.ss.lang.addGroup);
ss.refreshRange();
sm.fireEvent("renderborder");
}
},
onInsertFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
var toolbar = ss.toolbar;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
if (0 == minx && 0 == miny) {
} else if (0 == minx) {
toolbar.onInsertColBeforeFn();
} else if (0 == miny) {
toolbar.onInsertRowAboveFn();
} else {
}
},
nameSelectionRange : function() {
var win = this.getNameRangeWin();
win.popup();
},
getNameRangeWin : function() {
if (!this.nameRangeWin) {
this.nameRangeWin = new Ext.ss.popup.NameRangeWin({
title : feyaSoft.ss.lang.nameManager,
closeAction : "hide",
spreadsheet : this.spreadsheet,
width : 300,
height : 350
});
}
return this.nameRangeWin;
},
onHyperlink : function() {
this.spreadsheet.hyperlinkwin.popup();
},
emisOpenDialog : function(type) {
var emisJS = new Emis;
emisJS.openDialog(type);
}
});
Ext.ns("Ext.ss.menu");
Ext.ss.menu.FilterMenu = Ext.extend(Ext.menu.Menu, {
pageSize : 20,
initComponent : function() {
var lan_com = feyaSoft.lang.common;
var lan_ss = feyaSoft.ss.lang;
var store = new Ext.data.ArrayStore({
fields : ["value"],
idIndex : 0
});
var sm = new Ext.grid.CheckboxSelectionModel;
this.distinctList = new Ext.grid.GridPanel({
cls : "x-menu-list-item-indent",
height : 200,
autoScroll : false,
width : 295,
store : store,
border : false,
sm : sm,
columns : [sm, {
id : "value",
header : "Select All",
sortable : true,
menuDisabled : true,
dataIndex : "value",
width : 230
}],
view : new Ext.ux.grid.BufferView({
scrollDelay : false
})
});
this.ascItem = new Ext.menu.Item({
iconCls : "icon_asc",
text : lan_ss.asc_tip,
handler : this.sortAsc,
scope : this
});
this.descItem = new Ext.menu.Item({
iconCls : "icon_desc",
text : lan_ss.desc_tip,
handler : this.sortDesc,
scope : this
});
this.rangeMenu = new Ext.ux.menu.RangeMenu({
fieldCls : Ext.form.TextField,
fields : {},
fieldCfg : {},
iconCls : {
gt : "ux-rangemenu-gt",
lt : "ux-rangemenu-lt",
eq : "ux-rangemenu-eq"
},
menuItemCfgs : {
emptyText : lan_com.inputFilterText + "...",
selectOnFocus : true,
width : 125
},
menuItems : ["lt", "gt", "eq"],
listeners : {
update : {
fn : this.updateFilters,
scope : this
}
}
});
this.items = [this.ascItem, this.descItem, "-", {
text : lan_ss.filters,
menu : this.rangeMenu
}, {
text : lan_ss.clearFilter,
handler : this.cancelFilter,
scope : this
}, "-", this.distinctList, "-", {
xtype : "container",
cls : "x-menu-list-item-indent",
width : 300,
height : 25,
layout : {
type : "hbox",
align : "stretch"
},
items : [{
xtype : "button",
width : 80,
minWidth : 80,
text : lan_ss.removeFilter,
handler : this.clearFilter,
scope : this
}, {
xtype : "spacer",
flex : 1
}, {
xtype : "button",
style : "padding-right:5px;",
width : 80,
minWidth : 80,
text : lan_com.ok,
handler : this.applyFilter,
scope : this
}, {
xtype : "button",
width : 80,
minWidth : 80,
text : lan_com.cancel,
handler : this.cancel,
scope : this
}]
}];
Ext.ss.menu.FilterMenu.superclass.initComponent.call(this);
this.on("show", this.prepareFilterMenu, this, {
delay : 10
});
},
show : function(el, pos) {
this.pos = pos;
Ext.ss.menu.FilterMenu.superclass.show.call(this, el);
},
applyFilter : function() {
var ss = this.spreadsheet;
var notmatch = [];
var sm = this.distinctList.getSelectionModel();
var store = this.distinctList.getStore();
store.clearFilter(true);
var rds = store.getRange();
var len = rds.length;
if (0 == len) {
notmatch = null;
} else {
for (var i = 0; i < len; i++) {
var rd = rds[i];
if (!sm.isSelected(rd)) {
var v = rd.data.value;
notmatch.push(v);
}
}
if (0 == notmatch) {
notmatch = null;
}
}
var pos = this.pos;
ss.doFilter(pos, notmatch);
this.hide();
},
cancelFilter : function() {
var ss = this.spreadsheet, ds = ss.ds;
var pos = this.pos;
var x = pos.x, y = pos.y;
ds.fireEvent("attributechange", x, y, [["filterCheck", ""]]);
ss.doFilter(pos, null, true);
ds.trace(feyaSoft.ss.lang.filtering);
ss.refreshRange();
this.hide();
},
clearFilter : function() {
var ss = this.spreadsheet, ds = ss.ds;
var pos = this.pos;
var x = pos.x, y = pos.y;
ds.fireEvent("attributechange", x, y, [["filterCheck", ""]]);
ss.doFilter(pos, null, true);
ds.fireEvent("attributechange", x, y, [["filter", ""]]);
ds.trace(feyaSoft.ss.lang.filtering);
ss.refreshRange();
this.hide();
},
cancel : function() {
this.hide();
},
prepareFilterMenu : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var pos = this.pos;
if (pos) {
var filterSet = ds.getAllFilters();
var row = pos.x, col = pos.y;
var cell = ds.getCell(row, col);
var filter = cell.filter;
var distinct = ss.getDistinctValue(col, filter.minx + row,
filter.maxx + row, filterSet);
var store = this.distinctList.getStore(), sm = this.distinctList
.getSelectionModel();
store.removeAll();
var adds = [], selected = [], flag = true;
for (var p in distinct) {
if (flag) {
flag = distinct[p];
}
var rd = new store.recordType({
value : p
});
adds.push(rd);
if (distinct[p]) {
selected.push(rd);
}
}
store.add(adds);
if (flag) {
sm.selectAll();
} else {
sm.selectRecords(selected);
}
var fields = this.rangeMenu.fields;
for (var p in fields) {
fields[p].reset();
}
}
},
sortAsc : function() {
this.sort(1);
},
sortDesc : function() {
this.sort(-1);
},
sort : function(dir) {
var lan_ss = feyaSoft.ss.lang;
var lan_com = feyaSoft.lang.common;
var ss = this.spreadsheet, ds = ss.ds;
var pos = this.pos;
if (pos) {
var row = pos.x, col = pos.y;
var cell = ds.getCell(row, col);
var filter = cell.filter;
var minx = filter.minx + row, maxx = filter.maxx + row;
var flag = ds.sortRange(minx, col, maxx, col, dir);
if (!flag) {
Ext.Msg.show({
title : lan_com.notice,
msg : lan_ss.canNotSortMerge,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.INFO
});
return;
}
ss.renderRange(ss.freezeRange, ss.showRange, null, true);
ds.trace(1 == dir
? feyaSoft.ss.lang.action_sort_asc
: feyaSoft.ss.lang.action_sort_desc);
}
},
updateFilters : function(rangeMenu) {
var mask = Ext.ss.common.Mask;
var eq = rangeMenu.fields.eq.getValue();
var lt = rangeMenu.fields.lt.getValue();
var gt = rangeMenu.fields.gt.getValue();
var store = this.distinctList.getStore();
var sm = this.distinctList.getSelectionModel();
var ltfn, eqfn, gtfn;
ltfn = eqfn = gtfn = function() {
return true;
};
if (lt && "" != lt) {
ltfn = function(rd) {
var v = rd.data.value;
if (mask.isNumber(lt) && mask.isNumber(v)) {
v = Number(v);
lt = Number(lt);
}
var flag = v < lt;
return flag;
};
}
if (gt && "" != gt) {
gtfn = function(rd) {
var v = rd.data.value;
if (mask.isNumber(gt) && mask.isNumber(v)) {
v = Number(v);
gt = Number(gt);
}
var flag = v > gt;
return flag;
};
}
if (eq && "" != eq) {
eqfn = store.createFilterFn("value", eq);
}
store.filterBy(function(rd) {
var flag = false;
if (ltfn(rd) && eqfn(rd) && gtfn(rd)) {
flag = true;
}
if (!flag) {
sm.deselectRow(store.indexOf(rd));
}
return flag;
}, this);
}
});
Ext.ns("Ext.ss");
Ext.ss.DataSource = function(config) {
Ext.apply(this, config);
Ext.ss.DataSource.superclass.constructor.call(this);
this.prepareFBox();
this.resetModifiedCache();
this.addEvents("datachange", "freezechange", "splitchange", "cellchange",
"rowchange", "colchange", "attributechange", "colattributechange",
"rowattributechange", "wholeattributechange", "project",
"deproject", "checkformula", "hstackchange", "savemodified");
this.on("savemodified", this.saveModifiedCache, this, {
buffer : this.saveCacheBuffer
});
this.on("datachange", this.onDataChangeFn, this);
this.on("freezechange", this.onFreezeChangeFn, this);
this.on("splitchange", this.onSplitChangeFn, this);
this.on("cellchange", this.onCellChangeFn, this);
this.on("rowchange", this.onRowChangeFn, this);
this.on("colchange", this.onColChangeFn, this);
this.on("attributechange", this.onAttributeChangeFn, this);
this.on("colattributechange", this.onColAttributeChangeFn, this);
this.on("rowattributechange", this.onRowAttributeChangeFn, this);
this.on("wholeattributechange", this.onWholeAttributeChangeFn, this);
this.on("checkformula", this.onCheckFormulaFn, this, {
buffer : 50
});
var ss = this.spreadsheet;
this.defaultRowHeight = ss.cellHeight;
this.defaultColWidth = ss.cellWidth;
this.xpaddingOffset = ss.xpaddingOffset;
this.ypaddingOffset = ss.ypaddingOffset;
this.fixColor = ss.fixColor;
this.fbColor = ss.fbColor;
this.lcWidth = ss.lcWidth;
};
Ext.extend(Ext.ss.DataSource, Ext.util.Observable, {
defaultDateFormat : Ext.ss.CONST.DEFAULT_DATE_FROMAT,
defaultTimeFormat : Ext.ss.CONST.DEFAULT_TIME_FROMAT,
disableCallingBackEnd : false,
data : null,
saveCacheBuffer : 5000,
warmingNonISIFormulaNum : 80000,
warmingISIFormulaNum : 40000,
loadTabUrl : feyaSoft.home.CONST.spreadSheetUrl.loadTab,
loadPublicTabUrl : feyaSoft.home.CONST.spreadSheetUrl.loadPublicTab,
sortUrl : feyaSoft.home.CONST.spreadSheetUrl.sortRows,
updateModifiedUrl : feyaSoft.home.CONST.spreadSheetUrl.updateBatchCells,
newTabUrl : feyaSoft.home.CONST.spreadSheetUrl.newTab,
deleteTabUrl : feyaSoft.home.CONST.spreadSheetUrl.deleteTab,
renameTabUrl : feyaSoft.home.CONST.spreadSheetUrl.renameTab,
copyTabUrl : feyaSoft.home.CONST.spreadSheetUrl.copyTab,
extraInfoUrl : feyaSoft.home.CONST.spreadSheetUrl.extraInfo,
fileExtraInfoUrl : feyaSoft.home.CONST.spreadSheetUrl.fileExtraInfo,
reorderUrl : feyaSoft.home.CONST.spreadSheetUrl.reorder,
dotMaxLen : 15,
posReg : Ext.ss.CONST.posReg,
formulaRelatedMap : null,
resetModifiedCache : function() {
this.modifedCache = {};
},
resetHStack : function() {
this.hStack = [];
for (var i = 0; i < this.sheets.length; i++) {
this.hStack[i] = {
start : 0,
index : 0,
max : 0,
records : {}
};
}
},
getHStack : function(index) {
return this.hStack[index];
},
getActiveHStack : function() {
return this.hStack[this.activeSheet];
},
addHStack : function(index) {
var hs = this.hStack;
for (var i = this.hStack.length - 1; i >= index; i--) {
hs[i + 1] = hs[i];
}
hs[i + 1] = {
start : 0,
index : 0,
max : 0,
records : {}
};
},
deleteHStack : function(index) {
var hs = this.hStack;
for (var i = index + 1, len = this.hStack.length; i < len; i++) {
hs[i - 1] = hs[i];
}
hs.pop();
},
clearHStack : function(index) {
this.hStack[index] = {
start : 0,
index : 0,
max : 0,
records : {}
};
},
getSheetIdByIndex : function(index) {
var sheet = this.sheets[index];
if (sheet) {
return sheet.tabId;
}
},
parseText2Pos : function(text) {
try {
var sheetName;
var parts = text.split("!");
if (1 < parts.length) {
sheetName = parts[0].trim();
text = parts[1].toUpperCase();
} else {
text = text.toUpperCase();
}
parts = text.split(":");
var startPos, endPos;
if (2 == parts.length) {
startPos = Ext.ss.common.DataSourceHelper
.parseSpan2Pos(parts[0]);
endPos = Ext.ss.common.DataSourceHelper.parseSpan2Pos(parts[1]);
} else {
startPos = Ext.ss.common.DataSourceHelper
.parseSpan2Pos(parts[0]);
endPos = Ext.apply({}, startPos);
}
var pos = {
x : startPos.x,
y : startPos.y,
ex : endPos.x,
ey : endPos.y,
ab : startPos.ab
};
if (pos.ex < pos.x) {
var tmp = pos.ex;
pos.ex = pos.x;
pos.x = tmp;
}
if (pos.ey < pos.y) {
var tmp = pos.ey;
pos.ey = pos.y;
pos.y = tmp;
}
if (sheetName) {
pos.sheetIndex = Ext.ss.common.DataSourceHelper
.getSheetIndexByName(this.sheets, sheetName, true);
}
return pos;
} catch (e) {
return text;
}
},
syncFormula : function(x, y, txt, callback, scope) {
try {
var data;
txt = txt.slice(1);
var ds = this;
var posReg = this.posReg;
data = txt.replace(posReg, function(w) {
var pos = ds.parseText2Pos(w);
if (!Ext.isString(pos) && callback) {
return callback.call(scope, pos);
}
return w;
});
data = "=" + data;
return data;
} catch (e) {
return e.toString();
}
},
refreshOriginFormula : function(origin, ox, oy) {
var tmpx = ox, tmpy = oy;
var posReg = this.posReg;
var ds = this;
if (!origin) {
return origin;
}
try {
var newOrigin = origin.replace(posReg, function(w) {
var index = arguments[arguments.length - 2], sqNum = 0, dqNum = 0;
for (var i = 0; i < index; i++) {
var ch = origin.charAt(i);
if ("\"" == ch) {
dqNum++;
}
if ("'" == ch) {
sqNum++;
}
}
if (0 != dqNum % 2 || 0 != sqNum % 2) {
return w;
}
var pos = ds.parseText2Pos(w);
if (Ext.isString(pos)) {
return w;
}
if (true === pos.ab) {
ox = 0;
oy = 0;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
oy = tmpy;
ox = 0;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
oy = 0;
ox = tmpx;
} else {
ox = tmpx;
oy = tmpy;
}
var str = "";
if (pos.x == pos.ex && pos.y == pos.ey) {
var x = pos.x + ox;
var y = pos.y + oy;
if (true === pos.ab) {
if (0 == y) {
str = "$" + x + ":$" + x;
} else if (0 == x) {
var ly = ds.getLetter(y);
str = "$" + ly + ":$" + ly;
} else {
str = "$" + ds.getLetter(y) + "$" + x;
}
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
if (0 == y) {
str = "$" + x + ":$" + x;
} else if (0 == x) {
var ly = ds.getLetter(y);
str = ly + ":" + ly;
} else {
str = ds.getLetter(y) + "$" + x;
}
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
if (0 == y) {
str = x + ":" + x;
} else if (0 == x) {
var ly = ds.getLetter(y);
str = "$" + ly + ":$" + ly;
} else {
str = "$" + ds.getLetter(y) + "" + x;
}
} else {
if (0 == x) {
var ly = ds.getLetter(y);
str = ly + ":" + ly;
} else if (0 == y) {
str = x + ":" + x;
} else {
str = ds.getLetter(y) + x;
}
}
} else {
var x = pos.x + ox;
var y = pos.y + oy;
var ex = pos.ex + ox;
var ey = pos.ey + oy;
if (true === pos.ab) {
if (0 == x) {
str = "$" + ds.getLetter(y) + ":$"
+ ds.getLetter(ey);
} else if (0 == y) {
str = "$" + x + ":$" + ex;
} else {
str = "$" + ds.getLetter(y) + "$" + x + ":$"
+ ds.getLetter(ey) + "$" + ex;
}
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
if (0 == x) {
str = ds.getLetter(y) + ":" + ds.getLetter(ey);
} else if (0 == y) {
str = "$" + x + ":$" + ex;
} else {
str = ds.getLetter(y) + "$" + x + ":"
+ ds.getLetter(ey) + "$" + ex;
}
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
if (0 == x) {
str = "$" + ds.getLetter(y) + ":$"
+ ds.getLetter(ey);
} else if (0 == y) {
str = x + ":" + ex;
} else {
str = "$" + ds.getLetter(y) + x + ":$"
+ ds.getLetter(ey) + ex;
}
} else {
if (0 == x) {
str = ds.getLetter(y) + ":" + ds.getLetter(ey);
} else if (0 == y) {
str = x + ":" + ex;
} else {
str = ds.getLetter(y) + x + ":" + ds.getLetter(ey)
+ ex;
}
}
}
var sheetName;
var parts = w.split("!");
if (1 < parts.length) {
sheetName = parts[0];
str = sheetName + "!" + str;
}
return str;
});
return newOrigin;
} catch (e) {
return origin;
}
},
transfer5TplPos2Text : function(pos, ab, withoutSheetName) {
var ds = this;
var x = pos.x, ex = pos.ex, y = pos.y, ey = pos.ey, sheetIndex = pos.sheetIndex;
var str;
if (x === ex && y === ey) {
if (true === ab) {
if (0 == y) {
str = "$" + x + ":$" + x;
} else if (0 == x) {
var ly = ds.getLetter(y);
str = "$" + ly + ":$" + ly;
} else {
str = "$" + ds.getLetter(y) + "$" + x;
}
} else {
if (0 == y) {
str = x + ":" + x;
} else if (0 == x) {
var ly = ds.getLetter(y);
str = ly + ":" + ly;
} else {
str = ds.getLetter(y) + x;
}
}
} else {
if (true == ab) {
if (0 == x) {
str = "$" + ds.getLetter(y) + ":$" + ds.getLetter(ey);
} else if (0 == y) {
str = "$" + x + ":$" + ex;
} else {
str = "$" + ds.getLetter(y) + "$" + x + ":$"
+ ds.getLetter(ey) + "$" + ex;
}
} else {
if (0 == x) {
str = ds.getLetter(y) + ":" + ds.getLetter(ey);
} else if (0 == y) {
str = x + ":" + ex;
} else {
str = ds.getLetter(y) + x + ":" + ds.getLetter(ey) + ex;
}
}
}
if (false !== Ext.type(sheetIndex) && !withoutSheetName) {
var sheetName = ds.sheets[sheetIndex].name;
str = sheetName + "!" + str;
}
return str;
},
adjustFormula : function(x, y, txt, callback, scope) {
try {
var data;
txt = txt.slice(1);
var ds = this;
var posReg = this.posReg;
data = txt.replace(/[a-zA-Z0-9]+\(/gi, function(w) {
var parts = w.split("(", 2);
var fname = parts[0], rest = parts[1];
if ("if" == fname || "IF" == fname) {
fname = "condition";
}
fname = fname.toLowerCase();
return "FBox[\"" + fname + "\"](" + rest;
});
data = Ext.ss.common.Helper.convertPercent2num(data);
data = data.replace(posReg, function(w) {
var argLen = arguments.length;
var matchPos = arguments[argLen - 2];
if (Ext.ss.common.Helper.whetherInQuote(data, matchPos
+ w.length - 1)) {
return w;
}
var inFunFlg = Ext.ss.common.Helper
.whetherInFun(data, matchPos);
if (inFunFlg) {
for (var i = matchPos - 1; 0 <= i; i--) {
var chr = data.charAt(i);
if ("+" == chr || "-" == chr || "*" == chr
|| "/" == chr || "=" == chr || ">" == chr
|| "<" == chr || "%" == chr) {
inFunFlg = false;
break;
}
if ("," == chr || ")" == chr || " " !== chr) {
break;
}
}
}
if (inFunFlg) {
for (var i = matchPos + w.length, tlen = data.length; i < tlen; i++) {
var chr = data.charAt(i);
if ("+" == chr || "-" == chr || "*" == chr
|| "/" == chr || "=" == chr || ">" == chr
|| "<" == chr || "%" == chr) {
inFunFlg = false;
break;
}
if ("," == chr || ")" == chr || " " !== chr) {
break;
}
}
}
var pos = ds.parseText2Pos(w);
if (Ext.isString(pos)) {
return w;
}
if (callback) {
callback.call(scope, pos);
}
if (pos.x > pos.ex || pos.y > pos.ey) {
return "0";
} else {
var ox = pos.x - x;
var oy = pos.y - y;
var oex = pos.ex - x;
var oey = pos.ey - y;
if (inFunFlg) {
return "{sheetIndex:" + pos.sheetIndex + ",ox:" + ox
+ ",oy:" + oy + ",oex:" + oex + ",oey:" + oey
+ ", ab:" + pos.ab + "}";
} else {
return "FBox.getCellByOffset({sheetIndex:"
+ pos.sheetIndex + ",ox:" + ox + ",oy:" + oy
+ ",oex:" + oex + ",oey:" + oey + ", ab:"
+ pos.ab + "})";
}
}
});
var newData = data.replace(/[=]+/gi, function(w) {
var pos = arguments[arguments.length - 2];
var last = "";
if (0 < pos) {
last = data.charAt(pos - 1);
}
if (1 == w.length && ">" != last && "<" != last && "!" != last) {
return "==";
}
return w;
});
data = newData.replace(/\<\>/gi, "!=");
data = "=" + data;
return data;
} catch (e) {
if ("#PARSE_ERROR" == e) {
return "#NAME?";
}
return txt;
}
},
wrapLink : function(url) {
return "
" + url + "";
},
onCheckFormulaFn : function(sheetIndex, x, y) {
var me = this;
var ss = this.spreadsheet;
var tmp = this.activeSheet;
this.formulaRelatedMap = this.formulaRelatedMap || {};
var sIndex = sheetIndex;
if (false == Ext.type(sIndex) || "" !== sIndex) {
sIndex = this.activeSheet;
}
if (false != Ext.type(x) && false != Ext.type(y)) {
var mapId = sIndex + "-" + x + "-" + y;
if (!this.formulaRelatedMap[mapId]) {
var rows = this.sheets[sIndex].rows;
var row = rows[x];
var retFlag = true;
if (row) {
var cell = row[y];
if ("ISFormula" == cell.type
|| this.isISFormula(cell['origin-data'])) {
retFlag = false;
}
}
if (retFlag) {
return;
}
}
}
this.formulaRelatedMap = {};
this.ISFormulaQueue = [];
var formulaCache = [], formulaNum = 0, isiformulaNum = 0;
for (var i = 0, len = this.sheets.length; i < len; i++) {
var rows = this.sheets[i].rows;
this.data = this.sheets[i];
this.activeSheet = i;
var lookup = [];
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q];
var isFormula = false;
var isISIFormula = false;
if (Ext.isDefined(cell['origin-data'])) {
isFormula = Ext.ss.common.Mask
.isFormula(cell['origin-data']);
isISIFormula = "ISFormula" == cell.type
|| this.isISFormula(cell['origin-data']);
} else {
isFormula = Ext.ss.common.Mask.isFormula(cell.data);
isISIFormula = "ISFormula" == cell.type
|| this.isISFormula(cell.data);
}
if (isFormula
&& ("dynamic" == cell.status || sIndex == i
&& x == p && y == q || isISIFormula)) {
cell.oldResult = cell.result;
delete cell.result;
lookup.push({
x : p,
y : q
});
if (isISIFormula) {
isiformulaNum++;
} else if (isFormula) {
formulaNum++;
}
}
}
}
formulaCache.push(lookup);
}
var recalFn = function() {
for (var i = 0, len = me.sheets.length; i < len; i++) {
var rows = me.sheets[i].rows;
me.data = me.sheets[i];
me.activeSheet = i;
var lookup = formulaCache[i];
for (var j = 0, count = lookup.length; j < count; j++) {
var it = lookup[j];
var x = it.x, y = it.y;
var obj = me.getCell(x, y);
obj.x = x;
obj.y = y;
if (i === tmp) {
ss.refreshCell(obj);
}
me.fireEvent("afterdatachange", x, y, i, me);
}
}
me.data = me.sheets[tmp];
me.activeSheet = tmp;
me.checkISFormula();
};
if (formulaNum >= this.warmingNonISIFormulaNum
|| isiformulaNum >= this.warmingISIFormulaNum) {
ss.maskUI(feyaSoft.ss.lang.updateLotOfFormula);
(function () {
recalFn();
ss.unmaskUI();
}).defer(100, this);
} else {
recalFn();
}
},
onFreezeChangeFn : function(ofr, fr) {
var ss = this.spreadsheet;
var og = {
freezeRange : {}
};
og.freezeRange = ss.copyRange(ofr);
var md = {
freezeRange : {}
};
md.freezeRange = ss.copyRange(fr);
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
},
onSplitChangeFn : function(ofr, fr, osf, sf) {
var ss = this.spreadsheet;
var og = {
freezeRange : {},
splitFlag : Ext.ss.common.Mask.copy(osf)
};
og.freezeRange = ss.copyRange(ofr);
var md = {
freezeRange : {},
splitFlag : Ext.ss.common.Mask.copy(sf)
};
md.freezeRange = ss.copyRange(fr);
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
},
onRowChangeFn : function(x, obj) {
if (this.data.rowNum < x) {
this.data.rowNum = x;
}
var rs = this.data.rowSetting;
rs[x] = rs[x] || {};
var rowcss = rs[x];
var og = {
rowSetting : {}
};
var o = Ext.apply({
ch : null,
bg : null,
bb : null,
br : null,
color : null,
'font-size' : null,
'word-wrap' : null,
'font-family' : null,
'text-align' : null,
align : null,
b : null,
u : null,
s : null,
i : null,
css : null,
tdcss : null
}, rowcss);
var n = Ext.apply({
ch : null,
bg : null,
bb : null,
br : null,
color : null,
'font-size' : null,
'word-wrap' : null,
'font-family' : null,
'text-align' : null,
align : null,
b : null,
u : null,
s : null,
i : null,
css : null,
tdcss : null
}, obj);
rs[x] = Ext.apply({}, obj);
og.rowSetting[x] = o;
var md = {
rowSetting : {}
};
md.rowSetting[x] = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
this.put2ModifiedCache("createUpdate", {
x : x,
y : 0,
data : this.getModifiedData(x, 0)
});
},
onColChangeFn : function(y, obj) {
if (this.data.colNum < y) {
this.data.colNum = y;
}
var cs = this.data.colSetting;
cs[y] = cs[y] || {};
var colcss = cs[y];
var og = {
colSetting : {}
};
var o = Ext.apply({
cw : null,
bg : null,
bb : null,
br : null,
color : null,
'font-size' : null,
'word-wrap' : null,
'font-family' : null,
'text-align' : null,
align : null,
b : null,
u : null,
s : null,
i : null,
css : null,
tdcss : null
}, colcss);
var n = Ext.apply({
cw : null,
bg : null,
bb : null,
br : null,
color : null,
'font-size' : null,
'word-wrap' : null,
'font-family' : null,
'text-align' : null,
align : null,
b : null,
u : null,
s : null,
i : null,
css : null,
tdcss : null
}, obj);
cs[y] = Ext.apply({}, obj);
og.colSetting[y] = o;
var md = {
colSetting : {}
};
md.colSetting[y] = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
this.put2ModifiedCache("createUpdate", {
x : 0,
y : y,
data : this.getModifiedData(0, y)
});
},
onCellChangeFn : function(x, y, obj) {
if (this.data.rowNum < x) {
this.data.rowNum = x;
}
if (this.data.colNum < y) {
this.data.colNum = y;
}
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = rows[x][y] || {};
var cell = rows[x][y];
var og = {
rows : {}
};
og.rows[x] = {};
var o = Ext.apply({
'origin-data' : null,
result : null,
data : null,
bg : null,
bb : null,
br : null,
color : null,
'font-size' : null,
'word-wrap' : null,
'font-family' : null,
'text-align' : null,
align : null,
wrap : null,
b : null,
u : null,
s : null,
i : null,
css : null,
filter : null
}, cell);
delete o.tdcss;
var n = Ext.apply({
'origin-data' : null,
result : null,
data : null,
bg : null,
bb : null,
br : null,
color : null,
'font-size' : null,
'word-wrap' : null,
'font-family' : null,
'text-align' : null,
align : null,
wrap : null,
b : null,
u : null,
s : null,
i : null,
css : null,
tdcss : null,
filter : null
}, obj);
rows[x][y] = Ext.apply({
tdcss : rows[x][y].tdcss
}, obj);
og.rows[x][y] = o;
var md = {
rows : {}
};
md.rows[x] = {};
md.rows[x][y] = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
obj = obj || {};
this.setCellData(x, y, obj.data, true);
},
onAttributeChangeFn : function(x, y, pairs) {
if (this.data.rowNum < x) {
this.data.rowNum = x;
}
if (this.data.colNum < y) {
this.data.colNum = y;
}
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = rows[x][y] || {};
var cell = rows[x][y];
var og = {
rows : {}
};
og.rows[x] = {};
var o = {}, n = {};
for (var i = 0, len = pairs.length; i < len; i++) {
var pair = pairs[i];
var name = pair[0];
var value = pair[1];
o[name] = cell[name];
n[name] = value;
cell[name] = value;
}
og.rows[x][y] = o;
var md = {
rows : {}
};
md.rows[x] = {};
md.rows[x][y] = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
},
onColAttributeChangeFn : function(y, pairs) {
if (this.data.colNum < y) {
this.data.colNum = y;
}
var cs = this.data.colSetting;
cs[y] = cs[y] || {};
var col = cs[y];
var og = {
colSetting : {}
};
var o = {}, n = {};
for (var i = 0, len = pairs.length; i < len; i++) {
var pair = pairs[i];
var name = pair[0];
var value = pair[1];
o[name] = col[name];
n[name] = value;
col[name] = value;
}
og.colSetting[y] = o;
var md = {
colSetting : {}
};
md.colSetting[y] = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
this.put2ModifiedCache("createUpdate", {
x : 0,
y : y,
data : this.getModifiedData(0, y)
});
},
onRowAttributeChangeFn : function(x, pairs) {
if (this.data.rowNum < x) {
this.data.rowNum = x;
}
var rs = this.data.rowSetting;
rs[x] = rs[x] || {};
var rowcss = rs[x];
var og = {
rowSetting : {}
};
var o = {}, n = {};
for (var i = 0, len = pairs.length; i < len; i++) {
var pair = pairs[i];
var name = pair[0];
var value = pair[1];
o[name] = rowcss[name];
n[name] = value;
rowcss[name] = value;
}
og.rowSetting[x] = o;
var md = {
rowSetting : {}
};
md.rowSetting[x] = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
this.put2ModifiedCache("createUpdate", {
x : x,
y : 0,
data : this.getModifiedData(x, 0)
});
},
onWholeAttributeChangeFn : function(pairs) {
this.data.wholeSetting = this.data.wholeSetting || {};
var ws = this.data.wholeSetting;
var og = {
wholeSetting : {}
};
var o = {}, n = {};
for (var i = 0, len = pairs.length; i < len; i++) {
var pair = pairs[i];
var name = pair[0];
var value = pair[1];
o[name] = ws[name];
n[name] = value;
ws[name] = value;
}
og.wholeSetting = o;
var md = {
wholeSetting : {}
};
md.wholeSetting = n;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
this.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : this.getModifiedData(0, 0)
});
},
onProjectFn : function(ds, pos, minOffset, maxOffset) {
var project = this.data.project;
var minx = pos.x + minOffset.ox, miny = pos.y + minOffset.oy, maxx = pos.x
+ maxOffset.ox, maxy = pos.y + maxOffset.oy;
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var id = i + "-" + j;
project[id] = project[id] || {};
project[id][pos.x + "-" + pos.y] = {
x : pos.x,
y : pos.y
};
}
}
},
onDeprojectFn : function(ds, x, y) {
var id = x + "-" + y;
var project = this.data.project;
for (var p in project) {
var c = project[p];
delete c[id];
if (Ext.ss.common.Mask.isEmptyObject(c)) {
delete project[p];
}
}
},
clone2 : function(dest, origin, expt) {
var orows = origin.rows;
if (orows) {
dest.rows = dest.rows || {};
var drows = dest.rows;
for (var x in orows) {
drows[x] = drows[x] || {};
for (var y in orows[x]) {
drows[x][y] = drows[x][y] || {};
Ext.apply(drows[x][y], this.deepClone(orows[x][y]));
}
}
}
var oSet = origin.rowSetting;
var dSet;
if (oSet) {
dest.rowSetting = dest.rowSetting || {};
dSet = dest.rowSetting;
for (var p in oSet) {
dSet[p] = dSet[p] || {};
Ext.apply(dSet[p], oSet[p]);
}
}
oSet = origin.colSetting;
if (oSet) {
dest.colSetting = dest.colSetting || {};
dSet = dest.colSetting;
for (var p in oSet) {
dSet[p] = dSet[p] || {};
Ext.apply(dSet[p], oSet[p]);
}
}
oSet = origin.wholeSetting;
if (oSet) {
dest.wholeSetting = dest.wholeSetting || {};
dSet = dest.wholeSetting;
Ext.apply(dSet, oSet);
}
oSet = origin.freezeRange;
if (oSet) {
dest.freezeRange = dest.freezeRange || {};
dSet = dest.freezeRange;
for (var p in oSet) {
dSet[p] = dSet[p] || {};
Ext.apply(dSet[p], oSet[p]);
}
}
dest.splitFlag = Ext.ss.common.Mask.copy(origin.splitFlag);
if (origin.clearspan) {
dest.clearspan = Ext.apply({}, origin.clearspan);
}
dest.applyFlag = origin.applyFlag;
dest.action = origin.action;
dest.sheetIndex = origin.sheetIndex;
dest.x = origin.x;
dest.y = origin.y;
},
doChange : function(data) {
var clearspan = data.clearspan;
if (clearspan) {
this.clearSpan(clearspan);
}
var action = data.action, type = data.type;
var applyFlag = data.applyFlag, ss = this.spreadsheet;
if (applyFlag) {
Ext.apply(this.data, data);
delete this.data.applyFlag;
} else if ("delete-row" == action) {
if ("undo" == type) {
for (var i = 0; i < data.span; i++) {
this.insertRow(data.row, "above", true);
}
if (data.deletedRowSetting || data.deletedRows) {
var obj = this.deepClone({
rowSetting : data.deletedRowSetting,
rows : data.deletedRows
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
} else {
this.deleteRow(data.row, data.span, true);
if (data.changedRowSetting || data.changedRows) {
var tmpObj = this.deepClone({
rowSetting : data.changedRowSetting,
rows : data.changedRows
});
this.clone2(this.data, tmpObj);
this.syncModifiedCache(tmpObj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
}
} else if ("delete-col" == action) {
if ("undo" == type) {
for (var i = 0; i < data.span; i++) {
this.insertCol(data.col, "before", true);
}
if (data.deletedColSetting || data.deletedCols) {
var obj = this.deepClone({
colSetting : data.deletedColSetting,
rows : data.deletedCols
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
} else {
this.deleteCol(data.col, data.span, true);
if (data.changedColSetting || data.changedCols) {
var tmpObj = this.deepClone({
colSetting : data.changedColSetting,
rows : data.changedCols
});
this.clone2(this.data, tmpObj);
this.syncModifiedCache(tmpObj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
}
} else if ("insert-row" == action) {
if ("undo" == type) {
this.deleteRow("above" != data.flag ? data.row + 1 : data.row,
1, true);
if (data.changedRowSetting || data.changedRows) {
var obj = this.deepClone({
rowSetting : data.changedRowSetting,
rows : data.changedRows
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
} else {
this.insertRow(data.row, data.flag, true);
if (data.changedRowSetting || data.changedRows) {
var obj = this.deepClone({
rowSetting : data.changedRowSetting,
rows : data.changedRows
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
}
} else if ("insert-col" == action) {
if ("undo" == type) {
this.deleteCol("before" != data.flag ? data.col + 1 : data.col,
1, true);
if (data.changedColSetting || data.changedCols) {
var obj = this.deepClone({
colSetting : data.changedColSetting,
rows : data.changedCols
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
} else {
this.insertCol(data.col, data.flag, true);
if (data.changedColSetting || data.changedCols) {
var obj = this.deepClone({
colSetting : data.changedColSetting,
rows : data.changedCols
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
if (data.formulas) {
var obj = this.deepClone({
rows : data.formulas
});
this.clone2(this.data, obj);
this.syncModifiedCache(obj);
}
}
} else if ("sort" == action) {
if ("undo" == type) {
var olds = data.olds, changes = data.changes, span = data.span, tabId = data.tabId;
this.switchRows(changes, olds, span);
if (!this.saveModifiedCache(false, function() {
this.sortInBackend(tabId, changes, olds, span);
}, this)) {
this.sortInBackend(tabId, changes, olds, span);
}
} else {
var olds = data.olds, changes = data.changes, span = data.span;
this.switchRows(olds, changes, span);
if (!this.saveModifiedCache(false, function() {
this.sortInBackend(tabId, olds, changes, span);
}, this)) {
this.sortInBackend(tabId, olds, changes, span);
}
}
} else if ("add-chart" == action) {
if ("undo" == type) {
var sheetIndex = data.sheetIndex, chartId = data.chartId;
ss.chartManager.deleteChartById(sheetIndex, chartId);
} else {
var sheetIndex = data.sheetIndex, chartId = data.chartId, chartConfig = data.chartConfig;
var tmpObj = Ext.apply({
chartId : chartId
}, chartConfig);
ss.chartManager.generateChartByConfig(tmpObj);
}
this.saveActiveSheet(true);
this.saveExtraInfo();
} else if ("delete-chart" == action) {
if ("undo" == type) {
var sheetIndex = data.sheetIndex, chartId = data.chartId, chartConfig = data.chartConfig;
var tmpObj = Ext.apply({
chartId : chartId
}, chartConfig);
ss.chartManager.generateChartByConfig(tmpObj);
} else {
var sheetIndex = data.sheetIndex, chartId = data.chartId;
ss.chartManager.deleteChartById(sheetIndex, chartId);
}
this.saveActiveSheet(true);
this.saveExtraInfo();
} else if ("set-cfm" == action) {
var cfm = data.cfm;
this.data.conditionFormat = cfm;
this.prepareConditionFormat(cfm, this.data);
this.saveExtraInfo();
ss.renderRange(ss.freezeRange, ss.showRange);
} else {
this.clone2(this.data, data);
this.syncModifiedCache(data);
}
if ("datachange" == action || "clear-all" == action || "wrap" == action
|| "unwrap" == action) {
var sheetIndex = data.sheetIndex, x = data.x, y = data.y;
this.fireEvent("checkformula", sheetIndex, x, y);
}
},
syncModifiedCache : function(data, applyFlag) {
var wholeSetting = data.wholeSetting, colSetting = data.colSetting, rowSetting = data.rowSetting, rows = data.rows;
if (rows) {
for (var x in rows) {
var row = rows[x];
for (var y in row) {
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
}
}
}
if (wholeSetting) {
this.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : this.getModifiedData(0, 0)
});
}
if (rowSetting) {
for (var x in rowSetting) {
this.put2ModifiedCache("createUpdate", {
x : x,
y : 0,
data : this.getModifiedData(x, 0)
});
}
}
if (colSetting) {
for (var y in colSetting) {
this.put2ModifiedCache("createUpdate", {
x : 0,
y : y,
data : this.getModifiedData(0, y)
});
}
}
},
clearSpan : function(span) {
var minx = span.minx, miny = span.miny, maxx = span.maxx, maxy = span.maxy;
var rf, cf;
if (0 == minx || 0 == maxx) {
rf = true;
minx = 1;
maxx = this.data.rowNum - 1;
}
if (0 == miny || 0 == maxy) {
cf = true;
miny = 1;
maxy = this.data.colNum - 1;
}
if (rf && cf) {
delete this.data.rows;
} else {
var rows = this.data.rows;
for (var i = minx; i <= maxx; i++) {
if (rf) {
delete rows[i];
} else {
for (var j = miny; j <= maxy; j++) {
if (rows[i] && rows[i][j]) {
delete rows[i][j];
}
}
}
}
}
},
trace : function(action, actionName) {
if (this.cache) {
this.cache.action = action;
var hStack = this.getActiveHStack();
if (hStack.max - hStack.start >= Ext.ss.CONST.MAX_LEN_OF_HSTACK) {
delete hStack.records[hStack.start++];
}
for (var i = hStack.index + 1, len = hStack.len; i < len; i++) {
delete hStack.records[i];
}
if (actionName) {
this.cache.origin.action = actionName;
this.cache.modified.action = actionName;
}
hStack.records[hStack.index] = this.cache;
hStack.index++;
hStack.max = hStack.index;
delete this.cache;
this.fireEvent("hstackchange", hStack);
}
},
applyChange : function(rd, hStack) {
var ss = this.spreadsheet;
var fr = this.data.freezeRange;
var splitFlag = this.data.splitFlag;
ss.setupRange(fr, splitFlag);
var sm = ss.sm;
var selectedStart = rd.selectedStart;
var selectedEnd = rd.selectedEnd;
var focusCell = rd.focusCell;
if (selectedStart && selectedEnd) {
Ext.apply(sm.selectedStart, selectedStart);
Ext.apply(sm.selectedEnd, selectedEnd);
}
if (focusCell) {
Ext.apply(sm.focusCell, focusCell);
}
sm.handleFocus(sm.focusCell.x, sm.focusCell.y, true);
sm.adjustSelected();
sm.fireEvent("renderBorder");
this.fireEvent("hstackchange", hStack);
},
undo : function(count) {
count = count || 1;
var hStack = this.getActiveHStack();
var flag = false, rd;
for (var i = 0; i < count; i++) {
if (hStack.start < hStack.index) {
flag = true;
hStack.index--;
var index = hStack.index;
rd = hStack.records[index];
var origin = rd.origin;
this.doChange(origin);
}
}
if (flag) {
this.applyChange(rd, hStack);
}
},
redo : function(count) {
count = count || 1;
var hStack = this.getActiveHStack();
var flag = false, rd;
for (var i = 0; i < count; i++) {
if (hStack.max > hStack.index) {
flag = true;
var index = hStack.index;
rd = hStack.records[index];
hStack.index++;
var modified = rd.modified;
this.doChange(modified);
}
}
if (flag) {
this.applyChange(rd, hStack);
}
},
add2Modified : function(obj, applyFlag) {
this.cache = this.cache || {
origin : {},
modified : {}
};
if (obj.focusCell) {
this.cache.focusCell = Ext.apply({}, obj.focusCell);
}
if (obj.selectedStart) {
this.cache.selectedStart = Ext.apply({}, obj.selectedStart);
}
if (obj.selectedEnd) {
this.cache.selectedEnd = Ext.apply({}, obj.selectedEnd);
}
if (applyFlag) {
this.cache.origin = Ext.apply({}, obj.origin);
this.cache.modified = Ext.apply({}, obj.modified);
} else {
this.clone2(this.cache.origin, obj.origin, {
chartSet : true
});
this.clone2(this.cache.modified, obj.modified, {
chartSet : true
});
}
},
getDefaultFreezeRange : function() {
return {
row : {
start : 1,
end : 0,
len : 0
},
col : {
start : 1,
end : 0,
len : 0
}
};
},
getDefaultShowRange : function() {
return {
row : {
start : 1,
end : 20,
len : 20
},
col : {
start : 1,
end : 12,
len : 12
}
};
},
generateData : function(name) {
var rows = {};
return {
name : name,
rowNum : 101,
colNum : 27,
freezeRange : this.getDefaultFreezeRange(),
showRange : this.getDefaultShowRange(),
focusCell : {
x : 1,
y : 1
},
selectedStart : {
x : 1,
y : 1
},
selectedEnd : {
x : 1,
y : 1
},
wholeSetting : {},
rowSetting : {},
colSetting : {},
rows : rows,
project : {},
footerWidth : 500
};
},
loadSheets : function(clear) {
if (clear || !this.data) {
this.sheets = [];
for (var i = 0; i < 3; i++) {
this.sheets.push(this.generateData("Sheet" + (i + 1)));
}
this.data = this.sheets[0];
this.resetModifiedCache();
this.resetHStack();
this.setActiveSheet(0, true);
} else {
this.resetHStack();
}
return this.data;
},
saveActiveSheet : function(suspendUpdate2Backend, callback, scope) {
var ss = this.spreadsheet;
var sm = ss.sm;
var sheets = this.sheets;
var a = this.activeSheet, asheet = sheets[a];
asheet.focusCell = Ext.apply({}, sm.focusCell);
asheet.selectedStart = Ext.apply({}, sm.selectedStart);
asheet.selectedEnd = Ext.apply({}, sm.selectedEnd);
asheet.freezeRange = ss.copyRange(ss.freezeRange);
asheet.showRange = ss.copyRange(ss.showRange);
asheet.charts = ss.chartManager.getCharts(a);
asheet.splitFlag = Ext.ss.common.Mask.copy(ss.splitFlag);
asheet.footerWidth = ss.footerWidth;
if (!suspendUpdate2Backend) {
this.saveModifiedCache(true, callback, scope);
} else if (callback) {
callback.call(scope);
}
},
readActiveSheet : function(callback, scope) {
var ss = this.spreadsheet;
var sm = ss.sm;
var sheets = this.sheets;
var sheet = sheets[this.activeSheet];
var fn = function(sheet) {
this.data = sheet;
var data = this.data;
ss.splitFlag = data.splitFlag || false;
ss.footerWidth = data.footerWidth;
ss.setFreezeRange(data.freezeRange);
ss.setShowRange(data.showRange);
sm.focusCell = Ext.apply({}, data.focusCell);
sm.selectedStart = Ext.apply({}, data.selectedStart);
sm.selectedEnd = Ext.apply({}, data.selectedEnd);
sm.adjustFocused();
sm.adjustSelected();
if (callback) {
callback.call(scope);
}
};
if (sheet.loaded || ss.isEmptyFile()) {
fn.call(this, sheet);
} else {
this.loadTab(this.activeSheet, fn, this);
}
},
getNewSheetName : function() {
var len = this.sheets.length;
var index = len, name, flag = true;
while (flag) {
flag = false;
name = "Sheet" + index;
for (var i = 0; i < len; i++) {
var sheet = this.sheets[i];
if (sheet.name == name) {
flag = true;
break;
}
}
index++;
}
return name;
},
loadTab : function(tabIndex, callback, scope) {
var sheet = this.sheets[tabIndex];
if (this.disableCallingBackEnd) {
Ext.apply(sheet, this.prepareTab(sheet, tabIndex));
sheet.loaded = true;
callback.call(this, sheet);
} else {
var isPublicView = Ext.get("publicView").getAttribute("value");
var loadTabUrl = this.loadTabUrl;
if (isPublicView && isPublicView == "yes") {
loadTabUrl = this.loadPublicTabUrl;
}
Ext.Ajax.request({
timeout : 300000,
url : loadTabUrl,
params : {
tabId : sheet.tabId
},
success : function(response, options) {
var json = Ext.decode(response.responseText);
Ext.apply(sheet, this.prepareTab(json));
sheet.loaded = true;
callback.call(this, sheet);
},
scope : this
});
}
},
changeSheet : function(index, callback, scope) {
this.saveActiveSheet();
this.setActiveSheet(index);
var me = this;
this.readActiveSheet(function() {
me.fireEvent("switchsheet", me);
callback.apply(scope, arguments);
}, scope);
},
getConvertData : function(x, y, cell, sheetIndex, recal) {
var v, oldV;
try {
var ret;
if (false != Ext.type(cell.data)) {
ret = this.try2BeNumber(cell.data);
if (Ext.isNumber(ret)) {
cell.data = ret.data;
if (ret.format) {
cell.format = ret.format;
}
}
}
var isFormula = false;
if (Ext.isDefined(cell['origin-data'])) {
isFormula = Ext.ss.common.Mask.isFormula(cell['origin-data']);
} else {
isFormula = Ext.ss.common.Mask.isFormula(cell.data);
}
oldV = cell.result;
var originData = cell['origin-data'];
if (recal || false == Ext.type(oldV) || !isFormula) {
if (false !== Ext.type(cell.oldResult)) {
oldV = cell.oldResult;
delete cell.oldResult;
}
v = this.convert(x, y, cell.data, originData, sheetIndex);
} else {
v = oldV;
}
} catch (e) {
v = Ext.ss.common.Mask.getErrorCode(cell['origin-data'], e);
}
if (isFormula) {
this.data.rows[x] = this.data.rows[x] || {};
this.data.rows[x][y] = this.data.rows[x][y] || {};
this.data.rows[x][y].result = v;
delete this.data.rows[x][y].oldResult;
this.data.rows[x][y].formula_version = "1.0";
if (oldV != v) {
var data = this.getModifiedData(x, y);
this.put2ModifiedCache("createUpdate", {
tabId : Ext.isNumber(sheetIndex)
? this.sheets[sheetIndex].tabId
: undefined,
x : x,
y : y,
data : data
});
}
}
return v;
},
prepareFBox : function() {
var ds = this;
var FBox = {};
ds._fboxScope = {};
for (var p in Ext.ss.FunctionBox) {
var fn = Ext.ss.FunctionBox[p];
if (Ext.isFunction(fn)) {
FBox[p] = (function() {
var args = [];
for (var i = 0, len = arguments.length; i < len; i++) {
args.push(arguments[i]);
}
args.push(this.scope.sheetIndex);
args.push(this.scope.x);
args.push(this.scope.y);
args.push(this.scope.ds);
return this.originFn.apply(Ext.ss.FunctionBox, args);
}).createDelegate({
scope : ds._fboxScope,
originFn : fn
});
}
}
ds._FBox = FBox;
},
convert : function(x, y, data, origin, sheetIndex, useResult) {
var ds = this;
var sIndex;
if (false == Ext.type(sheetIndex)) {
sIndex = ds.activeSheet;
} else {
sIndex = sheetIndex;
}
ds.ISIFormulaIndex = 0;
if (Ext.ss.common.Mask.isFormula(data)) {
x = parseInt(x);
y = parseInt(y);
var id;
id = sIndex + "-" + x + "-" + y;
origin = origin || data;
var cellObj = ds.getCellObj(x, y, sheetIndex) || {};
var isISIFormula = "ISFormula" == cellObj.type
|| this.isISFormula(origin);
if (Ext.isArray(this.ISFormulaQueue) && isISIFormula
&& !this.escapeISFormulaQueue) {
var idIndex = this.ISFormulaQueue.indexOf(id);
if (-1 == idIndex) {
this.ISFormulaQueue.push(id);
}
if (!ds.updteISFormulaFromServer
&& cellObj.lastOriginData == cellObj['origin-data']) {
var result = cellObj.oldResult;
if (false == Ext.type(result)) {
result = cellObj.result;
}
ds.sheets[sIndex].rows[x][y].result = result;
return result;
}
}
try {
this.formulaRelatedMap = this.formulaRelatedMap || {};
this.formulaRelatedMap[id] = true;
data = data.toString();
if (data.indexOf("FBox[\"text\"](") != -1
&& data.indexOf("&") != -1) {
return Ext.ss.common.DataSourceHelper
.calFormulaTextWithAnd(data, {
ds : this,
x : x,
y : y,
sheetIndex : sheetIndex
});
}
if (data.indexOf("FBox[\"countif\"](") != -1
&& data.indexOf("&") != -1) {
data = data.replace(/&/g, ",");
}
if (Ext.ss.common.Mask.CALLING_FUNCTION[id]) {
throw "SS_ERROR_LOOP";
} else {
Ext.ss.common.Mask.CALLING_FUNCTION[id] = true;
}
if (false != Ext.type(useResult)) {
var result = cellObj.result;
if (false != Ext.type(result)) {
delete Ext.ss.common.Mask.CALLING_FUNCTION[id];
return useResult;
}
}
if (!isISIFormula || ds.updteISFormulaFromServer) {
var frows = ds.sheets[sIndex].rows;
if (frows[x] && frows[x][y]) {
delete frows[x][y].status;
}
}
var str = data.slice(1);
var ds = this;
Ext.apply(ds._fboxScope, {
sheetIndex : sheetIndex,
x : x,
y : y,
ds : ds,
isISIFormula : isISIFormula
});
var FBox = ds._FBox;
str = Ext.ss.common.DataSourceHelper.reCheckDoubleQuote(str);
str = Ext.ss.common.DataSourceHelper.reCheckComma(str);
str = Ext.ss.common.DataSourceHelper.reCheckBraces(str);
var TRUE = true, FALSE = false, True = true, False = false;
var nameRanges = ds.fileExtraInfo.nameRanges;
if (nameRanges) {
str = Ext.ss.common.DataSourceHelper.convertNameMgr2Str(
nameRanges, str, x, y);
}
var r = eval(str);
if (Ext.isObject(r)) {
r = eval("FBox.getCellByOffset({sheetIndex:" + r.sheetIndex
+ ",ox:" + r.ox + ",oy:" + r.oy + ",oex:" + r.oex
+ ",oey:" + r.oey + "})");
}
delete ds._fboxScope.ds;
delete Ext.ss.common.Mask.CALLING_FUNCTION[id];
if (r.toString() == "Infinity") {
throw "SS_ERROR_INFINITY";
}
if (r.toString() == "#N/A") {
throw "SS_ERROR_NA";
}
if (true === r) {
return "TRUE";
} else if (false === r) {
return "FALSE";
} else if (/^[A-Za-z_]+$/i.test(str)) {
throw "SS_ERROR_REF";
}
var num = Number(r);
if (Ext.isNumber(num) && false != Ext.type(r)) {
var checkQuoteFormat = Ext.ss.common.Helper
.fmFormatWithQuote(str);
if (checkQuoteFormat == false) {
throw "SS_ERROR_REF";
}
} else {
var separatedObjs = [];
Ext.ss.common.DataSourceHelper.recursiveMathOpers(str,
separatedObjs);
if (separatedObjs.length > 1) {
var operResult = Ext.ss.common.DataSourceHelper
.calculateSeparatedObjs(separatedObjs, {
ds : this,
x : x,
y : y,
sheetIndex : sheetIndex
});
if (operResult) {
return operResult;
}
}
separatedObjs.length = 0;
}
if ("NaN" == r.toString()) {
return "#VALUE!";
}
if (Ext.ss.common.Mask.isEmptyStr(r)) {
return r;
}
if (Ext.isNumber(num) && false != Ext.type(r)) {
if (-1 != r.toString().indexOf(".")
&& str.indexOf("FBox[\"text\"](") == -1) {
r = Ext.util.Format.round(num, 15);
}
}
if (r == "Infinity") {
throw "SS_ERROR_INFINITY";
}
return r;
} catch (e) {
Ext.ss.common.Mask.CALLING_FUNCTION = {};
throw e;
}
} else {
var frows = ds.sheets[sIndex].rows;
if (frows[x] && frows[x][y]) {
delete frows[x][y].status;
}
return false == Ext.type(data) ? "" : data;
}
},
wrapAlign : function(data, style, align, rowIndex, colIndex) {
if ("middle" != align && "bottom" != align
|| Ext.ss.common.Mask.isFullImage(data)) {
return data;
}
style = style || "";
var rows = this.data.rows;
var row = rows[rowIndex] || {};
var cell = row[colIndex] || {};
var sy = colIndex, ey = colIndex;
if (cell.wrap) {
sy = cell.wrap.miny;
ey = cell.wrap.maxy;
}
var w = this.getWidth(sy, ey);
w -= this.xpaddingOffset;
var css = rows[rowIndex][colIndex].css || "";
if ("middle" == align) {
data = "
"
+ " -1
? Ext.ss.CONST.cssHash[4]
: "")
+ "\" style=\"padding:0px;vertical-align:middle;border:none;\"> "
+ data
+ " |
";
} else if ("bottom" == align) {
data = "
"
+ " -1
? Ext.ss.CONST.cssHash[4]
: "")
+ "\" style=\"padding:0px;vertical-align:bottom;border:none;\"> "
+ data
+ " |
";
}
return data;
},
packData : function(x, y, data) {
try {
var cell = this.data.rows[x][y];
if (cell.lp && cell.rp) {
data = cell.lp + data + cell.rp;
}
var style = cell.style;
var align = cell.align;
return this.wrapAlign(data, style, align, x, y);
} catch (e) {
return data;
}
},
wrapBIUS : function(rowIndex, colIndex, obj, recal) {
var data = this.getConvertData(rowIndex, colIndex, obj, undefined,
recal);
if (false == Ext.type(data)) {
data = "";
}
if (!obj['text-align']) {
var tmp = obj['origin-data'] || obj.data;
var align = Ext.ss.common.DataSourceHelper.guessTextAlign(tmp);
obj['text-align'] = align ? "text-align:" + align + ";" : "";
}
obj['origin-data'] = obj['origin-data'] || obj.data;
obj.data = data;
this.prepareFormat(obj, obj.format);
data = obj.data;
if (obj.b) {
data = "
" + data + "";
}
if (obj.i) {
data = "
" + data + "";
}
if (obj.u) {
data = "
" + data + "";
}
if (obj.s) {
data = "
" + data + "";
}
return data;
},
makeupData : function(rowIndex, colIndex, obj, recal) {
var data = this.wrapBIUS(rowIndex, colIndex, obj, recal);
var style = obj.color + ";" + obj['font-size'] + ";"
+ obj['font-family'] + ";" + obj['text-align'] + ";"
+ obj['word-wrap'];
data = this.wrapAlign(data, style, obj.align, rowIndex, colIndex);
return data;
},
wrapupData : function(wrap, x, y, obj, so, recal) {
var ss = this.spreadsheet;
var row = this.data.rows[wrap.minx];
if (row) {
var cell = row[wrap.miny];
if (cell) {
obj.lp = cell.lp;
obj.rp = cell.rp;
obj.data = cell.data;
}
}
obj.data = obj.data || "";
var minx = wrap.minx, miny = wrap.miny, maxx = wrap.maxx, maxy = wrap.maxy;
var data = this.makeupData(minx, miny, obj, recal);
var w, h, l, t;
w = this.getSpanWidth(miny, maxy) - ss.xpaddingOffset;
h = this.getSpanHeight(minx, maxx) - ss.ypaddingOffset;
l = -1 * this.getSpanWidth(miny, y - 1);
t = -1 * this.getSpanHeight(minx, x - 1);
if (so) {
var sx = so.sx;
var sy = so.sy;
if (sy > miny) {
l -= this.getSpanWidth(miny, sy - 1);
}
if (sx > minx) {
t -= this.getSpanHeight(minx, sx - 1);
}
}
var wordWrap = obj['word-wrap'];
if (wordWrap) {
wordWrap += "white-space:normal;";
}
data = "
" + data
+ "
";
return data;
},
getBgColor : function(c, rc, cc, wc) {
var color = c;
if (!c || "" == c) {
color = rc;
if (!rc || "" == rc) {
color = cc;
if (!cc || "" == cc) {
color = wc;
if (!wc || "" == wc) {
color = "";
}
}
}
}
return color;
},
isVisible : function(o) {
return !(o && "none" == o.display);
},
checkSheetIndexValid : function(sheetIndex) {
if (!(0 <= sheetIndex || undefined == sheetIndex || null == sheetIndex || "" == sheetIndex)) {
throw "#PARAM_ERROR";
}
},
getCellValue : function(rowIndex, colIndex, sheetIndex, notAddToMap) {
var fboxScope = this._fboxScope;
var isCallByISIFormula = fboxScope.isISIFormula;
if (fboxScope.ds) {
var fsheetIndex = fboxScope.sheetIndex;
if (false == Ext.type(fsheetIndex) || "" === Ext.type(fsheetIndex)) {
fsheetIndex = this.activeSheet;
}
var frows = this.sheets[fsheetIndex].rows;
var frow = frows[fboxScope.x];
if (!frow) {
frows[fboxScope.x] = {};
frow = frows[fboxScope.x];
}
var fcell = frow[fboxScope.y];
if (!fcell) {
frow[fboxScope.y] = {};
fcell = frow[fboxScope.y];
}
fcell.status = "dynamic";
}
var rows = this.data.rows, mapId;
if (Ext.isNumber(sheetIndex) && 0 <= sheetIndex
&& sheetIndex < this.sheets.length) {
rows = this.sheets[sheetIndex].rows;
mapId = sheetIndex + "-" + rowIndex + "-" + colIndex;
} else {
mapId = this.activeSheet + "-" + rowIndex + "-" + colIndex;
}
if (!notAddToMap && this.formulaRelatedMap) {
this.formulaRelatedMap[mapId] = true;
}
if (rows[rowIndex] && rows[rowIndex][colIndex]) {
var cell = rows[rowIndex][colIndex];
if (cell) {
if (cell.wrap
&& !(cell.wrap.minx == rowIndex && cell.wrap.miny == colIndex)) {
return;
} else if (Ext.isDefined(cell.data)) {
var val = this.convert(rowIndex, colIndex, cell.data,
cell['origin-data'], sheetIndex, cell.result);
if (isCallByISIFormula) {
var newObj = this.getCell(rowIndex, colIndex);
if (newObj['origin-data']
&& /^=ISIF\(.+\)$/gi
.test(newObj['origin-data'])) {
var isifParams = newObj.ISIParams;
if (1 == isifParams.length) {
var pms = isifParams[0][1];
var pmLen = pms.length;
if (1 == pmLen) {
if (/(^[0-9]+$)|(^"[0-9]+"$)|(^'[0-9]+'$)/gi
.test(pms[0])) {
return pms[0];
}
} else if (3 == pmLen) {
if (/(^[0-9]+$)|(^"[0-9]+"$)|(^'[0-9]+'$)/gi
.test(pms[0])
&& /^INF$/gi.test(pms[1])
&& Ext.isString(pms[2])) {
return pms[0];
}
}
}
}
}
return val;
}
}
}
},
getCell : function(rowIndex, colIndex, so, recal) {
var ss = this.spreadsheet;
var fr = ss.freezeRange;
var colcss = this.data.colSetting[colIndex] || {};
var rowcss = this.data.rowSetting[rowIndex] || {};
var wholecss = this.data.wholeSetting || {};
var row = this.data.rows[rowIndex] || {};
var obj = {
data : "",
filter : false
};
var cell = row[colIndex];
var fn = function(obj, rowcss, colcss, wholecss) {
obj.b = this.getAttribute(obj, rowcss, colcss, wholecss, "b");
obj.i = this.getAttribute(obj, rowcss, colcss, wholecss, "i");
obj.u = this.getAttribute(obj, rowcss, colcss, wholecss, "u");
obj.s = this.getAttribute(obj, rowcss, colcss, wholecss, "s");
obj.align = this.getAttribute(obj, rowcss, colcss, wholecss,
"align");
obj.color = this.getAttribute(obj, rowcss, colcss, wholecss,
"color");
obj['font-size'] = this.getAttribute(obj, rowcss, colcss, wholecss,
"font-size");
obj['word-wrap'] = this.getAttribute(obj, rowcss, colcss, wholecss,
"word-wrap");
obj['font-family'] = this.getAttribute(obj, rowcss, colcss,
wholecss, "font-family");
obj['text-align'] = this.getAttribute(obj, rowcss, colcss,
wholecss, "text-align");
obj.bg = this.getAttribute(obj, rowcss, colcss, wholecss, "bg");
obj.css = this.getAttribute(obj, rowcss, colcss, wholecss, "css");
obj.tdcss = this.getAttribute(obj, rowcss, colcss, wholecss,
"tdcss");
obj.br = this.getAttribute(obj, rowcss, colcss, wholecss, "br",
"x-spreadsheet-right-silver");
obj.bb = this.getAttribute(obj, rowcss, colcss, wholecss, "bb",
"x-spreadsheet-bottom-silver");
obj.display = this.getAttribute(obj, rowcss, colcss, wholecss,
"display", "");
obj.format = this.getAttribute(obj, rowcss, colcss, wholecss,
"format", "");
};
if (row && cell) {
cell = Ext.apply({}, cell);
var wrap = cell.wrap;
if (wrap) {
var rt = this.wrapData(rowIndex, colIndex, wrap);
Ext.apply(obj, cell);
Ext.apply(obj, rt);
obj.data = this.wrapupData(wrap, rowIndex, colIndex, obj, so,
recal);
if (rowIndex != wrap.minx || colIndex != wrap.miny) {
cell.bg = obj.bg;
delete cell.data;
}
if (!(rowIndex == wrap.minx && colIndex == wrap.maxy)) {
obj.filter = false;
}
} else {
Ext.apply(obj, cell);
fn.call(this, obj, rowcss, colcss, wholecss);
obj.data = this.makeupData(rowIndex, colIndex, obj, recal);
}
} else {
fn.call(this, obj, rowcss, colcss, wholecss);
}
if (!ss.splitFlag) {
if (rowIndex == fr.row.end) {
obj.bb = " x-spreadsheet-bottom-freeze";
}
if (colIndex == fr.col.end) {
obj.br = " x-spreadsheet-right-freeze";
}
}
obj.css = " x-spreadsheet-body-cursor " + obj.css;
obj.size = this.getSizeStyle(rowIndex, colIndex);
if (obj['word-wrap']) {
obj['word-wrap'] += "white-space:normal;";
}
var cfmLookup = this.data.cfmLookup;
if (cfmLookup) {
var id = [this.activeSheet, rowIndex, colIndex].join("-");
var colId = [this.activeSheet, 0, colIndex].join("-");
var rowId = [this.activeSheet, rowIndex, 0].join("-");
var shId = [this.activeSheet, 0, 0].join("-");
var cfmIndex = cfmLookup[id];
if (false === Ext.type(cfmIndex)) {
cfmIndex = cfmLookup[rowId];
}
if (false === Ext.type(cfmIndex)) {
cfmIndex = cfmLookup[colId];
}
if (false === Ext.type(cfmIndex)) {
cfmIndex = cfmLookup[shId];
}
if (false !== Ext.type(cfmIndex)) {
var cfm = this.data.conditionFormat[cfmIndex];
this.checkConditionFormat(obj, cfm);
}
}
return obj;
},
checkConditionFormat : function(cell, conditionFormat) {
var data = cell.data;
var cfm = conditionFormat;
if (cfm) {
var option = cfm.opt, target = cfm.tgt;
var matched = false;
if ("include" == option) {
if (data) {
data = data.toString();
if (-1 !== data.indexOf(target)) {
matched = true;
}
}
} else if ("exclude" == option) {
if (!data) {
matched = true;
} else {
data = data.toString();
if (-1 === data.indexOf(target)) {
matched = true;
}
}
} else if ("exact" == option) {
if (data) {
data = data.toString();
if (data === target.toString()) {
matched = true;
}
}
} else if ("empty" == option) {
if (!data) {
matched = true;
}
} else if ("gt" == option) {
data = Number(data);
if (Ext.isNumber(data) && NaN !== data) {
target = Number(target);
if (data > target) {
matched = true;
}
}
} else if ("lt" == option) {
data = Number(data);
if (Ext.isNumber(data) && NaN !== data) {
target = Number(target);
if (data < target) {
matched = true;
}
}
} else if ("eq" == option) {
data = Number(data);
if (Ext.isNumber(data) && NaN !== data) {
target = Number(target);
if (data === target) {
matched = true;
}
}
} else if ("ne" == option) {
data = Number(data);
if (Ext.isNumber(data) && NaN !== data) {
target = Number(target);
if (data !== target) {
matched = true;
}
}
} else if ("bw" == option) {
data = Number(data);
if (Ext.isNumber(data) && NaN !== data) {
var min = Number(cfm.min);
var max = Number(cfm.max);
if (data >= min && data <= max) {
matched = true;
}
}
} else if ("nbw" == option) {
data = Number(data);
if (Ext.isNumber(data) && NaN !== data) {
var min = Number(cfm.min);
var max = Number(cfm.max);
if (!(data >= min && data <= max)) {
matched = true;
}
}
}
if (matched) {
if (cfm.color) {
cell.color = "color:" + cfm.color + ";";
}
if (cfm.bgc) {
cell.bg = cfm.bgc;
}
}
}
},
getAttribute : function(o, r, c, w, n, df) {
return o[n] || r[n] || c[n] || w[n] || df || "";
},
getSizeStyle : function(x, y) {
var s = "";
var row = this.data.rowSetting[x];
if (row && (row.ch || 0 == row.ch)) {
if (Ext.isIE && row.ch) {
s += "height:" + row.ch + "px;";
} else {
s += "height:" + row.ch + "px;";
}
}
var col = this.data.colSetting[y];
if (col && (col.cw || 0 == col.cw)) {
s += "width:" + col.cw + "px;";
}
return s;
},
getHeight : function(start, end) {
if (0 != start) {
start = start || 1;
}
if (0 != end) {
end = end || this.data.rowNum;
}
var height = 0;
for (var j = start; j <= end; j++) {
height += this.getRowHeight(j);
}
return height;
},
getNameFromPos : function(pos) {
return this.getLetter(pos.y) + pos.x;
},
getLetter : function(index) {
return Ext.ss.common.DataSourceHelper.getLetter(index);
},
getLetter22 : function(index) {
var idx = 0;
var len = 1;
while (idx <= index) {
idx += Math.pow(26, len);
len++;
}
len--;
var arr = [];
while (0 <= len) {
var base = Math.pow(26, len);
arr.push(Math.floor(index / base));
index = index % base;
len--;
}
var temp = [];
for (var i = 0, len = arr.length; i < len; i++) {
var it = arr[i];
if (0 != it) {
temp.push(String.fromCharCode(it + 64));
} else if (len - 1 == i) {
var last = arr[i - 1] - 1;
var ch = "Z";
if (0 < last) {
ch = String.fromCharCode(last + 64) + ch;
}
temp[temp.length - 1] = ch;
}
}
return temp.join("");
},
getHeadText : function(index) {
var colSetting = this.data.colSetting;
var rowcss = this.data.rowSetting[0] || {}, colcss = colSetting[index]
|| {}, wholecss = this.data.wholeSetting;
this.data.rows[0] = this.data.rows[0] || {};
var htext = this.getLetter(index);
this.data.rows[0][index] = this.data.rows[0][index] || {};
this.data.rows[0][index].data = 0 == index ? "" : htext
+ "
";
var cell = this.data.rows[0][index] || {};
var obj = Ext.apply({
bg : "",
css : "x-spreadsheet-header-cursor",
bb : "x-spreadsheet-bottom-freeze",
br : "x-spreadsheet-right-freeze",
filter : false
}, cell);
obj.tdcss = this.getAttribute(cell, rowcss, colcss, wholecss, "tdcss");
obj.display = this.getAttribute(cell, rowcss, colcss, wholecss,
"display");
obj.size = this.getSizeStyle(0, index);
obj.css = obj.css || colcss.css;
if (0 < index) {
var lstIndex = index - 1;
if (!this.isVisible(colSetting[lstIndex])) {
obj.css += " x-spreadsheet-col-with-hidden";
}
}
if (colcss.group) {
var cls = "", inner = "";
var group = colcss.group, groupCollapsed = colcss.groupCollapsed;
if (true === groupCollapsed) {
cls += " x-spreadsheet-group-collapsed ";
}
if (group[0] == index) {
cls += " x-spreadsheet-col-group-start ";
inner = "
";
}
if (group[1] == index) {
cls += " x-spreadsheet-col-group-end ";
}
obj.data += "
" + inner + "
";
obj.color = "overflow:visible;";
}
return obj;
},
getLeftText : function(index) {
var rowSetting = this.data.rowSetting;
var rowcss = rowSetting[index] || {}, colcss = this.data.colSetting[0]
|| {}, wholecss = this.data.wholeSetting;
var rows = this.data.rows;
rows[index] = rows[index] || {};
var text, css;
if (0 === index) {
text = "";
css = " x-spreadsheet-index-bg ";
} else {
text = index;
css = "";
}
rows[index][0] = rows[index][0] || {};
rows[index][0].data = text
+ "
";
var cell = rows[index][0];
var obj = Ext.apply({
bg : "",
filter : false,
css : "x-spreadsheet-left-cursor",
br : "x-spreadsheet-right-freeze",
bb : "x-spreadsheet-bottom-freeze"
}, cell);
obj.css = css;
obj.tdcss = this.getAttribute(cell, rowcss, colcss, wholecss, "tdcss");
obj.display = this.getAttribute(cell, rowcss, colcss, wholecss,
"display");
obj.size = this.getSizeStyle(index, 0);
obj.css = obj.css || rowcss.css;
if (0 < index) {
var lstIndex = index - 1;
if (!this.isVisible(rowSetting[lstIndex])) {
obj.css += " x-spreadsheet-row-with-hidden";
}
}
if (rowcss.group) {
var group = rowcss.group, groupCollapsed = rowcss.groupCollapsed;
var cls = "", inner = "";
if (true === groupCollapsed) {
cls += " x-spreadsheet-group-collapsed ";
}
if (group[0] == index) {
cls += " x-spreadsheet-row-group-start ";
inner = "
";
}
if (group[1] == index) {
cls += " x-spreadsheet-row-group-end ";
}
obj.data += "
" + inner + "
";
obj.color = "overflow:visible;";
}
return obj;
},
getOffsetWidth : function(offset, flen, slen, len) {
var width = 0;
width = offset * (len - flen - slen);
return width;
},
getOffsetHeight : function(offset, flen, slen, len) {
var height = 0;
height = offset * (len - flen - slen);
return height;
},
getWidth : function(start, end) {
if (0 != start) {
start = start || 1;
}
if (0 != end) {
end = end || this.data.rowNum;
}
var width = 0;
for (var j = start; j <= end; j++) {
width += this.getColWidth(j);
}
return width;
},
onUpdateCssFn : function(field, pos, proper, v) {
this.data[field][pos] = this.data[field][pos] || {};
var og = {}, md = {};
og[field] = {};
og[field][pos] = {};
og[field][pos][proper] = this.data[field][pos][proper];
md[field] = {};
md[field][pos] = {};
md[field][pos][proper] = v;
this.add2Modified({
origin : og,
modified : md
});
this.data[field][pos][proper] = v;
if ("wholeSetting" == field) {
this.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : this.getModifiedData(0, 0)
});
} else if ("rowSetting" == field) {
this.put2ModifiedCache("createUpdate", {
x : pos,
y : 0,
data : this.getModifiedData(pos, 0)
});
} else if ("colSetting" == field) {
this.put2ModifiedCache("createUpdate", {
x : 0,
y : pos,
data : this.getModifiedData(0, pos)
});
}
},
walkVisibleRow : function(rowStart, span) {
var rowSetting = this.data.rowSetting;
var i = 0, row = rowStart;
if (0 < span) {
while (i < span) {
var o = rowSetting[row++];
if (this.isVisible(o)) {
i++;
}
}
}
while (!this.isVisible(rowSetting[row])) {
row++;
}
return row;
},
walkVisibleCol : function(colStart, span) {
var colSetting = this.data.colSetting;
var i = 0, col = colStart;
if (0 < span) {
while (i < span) {
var o = colSetting[col++];
if (this.isVisible(o)) {
i++;
}
}
}
while (!this.isVisible(colSetting[col])) {
col++;
}
return col;
},
getVisibleRowOffset : function(rowEnd, rowStart) {
var rowSetting = this.data.rowSetting;
var flag = 1;
if (rowStart > rowEnd) {
flag = -1;
var tmp = rowStart;
rowStart = rowEnd;
rowEnd = tmp;
}
var offset = 0;
for (var i = rowStart; i < rowEnd; i++) {
if (this.isVisible(rowSetting[i])) {
offset++;
}
}
return flag * offset;
},
getVisibleColOffset : function(colEnd, colStart) {
var colSetting = this.data.colSetting;
var flag = 1;
if (colStart > colEnd) {
flag = -1;
var tmp = colStart;
colStart = colEnd;
colEnd = tmp;
}
var offset = 0;
for (var i = colStart; i < colEnd; i++) {
if (this.isVisible(colSetting[i])) {
offset++;
}
}
return flag * offset;
},
getRange : function(params) {
var colSetting = this.data.colSetting;
var rowSetting = this.data.rowSetting;
var ss = this.spreadsheet;
if (params.freezeRange) {
this.data.freezeRange = ss.copyRange(params.freezeRange);
}
var freezeRange = this.data.freezeRange;
var hfstart = freezeRange.row.start;
var hfend = freezeRange.row.end;
var lfstart = freezeRange.col.start;
var lfend = freezeRange.col.end;
var rowStart = parseInt(params.rowStart);
var rowEnd = parseInt(params.rowEnd);
var colStart = parseInt(params.colStart);
var colEnd = parseInt(params.colEnd);
var adjustWidth = params.adjustWidth;
var adjustHeight = params.adjustHeight;
if (adjustWidth && adjustHeight) {
var rt = this.calculateShowRange(rowStart, colStart, adjustWidth,
adjustHeight);
colEnd = colStart + rt.colNum - 1;
rowEnd = rowStart + rt.rowNum - 1;
}
var slheader = [];
var lscroller = [];
var sheader = [];
var scroller = [];
var slw = this.lcWidth + this.xpaddingOffset, sw = 0, sh = 0, slh = this.defaultRowHeight
+ this.ypaddingOffset;
var lcvisible = [0], cvisible = [], trvisible = [0], rvisible = [];
for (var i = lfstart; i <= lfend; i++) {
if (this.isVisible(colSetting[i])) {
lcvisible.push(i);
}
}
for (var i = colStart; i <= colEnd; i++) {
if (this.isVisible(colSetting[i])) {
cvisible.push(i);
}
}
for (var i = hfstart; i <= hfend; i++) {
if (this.isVisible(rowSetting[i])) {
trvisible.push(i);
}
}
for (var i = rowStart; i <= rowEnd; i++) {
if (this.isVisible(rowSetting[i])) {
rvisible.push(i);
}
}
for (var i = 0, len = trvisible.length; i < len; i++) {
var row = trvisible[i];
var arr = [];
for (var j = 0, count = lcvisible.length; j < count; j++) {
var col = lcvisible[j];
var o = 0 == row ? this.getHeadText(col) : 0 == col ? this
.getLeftText(row) : this.getCell(row, col);
o.idx = col;
arr.push(o);
}
slheader.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = trvisible.length; i < len; i++) {
var row = trvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = 0 == row ? this.getHeadText(col) : this.getCell(row,
col);
o.idx = col;
arr.push(o);
}
sheader.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = lcvisible.length; j < count; j++) {
var col = lcvisible[j];
var o = 0 == col ? this.getLeftText(row) : this.getCell(row,
col);
o.idx = col;
arr.push(o);
}
lscroller.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = this.getCell(row, col);
o.idx = col;
arr.push(o);
}
scroller.push({
idx : row,
arr : arr
});
}
slw += this.getWidth(lfstart, lfend);
slh += this.getHeight(hfstart, hfend);
sw = this.getWidth(colStart, colEnd);
sh = this.getHeight(rowStart, rowEnd);
if (rowEnd >= this.data.rowNum) {
this.data.rowNum = rowEnd + 1;
}
if (colEnd >= this.data.colNum) {
this.data.colNum = colEnd + 1;
}
var rowNum = rowEnd - rowStart + 1;
var colNum = colEnd - colStart + 1;
return {
slw : slw,
slh : slh,
sw : sw,
sh : sh,
freezeRange : freezeRange,
rowStart : rowStart,
rowNum : rowNum,
rowEnd : rowEnd,
colStart : colStart,
colNum : colNum,
colEnd : colEnd,
slheader : slheader,
lscroller : lscroller,
sheader : sheader,
scroller : scroller
};
},
getURowRange : function(params) {
var colSetting = this.data.colSetting;
var rowSetting = this.data.rowSetting;
var lfstart = params.freezeRange.col.start;
var lfend = params.freezeRange.col.end;
var rowStart = params.rowStart;
var rowEnd = params.rowEnd;
var fillHeight = params.fillHeight;
fillHeight -= this.getRowHeight(0);
if (0 < fillHeight) {
var rowNum = this.calculateRowRange(rowStart, fillHeight);
rowEnd = rowStart + rowNum - 1;
}
var colStart = params.colStart;
var colEnd = params.colEnd;
var lheader = [];
var header = [];
var lcvisible = [0], cvisible = [], rvisible = [0];
for (var i = lfstart; i <= lfend; i++) {
if (this.isVisible(colSetting[i])) {
lcvisible.push(i);
}
}
for (var i = colStart; i <= colEnd; i++) {
if (this.isVisible(colSetting[i])) {
cvisible.push(i);
}
}
for (var i = rowStart; i <= rowEnd; i++) {
if (this.isVisible(rowSetting[i])) {
rvisible.push(i);
}
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = lcvisible.length; j < count; j++) {
var col = lcvisible[j];
var o = 0 == row ? this.getHeadText(col) : 0 == col ? this
.getLeftText(row) : this.getCell(row, col);
o.idx = col;
arr.push(o);
}
lheader.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = 0 == row ? this.getHeadText(col) : this.getCell(row,
col);
o.idx = col;
arr.push(o);
}
header.push({
idx : row,
arr : arr
});
}
if (rowEnd >= this.data.rowNum) {
this.data.rowNum = rowEnd + 1;
}
var row = rowEnd - rowStart + 1;
return {
rh : this.getHeight(rowStart, rowEnd),
rowNum : rowNum,
rowEnd : rowEnd,
lheader : lheader,
header : header
};
},
getRowRange : function(params) {
var colSetting = this.data.colSetting;
var rowSetting = this.data.rowSetting;
var lfstart = params.freezeRange.col.start;
var lfend = params.freezeRange.col.end;
var rowStart = params.rowStart;
var rowEnd = params.rowEnd;
var fillHeight = params.fillHeight;
if (0 < fillHeight) {
var rowNum = this.calculateRowRange(rowStart, fillHeight);
rowEnd = rowStart + rowNum - 1;
}
var colStart = params.colStart;
var colEnd = params.colEnd;
var lscroller = [];
var scroller = [];
var lcvisible = [0], cvisible = [], rvisible = [];
for (var i = lfstart; i <= lfend; i++) {
if (this.isVisible(colSetting[i])) {
lcvisible.push(i);
}
}
for (var i = colStart; i <= colEnd; i++) {
if (this.isVisible(colSetting[i])) {
cvisible.push(i);
}
}
for (var i = rowStart; i <= rowEnd; i++) {
if (this.isVisible(rowSetting[i])) {
rvisible.push(i);
}
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = lcvisible.length; j < count; j++) {
var col = lcvisible[j];
var o = 0 == col ? this.getLeftText(row) : this.getCell(row,
col);
o.idx = col;
arr.push(o);
}
lscroller.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = this.getCell(row, col);
o.idx = col;
arr.push(o);
}
scroller.push({
idx : row,
arr : arr
});
}
if (rowEnd >= this.data.rowNum) {
this.data.rowNum = rowEnd + 1;
}
var rowNum = rowEnd - rowStart + 1;
return {
rh : this.getHeight(rowStart, rowEnd),
rowNum : rowNum,
rowEnd : rowEnd,
lscroller : lscroller,
scroller : scroller
};
},
getLColRange : function(params) {
var colSetting = this.data.colSetting;
var rowSetting = this.data.rowSetting;
var hfstart = params.freezeRange.row.start;
var hfend = params.freezeRange.row.end;
var rowStart = params.rowStart;
var rowEnd = params.rowEnd;
var colStart = params.colStart;
var colEnd = params.colEnd;
var fillWidth = params.fillWidth;
fillWidth -= (this.lcWidth + this.xpaddingOffset);
if (fillWidth && 0 < fillWidth) {
var colNum = this.calculateColRange(colStart, fillWidth);
colEnd = colStart + colNum - 1;
}
var cvisible = [0], trvisible = [0], rvisible = [];
for (var i = colStart; i <= colEnd; i++) {
if (this.isVisible(colSetting[i])) {
cvisible.push(i);
}
}
for (var i = hfstart; i <= hfend; i++) {
if (this.isVisible(rowSetting[i])) {
trvisible.push(i);
}
}
for (var i = rowStart; i <= rowEnd; i++) {
if (this.isVisible(rowSetting[i])) {
rvisible.push(i);
}
}
var lheader = [];
var lscroller = [];
for (var i = 0, len = trvisible.length; i < len; i++) {
var row = trvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = 0 == row ? this.getHeadText(col) : 0 == col ? this
.getLeftText(row) : this.getCell(row, col);
o.idx = col;
arr.push(o);
}
lheader.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = 0 == col ? this.getLeftText(row) : this.getCell(row,
col);
o.idx = col;
arr.push(o);
}
lscroller.push({
idx : row,
arr : arr
});
}
if (colEnd >= this.data.colNum) {
this.data.colNum = colEnd + 1;
}
var colNum = colEnd - colStart + 1;
return {
rw : this.getWidth(colStart, colEnd),
colNum : colNum,
colEnd : colEnd,
lheader : lheader,
lscroller : lscroller
};
},
getColRange : function(params) {
var colSetting = this.data.colSetting;
var rowSetting = this.data.rowSetting;
var hfstart = params.freezeRange.row.start;
var hfend = params.freezeRange.row.end;
var rowStart = params.rowStart;
var rowEnd = params.rowEnd;
var colStart = params.colStart;
var colEnd = params.colEnd;
var fillWidth = params.fillWidth;
if (fillWidth && 0 < fillWidth) {
var colNum = this.calculateColRange(colStart, fillWidth);
colEnd = colStart + colNum - 1;
}
var cvisible = [], trvisible = [0], rvisible = [];
for (var i = colStart; i <= colEnd; i++) {
if (this.isVisible(colSetting[i])) {
cvisible.push(i);
}
}
for (var i = hfstart; i <= hfend; i++) {
if (this.isVisible(rowSetting[i])) {
trvisible.push(i);
}
}
for (var i = rowStart; i <= rowEnd; i++) {
if (this.isVisible(rowSetting[i])) {
rvisible.push(i);
}
}
var sheader = [];
var scroller = [];
for (var i = 0, len = trvisible.length; i < len; i++) {
var row = trvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = 0 == row ? this.getHeadText(col) : this.getCell(row,
col);
o.idx = col;
arr.push(o);
}
sheader.push({
idx : row,
arr : arr
});
}
for (var i = 0, len = rvisible.length; i < len; i++) {
var row = rvisible[i];
var arr = [];
for (var j = 0, count = cvisible.length; j < count; j++) {
var col = cvisible[j];
var o = this.getCell(row, col);
o.idx = col;
arr.push(o);
}
scroller.push({
idx : row,
arr : arr
});
}
if (colEnd >= this.data.colNum) {
this.data.colNum = colEnd + 1;
}
var colNum = colEnd - colStart + 1;
return {
rw : this.getWidth(colStart, colEnd),
colNum : colNum,
colEnd : colEnd,
sheader : sheader,
scroller : scroller
};
},
onDataChangeFn : function(x, y, html, origin) {
if (this.data.rowNum < x) {
this.data.rowNum = x;
}
if (this.data.colNum < y) {
this.data.colNum = y;
}
this.data.rows[x] = this.data.rows[x] || {};
this.data.rows[x][y] = this.data.rows[x][y] || {};
var cell = this.data.rows[x][y];
var og = {
rows : {},
action : "datachange",
x : x,
y : y,
sheetIndex : this.activeSheet
};
og.rows[x] = {};
og.rows[x][y] = {
data : cell.data,
'origin-data' : cell['origin-data']
};
var md = {
rows : {},
action : "datachange",
x : x,
y : y,
sheetIndex : this.activeSheet
};
md.rows[x] = {};
md.rows[x][y] = {
data : html,
'origin-data' : origin
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
cell['origin-data'] = origin;
Ext.ss.common.Helper.generateHyperlink(html, cell);
this.setCellData(x, y, html, true);
},
put2ModifiedCache : function(action, info) {
var tabId = info.tabId;
if (false == Ext.type(tabId)) {
tabId = this.sheets[this.activeSheet].tabId;
}
if ("createUpdate" == action) {
var x = info.x, y = info.y;
var id = [tabId, x, y, action].join("$");
delete this.modifedCache[id];
this.modifedCache[id] = {
tabId : tabId,
x : x,
y : y,
action : action,
data : info.data
};
} else if ("insertRowAt" == action) {
var x = info.x;
var timestamp = (new Date).format("YmdHisu");
var id = [tabId, x, action, timestamp].join("$");
this.modifedCache[id] = {
tabId : tabId,
x : x,
action : action
};
} else if ("insertColumnAt" == action) {
var y = info.y;
var timestamp = (new Date).format("YmdHisu");
var id = [tabId, y, action, timestamp].join("$");
this.modifedCache[id] = {
tabId : tabId,
y : y,
action : action
};
} else if ("deleteRows" == action) {
var x = info.x;
var timestamp = (new Date).format("YmdHisu");
var id = [tabId, x, action, timestamp].join("$");
this.modifedCache[id] = {
tabId : tabId,
x : x,
span : info.span,
action : action
};
} else if ("deleteCols" == action) {
var y = info.y;
var timestamp = (new Date).format("YmdHisu");
var id = [tabId, x, action, timestamp].join("$");
this.modifedCache[id] = {
tabId : tabId,
y : y,
span : info.span,
action : action
};
}
this.fireEvent("savemodified");
},
getModifiedData : function(x, y) {
if (0 === x && 0 === y) {
return this.data.wholeSetting
? Ext.encode(this.data.wholeSetting)
: "";
} else if (0 === x) {
return this.data.colSetting[y] ? Ext
.encode(this.data.colSetting[y]) : "";
} else if (0 === y) {
return this.data.rowSetting[x] ? Ext
.encode(this.data.rowSetting[x]) : "";
} else {
var rows = this.data.rows;
if (rows[x] && rows[x][y]) {
var cell = this.deepClone(rows[x][y]);
if (cell.data && Ext.isString(cell.data)) {
var date = this.transfer2Date(cell.data);
if (Ext.isDate(date)) {
if (!cell.dateFormat) {
cell.dateFormat = this.defaultDateFormat;
}
cell.dValue = date.format(this.defaultDateFormat);
} else {
delete cell.dateFormat;
delete cell.dValue;
}
if (cell.data && 0 === cell.data.indexOf("=")) {
} else {
delete cell['origin-data'];
delete cell.formula_version;
delete cell.ISIParams;
delete cell.lastOriginData;
}
}
for (var p in cell) {
if (cell.hasOwnProperty(p)) {
if (false == Ext.type(cell[p]) || "" === cell[p]) {
delete cell[p];
}
}
}
var jsonStr;
if (cell.wrap) {
cell.wrap = this.absoluteWrap2Relative(cell.wrap,
Number(x), Number(y));
delete cell.relativeWrap;
}
cell = this.transferCellProperty(cell);
jsonStr = Ext.encode(cell);
return jsonStr;
}
}
return "";
},
transferCellProperty : function(cell, short2Full) {
var map;
if (!short2Full) {
map = Ext.ss.CONST.full2Short;
} else {
map = Ext.ss.CONST.short2Full;
}
var obj = {};
for (var p in cell) {
var val = cell[p];
var name = map[p];
if (name) {
obj[name] = val;
} else if ("br" == p || "bb" == p) {
obj[p] = map[val] || val;
} else {
obj[p] = val;
}
}
return obj;
},
saveModifiedCache : function(extraInfo, callback, scope, needBackup) {
var ss = this.spreadsheet;
/**更改:2013-02-27 实现单元格保存 ! this.disableCallingBackEnd*/
if (this.disableCallingBackEnd) {
this.resetModifiedCache();
if (callback) {
callback.call(scope);
}
return true;
}
if (this._callingBackEnd) {
this.fireEvent("savemodified", extraInfo, callback, scope,
needBackup);
return;
}
if (ss.isReadOnly()) {
this.resetModifiedCache();
if (callback) {
callback.call(scope);
}
return true;
}
if (this.isChanged()) {
var file = this.getFile() || {};
if (file.isTemp) {
file.onceChanged = true;
}
this._callingBackEnd = true;
var cellJson = [], tabId = this.sheets[this.activeSheet].tabId;
if (!tabId) {
Ext.Msg.alert(feyaSoft.lang.common.error,
feyaSoft.ss.lang.internetError);
return true;
}
for (var p in this.modifedCache) {
var it = this.modifedCache[p];
var x = parseInt(it.x), y = parseInt(it.y), action = it.action;
if ("createUpdate" == action) {
cellJson.push(Ext.encode({
tabId : it.tabId || tabId,
x : x,
y : y,
action : action,
content : it.data
}));
} else if ("insertRowAt" == action) {
cellJson.push(Ext.encode({
row : x,
action : action
}));
} else if ("insertColumnAt" == action) {
cellJson.push(Ext.encode({
column : y,
action : action
}));
} else if ("deleteRows" == action) {
cellJson.push(Ext.encode({
row : x,
span : it.span || 1,
action : action
}));
} else if ("deleteCols" == action) {
cellJson.push(Ext.encode({
column : y,
span : it.span || 1,
action : action
}));
}
}
this.resetModifiedCache();
var params = {
tabId : tabId,
cellJsons : cellJson,
needBackup : needBackup
};
if (extraInfo) {
params.extraInfo = this.getExtraInfo();
params.asActive = true;
}
if (!file.isTemp) {
ss.setStatus({
text : feyaSoft.ss.lang.saveChanges,
iconCls : "x-status-busy"
});
}
Ext.Ajax.request({
timeout : 300000,
url : this.updateModifiedUrl,
params : params,
success : function(response) {
this._callingBackEnd = false;
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope);
}
if (!file.isTemp) {
ss.setStatus({
text : feyaSoft.ss.lang.saved
+ " "
+ feyaSoft.lang.common.at
+ " "
+ (new Date)
.format("H:i:s d/m Y"),
iconCls : "x-status-valid"
});
}
} else {
if (json.success == "relogin") {
new feyaSoft.home.Login;
} else {
Ext.Msg.alert(feyaSoft.lang.common.error,
json.info);
}
ss.setStatus({
text : feyaSoft.ss.lang.fail2Save,
iconCls : "x-status-error"
});
}
},
failure : function(response) {
this._callingBackEnd = false;
//不提示错误
/**ss.setStatus({
text : feyaSoft.ss.lang.fail2Save,
iconCls : "x-status-error"
});**/
},
scope : this
});
return true;
} else if (callback) {
callback.call(scope);
return true;
}
},
setCellData : function(x, y, data, direct) {
if (!direct) {
this.data.rows[x] = this.data.rows[x] || {};
this.data.rows[x][y] = this.data.rows[x][y] || {};
}
var o = this.data.rows[x][y].data;
this.data.rows[x][y].data = data;
var oldResult = this.data.rows[x][y].result;
delete this.data.rows[x][y].result;
var isFormula = Ext.ss.common.Mask.isFormula(data);
if (isFormula) {
var originData = this.data.rows[x][y]['origin-data'];
if (originData && originData.toLowerCase().indexOf("=round") != -1) {
if (originData.indexOf(",") == -1) {
this.data.rows[x][y]['origin-data'] = originData.replace(
/\)$/i, ",0)");
}
} else if (originData
&& originData.toLowerCase().indexOf("=rate") != -1) {
this.data.rows[x][y].data = this.data.rows[x][y].data.replace(
/,\s*,/g, ",0,");
} else {
if (originData
&& originData.toLowerCase().indexOf("=sum") != -1) {
this.data.rows[x][y].data = this.data.rows[x][y].data
.replace(/,\s*,/g, ",0,");
}
this.data.rows[x][y]['origin-data'] = this
.refreshOriginFormula(originData, 0, 0);
}
var result = this.getConvertData(x, y, this.data.rows[x][y],
undefined, true);
} else {
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
}
if (Ext.ss.common.Mask.isFormula(o) && o != data) {
}
this.data.rows[x][y].oldResult = oldResult;
this.fireEvent("checkformula", this.activeSheet, x, y);
this.fireEvent("afterdatachange", x, y, this.activeSheet, this);
},
processOldFile : function(json) {
json.name = "Sheet1";
json.showRange = {
row : {
start : json.freezeRange.row.end + 1,
end : json.freezeRange.row.end + 20,
len : 20
},
col : {
start : json.freezeRange.col.end + 1,
end : json.freezeRange.col.end + 10,
len : 10
}
};
json.wholeSetting = json.wholeSetting || {};
json.focusCell = {
x : 1,
y : 1
};
json.selectedStart = {
x : 1,
y : 1
};
json.selectedEnd = {
x : 1,
y : 1
};
return [json];
},
prepareSheets : function(sheets, extraInfo, activeSheetIndex) {
this.activeSheet = activeSheetIndex || 0;
this.sheets = sheets;
this.data = sheets[this.activeSheet];
for (var i = 0, len = sheets.length; i < len; i++) {
var sheet = sheets[i];
sheet.loaded = true;
sheet = this.prepareTab(sheet);
}
return sheets;
},
prepareTab : function(sheet, sheetIndex) {
if (false == Ext.type(sheetIndex)) {
sheetIndex = this.activeSheet;
}
sheet.rows = sheet.rows || {};
if (!sheet.wholeSetting) {
if (sheet.rows[0] && sheet.rows[0][0]) {
sheet.wholeSetting = sheet.rows[0][0];
} else {
sheet.wholeSetting = {};
}
}
if (!sheet.rowSetting) {
sheet.rowSetting = {};
var rows = sheet.rows;
for (var p in rows) {
var row = rows[p];
if (row[0]) {
sheet.rowSetting[p] = row[0];
delete row[0];
}
}
}
if (!sheet.colSetting) {
if (sheet.rows[0]) {
sheet.colSetting = sheet.rows[0];
delete sheet.rows[0];
} else {
sheet.colSetting = {};
}
}
if (sheet.conditionFormat) {
this.prepareConditionFormat(sheet.conditionFormat, sheet);
}
var defaults = this.generateData(sheet.name);
for (var p in defaults) {
if (false === Ext.type(sheet[p])) {
sheet[p] = defaults[p];
}
}
var rows = sheet.rows;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q];
row[q] = this.transferCellProperty(cell, true);
cell = row[q];
if (cell.wrap) {
var wrap = cell.wrap;
if (this.isRelativeWrap(wrap)) {
cell.relativeWrap = Ext.apply({}, wrap);
cell.wrap = this.relativeWrap2Absolute(wrap, p, q);
}
}
if ("ISFormula" == cell.type) {
var isfObj = this.transferISFormula(p, q,
cell['origin-data']);
Ext.apply(cell, isfObj);
} else if (Ext.ss.common.Mask.isFormula(cell['origin-data'])) {
delete cell.result;
cell.data = this.adjustFormula(p, q, cell['origin-data']);
}
}
}
return sheet;
},
prepareConditionFormat : function(conditionFormat, sheet) {
var cfmLookup = {};
for (var k = 0, len = conditionFormat.length; k < len; k++) {
var it = conditionFormat[k];
var pos = it.pos;
var si = pos.sheetIndex, x = pos.x, y = pos.y, ex = pos.ex, ey = pos.ey;
for (var i = x; i <= ex; i++) {
for (var j = y; j <= ey; j++) {
var id = [si, i, j].join("-");
cfmLookup[id] = k;
}
}
}
sheet.cfmLookup = cfmLookup;
},
isRelativeWrap : function(wrap) {
if (0 >= wrap.minx || 0 >= wrap.miny || 0 >= wrap.maxx
|| 0 >= wrap.maxy) {
return true;
}
return false;
},
relativeWrap2Absolute : function(wrap, x, y) {
wrap.minx += x;
wrap.miny += y;
wrap.maxx += x;
wrap.maxy += y;
return wrap;
},
absoluteWrap2Relative : function(wrap, x, y) {
wrap.minx -= x;
wrap.miny -= y;
wrap.maxx -= x;
wrap.maxy -= y;
return wrap;
},
setSheets : function(sheets, extraInfo, activeSheet) {
var file = this.getFile();
if (file.isFake) {
this.disableCallingBackEnd = true;
} else {
this.disableCallingBackEnd = false;
}
var ss = this.spreadsheet;
if (extraInfo) {
if (Ext.isString(extraInfo)) {
this.fileExtraInfo = Ext.decode(extraInfo);
} else {
this.fileExtraInfo = this.deepClone(extraInfo);
}
} else {
this.fileExtraInfo = {};
}
if (sheets == null) {
alert("should not appear ...");
this.sheets = this.processOldFile(sheets);
} else {
this.sheets = this.prepareSheets(sheets, activeSheet);
}
this.resetHStack();
this.setActiveSheet(parseInt(activeSheet || 0), true);
this.readActiveSheet();
},
getSheets : function() {
this.saveActiveSheet();
var sheets = [];
for (var i = 0, len = this.sheets.length; i < len; i++) {
sheets.push(this.getData(i));
}
return {
sheets : sheets,
activeSheet : this.activeSheet
};
},
getData : function(index) {
var data = this.sheets[index];
var ss = this.spreadsheet;
var freezeRange = ss.copyRange(data.freezeRange);
var showRange = ss.copyRange(data.showRange);
var selectedStart = Ext.apply({}, data.selectedStart);
var selectedEnd = Ext.apply({}, data.selectedEnd);
var focusCell = Ext.apply({}, data.focusCell);
var obj = {
name : data.name,
splitFlag : data.splitFlag,
footerWidth : data.footerWidth || 500,
freezeRange : freezeRange,
showRange : showRange,
rowNum : data.rowNum,
colNum : data.colNum,
selectedStart : selectedStart,
selectedEnd : selectedEnd,
focusCell : focusCell
};
var rows = data.rows;
var rs = {};
for (var p in rows) {
if (0 != p) {
if (rows[p]) {
for (var q in rows[p]) {
var cell = rows[p][q];
if (0 != q) {
if (cell.data && "" != cell.data || cell.style
&& "" != cell.style || cell.bg
&& "" != cell.bg || cell.br
&& "" != cell.br
&& "x-spreadsheet-right-silver" != cell.br
|| cell.bb && "" != cell.bb
&& "x-spreadsheet-bottom-silver" != cell.br
|| cell.wrap || cell.comment || cell.b
&& cell.s && cell.u && cell.i
&& "" !== cell.b && "" !== cell.s
&& "" !== cell.u && "" !== cell.i
|| cell.css && "" != cell.css || cell.tdcss
&& "" != cell.tdcss || cell.filter
&& "" != cell.filter) {
rs[p] = rs[p] || {};
rs[p][q] = Ext.apply({}, cell);
}
}
}
}
}
}
obj.rows = rs;
obj.project = data.project;
obj.charts = ss.chartManager.getCharts(index);
obj.wholeSetting = Ext.apply({}, data.wholeSetting);
var rowSetting = data.rowSetting;
rs = {};
for (var p in rowSetting) {
rs[p] = Ext.apply({}, rowSetting[p]);
}
obj.rowSetting = rs;
var colSetting = data.colSetting;
rs = {};
for (var p in colSetting) {
rs[p] = Ext.apply({}, colSetting[p]);
}
obj.colSetting = rs;
return obj;
},
calculateShowRange : function(rowStart, colStart, w, h) {
var rowIndex = rowStart, colIndex = colStart;
var ih = 0;
while (ih < h) {
ih += this.getRowHeight(rowIndex);
rowIndex++;
}
var iw = 0;
while (iw < w) {
iw += this.getColWidth(colIndex);
colIndex++;
}
var rowNum = rowIndex - rowStart;
var colNum = colIndex - colStart;
if (1 == rowNum) {
rowNum = 2;
}
if (1 == colNum) {
colNum = 2;
}
return {
rowNum : rowNum,
colNum : colNum
};
},
calculateRowRange : function(rowStart, h) {
var rowIndex = rowStart;
var ih = 0;
while (ih < h) {
ih += this.getRowHeight(rowIndex);
rowIndex++;
}
var rowNum = rowIndex - rowStart;
if (1 == rowNum) {
rowNum = 2;
}
return rowNum;
},
calculateColRange : function(colStart, w) {
var colIndex = colStart;
var iw = 0;
while (iw < w) {
iw += this.getColWidth(colIndex);
colIndex++;
}
var colNum = colIndex - colStart;
if (1 == colNum) {
colNum = 2;
}
return colNum;
},
getRowHeight : function(rowIndex) {
var rs = this.data.rowSetting;
var rh = this.defaultRowHeight + this.ypaddingOffset;
if (rs[rowIndex]) {
if (!this.isVisible(rs[rowIndex])) {
rh = 0;
} else if (rs[rowIndex].ch || 0 == rs[rowIndex].ch) {
rh = rs[rowIndex].ch + this.ypaddingOffset;
}
}
return rh;
},
getSpanHeight : function(start, end) {
var h = 0;
var rs = this.data.rowSetting;
var rh = this.defaultRowHeight + this.ypaddingOffset;
var count = end - start + 1;
for (var i = start; i <= end; i++) {
if (rs[i]) {
if (!this.isVisible(rs[i])) {
count--;
} else if (rs[i].ch || 0 == rs[i].ch) {
count--;
h += rs[i].ch + this.ypaddingOffset;
}
}
}
h += rh * count;
return h;
},
getAvailSpanHeight : function(start, end) {
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var h = 0;
for (var i = start; i <= end; i++) {
if (fr.row.start <= i && fr.row.end >= i || sr.row.start <= i
&& sr.row.end >= i) {
h += this.getRowHeight(i);
}
}
return h;
},
getColWidth : function(colIndex) {
var cs = this.data.colSetting;
var cw = this.defaultColWidth + this.xpaddingOffset;
if (cs[colIndex]) {
if (!this.isVisible(cs[colIndex])) {
cw = 0;
} else if (cs[colIndex].cw || 0 == cs[colIndex].cw) {
cw = cs[colIndex].cw + this.xpaddingOffset;
}
}
return cw;
},
getSpanWidth : function(start, end) {
var w = 0;
var cs = this.data.colSetting;
var cw = this.defaultColWidth + this.xpaddingOffset;
var count = end - start + 1;
for (var i = start; i <= end; i++) {
if (cs[i]) {
if (!this.isVisible(cs[i])) {
count--;
} else if (cs[i].cw || 0 == cs[i].cw) {
count--;
w += cs[i].cw + this.xpaddingOffset;
}
}
}
w += cw * count;
return w;
},
getColDistance : function(start, end, flag) {
var min = start, max = end, f = 1;
if (min > max) {
min = end;
max = start - 1;
f = -1;
if ("before" != flag) {
min++;
}
} else {
if ("before" == flag) {
max -= 1;
}
}
var w = 0;
var cs = this.data.colSetting;
var cw = this.defaultColWidth + this.xpaddingOffset;
var count = max - min + 1;
for (var i = min; i <= max; i++) {
if (cs[i]) {
if (!this.isVisible(cs[i])) {
count--;
} else if (cs[i].cw || 0 == cs[i].cw) {
count--;
w += cs[i].cw + this.xpaddingOffset;
}
}
}
w += cw * count;
return f * w;
},
getRowDistance : function(start, end, flag) {
var min = start, max = end, f = 1;
if (min > max) {
min = end;
max = start - 1;
f = -1;
if ("before" != flag) {
min++;
}
} else {
if ("before" == flag) {
max -= 1;
}
}
var h = 0;
var rs = this.data.rowSetting;
var rh = this.defaultRowHeight + this.ypaddingOffset;
var count = max - min + 1;
for (var i = min; i <= max; i++) {
if (rs[i]) {
if (!this.isVisible(rs[i])) {
count--;
} else if (rs[i].ch || 0 == rs[i].ch) {
count--;
h += rs[i].ch + this.ypaddingOffset;
}
}
}
h += rh * count;
return f * h;
},
getAvailSpanWidth : function(start, end) {
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var w = 0;
for (var i = start; i <= end; i++) {
if (fr.col.start <= i && fr.col.end >= i || sr.col.start <= i
&& sr.col.end >= i) {
w += this.getColWidth(i);
}
}
return w;
},
addCommentFn : function(x, y, comment) {
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = rows[x][y] || {};
var og = {
rows : {}
};
og.rows[x] = {};
var css = this.data.rows[x][y].css || "";
og.rows[x][y] = {
comment : this.data.rows[x][y].comment,
css : css
};
var md = {
rows : {}
};
md.rows[x] = {};
md.rows[x][y] = {
comment : comment,
css : css + " " + Ext.ss.CONST.cssHash[3]
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
rows[x][y].comment = comment;
rows[x][y].css = css + " " + Ext.ss.CONST.cssHash[3];
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
},
deleteCommentFn : function(x, y) {
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = rows[x][y] || {};
var og = {
rows : {}
};
og.rows[x] = {};
var css = this.data.rows[x][y].css;
og.rows[x][y] = {
css : css,
comment : this.data.rows[x][y].comment
};
var md = {
rows : {}
};
md.rows[x] = {};
css = css.replace(Ext.ss.CONST.cssHash[3], "").trim();
md.rows[x][y] = {
css : css,
comment : ""
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
rows[x][y].css = css;
rows[x][y].comment = "";
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
},
getStrPos : function(x, y) {
var h = this.getLetter(y);
return h + x;
},
getPos : function(str) {
str = str.toUpperCase();
var x = str.match(/\d+/);
var parts = str.split(x, 1);
var l = parts[0];
var y = l.charCodeAt(0) - 64;
for (var i = 1, len = l.length; i < len; i++) {
var c = str.charCodeAt(i) - 65;
y += c * Math.pow(26, i);
}
var obj = {
x : parseInt(x),
y : parseInt(y)
};
return obj;
},
checkWrap : function(minx, miny, maxx, maxy) {
var rows = this.data.rows;
if (0 == minx && 0 == maxx) {
for (var p in rows) {
var row = rows[p];
for (var q in row) {
for (var j = miny; j <= maxy; j++) {
if (this.isWraped(q, j)) {
return true;
}
}
}
}
} else if (0 == miny && 0 == maxy) {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
for (var q in row) {
if (this.isWraped(i, q)) {
return true;
}
}
}
}
} else {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
for (var j = miny; j <= maxy; j++) {
if (this.isWraped(i, j)) {
return true;
}
}
}
}
}
return false;
},
sortRange : function(minx, miny, maxx, maxy, sf) {
var span = {
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy
};
if (this.checkWrap(minx, miny, maxx, maxy)) {
return false;
}
var flag;
var arr = [], rows = this.data.rows;
if (0 == minx && 0 == maxx) {
flag = true;
minx = 1;
maxx = this.data.rowNum - 1, stop = false;
for (var i = 1; i <= maxx; i++) {
var r = rows[i];
if (r) {
for (var j = miny; j <= maxy; j++) {
var c = r[j];
if (c) {
if ("" != c.data && false != Ext.type(c.data)) {
stop = true;
break;
}
}
}
if (stop) {
minx = i;
break;
}
}
}
}
for (var i = minx; i <= maxx; i++) {
var b = rows[i] || {};
for (var j = arr.length - 1; j >= 0; j--) {
var a = rows[arr[j]] || {};
a[miny] = a[miny] || {};
b[miny] = b[miny] || {};
if (sf == Ext.ss.common.DataSourceHelper.compareStr(
a[miny].data, b[miny].data, sf)) {
arr[j + 1] = arr[j];
} else {
break;
}
}
arr[j + 1] = i;
}
var olds = [], changes = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (i + minx !== arr[i]) {
olds.push(arr[i]);
changes.push(i + minx);
}
}
if (!this.saveModifiedCache(false, function() {
this.sortInBackend(this.data.tabId, olds, changes, span);
}, this)) {
this.sortInBackend(this.data.tabId, olds, changes, span);
}
this.switchRows(olds, changes, span);
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : {
action : "sort",
type : "undo",
tabId : this.data.tabId,
olds : olds,
changes : changes,
span : span
},
modified : {
action : "sort",
type : "redo",
tabId : this.data.tabId,
olds : olds,
changes : changes,
span : span
}
}, true);
return true;
},
switchRows : function(olds, news, span) {
var miny = span.miny, maxy = span.maxy, expand = 0 === span.maxx;
var rows = this.data.rows, lookup = {};
for (var i = 0, len = olds.length; i < len; i++) {
var index = olds[i];
if (expand) {
lookup[index] = rows[index];
} else {
lookup[index] = {};
for (var j = miny; j <= maxy; j++) {
if (rows[index]) {
lookup[index][j] = rows[index][j];
}
}
}
}
for (var i = 0, len = news.length; i < len; i++) {
var oi = olds[i], ni = news[i];
if (expand) {
rows[ni] = lookup[oi];
} else {
rows[ni] = rows[ni] || {};
lookup[oi] = lookup[oi] || {};
var row = rows[ni], back = lookup[oi];
for (var j = miny; j <= maxy; j++) {
if (back[j]) {
row[j] = back[j];
} else {
delete row[j];
}
}
}
}
},
sortInBackend : function(tabId, oldRowIndex, newRowIndex, span, callback,
scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
this.resetModifiedCache();
if (callback) {
callback.call(scope);
}
return;
}
var params = {
tabId : tabId,
oldRowIndex : oldRowIndex,
newRowIndex : newRowIndex
};
if (0 !== span.minx && 0 != span.maxx) {
params.mincol = span.miny;
params.maxcol = span.maxy;
}
Ext.Ajax.request({
timeout : 300000,
url : this.sortUrl,
params : params,
success : function(response, opts) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope);
}
ss.setStatus({
text : feyaSoft.ss.lang.saved
+ " "
+ feyaSoft.lang.common.at
+ " "
+ (new Date)
.format("H:i:s d/m Y"),
iconCls : "x-status-valid"
});
} else {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error, json.info);
}
},
failure : function(response, opts) {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
},
wrapData : function(x, y, span) {
var minx = span.minx, miny = span.miny, maxx = span.maxx, maxy = span.maxy;
var rows = this.data.rows;
var colcss = this.data.colSetting[miny] || {};
var rowcss = this.data.rowSetting[minx] || {};
var wholecss = this.data.wholeSetting || {};
var b = "", i = "", u = "", s = "", bg = "", br = "", bb = "";
var color = "", align = "", fontsize = "", wordwrap = "", fontfamily = "", textalign = "", css = " x-spreadsheet-body-cursor ", display = "", filter, format;
if (rows[minx] && rows[minx][miny]) {
var cell = rows[minx][miny];
b = this.getAttribute(cell, rowcss, colcss, wholecss, "b");
i = this.getAttribute(cell, rowcss, colcss, wholecss, "i");
u = this.getAttribute(cell, rowcss, colcss, wholecss, "u");
s = this.getAttribute(cell, rowcss, colcss, wholecss, "s");
bg = this.getAttribute(cell, rowcss, colcss, wholecss, "bg");
color = this.getAttribute(cell, rowcss, colcss, wholecss, "color");
fontsize = this.getAttribute(cell, rowcss, colcss, wholecss,
"font-size");
wordwrap = this.getAttribute(cell, rowcss, colcss, wholecss,
"word-wrap");
fontfamily = this.getAttribute(cell, rowcss, colcss, wholecss,
"font-family");
textalign = this.getAttribute(cell, rowcss, colcss, wholecss,
"text-align");
align = this.getAttribute(cell, rowcss, colcss, wholecss, "align");
format = this
.getAttribute(cell, rowcss, colcss, wholecss, "format");
filter = cell.filter;
}
var rflag = this.isRightCellInWrap(y, span);
var bflag = this.isBottomCellInWrap(x, span);
if (rows[x] && rows[x][y]) {
var cell = rows[x][y];
colcss = this.data.colSetting[y] || {};
rowcss = this.data.rowSetting[x] || {};
css += this.getAttribute(cell, rowcss, colcss, wholecss, "css");
if (rflag) {
br = this.getAttribute(cell, rowcss, colcss, wholecss, "br",
"x-spreadsheet-right-silver");
}
if (bflag) {
bb = this.getAttribute(cell, rowcss, colcss, wholecss, "bb",
"x-spreadsheet-bottom-silver");
}
display = this.getAttribute(cell, rowcss, colcss, wholecss,
"display");
}
if (!bflag) {
bb = "x-spreadsheet-bottom-none";
}
if (!rflag) {
br = "x-spreadsheet-right-none";
}
return {
b : b,
i : i,
u : u,
s : s,
bg : bg,
br : br,
bb : bb,
color : color,
'font-size' : fontsize,
'word-wrap' : wordwrap,
'font-family' : fontfamily,
'text-align' : textalign,
align : align,
css : css,
display : display,
filter : filter,
format : format
};
},
getVisiableSpan : function(minx, miny, maxx, maxy) {
var span = {};
var cs = this.data.colSetting, rs = this.data.rowSetting;
for (var i = minx; i <= maxx; i++) {
var r = rs[i];
if (!r || "none" != r.display) {
span.minx = i;
break;
}
}
for (var i = maxx; i >= minx; i--) {
var r = rs[i];
if (!r || "none" != r.display) {
span.maxx = i;
break;
}
}
for (var j = miny; j <= maxy; j++) {
var c = cs[j];
if (!c || "none" != c.display) {
span.miny = j;
break;
}
}
for (var j = maxy; j >= miny; j--) {
var c = cs[j];
if (!c || "none" != c.display) {
span.maxy = j;
break;
}
}
return span;
},
isRightCellInWrap : function(y, wrap) {
var cs = this.data.colSetting;
var maxy = wrap.maxy;
for (var i = y + 1; i <= maxy; i++) {
var c = cs[i];
if (!c || "none" != c.display) {
return false;
}
}
return true;
},
isBottomCellInWrap : function(x, wrap) {
var rs = this.data.rowSetting;
var maxx = wrap.maxx;
for (var i = x + 1; i <= maxx; i++) {
var r = rs[i];
if (!r || "none" != r.display) {
return false;
}
}
return true;
},
getPosFromXY : function(x, y) {
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var st = ss.sview.getTop(), sl = ss.sview.getLeft();
var w = sl + this.lcWidth + this.xpaddingOffset, h = st
+ this.getRowHeight(0);
var lw = sl + ss.lhscroller.getWidth(), lh = st
+ ss.lhscroller.getHeight();
var rowIndex = 0, colIndex = 0, i, j;
var lf = false, tf = false;
if (h < y) {
if (y <= lh) {
for (i = fr.row.start; i <= fr.row.end; i++) {
h += this.getRowHeight(i);
if (h >= y) {
rowIndex = i;
break;
}
}
} else {
tf = true;
if (ss.isRowSplit()) {
lh += ss.SPLIT_BAR_SIZE;
}
h = 0;
y -= lh;
if (0 > y) {
return;
}
for (i = sr.row.start; i <= sr.row.end; i++) {
h += this.getRowHeight(i);
if (h >= y) {
rowIndex = i;
break;
}
}
}
}
if (w < x) {
if (x <= lw) {
for (j = fr.col.start; j <= fr.col.end; j++) {
w += this.getColWidth(j);
if (w >= x) {
colIndex = j;
break;
}
}
} else {
lf = true;
if (ss.isColSplit()) {
lw += ss.SPLIT_BAR_SIZE;
}
w = 0;
x -= lw;
if (0 > x) {
return;
}
for (j = sr.col.start; j <= sr.col.end; j++) {
w += this.getColWidth(j);
if (w >= x) {
colIndex = j;
break;
}
}
}
}
return {
x : rowIndex,
y : colIndex,
tf : tf,
lf : lf
};
},
getSplitPosFromXY : function(x, y) {
var ss = this.spreadsheet;
var fr = ss.freezeRange;
var st = ss.sview.getTop(), sl = ss.sview.getLeft();
var w = sl + this.lcWidth + this.xpaddingOffset, h = st
+ this.getRowHeight(0);
var rh = 0, cw = 0, i, j, r = 0, c = 0;
i = fr.row.start;
while (h < y) {
rh = h;
r = i;
h += this.getRowHeight(i);
i++;
}
j = fr.col.start;
while (w < x) {
cw = w;
c = j;
w += this.getColWidth(j);
j++;
}
cw -= sl;
rh -= st;
return {
r : r,
c : c,
x : cw,
y : rh
};
},
checkFormulaAfterRowInserted : function(x, span) {
var maxx = x + span - 1;
var changed = {};
var activeSheet = this.activeSheet;
for (var i = 0, len = this.sheets.length; i < len; i++) {
this.activeSheet = i;
this.data = this.sheets[i];
var rows = this.data.rows;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q], data = cell.data;
if (Ext.ss.common.Mask.isFormula(data)) {
var posChanged = false;
var formula = this.adjustFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (x <= pos.x) {
pos.x += span;
pos.ex += span;
posChanged = true;
} else if (x <= pos.ex) {
pos.ex += span;
posChanged = true;
} else if (x <= p) {
posChanged = true;
}
}
}, this);
if (posChanged) {
var origin = this.syncFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (x <= pos.x) {
pos.x += span;
pos.ex += span;
} else if (x <= pos.ex) {
pos.ex += span;
}
}
var sheetName = "";
if (false != Ext.type(sheetIndex)
&& -1 != sheetIndex) {
sheetName = this.sheets[sheetIndex].name
+ "!";
}
if (pos.x == pos.ex && pos.y == pos.ey) {
if (true === pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ pos.x;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x;
}
} else {
if (true === pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ pos.ex;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ pos.ex;
}
}
}, this);
cell['origin-data'] = origin;
cell.data = formula;
changed[p] = changed[p] || {};
changed[p][q] = Ext.apply({}, cell);
}
}
}
}
}
this.activeSheet = activeSheet;
this.data = this.sheets[activeSheet];
return changed;
},
checkFormulaAfterColumnInserted : function(y, span) {
var changed = {};
var activeSheet = this.activeSheet;
for (var i = 0, len = this.sheets.length; i < len; i++) {
this.activeSheet = i;
this.data = this.sheets[i];
var rows = this.data.rows;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q], data = cell.data;
if (Ext.ss.common.Mask.isFormula(data)) {
var posChanged = false;
var formula = this.adjustFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (y <= pos.y) {
posChanged = true;
pos.y += span;
pos.ey += span;
} else if (y <= pos.ey) {
pos.ey += span;
posChanged = true;
} else if (y <= q) {
posChanged = true;
}
}
}, this);
if (posChanged) {
var origin = this.syncFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (y <= pos.y) {
pos.y += span;
pos.ey += span;
} else if (y <= pos.ey) {
pos.ey += span;
}
}
var sheetName = "";
if (false != Ext.type(sheetIndex)
&& -1 != sheetIndex) {
sheetName = this.sheets[sheetIndex].name
+ "!";
}
if (pos.x == pos.ex && pos.y == pos.ey) {
if (true === pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ pos.x;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x;
}
} else {
if (true === pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ pos.ex;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ pos.ex;
}
}
}, this);
cell['origin-data'] = origin;
cell.data = formula;
changed[p] = changed[p] || {};
changed[p][q] = Ext.apply({}, cell);
}
}
}
}
}
this.activeSheet = activeSheet;
this.data = this.sheets[activeSheet];
return changed;
},
checkFormulaAfterRowDeleted : function(x, span) {
var changed = {};
var ex = x + span - 1;
var activeSheet = this.activeSheet;
var formulaNumber = 0;
for (var i = 0, len = this.sheets.length; i < len; i++) {
this.activeSheet = i;
this.data = this.sheets[i];
var rows = this.data.rows;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q], data = cell.data;
if (Ext.ss.common.Mask.isFormula(data)) {
formulaNumber++;
var posChanged = false;
var formula = this.adjustFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (x < pos.x) {
if (ex < pos.x) {
pos.x -= span;
pos.ex -= span;
} else {
pos.x = x;
pos.ex -= span;
}
posChanged = true;
} else if (x <= pos.ex) {
if (ex > pos.ex) {
pos.ex = x - 1;
} else {
pos.ex -= span;
}
posChanged = true;
} else if (x <= p) {
posChanged = true;
}
}
}, this);
if (posChanged) {
var origin = this.syncFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (x < pos.x) {
if (ex < pos.x) {
pos.x -= span;
pos.ex -= span;
} else {
pos.x = x;
pos.ex -= span;
}
} else if (x <= pos.ex) {
if (ex > pos.ex) {
pos.ex = x - 1;
} else {
pos.ex -= span;
}
}
if (pos.x > pos.ex
|| pos.y > pos.ey) {
return "0";
}
}
var sheetName = "";
if (false != Ext.type(sheetIndex)
&& -1 != sheetIndex) {
sheetName = this.sheets[sheetIndex].name
+ "!";
}
if (pos.x == pos.ex && pos.y == pos.ey) {
if (true === pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ pos.x;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x;
}
} else {
if (true === pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ pos.ex;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ pos.ex;
}
}
}, this);
cell['origin-data'] = origin;
cell.data = formula;
changed[p] = changed[p] || {};
changed[p][q] = Ext.apply({}, cell);
}
}
}
}
}
this.activeSheet = activeSheet;
this.data = this.sheets[activeSheet];
return changed;
},
checkFormulaAfterColumnDeleted : function(y, span) {
var changed = {};
var ey = y + span - 1;
var activeSheet = this.activeSheet;
for (var i = 0, len = this.sheets.length; i < len; i++) {
this.activeSheet = i;
this.data = this.sheets[i];
var rows = this.data.rows;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q], data = cell.data;
if (Ext.ss.common.Mask.isFormula(data)) {
var posChanged = false;
var formula = this.adjustFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (y < pos.y) {
if (ey < pos.y) {
pos.y -= span;
pos.ey -= span;
} else {
pos.y = y;
pos.ey -= span;
}
posChanged = true;
} else if (y <= pos.ey) {
if (ey > pos.ey) {
pos.ey = y - 1;
} else {
pos.ey -= span;
}
posChanged = true;
} else if (y <= q) {
posChanged = true;
}
}
}, this);
if (posChanged) {
var origin = this.syncFormula(p, q,
cell['origin-data'], function(pos) {
var sheetIndex = pos.sheetIndex;
if ((false == Ext.type(sheetIndex) || -1 == sheetIndex)
&& i == activeSheet
|| sheetIndex == activeSheet) {
if (y < pos.y) {
if (ey < pos.y) {
pos.y -= span;
pos.ey -= span;
} else {
pos.y = y;
pos.ey -= span;
}
} else if (y <= pos.ey) {
if (ey > pos.ey) {
pos.ey = y - 1;
} else {
pos.ey -= span;
}
}
if (pos.x > pos.ex
|| pos.y > pos.ey) {
return "0";
}
}
var sheetName = "";
if (false != Ext.type(sheetIndex)
&& -1 != sheetIndex) {
sheetName = this.sheets[sheetIndex].name
+ "!";
}
if (pos.x == pos.ex && pos.y == pos.ey) {
if (true === pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$" + pos.x;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName + "$"
+ this.getLetter(pos.y)
+ pos.x;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x;
}
} else {
if (true === pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.ROW_AB == pos.ab) {
return sheetName
+ this.getLetter(pos.y)
+ "$"
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ "$" + pos.ex;
} else if (Ext.ss.CONST.COL_AB == pos.ab) {
return sheetName
+ "$"
+ this.getLetter(pos.y)
+ pos.x
+ ":$"
+ this
.getLetter(pos.ey)
+ pos.ex;
} else {
return sheetName
+ this.getLetter(pos.y)
+ pos.x
+ ":"
+ this
.getLetter(pos.ey)
+ pos.ex;
}
}
}, this);
cell['origin-data'] = origin;
cell.data = formula;
changed[p] = changed[p] || {};
changed[p][q] = Ext.apply({}, cell);
}
}
}
}
}
this.activeSheet = activeSheet;
this.data = this.sheets[activeSheet];
return changed;
},
getWrapId : function(wrap) {
return [wrap.minx, wrap.miny, wrap.maxx, wrap.maxy].join("-");
},
deleteRow : function(x, span, supressAction) {
span = span || 1;
var rows = this.data.rows;
var rowSetting = this.data.rowSetting;
var rowNum = this.getMaxRowNumber();
var og, md;
var wraps = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (cell && cell.wrap) {
var wrap = cell.wrap;
var wid = this.getWrapId(wrap);
if (!wraps[wid]) {
wraps[wid] = wrap;
}
}
}
}
var groups = {};
for (var p in rowSetting) {
var rs = rowSetting[p];
if (rs && rs.group) {
var group = rs.group;
if (!groups[p]) {
groups[p] = group;
}
}
}
var originWraps = {}, originGroups = {}, cellLookup = {}, rowSettingLookup = {};
for (var p in wraps) {
var wrap = wraps[p];
if (x <= wrap.maxx) {
originWraps[p] = Ext.apply({}, wrap);
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c
};
}
}
}
}
for (var p in groups) {
var group = groups[p];
if (x <= group[1]) {
originGroups[p] = [].concat(group);
for (var c = group[0]; c <= group[1]; c++) {
rowSettingLookup[c] = true;
}
}
}
if (!supressAction) {
var deletedRowSetting = {}, deletedRows = {}, formulas = {};
for (var i = 0; i < span; i++) {
var r = x + i;
if (rowSetting[r]) {
deletedRowSetting[r] = this.deepClone(rowSetting[r]);
}
var row = rows[r];
deletedRows[r] = deletedRows[r] || {};
for (var c in row) {
deletedRows[r][c] = this.deepClone(row[c]);
}
}
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
deletedRows[r] = deletedRows[r] || {};
deletedRows[r][c] = this.deepClone(row[c]);
}
}
for (var p in rowSettingLookup) {
if (rowSetting[p]) {
deletedRowSetting[p] = this.deepClone(rowSetting[p]);
}
}
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
og = {
action : "delete-row",
type : "undo",
rowNum : rowNum,
row : x,
span : span,
deletedRowSetting : deletedRowSetting,
deletedRows : deletedRows,
formulas : formulas
};
}
var sx = x + span, ex = x + span - 1;
for (var i = x; i < sx; i++) {
delete rows[i];
delete rowSetting[i];
}
for (var i = sx; i <= rowNum; i++) {
if (rows[i]) {
rows[i - span] = rows[i];
} else {
delete rows[i - span];
}
if (rowSetting[i]) {
rowSetting[i - span] = rowSetting[i];
} else {
delete rowSetting[i - span];
}
}
for (var i = rowNum - span + 1; i <= rowNum; i++) {
delete rows[i];
delete rowSetting[i];
}
this.data.rowNum -= span;
cellLookup = {};
colSettingLookup = {};
for (var p in originWraps) {
var wrap = originWraps[p];
if (!(x <= wrap.minx && ex >= wrap.maxx)) {
var wrapChanged = wrap.minx <= x && x <= wrap.maxx
|| wrap.minx <= ex && ex <= wrap.maxx;
if (ex < wrap.minx) {
wrap.minx -= span;
wrap.maxx -= span;
} else if (x <= wrap.maxx) {
if (x < wrap.minx) {
wrap.minx = x;
}
wrap.maxx -= span;
if (wrap.maxx < x - 1) {
wrap.maxx = x - 1;
}
}
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c,
wrapChanged : wrapChanged
};
if (!rows[r]) {
rows[r] = {};
}
if (!rows[r][c]) {
rows[r][c] = {};
}
var cell = rows[r][c];
if (wrap.maxy <= wrap.miny && wrap.minx >= wrap.maxx) {
delete cell.wrap;
} else {
cell.wrap = Ext.apply({}, wrap);
}
}
}
}
}
for (var p in originGroups) {
var group = originGroups[p];
if (ex < group[0]) {
group[0] -= span;
group[1] -= span;
} else if (x <= group[1]) {
if (x < group[0]) {
group[0] = x;
}
group[1] -= span;
if (group[1] < x - 1) {
group[1] = x - 1;
}
}
if (group[0] >= group[1]) {
delete rowSetting[group[0]].group;
}
for (var r = group[0]; r <= group[1]; r++) {
rowSettingLookup[r] = true;
}
}
var changedFormulas = this.checkFormulaAfterRowDeleted(x, span);
delete this.formulaRelatedMap;
this.onCheckFormulaFn();
if (!supressAction) {
var formulas = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
var changedRowSetting = {}, changedRows = {};
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row && row[c]) {
changedRows[r] = changedRows[r] || {};
changedRows[r][c] = this.deepClone(row[c]);
}
}
for (var p in rowSettingLookup) {
if (rowSetting[p]) {
changedRowSetting[p] = this.deepClone(rowSetting[p]);
}
}
md = {
action : "delete-row",
type : "redo",
rowNum : this.data.rowNum,
row : x,
span : span,
changedRowSetting : changedRowSetting,
changedRows : changedRows,
formulas : formulas
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
}
this.put2ModifiedCache("deleteRows", {
x : x,
span : span
});
for (var p in cellLookup) {
var coo = cellLookup[p];
if (coo.wrapChanged) {
var r = coo.x, c = coo.y;
this.put2ModifiedCache("createUpdate", {
x : r,
y : c,
data : this.getModifiedData(r, c)
});
}
}
for (var p in rowSettingLookup) {
this.put2ModifiedCache("createUpdate", {
x : p,
y : 0,
data : this.getModifiedData(p, 0)
});
}
for (var p in changedFormulas) {
var formula = changedFormulas[p];
for (var q in formula) {
this.put2ModifiedCache("createUpdate", {
x : p,
y : q,
data : this.getModifiedData(p, q)
});
}
}
},
deleteCol : function(y, span, supressAction) {
span = span || 1;
span = Number(span);
var rows = this.data.rows;
var colSetting = this.data.colSetting;
var colNum = this.getMaxColumnNumber();
var og, md;
var wraps = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (cell && cell.wrap) {
var wrap = cell.wrap;
var wid = this.getWrapId(wrap);
if (!wraps[wid]) {
wraps[wid] = Ext.apply({}, wrap);
}
}
}
}
var groups = {};
for (var p in colSetting) {
var rs = colSetting[p];
if (rs && rs.group) {
var group = rs.group;
if (!groups[p]) {
groups[p] = group;
}
}
}
var originWraps = {}, originGroups = {}, cellLookup = {}, colSettingLookup = {};
for (var p in wraps) {
var wrap = wraps[p];
if (y <= wrap.maxy) {
originWraps[p] = Ext.apply({}, wrap);
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c
};
}
}
}
}
for (var p in groups) {
var group = groups[p];
if (y <= group[1]) {
originGroups[p] = [].concat(group);
for (var c = group[0]; c <= group[1]; c++) {
colSettingLookup[c] = true;
}
}
}
if (!supressAction) {
var deletedColSetting = {}, deletedCols = {}, formulas = {};
for (var i = 0; i < span; i++) {
var c = y + i;
if (colSetting[c]) {
deletedColSetting[c] = this.deepClone(colSetting[c]);
}
for (var p in rows) {
p = Number(p);
if (0 !== p) {
var row = rows[p];
if (row[c]) {
deletedCols[p] = deletedCols[p] || {};
deletedCols[p][c] = this.deepClone(row[c]);
}
}
}
}
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
deletedCols[r] = deletedCols[r] || {};
deletedCols[r][c] = this.deepClone(row[c]);
}
}
for (var p in colSettingLookup) {
if (colSetting[p]) {
deletedColSetting[p] = this.deepClone(colSetting[p]);
}
}
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (cell && Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
og = {
action : "delete-col",
type : "undo",
colNum : colNum,
col : y,
span : span,
deletedColSetting : deletedColSetting,
deletedCols : deletedCols,
formulas : formulas
};
}
var sy = y + span, ey = y + span - 1;
for (var p in rows) {
if (0 == p) {
continue;
}
var row = rows[p];
if (row) {
for (var j = y; j < sy; j++) {
delete row[j];
}
for (var j = sy; j <= colNum; j++) {
if (row[j]) {
row[j - span] = row[j];
} else {
delete row[j - span];
}
}
for (var j = colNum - span + 1; j <= colNum; j++) {
delete row[j];
}
}
}
for (var j = y; j < sy; j++) {
delete colSetting[j];
}
for (var j = sy; j <= colNum; j++) {
if (colSetting[j]) {
colSetting[j - span] = colSetting[j];
} else {
delete colSetting[j - span];
}
}
for (var j = colNum - span + 1; j <= colNum; j++) {
delete colSetting[j];
}
this.data.colNum -= span;
cellLookup = {};
colSettingLookup = {};
for (var p in originWraps) {
var wrap = originWraps[p];
if (!(wrap.miny >= y && ey >= wrap.maxy)) {
var wrapChanged = wrap.miny <= y && y <= wrap.maxy
|| wrap.miny <= ey && ey <= wrap.maxy;
if (ey < wrap.miny) {
wrap.miny -= span;
wrap.maxy -= span;
} else if (y <= wrap.maxy) {
if (y < wrap.miny) {
wrap.miny = y;
}
wrap.maxy -= span;
if (wrap.maxy < y - 1) {
wrap.maxy = y - 1;
}
}
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c,
wrapChanged : wrapChanged
};
if (!rows[r]) {
rows[r] = {};
}
if (!rows[r][c]) {
rows[r][c] = {};
}
var cell = rows[r][c];
if (wrap.maxy <= wrap.miny && wrap.minx >= wrap.maxx) {
delete cell.wrap;
} else {
cell.wrap = Ext.apply({}, wrap);
}
}
}
}
}
for (var p in originGroups) {
var group = originGroups[p];
if (!(group[0] >= y && ey >= group[1])) {
if (ey < group[0]) {
group[0] -= span;
group[1] -= span;
} else if (y <= group[1]) {
if (y < group[0]) {
group[0] = y;
}
group[1] -= span;
if (group[1] < y - 1) {
group[1] = y - 1;
}
}
if (group[0] >= group[1]) {
delete colSetting[group[0]].group;
}
for (var c = group[0]; c <= group[1]; c++) {
colSettingLookup[c] = true;
}
}
}
var changedFormulas = this.checkFormulaAfterColumnDeleted(y, span);
delete this.formulaRelatedMap;
this.onCheckFormulaFn();
if (!supressAction) {
var formulas = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
var changedColSetting = {}, changedCols = {};
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
changedCols[r] = changedCols[r] || {};
changedCols[r][c] = this.deepClone(row[c]);
}
}
for (var p in colSettingLookup) {
if (colSetting[p]) {
changedColSetting[p] = this.deepClone(colSetting[p]);
}
}
md = {
action : "delete-col",
type : "redo",
colNum : this.data.colNum,
col : y,
span : span,
changedColSetting : changedColSetting,
changedCols : changedCols,
formulas : formulas
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
}
this.put2ModifiedCache("deleteCols", {
y : y,
span : span
});
for (var p in cellLookup) {
var coo = cellLookup[p];
if (coo.wrapChanged) {
var r = coo.x, c = coo.y;
this.put2ModifiedCache("createUpdate", {
x : r,
y : c,
data : this.getModifiedData(r, c)
});
}
}
for (var p in colSettingLookup) {
this.put2ModifiedCache("createUpdate", {
x : 0,
y : p,
data : this.getModifiedData(0, p)
});
}
for (var p in changedFormulas) {
var formula = changedFormulas[p];
for (var q in formula) {
this.put2ModifiedCache("createUpdate", {
x : p,
y : q,
data : this.getModifiedData(p, q)
});
}
}
},
insertCol : function(y, flag, supressAction) {
var ry = y;
if ("before" != flag) {
ry++;
}
var rows = this.data.rows;
var colSetting = this.data.colSetting;
var colNum = this.getMaxColumnNumber();
var og, md;
var wraps = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (cell && cell.wrap) {
var wrap = cell.wrap;
var wid = this.getWrapId(wrap);
if (!wraps[wid]) {
wraps[wid] = wrap;
}
}
}
}
var groups = {};
for (var p in colSetting) {
var rs = colSetting[p];
if (rs && rs.group) {
var group = rs.group;
if (!groups[p]) {
groups[p] = group;
}
}
}
var originWraps = {}, originGroups = {}, cellLookup = {}, colSettingLookup = {};
for (var p in wraps) {
var wrap = wraps[p];
if (ry <= wrap.maxy) {
originWraps[p] = Ext.apply({}, wrap);
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c
};
}
}
}
}
for (var p in groups) {
var group = groups[p];
if (group[1] >= ry) {
originGroups[p] = [].concat(group);
for (var c = group[0]; c <= group[1]; c++) {
colSettingLookup[c] = true;
}
}
}
if (!supressAction) {
var formulas = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
var changedCols = {}, changedColSetting = {};
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
changedCols[r] = changedCols[r] || {};
changedCols[r][c] = this.deepClone(row[c]);
}
}
for (var p in colSettingLookup) {
if (colSetting[p]) {
changedColSetting[p] = this.deepClone(colSetting[p]);
}
}
og = {
action : "insert-col",
type : "undo",
colNum : colNum,
col : y,
flag : flag,
formulas : formulas,
changedCols : changedCols,
changedColSetting : changedColSetting
};
}
cellLookup = {};
colSettingLookup = {};
for (var p in originWraps) {
var wrap = originWraps[p];
var wrapChanged = wrap.miny < ry && ry <= wrap.maxy;
if (ry <= wrap.miny) {
wrap.miny += 1;
}
if (wrap.maxy >= ry) {
wrap.maxy += 1;
}
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c,
wrapChanged : wrapChanged
};
}
}
}
for (var p in originGroups) {
var group = originGroups[p];
if (ry <= group[0]) {
group[0] += 1;
}
if (ry <= group[1]) {
group[1] += 1;
}
for (var c = group[0]; c <= group[1]; c++) {
colSettingLookup[c] = true;
}
}
for (var p in rows) {
if (0 == p) {
continue;
}
var row = rows[p];
if (row) {
for (var j = colNum; j >= ry; j--) {
if (row[j]) {
row[j + 1] = row[j];
} else {
delete row[j + 1];
}
}
delete row[ry];
if (!supressAction) {
var obj = {}, cell = row[ry - 1];
if (cell && cell.wrap && cell.wrap.maxy >= ry) {
obj.wrap = Ext.apply({}, cell.wrap);
}
row[ry] = obj;
}
}
}
for (var j = colNum; j >= ry; j--) {
if (colSetting[j]) {
colSetting[j + 1] = colSetting[j];
} else {
delete colSetting[j + 1];
}
}
delete colSetting[ry];
if (!supressAction) {
var obj = {}, cs = colSetting[ry - 1];
if (cs && cs.group && cs.group[1] >= ry) {
obj.group = [].concat(cs.group);
}
colSetting[ry] = obj;
}
this.data.colNum++;
var changedFormulas = this.checkFormulaAfterColumnInserted(ry, 1);
delete this.formulaRelatedMap;
this.onCheckFormulaFn();
if (!supressAction) {
var formulas = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = Ext.apply({}, cell);
}
}
}
var changedCols = {}, changedColSetting = {};
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
changedCols[r] = changedCols[r] || {};
changedCols[r][c] = this.deepClone(row[c]);
}
}
for (var p in colSettingLookup) {
if (colSetting[p]) {
changedColSetting[p] = this.deepClone(colSetting[p]);
}
}
md = {
action : "insert-col",
type : "redo",
colNum : colNum,
col : y,
flag : flag,
formulas : formulas,
changedColSetting : changedColSetting,
changedCols : changedCols
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
}
this.put2ModifiedCache("insertColumnAt", {
y : ry
});
for (var p in cellLookup) {
var coo = cellLookup[p];
if (coo.wrapChanged) {
var r = coo.x, c = coo.y;
this.put2ModifiedCache("createUpdate", {
x : r,
y : c,
data : this.getModifiedData(r, c)
});
}
}
for (var p in colSettingLookup) {
this.put2ModifiedCache("createUpdate", {
x : 0,
y : p,
data : this.getModifiedData(0, p)
});
}
for (var p in changedFormulas) {
var formula = changedFormulas[p];
for (var q in formula) {
this.put2ModifiedCache("createUpdate", {
x : p,
y : q,
data : this.getModifiedData(p, q)
});
}
}
},
getMaxRowNumber : function(sheetIndex) {
if (false == Ext.type(sheetIndex)) {
sheetIndex = this.activeSheet;
}
var data = this.sheets[sheetIndex];
var rows = data.rows;
var rowNum = 0;
for (var p in rows) {
p = Number(p);
if (p > rowNum) {
rowNum = p;
}
}
data.rowNum = rowNum;
return rowNum;
},
getMaxColumnNumber : function(sheetIndex) {
if (false == Ext.type(sheetIndex)) {
sheetIndex = this.activeSheet;
}
var data = this.sheets[sheetIndex];
var rows = data.rows;
var colNum = 0;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
if (q > colNum) {
colNum = q;
}
}
}
data.colNum = colNum;
return colNum;
},
insertRow : function(x, flag, supressAction) {
var rx = x;
if ("above" != flag) {
rx++;
}
var rows = this.data.rows;
var rowSetting = this.data.rowSetting;
var rowNum = this.getMaxRowNumber();
var og, md;
var wraps = {};
for (var q in rows) {
var row = rows[q];
for (var p in row) {
var cell = row[p];
if (cell.wrap) {
var wrap = cell.wrap;
var wid = this.getWrapId(wrap);
if (!wraps[wid]) {
wraps[wid] = wrap;
}
}
}
}
var groups = {};
for (var p in rowSetting) {
var rs = rowSetting[p];
if (rs && rs.group) {
var group = rs.group;
if (!groups[p]) {
groups[p] = group;
}
}
}
var originWraps = {}, originGroups = {}, cellLookup = {}, rowSettingLookup = {};
for (var p in wraps) {
var wrap = wraps[p];
if (rx <= wrap.maxx) {
originWraps[p] = Ext.apply({}, wrap);
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c
};
}
}
}
}
for (var p in groups) {
var group = groups[p];
if (group[1] >= rx) {
originGroups[p] = [].concat(group);
for (var c = group[0]; c <= group[1]; c++) {
rowSettingLookup[c] = true;
}
}
}
if (!supressAction) {
var formulas = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
var changedRows = {}, changedRowSetting = {};
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
changedRows[r] = changedRows[r] || {};
changedRows[r][c] = this.deepClone(row[c]);
}
}
for (var p in rowSettingLookup) {
if (rowSetting[p]) {
changedRowSetting[p] = this.deepClone(rowSetting[p]);
}
}
og = {
action : "insert-row",
type : "undo",
rowNum : rowNum,
row : x,
flag : flag,
formulas : formulas,
changedRows : changedRows,
changedRowSetting : changedRowSetting
};
}
cellLookup = {};
rowSettingLookup = {};
for (var p in originWraps) {
var wrap = originWraps[p];
var wrapChanged = wrap.minx < rx && rx <= wrap.maxx;
if (rx <= wrap.minx) {
wrap.minx += 1;
}
if (wrap.maxx >= rx) {
wrap.maxx += 1;
}
for (var r = wrap.minx; r <= wrap.maxx; r++) {
for (var c = wrap.miny; c <= wrap.maxy; c++) {
cellLookup[r + "-" + c] = {
x : r,
y : c,
wrapChanged : wrapChanged
};
}
}
}
for (var p in originGroups) {
var group = originGroups[p];
if (rx <= group[0]) {
group[0] += 1;
}
if (rx <= group[1]) {
group[1] += 1;
}
for (var c = group[0]; c <= group[1]; c++) {
rowSettingLookup[c] = true;
}
}
for (var i = rowNum; i >= rx; i--) {
if (rows[i]) {
rows[i + 1] = rows[i];
} else {
delete rows[i + 1];
}
if (rowSetting[i]) {
rowSetting[i + 1] = rowSetting[i];
} else {
delete rowSetting[i + 1];
}
}
delete rowSetting[rx];
delete rows[rx];
if (!supressAction) {
var obj = {}, rs = rowSetting[rx - 1];
if (rs && rs.group && rs.group[1] >= rx) {
obj.group = [].concat(rs.group);
}
rowSetting[rx] = obj;
obj = {};
var row = rows[rx - 1];
if (row) {
for (var c in row) {
var cell = row[c];
if (cell && cell.wrap && cell.wrap.maxx >= rx) {
obj[c] = {
wrap : Ext.apply({}, wrap)
};
}
}
rows[rx] = obj;
}
}
this.data.rowNum++;
var changedFormulas = this.checkFormulaAfterRowInserted(x, 1);
delete this.formulaRelatedMap;
this.onCheckFormulaFn();
if (!supressAction) {
var formulas = {};
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (Ext.ss.common.Mask.isFormula(cell.data)) {
formulas[p] = formulas[p] || {};
formulas[p][q] = this.deepClone(cell);
}
}
}
var changedRows = {}, changedRowSetting = {};
for (var p in cellLookup) {
var coo = cellLookup[p];
var r = coo.x, c = coo.y;
var row = rows[r];
if (row[c]) {
changedRows[r] = changedRows[r] || {};
changedRows[r][c] = this.deepClone(row[c]);
}
}
for (var p in rowSettingLookup) {
if (rowSetting[p]) {
changedRowSetting[p] = this.deepClone(rowSetting[p]);
}
}
md = {
action : "insert-row",
type : "redo",
rowNum : rowNum,
row : x,
flag : flag,
formulas : formulas,
changedRows : changedRows,
changedRowSetting : changedRowSetting
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
}
this.put2ModifiedCache("insertRowAt", {
x : rx
});
for (var p in cellLookup) {
var coo = cellLookup[p];
if (coo.wrapChanged) {
var r = coo.x, c = coo.y;
this.put2ModifiedCache("createUpdate", {
x : r,
y : c,
data : this.getModifiedData(r, c)
});
}
}
for (var p in rowSettingLookup) {
this.put2ModifiedCache("createUpdate", {
x : p,
y : 0,
data : this.getModifiedData(p, 0)
});
}
for (var p in changedFormulas) {
var formula = changedFormulas[p];
for (var q in formula) {
this.put2ModifiedCache("createUpdate", {
x : p,
y : q,
data : this.getModifiedData(p, q)
});
}
}
},
checkBorder : function(minx, miny, maxx, maxy) {
var x = minx - 1, y = miny - 1;
var t = this.getCell(x, miny), l = this.getCell(minx, y);
if ("x-spreadsheet-bottom-black" == t.bb
&& "x-spreadsheet-right-black" == l.br) {
return true;
} else {
return false;
}
},
isWraped : function(x, y) {
var row = this.data.rows[x];
if (row) {
var cell = row[y];
if (cell && cell.wrap) {
return true;
}
}
return false;
},
cancelWraped : function(x, y, stopEvent) {
var rows = this.data.rows;
var wrap = rows[x][y].wrap;
var minx = wrap.minx, miny = wrap.miny, maxx = wrap.maxx, maxy = wrap.maxy;
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
if (stopEvent) {
var cell = rows[i][j];
delete cell.wrap;
} else {
this.fireEvent("attributechange", i, j, [["wrap", null]]);
}
}
}
},
getCellSize : function(x, y) {
var minx = x, maxx = x, miny = y, maxy = y;
var row = this.data.rows[x];
if (row) {
var cell = row[y];
if (cell && cell.wrap) {
minx = cell.wrap.minx;
miny = cell.wrap.miny;
maxx = cell.wrap.maxx;
maxy = cell.wrap.maxy;
}
}
var w = this.getSpanWidth(miny, maxy);
var h = this.getSpanHeight(minx, maxx);
return [w, h];
},
getWrapCellInCol : function(col) {
var wraps = {};
var rows = this.data.rows;
for (var p in rows) {
var cell = rows[p][col];
if (cell && cell.wrap) {
var w = cell.wrap;
wraps[w.minx + "-" + w.miny + "-" + w.maxx + "-" + w.maxy] = w;
}
}
return wraps;
},
getWrapCellInRow : function(row) {
var wraps = {};
row = this.data.rows[row];
for (var p in row) {
var cell = row[p];
if (cell && cell.wrap) {
var w = cell.wrap;
wraps[w.minx + "-" + w.miny + "-" + w.maxx + "-" + w.maxy] = w;
}
}
return wraps;
},
getRowIndexFromTop : function(top) {
var ss = this.spreadsheet;
var t = 0;
for (var i = 1; i <= ss.lastPosy; i++) {
t += this.getHeight(i, i);
if (t >= top) {
return i;
}
}
return ss.lastPosy;
},
getColIndexFromLeft : function(left) {
var ss = this.spreadsheet;
var l = 0;
for (var i = 1; i <= ss.lastPosx; i++) {
l += this.getWidth(i, i);
if (l >= left) {
return i;
}
}
return ss.lastPosx;
},
copyCell : function(pos, obj) {
var x = pos.x, y = pos.y;
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = Ext.apply({}, obj);
this.setCellData(x, y, rows[x][y].data, true);
},
copyRowSetting : function(x, obj) {
var rs = this.data.rowSetting;
rs[x] = Ext.apply({}, obj);
},
copyColSetting : function(y, obj) {
var cs = this.data.colSetting;
cs[y] = Ext.apply({}, obj);
},
findVisiableCell : function(x, y, direct, flag) {
var cs = this.data.colSetting, rs = this.data.rowSetting;
var i, j, r, c;
if ("col" == direct) {
if ("left" == flag) {
for (j = y; j >= 0; j--) {
c = cs[j];
if (!c || "none" != c.display) {
break;
}
}
if (0 > j) {
j = y;
}
} else {
for (j = y;; j++) {
c = cs[j];
if (!c || "none" != c.display) {
break;
}
}
}
return {
x : x,
y : j
};
} else if ("row" == direct) {
if ("up" == flag) {
for (i = x; i >= 0; i--) {
r = rs[i];
if (!r || "none" != r.display) {
break;
}
}
if (0 > i) {
i = x;
}
} else {
for (i = x;; i++) {
r = rs[i];
if (!r || "none" != r.display) {
break;
}
}
}
return {
x : i,
y : y
};
} else {
i = x;
j = y;
var count = 0;
while (count < 2) {
count = 0;
r = rs[i];
c = cs[j];
if (r && "none" == r.display) {
i++;
} else {
count++;
}
if (c && "none" == c.display) {
j++;
} else {
count++;
}
}
return {
x : i,
y : j
};
}
},
addSheet : function(name, index, callback, scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
Ext.Msg.alert(feyaSoft.lang.common.error,
feyaSoft.ss.lang.noPermissionAction);
return;
}
this.saveActiveSheet(null, function() {
var sheets = this.sheets;
this.addHStack(index);
for (var j = this.sheets.length - 1; j >= index; j--) {
sheets[j + 1] = sheets[j];
}
j++;
sheets[j] = this.generateData(name);
this.createNewTab(name, index + 1, function(tabId) {
sheets[j].tabId = tabId;
sheets[j].name = name;
delete sheets[j].loaded;
this.setActiveSheet(j);
this.readActiveSheet(callback, scope);
}, this);
}, this);
},
renameSheet : function(name, index) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
Ext.Msg.alert(feyaSoft.lang.common.error,
feyaSoft.ss.lang.noPermissionAction);
return;
}
var oldName = this.sheets[index].name;
this.sheets[index].name = name;
var tabId = this.sheets[index].tabId;
if (false !== Ext.type(tabId)) {
this.renameTab(tabId, name, oldName);
}
},
renameTab : function(tabId, name, oldName, callback, scope) {
if (this.disableCallingBackEnd) {
this.changeFormulaAfterRenameTab(tabId, name, oldName);
if (callback) {
callback.call(scope);
}
} else {
Ext.Ajax.request({
timeout : 300000,
url : this.renameTabUrl,
params : {
name : name,
tabId : tabId
},
success : function(response, opts) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
this.changeFormulaAfterRenameTab(tabId, name,
oldName);
if (callback) {
callback.call(scope);
}
} else {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error, json.info);
}
},
failure : function(response, opts) {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
}
},
changeFormulaAfterRenameTab : function(tabId, name, oldName) {
var sheets = this.sheets;
oldName = oldName.trim();
var exp = "\"" + oldName + "\"!";
exp = Ext.escapeRe(exp);
exp = "(" + exp + ")";
var exp1 = "'" + oldName + "'!";
exp1 = Ext.escapeRe(exp1);
exp = exp + "|" + exp1;
var exp2 = oldName + "!";
exp2 = Ext.escapeRe(exp2);
exp = exp + "|" + exp2;
var reg = new RegExp(exp, "gi");
for (var i = 0, len = sheets.length; i < len; i++) {
var sheet = sheets[i];
var rows = sheet.rows;
for (var r in rows) {
var row = rows[r];
for (var c in row) {
var cell = row[c];
if (cell && Ext.ss.common.Mask.isFormula(cell.data)) {
var origin = cell['origin-data'];
if (origin) {
var target = origin.replace(reg, function(w) {
var pos = arguments[arguments.length
- 2];
var pre = origin[pos - 1];
if (/[\+\-\*\/\%\(\[\{\,\s\=]/gi
.test(pre)) {
return "\"" + name + "\"!";
}
return w;
});
cell['origin-data'] = target;
this.put2ModifiedCache("createUpdate", {
tabId : sheet.tabId,
x : r,
y : c,
data : Ext.encode(cell)
});
}
}
}
}
}
},
createNewTab : function(name, index, callback, scope) {
if (this.disableCallingBackEnd) {
var tabId = this.getNewTabId();
if (callback) {
callback.call(scope, tabId);
}
} else {
Ext.Ajax.request({
timeout : 300000,
url : this.newTabUrl,
params : {
name : name,
documentId : this.getFileId(),
position : index
},
success : function(response, opts) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope, json.tabId);
}
} else {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error, json.info);
}
},
failure : function(response, opts) {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
}
},
deleteSheet : function(index, callback, scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
Ext.Msg.alert(feyaSoft.lang.common.error,
feyaSoft.ss.lang.noPermissionAction);
return;
}
var sheets = this.sheets;
var tabId = sheets[index].tabId;
var flag = false;
var fn = function() {
this.deleteHStack(index);
for (var i = index + 1, len = sheets.length; i < len; i++) {
sheets[i - 1] = sheets[i];
}
sheets.pop();
this.deleteTab(tabId, sheets[this.activeSheet].tabId);
if (flag) {
this.readActiveSheet(callback, scope);
} else if (callback) {
callback.call(scope);
}
};
if (this.activeSheet == index) {
flag = true;
var i = 0 < this.activeSheet ? this.activeSheet - 1 : 0;
this.setActiveSheet(i);
fn.call(this);
} else {
this.saveActiveSheet(null, function() {
if (index < this.activeSheet) {
flag = true;
this.setActiveSheet(this.activeSheet - 1);
}
fn.call(this);
}, this);
}
},
deleteTab : function(tabId, activeTabId, callback, scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
this.resetModifiedCache();
if (callback) {
callback.call(scope);
}
return;
}
if (this.disableCallingBackEnd) {
if (callback) {
callback.call(scope);
}
} else {
Ext.Ajax.request({
timeout : 300000,
url : this.deleteTabUrl,
params : {
delTabId : tabId,
activeTabId : activeTabId
},
success : function(response, opts) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope);
}
} else {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error, json.info);
}
},
failure : function(response, opts) {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
}
},
deepClone : function(o, expt) {
var obj;
var type = Ext.type(o);
if ("array" == type) {
obj = [];
for (var i = 0, len = o.length; i < len; i++) {
obj.push(this.deepClone(o[i], expt));
}
} else if ("object" == type) {
obj = {};
for (var p in o) {
if (expt) {
if (!expt[p]) {
obj[p] = this.deepClone(o[p], expt);
}
} else {
obj[p] = this.deepClone(o[p], expt);
}
}
} else {
obj = o;
}
return obj;
},
copySheet : function(name, index, oindex, callback, scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
Ext.Msg.alert(feyaSoft.lang.common.error,
feyaSoft.ss.lang.noPermissionAction);
return;
}
ss.maskUI(feyaSoft.ss.lang.copySheet);
this.saveActiveSheet(null, function() {
var sheets = this.sheets;
var tabId = sheets[oindex].tabId;
var obj = this.deepClone(sheets[oindex], {
chartSet : true
});
this.addHStack(index);
for (var j = this.sheets.length - 1; j >= index; j--) {
sheets[j + 1] = sheets[j];
}
j++;
sheets[j] = obj;
sheets[j].name = name;
if (false !== Ext.type(tabId)) {
this.copyPasteTab(tabId, index, name,
function(newTabId) {
sheets[j].tabId = newTabId;
this.setActiveSheet(j);
this.readActiveSheet(callback, scope);
ss.unmaskUI();
}, this);
} else {
this.setActiveSheet(j);
this.readActiveSheet();
ss.unmaskUI();
}
}, this);
},
getNewTabId : function() {
return (new Date).format("YmdHis") + Ext.id();
},
copyPasteTab : function(tabId, index, name, callback, scope) {
if (this.disableCallingBackEnd) {
if (callback) {
callback.call(scope, this.getNewTabId());
}
} else {
Ext.Ajax.request({
timeout : 300000,
url : this.copyTabUrl,
params : {
tabId : tabId,
position : index + 1,
name : name
},
success : function(response, opts) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope, json.tabId);
}
} else {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error, json.info);
}
},
failure : function(response, opts) {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
}
},
moveSheet : function(oindex, tindex) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
Ext.Msg.alert(feyaSoft.lang.common.error,
feyaSoft.ss.lang.noPermissionAction);
return;
}
var hs = [];
var arr = [];
var sheets = this.sheets;
this.changeTabOrder(sheets[oindex].tabId, oindex < tindex
? tindex - 1
: tindex);
var hStack = this.hStack;
if (oindex > tindex) {
for (var i = 0; i < tindex; i++) {
arr.push(sheets[i]);
hs.push(hStack[i]);
}
arr.push(sheets[oindex]);
hs.push(hStack[oindex]);
for (var i = tindex; i < oindex; i++) {
arr.push(sheets[i]);
hs.push(hStack[i]);
}
for (var i = oindex + 1, len = sheets.length; i < len; i++) {
arr.push(sheets[i]);
hs.push(hStack[i]);
}
if (tindex <= this.activeSheet && this.activeSheet <= oindex) {
if (this.activeSheet == oindex) {
this.setActiveSheet(tindex);
} else {
this.setActiveSheet(this.activeSheet + 1);
}
}
} else {
for (var i = 0; i < oindex; i++) {
arr.push(sheets[i]);
hs.push(hStack[i]);
}
var len = sheets.length;
tindex--;
for (var i = oindex + 1; i <= tindex; i++) {
arr.push(sheets[i]);
hs.push(hStack[i]);
}
arr.push(sheets[oindex]);
hs.push(hStack[oindex]);
for (var i = tindex + 1; i < len; i++) {
arr.push(sheets[i]);
hs.push(hStack[i]);
}
if (oindex <= this.activeSheet && this.activeSheet <= tindex) {
if (this.activeSheet == oindex) {
this.setActiveSheet(tindex);
} else {
this.setActiveSheet(this.activeSheet - 1);
}
}
}
this.hStack = hs;
this.sheets = arr;
},
changeTabOrder : function(tabId, index, callback, scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
this.resetModifiedCache();
if (callback) {
callback.call(scope);
}
return;
}
var params = {
tabId : tabId,
position : index + 1
};
Ext.Ajax.request({
timeout : 300000,
url : this.reorderUrl,
params : params,
success : function(response, opts) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope);
}
} else {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error, json.info);
}
},
failure : function(response, opts) {
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
},
setActiveSheet : function(index, reset) {
if (reset) {
delete this.lastActiveSheet;
} else {
this.lastActiveSheet = this.activeSheet;
}
this.activeSheet = index;
this.fireEvent("hstackchange", this.getActiveHStack());
},
copyCell2Cell : function(ox, oy, tx, ty) {
var rows = this.data.rows;
var row = rows[ox];
if (row) {
var cell = row[oy];
this.copyCell({
x : tx,
y : ty
}, cell);
}
},
copyRow2Row : function(ox, tx, autoConfig) {
var autoFlag, rows = this.data.rows, rs = this.data.rowSetting;
if (autoConfig) {
autoFlag = autoConfig.flag;
rows = autoConfig.selectedData.data;
rs = autoConfig.selectedData.rowSetting;
}
var row = rows[ox];
if (row) {
for (var p in row) {
if (0 != p) {
var obj = Ext.apply({}, this.getOrignCellObj(ox, p, rows));
if ("style" == autoFlag) {
var origin = Ext.apply({}, this.getOrignCellObj(tx, p,
rows));
if (origin) {
obj.data = origin.data;
obj['origin-data'] = origin['origin-data'];
} else {
delete obj.data;
delete obj['origin-data'];
}
} else if ("content" == autoFlag) {
var textalign = Ext.ss.common.Mask.isNumber(obj.data)
? "text-align:right;"
: "text-align:left;";
obj = {
'text-align' : textalign,
'origin-data' : obj['origin-data'],
data : obj.data
};
}
if ("copy" != autoFlag && "style" != autoFlag) {
var data = Ext.num(obj.data, obj.data);
var r = this.contentRule[p];
if (Ext.isNumber(data)) {
var dn = 0;
var tmp = r.last.toString();
if (tmp) {
var parts = tmp.split(".");
if (2 == parts.length) {
if (dn < parts[1].length) {
dn = parts[1].length;
}
}
}
obj.data = this.formatFloat(r.last + r.inc
* (tx - r.lindex), dn);
} else if (data) {
data = data.toString();
if ("week" == r.type) {
obj.data = this.loopWeek(data, ox, r);
} else if ("month" == r.type) {
obj.data = this.loopMonth(data, ox, r);
} else if ("date" == r.type) {
obj.data = this.loopDate(data, ox, r);
}
}
}
if (Ext.ss.common.Mask.isFormula(obj.data)) {
var originStr = this.refreshOriginFormula(
obj['origin-data'], tx - ox, 0);
obj.data = this.adjustFormula(tx, p, originStr);
obj['origin-data'] = originStr;
}
if (obj.wrap) {
var wrap = Ext.apply({}, obj.wrap);
wrap.minx = wrap.minx - ox + tx;
wrap.maxx = wrap.maxx - ox + tx;
obj.wrap = wrap;
}
this.fireEvent("cellchange", tx, p, obj);
}
}
}
if ("content" !== autoFlag) {
var r = rs[ox];
this.fireEvent("rowchange", tx, r);
} else {
var r = rs[tx];
this.fireEvent("rowchange", tx, r);
}
},
copyCol2Col : function(oy, ty, autoConfig) {
var autoFlag, rows = this.data.rows, cs = this.data.colSetting;
if (autoConfig) {
autoFlag = autoConfig.flag;
rows = autoConfig.selectedData.data;
cs = autoConfig.selectedData.colSetting;
}
for (var p in rows) {
if (0 != p) {
var row = rows[p];
if (row) {
var obj = Ext.apply({}, this.getOrignCellObj(p, oy, rows));
if ("style" == autoFlag) {
var origin = Ext.apply({}, this.getOrignCellObj(p, ty,
rows));
if (origin) {
obj.data = origin.data;
obj['origin-data'] = origin['origin-data'];
} else {
delete obj.data;
delete obj['origin-data'];
}
} else if ("content" == autoFlag) {
var textalign = Ext.ss.common.Mask.isNumber(obj.data)
? "text-align:right;"
: "text-align:left;";
obj = {
'text-align' : textalign,
'origin-data' : obj['origin-data'],
data : obj.data
};
}
if (Ext.ss.common.Mask.isFormula(obj.data)) {
var originStr = this.refreshOriginFormula(
obj['origin-data'], 0, ty - oy);
obj.data = this.adjustFormula(p, ty, originStr);
obj['origin-data'] = originStr;
}
if (obj.wrap) {
var wrap = Ext.apply({}, obj.wrap);
wrap.miny = wrap.miny - oy + ty;
wrap.maxy = wrap.maxy - oy + ty;
obj.wrap = wrap;
}
this.fireEvent("cellchange", p, ty, obj);
}
}
}
if ("content" !== autoFlag) {
var c = cs[oy];
this.fireEvent("colchange", ty, c);
} else {
var c = cs[ty];
this.fireEvent("colchange", ty, c);
}
},
autoCalculateRow : function(minx, maxx, x, autoFlag) {
var len = maxx - minx + 1;
var offset, i;
if (x > maxx) {
offset = x - maxx - 1;
i = offset % len + minx;
} else {
offset = minx - x - 1;
i = maxx - offset % len;
}
this.copyRow2Row(i, x, autoFlag);
},
autoCalculateCol : function(miny, maxy, y, autoFlag) {
var len = maxy - miny + 1;
var offset, j;
if (y > maxy) {
offset = y - maxy - 1;
j = offset % len + miny;
} else {
offset = miny - y - 1;
j = maxy - offset % len;
}
this.copyCol2Col(j, y, autoFlag);
},
autoCalculateCellByRow : function(minx, maxx, col, x, autoConfig, miny) {
var len = maxx - minx + 1;
var offset, i;
if (x > maxx) {
offset = x - maxx - 1;
i = offset % len + minx;
} else {
offset = minx - x - 1;
i = maxx - offset % len;
}
var autoFlag, rows;
if (autoConfig) {
autoFlag = autoConfig.flag;
rows = autoConfig.selectedData.data;
}
var obj = Ext.apply({}, this.getOrignCellObj(i, col, rows));
if ("style" == autoFlag) {
var origin = this.getOrignCellObj(x, col, rows) || {};
obj.data = origin.data;
obj['origin-data'] = origin['origin-data'];
} else if ("copy" != autoFlag) {
var data = Ext.num(obj.data, obj.data);
var r = this.contentRule[col];
if (Ext.isNumber(data)) {
if (false !== Ext.type(r.last)) {
var dn = 0;
var tmp = r.last.toString();
var parts = tmp.split(".");
if (2 == parts.length) {
if (dn < parts[1].length) {
dn = parts[1].length;
}
}
obj.data = this.formatFloat(
r.last + r.inc * (x - r.lindex), dn);
}
} else if (data) {
data = data.toString();
if ("week" == r.type) {
obj.data = this.loopWeek(data, x, r);
} else if ("month" == r.type) {
obj.data = this.loopMonth(data, x, r);
} else if ("date" == r.type) {
obj.data = this.loopDate(data, x, r);
} else if ("isif" == r.type) {
obj['origin-data'] = this.loopISIF(data, x, r);
}
}
if ("content" == autoFlag) {
var textalign;
if (Ext.isNumber(obj.data)) {
textalign = "text-align:right;";
}
obj = {
data : obj.data,
'origin-data' : obj['origin-data'],
'text-align' : textalign
};
}
if (Ext.ss.common.Mask.isFormula(obj.data)) {
var originStr = this.refreshOriginFormula(obj['origin-data'], x
- i, 0);
obj.data = this.adjustFormula(x, col, originStr);
obj['origin-data'] = originStr;
}
} else {
if (Ext.ss.common.Mask.isFormula(obj.data)) {
var originStr = obj['origin-data'];
obj.data = this.adjustFormula(x, col, originStr);
obj['origin-data'] = originStr;
}
}
if ("content" !== autoFlag) {
if (1 < col && miny == col) {
var left = this.getCell(i, col - 1) || {};
if ("x-spreadsheet-right-black" == left.br
&& (!left.wrap || left.wrap.maxy == col - 1)) {
this.addLeftBorderFlag = this.addLeftBorderFlag || {};
var temp = this.getCell(x, col - 1);
if (false == Ext.type(this.addLeftBorderFlag[x])) {
this.addLeftBorderFlag[x] = temp.br || "";
}
this.fireEvent("attributechange", x, col - 1, [["br",
left.br]]);
}
}
} else {
if (1 < col && miny == col) {
if (this.addLeftBorderFlag) {
this.fireEvent("attributechange", x, col - 1, [["br",
this.addLeftBorderFlag[x]]]);
}
}
}
if (obj.wrap) {
var wrap = Ext.apply({}, obj.wrap);
wrap.minx = wrap.minx - i + x;
wrap.maxx = wrap.maxx - i + x;
obj.wrap = wrap;
}
this.fireEvent("cellchange", x, col, obj);
this.spreadsheet.editor.fitRow(x, true, true);
},
autoCalculateCellByCol : function(miny, maxy, row, y, autoConfig, minx) {
var len = maxy - miny + 1;
var offset, j;
if (y > maxy) {
offset = y - maxy - 1;
j = offset % len + miny;
} else {
offset = miny - y - 1;
j = maxy - offset % len;
}
var autoFlag, rows;
if (autoConfig) {
autoFlag = autoConfig.flag;
rows = autoConfig.selectedData.data;
}
var obj = Ext.apply({}, this.getOrignCellObj(row, j, rows));
var origin = this.getOrignCellObj(row, y, rows) || {};
if ("style" == autoFlag) {
obj.data = origin.data;
obj['origin-data'] = origin['origin-data'];
} else if ("copy" != autoFlag) {
var data = Ext.num(obj.data, obj.data);
var r = this.contentRule[row];
if (Ext.isNumber(data)) {
var dn = 0;
var tmp = r.last.toString();
if (tmp) {
var parts = tmp.split(".");
if (2 == parts.length) {
if (dn < parts[1].length) {
dn = parts[1].length;
}
}
}
obj.data = this
.formatFloat(r.last + r.inc * (y - r.lindex), dn);
} else if (data) {
data = data.toString();
if ("week" == r.type) {
obj.data = this.loopWeek(data, y, r);
} else if ("month" == r.type) {
obj.data = this.loopMonth(data, y, r);
}
}
if ("content" == autoFlag) {
var textalign;
if (Ext.isNumber(obj.data)) {
textalign = "text-align:right;";
}
obj = {
data : obj.data,
'origin-data' : obj['origin-data'],
'text-align' : textalign
};
}
if (Ext.ss.common.Mask.isFormula(obj.data)) {
var originStr = this.refreshOriginFormula(obj['origin-data'],
0, y - j);
obj.data = this.adjustFormula(row, y, originStr);
obj['origin-data'] = originStr;
}
}
if ("content" !== autoFlag) {
if (1 < row && row == minx) {
var top = this.getCell(row - 1, j) || {};
if ("x-spreadsheet-bottom-black" == top.bb
&& (!top.wrap || top.wrap.maxx == row - 1)) {
this.addTopBorderFlag = this.addTopBorderFlag || {};
var temp = this.getCell(row - 1, y);
if (false == Ext.type(this.addTopBorderFlag[y])) {
this.addTopBorderFlag[y] = temp.bb || "";
}
this.fireEvent("attributechange", row - 1, y, [["bb",
top.bb]]);
}
}
} else {
if (1 < row && row == minx) {
if (this.addTopBorderFlag) {
this.fireEvent("attributechange", row - 1, y, [["bb",
this.addTopBorderFlag[y]]]);
}
}
}
if (obj.wrap) {
var wrap = Ext.apply({}, obj.wrap);
wrap.miny = wrap.miny - j + y;
wrap.maxy = wrap.maxy - j + y;
obj.wrap = wrap;
}
this.fireEvent("cellchange", row, y, obj);
},
loopWeek : function(data, index, rule) {
var fcap = "Z" > data.charAt(0);
data = data.toLowerCase();
var ws = Ext.ss.common.Mask.week_set;
var week = ws[data];
if (!week) {
ws = Ext.ss.common.Mask.week_full_set;
week = ws[data];
}
if (week) {
var day = Math.round(rule.last + rule.inc * (index - rule.lindex))
% 7;
day = day || 7;
data = ws[day];
}
if (!fcap) {
data = data.replace(/\b\w+\b/, function(word) {
return word.substring(0, 1).toLowerCase()
+ word.substring(1);
});
} else {
data = data.replace(/\b\w+\b/, function(word) {
return word.substring(0, 1).toUpperCase()
+ word.substring(1);
});
}
return data;
},
loopMonth : function(data, index, rule) {
var fcap = "Z" > data.charAt(0);
data = data.toLowerCase();
var ms = Ext.ss.common.Mask.month_set;
var month = ms[data];
if (!month) {
ms = Ext.ss.common.Mask.month_full_set;
month = ms[data];
}
if (month) {
var m = Math.round(rule.last + rule.inc * (index - rule.lindex))
% 12;
m = m || 12;
data = ms[m];
}
if (!fcap) {
data = data.replace(/\b\w+\b/, function(word) {
return word.substring(0, 1).toLowerCase()
+ word.substring(1);
});
} else {
data = data.replace(/\b\w+\b/, function(word) {
return word.substring(0, 1).toUpperCase()
+ word.substring(1);
});
}
return data;
},
loopDate : function(data, index, rule) {
var elapsed = rule.elapsed;
var count = rule.count;
var offset = index - rule.findex;
var len = rule.arr.length;
var t = Math.floor(offset / len), i = offset % len;
var base = rule.first;
t = t * (1 + count);
var bais = 0;
for (var j = 0; j < i; j++) {
if (Ext.isDate(rule.arr[j])) {
bais++;
}
}
t += bais;
var date = base.add(Date.MILLI, t * elapsed);
data = date.format("m/d/Y");
return data;
},
loopISIF : function(data, index, rule) {
var findex = rule.findex, lindex = rule.lindex, periodIndex = rule.periodIndex, partsLen = rule.partsLen;
var partsLookup = rule.partsLookup;
var len = lindex - findex + 1;
var off = (index - findex) % len, count = Math.floor((index - findex)
/ len);
var i = off + findex;
if (!partsLookup[i]) {
return data;
}
var it = [].concat(partsLookup[i].parts);
var poffset = rule.poffset;
if (Ext.isNumber(poffset)) {
it[periodIndex] = Number(it[periodIndex]) + count * partsLen
* rule.poffset;
} else {
var offtype = poffset.offtype, off = poffset.off, fm = poffset.fm;
if ("q" == offtype) {
var cur = it[periodIndex], q;
cur.replace(/[0-9]+/i, function(w) {
q = Number(w.charAt(0));
wlen = w.length;
var year = Number(w.slice(1, wlen));
q = year * 4 + q - 1;
});
q = q + count * partsLen * off;
var year = Math.floor(q / 4);
q = q % 4 + 1;
var str = String.format(fm, q, year);
it[periodIndex] = str;
} else if ("y" == offtype) {
var cur = it[periodIndex], year;
cur.replace(/[0-9]+/i, function(w) {
year = Number(w);
});
year = year + count * partsLen * off;
var str = String.format(fm, year);
it[periodIndex] = str;
}
}
return it.join(",");
},
generateRule : function(obj, origin, dest, rows, dir) {
var rule = {};
for (var j in obj) {
var first = false, last, findex, lindex, count = 0, sum = 0, type = "", elapsed, arr = [];
var isifRule, lastParts, partsLookup = {}, countIndex = 0, periodIndex = 3, poffset, lastPOffset, skipFlag;
for (var i = origin; i <= dest; i++) {
var cell = ("row" == dir
? this.getOrignCellObj(i, j, rows)
: this.getOrignCellObj(j, i, rows))
|| {};
var data = Ext.num(cell.data, cell.data);
var originData = cell['origin-data'];
if (Ext.isNumber(data)) {
if (false === first) {
first = data;
findex = i;
last = data;
lindex = i;
} else {
last = data;
lindex = i;
count += lindex - findex;
sum += last - first;
}
} else if (data) {
data = data.toString().toLowerCase();
var ws = Ext.ss.common.Mask.week_set;
var week = ws[data];
if (!week) {
ws = Ext.ss.common.Mask.week_full_set;
week = ws[data];
}
if (week) {
if (false === first) {
first = week;
findex = i;
last = week;
lindex = i;
} else {
last = week;
lindex = i;
count += lindex - findex;
sum += last - first;
}
type = "week";
} else {
var ms = Ext.ss.common.Mask.month_set;
var month = ms[data];
if (!month) {
ms = Ext.ss.common.Mask.month_full_set;
month = ms[data];
}
if (month) {
if (false === first) {
first = month;
findex = i;
last = month;
lindex = i;
} else {
last = month;
lindex = i;
count += lindex - findex;
sum += last - first;
}
type = "month";
} else {
var date = this.transfer2Date(data);
if (date) {
arr.push(date);
if (false === first) {
first = date;
findex = i;
lindex = i;
} else {
lindex = i;
count++;
if (elapsed) {
if (elapsed != last.getElapsed(date)) {
elapsed = false;
break;
}
} else {
elapsed = last.getElapsed(date);
}
}
last = date;
} else if (!skipFlag) {
if (originData && 0 === originData.indexOf("=")) {
var parts = originData.split(",");
if (periodIndex < parts.length) {
if (!lastParts) {
partsLookup[i] = {
index : countIndex++,
parts : [].concat(parts)
};
lastParts = parts;
} else {
var pFlag = true;
var pLen = lastParts.length;
if (pLen === parts.length) {
for (var k = 0; k < pLen; k++) {
if (k !== periodIndex) {
if (lastParts[k] !== parts[k]) {
pFlag = false;
break;
}
}
}
}
if (pFlag) {
poffset = this
.getISIFPeriodOffset(
parts[periodIndex],
lastParts[periodIndex]);
if (false == Ext
.type(lastPOffset)) {
lastPOffset = poffset;
isifRule = true;
partsLookup[i] = {
index : countIndex++,
parts : []
.concat(parts)
};
} else if (Ext
.encode(lastPOffset) === Ext
.encode(poffset)) {
partsLookup[i] = {
index : countIndex++,
parts : []
.concat(parts)
};
} else {
skipFlag = true;
}
} else {
skipFlag = true;
}
lastParts = parts;
}
}
}
}
}
}
}
}
var inc = 0;
if (0 != count) {
inc = sum / count;
}
rule[j] = {
findex : findex,
first : Number(first),
lindex : lindex,
last : Number(last),
inc : inc,
type : type
};
if (elapsed) {
rule[j] = {
findex : findex,
first : first,
lindex : lindex,
last : last,
arr : arr,
elapsed : elapsed,
type : "date",
count : count
};
}
if (isifRule && !skipFlag) {
rule[j] = {
type : "isif",
findex : origin,
lindex : dest,
partsLookup : partsLookup,
partsLen : countIndex,
periodIndex : periodIndex,
poffset : poffset
};
}
}
return rule;
},
getISIFPeriodOffset : function(pre, next) {
pre = pre.trim();
next = next.trim();
var preNum = Number(pre), nextNum = Number(next);
if (Ext.isNumber(preNum) && Ext.isNumber(nextNum)) {
return preNum - nextNum;
} else {
var preLeft, preQ, preYear, flag = 0;
if (/['"]?Q[1-4][0-9]{4}['"]?/i.test(pre)) {
preLeft = pre.replace(/[0-9]+/i, function(w) {
preQ = Number(w.charAt(0));
wlen = w.length;
preYear = Number(w.slice(1, wlen));
var rs = "";
for (var i = 0; i < wlen; i++) {
rs += "_";
}
return rs;
});
flag++;
}
var nextLeft, nextQ, nextYear;
if (/['"]?Q[1-4][0-9]{4}['"]?/i.test(next)) {
nextLeft = next.replace(/[0-9]+/i, function(w) {
nextQ = Number(w.charAt(0));
wlen = w.length;
nextYear = Number(w.slice(1, wlen));
var rs = "";
for (var i = 0; i < wlen; i++) {
rs += "_";
}
return rs;
});
flag++;
}
if (2 === flag && preLeft === nextLeft) {
var qoff = preYear * 4 + preQ - nextYear * 4 - nextQ;
return {
off : qoff,
offtype : "q",
fm : " 'Q{0}{1}'"
};
} else {
var preLeft, preYear, flag = 0;
if (/['"]?FY[\s]?[0-9]{4}['"]?/i.test(pre)) {
preLeft = pre.replace(/[0-9]+/i, function(w) {
preYear = Number(w);
return "{0}";
});
flag++;
}
var nextLeft, nextYear;
if (/['"]?FY[\s]?[0-9]{4}['"]?/i.test(next)) {
nextLeft = next.replace(/[0-9]+/i, function(w) {
nextYear = Number(w);
return "{0}";
});
flag++;
}
if (2 === flag && preLeft === nextLeft) {
var qoff = preYear - nextYear;
return {
off : qoff,
offtype : "y",
fm : " " + nextLeft
};
}
}
}
},
generateRuleForISIF : function(data) {
},
contentAnalysis : function(minPos, maxPos, rt, flag, rows) {
var rule = {}, type;
if ("row" == flag) {
var minx = minPos.x, maxx = maxPos.x, miny = minPos.y, maxy = maxPos.y;
var obj = {};
if (0 == maxy) {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
for (var j in row) {
obj[j] = true;
}
}
} else {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
for (var j = miny; j <= maxy; j++) {
if (row[j]) {
obj[j] = true;
}
}
}
}
}
rule = this.generateRule(obj, minx, maxx, rows, flag);
} else if ("col" == flag) {
var minx = minPos.x, maxx = maxPos.x, miny = minPos.y, maxy = maxPos.y;
var obj = {};
if (0 == maxx) {
for (var i in rows) {
var row = rows[i];
obj[i] = true;
}
} else {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
for (var j = miny; j <= maxy; j++) {
if (row[j]) {
obj[i] = true;
}
}
}
}
}
rule = this.generateRule(obj, miny, maxy, rows, flag);
}
return rule;
},
doAutoContent : function(minPos, maxPos, rt, autoFlag) {
var ss = this.spreadsheet;
var sm = ss.sm;
rt = rt || sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var flag = sm.compareSelectionRange(rt, {
minPos : minPos,
maxPos : maxPos
});
var rows = autoFlag.selectedData.data;
this.contentRule = this.contentAnalysis(minPos, maxPos, rt, flag, rows);
var min = rt.minPos, max = rt.maxPos;
if ("row" == flag) {
var minx, maxx;
if (min.x < minPos.x) {
minx = min.x;
maxx = minPos.x - 1;
} else if (max.x > maxPos.x) {
minx = maxPos.x + 1;
maxx = max.x;
}
if (0 == min.y && 0 == max.y) {
for (var i = minx; i <= maxx; i++) {
this.autoCalculateRow(minPos.x, maxPos.x, i, autoFlag);
}
} else {
for (var j = min.y; j <= max.y; j++) {
for (var i = minx; i <= maxx; i++) {
this.autoCalculateCellByRow(minPos.x, maxPos.x, j, i,
autoFlag, minPos.y);
}
}
}
} else if ("col" == flag) {
var miny, maxy;
if (min.y < minPos.y) {
miny = min.y;
maxy = minPos.y - 1;
} else if (max.y > maxPos.y) {
miny = maxPos.y + 1;
maxy = max.y;
}
if (0 == min.x && 0 == max.x) {
for (var j = miny; j <= maxy; j++) {
this.autoCalculateCol(minPos.y, maxPos.y, j, autoFlag);
}
} else {
for (var i = min.x; i <= max.x; i++) {
for (var j = miny; j <= maxy; j++) {
this.autoCalculateCellByCol(minPos.y, maxPos.y, i, j,
autoFlag, minPos.x);
}
}
}
}
this.trace(feyaSoft.ss.lang.action_fromat_brush(this
.getNameFromPos(min), this.getNameFromPos(max)));
if ("content" == autoFlag) {
this.addLeftBorderFlag = false;
this.addTopBorderFlag = false;
}
ss.refreshRange();
},
getCellObj : function(x, y, sheetIndex) {
var rows = this.data.rows;
if (false !== Ext.type(sheetIndex)) {
rows = this.sheets[sheetIndex].rows;
}
var row = rows[x];
if (row) {
var cell = row[y] || {};
var wrap = cell.wrap;
if (wrap) {
x = wrap.minx;
y = wrap.miny;
cell = Ext.applyIf({
x : x,
y : y
}, rows[x][y]);
return cell;
}
cell = Ext.applyIf({
x : x,
y : y
}, cell);
return cell;
}
},
getOrignCellObj : function(x, y, rows) {
rows = rows || this.data.rows;
var row = rows[x];
if (row) {
return row[y];
}
},
getCellWidth : function(x, y) {
var miny = y, maxy = y;
var rows = this.data.rows;
var row = rows[x];
if (row) {
var cell = row[y];
if (cell) {
var wrap = cell.wrap;
if (wrap) {
miny = wrap.miny;
maxy = wrap.maxy;
}
}
}
return this.getSpanWidth(miny, maxy);
},
formatFloat : function(f, d) {
d = Math.pow(10, d);
f = Math.round(f * d) / d;
return f;
},
findSheetName : function(name) {
name = name.toLowerCase();
var sheets = this.sheets;
for (var i = 0, len = sheets.length; i < len; i++) {
if (name == sheets[i].name.toLowerCase()) {
return true;
}
}
return false;
},
findTargets : function(target) {
var targetLinks = new Array;
var rows = this.data.rows;
for (var x in rows) {
if (0 == x) {
continue;
}
var row = rows[x];
for (var y in row) {
if (0 == y) {
continue;
}
var data = row[y].data;
if (false != Ext.type(data)) {
if (Ext.ss.common.Mask.isFormula(data)) {
data = this.getCellValue(x, y, undefined, true);
}
data = data.toString();
if (-1 !== data.toLowerCase().indexOf(target.toLowerCase())) {
targetLinks.push({
x : x,
y : y,
data : data
});
}
}
}
}
return targetLinks;
},
filterBy : function(fn, scope) {
var rows = this.data.rows;
for (var p in rows) {
}
},
filterByValues : function(col, minrow, maxrow, values) {
var fn = function(arr, find) {
if (!arr) {
return true;
}
for (var k = 0, len = arr.length; k < len; k++) {
if (arr[k].toString() == find.toString()) {
return true;
}
}
return false;
};
var rows = this.data.rows;
for (var i = minrow; i <= maxrow; i++) {
var cell = this.getCell(i, col);
if (!fn(values, cell.data)) {
this.fireEvent("rowattributechange", i, [["display", "none"]]);
} else {
this.fireEvent("rowattributechange", i, [["display", ""]]);
}
}
},
doFiltering : function(minrow, maxrow) {
var rowSetting = this.data.rowSetting;
var filters = this.getAllFilters();
for (var i = minrow; i <= maxrow; i++) {
if (this.doFilterChecking(i, filters)) {
if (!rowSetting[i] || "" != rowSetting[i].display) {
this.fireEvent("rowattributechange", i, [["display", ""]]);
}
} else {
if (!rowSetting[i] || "none" != rowSetting[i].display) {
this.fireEvent("rowattributechange", i,
[["display", "none"]]);
}
}
}
},
getAllFilters : function(sheetIndex) {
var data = this.data;
if (false != Ext.type(sheetIndex)) {
data = this.sheets[sheetIndex];
}
var filters = {};
var rows = data.rows;
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (cell && cell.filter) {
var x = Number(p);
var minx = cell.filter.minx + x, maxx = cell.filter.maxx
+ x;
var y = Number(q);
var id = y + "-" + minx + "-" + maxx;
var obj = {
y : y,
minx : minx,
maxx : maxx
};
if (cell.filterCheck) {
obj.check = Ext.apply({}, cell.filterCheck);
}
filters[id] = obj;
}
}
}
return filters;
},
doFilterChecking : function(x, filters) {
var rows = this.data.rows;
var row = rows[x] || {};
for (var p in filters) {
var it = filters[p];
var minx = it.minx, maxx = it.maxx, check = it.check, y = it.y;
if (check) {
if ((minx <= x || 0 == minx) && (x <= maxx || 0 == maxx)) {
var cell = this.getCell(x, y);
var data = cell.data, flag = true;
if (cell.wrap) {
data = this.getCellValue(cell.wrap.minx,
cell.wrap.miny, this.activeSheet, true);
} else {
data = this.getCellValue(x, y, this.activeSheet, true);
}
data = data.toString();
for (var q in check) {
var cond = check[q];
if (cond) {
for (var i = 0, len = cond.length; i < len; i++) {
if (cond[i] === data) {
flag = false;
break;
}
}
}
if (!flag) {
break;
}
}
if (!flag) {
return false;
}
}
}
}
return true;
},
transfer2Date : function(dateStr) {
try {
var date = this.prepareDate(dateStr, this.defaultDateFormat);
return date;
} catch (e) {
return dateStr;
}
},
prepareDateStr : function(dateStr, dateFormat) {
if (dateStr == null || !Ext.isString(dateStr)) {
return false;
}
dateStr = dateStr.replace(/[a-zA-Z]+/gi, function(w) {
if ("am" == w || "pm" == w) {
return w;
}
return Ext.util.Format.capitalize(w);
});
var dateFormat = dateFormat || this.defaultDateFormat;
try {
var arr = Ext.ss.common.Mask.dateFormats, date;
for (var i = 0, len = arr.length; i < len; i++) {
var f = arr[i];
date = Date.parseDate(dateStr, f);
if (date) {
if (date.format(f) == dateStr) {
return date.format(dateFormat);
}
}
}
} catch (e) {
return false;
}
},
prepareDate : function(dateStr, dateFormat) {
if (typeof dateStr == "string") {
dateStr = dateStr.replace(/[a-zA-Z]+/gi, function(w) {
if ("am" == w || "pm" == w) {
return w;
}
return Ext.util.Format.capitalize(w);
});
var dateFormat = dateFormat || this.defaultDateFormat;
try {
var arr = Ext.ss.common.Mask.dateFormats, date;
for (var i = 0, len = arr.length; i < len; i++) {
var f = arr[i];
date = Date.parseDate(dateStr, f);
if (date) {
if (date.format(f) == dateStr) {
return date;
}
}
}
} catch (e) {
return false;
}
}
},
prepareFormat : function(obj, format) {
var mask = Ext.ss.common.Mask;
var cuurDigital = Ext.ss.common.Helper.getDigitalLen(Number(obj.data));
var numFlag = mask.isNumber(obj.data);
if ("money" == format || "dollar" == format) {
if (numFlag) {
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = "$ " + Ext.util.Format.number(obj.data, numFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("rmb" == format) {
if (numFlag) {
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = String.fromCharCode(165) + " "
+ Ext.util.Format.number(obj.data, numFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("pound" == format) {
if (numFlag) {
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = String.fromCharCode(8356) + " "
+ Ext.util.Format.number(obj.data, numFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("euro" == format) {
if (numFlag) {
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = String.fromCharCode(8364) + " "
+ Ext.util.Format.number(obj.data, numFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("comma" == format) {
if (numFlag) {
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = Ext.util.Format.number(n, numFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("percent" == format) {
if (numFlag) {
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = Ext.util.Format.number(n * 100, numFormat) + "%";
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("science" == format) {
if (numFlag) {
obj.data = obj.data.toString().toLowerCase();
var n = Number(obj.data);
obj.data = n.toExponential();
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
numFlag = false;
}
} else if ("number" == format) {
if (numFlag) {
obj.data = obj.data.toString().toLowerCase();
var n = Number(obj.data);
var digital = Ext.ss.common.Helper.getDigitalLen(n);
var numFormat = Ext.ss.common.Helper.getNumFormat(digital);
obj.data = Ext.util.Format.number(n, numFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
}
} else if ("date" == format) {
var temp = obj.data;
var dateStr = this.prepareDateStr(obj.data, obj.dateFormat);
if (dateStr) {
obj.data = dateStr;
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
} else {
obj.data = temp;
}
} else if ("time" == format) {
var temp = obj.data, str = obj.data;
var arr = Ext.ss.common.Mask.timeFormats, date;
for (var i = 0, len = arr.length; i < len; i++) {
var f = arr[i];
date = Date.parseDate(str, f);
if (date) {
break;
}
}
try {
obj.data = date.format(this.defaultTimeFormat);
if (!obj['text-align']) {
obj['text-align'] = "text-align:right;";
}
} catch (e) {
obj.data = temp;
}
} else if ("text" == format) {
if (!obj['text-align']) {
obj['text-align'] = "text-align:left;";
}
} else {
if (true === obj.data
|| obj.data.toString().toLowerCase() == "true") {
obj.data = "TRUE";
obj['text-align'] = "text-align:right;";
} else if (false === obj.data
|| obj.data.toString().toLowerCase() == "false") {
obj.data = "FALSE";
obj['text-align'] = "text-align:right;";
}
}
if (numFlag) {
var dotLen;
if (false == Ext.type(obj.digital)) {
dotLen = cuurDigital;
} else {
dotLen = Number(obj.digital) || 0;
}
var text = obj.data.toString();
text = text.toLowerCase();
var arr = text.split("."), dots = "";
if (2 == arr.length) {
dots = arr[1];
}
var itg = arr[0];
var digital = dots.length;
var withPercent;
if ("%" == itg.charAt(itg.length - 1)) {
withPercent = true;
arr[0] = itg.slice(0, itg.length - 1);
}
if ("%" == dots.charAt(digital - 1)) {
withPercent = true;
digital--;
dots = dots.slice(0, digital);
}
if (digital > dotLen) {
dots = dots.slice(0, dotLen);
} else if (digital < dotLen) {
for (var k = digital; k < dotLen; k++) {
dots = dots + "0";
}
}
if (dots) {
obj.data = arr[0] + "." + dots;
} else {
obj.data = arr[0];
}
if (Ext.isNumber(Number(obj.data))) {
}
if (withPercent) {
obj.data += "%";
obj.format = obj.format || "percent";
} else {
obj.format = obj.format || "number";
}
}
if (!obj['text-align']) {
var num = Number(obj.data);
if (false != Ext.type(obj.data) && "" !== obj.data
&& Ext.isNumber(num)) {
obj.data = obj.data.toString().toLowerCase();
obj['text-align'] = "text-align:right;";
} else {
var dateStr = this.prepareDateStr(obj.data, obj.dateFormat);
if (dateStr) {
obj.data = dateStr;
obj.format = obj.format || "date";
obj['text-align'] = "text-align:right;";
} else {
obj['text-align'] = "text-align:left;";
var str = obj.data || "";
var slen = str.length;
if (1 < slen && "%" == str.charAt(slen - 1)) {
str = str.slice(0, slen - 1);
num = Number(str);
if ("" !== str && Ext.isNumber(num)) {
obj['text-align'] = "text-align:right;";
obj.format = obj.format || "percent";
}
}
}
}
}
var num = Number(obj.data);
if (false != Ext.type(obj.data) && "" !== obj.data && Ext.isNumber(num)) {
obj.data = obj.data.toString().toLowerCase();
}
return obj;
},
try2BeNumber : function(value) {
var str = value.toString();
var num = Number(str);
if (Ext.isNumber(num)) {
return {
data : num
};
}
if (!/[^0-9,.]+/gi.test(str)) {
if (-1 != str.indexOf(",")) {
var cls = str.replace(/,/gi, function() {
return "";
});
cls = Number(cls);
if (Ext.isNumber(cls)) {
var parts = str.split(".");
var zeros = "";
if (1 < parts.length) {
for (var k = 0, len = parts[parts.length - 1].length; k < len; k++) {
zeros += "0";
}
}
if ("" !== zeros) {
zeros = "0,0." + zeros;
} else {
zeros = "0,0";
}
var num = Ext.util.Format.number(cls, zeros);
if (num == value) {
value = cls;
return {
data : value,
format : "comma"
};
}
}
}
}
},
isChanged : function() {
return 0 < Ext.ss.common.Mask.getObjSize(this.modifedCache);
},
getExtraInfo : function() {
var sheet = this.sheets[this.activeSheet];
var extraInfo = {
freezeRange : sheet.freezeRange,
splitFlag : sheet.splitFlag,
showRange : sheet.showRange,
selectedStart : sheet.selectedStart,
selectedEnd : sheet.selectedEnd,
focusCell : sheet.focusCell,
charts : sheet.charts,
printHeadFoot : sheet.printHeadFoot,
conditionFormat : sheet.conditionFormat
};
extraInfo = Ext.encode(extraInfo);
return extraInfo;
},
setPrintHeadFoot : function(headFoot) {
var sheet = this.sheets[this.activeSheet];
sheet.printHeadFoot = headFoot;
},
saveExtraInfo : function(asActive, callback, scope, needBackup) {
var ss = this.spreadsheet;
if (ss.isReadOnly() || this.disableCallingBackEnd) {
if (callback) {
callback.call(scope);
}
return;
}
var sheet = this.sheets[this.activeSheet];
var extraInfo = this.getExtraInfo();
var params = {
tabId : sheet.tabId,
extraInfo : extraInfo,
needBackup : needBackup
};
if (asActive) {
params.asActive = true;
}
var setExtraFn = function() {
this._callingBackEnd = true;
Ext.Ajax.request({
timeout : 300000,
url : this.extraInfoUrl,
params : params,
success : function(response, opts) {
delete this._callingBackEnd;
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope);
}
} else {
if (json.success == "relogin") {
new feyaSoft.home.Login;
} else {
Ext.Msg.alert(feyaSoft.lang.common,
json.info);
}
}
},
failure : function(response, opts) {
delete this._callingBackEnd;
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
};
var count = 0;
var tmpFn = function() {
count++;
if (!this._callingBackEnd) {
setExtraFn.call(this);
} else if (count < 10) {
tmpFn.defer(500, this);
}
};
tmpFn.call(this);
},
saveOldVersion : function(callback, scope) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
if (callback) {
callback.call(scope);
}
return;
}
var fileId = this.getFileId();
if (Ext.isDefined(fileId)) {
Ext.Ajax.request({
timeout : 300000,
url : this.revisionUrl,
params : {
oldFileId : fileId
},
success : function(response) {
if (callback) {
callback.call(scope);
}
},
failure : function() {
if (callback) {
callback.call(scope);
}
},
scope : this
});
} else if (callback) {
callback.call(scope);
}
},
saveChanges : function(callback, scope, needBackup) {
var ss = this.spreadsheet;
if (ss.isReadOnly()) {
if (callback) {
callback.call(scope);
}
return;
}
this.saveActiveSheet(true);
var flag = this.saveModifiedCache(true, callback, scope, needBackup);
if (!flag) {
this.saveExtraInfo(true, callback, scope, needBackup);
} else if (needBackup) {
Ext.Ajax.request({
timeout : 300000,
url : this.updateModifiedUrl,
params : {
tabId : this.sheets[this.activeSheet].tabId,
needBackup : true
}
});
}
},
updateTabIds : function(tabIds) {
for (var i = 0, len = this.sheets.length; i < len; i++) {
var sheet = this.sheets[i];
this.updateModifedCacheTabId(sheet.tabId, tabIds[i]);
sheet.tabId = tabIds[i];
}
this.data.tabId = this.sheets[this.activeSheet].tabId;
},
getFile : function() {
return this.spreadsheet.file;
},
getFileId : function() {
var file = this.getFile();
if (file) {
return file.id;
}
},
updateModifedCacheTabId : function(oldTid, newTid) {
var mc = this.modifedCache;
for (var m in mc) {
if (mc[m].tabId == oldTid) {
mc[m].tabId = newTid;
}
}
},
addHyperlinkFn : function(x, y, hyperlink, data) {
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = rows[x][y] || {};
var og = {
rows : {}
};
og.rows[x] = {};
var css = this.data.rows[x][y].css || "";
og.rows[x][y] = {
hyperlink : this.data.rows[x][y].hyperlink,
css : css,
data : this.data.rows[x][y].data
};
var md = {
rows : {}
};
md.rows[x] = {};
md.rows[x][y] = {
hyperlink : hyperlink,
css : css + " " + Ext.ss.CONST.cssHash[4],
data : data
};
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
rows[x][y].hyperlink = hyperlink;
rows[x][y].css = css + " " + Ext.ss.CONST.cssHash[4];
rows[x][y].data = data;
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
},
deleteHyperlinkFn : function(x, y) {
var rows = this.data.rows;
rows[x] = rows[x] || {};
rows[x][y] = rows[x][y] || {};
var og = {
rows : {}
};
og.rows[x] = {};
var css = this.data.rows[x][y].css || "";
og.rows[x][y] = {
css : css,
hyperlink : this.data.rows[x][y].hyperlink
};
var md = {
rows : {}
};
md.rows[x] = {};
css = css.replace(Ext.ss.CONST.cssHash[4], "").trim();
md.rows[x][y] = {
css : css
};
delete md.rows[x][y].hyperlink;
var sm = this.spreadsheet.sm;
this.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
});
rows[x][y].css = css;
delete rows[x][y].hyperlink;
this.put2ModifiedCache("createUpdate", {
x : x,
y : y,
data : this.getModifiedData(x, y)
});
},
saveFileExtraInfo : function(callback, scope) {
var params = {
id : this.getFileId(),
extraInfo : Ext.encode(this.fileExtraInfo)
};
Ext.Ajax.request({
timeout : 300000,
url : this.fileExtraInfoUrl,
params : params,
success : function(response, opts) {
delete this._callingBackEnd;
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
if (callback) {
callback.call(scope);
}
} else {
if (json.success == "relogin") {
new feyaSoft.home.Login;
} else {
Ext.Msg.alert(feyaSoft.lang.common, json.info);
}
}
},
failure : function(response, opts) {
delete this._callingBackEnd;
var lanCom = feyaSoft.lang.common;
Ext.Msg.alert(lanCom.error,
"Server-side failure with status code "
+ response.status);
},
scope : this
});
},
withFilter : function() {
var rows = this.data.rows;
for (var p in rows) {
var row = rows[p];
for (var q in row) {
var cell = row[q];
if (cell.filter) {
return true;
}
}
}
},
getReachBounds : function() {
var rows = this.data.rows;
var maxrow = 1, maxcol = 1;
for (var p in rows) {
p = Number(p);
if (p > maxrow) {
maxrow = p;
}
var row = rows[p];
for (var q in row) {
q = Number(q);
if (q > maxcol) {
maxcol = q;
}
}
}
return {
row : maxrow,
col : maxcol
};
},
transferISFormula : function(x, y, originData) {
var data = this.adjustFormula(x, y, originData);
var sheetIndex = this.activeSheet;
this.updteISFormulaFromServer = true;
this.escapeISFormulaQueue = true;
this.ISFCache = [];
var ds = this;
this.ISFCache = [];
this.convert(x, y, data, originData, sheetIndex);
result = this.ISFCache;
delete this.escapeISFormulaQueue;
delete this.updteISFormulaFromServer;
return {
data : data,
ISIParams : result,
lastOriginData : originData
};
},
compareISI : function(pre, cur) {
if (Ext.isArray(pre) && Ext.isArray(cur)) {
var pLen = pre.length, cLen = cur.length;
var len = pLen;
if (pLen > cLen) {
len = cLen;
}
for (var i = 0; i < len; i++) {
var pIt = pre[i], cIt = cur[i];
if (pIt[0] == cIt[0]
&& Ext.encode(pIt[1]) == Ext.encode(cIt[1])) {
} else {
return false;
}
}
return true;
}
return false;
},
checkISFormula : function() {
var ss = this.spreadsheet;
if (this.ISFormulaQueue && 0 < this.ISFormulaQueue.length) {
var tmp = this.activeSheet;
var it = this.ISFormulaQueue.shift();
var arr = it.split("-");
var sheetIndex = Number(arr[0]), x = Number(arr[1]), y = Number(arr[2]);
var cellObj = this.getCellObj(x, y, sheetIndex) || {};
this.activeSheet = sheetIndex;
this.data = this.sheets[sheetIndex];
this.updteISFormulaFromServer = true;
this.escapeISFormulaQueue = true;
this.ISFCache = [];
try {
this.convert(x, y, cellObj.data, cellObj['origin-data'],
sheetIndex);
} catch (e) {
}
var result = this.ISFCache;
delete this.escapeISFormulaQueue;
this.activeSheet = tmp;
this.data = this.sheets[tmp];
var notChange = this.compareISI(cellObj.ISIParams, result);
if (notChange) {
delete this.updteISFormulaFromServer;
this.sheets[sheetIndex].rows[x][y].lastOriginData = cellObj['origin-data'];
if (false == Ext
.type(this.sheets[sheetIndex].rows[x][y].result)) {
this.sheets[sheetIndex].rows[x][y].result = this.sheets[sheetIndex].rows[x][y].oldResult;
}
this.checkISFormula.defer(50, this);
} else {
this.requestISFormulaUpdate(cellObj, result, function(iparams) {
this.sheets[sheetIndex].rows[x][y].ISIParams = iparams;
this.sheets[sheetIndex].rows[x][y].result = this
.convert(x, y, cellObj.data,
cellObj['origin-data'], sheetIndex);
this.activeSheet = sheetIndex;
this.data = this.sheets[sheetIndex];
var data = this.getModifiedData(x, y);
this.put2ModifiedCache("createUpdate", {
tabId : this.sheets[sheetIndex].tabId,
x : x,
y : y,
data : data
});
if (sheetIndex === tmp) {
var obj = this.getCell(x, y);
obj.x = x;
obj.y = y;
ss.refreshCell(obj);
this.fireEvent("afterdatachange", x, y, tmp, this);
}
this.sheets[sheetIndex].rows[x][y].lastOriginData = cellObj['origin-data'];
this.activeSheet = tmp;
this.data = this.sheets[tmp];
this.checkNonISFormula();
this.checkISFormula();
}, this);
}
}
},
requestISFormulaUpdate : function(cellObj, ISIArr, callback, scope) {
var me = this;
var iparams = this.deepClone(ISIArr), index = 0;
var fn = function() {
var len = ISIArr.length;
delete this.updteISFormulaFromServer;
if (0 < len) {
var it = ISIArr.shift();
feyaSoft.api.JsonP.callISIFormula("ISIF", {
ISFName : it[0],
ISFArgs : it[1]
}, function(data, response) {
if (response) {
var result;
if (200 == response.status && response.data
&& response.data.items
&& response.data.items[0]) {
result = response.data.items[0].result;
} else {
result = 0;
}
iparams[index].push(result);
index++;
if (1 == len && callback) {
callback.call(scope, iparams);
} else {
fn();
}
} else {
fn();
}
}, me);
}
};
fn();
},
isISFormula : function(origin) {
if (origin && Ext.isString(origin)) {
return -1 !== origin.indexOf("ISIF")
|| -1 !== origin.indexOf("isif");
}
},
checkNonISFormula : function() {
this.escapeISFormulaQueue = true;
var ss = this.spreadsheet;
var tmp = this.activeSheet;
for (var i = 0, len = this.sheets.length; i < len; i++) {
var rows = this.sheets[i].rows;
this.data = this.sheets[i];
this.activeSheet = i;
var lookup = [];
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q];
if ("ISFormula" != cell.type) {
var isFormula = false;
if (Ext.isDefined(cell['origin-data'])) {
isFormula = Ext.ss.common.Mask
.isFormula(cell['origin-data']);
} else {
isFormula = Ext.ss.common.Mask.isFormula(cell.data);
}
if (isFormula && !this.isISFormula(cell['origin-data'])) {
cell.oldResult = cell.result;
delete cell.result;
lookup.push({
x : p,
y : q
});
}
}
}
}
for (var j = 0, count = lookup.length; j < count; j++) {
var it = lookup[j];
var x = it.x, y = it.y;
var obj = this.getCell(x, y);
obj.x = x;
obj.y = y;
if (i === tmp) {
ss.refreshCell(obj);
}
this.fireEvent("afterdatachange", x, y, i, this);
}
}
this.data = this.sheets[tmp];
this.activeSheet = tmp;
delete this.escapeISFormulaQueue;
},
isCompanyCell : function(cell) {
var data = cell['origin-data'] || cell.data;
if (data) {
data = data.toString();
var firstChar = data.charAt(0);
var flag = false;
if ("=" == firstChar) {
data.replace(/ISIF\([^)]*\)/gi, function(found) {
var params = found.slice(5, found.length - 1);
if (params) {
params = params.split(",");
var len = params.length;
if (1 == len) {
var fp = params[0];
if (/^['"]?[0-9]+['"]?$/gi.test(fp)) {
flag = true;
return false;
}
} else if (3 == len) {
var fp = params[0], sp = params[1], tp = params[2];
if (/^['"]?[0-9]+['"]?$/gi.test(fp)
&& /^['"]?INF['"]?$/gi.test(sp)
&& /^['"]?name['"]?$/gi.test(tp)) {
flag = true;
return false;
}
}
}
});
if (flag) {
return true;
}
}
}
}
});
Ext.ns("Ext.ss");
Ext.ss.Editor = function(config) {
Ext.apply(this, config);
Ext.ss.Editor.superclass.constructor.call(this);
this.dropList = new Ext.ss.company.FormulaDropList({
spreadsheet : this.spreadsheet,
hidden : true
});
this.fieldList=new Ext.ss.field.FieldDropList({
spreadsheet : this.spreadsheet,
hidden : true
});
this.fnList=new Ext.ss.fn.FnDropList({
spreadsheet : this.spreadsheet,
hidden : true
});
this.addEvents("complete", "typing");
this.on("typing", this.onTypingFn, this, {
defer : 10
});
/**判断是否是 以==开头*/
this.on("typeup", this.onTypeUpFn, this, {
defer : 10
});
this.dropList.on("selectformula", this.selectFormulaFromDropList, this);
this.fieldList.on("selectfield", this.selectFieldFromDropList, this);
this.fnList.on("selectfn",this.selectFnFromDropList,this);
};
Ext.extend(Ext.ss.Editor, Ext.util.Observable, {
pendingInterval : 15,
onBodyDbClickFn : function(e) {
var lan_ss = feyaSoft.ss.lang;
var target = e.getTarget();
var tgEl = Ext.get(target);
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var xy = e.getXY();
var xlimit = ss.ylivescroller.getLeft();
var ylimit = ss.xlivescroller.getTop();
if (xy[0] <= xlimit && xy[1] <= ylimit) {
var pos = ds.getPosFromXY(xy[0], xy[1]);
if (pos) {
var x = pos.x;
var y = pos.y;
if (0 == x && 0 == y) {
} else if (0 == x) {
if (tgEl.hasClass("x-spreadsheet-col-resizer")) {
this.fitCol(y);
var l = ds.getLetter(y);
ds.trace(lan_ss.action_col_resize(l, l));
}
} else if (0 == y) {
if (tgEl.hasClass("x-spreadsheet-row-resizer")) {
this.fitRow(x, undefined, undefined, true);
ds.trace(lan_ss.action_row_resize(x, x));
}
} else if (!ss.settings.readOnlyView) {
if (rows[x] && rows[x][y]) {
var wrap = rows[x][y].wrap;
if (wrap) {
pos = {
x : wrap.minx,
y : wrap.miny
};
wrap = ds.getVisiableSpan(wrap.minx, wrap.miny,
wrap.maxx, wrap.maxy);
x = wrap.minx;
y = wrap.miny;
}
}
this.startEditing(pos, null, "db");
}
}
}
},
measureHeight : function(x, y) {
var ss = this.spreadsheet;
var toy = ss.toy;
var t = toy.dom;
var ds = ss.ds;
var obj = ds.getCell(x, y);
t.style.cssText = "";
if ("" != obj['font-size']) {
t.style.cssText += obj['font-size'];
}
if ("" != obj['word-wrap']) {
t.style.cssText += obj['word-wrap'];
}
if ("" != obj['font-family']) {
t.style.cssText += obj['font-family'];
}
var w = ds.getCellWidth(x, y) - ss.xpaddingOffset;
t.style.width = w + "px";
obj = ds.getCellObj(x, y);
if (obj.data) {
t.innerHTML = ds.wrapBIUS(x, y, obj);
} else {
t.innerHTML = " ";
}
var h = toy.getHeight();
return h;
},
fitRow : function(x, onlyOne, notRefresh, autoHeight) {
var ss = this.spreadsheet;
var sm = ss.sm;
delete sm.mdFlag;
var ds = ss.ds;
var rows = ds.data.rows;
var flag, my = 0;
var row = rows[x];
var rowHeader = ds.data.rowSetting[x];
for (var p in row) {
if ("0" == p.toString()) {
continue;
}
var cell = row[p];
if (cell
&& (!cell.wrap || cell.wrap.minx == cell.wrap.maxx
&& p == cell.wrap.miny && x == cell.wrap.minx)) {
if (autoHeight || !rowHeader || !rowHeader.hchanged) {
flag = true;
var h = this.measureHeight(x, p);
if (h > my) {
my = h;
}
}
}
}
if (flag) {
var bh = ss.body.getHeight() - 20 - ss.scrollOffset;
if (my > bh - 10) {
my = bh - 10;
}
if (my < 20) {
my = 20;
}
var fhg = ds.getRowHeight(x);
if (fhg < my) {
ss.xResizingRow(x, my, onlyOne, notRefresh, true);
sm.resizeRowHeight = my;
}
}
},
fitCol : function(y) {
var ss = this.spreadsheet;
var sm = ss.sm;
delete sm.mdFlag;
var toy = ss.toy;
var t = toy.dom;
var ds = ss.ds;
var rows = ds.data.rows;
var flag = false, mx = 0;
for (var p in rows) {
if ("0" == p.toString()) {
continue;
}
var cell = rows[p][y];
if (cell && !cell.wrap) {
flag = true;
var obj = ds.getCell(p, y);
t.style.cssText = "white-space:nowrap;";
if ("" != obj['font-size']) {
t.style.cssText += obj['font-size'];
}
if ("" != obj['font-family']) {
t.style.cssText += obj['font-family'];
}
t.style.height = "auto";
t.style.width = "auto";
t.innerHTML = obj.data;
var w = toy.getWidth();
if (w > mx) {
mx = w;
}
}
}
if (flag) {
var w = mx + ss.xpaddingOffset;
var bw = ss.body.getWidth() - ss.lcWidth - ss.scrollOffset;
if (w > bw - 10) {
w = bw - 10;
}
ss.yResizingCol(y, w);
sm.resizeColWidth = w;
}
},
prepareTextCover : function(pos, v) {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var focusCover = sm.findFocusCover();
if (focusCover) {
var x = pos.x, y = pos.y;
ss.scroll2Show(x, y);
var textCover = sm.getTextCover();
focusCover.appendChild(textCover);
var size = ds.getCellSize(x, y);
var w = size[0], h = size[1];
var obj = ds.getCell(x, y);
var cssText = "";
if ("" != obj['font-size']) {
cssText += obj['font-size'];
} else {
cssText += "line-height:10pt;";
}
if ("" != obj['font-family']) {
cssText += obj['font-family'];
}
if ("" != obj.color) {
cssText += obj.color;
}
if ("" != obj.bg) {
cssText += "background:" + obj.bg + ";";
}
cssText += "white-space:nowrap;";
textCover.style.cssText = cssText;
if (Ext.isIE) {
w = focusCover.previousSibling.style.width;
var idx = w.indexOf("px");
w = idx > 0 ? w.substring(0, idx) : w;
w = Number(w) - 2;
h -= 5;
} else if (Ext.isChrome) {
w -= 9;
h -= 7;
} else {
w -= 3;
h -= 4;
}
var textCoverEl = Ext.get(textCover);
var mw = ss.body.getRight() - textCoverEl.getLeft();
var mh = ss.body.getBottom() - textCoverEl.getTop();
textCoverEl.setStyle("min-width", w + "px");
textCoverEl.setStyle("width", w + "px");
textCoverEl.setStyle("max-width", mw + "px");
textCoverEl.setStyle("min-height", h + "px");
textCoverEl.setStyle("height", h + "px");
textCoverEl.setStyle("max-height", mh + "px");
textCover.style.display = "";
textCover.value = v;
textCover.pos = Ext.apply({}, pos);
return textCover;
}
},
/**开始编辑*/
startEditing : function(pos, sv, where) {
if ("db" != where) {
this.movingFormulaFlag = true;
} else {
this.movingFormulaFlag = false;
}
where = "db";
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
pos.sheetIndex = ds.activeSheet;
ss.resetCutStatus();
var ov = ss.getInnerText(pos.x, pos.y);
if (!sv) {
sv = ov;
}
if (true === sv) {
sv = "";
}
sv = sv || "";
if (sv == "") {
delete this.inEditMode;
} else {
this.inEditMode = true;
}
sv = Ext.util.Format.htmlDecode(sv);
var textCover = this.prepareTextCover(pos, sv);
if (textCover) {
textCover.ov = ov;
textCover.where = where;
textCover.focus();
if (!Ext.isGecko) {
var len = textCover.value.length;
Ext.ss.common.Mask.setCaretPosition(textCover, len, len);
}
}
},
onTextCoverKeyUpFn : function(e) {
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm.getTextCover();
if ("db" == textCover.where) {
e.stopEvent();
}
if (!this.formulaKeyFlag && e.ENTER != e.getKey()) {
this.fireEvent("typeup", this);
}
},
onTextCoverClickFn : function(e) {
this.inEditMode = true;
delete this.movingFormulaFlag;
},
onTextCoverKeyDownFn : function(e) {
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm.getTextCover();
var key = e.getKey(), shift = e.shiftKey, ctrl = e.ctrlKey;
var hk = ss.hotkey;
if (Ext.EventObject.TAB != key) {
e.stopPropagation();
} else {
e.stopEvent();
}
var v = textCover.value;
this.formulaKeyFlag = false;
var returnFlag;
var formulaFlag = /^[=]/gi.test(v);
if (sm.formulaEditing || formulaFlag) {
sm.checkFormulaEditing(v);
if (this.movingFormulaFlag) {
if (Ext.EventObject.UP == key) {
e.stopEvent();
if (this.dropList.isVisible()) {
this.dropList.selectUp();
} else {
if (1 < sm.selectedStart.x && 1 < sm.selectedEnd.x) {
ss.getNearestFormulaSpan();
if (shift) {
if (!this._lastShift) {
this._lastShift = Ext
.apply(sm.selectedStart);
}
if (this._lastShift.x == sm.selectedStart.x
&& this._lastShift.y == sm.selectedStart.y) {
sm.selectedEnd.x--;
} else {
sm.selectedStart.x--;
}
} else {
delete this._lastShift;
sm.selectedStart.x--;
sm.selectedEnd.x--;
}
sm.selectRange(null, sm.selectedStart,
sm.selectedEnd);
sm.updateFormulaRange();
}
}
returnFlag = true;
this.formulaKeyFlag = true;
} else if (Ext.EventObject.RIGHT == key) {
e.stopEvent();
ss.getNearestFormulaSpan();
if (shift) {
if (!this._lastShift) {
this._lastShift = Ext.apply(sm.selectedStart);
}
if (this._lastShift.x == sm.selectedStart.x
&& this._lastShift.y == sm.selectedStart.y) {
sm.selectedEnd.y++;
} else {
sm.selectedStart.y++;
}
} else {
delete this._lastShift;
sm.selectedStart.y++;
sm.selectedEnd.y++;
}
sm.selectRange(null, sm.selectedStart, sm.selectedEnd);
sm.updateFormulaRange();
returnFlag = true;
} else if (Ext.EventObject.DOWN == key) {
e.stopEvent();
if (this.dropList.isVisible()) {
this.dropList.selectDown();
} else {
ss.getNearestFormulaSpan();
if (shift) {
if (!this._lastShift) {
this._lastShift = Ext.apply(sm.selectedStart);
}
if (this._lastShift.x == sm.selectedStart.x
&& this._lastShift.y == sm.selectedStart.y) {
sm.selectedEnd.x++;
} else {
sm.selectedStart.x++;
}
} else {
delete this._lastShift;
sm.selectedStart.x++;
sm.selectedEnd.x++;
}
sm.selectRange(null, sm.selectedStart, sm.selectedEnd);
sm.updateFormulaRange();
}
returnFlag = true;
this.formulaKeyFlag = true;
} else if (Ext.EventObject.LEFT == key) {
e.stopEvent();
if (1 < sm.selectedStart.y && 1 < sm.selectedEnd.y) {
ss.getNearestFormulaSpan();
if (shift) {
if (!this._lastShift) {
this._lastShift = Ext.apply(sm.selectedStart);
}
if (this._lastShift.x == sm.selectedStart.x
&& this._lastShift.y == sm.selectedStart.y) {
sm.selectedEnd.y--;
} else {
sm.selectedStart.y--;
}
} else {
delete this._lastShift;
sm.selectedStart.y--;
sm.selectedEnd.y--;
}
sm.selectRange(null, sm.selectedStart, sm.selectedEnd);
sm.updateFormulaRange();
}
returnFlag = true;
}
} else if (this.dropList.isVisible()) {
if (Ext.EventObject.UP == key) {
e.stopEvent();
this.formulaKeyFlag = true;
this.dropList.selectUp();
return;
} else if (Ext.EventObject.DOWN == key) {
e.stopEvent();
this.formulaKeyFlag = true;
this.dropList.selectDown();
return;
}
}
}
if (returnFlag) {
e.stopEvent();
var x = sm.selectedStart.x, y = sm.selectedStart.y;
if (!sm.isInRange({
x : x,
y : y
})) {
ss.scroll2Pos(x, y, [1, 1]);
}
return;
}
if (e.altKey && Ext.EventObject.ENTER == key) {
if (document.selection) {
textCover.focus();
sel = document.selection.createRange();
sel.text = "\n";
sel.select();
} else if (textCover.selectionStart
|| textCover.selectionStart == "0") {
var startPos = textCover.selectionStart;
var endPos = textCover.selectionEnd;
textCover.value = textCover.value.substring(0, startPos)
+ "\n"
+ textCover.value.substring(endPos,
textCover.value.length);
textCover.focus();
} else {
textCover.value += "\n";
textCover.focus();
}
} else if (Ext.EventObject.ENTER == key) {
if (this.dropList.isVisible() && this.dropList.isSelected()) {
e.stopEvent();
this.dropList.selectFormula();
return;
} else {
textCover.style.display = "none";
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
hk.onDownFn();
}
} else if (Ext.EventObject.ESC == key) {
textCover.value = textCover.ov;
textCover.style.display = "none";
if (sm.formulaEditing) {
if (this.dropList) {
this.dropList.hide();
}
sm.fireEvent("formulaeditingchanged", true, false);
}
sm.setFocusCell(sm.focusCell.x, sm.focusCell.y);
} else if (Ext.EventObject.TAB != key) {
if (!this.inEditMode) {
if (Ext.EventObject.UP == key) {
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
hk.onUpFn();
} else if (Ext.EventObject.RIGHT == key) {
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
hk.onRightFn();
} else if (Ext.EventObject.DOWN == key) {
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
hk.onDownFn();
} else if (Ext.EventObject.LEFT == key) {
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
hk.onLeftFn();
} else {
this.sysTyping.defer(1, this);
}
} else {
this.sysTyping.defer(1, this);
}
} else if (Ext.EventObject.TAB == key) {
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
hk.onRightFn();
}
if ((v == "" && key == 36 || key == 33 || key == 34) || ctrl
&& (key == 70 || 83 == key || 80 == key || 79 == key)) {
e.stopEvent();
hk.onKeydownFn(e);
}
delete ss.cachedCursorPos;
},
onTextCoverKeyPressFn : function(e) {
e.stopPropagation();
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm.getTextCover();
var textCoverEl = Ext.get(textCover);
var flag = sm.checkFormulaEditing(textCover.value);
ss.focusObj = textCover;
if (flag) {
var text = ss.selectDataRange();
if (text) {
ss.showDataRangeBorder(text);
}
}
this.fireEvent("typing", textCoverEl);
},
sysTyping : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm.getTextCover();
ss.fxField.setValue(textCover.value);
},
/**显示函数列表*/
showFormulaDropList : function() {
var ss = this.spreadsheet, sm = ss.sm;
var dropListEl = this.dropList.getEl();
var textCover = sm.getTextCover();
var cursorPos = Ext.ss.common.Mask.getCursorPos(textCover);
var val = textCover.value;
var fname;
for (var i = cursorPos; 0 <= i; i--) {
var ch = val.charAt(i);
if (/[\,\=@\+\-\*\/\s\)\(]/gi.test(ch)) {
this.startCursorPos = i + 1;
this.endCursorPos = cursorPos;
fname = val.slice(this.startCursorPos, cursorPos);
break;
}
}
if (fname) {
var textCoverEl = Ext.get(textCover);
var part = val.slice(0, cursorPos + 1);
this.dropList.searchMatch(fname, textCoverEl, part);
}
},
showFieldList :function(){
var ss = this.spreadsheet, sm = ss.sm;
var fieldListEl = this.fieldList.getEl();
var textCover = sm.getTextCover();
var fieldList=this.fieldList;
var cursorPos = Ext.ss.common.Mask.getCursorPos(textCover);
var val = textCover.value;
var fname;
for (var i = cursorPos; 0 <= i; i--) {
var ch = val.charAt(i);
if (/[\,\=#\+\-\*\/\s\)\(]/gi.test(ch)) {
this.startCursorPos = i+1;
this.endCursorPos = cursorPos;
fname = val.slice(this.startCursorPos, cursorPos);
break;
}
}
if (true) {
var textCoverEl = Ext.get(textCover);
var part = val.slice(0, cursorPos +1);
var id=Ext.getCmp('ds_id').getValue();
if(!FieldData&&id){
Ext.Ajax.request({
url: basePath+'ma/getFieldsByTable.action',
method:'post',
params: {
id:id
},
success: function(response){
var text = Ext.decode(response.responseText);
FieldData=text.data;
fieldList.store.loadData(FieldData);
fieldList.searchMatch(fname, textCoverEl, part);
}
});
}else if(FieldData){
fieldList.store.loadData(FieldData);
fieldList.searchMatch(fname, textCoverEl, part);
}
}
},
//显示自定义函数列表
showFnList :function(){
var ss = this.spreadsheet, sm = ss.sm;
var fnListEl = this.fnList.getEl();
var textCover = sm.getTextCover();
var fnList=this.fnList;
var cursorPos = Ext.ss.common.Mask.getCursorPos(textCover);
var val = textCover.value;
var fname;
for (var i = cursorPos; 0 <= i; i--) {
var ch = val.charAt(i);
if (/[\,\=&\+\-\*\/\s\)\(]/gi.test(ch)) {
this.startCursorPos = i+1;
this.endCursorPos = cursorPos;
fname = val.slice(this.startCursorPos, cursorPos);
break;
}
}
if (true) {
var textCoverEl = Ext.get(textCover);
var part = val.slice(0, cursorPos +1);
var id=Ext.getCmp('ds_id').getValue();
if(!FnData&&id){
Ext.Ajax.request({
url: basePath+'ma/getExcelFxsByTable.action',
method:'post',
params: {
id:id
},
success: function(response){
var text = Ext.decode(response.responseText);
FnData=text.data;
fnList.store.loadData(FnData);
fnList.searchMatch(fname, textCoverEl, part);
}
});
}else if(FnData){
fnList.store.loadData(FnData);
fnList.searchMatch(fname, textCoverEl, part);
}
}
},
onTypingFn : function(ta) {
this.autosizeTextArea(ta);
},
/**判断是否 以"="开头*/
onTypeUpFn : function(ta) {
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm.getTextCover();
var v = textCover.value;
var formulaFlag = /^[=]/gi.test(v);
//自定义规则 :处理列所有值 #开头标示显示到整列
var columnFlag =/=#/.test(v);
var cellFlag =/=&/.test(v);
sm.checkFormulaEditing(v);
if (formulaFlag) {
this.showFormulaDropList();
} else {
if (this.dropList) {
this.dropList.hide();
}
}
if(columnFlag){
this.showFieldList();
}if(cellFlag){
this.showFnList();
}
},
autosizeTextArea : function(ta) {
var ss = this.spreadsheet;
var toy = ss.toy;
var t = toy.dom;
t.style.cssText = ta.dom.style.cssText;
t.style.minWidth = "0px";
if ("nowrap" == ta.getStyle("white-space")) {
t.style.width = "auto";
}
t.style.wordWrap = "break-word";
t.style.height = "auto";
t.innerHTML = ta.dom.value;
var innerWidth = toy.getWidth() + 10, innerHeight = toy.getHeight();
var taEl = Ext.get(ta), pEl = Ext.get(ta.dom.parentNode);
var ctWidth = pEl.getWidth(), ctHeight = taEl.getHeight();
if (ctWidth < innerWidth) {
if (ss.ylivescroller.getLeft() > ta.getLeft() + innerWidth + 15) {
taEl.setWidth(innerWidth);
} else {
taEl.setWidth(ss.ylivescroller.getLeft() - ta.getLeft() - 15);
taEl.setStyle("white-space", "normal");
}
} else {
taEl.setWidth(ctWidth - 6);
}
if (ctHeight < innerHeight && 24 < innerHeight) {
taEl.setHeight(innerHeight);
}
},
onTextCoverFocusFn : function(e) {
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm.getTextCover();
var flag = sm.checkFormulaEditing(textCover.value);
ss.focusObj = textCover;
if (flag) {
var text = ss.selectDataRange();
if (text) {
ss.showDataRangeBorder(text);
}
}
},
onTextCoverBlurFn : function(e) {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var textCover = sm.getTextCover();
var pos = textCover.pos;
var v = textCover.value;
if (v != textCover.ov) {
if (Ext.ss.common.Mask.isFormula(v)) {
if (pos.sheetIndex != ds.activeSheet) {
ss.changeSheet(pos.sheetIndex);
}
var errInfo = Ext.ss.common.Mask.checkEmbrace(v);
if (true !== errInfo) {
var lan = feyaSoft.ss.lang;
Ext.Msg.show({
title : lan.formulaError,
msg : lan.bracketError + "\"" + errInfo + "\"",
buttons : Ext.Msg.YESNO,
fn : function(bid) {
if ("yes" == bid) {
v = errInfo;
}
this.resize2FitText(v, pos);
this.fireEvent("complete", this, pos, v);
},
scope : this,
icon : Ext.MessageBox.QUESTION
});
} else {
this.resize2FitText(v, pos);
this.fireEvent("complete", this, pos, v);
}
} else {
this.resize2FitText(v, pos);
this.fireEvent("complete", this, pos, v);
}
}
textCover.style.display = "none";
var pnode = Ext.get(textCover).parent().parent();
var labelEl = pnode.child(".x-spreadsheet-focus-label");
if (labelEl) {
Ext.removeNode(labelEl.dom);
}
sm.transferFocus();
if (this.dropList) {
this.dropList.hide();
}
delete ss.fxCell;
var focusCell = sm.focusCell;
ss.stateField.setValue(ds.getLetter(focusCell.y) + focusCell.x);
},
resize2FitText : function(v, pos) {
var ss = this.spreadsheet;
var ds = ss.ds;
if (false == Ext.type(pos.sheetIndex)) {
pos.sheetIndex = ds.activeSheet;
}
var x = pos.x, y = pos.y, sheetIndex = pos.sheetIndex;
var tmp = ds.activeSheet;
ds.activeSheet = sheetIndex;
ds.data = ds.sheets[sheetIndex];
v = ss.setInnerText(v, x, y, tmp !== sheetIndex);
ds.activeSheet = tmp;
ds.data = ds.sheets[tmp];
return true;
},
selectFormulaFromDropList : function(formula, isNameMgr) {
var ss = this.spreadsheet, sm = ss.sm;
var textCover = sm.getTextCover();
console.log(textCover);
var val = textCover.value, len = val.length;
var pre = val.slice(0, this.startCursorPos), pos = val.slice(
this.endCursorPos, len);
if (isNameMgr == true) {
textCover.value = pre + formula + pos;
} else {
textCover.value = pre + formula + "(" + pos;
}
len = textCover.value.length;
console.log(len);
Ext.ss.common.Mask.setCaretPosition(textCover, len, len);
},
/**选中Field*/
selectFieldFromDropList : function(field, isNameMgr) {
var ss = this.spreadsheet, sm = ss.sm;
var textCover = sm.getTextCover();
var val = textCover.value, len = val.length;
var pre = val.slice(0, this.startCursorPos), pos = val.slice(
this.endCursorPos, len);
textCover.value="#"+field+"&"+isNameMgr;
/**if (isNameMgr == true) {
textCover.value = pre + field + pos;
} else {
textCover.value = pre + field + "(" + pos;
}**/
len = textCover.value.length;
Ext.ss.common.Mask.setCaretPosition(textCover, len, len);
},
selectFnFromDropList : function(fn, isNameMgr) {
var ss = this.spreadsheet, sm = ss.sm;
var textCover = sm.getTextCover();
var val = textCover.value, len = val.length;
var pre = val.slice(0, this.startCursorPos), pos = val.slice(
this.endCursorPos, len);
textCover.value="Fn."+fn+"&"+isNameMgr;
/**if (isNameMgr == true) {
textCover.value = pre + field + pos;
} else {
textCover.value = pre + field + "(" + pos;
}**/
len = textCover.value.length;
Ext.ss.common.Mask.setCaretPosition(textCover, len, len);
},
getSelectionValue : function() {
var ss = this.spreadsheet, sm = ss.sm;
var selectedText;
var textFiled = sm.getTextCover();
var value = textFiled.value;
if (document.selection && document.selection.type == "Text") {
selectedText = document.selection.createRange().text;
try {
document.selection.empty();
} catch (e) {
}
} else if (textFiled.selectionStart != undefined
&& textFiled.selectionEnd != undefined
&& textFiled.selectionStart != textFiled.selectionEnd) {
var start = textFiled.selectionStart;
var end = textFiled.selectionEnd;
var selPoint = value.length - 1;
selectedText = value.substring(start, end);
textFiled.selectionStart = selPoint;
textFiled.selectionEnd = selPoint;
try {
textFiled.setSelectionRange(selPoint, selPoint);
} catch (e) {
}
}
return selectedText;
},
fxShowFormulaDropList : function(val, fxFiled) {
var ss = this.spreadsheet, sm = ss.sm;
var dropListEl = this.dropList.getEl();
var cursorPos = Ext.ss.common.Mask.getCursorPos(fxFiled.el.dom);
var fname;
for (var i = cursorPos; 0 <= i; i--) {
var ch = val.charAt(i);
if (/[\,\=\+\-\*\/\s\)]/gi.test(ch)) {
this.startCursorPos = i + 1;
this.endCursorPos = cursorPos;
fname = val.slice(this.startCursorPos, cursorPos);
break;
}
}
if (fname) {
this.dropList.searchMatch(fname, fxFiled.el);
} else {
this.dropList.hide();
}
},
fxInputEnter : function(fxfield) {
var dp = this.dropList;
var ss = this.spreadsheet, sm = ss.sm;
var rds = dp.view.getSelectedRecords();
if (rds.length > 0) {
var rd = rds[0];
fxfield.setValue("=" + rd.get("id") + "(");
dp.hide();
} else {
ss.enterFx();
}
}
});
Ext.ns("Ext.ss");
Ext.ss.FunctionBox = {
precisionDigital : 3,
acos : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon(arguments, "acos");
},
cos : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon(arguments, "cos");
},
asin : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon(arguments, "asin");
},
sin : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon(arguments, "sin");
},
atan : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon(arguments, "atan");
},
tan : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon(arguments, "tan");
},
isblank : function() {
return Ext.ss.common.FunctionBoxHelper.statisticalCommon(arguments,
"isblank");
},
isnumber : function() {
return Ext.ss.common.FunctionBoxHelper.statisticalCommon(arguments,
"isnumber");
},
istext : function() {
return Ext.ss.common.FunctionBoxHelper.statisticalCommon(arguments,
"istext");
},
islogical : function() {
return Ext.ss.common.FunctionBoxHelper.statisticalCommon(arguments,
"islogical");
},
n : function() {
return Ext.ss.common.FunctionBoxHelper
.statisticalCommon(arguments, "n");
},
odd : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "odd");
},
even : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "even");
},
abs : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "abs");
},
sqrt : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "sqrt");
},
sqrtpi : function() {
return Ext.ss.common.FunctionBoxHelper
.aMathCommon2(arguments, "sqrtpi");
},
degrees : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments,
"degrees");
},
exp : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "exp");
},
fact : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "fact");
},
'int' : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "int");
},
radians : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments,
"radians");
},
iseven : function() {
return Ext.ss.common.FunctionBoxHelper
.aMathCommon2(arguments, "iseven");
},
isodd : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "isodd");
},
sign : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon2(arguments, "sign");
},
count : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon3(arguments, "count");
},
counta : function() {
return Ext.ss.common.FunctionBoxHelper
.aMathCommon3(arguments, "counta");
},
countblank : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon3(arguments,
"countblank");
},
floor : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon4(arguments, "floor");
},
ceiling : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon4(arguments,
"ceiling");
},
mod : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon4(arguments, "mod");
},
randbetween : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon4(arguments,
"randbetween");
},
quotient : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon4(arguments,
"quotient");
},
atan2 : function() {
return Ext.ss.common.FunctionBoxHelper.aMathCommon4(arguments, "atan2");
},
round : function() {
return Ext.ss.common.FunctionBoxHelper.aMathRound(arguments, "round");
},
rounddown : function() {
return Ext.ss.common.FunctionBoxHelper.aMathRound(arguments,
"rounddown");
},
roundup : function() {
return Ext.ss.common.FunctionBoxHelper.aMathRound(arguments, "roundup");
},
upper : function() {
return Ext.ss.common.FunctionBoxHelper.stringComm1(arguments, "upper");
},
lower : function() {
return Ext.ss.common.FunctionBoxHelper.stringComm1(arguments, "lower");
},
len : function() {
return Ext.ss.common.FunctionBoxHelper.stringComm1(arguments, "len");
},
'true' : function() {
if (4 == arguments.length) {
return "TRUE";
}
throw "SS_ERROR_NA";
},
'false' : function() {
if (4 == arguments.length) {
return "FALSE";
}
throw "SS_ERROR_NA";
},
pi : function() {
if (arguments.length != 4) {
throw "SS_ERROR_NA";
}
return Math.PI;
},
rand : function() {
if (arguments.length != 4) {
throw "SS_ERROR_NA";
}
return Math.random();
},
value : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (1 != len) {
throw "SS_ERROR_NA";
}
var val = arguments[0];
val = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y, sheetIndex,
val);
if (val === undefined || Ext.ss.common.Mask.isEmptyStr(val)) {
throw "SS_ERROR_VALUE";
}
var checkDate = ds.prepareDate(val);
if (checkDate) {
val = Ext.ss.common.Helper.convertDateToNum(checkDate);
return val;
}
var num = Number(val);
if (!Ext.isNumber(num)) {
throw "SS_ERROR_VALUE";
}
return num;
},
text : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var val = arguments[0], fm = arguments[1];
val = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y, sheetIndex,
val);
fm = Ext.ss.common.FunctionBoxHelper
.getObjVal(ds, x, y, sheetIndex, fm);
var num = Number(val);
if (!Ext.isNumber(num)) {
if (fm && Ext.isString(fm) && fm.length > 3) {
fm = fm.replace(/yyyy/i, "Y").replace(/dd/i, "d").replace(
/mmm/gi, "M").replace(/mm/gi, "m").replace(/hh/i, "h");
if (fm.indexOf(":m") != -1) {
fm = fm.replace(/:m/i, ":i");
}
}
var checkDate = ds.prepareDateStr(val, fm);
if (checkDate && false != checkDate) {
return checkDate + " ";
} else {
return val + "
";
}
} else {
var txt = Ext.ss.common.FunctionBoxHelper.formatNumber(val, fm);
return txt + "
";
}
},
rept : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var txt = arguments[0], times = arguments[1];
txt = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y, sheetIndex,
txt);
times = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y, sheetIndex,
times);
times = Number(times);
if (Ext.isNumber(times)) {
if (0 > times) {
throw "SS_ERROR_VALUE";
} else if (0 == times) {
return "";
}
} else {
throw "SS_ERROR_VALUE";
}
if (Ext.isNumber(txt) || Ext.isString(txt)) {
txt = txt.toString();
var arr = [];
for (var i = 0; i < times; i++) {
arr.push(txt);
}
return arr.join("");
} else {
throw "SS_ERROR_VALUE";
}
},
find : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 > len || 3 < len) {
throw "SS_ERROR_NA";
}
var source = arguments[0], target = arguments[1], start = 2 == len
? 0
: arguments[2];
target = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, target);
if (target === undefined || Ext.ss.common.Mask.isEmptyStr(target)) {
throw "SS_ERROR_VALUE";
}
source = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, source);
if (source === undefined || Ext.ss.common.Mask.isEmptyStr(source)) {
throw "SS_ERROR_VALUE";
}
start = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, start);
if ((Ext.isNumber(source) || Ext.isString(source))
&& (Ext.isNumber(target) || Ext.isString(target))) {
source = source.toString();
target = target.toString();
if (0 < start) {
start = start - 1;
target = target.slice(start, target.length);
} else {
start = 0;
}
var index = target.indexOf(source);
if (-1 == index) {
throw "SS_ERROR_VALUE";
}
return index + 1 + start;
} else {
throw "SS_ERROR_VALUE";
}
},
mid : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 != len) {
throw "SS_ERROR_NA";
}
var str = arguments[0], pos = arguments[1], leng = arguments[2];
str = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y, sheetIndex,
str);
if (str === undefined || Ext.ss.common.Mask.isEmptyStr(str)) {
throw "SS_ERROR_VALUE";
}
pos = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pos);
leng = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, leng);
if ((Ext.isNumber(str) || Ext.isString(str)) && Ext.isNumber(pos)
&& Ext.isNumber(leng)) {
str = str.toString();
if (0 < pos && leng >= 0) {
return str.substr(pos - 1, leng);
} else {
throw "SS_ERROR_VALUE";
}
} else {
throw "SS_ERROR_VALUE";
}
},
date : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 != len) {
throw "SS_ERROR_NA";
}
var year = arguments[0], month = arguments[1], day = arguments[2];
year = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, year);
month = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, month);
day = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, day);
var date = new Date(year, month - 1, day);
if (date) {
return date.format("m/d/Y");
} else {
throw "SS_ERROR_VALUE";
}
},
today : function() {
if (4 == arguments.length) {
var today = new Date;
today = today.format("m/d/Y");
return today;
} else {
throw "SS_ERROR_NA";
}
},
weekday : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (1 != len && 2 != len) {
throw "SS_ERROR_NA";
}
var enterDate = arguments[0];
var retVal = 1;
if (len == 2) {
retVal = arguments[1];
retVal = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, retVal);
}
if (retVal === undefined) {
throw "SS_ERROR_NUM";
}
if (retVal != 1 && retVal != 2 && retVal != 3) {
throw "SS_ERROR_NUM";
}
enterDate = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, enterDate);
if (enterDate === undefined || Ext.ss.common.Mask.isEmptyStr(enterDate)) {
throw "SS_ERROR_NUM";
}
var checkDate = ds.prepareDate(enterDate);
if (checkDate) {
var result = checkDate.getDay();
if (retVal == 1) {
result += 1;
}
if (retVal == 2 && result == 0) {
result = 7;
}
if (retVal == 3) {
result -= 1;
if (result == -1) {
result = 6;
}
}
return result;
} else {
throw "SS_ERROR_VALUE";
}
},
concatenate : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var res = [];
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var tmp = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, posOffset);
res = res.concat(tmp);
} else {
if (Ext.isArray(posOffset)) {
res = res.concat(posOffset);
} else if (false != Ext.type(posOffset)) {
var str = posOffset.toString();
if (str) {
res.push(str);
}
}
}
}
return res.join("");
},
year : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (1 != len) {
throw "SS_ERROR_NA";
}
var pos = arguments[0];
var val = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, pos);
if (Number(val) < 0) {
throw "SS_ERROR_NUM";
}
var arr = Ext.ss.common.Mask.dateFormats;
for (var i = 0, len = arr.length; i < len; i++) {
var f = arr[i];
try {
var date = Date.parseDate(val, f);
if (date.format(f) == val) {
return date.getFullYear();
}
} catch (e) {
}
}
if (Ext.isNumber(Number(val))) {
var myDate = new Date;
myDate.setFullYear(1900, 0, val);
if (myDate.getFullYear() > 9999) {
throw "SS_ERROR_NUM";
}
return myDate.getFullYear();
} else {
throw "SS_ERROR_NA";
}
},
month : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (1 != len) {
throw "SS_ERROR_NA";
}
var pos = arguments[0];
var val = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, pos);
if (Number(val) < 0) {
throw "SS_ERROR_NUM";
}
var arr = Ext.ss.common.Mask.dateFormats;
for (var i = 0, len = arr.length; i < len; i++) {
var f = arr[i];
try {
var date = Date.parseDate(val, f);
if (date.format(f) == val) {
return date.getMonth() + 1;
}
} catch (e) {
}
}
if (Ext.isNumber(Number(val))) {
var myDate = new Date;
myDate.setFullYear(1900, 0, val);
if (myDate.getFullYear() > 9999) {
throw "SS_ERROR_NUM";
}
return myDate.getMonth() + 1;
}
throw "SS_ERROR_NA";
},
combin : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var number = arguments[0], choose = arguments[1];
var number = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, number);
var choose = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, choose);
var sum1 = 1, sum2 = 1;
for (var i = Math.floor(number); i > Math.floor(number)
- Math.floor(choose); i--) {
sum1 = sum1 * i;
}
for (var i = 1; i <= Math.floor(choose); i++) {
sum2 = sum2 * i;
}
return Math.floor(sum1 / sum2);
},
offset : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (3 <= len && len <= 5) {
var originPos = arguments[0];
if (Ext.isObject(originPos)) {
originPos = Ext.apply({}, originPos);
ds.fireEvent("project", ds, {
x : x,
y : y
}, {
ox : originPos.ox,
oy : originPos.oy
}, {
ox : originPos.oex,
oy : originPos.oey
});
var rowOffset = arguments[1], colOffset = arguments[2], rowLen, colLen;
if (4 <= len) {
rowLen = arguments[3];
}
if (5 == len) {
colLen = arguments[4];
}
if (Ext.isObject(rowOffset)) {
rowOffset = Ext.ss.common.FunctionBoxHelper.getNumObjValue(
ds, x, y, sheetIndex, rowOffset);
}
rowOffset = Number(rowOffset);
if (!Ext.isNumber(rowOffset)) {
throw "SS_ERROR_VALUE";
}
if (Ext.isObject(colOffset)) {
colOffset = Ext.ss.common.FunctionBoxHelper.getNumObjValue(
ds, x, y, sheetIndex, colOffset);
}
colOffset = Number(colOffset);
if (!Ext.isNumber(colOffset)) {
throw "SS_ERROR_VALUE";
}
if (Ext.isObject(rowLen)) {
rowLen = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds,
x, y, sheetIndex, rowLen);
}
if (Ext.isObject(colLen)) {
colLen = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds,
x, y, sheetIndex, colLen);
}
originPos.ox += rowOffset;
originPos.oex += rowOffset;
originPos.oy += colOffset;
originPos.oey += colOffset;
if (Ext.isDefined(rowLen)) {
rowLen = Number(rowLen);
if (Ext.isNumber(rowLen) && 0 < rowLen) {
originPos.oex = originPos.ox + rowLen - 1;
} else {
throw "SS_ERROR_VALUE";
}
}
if (Ext.isDefined(colLen)) {
rowLen = Number(colLen);
if (Ext.isNumber(colLen) && 0 < colLen) {
originPos.oey = originPos.oy + colLen - 1;
} else {
throw "SS_ERROR_VALUE";
}
}
return originPos;
} else {
throw "#PARAM_ERROR";
}
} else {
throw "SS_ERROR_NA";
}
},
indirect : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var txt = arguments[0];
var value;
if (Ext.isObject(txt)) {
value = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, txt);
} else {
var pos = ds.parseText2Pos(txt);
value = ds.getCellValue(pos.x, pos.y, sheetIndex);
}
if (!value) {
value = "";
}
return value;
},
areas : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
if (len - 4 == 0) {
throw "SS_ERROR_NA";
}
var n = 0;
var fn = function(args) {
for (var i = 0, len = args.length; i < len; i++) {
var arg = args[i];
if (Ext.isObject(arg)) {
if (Ext.isDefined(arg.ox)) {
n++;
}
} else if (Ext.isArray(arg)) {
fn(arg);
}
}
};
fn(arguments);
return n;
},
index : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (0 < len && len <= 4) {
var areas = arguments[0], rowIndex, colIndex, areaIndex;
if (1 == len) {
rowIndex = 1;
colIndex = 1;
areaIndex = 1;
} else if (2 == len) {
rowIndex = arguments[1];
colIndex = 1;
areaIndex = 1;
} else if (3 == len) {
rowIndex = arguments[1];
colIndex = arguments[2];
areaIndex = 1;
} else if (4 == len) {
rowIndex = arguments[1];
colIndex = arguments[2];
areaIndex = arguments[3];
}
if (Ext.isObject(rowIndex)) {
rowIndex = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds,
x, y, sheetIndex, rowIndex);
if (1 > rowIndex) {
throw "SS_ERROR_VALUE";
}
} else {
rowIndex = Number(rowIndex);
if (!Ext.isNumber(rowIndex) || 1 > rowIndex) {
throw "SS_ERROR_VALUE";
}
}
if (Ext.isObject(colIndex)) {
colIndex = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds,
x, y, sheetIndex, colIndex);
if (!Ext.isNumber(colIndex) || 1 > colIndex) {
throw "SS_ERROR_VALUE";
}
} else {
colIndex = Number(colIndex);
if (!Ext.isNumber(colIndex)) {
throw "SS_ERROR_VALUE";
}
}
if (Ext.isObject(areaIndex)) {
areaIndex = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds,
x, y, sheetIndex, areaIndex);
} else {
areaIndex = Number(areaIndex);
if (!Ext.isNumber(areaIndex)) {
throw "SS_ERROR_VALUE";
}
}
if (Ext.isObject(areas) && 1 == areaIndex) {
ds.fireEvent("project", ds, {
x : x,
y : y
}, {
ox : areas.ox,
oy : areas.oy
}, {
ox : areas.oex,
oy : areas.oey
});
var minx = areas.ox + x, miny = areas.oy + y, maxx = areas.oex
+ x, maxy = areas.oey + y;
ds.checkSheetIndexValid(areas.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(areas.sheetIndex)) {
curSheetIndex = areas.sheetIndex;
}
var row = minx + rowIndex - 1, col = miny + colIndex - 1;
if (row <= maxx && col <= maxy) {
var rest = ds.getCellValue(row, col, curSheetIndex);
if (Ext.isNumber(Number(rest))) {
return Number(rest);
} else {
return rest;
}
} else {
throw "SS_ERROR_VALUE";
}
} else if (Ext.isArray(areas) && areaIndex <= areas.length) {
var area;
for (var i = 0, count = areas.length; i < count; i++) {
area = areas[i];
ds.fireEvent("project", ds, {
x : x,
y : y
}, {
ox : area.ox,
oy : area.oy
}, {
ox : area.oex,
oy : area.oey
});
}
area = areas[areaIndex - 1];
var minx = area.ox + x, miny = area.oy + y, maxx = area.oex + x, maxy = area.oey
+ y;
var row = minx + rowIndex - 1, col = miny + colIndex - 1;
ds.checkSheetIndexValid(areas.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(areas.sheetIndex)) {
curSheetIndex = areas.sheetIndex;
}
if (row <= maxx && col <= maxy) {
var rest = ds.getCellValue(row, col, curSheetIndex);
if (Ext.isNumber(Number(rest))) {
return Number(rest);
} else {
return rest;
}
} else {
throw "SS_ERROR_VALUE";
}
} else {
throw "SS_ERROR_VALUE";
}
} else {
throw "SS_ERROR_NA";
}
},
trim : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (1 != len) {
throw "SS_ERROR_NA";
}
var cell = arguments[0];
if (Ext.isObject(cell)) {
cell = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, cell);
}
cell = cell.toString();
if (Ext.isDefined(cell) && "" !== cell) {
return cell.trim();
}
if (cell == "") {
return "";
}
throw "SS_ERROR_VALUE";
},
sumproduct : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var varArrs = [];
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var tempArr = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(
ds, x, y, sheetIndex, posOffset);
if (tempArr.length > 0) {
varArrs.push(tempArr);
}
} else {
if (posOffset.length != null) {
var tmAry = Ext.ss.common.FunctionBoxHelper
.restructureArray(posOffset, x, y, sheetIndex, ds);
varArrs.push(tmAry);
} else {
var num = Number(posOffset);
varArrs.push([num]);
}
}
}
if (varArrs.length > 0) {
var basicLen = varArrs[0].length;
for (var m = 0; m < varArrs.length; m++) {
if (varArrs[m].length != basicLen) {
varArrs = [];
throw "SS_ERROR_VALUE";
}
}
var total = 0;
for (var t = 0; t < varArrs[0].length; t++) {
var result = 1;
for (var c = 0; c < varArrs.length; c++) {
if (!Ext.isNumber(varArrs[c][t])) {
throw "SS_ERROR_VALUE";
}
result *= varArrs[c][t];
}
total += result;
}
varArrs = [];
return total;
}
varArrs = [];
throw "SS_ERROR_VALUE";
},
gcd : function() {
var arr = [];
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len == 0) {
throw "SS_ERROR_NA";
}
var res = 0;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var ary = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(ds, x,
y, sheetIndex, posOffset);
for (var i = 0; i < ary.length; i++) {
var num = Number(ary[i]);
if (num < 0) {
throw "SS_ERROR_NUM";
}
if (!Ext.isNumber(num)) {
throw "SS_ERROR_VALUE";
}
arr.push(Math.floor(num));
}
} else {
var num = Number(posOffset);
if (Ext.isNumber(num)) {
if (num < 0) {
throw "SS_ERROR_NUM";
}
arr.push(Math.floor(num));
} else {
throw "SS_ERROR_VALUE";
}
}
}
arr.sort(function(a, b) {
return a - b;
});
res = arr[0];
while (res > 0) {
var counts = 0;
for (i = 0; i < arr.length; i++) {
if (arr[i] % res == 0) {
counts++;
}
}
if (counts == arr.length) {
break;
}
res--;
}
return res;
},
lcm : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var arr = [];
for (var k = 0; k < len; k++) {
var pos = arguments[k];
if (Ext.isObject(pos)) {
var ary = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, pos);
for (var i = 0; i < ary.length; i++) {
Ext.ss.common.FunctionBoxHelper.checkErrorCode(ary[i]);
if (ary[i] != "") {
var num = Number(ary[i]);
if (Ext.isNumber(num)) {
arr.push(Math.floor(num));
} else if (ary[i] != undefined) {
throw "SS_ERROR_VALUE";
}
}
}
} else {
if (pos === undefined || Ext.ss.common.Mask.isEmptyStr(pos)) {
throw "SS_ERROR_VALUE";
}
var num = Number(pos);
if (Ext.isNumber(num)) {
arr.push(Math.floor(pos));
} else {
throw "SS_ERROR_VALUE";
}
}
}
var size = arr.length;
if (size == 0) {
throw "SS_ERROR_VALUE";
}
for (var i = 0; i < size; i++) {
if (arr[i] < 0 || arr[i] == null) {
throw "SS_ERROR_NUM";
}
}
if (1 == size) {
return arr[0];
} else if (1 < size) {
var obj = {};
for (var i = 0; i < size; i++) {
if (arr[i] == 0 || arr[i] == "") {
return 0;
}
obj[arr[i]] = true;
}
var fn = function(num) {
var fcs = {};
for (var f = 2; f <= num;) {
if (0 == num % f) {
fcs[f] = fcs[f] || 0;
fcs[f]++;
num = num / f;
} else {
f++;
}
}
if (1 != num) {
fcs[num] = fcs[num] || 0;
fcs[num]++;
}
return fcs;
};
var all = {};
for (var p in obj) {
var num = Math.abs(p);
if (num > 999999999999999) {
throw "SS_ERROR_VALUE";
}
var parts = fn(num);
for (var q in parts) {
if (parts[q] > 999999999999999) {
throw "SS_ERROR_VALUE";
}
if (!Ext.isDefined(all[q])) {
all[q] = parts[q];
} else if (all[q] < parts[q]) {
all[q] = parts[q];
}
}
}
var ret = 1;
for (var p in all) {
ret *= Math.pow(p, all[p]);
}
return ret;
}
},
mode : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (len == 0) {
throw "SS_ERROR_NA";
}
var arr = [];
for (var k = 0; k < len; k++) {
var pos = arguments[k];
if (Ext.isObject(pos)) {
var tempArr = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds,
x, y, sheetIndex, pos);
for (var i = 0; i < tempArr.length; i++) {
Ext.ss.common.FunctionBoxHelper.checkErrorCode(tempArr[i]);
}
if (tempArr.length > 0) {
arr = arr.concat(tempArr);
}
} else {
pos = Number(pos);
if (Ext.isNumber(pos)) {
arr.push(pos);
}
}
}
var size = arr.length;
if (0 == size) {
throw "SS_ERROR_VALUE";
} else if (2 > size) {
throw "SS_ERROR_NA";
} else if (2 == size) {
if (arr[0] == arr[1]) {
return arr[0];
}
throw "SS_ERROR_NA";
} else {
var obj = {};
for (var i = 0; i < size; i++) {
obj[arr[i]] = obj[arr[i]] || 0;
obj[arr[i]]++;
}
var max = -1, val;
for (var p in obj) {
if (max < obj[p]) {
val = p;
max = obj[p];
}
}
if (1 >= max) {
throw "SS_ERROR_NA";
}
return val;
}
},
median : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var arr = [];
for (var k = 0; k < len; k++) {
var pos = arguments[k];
if (Ext.isObject(pos)) {
var tempArr = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds,
x, y, sheetIndex, pos);
for (var i = 0; i < tempArr.length; i++) {
Ext.ss.common.FunctionBoxHelper.checkErrorCode(tempArr[i]);
var num = Number(tempArr[i]);
if (Ext.isNumber(num)) {
arr.push(num);
}
}
} else {
pos = Number(pos);
if (Ext.isNumber(pos)) {
arr.push(pos);
}
}
}
var size = arr.length;
if (0 == size) {
throw "SS_ERROR_VALUE";
} else if (size == 1) {
if (!Ext.ss.common.Mask.isNumber(arr[0])) {
throw "SS_ERROR_VALUE";
}
return arr[0];
} else if (size == 2) {
if (!Ext.ss.common.Mask.isNumber(arr[0])
&& !Ext.ss.common.Mask.isNumber(arr[1])) {
throw "SS_ERROR_VALUE";
}
var sum = arr[0] + arr[1];
return Math.round(sum / size * 100) / 100;
} else {
arr.sort(function(a, b) {
return a - b;
});
if (0 == size % 2) {
var mid = Math.floor(size / 2);
return (arr[mid] + arr[mid - 1]) / 2;
} else {
var mid = Math.floor(size / 2);
return arr[mid];
}
}
},
countif : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (len < 2 && len > 3) {
throw "SS_ERROR_NA";
}
var range = arguments[0], criteria = arguments[1], append = null, result = 0;
criteria = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, criteria);
if (3 == len) {
append = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, arguments[2]);
criteria = criteria + append;
}
range = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, range);
var compareFlag = /^\s*[!<>=]/gi.test(criteria.toString());
for (var i = 0; i < range.length; i++) {
var tempValue = range[i];
var flag = false;
if (compareFlag) {
if (Ext.isNumber(Number(tempValue))) {
flag = eval(tempValue + criteria);
} else {
flag = eval("\"" + tempValue + "\"" + criteria);
}
} else {
if (tempValue == null) {
tempValue = "";
}
if (1 == Ext.ss.common.Mask.shExpMatch_KMP(
tempValue.toString(), criteria.toString())) {
flag = true;
}
}
if (flag) {
result++;
}
}
return result;
},
columns : function() {
var len = arguments.length;
var ds, x, y, index, sheetIndex;
if (5 == len) {
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
var posOffset = arguments[0];
if (Ext.isObject(posOffset)) {
var miny = parseInt(posOffset.oy), maxy = parseInt(posOffset.oey);
return maxy - miny + 1;
}
}
throw "SS_ERROR_NA";
},
column : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, index;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
if (5 == len) {
var posOffset = arguments[0];
if (Ext.isObject(posOffset)) {
var i = parseInt(posOffset.ox) + x, j = parseInt(posOffset.oy)
+ y;
return j;
}
} else if (4 == len) {
var i = x, j = y;
return j;
}
throw "SS_ERROR_NA";
},
rows : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, index;
if (5 == len) {
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
var posOffset = arguments[0];
if (Ext.isObject(posOffset)) {
var minx = parseInt(posOffset.ox), maxx = parseInt(posOffset.oex);
return maxx - minx + 1;
}
}
throw "#PARAM_ERROR";
},
row : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, index;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
if (5 == len) {
var posOffset = arguments[0];
if (Ext.isObject(posOffset)) {
var i = parseInt(posOffset.ox) + x, j = parseInt(posOffset.oy)
+ y;
return i;
}
} else if (4 == len) {
var i = x;
return i;
}
throw "SS_ERROR_NA";
},
choose : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, index;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var rows = ds.data.rows;
var indexPos = arguments[0];
indexPos = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, indexPos);
if (0 < indexPos && indexPos < len) {
var result = arguments[indexPos];
result = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, result);
return result;
} else {
throw "SS_ERROR_VALUE";
}
},
trunc : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len || len > 2) {
throw "SS_ERROR_NA";
}
var digital = arguments[1];
digital = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, digital);
var posOffset = arguments[0];
posOffset = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (posOffset === undefined) {
return 0;
}
if (!digital || digital == undefined) {
digital = 0;
posOffset += "";
var nDx = posOffset.indexOf(".");
if (nDx == 0) {
return 0;
} else if (nDx > 0) {
posOffset = posOffset.substring(0, nDx);
}
}
var num = Number(posOffset);
digital = Number(digital);
if (!Ext.isNumber(digital) || !Ext.isNumber(num)
|| Ext.ss.common.Mask.isEmptyStr(posOffset)) {
throw "SS_ERROR_VALUE";
} else if (num == 0 || digital < 0) {
return 0;
}
if (digital > 0) {
var maxIdx = 10;
if (num < 0) {
maxIdx = 11;
}
num += "";
var base = Math.floor(digital);
var idx = num.indexOf(".");
if (idx > -1) {
var leg = num.length;
if (idx >= maxIdx) {
num = Math.round(num);
} else {
if (leg - idx - 1 > base) {
var a = "1";
for (var k = 0; k < base - 1; k++) {
a += "0";
}
a = Number(a);
num = num.substring(0, idx + base + 1);
if (maxIdx - 1 == idx) {
num = parseFloat(Math.round(num * a)) / a;
}
} else {
var a = "1";
for (var k = 0; k < maxIdx - idx; k++) {
a += "0";
}
a = Number(a);
num = num.substring(0, maxIdx + 2);
num = parseFloat(Math.round(num * a)) / a;
}
}
}
}
return num;
},
product : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var res = 1;
var allArgsNaN = true;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
ds.fireEvent("project", ds, {
x : x,
y : y
}, {
ox : posOffset.ox,
oy : posOffset.oy
}, {
ox : posOffset.oex,
oy : posOffset.oey
});
var minx = parseInt(posOffset.ox) + x, maxx = parseInt(posOffset.oex)
+ x, miny = parseInt(posOffset.oy) + y, maxy = parseInt(posOffset.oey)
+ y;
ds.checkSheetIndexValid(posOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(posOffset.sheetIndex)) {
curSheetIndex = posOffset.sheetIndex;
}
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var num = ds.getCellValue(i, j, curSheetIndex);
if (len == 1 && (num === undefined || num === "")) {
return 0;
}
num = Number(num);
if (Ext.isNumber(num)) {
res *= num;
allArgsNaN = false;
}
}
}
} else {
var num = Number(posOffset);
if (Ext.isNumber(num)) {
res *= num;
allArgsNaN = false;
}
}
}
if (allArgsNaN) {
res = 0;
}
return res;
},
not : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (1 != len) {
throw "SS_ERROR_NA";
}
var num = arguments[0];
if (Ext.isObject(num)) {
num = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, num);
Ext.ss.common.FunctionBoxHelper.checkErrorCode(num);
if (num == undefined || num == "true" || num == "false"
|| !isNaN(num) || num == "TRUE" || num == "FALSE") {
return !num || "false" == num || 0 == num || "FALSE" == num
? "TRUE"
: "FALSE";
} else {
throw "SS_ERROR_VALUE";
}
}
if (typeof num == "string" || num == "null" || num == undefined
|| Ext.ss.common.Mask.isEmptyStr(num)) {
throw "SS_ERROR_VALUE";
}
return !num || "false" == num || 0 == num || "FALSE" == num
? "TRUE"
: "FALSE";
},
or : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len == 0) {
throw "SS_ERROR_NA";
}
var tmAry = [];
for (var j = 0; j < len; j++) {
var posOffset = arguments[j];
if (Ext.isObject(posOffset)) {
var arr = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, posOffset);
for (var i = 0; i < arr.length; i++) {
var num = arr[i];
if (num == null) {
throw "SS_ERROR_VALUE";
}
tmAry.push(num);
}
} else {
if (posOffset == null || typeof posOffset == "string") {
throw "SS_ERROR_VALUE";
}
tmAry.push(posOffset);
}
}
if (tmAry.length == 1 && Ext.isString(tmAry[r])) {
throw "SS_ERROR_VALUE";
}
for (var r = 0; r < tmAry.length; r++) {
var num = tmAry[r];
if (("FALSE" != num && "false" != num && num != "0" && !isNaN(num))
&& num != undefined || num == "true" || num == "TRUE") {
return "TRUE";
}
}
return "FALSE";
},
and : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len == 0) {
throw "SS_ERROR_NA";
}
var allArgsAreNotNumber = null;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var arr = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, posOffset);
for (var i = 0; i <= arr.length; i++) {
var num = arr[i];
if (null == num || num === undefined || num === "") {
if (allArgsAreNotNumber == null) {
allArgsAreNotNumber = true;
}
} else if (0 == num || "0" == num || "false" == num
|| "FALSE" == num) {
return "FALSE";
} else if (Ext.ss.common.Mask.isEmptyStr(num)) {
if (allArgsAreNotNumber == null) {
allArgsAreNotNumber = true;
}
} else if (Ext.isNumber(Number(num))) {
allArgsAreNotNumber = false;
} else {
if (allArgsAreNotNumber == null) {
allArgsAreNotNumber = true;
}
}
}
} else {
var num = posOffset;
if (null == num || num === undefined || num === "") {
if (allArgsAreNotNumber == null) {
allArgsAreNotNumber = true;
}
} else if (0 == num || "0" == num || "false" == num
|| "FALSE" == num) {
return "FALSE";
} else if (Ext.ss.common.Mask.isEmptyStr(num)) {
if (allArgsAreNotNumber == null) {
allArgsAreNotNumber = true;
}
} else if (Ext.isNumber(Number(num))) {
allArgsAreNotNumber = false;
} else {
if (allArgsAreNotNumber == null) {
allArgsAreNotNumber = true;
}
}
}
}
if (allArgsAreNotNumber && allArgsAreNotNumber == true) {
throw "SS_ERROR_VALUE";
}
return "TRUE";
},
power : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, powNum;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 2) {
throw "SS_ERROR_NA";
}
powNum = arguments[1];
if (powNum === undefined || powNum === "") {
throw "SS_ERROR_VALUE";
}
powNum = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, powNum);
var num = arguments[0];
num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, num);
return Math.pow(num, powNum);
},
left : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, leftPos = 1, posOffset;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len || len > 2) {
throw "SS_ERROR_NA";
}
if (2 == len) {
leftPos = arguments[1];
posOffset = arguments[0];
if (Ext.isObject(leftPos)) {
leftPos = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, leftPos);
leftPos = leftPos.toString();
if (leftPos.toUpperCase() == "TRUE") {
leftPos = 1;
} else if (leftPos == "" || leftPos.toUpperCase() == "FALSE") {
return "";
}
}
} else {
posOffset = arguments[0];
}
leftPos = leftPos.toString();
if (leftPos.toUpperCase() == "TRUE") {
leftPos = 1;
} else if (leftPos.toUpperCase() == "FALSE") {
return "";
}
leftPos = Number(leftPos);
if (!Ext.isNumber(leftPos)) {
throw "SS_ERROR_VALUE";
}
leftPos = Math.floor(leftPos);
if (Ext.isString(posOffset) || Ext.isNumber(posOffset)
|| Ext.isBoolean(posOffset)) {
if (Ext.isBoolean(posOffset)) {
posOffset = posOffset.toString().toUpperCase();
} else {
posOffset = posOffset.toString();
}
return posOffset.slice(0, leftPos);
} else {
var res = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (res.toUpperCase() == "FALSE") {
res = res.toUpperCase();
}
res = res.toString();
res = res.slice(0, leftPos);
return res;
}
},
right : function() {
var len = arguments.length;
var ds, x, y, sheetIndex, rightPos = 1, posOffset;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len || len > 2) {
throw "SS_ERROR_NA";
}
if (2 == len) {
rightPos = arguments[1];
posOffset = arguments[0];
if (Ext.isObject(rightPos)) {
ds.fireEvent("project", ds, {
x : x,
y : y
}, rightPos, {
ox : rightPos.oex,
oy : rightPos.oey
});
var abPos = {
sheetIndex : rightPos.sheetIndex,
x : x + rightPos.ox,
y : y + rightPos.oy
};
ds.checkSheetIndexValid(abPos.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(abPos.sheetIndex)) {
curSheetIndex = abPos.sheetIndex;
}
var i = parseInt(abPos.x), j = parseInt(abPos.y);
rightPos = ds.getCellValue(i, j, curSheetIndex) || "";
rightPos = rightPos.toString();
if (rightPos.toUpperCase() == "TRUE") {
rightPos = 1;
} else if (rightPos == "" || rightPos.toUpperCase() == "FALSE") {
return "";
}
}
} else {
posOffset = arguments[0];
}
rightPos = rightPos.toString();
if (rightPos.toUpperCase() == "TRUE") {
rightPos = 1;
} else if (rightPos.toUpperCase() == "FALSE") {
return "";
}
rightPos = Number(rightPos);
if (!Ext.isNumber(rightPos)) {
throw "SS_ERROR_VALUE";
}
rightPos = Math.floor(rightPos);
if (Ext.isString(posOffset) || Ext.isNumber(posOffset)
|| Ext.isBoolean(posOffset)) {
if (Ext.isBoolean(posOffset)) {
posOffset = posOffset.toString().toUpperCase();
} else {
posOffset = posOffset.toString();
}
var strLen = posOffset.length;
return posOffset.slice(strLen - rightPos, strLen);
} else {
var res = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
res = res || "";
res = res.toString();
if (res.toUpperCase() == "FALSE") {
res = res.toUpperCase();
}
var strLen = res.length;
res = res.slice(strLen - rightPos, strLen);
return res;
}
},
num : function(v, dv) {
if (Ext.isNumber(Number(v))) {
return Number(v);
}
return dv;
},
sum : function() {
var maxDigNum = 0;
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var res = 0;
var argsIncludeNaN = false;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var arr = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, posOffset);
for (var i = 0; i < arr.length; i++) {
var num = arr[i];
Ext.ss.common.FunctionBoxHelper.checkInfinitieError(num);
num = Number(num);
if (Ext.isNumber(num)) {
var dn = Ext.ss.common.Helper.getDigitalLen(num);
if (dn > maxDigNum) {
maxDigNum = dn;
}
res += num;
}
}
} else {
if (posOffset.length != null) {
var tmAry = Ext.ss.common.FunctionBoxHelper
.restructureArray(posOffset, x, y, sheetIndex, ds);
for (var z = 0; z < tmAry.length; z++) {
var dn = Ext.ss.common.Helper.getDigitalLen(tmAry[z]
|| "0");
if (dn > maxDigNum) {
maxDigNum = dn;
}
res += Number(tmAry[z] || "0");
}
} else {
var num = Number(posOffset);
if (Ext.isNumber(num)) {
var dn = Ext.ss.common.Helper.getDigitalLen(num);
if (dn > maxDigNum) {
maxDigNum = dn;
}
res += num;
} else {
argsIncludeNaN = true;
}
}
}
}
if (argsIncludeNaN) {
throw "SS_ERROR_VALUE";
}
var dn = Ext.ss.common.Helper.getDigitalLen(res);
if (dn > maxDigNum) {
res = Ext.util.Format.round(res, maxDigNum);
}
return res;
},
sumsq : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len == 0) {
throw "SS_ERROR_NA";
}
var res = 0;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var arr = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, posOffset);
for (var i = 0; i < arr.length; i++) {
var num = arr[i];
num = Ext.ss.FunctionBox.num(num, 0);
res += Math.pow(num, 2);
}
} else {
var num = Number(posOffset);
if (Ext.isNumber(num)) {
res += Math.pow(num, 2);
}
}
}
return res;
},
sumxmy2 : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var xrng = arguments[0], yrng = arguments[1];
return Ext.ss.common.FunctionBoxHelper.sumHelper(x, y, sheetIndex, ds,
xrng, yrng, "sumxmy2");
},
sumx2py2 : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var xrng = arguments[0], yrng = arguments[1];
return Ext.ss.common.FunctionBoxHelper.sumHelper(x, y, sheetIndex, ds,
xrng, yrng, "sumx2py2");
},
sumx2my2 : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var xrng = arguments[0], yrng = arguments[1];
return Ext.ss.common.FunctionBoxHelper.sumHelper(x, y, sheetIndex, ds,
xrng, yrng, "sumx2my2");
},
/**定义函数*/
mfff:function(){
return "sddd";
},
sumif : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len < 2 || len > 5) {
throw "SS_ERROR_NA";
}
var checkOffset = arguments[0], conditionOffset = arguments[1];
var sumOffset = Ext.apply({}, checkOffset);
if (len == 3) {
sumOffset = arguments[2];
}
var minOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.ox,
oy : checkOffset.oy
};
var maxOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.oex,
oy : checkOffset.oey
};
var sumMinOffset = {
sheetIndex : sumOffset.sheetIndex,
ox : sumOffset.ox,
oy : sumOffset.oy
};
var sumMaxOffset = {
sheetIndex : sumOffset.sheetIndex,
ox : sumOffset.oex,
oy : sumOffset.oey
};
var minx = minOffset.ox + x, miny = minOffset.oy + y, maxx = maxOffset.ox
+ x, maxy = maxOffset.oy + y;
var sumMinx = sumMinOffset.ox + x, sumMiny = sumMinOffset.oy + y, sumMaxx = sumMaxOffset.ox
+ x, sumMaxy = sumMaxOffset.oy + y;
var rows = ds.data.rows;
var r = 0, cond, compareFlag = false;
if (Ext.isObject(conditionOffset)) {
ds.fireEvent("project", ds, {
x : x,
y : y
}, conditionOffset, conditionOffset);
var cx = conditionOffset.ox + x, cy = conditionOffset.oy + y;
ds.checkSheetIndexValid(conditionOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(conditionOffset.sheetIndex)) {
curSheetIndex = conditionOffset.sheetIndex;
}
var cond = ds.getCellValue(cx, cy, curSheetIndex);
if (Ext.isString(cond)) {
cond = Ext.util.Format.htmlDecode(cond);
}
} else {
cond = conditionOffset;
}
compareFlag = /^\s*[!<>=]/gi.test(cond);
ds.checkSheetIndexValid(minOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(minOffset.sheetIndex)) {
curSheetIndex = minOffset.sheetIndex;
}
ds.checkSheetIndexValid(sumMinOffset.sheetIndex);
var sumSheetIndex = sheetIndex;
if (false != Ext.type(sumMinOffset.sheetIndex)) {
sumSheetIndex = sumMinOffset.sheetIndex;
}
var xoffset = sumMinx - minx, yoffset = sumMiny - miny;
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var data = ds.getCellValue(i, j, curSheetIndex);
var num = Number(data);
if (!Ext.isNumber(num)) {
continue;
}
var flag = false;
if (compareFlag) {
if (Ext.isNumber(Number(data))) {
flag = eval(data + cond);
} else {
flag = eval("\"" + data + "\"" + cond);
}
} else if (1 == Ext.ss.common.Mask.shExpMatch_KMP(data
.toString(), cond.toString())) {
flag = true;
}
if (flag) {
var sumData = ds.getCellValue(xoffset + i, yoffset + j,
sumSheetIndex);
sumData = Number(sumData);
if (Ext.isNumber(sumData)) {
r += sumData;
}
}
}
}
ds.fireEvent("project", ds, {
x : x,
y : y
}, minOffset, maxOffset);
ds.fireEvent("project", ds, {
x : x,
y : y
}, sumMinOffset, sumMaxOffset);
return r;
},
sumifs : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len < 3) {
throw "SS_ERROR_NA";
}
var sumOffset = arguments[0];
var sumMinOffset = {
sheetIndex : sumOffset.sheetIndex,
ox : sumOffset.ox,
oy : sumOffset.oy
};
var sumMaxOffset = {
sheetIndex : sumOffset.sheetIndex,
ox : sumOffset.oex,
oy : sumOffset.oey
};
var sumMinx = sumMinOffset.ox + x, sumMiny = sumMinOffset.oy + y, sumMaxx = sumMaxOffset.ox
+ x, sumMaxy = sumMaxOffset.oy + y;
var i = 1;
var checkOffset = [];
var conditionOffset = [];
while (i < len) {
checkOffset[checkOffset.length] = arguments[i];
i = i + 1;
conditionOffset[conditionOffset.length] = arguments[i];
i = i + 1;
}
var minx = [], miny = [], maxx = [], maxy = [];
var cond = [], compareFlag = [];
var curSheetIndex = [];
for (var i = 0; i < checkOffset.length; i++) {
var minOffset = {
sheetIndex : checkOffset[i].sheetIndex,
ox : checkOffset[i].ox,
oy : checkOffset[i].oy
};
var maxOffset = {
sheetIndex : checkOffset[i].sheetIndex,
ox : checkOffset[i].oex,
oy : checkOffset[i].oey
};
minx[minx.length] = minOffset.ox + x, miny[miny.length] = minOffset.oy
+ y, maxx[maxx.length] = maxOffset.ox + x, maxy[maxy.length] = maxOffset.oy
+ y;
var rows = ds.data.rows;
if (Ext.isObject(conditionOffset[i])) {
ds.fireEvent("project", ds, {
x : x,
y : y
}, conditionOffset, conditionOffset);
var cx = conditionOffset.ox + x, cy = conditionOffset.oy + y;
ds.checkSheetIndexValid(conditionOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(conditionOffset.sheetIndex)) {
curSheetIndex = conditionOffset.sheetIndex;
}
var condi = ds.getCellValue(cx, cy, curSheetIndex);
if (Ext.isString(condi)) {
condi = Ext.util.Format.htmlDecode(condi);
}
cond[cond.length] = condi;
} else {
cond[cond.length] = conditionOffset[i];
}
compareFlag[compareFlag.length] = /^\s*[<>=]/gi.test(cond);
ds.checkSheetIndexValid(minOffset.sheetIndex);
if (false != Ext.type(minOffset.sheetIndex)) {
curSheetIndex[curSheetIndex.length] = minOffset.sheetIndex;
} else {
curSheetIndex[curSheetIndex.length] = sheetIndex;
}
}
ds.checkSheetIndexValid(sumMinOffset.sheetIndex);
var sumSheetIndex = sheetIndex;
if (false != Ext.type(sumMinOffset.sheetIndex)) {
sumSheetIndex = sumMinOffset.sheetIndex;
}
var r = 0;
for (var i = sumMinx; i <= sumMaxx; i++) {
for (var j = sumMiny; j <= sumMaxy; j++) {
var flag = true;
for (var k = 0; k < checkOffset.length; k++) {
var data = ds.getCellValue(minx[k] + (i - sumMinx), miny[k]
+ (j - sumMiny), curSheetIndex[k]);
var condflag = false;
if (compareFlag[k]) {
if (Ext.isNumber(Number(data))) {
condflag = eval(data + cond[k]);
} else {
condflag = eval("\"" + data + "\"" + cond[k]);
}
} else if (1 == Ext.ss.common.Mask.shExpMatch_KMP(data
.toString(), cond[k].toString())) {
condflag = true;
}
flag = flag && condflag;
}
if (flag) {
var sumData = ds.getCellValue(i, j, sumSheetIndex);
sumData = Number(sumData);
if (Ext.isNumber(sumData)) {
r += sumData;
}
}
}
}
return r;
},
lookup : function(conditionOffset, checkOffset, sumOffset, sheetIndex, x,
y, ds) {
if (len < 6 || len > 7) {
throw "SS_ERROR_NA";
}
if (6 == arguments.length) {
ds = y;
y = x;
x = sheetIndex;
sheetIndex = sumOffset;
sumOffset = Ext.apply({}, checkOffset);
}
var cond = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, conditionOffset);
if (Ext.isObject(checkOffset)) {
var minOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.ox,
oy : checkOffset.oy
};
var maxOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.oex,
oy : checkOffset.oey
};
var minx = minOffset.ox + x, miny = minOffset.oy + y, maxx = maxOffset.ox
+ x, maxy = maxOffset.oy + y;
var sumMinOffset = {
sheetIndex : sumOffset.sheetIndex,
ox : sumOffset.ox,
oy : sumOffset.oy
};
var sumMaxOffset = {
sheetIndex : sumOffset.sheetIndex,
ox : sumOffset.oex,
oy : sumOffset.oey
};
var sumMinx = sumMinOffset.ox + x, sumMiny = sumMinOffset.oy + y, sumMaxx = sumMaxOffset.ox
+ x, sumMaxy = sumMaxOffset.oy + y;
ds.fireEvent("project", ds, {
x : x,
y : y
}, minOffset, maxOffset);
ds.fireEvent("project", ds, {
x : x,
y : y
}, sumMinOffset, sumMaxOffset);
if (!Ext.isDefined(cond)) {
throw "SS_ERROR_NA";
}
ds.checkSheetIndexValid(minOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(minOffset.sheetIndex)) {
curSheetIndex = minOffset.sheetIndex;
}
ds.checkSheetIndexValid(sumMinOffset.sheetIndex);
var sumSheetIndex = sheetIndex;
if (false != Ext.type(sumMinOffset.sheetIndex)) {
sumSheetIndex = sumMinOffset.sheetIndex;
}
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var data = ds.getCellValue(i, j, curSheetIndex);
if (1 == Ext.ss.common.Mask.shExpMatch_KMP(data.toString(),
cond.toString())) {
var sum = ds.getCellValue(sumMinx + i - minx, sumMiny
+ j - miny, sumSheetIndex);
return sum;
}
}
}
var sum = "";
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var data = ds.getCellValue(i, j, curSheetIndex);
if (Number(data) < Number(cond)) {
sum = ds.getCellValue(sumMinx + i - minx, sumMiny + j
- miny, sumSheetIndex);
}
}
}
if (sum) {
return sum;
}
throw "SS_ERROR_NA";
} else if (Ext.isArray(checkOffset)) {
if (!Ext.isDefined(cond)) {
throw "SS_ERROR_NA";
}
for (var i = 0, len = checkOffset.length; i < len; i++) {
var it = checkOffset[i];
if (it == cond
|| 1 == Ext.ss.common.Mask.shExpMatch_KMP(
it.toString(), cond.toString())) {
return it;
}
}
throw "SS_ERROR_NA";
}
},
iferror : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 != len) {
throw "SS_ERROR_NA";
}
var val = arguments[0], txt = arguments[1];
var txt = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, txt);
if (Ext.isObject(val)) {
var val = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, txt);
if (val == "Infinity" || val == "NaN" || val == "#NUM!"
|| val == "#VALUE!" || val == "#ERROR!" || val == "#REF!") {
return txt;
}
}
if (val === undefined || val === "") {
return 0;
}
if (val == "Infinity" || val == "NaN") {
return txt;
}
return val;
},
pmt : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 > len || len > 5) {
throw "SS_ERROR_NA";
}
var rate = arguments[0], nper = arguments[1], pv = arguments[2], fv = 0, type = 0;
if (4 == len) {
fv = arguments[3];
}
if (5 == len) {
fv = arguments[3];
type = arguments[4];
}
rate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rate);
nper = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, nper);
pv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pv);
fv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, fv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
rate = parseFloat(rate);
nper = parseFloat(nper);
pv = parseFloat(pv);
type = parseFloat(type);
fv = parseFloat(fv);
var pmt1 = Math.round(pv * (rate * Math.pow(1 + rate, nper - type))
/ (Math.pow(1 + rate, nper) - 1) * 100)
/ 100;
var ir = 0;
if (1 == type) {
for (var i = 1; i <= nper; i++) {
ir = ir + Math.pow(rate + 1, i);
}
} else {
ir = 1;
for (var i = 1; i < nper; i++) {
ir = ir + Math.pow(rate + 1, i);
}
}
var pmt2 = Math.round(fv / ir * 100) / 100;
return -(pmt1 + pmt2);
},
rate : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 > len || len > 6) {
throw "SS_ERROR_NA";
}
var nper = arguments[0], pmt = arguments[1], pv = arguments[2], fv = 0, type = 0, guess = 0;
if (4 == len) {
fv = arguments[3];
}
if (5 == len) {
fv = arguments[3];
type = arguments[4];
}
if (6 == len) {
fv = arguments[3];
type = arguments[4];
guess = arguments[5];
}
nper = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, nper);
pmt = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pmt);
pv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pv);
fv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, fv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
guess = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, guess);
nper = parseFloat(nper) ? parseFloat(nper) : 0;
pmt = parseFloat(pmt) ? parseFloat(pmt) : 0;
pv = parseFloat(pv) ? parseFloat(pv) : 0;
type = parseFloat(type) ? parseFloat(type) : 0;
fv = parseFloat(fv) ? parseFloat(fv) : 0;
guess = parseFloat(guess) ? parseFloat(guess) : 0;
var maxrate = 0;
var minrate = Math.abs((pmt * nper + fv + pv) / pv / nper);
if (Math.abs(minrate) > 1) {
return "#NUM!";
}
if (Math.abs(pmt * nper + fv) < Math.abs(pv)) {
maxrate = -Math.abs(minrate);
minrate = -1;
} else {
maxrate = 1;
}
var rate = maxrate;
for (var irup = 1; irup < 50; irup++) {
var ir = 0;
for (var i = 1; i <= nper; i++) {
ir = ir + pmt * Math.pow(rate + 1, i);
}
var trypv = -(ir / Math.pow(rate + 1, nper + 1 - type) + fv
/ Math.pow(rate + 1, nper));
if (pmt > 0) {
if (trypv < pv) {
minrate = rate;
rate = (rate + maxrate) / 2;
if (Math.abs(rate) == 1) {
return "#NUM!";
}
} else if (trypv > pv) {
maxrate = rate;
rate = (rate + minrate) / 2;
if (Math.abs(rate) == 1) {
return "#NUM!";
}
} else if (trypv = pv) {
return Math.round(rate * 10000000) / 10000000;
}
} else {
if (trypv > pv) {
minrate = rate;
rate = (rate + maxrate) / 2;
if (Math.abs(rate) == 1) {
return "#NUM!";
}
} else if (trypv < pv) {
maxrate = rate;
rate = (rate + minrate) / 2;
if (Math.abs(rate) == 1) {
return "#NUM!";
}
} else if (trypv = pv) {
return Math.round(rate * 10000000) / 10000000;
}
}
irup++;
}
return Math.round(rate * 10000000) / 10000000;
},
irr : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len > 2) {
throw "SS_ERROR_NA";
}
var values = arguments[0];
var guess = 0;
var nums = [];
if (2 == len) {
guess = arguments[1];
}
if (Ext.isObject(values)) {
nums = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(ds, x, y,
sheetIndex, values);
} else if (Ext.isString(values)) {
if (values.charAt(0) == "{"
&& values.charAt(values.length - 1) == "}") {
var str = values.slice(1, values.length - 1);
nums = str.split(",");
} else {
throw "SS_ERROR_NA";
}
}
guess = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, guess);
var fsum = 0, zsum = 0;
for (var ii = 0; ii < nums.length; ii++) {
if (!Ext.isNumber(nums[ii])) {
throw "SS_ERROR_VALUE";
}
nums[ii] = parseFloat(nums[ii]);
if (nums[ii] < 0) {
fsum = fsum + nums[ii];
} else {
zsum = zsum + nums[ii];
}
}
guess = parseFloat(guess) ? parseFloat(guess) : 0.1;
var irr = guess, lawirr = 0, maxirr = 0, b = false, ir = 0, lastir = 0, testirr = 0;
for (var i = 0; i < nums.length; i++) {
ir = ir + nums[i] / Math.pow(irr + 1, i);
}
if (ir == 0) {
return Math.round(irr * 10000000) / 10000000;
} else if (ir < 0) {
lastir = ir;
ir = 0;
testirr = irr - guess;
for (var i = 0; i < nums.length; i++) {
ir = ir + nums[i] / Math.pow(testirr + 1, i);
}
if (ir < lastir) {
b = true;
}
do {
ir = 0;
if (b) {
lawirr = irr;
irr = irr + guess;
} else {
maxirr = irr;
irr = irr - guess;
}
for (var i = 0; i < nums.length; i++) {
ir = ir + nums[i] / Math.pow(irr + 1, i);
}
} while (ir < 0);
if (b) {
maxirr = irr;
} else {
lawirr = irr;
}
} else if (ir > 0) {
lastir = ir;
ir = 0;
testirr = irr + guess;
for (var i = 0; i < nums.length; i++) {
ir = ir + nums[i] / Math.pow(testirr + 1, i);
}
if (ir > lastir) {
b = true;
}
do {
ir = 0;
if (b) {
maxirr = irr;
irr = irr - guess;
} else {
lawirr = irr;
irr = irr + guess;
}
for (var i = 0; i < nums.length; i++) {
ir = ir + nums[i] / Math.pow(irr + 1, i);
}
} while (ir > 0);
if (b) {
lawirr = irr;
} else {
maxirr = irr;
}
}
irr = lawirr;
for (var irup = 1; irup < 50; irup++) {
var ir = 0;
for (var i = 0; i < nums.length; i++) {
ir = ir + nums[i] / Math.pow(irr + 1, i);
}
if (ir == 0) {
return Math.round(irr * 10000000) / 10000000;
}
if (b) {
if (ir < 0) {
lawirr = irr;
irr = (maxirr + irr) / 2;
} else {
maxirr = irr;
irr = (irr + lawirr) / 2;
}
} else {
if (ir < 0) {
maxirr = irr;
irr = (irr + lawirr) / 2;
} else {
lawirr = irr;
irr = (maxirr + irr) / 2;
}
}
irup++;
}
return Math.round(irr * 10000000) / 10000000;
},
nper : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 > len || len > 5) {
throw "SS_ERROR_NA";
}
var rate = arguments[0], pmt = arguments[1], pv = arguments[2], fv = 0, type = 0;
if (4 == len) {
fv = arguments[3];
if (fv === undefined || Ext.ss.common.Mask.isEmptyStr(fv)) {
fv = 0;
}
} else {
fv = arguments[3];
if (fv === undefined || Ext.ss.common.Mask.isEmptyStr(fv)) {
fv = 0;
}
type = arguments[4];
if (type === undefined || Ext.ss.common.Mask.isEmptyStr(type)) {
type = 0;
}
}
rate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rate);
pmt = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pmt);
pv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pv);
fv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, fv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
rate = parseFloat(rate) ? parseFloat(rate) : 0;
pmt = parseFloat(pmt) ? parseFloat(pmt) : 0;
pv = parseFloat(pv) ? parseFloat(pv) : 0;
fv = parseFloat(fv) ? parseFloat(fv) : 0;
type = parseFloat(type) ? parseFloat(type) : 0;
var minnper = (-fv - pv) / pmt;
minnper = (-fv / Math.pow(1 + rate, minnper - type) - pv) / pmt;
var maxnper = (-fv - pv * Math.pow(1 + rate, minnper - type)) / pmt;
var nper = maxnper;
for (var irup = 1; irup < 50; irup++) {
var calpmt = (-fv / Math.pow(1 + rate, nper) - pv)
* (rate * Math.pow(1 + rate, nper - type))
/ (Math.pow(1 + rate, nper) - 1);
if (calpmt == pmt) {
return Math.round(calpmt * 10000000) / 10000000;
} else {
if (nper < 0) {
if (Math.abs(calpmt) < Math.abs(pmt)) {
minnper = nper;
nper = (maxnper + nper) / 2;
} else {
maxnper = nper;
nper = (nper + minnper) / 2;
}
} else {
if (Math.abs(calpmt) < Math.abs(pmt)) {
maxnper = nper;
nper = (nper + minnper) / 2;
} else {
minnper = nper;
nper = (maxnper + nper) / 2;
}
}
if (maxnper == minnper) {
throw "SS_ERROR_NUM";
}
}
irup++;
}
return Math.round(nper * 10000000) / 10000000;
},
subtotal : function() {
var args = Array.prototype.slice.call(arguments);
var fun_num = args.shift();
switch (fun_num) {
case 1 :
return this.average.apply(null, args.concat());
break;
case 2 :
return this.count.apply(null, args.concat());
break;
case 3 :
return this.counta.apply(null, args.concat());
break;
case 4 :
return this.max.apply(null, args.concat());
break;
case 5 :
return this.min.apply(null, args.concat());
break;
case 6 :
return this.product.apply(null, args.concat());
break;
case 7 :
return this.sum.apply(null, args.concat());
break;
default :
;
}
},
pv : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 > len || len > 5) {
throw "SS_ERROR_NA";
}
var rate = arguments[0], nper = arguments[1], payment = arguments[2], fv = 0, type = 0;
if (4 == len) {
fv = arguments[3];
if (fv === undefined || Ext.ss.common.Mask.isEmptyStr(fv)) {
fv = 0;
}
}
if (5 == len) {
fv = arguments[3];
if (fv === undefined || Ext.ss.common.Mask.isEmptyStr(fv)) {
fv = 0;
}
type = arguments[4];
if (type === undefined || Ext.ss.common.Mask.isEmptyStr(type)) {
type = 0;
}
}
rate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rate);
nper = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, nper);
payment = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, payment);
fv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, fv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
rate = parseFloat(rate);
nper = parseFloat(nper);
payment = parseFloat(payment);
type = parseFloat(type);
fv = parseFloat(fv);
var ir = 0;
for (var i = 1; i <= nper; i++) {
ir = ir + payment * Math.pow(rate + 1, i);
}
var pv = -(ir / Math.pow(rate + 1, nper + 1 - type) + fv
/ Math.pow(rate + 1, nper));
return Math.round(pv * 10000) / 10000;
},
npv : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len < 2) {
throw "SS_ERROR_NA";
}
var npv = 0;
var rate = arguments[0];
rate = ""
+ Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, rate);
rate = Ext.ss.common.Helper.convertPercent2num(rate);
var rate = Number(rate);
if (!Ext.isNumber(rate)) {
throw "SS_ERROR_VALUE";
}
for (var k = 1; k < len; k++) {
var posOffset = arguments[k];
var num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, posOffset);
npv = npv + num / Math.pow(1 + rate, k);
}
return Math.round(npv * 10000) / 10000;
},
fv : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 > len || len > 5) {
throw "SS_ERROR_NA";
}
var rate = arguments[0], nper = arguments[1], payment = arguments[2], pv = 0, type = 0;
if (4 == len) {
pv = arguments[3];
if (pv === undefined || Ext.ss.common.Mask.isEmptyStr(pv)) {
pv = 0;
}
}
if (5 == len) {
pv = arguments[3];
if (pv === undefined || Ext.ss.common.Mask.isEmptyStr(pv)) {
pv = 0;
}
type = arguments[4];
if (type === undefined || Ext.ss.common.Mask.isEmptyStr(type)) {
type = 0;
}
}
rate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rate);
nper = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, nper);
payment = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, payment);
pv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
rate = parseFloat(rate);
nper = parseFloat(nper);
payment = parseFloat(payment);
type = parseFloat(type);
pv = parseFloat(pv);
var ir = 0;
for (var i = 1; i <= nper; i++) {
ir = ir + payment * Math.pow(rate + 1, i - 1 + type);
}
var fv = -(ir + pv * Math.pow(rate + 1, nper));
return Math.round(fv * 100) / 100;
},
vlookup : function(conditionOffset, checkOffset, ix, presion, sheetIndex,
x, y, ds) {
if (7 == arguments.length) {
ds = y;
y = x;
x = sheetIndex;
sheetIndex = presion;
}
var cond = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, conditionOffset);
if (Ext.isObject(checkOffset)) {
var minOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.ox,
oy : checkOffset.oy
};
var maxOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.oex,
oy : checkOffset.oey
};
var minx = minOffset.ox + x, miny = minOffset.oy + y, maxx = maxOffset.ox
+ x, maxy = maxOffset.oy + y;
ds.fireEvent("project", ds, {
x : x,
y : y
}, minOffset, maxOffset);
if (!Ext.isDefined(cond)) {
throw "SS_ERROR_NA";
}
ds.checkSheetIndexValid(minOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(minOffset.sheetIndex)) {
curSheetIndex = minOffset.sheetIndex;
}
for (var i = minx; i <= maxx; i++) {
var data = ds.getCellValue(i, miny, curSheetIndex);
if (1 == Ext.ss.common.Mask.shExpMatch_KMP(data.toString(),
cond.toString())) {
var sum = ds.getCellValue(i, miny + ix - 1, curSheetIndex);
return sum;
}
}
throw "SS_ERROR_NA";
}
},
hlookup : function(conditionOffset, checkOffset, iy, presion, sheetIndex,
x, y, ds) {
if (7 == arguments.length) {
ds = y;
y = x;
x = sheetIndex;
sheetIndex = presion;
}
var cond = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, conditionOffset);
if (Ext.isObject(checkOffset)) {
var minOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.ox,
oy : checkOffset.oy
};
var maxOffset = {
sheetIndex : checkOffset.sheetIndex,
ox : checkOffset.oex,
oy : checkOffset.oey
};
var minx = minOffset.ox + x, miny = minOffset.oy + y, maxx = maxOffset.ox
+ x, maxy = maxOffset.oy + y;
ds.fireEvent("project", ds, {
x : x,
y : y
}, minOffset, maxOffset);
if (!Ext.isDefined(cond)) {
throw "SS_ERROR_NA";
}
ds.checkSheetIndexValid(minOffset.sheetIndex);
var curSheetIndex = sheetIndex;
if (false != Ext.type(minOffset.sheetIndex)) {
curSheetIndex = minOffset.sheetIndex;
}
for (var i = miny; i <= maxy; i++) {
var data = ds.getCellValue(minx, i, curSheetIndex);
if (1 == Ext.ss.common.Mask.shExpMatch_KMP(data.toString(),
cond.toString())) {
var sum = ds.getCellValue(miny + iy - 1, i, curSheetIndex);
return sum;
}
}
throw "SS_ERROR_NA";
}
},
match : function(lookup_value, lookup_array, match_type, sheetIndex, x, y,
ds) {
if (6 == arguments.length) {
ds = y;
y = x;
x = sheetIndex;
sheetIndex = match_type;
match_type = 1;
}
var lookarray = [];
var cond = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, lookup_value);
if (Ext.isObject(lookup_array)) {
lookarray = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds, x, y,
sheetIndex, lookup_array);
} else {
lookup_array = lookup_array.toString();
lookup_array = lookup_array.substring(1, lookup_array.length - 1);
lookarray = lookup_array.split(",");
}
var result = 0;
for (var i = 0; i < lookarray.length; i++) {
if (match_type == "0") {
if (lookarray[i].toString() == cond) {
result = i + 1;
break;
}
} else if (match_type == "1") {
if (lookarray[i].toString() <= cond) {
result = i + 1;
} else {
break;
}
} else if (match_type == "-1") {
if (lookarray[i].toString() >= cond) {
result = i + 1;
} else {
break;
}
}
}
if (result == 0) {
throw "SS_ERROR_NA";
} else {
return result;
}
},
address : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
var row_num, column_num, abs_num = 1, a1 = true, sheet_text = "";
if (len < 2 || len > 5) {
throw "SS_ERROR_NA";
}
row_num = arguments[0];
column_num = arguments[1];
if (len > 2) {
abs_num = arguments[2];
}
if (len > 3) {
a1 = arguments[3];
}
if (len > 4) {
sheet_text = arguments[4];
}
if (row_num == true) {
row_num = 1;
}
if (column_num == true) {
column_num = 1;
}
if (abs_num == true) {
abs_num = 1;
}
row_num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, row_num);
column_num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, column_num);
abs_num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, abs_num);
a1 = Ext.ss.common.FunctionBoxHelper
.getObjVal(ds, x, y, sheetIndex, a1);
if (undefined == a1 || a1 == "" || a1 == null) {
a1 = true;
} else if (typeof a1 == "string") {
var lower = a1.toLowerCase();
if (lower == "false" || lower == "true") {
a1 = eval(lower);
} else {
throw "SS_ERROR_VALUE";
}
}
var result = "";
if (!/^[1-9]+$/.test(row_num) || !/^[1-9]+$/.test(column_num)
|| !/^[1-9]+$/.test(abs_num)) {
throw "SS_ERROR_VALUE";
}
var scolumn = "";
if (column_num > 702 || column_num < 1) {
throw "SS_ERROR_VALUE";
} else if (column_num < 27) {
scolumn = String.fromCharCode("A".charCodeAt(0) + column_num - 1);
} else {
scolumn = String.fromCharCode("A".charCodeAt(0)
+ Math.floor(column_num / 26) - 1)
+ String.fromCharCode("A".charCodeAt(0) + column_num % 26
- 1);
}
if (sheet_text) {
sheet_text = "\"" + sheet_text + "\"!";
}
if (a1) {
if (abs_num == 1) {
result = sheet_text + "$" + scolumn + "$" + row_num;
} else if (abs_num == 2) {
result = sheet_text + scolumn + "$" + row_num;
} else if (abs_num == 3) {
result = sheet_text + "$" + scolumn + row_num;
} else if (abs_num == 4) {
result = sheet_text + scolumn + "" + row_num;
} else {
throw "SS_ERROR_VALUE";
}
} else {
result = sheet_text + "R" + row_num + "C" + column_num;
}
return result;
},
average : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var res = 0, count = 0;
var argsAllNaN = true;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var numarray = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds,
x, y, sheetIndex, posOffset);
count += numarray.length;
for (var i = 0; i < numarray.length; i++) {
var num = numarray[i];
Ext.ss.common.FunctionBoxHelper.checkErrorCode(num);
if (Ext.ss.common.Mask.isNumber(num)) {
res += Ext.ss.FunctionBox.num(num, 0);
argsAllNaN = false;
} else {
count = count - 1;
}
}
} else {
if (len == 1 && Ext.ss.common.Mask.isEmptyStr(posOffset)) {
throw "SS_ERROR_VALUE";
}
var num = Number(posOffset);
if (Ext.isNumber(num)) {
res += num;
count++;
argsAllNaN = false;
}
}
}
if (argsAllNaN) {
throw "SS_ERROR_INFINITY";
}
return res / count * 100 / 100;
},
min : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len == 0) {
throw "SS_ERROR_NA";
}
var res = false;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var numarray = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds,
x, y, sheetIndex, posOffset);
for (var i = 0; i < numarray.length; i++) {
if (numarray[i] == undefined || numarray[i] == "") {
break;
}
Ext.ss.common.FunctionBoxHelper.checkErrorCode(numarray[i]);
var num = Number(numarray[i]);
if (Ext.isNumber(num)) {
if (res == false || res > num) {
res = num;
}
}
}
} else {
if (posOffset == "" || posOffset == null) {
throw "SS_ERROR_VALUE";
}
Ext.ss.common.FunctionBoxHelper.checkErrorCode(posOffset);
var num = Number(posOffset);
if (Ext.isNumber(num)) {
if (res == false || res > num) {
res = num;
}
} else {
throw "SS_ERROR_VALUE";
}
}
}
if (res == false) {
res = 0;
}
return res;
},
max : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (0 == len) {
throw "SS_ERROR_NA";
}
var res = false;
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
var numarray = Ext.ss.common.FunctionBoxHelper.getRangeVal(ds,
x, y, sheetIndex, posOffset);
for (var i = 0; i < numarray.length; i++) {
if (numarray[i] == undefined || numarray[i] == "") {
break;
}
Ext.ss.common.FunctionBoxHelper.checkErrorCode(numarray[i]);
var num = Ext.ss.FunctionBox.num(numarray[i], 0);
if (Ext.isNumber(num)) {
if (res == false || res < num) {
res = num;
}
}
}
} else {
if (posOffset == "" || posOffset == null) {
throw "SS_ERROR_VALUE";
}
Ext.ss.common.FunctionBoxHelper.checkErrorCode(posOffset);
var num = Number(posOffset);
if (Ext.isNumber(num)) {
if (res == false || res < num) {
res = num;
}
} else {
throw "SS_ERROR_VALUE";
}
}
}
if (res == false) {
res = 0;
}
return res;
},
getCellByOffset : function(ox, oy, sheetIndex, x, y, ds) {
if (5 == arguments.length) {
ds = y;
y = x;
x = sheetIndex;
sheetIndex = oy;
if (ox.ox != ox.oex || ox.oy != ox.oey) {
throw "SS_ERROR_VALUE";
return;
}
oy = ox.oy;
if (false !== Ext.type(ox.sheetIndex)) {
sheetIndex = ox.sheetIndex;
}
ox = ox.ox;
if (!(0 <= sheetIndex || undefined == sheetIndex
|| null == sheetIndex || "" == sheetIndex)) {
throw "#PARAM_ERROR";
}
if (!Ext.isNumber(sheetIndex)) {
sheetIndex = ds.activeSheet;
}
}
if (false == Ext.type(sheetIndex) || "" === sheetIndex) {
sheetIndex = ds.activeSheet;
}
var pos = {
x : x,
y : y
};
x += ox;
y += oy;
var r = ds.getCellValue(x, y, sheetIndex);
var date = ds.transfer2Date(r);
var tmp = ds.getCellObj(x, y, sheetIndex);
var sheetObj = ds.sheets[sheetIndex];
var colcss = sheetObj.colSetting[y] || {};
var rowcss = sheetObj.rowSetting[x] || {};
var wholecss = sheetObj.wholeSetting || {};
var fm = ds.getAttribute(tmp, rowcss, colcss, wholecss, "format");
if (Ext.isDate(date)) {
r = date.format(ds.defaultDateFormat);
} else if (Ext.isString(r)) {
if ("text" != fm) {
var last = r.charAt(r.length - 1);
if ("%" == last) {
var rest = r.slice(0, r.length - 1);
var rest = Number(rest);
if (NaN != rest) {
r = rest / 100;
}
}
}
}
var num = Number(r);
if (Ext.isNumber(num)) {
r = num;
} else if (false == Ext.type(r) || "" === r) {
r = 0;
}
ds.fireEvent("project", ds, pos, {
ox : ox,
oy : oy
}, {
ox : ox,
oy : oy
});
if ("true" == r || "TRUE" == r || "True" == r) {
r = true;
}
if ("false" == r || "FALSE" == r || "False" == r) {
r = false;
}
return r;
},
condition : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 3) {
throw "SS_ERROR_NA";
}
var cond = arguments[0], trueVal = arguments[1], falseVal = arguments[2];
if (cond && "FALSE" !== cond && "false" !== cond) {
if ("true" == trueVal || "TRUE" == trueVal || "True" == trueVal) {
return TRUE;
}
if ("false" == trueVal || "FALSE" == trueVal || "False" == trueVal) {
return FALSE;
} else {
return trueVal;
}
} else {
if ("true" == trueVal || "TRUE" == trueVal || "True" == trueVal) {
return TRUE;
}
if ("false" == trueVal || "FALSE" == trueVal || "False" == trueVal) {
return FALSE;
} else {
return falseVal;
}
}
},
day : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
if (len != 5) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
posOffset = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (Ext.isNumber(Number(posOffset))) {
var baseDate = new Date("1900-01-01");
if (posOffset == "") {
throw "SS_ERROR_NUM";
}
baseDate.setDate(baseDate.getDate() + Number(posOffset) - 2);
return baseDate.getDate();
} else if (Ext.isDate(new Date(posOffset))) {
var baseDate = new Date(posOffset);
return baseDate.getDate();
} else {
throw "SS_ERROR_VALUE";
}
},
large : function() {
var maxDigNum = 0;
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 2) {
throw "SS_ERROR_NA";
}
var argsAry = [];
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
argsAry[k] = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(ds,
x, y, sheetIndex, posOffset);
} else {
argsAry[k] = posOffset;
}
}
if (Ext.isBoolean(argsAry[0]) && argsAry[1] > 0) {
return Number(argsAry[0]);
}
if (!argsAry[0].length) {
throw "SS_ERROR_NUM";
}
var arg2 = Number(argsAry[1]);
if (!Ext.isNumber(arg2)) {
throw "SS_ERROR_VALUE";
}
var tmp = [], ac = argsAry[0];
for (var i = 0; i < ac.length; i++) {
if (Ext.isNumber(ac[i])) {
tmp.push(ac[i]);
}
}
var len = tmp.length;
for (var m = 0; m < len - 1; m++) {
if (!Ext.isNumber(tmp[m])) {
throw "SS_ERROR_VALUE";
}
for (var n = m + 1; n < len; n++) {
if (tmp[m] < tmp[n]) {
var tp = tmp[m];
tmp[m] = tmp[n];
tmp[n] = tp;
}
}
}
return tmp[arg2 - 1];
},
small : function() {
var maxDigNum = 0;
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 2) {
throw "SS_ERROR_NA";
}
var argsAry = [];
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (Ext.isObject(posOffset)) {
argsAry[k] = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(ds,
x, y, sheetIndex, posOffset);
} else {
argsAry[k] = posOffset;
}
}
if (Ext.isBoolean(argsAry[0]) && argsAry[1] > 0) {
return Number(argsAry[0]);
}
if (!argsAry[0].length) {
throw "SS_ERROR_NUM";
}
var arg2 = Number(argsAry[1]);
if (!Ext.isNumber(arg2)) {
throw "SS_ERROR_VALUE";
}
var tmp = [], ac = argsAry[0];
for (var i = 0; i < ac.length; i++) {
if (Ext.isNumber(ac[i])) {
tmp.push(ac[i]);
}
}
var len = tmp.length;
for (var m = 0; m < len - 1; m++) {
for (var n = m + 1; n < len; n++) {
if (tmp[m] > tmp[n]) {
var tp = tmp[m];
tmp[m] = tmp[n];
tmp[n] = tp;
}
}
}
return tmp[arg2 - 1];
},
time : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 3) {
throw "SS_ERROR_NA";
}
var argsAry = [];
for (var k = 0; k < len; k++) {
var posOffset = arguments[k];
if (!posOffset) {
posOffset = 0;
}
argsAry[k] = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (argsAry[k] == true) {
argsAry[k] = 1;
}
if (argsAry[k] == false) {
argsAry[k] = 0;
}
}
var hourPart = Number(argsAry[0]);
var minutePart = Number(argsAry[1]);
var secondPart = Number(argsAry[2]);
if (Ext.isNumber(hourPart) && Ext.isNumber(minutePart)
&& Ext.isNumber(secondPart) && hourPart < 32768
&& minutePart < 32768 && secondPart < 32768) {
minutePart += Math.floor(secondPart / 60);
hourPart = Math.floor(hourPart);
var sumMin = minutePart + hourPart * 60;
var hsm = sumMin % 60;
hourPart = (sumMin - hsm) / 60;
minutePart = hsm % 60;
var hm = hourPart % 24;
var zone = "AM";
if (hm > 11) {
zone = "PM";
}
hourPart = hm % 12;
if (hourPart == 0) {
hourPart = 12;
}
minutePart = Math.floor(minutePart);
if (minutePart < 10) {
minutePart = "0" + minutePart;
}
secondPart = Math.floor(secondPart % 60);
if (secondPart < 10) {
secondPart = "0" + secondPart;
}
return hourPart + ":" + minutePart + ":" + secondPart + " " + zone;
} else {
throw "SS_ERROR_NUM";
}
},
hour : function() {
var maxDigNum = 0;
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
posOffset = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (Ext.isBoolean(posOffset)) {
return 0;
}
var posTmp = Number(posOffset);
if (Ext.isNumber(posTmp) && posTmp > 0) {
posTmp = posTmp.toString();
var as = posTmp.match(/(\.\d+)$/);
if (as) {
var sumSecond = Number(as[1]) * 1440;
return (sumSecond - sumSecond % 60) / 60;
} else {
return 0;
}
} else if (posOffset.indexOf(".") > -1) {
throw "SS_ERROR_VALUE";
} else {
if (/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i
.test(posOffset)) {
var date = posOffset.replace(
/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i, "");
date = date.replace(/\s+/g, "");
var pm = posOffset
.match(/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i);
if (!date) {
if (!Ext.isDate(new Date(date))) {
throw "SS_ERROR_VALUE";
}
}
var h = Number(pm[1]);
var m = Number(pm[2]);
var s = Number(pm[3]);
if (pm[4]) {
if (m > -1 && m < 60 && s > -1 && s < 60 && h > -1
&& h < 13) {
if (/pm/i.test(pm[4])) {
if (h == 12) {
return 12;
} else {
return h + 12;
}
} else {
if (h == 12) {
return 0;
} else {
return h;
}
}
} else {
throw "SS_ERROR_VALUE";
}
} else {
if (h > 24) {
return h % 12;
} else {
return h;
}
}
} else if (/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i.test(posOffset)) {
var date = posOffset.replace(
/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i, "");
date = date.replace(/\s+/g, "");
var pm = posOffset
.match(/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i);
if (!date) {
if (!Ext.isDate(new Date(date))) {
throw "SS_ERROR_VALUE";
}
}
var h = Number(pm[1]);
var m = Number(pm[2]);
if (pm[3]) {
if (m > -1 && m < 60 && h > -1 && h < 13) {
if (/pm/i.test(pm[3])) {
if (h == 12) {
return 12;
} else {
return h + 12;
}
} else {
if (h == 12) {
return 0;
} else {
return h;
}
}
} else {
throw "SS_ERROR_VALUE";
}
} else {
if (h > 24) {
return h % 12;
} else {
return h;
}
}
}
}
},
minute : function() {
var maxDigNum = 0;
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
posOffset = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (Ext.isBoolean(posOffset)) {
return 0;
}
var posTmp = Number(posOffset);
if (Ext.isNumber(posTmp) && posTmp > 0) {
posTmp = posTmp.toString();
if (posTmp.indexOf(".") > -1) {
return Math.floor(Number(posTmp) * 1440 % 60);
} else {
return 0;
}
} else if (posOffset.indexOf(".") > -1) {
throw "SS_ERROR_VALUE";
} else {
if (/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i
.test(posOffset)) {
var date = posOffset.replace(
/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i, "");
date = date.replace(/\s+/g, "");
var pm = posOffset
.match(/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i);
if (date) {
if (!Ext.isDate(new Date(date))) {
throw "SS_ERROR_VALUE";
}
}
var h = Number(pm[1]);
var m = Number(pm[2]);
var s = Number(pm[3]);
if (m > -1 && m < 60 && s > -1 && s < 60) {
if (pm[4] && (h < 0 || h > 12)) {
throw "SS_ERROR_VALUE";
}
return m;
} else {
throw "SS_ERROR_VALUE";
}
} else if (/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i.test(posOffset)) {
var date = posOffset.replace(
/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i, "");
date = date.replace(/\s+/g, "");
var pm = posOffset
.match(/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i);
if (date) {
if (!Ext.isDate(new Date(date))) {
throw "SS_ERROR_VALUE";
}
}
var h = Number(pm[1]);
var m = Number(pm[2]);
if (m > -1 && m < 60) {
if (pm[3] && (h < 0 || h > 12)) {
throw "SS_ERROR_VALUE";
}
return m;
} else {
throw "SS_ERROR_VALUE";
}
}
}
},
second : function() {
var maxDigNum = 0;
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
posOffset = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
if (Ext.isBoolean(posOffset)) {
return 0;
}
var posTmp = Number(posOffset);
if (Ext.isNumber(posTmp) && posTmp > 0) {
posTmp = posTmp.toString();
if (posTmp.indexOf(".") > -1) {
var mpos = Number(posTmp) * 1440 % 60;
var s = Math.floor((mpos - Math.floor(mpos)) * 60);
return s;
} else {
return 0;
}
} else if (posOffset.indexOf(".") > -1) {
throw "SS_ERROR_VALUE";
} else {
if (/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i
.test(posOffset)) {
var date = posOffset.replace(
/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i, "");
date = date.replace(/\s+/g, "");
var pm = posOffset
.match(/(\d+)\s*:\s*(\d+)\s*:\s*(\d+)(\s+[P|A]M){0,1}/i);
if (date) {
if (!Ext.isDate(new Date(date))) {
throw "SS_ERROR_VALUE";
}
}
var h = Number(pm[1]);
var m = Number(pm[2]);
var s = Number(pm[3]);
if (m > -1 && m < 60 && s > -1 && s < 60) {
if (pm[4] && (h < 0 || h > 12)) {
throw "SS_ERROR_VALUE";
}
return s;
} else {
throw "SS_ERROR_VALUE";
}
} else if (/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i.test(posOffset)) {
var date = posOffset.replace(
/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i, "");
date = date.replace(/\s+/g, "");
var pm = posOffset
.match(/(\d+)\s*:\s*(\d+)\s*(\s+[P|A]M){0,1}$/i);
if (date) {
if (!Ext.isDate(new Date(date))) {
throw "SS_ERROR_VALUE";
}
}
var h = Number(pm[1]);
var m = Number(pm[2]);
if (m > -1 && m < 60) {
if (pm[3] && (h < 0 || h > 12)) {
throw "SS_ERROR_VALUE";
}
return 0;
} else {
throw "SS_ERROR_VALUE";
}
}
}
},
days360 : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (2 == len) {
var astart = arguments[0];
var aend = arguments[1];
var method = false;
} else if (3 == len) {
var astart = arguments[0];
var aend = arguments[1];
var method = arguments[2];
} else {
throw "SS_ERROR_NA";
}
var startdate = Ext.ss.common.FunctionBoxHelper.getDateObjValue(ds, x,
y, sheetIndex, astart);
var enddate = Ext.ss.common.FunctionBoxHelper.getDateObjValue(ds, x, y,
sheetIndex, aend);
var yeardiff = 0, monthdiff = 0, daydiff = 0, startday = 0, endday = 0;
yeardiff = (enddate.getYear() - startdate.getYear()) * 360;
monthdiff = (enddate.getMonth() - startdate.getMonth()) * 30;
if (method) {
if (startdate.getDate() == Ext.ss.common.Helper
.getlastday(startdate)) {
startday = 30;
} else {
startday = startdate.getDate();
}
if (enddate.getDate() == Ext.ss.common.Helper.getlastday(enddate)) {
endday = 30;
} else {
endday = enddate.getDate();
}
daydiff = endday - startday;
} else {
if (startdate.getDate() == Ext.ss.common.Helper
.getlastday(startdate)) {
startday = 30;
} else {
startday = startdate.getDate();
}
if (enddate.getDate() == Ext.ss.common.Helper.getlastday(enddate)
&& startday < 30) {
monthdiff = monthdiff + 30;
endday = 1;
} else if (enddate.getDate() == Ext.ss.common.Helper
.getlastday(enddate)
&& startday >= 30) {
endday = 30;
} else {
endday = enddate.getDate();
}
daydiff = endday - startday;
}
return yeardiff + monthdiff + daydiff;
},
seriessum : function(xx, n, m, values, sheetIndex, x, y, ds) {
if (8 == arguments.length) {
xx = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, xx);
if (!Ext.isNumber(xx)) {
return "#VALUE";
}
n = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, n);
if (!Ext.isNumber(n)) {
return "#VALUE";
}
m = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, m);
if (!Ext.isNumber(m)) {
return "#VALUE";
}
var coefs = [];
if (Ext.isObject(values)) {
coefs = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(ds, x,
y, sheetIndex, values);
} else {
coefs.push(Number(values));
}
var result = 0;
for (i = 0; i < coefs.length; i++) {
if (!Ext.isNumber(coefs[i])) {
throw "SS_ERROR_VALUE";
}
result = result + coefs[i] * Math.pow(xx, n + i * m);
}
return result;
} else {
throw "SS_ERROR_NA";
}
},
db : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (4 > len || 5 < len) {
throw "SS_ERROR_NA";
}
var cost, salvage, life, period, month;
cost = arguments[0];
salvage = arguments[1];
life = arguments[2];
period = arguments[3];
if (4 == len) {
month = 12;
}
if (5 == len) {
month = arguments[4];
}
cost = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, cost);
salvage = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, salvage);
life = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, life);
period = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, period);
month = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, month);
var rate = Math.round((1 - Math.pow(salvage / cost, 1 / life)) * 1000)
/ 1000;
var persum = 0, db = 0;
for (var i = 1; i <= period; i++) {
if (i == 1) {
db = persum = cost * rate * month / 12;
} else if (i == life) {
db = (cost - persum) * rate * (12 - month) / 12;
} else {
db = (cost - persum) * rate;
persum = persum + db;
}
}
return Math.round(db * 10000) / 10000;
},
ddb : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (4 > len || 5 < len) {
throw "SS_ERROR_NA";
}
var cost, salvage, life, period, factor;
cost = arguments[0];
salvage = arguments[1];
life = arguments[2];
period = arguments[3];
if (4 == len) {
factor = 2;
}
if (5 == len) {
factor = arguments[4];
}
cost = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, cost);
salvage = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, salvage);
life = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, life);
period = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, period);
factor = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, factor);
var persum = 0, db = 0;
for (var i = 1; i <= period; i++) {
db = Math.min((cost - persum) * factor / life, cost - salvage
- persum);
persum = persum + db;
}
return Math.round(db * 100) / 100;
},
vdb : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
len -= 4;
if (5 > len || 7 < len) {
throw "SS_ERROR_NA";
}
var cost, salvage, life, startperiod, endperiod, factor, noswitch = false;
cost = arguments[0];
salvage = arguments[1];
life = arguments[2];
startperiod = arguments[3];
endperiod = arguments[4];
if (5 == len) {
factor = 2;
} else if (6 == len) {
factor = arguments[5];
} else if (7 == len) {
factor = arguments[5];
noswitch = arguments[6];
}
cost = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, cost);
salvage = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, salvage);
life = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, life);
startperiod = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, startperiod);
endperiod = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, endperiod);
factor = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, factor);
var persum = 0, db = 0, persum2 = 0;
for (var i = 1; i <= startperiod; i++) {
db = Math.min((cost - persum) * factor / life, cost - salvage
- persum);
persum = persum + db;
}
for (var i = 1; i <= endperiod; i++) {
db = Math.min((cost - persum2) * factor / life, cost - salvage
- persum2);
persum2 = persum2 + db;
}
var vdb = persum2 - persum;
return Math.round(vdb * 10000) / 10000;
},
mirr : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 != len) {
throw "SS_ERROR_NA";
}
var values = arguments[0];
var frate = arguments[1];
var rrate = arguments[2];
var nums = [], positive = [], negative = [];
if (Ext.isObject(values)) {
nums = Ext.ss.common.FunctionBoxHelper.getNumRangeVal(ds, x, y,
sheetIndex, values);
} else if (Ext.isString(values)) {
if (values.charAt(0) == "{"
&& values.charAt(values.length - 1) == "}") {
var str = values.slice(1, values.length - 1);
nums = str.split(",");
} else {
throw "SS_ERROR_NA";
}
}
frate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, frate);
rrate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rrate);
for (var ii = 0; ii < nums.length; ii++) {
if (!Ext.isNumber(nums[ii])) {
throw "SS_ERROR_VALUE";
}
if (nums[ii] < 0) {
positive[positive.length] = 0;
negative[negative.length] = nums[ii];
} else {
negative[negative.length] = 0;
positive[positive.length] = nums[ii];
}
}
frate = parseFloat(frate) ? parseFloat(frate) : 0;
rrate = parseFloat(rrate) ? parseFloat(rrate) : 0;
var fnpv = Ext.ss.common.FunctionBoxHelper.getnpv(frate, negative, ds,
x, y, sheetIndex);
var rnpv = Ext.ss.common.FunctionBoxHelper.getnpv(rrate, positive, ds,
x, y, sheetIndex);
var mirr = Math.pow(-rnpv * Math.pow(1 + rrate, nums.length)
/ (fnpv * (1 + frate)), 1 / (nums.length - 1))
- 1;
return Math.round(mirr * 10000000) / 10000000;
},
sln : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (3 != len) {
throw "SS_ERROR_NA";
}
var cost = arguments[0];
var salvage = arguments[1];
var life = arguments[2];
cost = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, cost);
salvage = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, salvage);
life = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, life);
var sln = (cost - salvage) / life;
return Math.round(sln * 10000) / 10000;
},
syd : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (4 != len) {
throw "SS_ERROR_NA";
}
var cost = arguments[0];
var salvage = arguments[1];
var life = arguments[2];
var per = arguments[3];
cost = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, cost);
salvage = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, salvage);
life = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, life);
per = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, per);
var syd = (cost - salvage) * (life - per + 1) * 2 / (life * (life + 1));
return Math.round(syd * 10000) / 10000;
},
ppmt : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (4 > len || len > 6) {
throw "SS_ERROR_NA";
}
var rate = arguments[0], per = arguments[1], nper = arguments[2], pv = arguments[3], fv = 0, type = 0;
if (5 == len) {
fv = arguments[4];
}
if (6 == len) {
fv = arguments[4];
type = arguments[5];
}
rate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rate);
per = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, per);
nper = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, nper);
pv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pv);
fv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, fv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
rate = parseFloat(rate);
nper = parseFloat(nper);
per = parseFloat(per);
pv = parseFloat(pv);
type = parseFloat(type);
fv = parseFloat(fv);
pv = pv + fv;
var ppmt = Math.round(pv * (rate * Math.pow(1 + rate, per - 1 - type))
/ (Math.pow(1 + rate, nper) - 1) * 10000)
/ 10000;
return -ppmt;
},
ipmt : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (4 > len || len > 6) {
throw "SS_ERROR_NA";
}
var rate = arguments[0], per = arguments[1], nper = arguments[2], pv = arguments[3], fv = 0, type = 0;
if (5 == len) {
fv = arguments[4];
}
if (6 == len) {
fv = arguments[4];
type = arguments[5];
}
rate = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, rate);
per = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, per);
nper = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, nper);
pv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, pv);
fv = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, fv);
type = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, type);
rate = parseFloat(rate);
nper = parseFloat(nper);
per = parseFloat(per);
pv = parseFloat(pv);
type = parseFloat(type);
fv = parseFloat(fv);
pv = pv + fv;
var ppmt = -Math.round(pv * (rate * Math.pow(1 + rate, per - 1 - type))
/ (Math.pow(1 + rate, nper) - 1) * 100)
/ 100;
var pmt1 = Math.round(pv * (rate * Math.pow(1 + rate, nper - type))
/ (Math.pow(1 + rate, nper) - 1) * 100)
/ 100;
var ir = 0;
if (1 == type) {
for (var i = 1; i <= nper; i++) {
ir = ir + Math.pow(rate + 1, i);
}
} else {
ir = 1;
for (var i = 1; i < nper; i++) {
ir = ir + Math.pow(rate + 1, i);
}
}
var pmt2 = Math.round(fv / ir);
var pmt = -(pmt1 + pmt2);
return (pmt - ppmt) * 10000 / 10000;
},
asc : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
var str = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
var asc = (new String(str.substr(0, 1))).charCodeAt(0);
return asc;
},
'char' : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
var asc = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, posOffset);
var chr = String.fromCharCode(asc);
return chr;
},
clean : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset = arguments[0];
var text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset);
text = new String(text);
var str = "";
for (var i = 0; i < text.length; i++) {
var s = text.substr(i, 1);
var asc = (new String(s)).charCodeAt(0);
if (asc > 31) {
str = str + s;
}
}
return str;
},
code : function() {
return this.asc.apply(null, arguments);
},
dollar : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len < 1 || len > 2) {
throw "SS_ERROR_NA";
}
var decimals = 2;
if (len == 2) {
decimals = arguments[1];
}
var posOffset = arguments[0];
var num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, posOffset);
decimals = Number(decimals);
if (!Ext.isNumber(decimals) || !Ext.isNumber(num)) {
throw "SS_ERROR_VALUE";
}
decimals = Math.floor(decimals);
num = Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals);
var str = "";
var patten = [];
var snum = num + "";
var asnum = snum.split(".");
var decs = "";
if (asnum.length > 1) {
decs = asnum[1] + "";
}
if (decs != "" || decimals > 0) {
patten.push(".");
}
for (var i = 0; i < decimals; i++) {
if (i < decs.length) {
patten.push(decs.substr(i, 1));
} else {
patten.push("0");
}
}
var fm = patten.join("");
str = "$" + asnum[0] + fm;
return str;
},
exact : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 2) {
throw "SS_ERROR_NA";
}
var posOffset1 = arguments[0];
var posOffset2 = arguments[1];
var text1 = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset1);
var text2 = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset2);
if (text1 == text2) {
return true;
} else {
return false;
}
},
fixed : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len < 2 || len > 3) {
throw "SS_ERROR_NA";
}
var nocommas = false;
if (len == 3) {
nocommas = arguments[2];
}
var posOffset1 = arguments[0];
var posOffset2 = arguments[1];
var num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, posOffset1);
var decimals = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, posOffset2);
if (!Ext.isNumber(decimals) || !Ext.isNumber(num)) {
throw "SS_ERROR_VALUE";
}
decimals = Math.floor(decimals);
var str = [];
num = Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals);
if (nocommas) {
if (nocommas == "true" || nocommas) {
nocommas = true;
} else {
nocommas = false;
}
}
var text = new String(num);
if (!nocommas) {
var idx = text.length - text.indexOf(".");
for (var i = text.length - 1; i >= 0; i--) {
var s = text.substr(i, 1);
str.unshift(s);
var p1 = text.length - i;
var p2 = text.length - i - idx;
if (p1 > idx && (p2 - idx) % 3 == 1 && i > 0) {
str.unshift(",");
}
}
return str.join("");
} else {
return text;
}
},
proper : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset1 = arguments[0];
var text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset1);
var preisword = false, isword = false;
var arr = [];
for (var i = 0; i < text.length; i++) {
var s = text.substr(i, 1);
if ((new String(s)).charCodeAt(0) <= 90
&& (new String(s)).charCodeAt(0) >= 65
|| (new String(s)).charCodeAt(0) <= 122
&& (new String(s)).charCodeAt(0) >= 97) {
isword = true;
} else {
isword = false;
}
if (!preisword && isword) {
arr.push(s.toUpperCase());
} else {
arr.push(s.toLowerCase());
}
preisword = isword;
}
return arr.join("");
},
replace : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 4) {
throw "SS_ERROR_NA";
}
var posOffset1 = arguments[0];
var posOffset2 = arguments[1];
var posOffset3 = arguments[2];
var posOffset4 = arguments[3];
var old_text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset1);
var start_num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x,
y, sheetIndex, posOffset2);
var num_chars = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x,
y, sheetIndex, posOffset3);
var new_text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset4);
var str = old_text.substr(0, start_num - 1) + new_text
+ old_text.substr(start_num + num_chars - 1, old_text.length);
return str;
},
search : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (2 == len || 3 == len) {
var source = arguments[0], target = arguments[1], start = 2 == len
? 0
: arguments[2];
source = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, source);
target = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, target);
start = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds, x, y,
sheetIndex, start);
start = Number(start);
if (!Ext.isNumber(start)) {
throw "SS_ERROR_VALUE";
}
if ((Ext.isNumber(source) || Ext.isString(source))
&& (Ext.isNumber(target) || Ext.isString(target))) {
source = source.toString();
source = source.toLowerCase();
target = target.toString();
target = target.toLowerCase();
if (0 < start) {
start = start - 1;
target = target.slice(start, target.length);
} else {
start = 0;
}
var index = target.indexOf(source);
if (-1 == index) {
throw "SS_ERROR_VALUE";
}
return index + 1 + start;
} else {
throw "SS_ERROR_VALUE";
}
} else {
throw "SS_ERROR_NA";
}
},
substitute : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len > 4 || len < 3) {
throw "SS_ERROR_NA";
}
var posOffset1 = arguments[0];
var posOffset2 = arguments[1];
var posOffset3 = arguments[2];
var instance_num = 0;
if (len == 4) {
instance_num = arguments[3];
}
var text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset1);
var old_text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset2);
var new_text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset3);
var instance_num = Ext.ss.common.FunctionBoxHelper.getNumObjValue(ds,
x, y, sheetIndex, instance_num);
var str = "";
if (instance_num == 0) {
str = text.replace(new RegExp(old_text, "g"), new_text);
} else {
var pos = 0;
for (var i = 0; i < instance_num; i++) {
pos = text.indexOf(old_text, pos) + 1;
}
if (pos > 0) {
pos--;
str = text.substr(0, pos) + new_text
+ text.substr(pos + old_text.length, text.length);
} else {
str = text;
}
}
return str;
},
t : function() {
var len = arguments.length;
var ds, x, y, sheetIndex;
ds = arguments[len - 1];
y = arguments[len - 2];
x = arguments[len - 3];
sheetIndex = arguments[len - 4];
len -= 4;
if (len != 1) {
throw "SS_ERROR_NA";
}
var posOffset1 = arguments[0];
var text = Ext.ss.common.FunctionBoxHelper.getObjVal(ds, x, y,
sheetIndex, posOffset1);
if (!Ext.isString(text)) {
text = "";
}
return text;
},
isif : function() {
var len = arguments.length;
var ds = arguments[len - 1];
var y = arguments[len - 2];
var x = arguments[len - 3];
var sheetIndex = arguments[len - 4];
var cell = ds.getCellObj(x, y, sheetIndex) || {};
var iparams = cell.ISIParams, result = 0;
if (iparams && iparams[ds.ISIFormulaIndex]) {
result = iparams[ds.ISIFormulaIndex][2] || 0;
ds.ISIFormulaIndex++;
}
if (ds.updteISFormulaFromServer) {
len -= 4;
var curSheetIndex = ds.activeSheet;
var args = [];
for (var i = 0; i < len; i++) {
var it = arguments[i];
if (Ext.isObject(it)) {
var sheetIndex = curSheetIndex;
if (false != Ext.type(it.sheetIndex)) {
sheetIndex = it.sheetIndex;
}
var minx = it.ox + x, miny = it.oy + y, maxx = it.oex + x, maxy = it.oey
+ y;
var v = ds.getCellValue(minx, miny, sheetIndex) || 0;
args.push(v);
} else {
args.push(it);
}
}
ds.ISFCache.push(["isif", args]);
return result;
}
return result;
}
};
Ext.ns("Ext.ss");
Ext.ss.HotKey = function(config) {
Ext.apply(this, config);
Ext.ss.HotKey.superclass.constructor.call(this)
};
Ext.extend(Ext.ss.HotKey, Ext.util.Observable, {
pendingInterval : 15,
lookup : {
37 : "left",
39 : "right",
38 : "up",
40 : "down",
46 : "del",
33 : "pageUp",
34 : "pageDown",
36 : "home",
35 : "end",
27 : "esc",
9 : "tab",
13 : "enter",
19 : "break"
},
onKeyupFn : function(e) {
var ss = this.spreadsheet;
var sm = ss.sm;
var tg = e.getTarget();
var k = e.getKey();
if (k != 17 && !this.popupIsShow(tg)) {
if (k != 16) {
if ((9 == k) || (13 == k)) {
e.stopEvent();
sm.setFocusCell(sm.focusCell.x, sm.focusCell.y)
}
} else {
delete this.shiftKeyConfig
}
}
sm.fireEvent("renderborder")
},
onKeydownFn : function(e) {
var tg = e.getTarget();
if (!this.keydownPending && !this.popupIsShow(tg)) {
this.keydownPending = true;
var k = e.getKey();
var ss = this.spreadsheet;
var shift = e.shiftKey, ctrl = e.ctrlKey;
var tgName = tg.tagName;
if (shift && !this.shiftKeyConfig) {
var focusCell = (ss.sm).focusCell;
this.shiftKeyConfig = {
x : focusCell.x,
y : focusCell.y
}
}
if (ctrl && shift) {
if (37 == k) {
this.onCtrlShiftNavigationFn("left")
} else {
if (39 == k) {
this.onCtrlShiftNavigationFn("right")
} else {
if (38 == k) {
this.onCtrlShiftNavigationFn("up")
} else {
if (40 == k) {
this.onCtrlShiftNavigationFn("down")
}
}
}
}
} else {
if (true == ctrl) {
if (!Ext.isIE && (118 != k && 86 != k)
&& (99 != k && 67 != k) && (120 != k && 88 != k)) {
e.stopEvent()
}
if (120 == k || 88 == k) {
this.onCutFn()
} else {
if (99 == k || 67 == k) {
this.onCopyFn()
} else {
if (118 == k || 86 == k) {
this.onPasteFn()
} else {
if (122 == k || 90 == k) {
} else {
if (121 == k || 89 == k) {
} else {
if (102 == k || 70 == k) {
if (Ext.isIE) {
e.stopEvent()
}
this.onFindFn()
} else {
if (66 == k) {
if (Ext.isIE) {
e.stopEvent()
}
this.onBold()
} else {
if (85 == k) {
if (Ext.isIE) {
e.stopEvent()
}
this.onUndrline()
} else {
if (73 == k) {
if (Ext.isIE) {
e.stopEvent()
}
this.onItalic()
} else {
if (79 == k) {
if (Ext.isIE) {
e.stopEvent()
}
this.stopDefault(e);
this.onOpenFile()
} else {
if (80 == k) {
if (Ext.isIE) {
e
.stopEvent()
}
this
.stopDefault(e);
this
.onPrintFile()
} else {
if (83 == k) {
if (Ext.isIE) {
e
.stopEvent()
}
this
.stopDefault(e);
this
.onSaveFile()
} else {
if (k == 36) {
if (Ext.isIE) {
e
.stopEvent()
}
this
.stopDefault(e);
this
.onCtrlNavigationFn("home")
} else {
if (k == 35) {
if (Ext.isIE) {
e
.stopEvent()
}
this
.stopDefault(e);
this
.onCtrlEndFn()
} else {
if (37 == k) {
this
.onCtrlNavigationFn("left")
} else {
if (39 == k) {
this
.onCtrlNavigationFn("right")
} else {
if (38 == k) {
this
.onCtrlNavigationFn("up")
} else {
if (40 == k) {
this
.onCtrlNavigationFn("down")
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} else {
if ("TEXTAREA" == tgName) {
var isPasteArea = Ext.get(tg)
.hasClass("x-spreadsheet-paste-textarea");
if (isPasteArea) {
tgName = "DIV"
}
}
if (46 == k && tgName != "TEXTAREA" && tgName != "INPUT") {
this.spreadsheet.contextmenu.onClearAllFn()
} else {
if (37 == k && tgName != "INPUT"
&& tgName != "TEXTAREA") {
e.stopEvent();
this.onLeftFn(shift)
} else {
if (38 == k && tgName != "INPUT"
&& tgName != "TEXTAREA") {
e.stopEvent();
this.onUpFn(shift)
} else {
if ((39 == k || 9 == k) && tgName != "INPUT"
&& tgName != "TEXTAREA") {
e.stopEvent();
this.onRightFn(shift)
} else {
if (40 == k && tgName != "TEXTAREA") {
e.stopEvent();
this.onDownFn(shift)
} else {
if (13 == k) {
e.stopEvent();
this.onDownFn(shift)
} else {
if (13 == k && false) {
var ss = this.spreadsheet;
var sm = ss.sm;
var textCover = sm
.getTextCover();
if ("none" == textCover.style.display) {
e.stopEvent();
this.onEnterFn()
}
} else {
if (k == 8) {
if ((tgName != "TEXTAREA" && "INPUT" != tgName)
|| tg.value == "") {
this.stopDefault(e)
}
} else {
if (k == 36) {
this.onHomeFn()
} else {
if (k == 33) {
this.onPageUpFn()
} else {
if (k == 34) {
this
.onPageDownFn()
} else {
if (27 == k) {
ss
.resetCutStatus();
ss
.hidePasteOptions()
}
}
}
}
}
}
}
}
}
}
}
}
if (!e.altKey) {
if (!Ext.isIE && shift) {
if (k == 16) {
this.stopDefault(e)
} else {
this.onKeypressFn(k, tg)
}
} else {
if (k != 16) {
this.onKeypressFn(k, tg)
}
}
}
}
}
(function () {
delete(this.keydownPending)
}).defer(this.pendingInterval, this)
}
},
onKeypressFn : function(k, tg) {
var cName = tg.parentNode.className;
if (!this.lookup[k]) {
var editor = (this.spreadsheet).editor;
if (k == 112) {
window
.open(
"http://www.cubedrive.com/wordPublic?id=waGuAW04a-0_&viewStatus=publicView",
"_blank")
} else {
if (k == 113) {
if (cName == "x-spreadsheet-viewport") {
this.onEnterFn(null, "db");
editor.inEditMode = true
}
} else {
if (k == 116) {
window.location.reload()
} else {
if (k > 113 && k <= 124) {
} else {
if (cName == "x-spreadsheet-viewport") {
this.onEnterFn(true);
editor.inEditMode = false
}
}
}
}
}
}
return false
},
onEnterFn : function(sv, where) {
var ss = this.spreadsheet;
var sm = ss.sm;
var editor = ss.editor;
if (sm.focusCell) {
editor.startEditing(sm.focusCell, sv, where)
}
},
onUpFn : function(shift) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
sm.transferFocus();
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
x = sm.focusCell.x;
y = sm.focusCell.y;
var flag = (minx == x);
if (shift) {
if (flag) {
x = maxx;
y = maxy
} else {
x = minx;
y = miny
}
}
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
y = span.miny
}
x--;
var rt = ds.findVisiableCell(x, y, "row", "up");
x = rt.x;
y = rt.y;
if ("showRange" === sm.posFlag || "left" === sm.posFlag) {
if (0 == x) {
return
}
if (showRange.row.start <= x) {
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if (ss.isRowSplit()) {
ss.scrollingRow(ss.autoOffset, 1);
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if (showRange.row.start > freezeRange.row.end + 1) {
ss.scrollingRow(ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
}
}
} else {
if ("top" === sm.posFlag || "left-top" === sm.posFlag) {
if (0 === x) {
return
}
if (ss.isRowSplit() && x < freezeRange.row.start
&& freezeRange.row.start > 1) {
ss.scrollingURow(ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
}
}
}
this.updateStatus()
},
onDownFn : function(shift) {
var ss = this.spreadsheet;
var ds = ss.ds;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
var x, y;
sm.transferFocus();
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
var rows = ds.data.rows;
x = sm.focusCell.x;
y = sm.focusCell.y;
var flag = (minx == x);
if (shift) {
if (flag) {
x = maxx;
y = maxy
} else {
x = minx;
y = miny
}
}
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
y = span.miny;
x = wrap.maxx + 1
} else {
x++
}
var rt = ds.findVisiableCell(x, y, "row");
x = rt.x;
y = rt.y;
if ("showRange" === sm.posFlag || "left" === sm.posFlag) {
if (showRange.row.end <= x) {
ss.scrollingRow(-ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if ("top" === sm.posFlag || "left-top" === sm.posFlag) {
if (ss.isRowSplit()) {
if (x > freezeRange.row.end) {
ss.scrollingURow(-ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if (showRange.row.start > freezeRange.row.end + 1
&& x > freezeRange.row.end) {
ss.ylivescroller.dom.scrollTop = 0;
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.focusCell = {
x : x,
y : y
};
sm.fireEvent("focuscell", sm, x, y);
sm.selectedStart = Ext.apply({}, sm.focusCell);
sm.selectedEnd = Ext.apply({}, sm.focusCell)
}
} else {
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
}
}
}
}
}
this.updateStatus()
},
onLeftFn : function(shift) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
sm.transferFocus();
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
x = sm.focusCell.x;
y = sm.focusCell.y;
var flag = (miny == y);
if (shift) {
if (flag) {
x = maxx;
y = maxy
} else {
x = minx;
y = miny
}
}
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
x = span.minx
}
y--;
var rt = ds.findVisiableCell(x, y, "col", "left");
x = rt.x;
y = rt.y;
if ("showRange" === sm.posFlag || "top" === sm.posFlag) {
if (0 === y) {
return
}
if (showRange.col.start > y) {
if (ss.isColSplit()) {
ss.scrollingCol(ss.autoOffset, 1)
} else {
if (showRange.col.start > freezeRange.col.end + 1) {
ss.scrollingCol(ss.autoOffset, 1)
}
}
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if ("left" === sm.posFlag || "left-top" === sm.posFlag) {
if (0 === y) {
return
}
if (ss.isColSplit() && y < freezeRange.col.start
&& freezeRange.col.start > 1) {
ss.scrollingLCol(ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
}
}
}
this.updateStatus()
},
onRightFn : function(shift) {
var ss = this.spreadsheet;
var ds = ss.ds;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
sm.transferFocus();
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
var rows = ds.data.rows;
x = sm.focusCell.x;
y = sm.focusCell.y;
var flag = (miny == y);
if (shift) {
if (flag) {
x = maxx;
y = maxy
} else {
x = minx;
y = miny
}
}
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
x = span.minx;
y = wrap.maxy + 1
} else {
y++
}
var rt = ds.findVisiableCell(x, y, "col");
x = rt.x;
y = rt.y;
if ("showRange" === sm.posFlag || "top" === sm.posFlag) {
if (showRange.col.end <= y) {
ss.scrollingCol(-ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if ("left" === sm.posFlag || "left-top" === sm.posFlag) {
if (ss.isColSplit()) {
if (y > freezeRange.col.end) {
ss.scrollingLCol(-ss.autoOffset, 1)
}
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
} else {
if (showRange.col.start > freezeRange.col.end + 1
&& y > freezeRange.col.end) {
ss.xlivescroller.dom.scrollLeft = 0;
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.focusCell = {
x : x,
y : y
};
sm.fireEvent("focuscell", sm, x, y);
sm.selectedStart = Ext.apply({}, sm.focusCell);
sm.selectedEnd = Ext.apply({}, sm.focusCell)
}
} else {
if (shift) {
if (flag) {
sm.selectRange(null, {
x : minx,
y : miny
}, {
x : x,
y : y
})
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : maxx,
y : maxy
})
}
} else {
sm.setFocusCell(x, y, true)
}
}
}
}
}
}
this.updateStatus()
},
updateStatus : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
ss.fireEvent("updatestate", sm.selectedStart, sm.selectedEnd);
ss.fireEvent("updatefx", sm.focusCell.x, sm.focusCell.y);
ss.fireEvent("updatepress", ss, sm.focusCell.x, sm.focusCell.y)
},
onCutFn : function() {
this.spreadsheet.contextmenu.onCutFn()
},
onCopyFn : function() {
this.spreadsheet.contextmenu.onCopyFn()
},
onPasteFn : function() {
this.spreadsheet.contextmenu.onPasteFn()
},
onUndoFn : function() {
this.spreadsheet.toolbar.onUndoFn()
},
onRedoFn : function() {
this.spreadsheet.toolbar.onRedoFn()
},
onFindFn : function() {
if (false === Ext.type(this.lookupwin)) {
this.lookupwin = new Ext.ss.popup.LookupWin({
spreadsheet : this.spreadsheet
})
}
this.lookupwin.tabpanel.setActiveTab(0);
this.lookupwin.show()
},
onBold : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var focusCell = sm.focusCell;
var cell = ds.getCell(focusCell.x, focusCell.y);
if ("
" == cell.b) {
ss.toolbar.applyAttribute([["b", ""]])
} else {
ss.toolbar.applyAttribute([["b", ""]])
}
ss.updateStatus(focusCell.x, focusCell.y)
},
onUndrline : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var focusCell = sm.focusCell;
var cell = ds.getCell(focusCell.x, focusCell.y);
if ("" == cell.u) {
ss.toolbar.applyAttribute([["u", ""]])
} else {
ss.toolbar.applyAttribute([["u", ""]])
}
ss.updateStatus(focusCell.x, focusCell.y)
},
onItalic : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var focusCell = sm.focusCell;
var cell = ds.getCell(focusCell.x, focusCell.y);
if ("" == cell.i) {
ss.toolbar.applyAttribute([["i", ""]])
} else {
ss.toolbar.applyAttribute([["i", ""]])
}
ss.updateStatus(focusCell.x, focusCell.y)
},
onReplaceFn : function() {
if (false === Ext.type(this.lookupwin)) {
this.lookupwin = new Ext.ss.popup.LookupWin({
spreadsheet : this.spreadsheet
})
}
this.lookupwin.tabpanel.setActiveTab(1);
this.lookupwin.show()
},
onOpenFile : function() {
var ss = this.spreadsheet;
var stb = ss.toolbar;
feyaSoft.home.LoginCheck(function() {
stb.onOpenFn()
}, stb)
},
onPrintFile : function() {
var ss = this.spreadsheet;
var stb = ss.toolbar;
feyaSoft.home.LoginCheck(function() {
stb.onPrintFn()
}, stb)
},
onSaveFile : function() {
var ss = this.spreadsheet;
var stb = ss.toolbar;
feyaSoft.home.LoginCheck(function() {
stb.onSaveFn()
}, stb)
},
stopDefault : function(e) {
e.keyCode = 0;
if (e && e.preventDefault) {
e.preventDefault()
} else {
window.event.returnValue = false
}
return false
},
onHomeFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
x = sm.focusCell.x;
y = sm.focusCell.y;
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
y = span.miny
}
var rt = ds.findVisiableCell(x, y, "row", "up");
x = rt.x;
y = rt.y;
sm.setFocusCell(x, 1, true)
}
},
onPageUpFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
x = sm.focusCell.x;
y = sm.focusCell.y;
var flag = (minx == x);
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
y = span.miny
}
x--;
var rt = ds.findVisiableCell(x, y, "row", "up");
x = rt.x;
y = rt.y;
var vs = showRange.row.start;
var ve = showRange.row.end;
var va = ve - vs;
if ("showRange" === sm.posFlag || "left" === sm.posFlag) {
if (vs <= va) {
} else {
if (ss.isRowSplit()) {
ss.scrollingRow(ss.autoOffset, va);
sm.setFocusCell(x - va, y, true)
} else {
if (showRange.row.start > freezeRange.row.end + 1) {
ss.scrollingRow(ss.autoOffset, va)
}
}
}
} else {
if ("top" === sm.posFlag || "left-top" === sm.posFlag) {
if (vs <= va) {
ss.scrollingURow(ss.autoOffset, vs)
}
if (ss.isRowSplit() && x < freezeRange.row.start
&& freezeRange.row.start > 1) {
ss.scrollingURow(ss.autoOffset, va)
}
}
}
}
},
onPageDownFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
var rows = ds.data.rows;
x = sm.focusCell.x;
y = sm.focusCell.y;
var flag = (minx == x);
rows[x] = rows[x] || {};
var cell = rows[x][y] || {};
if (cell.wrap) {
var wrap = cell.wrap;
var span = ds.getVisiableSpan(wrap.minx, wrap.miny, wrap.maxx,
wrap.maxy);
y = span.miny;
x = wrap.maxx + 1
} else {
}
var rt = ds.findVisiableCell(x, y, "row");
x = rt.x;
y = rt.y;
var vs = showRange.row.start;
var ve = showRange.row.end;
var va = ve - vs;
if ("showRange" === sm.posFlag || "left" === sm.posFlag) {
ss.scrollingRow(-ss.autoOffset, va)
} else {
if ("top" === sm.posFlag || "left-top" === sm.posFlag) {
if (ss.isRowSplit()) {
if (x > freezeRange.row.end) {
ss.scrollingURow(-ss.autoOffset, va)
}
} else {
if (showRange.row.start > freezeRange.row.end + 1
&& x > freezeRange.row.end) {
ss.ylivescroller.dom.scrollTop = 0;
sm.focusCell = {
x : x,
y : y
};
sm.fireEvent("focuscell", sm, x + va, y);
sm.selectedStart = Ext.apply({}, sm.focusCell);
sm.selectedEnd = Ext.apply({}, sm.focusCell)
} else {
}
}
}
}
}
},
onCtrlNavigationFn : function(nav) {
var ss = this.spreadsheet;
var ds = ss.ds;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
x = sm.focusCell.x;
y = sm.focusCell.y;
var bound = ds.getReachBounds();
var re = bound.row;
var ce = bound.col;
if ("left" === sm.posFlag || "left-top" === sm.posFlag) {
ce = freezeRange.col.end
}
switch (nav) {
case "home" :
sm.setFocusCell(1, 1, true);
break;
case "up" :
sm.setFocusCell(1, y, true);
break;
case "down" :
sm.setFocusCell(re, y, true);
break;
case "left" :
sm.setFocusCell(x, 1, true);
break;
case "right" :
if (!Ext.isIE && ce == 14) {
sm.setFocusCell(x, ce - 1, true)
} else {
sm.setFocusCell(x, ce, true)
}
break
}
}
this.updateStatus()
},
onCtrlEndFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var showRange = ss.showRange;
var vs = showRange.row.start;
var ve = showRange.row.end;
var cs = showRange.col.start;
var ce = showRange.col.end;
var lastData;
for (var i = 1; i <= (ve - vs); i++) {
for (var j = 1; j <= (ce - cs); j++) {
var cell = ds.getOrignCellObj(i, j);
if (cell && cell.data) {
lastData = {
minx : i,
miny : j
}
}
}
}
if (lastData) {
sm.setFocusCell(lastData.minx, lastData.miny, true)
} else {
sm.setFocusCell(vs, cs, true)
}
},
onCtrlShiftNavigationFn : function(nav) {
var ss = this.spreadsheet;
var ds = ss.ds;
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var sm = ss.sm;
sm.transferFocus();
var x, y;
if (sm.focusCell) {
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var sEndX = sm.selectedEnd.x, sEndY = sm.selectedEnd.y;
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
x = sm.focusCell.x;
y = sm.focusCell.y;
if ("showRange" === sm.posFlag || "top" === sm.posFlag) {
switch (nav) {
case "left" :
sm.selectRange(null, {
x : x,
y : y
}, {
x : sEndX,
y : 1
});
ss.scrollingCol(ss.autoOffset, showRange.col.end);
break;
case "right" :
if (showRange.col.start > y) {
ss.scrollingCol(-ss.autoOffset, showRange.col.start
- y);
(function () {
sm.selectRange(null, {
x : x,
y : y
}, {
x : sEndX,
y : showRange.col.end
})
}).defer(10)
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : sEndX,
y : showRange.col.end
})
}
break;
case "up" :
sm.selectRange(null, {
x : x,
y : y
}, {
x : 1,
y : sEndY
});
ss.scrollingRow(ss.autoOffset, showRange.row.end);
break;
case "down" :
if (showRange.row.start > x) {
ss.scrollingRow(-ss.autoOffset, showRange.row.start
- x);
(function () {
sm.selectRange(null, {
x : x,
y : y
}, {
x : showRange.row.end,
y : sEndY
})
}).defer(10)
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : showRange.row.end,
y : sEndY
})
}
break
}
} else {
if ("left" === sm.posFlag || "left-top" === sm.posFlag) {
switch (nav) {
case "left" :
sm.selectRange(null, {
x : x,
y : y
}, {
x : sEndX,
y : 1
});
ss
.scrollingLCol(ss.autoOffset,
freezeRange.col.end);
break;
case "right" :
var bound = ds.getReachBounds();
sm.setFocusCell(bound.row, bound.col, true);
if (freezeRange.col.start > y) {
ss.scrollingLCol(-ss.autoOffset,
freezeRange.col.start - y);
(function () {
sm.selectRange(null, {
x : x,
y : y
}, {
x : sEndX,
y : freezeRange.col.end
})
}).defer(10)
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : sEndX,
y : freezeRange.col.end
})
}
break;
case "up" :
sm.selectRange(null, {
x : x,
y : y
}, {
x : 1,
y : sEndY
});
ss.scrollingRow(ss.autoOffset, freezeRange.row.end);
break;
case "down" :
if (showRange.row.start > x) {
ss.scrollingRow(-ss.autoOffset,
showRange.row.start - x);
(function () {
sm.selectRange(null, {
x : x,
y : y
}, {
x : showRange.row.end,
y : sEndY
})
}).defer(10)
} else {
sm.selectRange(null, {
x : x,
y : y
}, {
x : showRange.row.end,
y : sEndY
})
}
break
}
}
}
}
this.updateStatus()
},
popupIsShow : function(tg) {
var pTagName = (tg.parentNode).tagName;
if (pTagName == "LI") {
return true
}
var tc = Ext.query("div[class=ext-el-mask]", document.body);
for (var m = 0; m < tc.length; m++) {
var it = tc[m];
if (it.style.display == "block") {
return true
}
}
},
mouseKeydown : function(e) {
if (this.shiftKeyConfig && e.shiftKey) {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var firstFocusCell = this.shiftKeyConfig;
var focusCell = sm.focusCell;
sm.selectRange(null, {
x : firstFocusCell.x,
y : firstFocusCell.y
}, {
x : focusCell.x,
y : focusCell.y
})
} else {
delete this.shiftKeyConfig
}
}
});
window.onhelp = function() {
return false
};
Ext.ns("Ext.ss");
Ext.ss.SelectionModel = function(config) {
Ext.apply(this, config);
this.initAutoFillOptions();
Ext.ss.SelectionModel.superclass.constructor.call(this);
this.addEvents("focuscell", "defocuscell", "selectcell", "deselectcell",
"selecthdcell", "deselecthdcell", "selectrow", "deselectrow",
"selectcol", "deselectcol", "updateselected", "renderborder",
"xresize", "yresize", "selectup", "formulaeditingchanged",
"selectionchanged");
this.on("formulaeditingchanged", this.onFormulaEditingChangedFn, this);
this.on("updateselected", this.onUpdateSelectedFn, this);
this.on("renderborder", this.renderBorder, this);
this.initListeners();
this.initSelection();
};
Ext.extend(Ext.ss.SelectionModel, Ext.util.Observable, {
posFlag : "showRange",
selectedSet : {},
selectCoverBorder : "3px solid black",
borderWidth : 3,
onContextMenuFn : function(e) {
e.stopEvent();
},
initListeners : function() {
this.resetListeners();
Ext.EventManager.on(document, "mousedown", this.onMouseDownFn, this);
Ext.EventManager.on(document, "mousemove", this.onMouseMoveFn, this);
Ext.EventManager.on(document, "mouseup", this.onMouseUpFn, this);
},
resetListeners : function() {
Ext.EventManager.un(document, "mousedown", this.onMouseDownFn);
Ext.EventManager.un(document, "mousemove", this.onMouseMoveFn);
Ext.EventManager.un(document, "mouseup", this.onMouseUpFn);
},
initAutoFillOptions : function() {
var lanss = feyaSoft.ss.lang;
this.autoFillOptions = new Ext.Button({
cls : "x-spreadsheet-autofill-option",
hidden : true,
iconCls : "icon_autofill_option",
menu : new Ext.menu.Menu({
defaults : {
group : Ext.id() + "-autofill",
checked : false
},
items : [{
checked : true,
text : lanss.fillSequence,
handler : this.fillStyleContent,
scope : this
}, {
text : lanss.fillOnlyStyle,
handler : this.fillOnlyStyle,
scope : this
}, {
text : lanss.fillOnlyContent,
handler : this.fillOnlyContent,
scope : this
}, {
text : lanss.copyCell,
handler : this.fillCopyCell,
scope : this
}]
}),
renderTo : Ext.getBody(),
listeners : {
render : {
fn : function(btn) {
btn.getEl().swallowEvent("mousedown");
}
}
}
});
},
hideAutoFillOptions : function() {
this.autoFillOptions.hide();
},
initSelection : function() {
this.focusCell = {
x : 1,
y : 1
};
this.selectedStart = {
x : 1,
y : 1
};
this.selectedEnd = {
x : 1,
y : 1
};
},
onFormulaEditingChangedFn : function(ov, v, nofocus, border) {
if (v) {
this.initFormulaSelecting(nofocus, border);
} else {
this.resetFormulaSelecting(nofocus);
}
},
onUpdateSelectedFn : function(ss, flag) {
if ("row" === flag) {
if ("decrease" === this.scrollDir) {
this.selectedEnd.x = parseInt(ss.showRange.row.start);
this.fireEvent("selectionchanged");
} else {
this.selectedEnd.x = parseInt(ss.showRange.row.end);
this.fireEvent("selectionchanged");
}
} else if ("urow" === flag) {
if ("decrease" === this.scrollDir) {
this.selectedEnd.x = parseInt(ss.freezeRange.row.start);
this.fireEvent("selectionchanged");
} else {
this.selectedEnd.x = parseInt(ss.freezeRange.row.end);
this.fireEvent("selectionchanged");
}
} else if ("col" === flag) {
if ("decrease" === this.scrollDir) {
this.selectedEnd.y = parseInt(ss.showRange.col.start);
this.fireEvent("selectionchanged");
} else {
this.selectedEnd.y = parseInt(ss.showRange.col.end);
this.fireEvent("selectionchanged");
}
} else if ("lcol" === flag) {
if ("decrease" === this.scrollDir) {
this.selectedEnd.y = parseInt(ss.freezeRange.col.start);
this.fireEvent("selectionchanged");
} else {
this.selectedEnd.y = parseInt(ss.freezeRange.col.end);
this.fireEvent("selectionchanged");
}
}
},
isSingleSelected : function() {
if (this.selectedStart.x == this.selectedEnd.x
&& this.selectedStart.y == this.selectedEnd.y
|| 0 == this.selectedStart.x && 0 == this.selectedEnd.x
|| 0 == this.selectedStart.y && 0 == this.selectedEnd.y) {
return true;
}
return false;
},
onMouseDownFn : function(e) {
this.spreadsheet.hyperlinktip.showLink(e);
this.downFlag = true;
if (0 == e.button
&& ("col" == this.mdFlag || "row" == this.mdFlag || "cell" == this.mdFlag)) {
this.m_evt = null;
if (!this.task) {
this.task = {
run : function() {
if (this.mdFlag) {
this.autoScrolling();
return true;
} else {
this.spreadsheet.autoRowSelected = false;
this.spreadsheet.autoColSelected = false;
return false;
}
},
interval : 100,
scope : this
};
Ext.TaskMgr.start(this.task);
}
}
},
handleMouseUp : function() {
var ss = this.spreadsheet;
ss.autoRowSelected = false;
ss.autoColSelected = false;
if (this.task) {
Ext.TaskMgr.stop(this.task);
}
this.task = null;
this.mdFlag = null;
this.applyBrushFormat();
this.fireEvent("selectup", this);
},
applyBrushFormat : function() {
if (this.brushFormat) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
this.applyFormat2Range(minx, miny, maxx, maxy, this.brushFormat);
ds.trace(feyaSoft.ss.lang.action_format_bush);
ss.toolbar.stopBrushFormat();
}
},
applyFormat2Range : function(minx, miny, maxx, maxy, bf) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
delete bf['origin-data'];
if (0 == minx && 0 == maxx) {
delete bf.wrap;
var arr = Ext.ss.common.Mask.obj2arr(bf);
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, arr);
}
ss.refreshRange();
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
this.selectRange(this.focusCell, rt.minPos, rt.maxPos);
} else if (0 == miny && 0 == maxy) {
delete bf.wrap;
var arr = Ext.ss.common.Mask.obj2arr(bf);
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, arr);
}
ss.refreshRange();
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
this.selectRange(this.focusCell, rt.minPos, rt.maxPos);
} else {
var wrapRowSpan, wrapColSpan;
if (bf.wrap) {
wrapRowSpan = bf.wrap.maxx - bf.wrap.minx + 1;
wrapColSpan = bf.wrap.maxy - bf.wrap.miny + 1;
maxx = Math.ceil((maxx - minx + 1) / wrapRowSpan) * wrapRowSpan
+ minx - 1;
maxy = Math.ceil((maxy - miny + 1) / wrapColSpan) * wrapColSpan
+ miny - 1;
}
for (var i = minx; i <= maxx; i++) {
var xOffset, wminx;
if (bf.wrap) {
xOffset = Math.floor((i - minx) / wrapRowSpan);
wminx = minx + wrapRowSpan * xOffset;
}
rows[i] = rows[i] || {};
var row = rows[i];
for (var j = miny; j <= maxy; j++) {
row[j] = row[j] || {};
var cell = {
'origin-data' : row[j]['origin-data'],
data : row[j].data,
wrap : row[j].wrap,
bb : row[j].bb,
br : row[j].br,
comment : row[j].comment
};
Ext.apply(cell, bf);
var yOffset;
if (bf.wrap) {
yOffset = Math.floor((j - miny) / wrapColSpan);
var wminy = miny + wrapColSpan * yOffset;
var wrap = {
minx : wminx,
maxx : wminx + wrapRowSpan - 1,
miny : wminy,
maxy : wminy + wrapColSpan - 1
};
cell.wrap = wrap;
}
ds.fireEvent("cellchange", i, j, cell);
var obj = ds.getCell(i, j);
obj.x = i;
obj.y = j;
ss.refreshCell(obj);
}
}
}
this.selectRange({
x : minx,
y : miny
}, {
x : minx,
y : miny
}, {
x : maxx,
y : maxy
});
},
resetBrushFormat : function() {
delete this.brushFormat;
this.brushEl.setStyle("display", "none");
},
getBrushFormat : function() {
var ds = this.spreadsheet.ds;
var obj;
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
var x = this.focusCell.x, y = this.focusCell.y;
if (0 == minx && 0 == maxx) {
obj = ds.data.colSetting[y];
this.brushFormat = Ext.apply({
cw : null
}, obj);
} else if (0 == miny && 0 == maxy) {
obj = ds.data.rowSetting[x];
this.brushFormat = Ext.apply({
ch : null
}, obj);
} else {
obj = ds.getCell(x, y);
this.brushFormat = Ext.apply({}, obj);
if (this.brushFormat.wrap) {
var wrap = Ext.apply({}, this.brushFormat.wrap);
this.brushFormat.wrap = wrap;
}
}
delete this.brushFormat.data;
delete this.brushFormat.bb;
delete this.brushFormat.br;
delete this.brushFormat.comment;
delete this.brushFormat.css;
this.brushEl.setStyle("display", "");
},
onMouseUpFn : function(e) {
this.downFlag = false;
this.m_evt = null;
if (this.mdFlag) {
if ("drag-split-row" == this.mdFlag) {
this.resetDragSplitRow(e.getXY());
} else if ("drag-split-col" == this.mdFlag) {
this.resetDragSplitCol(e.getXY());
} else if ("drag-split-cross" == this.mdFlag) {
this.resetDragSplitCross(e.getXY());
} else if ("col-resizer" == this.mdFlag) {
this.handleColResize();
} else if ("row-resizer" == this.mdFlag) {
this.handleRowResize();
} else {
this.handleMouseUp();
}
var ss = this.spreadsheet;
var ds = ss.ds;
}
this.resetAutoContenting(true);
},
handleColResize : function() {
delete this.mdFlag;
var ss = this.spreadsheet;
var ds = ss.ds;
var y = this.resizeColIndex;
var cEl = ss.getCellEl(0, y, this.posFlag);
var w = cEl.getWidth();
this.posFlag = this.lastPosFlag;
if (w != this.resizeColWidth) {
ss.yResizingCol(y, this.resizeColWidth);
var l = ds.getLetter(y);
ds.trace(feyaSoft.ss.lang.action_col_resize(l, l));
}
this.resizeColWidth = cEl.getWidth();
ss.colline.dom.style.display = "none";
},
handleRowResize : function() {
delete this.mdFlag;
var ss = this.spreadsheet;
var ds = ss.ds;
var x = this.resizeRowIndex;
var cEl = ss.getCellEl(x, 0, this.posFlag);
var h = cEl.getHeight();
this.posFlag = this.lastPosFlag;
if (h != this.resizeRowHeight) {
ss.xResizingRow(x, this.resizeRowHeight);
ds.trace(feyaSoft.ss.lang.action_row_resize(x, x));
}
this.resizeRowHeight = cEl.getHeight();
ss.rowline.dom.style.display = "none";
},
adjustFocused : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var fx = this.focusCell.x, fy = this.focusCell.y;
if (rows[fx] && rows[fx][fy]) {
var wrap = rows[fx][fy].wrap;
if (wrap) {
this.focusCell.x = wrap.minx;
this.focusCell.y = wrap.miny;
this.selectedStart.x = wrap.minx;
this.selectedStart.y = wrap.miny;
this.selectedEnd.x = wrap.maxx;
this.selectedEnd.y = wrap.maxy;
}
}
},
adjustSelected : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
var tminx, tminy, tmaxx, tmaxy;
while (!(minx == tminx && miny == tminy && maxx == tmaxx && maxy == tmaxy)) {
tminx = minx, tmaxx = maxx, tminy = miny, tmaxy = maxy;
for (var i = tminx; i <= tmaxx; i++) {
for (var j = tminy; j <= tmaxy; j++) {
if (rows[i] && rows[i][j]) {
var wrap = rows[i][j].wrap;
if (wrap) {
if (minx > wrap.minx) {
minx = wrap.minx;
}
if (maxx < wrap.maxx) {
maxx = wrap.maxx;
}
if (miny > wrap.miny) {
miny = wrap.miny;
}
if (maxy < wrap.maxy) {
maxy = wrap.maxy;
}
}
}
}
}
}
if (this.selectedStart.x <= this.selectedEnd.x) {
this.selectedStart.x = minx;
this.selectedEnd.x = maxx;
} else {
this.selectedStart.x = maxx;
this.selectedEnd.x = minx;
}
if (this.selectedStart.y <= this.selectedEnd.y) {
this.selectedStart.y = miny;
this.selectedEnd.y = maxy;
} else {
this.selectedStart.y = maxy;
this.selectedEnd.y = miny;
}
if (!this.formulaEditing) {
if (!(0 == minx && 0 == maxx)
&& !(minx <= this.focusCell.x && maxx >= this.focusCell.x)) {
this.selectedStart.x = this.focusCell.x;
}
if (!(0 == miny && 0 == maxy)
&& !(miny <= this.focusCell.y && maxy >= this.focusCell.y)) {
this.selectedStart.y = this.focusCell.y;
}
}
},
resizingCol : function(xy) {
var ss = this.spreadsheet;
var cEl = ss.getCellEl(0, this.resizeColIndex, this.posFlag);
var r = cEl.getRight();
var w = cEl.getWidth();
this.resizeColWidth = w + xy[0] - r;
var min = ss.xpaddingOffset + 1;
if (min > this.resizeColWidth) {
this.resizeColWidth = min;
}
var cd = ss.colline.dom;
cd.style.left = cEl.getLeft() + this.resizeColWidth
- ss.sview.getLeft() + "px";
},
resizingRow : function(xy) {
var ss = this.spreadsheet;
var cEl = ss.getCellEl(this.resizeRowIndex, 0, this.posFlag);
var b = cEl.getBottom();
var h = cEl.getHeight();
this.resizeRowHeight = h + xy[1] - b;
var min = ss.ypaddingOffset + 1;
if (min > this.resizeRowHeight) {
this.resizeRowHeight = min;
}
var rd = ss.rowline.dom;
rd.style.top = cEl.getTop() + this.resizeRowHeight - ss.sview.getTop()
+ "px";
},
recheckPos : function() {
var pos = this.selectedEnd;
if (this.autoContentFlag) {
var minPos = this.autoContentFlag.minPos, maxPos = this.autoContentFlag.maxPos;
var minRow = Math.abs(pos.x - minPos.x), maxRow = Math.abs(pos.x
- maxPos.x);
var minCol = Math.abs(pos.y - minPos.y), maxCol = Math.abs(pos.y
- maxPos.y);
var row = minRow > maxRow ? maxRow : minRow, col = minCol > maxCol
? maxCol
: minCol;
if (pos.x < minPos.x) {
if (pos.y < minPos.y) {
this.selectedStart = Ext.apply({}, maxPos);
if (row > col) {
pos.y = minPos.y;
} else {
pos.x = minPos.x;
}
} else if (minPos.y <= pos.y && pos.y <= maxPos.y) {
this.selectedStart = Ext.apply({}, maxPos);
pos.y = minPos.y;
} else {
this.selectedStart = {
x : maxPos.x,
y : minPos.y
};
if (row > col) {
pos.y = maxPos.y;
} else {
pos.x = minPos.x;
}
}
} else if (minPos.x <= pos.x && pos.x <= maxPos.x) {
if (pos.y < minPos.y) {
this.selectedStart = Ext.apply({}, maxPos);
pos.x = minPos.x;
} else if (minPos.y <= pos.y && pos.y <= maxPos.y) {
this.selectedStart = Ext.apply({}, minPos);
pos = Ext.apply({}, maxPos);
} else {
this.selectedStart = {
x : maxPos.x,
y : minPos.y
};
pos.x = minPos.x;
}
} else {
if (pos.y < minPos.y) {
this.selectedStart = {
x : minPos.x,
y : maxPos.y
};
if (row > col) {
pos.y = minPos.y;
} else {
pos.x = maxPos.x;
}
} else if (minPos.y <= pos.y && pos.y <= maxPos.y) {
this.selectedStart = {
x : minPos.x,
y : maxPos.y
};
pos.y = minPos.y;
} else {
this.selectedStart = Ext.apply({}, minPos);
if (row > col) {
pos.y = maxPos.y;
} else {
pos.x = maxPos.x;
}
}
}
}
this.selectedEnd = pos;
return pos;
},
getValidPos : function(pos) {
var ss = this.spreadsheet;
var fr = ss.freezeRange;
if (ss.isRowSplit()) {
if (0 == pos.x && 0 == ss.uylivescroller.dom.scrollTop) {
pos.x = fr.row.start;
}
} else {
if (0 == pos.x && 0 == ss.ylivescroller.dom.scrollTop) {
pos.x = fr.row.start;
}
}
if (ss.isColSplit()) {
if (0 == pos.y && 0 == ss.lxlivescroller.dom.scrollLeft) {
pos.y = fr.col.start;
}
} else {
if (0 == pos.y && 0 == ss.xlivescroller.dom.scrollLeft) {
pos.y = fr.col.start;
}
}
return pos;
},
dragingSplitRow : function(xy) {
var ss = this.spreadsheet;
var ds = ss.ds;
var xlimit = ss.ylivescroller.getLeft();
var ylimit = ss.xlivescroller.getTop();
if (xy[0] <= xlimit && xy[1] <= ylimit) {
var pos = ds.getSplitPosFromXY(xy[0], xy[1]);
if (0 < pos.y) {
ss.dragRowSpliter.setStyle("top", pos.y);
}
}
},
dragingSplitCol : function(xy) {
var ss = this.spreadsheet;
var ds = ss.ds;
var xlimit = ss.ylivescroller.getLeft();
var ylimit = ss.xlivescroller.getTop();
if (xy[0] <= xlimit && xy[1] <= ylimit) {
var pos = ds.getSplitPosFromXY(xy[0], xy[1]);
if (0 < pos.x) {
ss.dragColSpliter.setStyle("left", pos.x);
}
}
},
dragingSplitCross : function(xy) {
var ss = this.spreadsheet;
var ds = ss.ds;
var xlimit = ss.ylivescroller.getLeft();
var ylimit = ss.xlivescroller.getTop();
if (xy[0] <= xlimit && xy[1] <= ylimit) {
var pos = ds.getSplitPosFromXY(xy[0], xy[1]);
if (0 < pos.y) {
ss.dragRowSpliter.setStyle("top", pos.y);
}
if (0 < pos.x) {
ss.dragColSpliter.setStyle("left", pos.x);
}
}
},
getValidEndPos : function(pos, posFlag) {
var showRange = this.spreadsheet.showRange;
if ("showRange" == this.posFlag) {
if ("left-top" == posFlag) {
pos = {
x : showRange.row.start,
y : showRange.col.start
};
} else if ("left" == posFlag) {
pos.y = showRange.col.start;
} else {
pos.x = showRange.row.start;
}
} else if ("left" == this.posFlag) {
if ("left-top" == posFlag || "top" == posFlag) {
pos.x = showRange.row.start;
}
} else if ("top" == this.posFlag) {
if ("left-top" == posFlag || "left" == posFlag) {
pos.y = showRange.col.start;
}
}
return pos;
},
onMouseMoveFn : function(e) {
if (!Ext.isIE) {
e.preventDefault();
}
this.m_evt = e;
if (this.mdFlag) {
var ss = this.spreadsheet;
var ds = ss.ds;
var xy = e.getXY();
if ("drag-split-row" == this.mdFlag) {
this.dragingSplitRow(xy);
} else if ("drag-split-col" == this.mdFlag) {
this.dragingSplitCol(xy);
} else if ("drag-split-cross" == this.mdFlag) {
this.dragingSplitCross(xy);
} else if ("col-resizer" == this.mdFlag) {
this.resizingCol(xy);
} else if ("row-resizer" == this.mdFlag) {
this.resizingRow(xy);
} else if ("contextmenu" != this.mdFlag) {
var pos = ds.getPosFromXY(xy[0], xy[1]);
if (pos
&& !(this.lastPos && this.lastPos.x == pos.x && this.lastPos.y == pos.y)) {
this.lastPos = Ext.apply({}, pos);
var showRange = ss.showRange;
var freezeRange = ss.freezeRange;
var flag = false;
var posFlag = this.whichRange(pos);
pos = this.getValidPos(pos);
if ("cell" == this.mdFlag) {
if (posFlag != this.posFlag) {
if (!ss.splitFlag) {
if ("top" == this.posFlag
&& ("showRange" == posFlag
&& showRange.row.start == freezeRange.row.end
+ 1 || "left-top" == posFlag
&& showRange.col.start == freezeRange.col.end
+ 1)) {
flag = true;
} else if ("left" == this.posFlag
&& ("showRange" == posFlag
&& showRange.col.start == freezeRange.col.end
+ 1 || "left-top" == posFlag
&& showRange.row.start == freezeRange.row.end
+ 1)) {
flag = true;
} else if ("left-top" == this.posFlag
&& ("top" == posFlag
&& showRange.col.start === freezeRange.col.end
+ 1
|| "left" == posFlag
&& showRange.row.start == freezeRange.row.end
+ 1 || showRange.col.start === freezeRange.col.end
+ 1
&& showRange.row.start == freezeRange.row.end
+ 1)) {
flag = true;
} else {
if ("top" == posFlag
&& showRange.row.start == freezeRange.row.end
+ 1) {
flag = true;
} else if ("left" == posFlag
&& showRange.col.start == freezeRange.col.end
+ 1) {
flag = true;
} else if ("left-top" == posFlag
&& showRange.col.start == freezeRange.col.end
+ 1
&& showRange.row.start == freezeRange.row.end
+ 1) {
flag = true;
}
}
} else {
pos = this.getValidEndPos(pos, posFlag);
flag = true;
}
} else {
flag = true;
}
if (true == flag) {
var old = Ext.apply({}, this.selectedEnd);
this.selectedEnd = Ext.apply({}, pos);
if (this.checkSelectionChange(null, old)) {
this.adjustSelected();
this.fireEvent("renderborder");
}
}
} else if ("row" === this.mdFlag) {
var rflag = posFlag == this.posFlag;
if (!rflag && ss.splitFlag) {
rflag = true;
pos = this.getValidEndPos(pos, posFlag);
}
if (rflag) {
var old = Ext.apply({}, this.selectedEnd);
this.selectedEnd = {
x : pos.x,
y : 0
};
if (this.checkSelectionChange(null, old)) {
this.fireEvent("renderborder");
}
}
} else if ("col" === this.mdFlag) {
var cflag = posFlag == this.posFlag;
if (!cflag && ss.splitFlag) {
cflag = true;
pos = this.getValidEndPos(pos, posFlag);
}
if (cflag) {
var old = Ext.apply({}, this.selectedEnd);
this.selectedEnd = {
x : 0,
y : pos.y
};
if (this.checkSelectionChange(null, old)) {
this.fireEvent("renderborder");
}
}
}
}
}
}
if (this.brushFormat) {
var xy = e.getXY();
xy[0] += 15;
xy[1] -= 6;
this.brushEl.setXY(xy);
}
},
autoScrolling : function() {
if (this.mdFlag && this.m_evt) {
var pos = this.m_evt.getXY();
if (0 != pos[0] || 0 != pos[1]) {
this.m_pos = pos;
}
if (!this.m_pos) {
return;
}
var ss = this.spreadsheet;
var minx = ss.scroller.getLeft();
var miny = ss.scroller.getTop();
var maxx = ss.ylivescroller.getLeft();
var maxy = ss.xlivescroller.getTop();
var posx = this.m_pos[0];
var posy = this.m_pos[1];
if (ss.splitFlag) {
var lx = ss.lhct.getLeft();
var ly = ss.lhct.getTop();
if ("row" != this.mdFlag) {
if (posx <= lx) {
if ("left" == this.posFlag
|| "left-top" == this.posFlag) {
ss.autoColSelected = true;
this.scrollDir = "decrease";
ss.scrollingLCol(ss.autoOffset);
}
}
}
if ("col" != this.mdFlag) {
if (posy <= ly) {
if ("top" == this.posFlag || "left-top" == this.posFlag) {
ss.autoRowSelected = true;
this.scrollDir = "decrease";
ss.scrollingURow(ss.autoOffset);
}
}
}
}
if ("row" != this.mdFlag) {
if (posx >= maxx) {
ss.autoColSelected = true;
this.scrollDir = "increase";
ss.scrollingCol(-ss.autoOffset);
} else {
if (posx <= minx) {
if (0 != ss.xlivescroller.dom.scrollLeft
&& ("showRange" == this.posFlag || "top" == this.posFlag)) {
ss.autoColSelected = true;
this.scrollDir = "decrease";
ss.scrollingCol(ss.autoOffset);
}
} else if (posx >= minx
&& ("left" == this.posFlag || "left-top" == this.posFlag)) {
if (ss.splitFlag) {
ss.autoColSelected = true;
this.scrollDir = "increase";
ss.scrollingLCol(-ss.autoOffset);
} else {
ss.xlivescroller.dom.scrollLeft = 0;
}
}
}
}
if ("col" != this.mdFlag) {
if (posy >= maxy) {
ss.autoRowSelected = true;
this.scrollDir = "increase";
ss.scrollingRow(-ss.autoOffset);
} else {
if (posy <= miny) {
if (0 != ss.ylivescroller.dom.scrollTop
&& ("showRange" === this.posFlag || "left" == this.posFlag)) {
ss.autoRowSelected = true;
this.scrollDir = "decrease";
ss.scrollingRow(ss.autoOffset);
}
} else if (posy >= miny
&& ("top" == this.posFlag || "left-top" == this.posFlag)) {
if (ss.splitFlag) {
ss.autoRowSelected = true;
this.scrollDir = "increase";
ss.scrollingURow(-ss.autoOffset);
} else {
ss.ylivescroller.dom.scrollTop = 0;
}
}
}
}
}
},
setFocusCell : function(x, y, update) {
if (!this.isInRange({
x : x,
y : y
})) {
this.spreadsheet.scroll2Pos(x, y, [10, 3]);
}
this.handleLeftClick({
x : x,
y : y
}, true, update);
this.spreadsheet.hyperlinktip.showLink();
},
getMinMaxFromStartEnd : function(startPos, endPos) {
var stx = startPos.x;
var sty = startPos.y;
var edx = endPos.x;
var edy = endPos.y;
var minx, maxx, miny, maxy;
if (stx <= edx) {
minx = stx;
maxx = edx;
} else {
minx = edx;
maxx = stx;
}
if (sty <= edy) {
miny = sty;
maxy = edy;
} else {
miny = edy;
maxy = sty;
}
return {
minPos : {
x : minx,
y : miny
},
maxPos : {
x : maxx,
y : maxy
}
};
},
handleFocus : function(x, y, focusFlag, update) {
var ss = this.spreadsheet;
var ds = ss.ds;
if (!focusFlag) {
this.lastFocusCell = this.focusCell;
this.focusCell = {
x : x,
y : y
};
}
this.getTextCover().blur();
var rows = ds.data.rows;
var minx = x, miny = y;
if (rows[x] && rows[x][y]) {
var wrap = rows[x][y].wrap;
if (wrap) {
minx = wrap.minx;
miny = wrap.miny;
this.focusCell = {
x : wrap.minx,
y : wrap.miny
};
}
}
if (!update) {
ss.fireEvent("updatestate", this.focusCell, this.focusCell);
ss.fireEvent("updatefx", minx, miny);
ss.fireEvent("updatepress", ss, minx, miny);
}
},
clickAll : function(update) {
this.mdFlag = "all";
var fr = this.spreadsheet.freezeRange;
this.handleFocus(fr.row.start, fr.col.start, null, update);
},
clickCell : function(x, y, focusFlag, update) {
this.mdFlag = "cell";
this.handleFocus(x, y, focusFlag, update);
},
clickRow : function(x, update) {
this.mdFlag = "row";
var ss = this.spreadsheet;
var rows = ss.ds.data.rows;
var y = ss.freezeRange.col.start;
while (rows[x] && rows[x][y]) {
var wrap = rows[x][y].wrap;
if (wrap) {
y = wrap.maxy + 1;
} else {
break;
}
}
this.handleFocus(x, y, null, update);
},
clickCol : function(y, update) {
this.mdFlag = "col";
var ss = this.spreadsheet;
var rows = ss.ds.data.rows;
var x = ss.freezeRange.row.start;
while (rows[x] && rows[x][y]) {
var wrap = rows[x][y].wrap;
if (wrap) {
x = wrap.maxx + 1;
} else {
break;
}
}
this.handleFocus(x, y, null, update);
},
transferFocus : function() {
if (!this.formulaEditing) {
var ss = this.spreadsheet;
ss.hfocus.focus.defer(1, ss.hfocus);
}
},
initColResize : function(pos, rEl) {
var ss = this.spreadsheet;
this.mdFlag = "col-resizer";
this.resizeColIndex = pos.y;
var cEl = ss.getCellEl(0, pos.y, this.posFlag);
var l = cEl.getRight() - ss.sview.getLeft();
ss.colline.setLeft(l);
ss.colline.dom.style.display = "";
this.resizeColWidth = cEl.getWidth();
},
initRowResize : function(pos, rEl) {
var ss = this.spreadsheet;
this.mdFlag = "row-resizer";
this.resizeRowIndex = pos.x;
var cEl = ss.getCellEl(pos.x, 0, this.posFlag);
var t = cEl.getBottom() - ss.sview.getTop();
ss.rowline.setTop(t);
ss.rowline.dom.style.display = "";
this.resizeRowHeight = cEl.getHeight();
},
initDragSplitRow : function() {
this.mdFlag = "drag-split-row";
var ss = this.spreadsheet;
if ("none" != ss.leftsplit.dom.style.display) {
ss.dragRowSpliter.setStyle("top", ss.leftsplit.getTop()
- ss.sview.getTop());
} else {
ss.dragRowSpliter
.setStyle("top", ss.cellHeight + ss.ypaddingOffset);
}
ss.dragRowSpliter.setWidth(ss.availWidth);
ss.dragRowSpliter.setStyle("display", "");
},
resetDragSplitRow : function(xy) {
delete this.mdFlag;
var ss = this.spreadsheet;
var ds = ss.ds;
var pos = ds.getSplitPosFromXY(xy[0], xy[1]);
var fr = ss.copyRange(ss.freezeRange), ofr = ss
.copyRange(ss.freezeRange), sr = ss.copyRange(ss.showRange);
var flag = 0 == fr.row.len;
fr.row.end = pos.r - 1;
if (0 > fr.row.end) {
fr.row.start = 1;
fr.row.end = 0;
fr.row.len = 0;
} else {
fr.row.len = fr.row.end - fr.row.start + 1;
}
if (flag) {
sr.row.start = fr.row.end + 1;
sr.row.len -= fr.row.len;
sr.row.end = sr.row.start + sr.row.len - 1;
}
var splitFlag = Ext.ss.common.Mask.copy(ss.splitFlag);
ss.cancelYSplit();
if (ss.splitFlag) {
ss.splitFlag.splitHeight = null;
}
ss.reSplitRange(fr, sr, true);
ds.fireEvent("splitchange", ofr, fr, splitFlag, ss.splitFlag);
ds.trace(feyaSoft.ss.lang.action_split_grid_change);
ss.dragRowSpliter.setStyle("display", "none");
},
initDragSplitCol : function() {
this.mdFlag = "drag-split-col";
var ss = this.spreadsheet;
if ("none" != ss.vsplittd.dom.style.display) {
ss.dragColSpliter.setStyle("left", ss.uppersplit.getLeft()
- ss.sview.getLeft());
} else {
ss.dragColSpliter.setStyle("left", ss.ylivescroller.getLeft()
- ss.sview.getLeft() - ss.SPLIT_BAR_SIZE);
}
ss.dragColSpliter.setHeight(ss.availHeight);
ss.dragColSpliter.setStyle("display", "");
},
resetDragSplitCol : function(xy) {
delete this.mdFlag;
var ss = this.spreadsheet;
var ds = ss.ds;
var pos = ds.getSplitPosFromXY(xy[0], xy[1]);
var fr = ss.copyRange(ss.freezeRange), ofr = ss
.copyRange(ss.freezeRange), sr = ss.copyRange(ss.showRange);
var flag = 0 == fr.col.len;
fr.col.end = pos.c - 1;
if (0 > fr.col.end) {
fr.col.start = 1;
fr.col.end = 0;
fr.col.len = 0;
} else {
fr.col.len = fr.col.end - fr.col.start + 1;
}
if (flag) {
sr.col.start = fr.col.end + 1;
sr.col.len -= fr.col.len;
sr.col.end = sr.col.start + sr.col.len - 1;
}
var splitFlag = Ext.ss.common.Mask.copy(ss.splitFlag);
ss.cancelXSplit();
ss.footerWidth = null;
if (ss.splitFlag) {
ss.splitFlag.splitWidth = null;
}
ss.reSplitRange(fr, sr, true);
ds.fireEvent("splitchange", ofr, fr, splitFlag, ss.splitFlag);
ds.trace(feyaSoft.ss.lang.action_split_grid_change);
ss.dragColSpliter.setStyle("display", "none");
},
initDragSplitCross : function() {
this.mdFlag = "drag-split-cross";
var ss = this.spreadsheet;
ss.dragRowSpliter.setStyle("top", ss.leftsplit.getTop()
- ss.sview.getTop());
ss.dragRowSpliter.setWidth(ss.availWidth);
ss.dragRowSpliter.setStyle("display", "");
ss.dragColSpliter.setStyle("left", ss.uppersplit.getLeft()
- ss.sview.getLeft());
ss.dragColSpliter.setHeight(ss.availHeight);
ss.dragColSpliter.setStyle("display", "");
},
resetDragSplitCross : function(xy) {
delete this.mdFlag;
var ss = this.spreadsheet;
var ds = ss.ds;
var pos = ds.getSplitPosFromXY(xy[0], xy[1]);
var fr = ss.copyRange(ss.freezeRange), ofr = ss
.copyRange(ss.freezeRange), sr = ss.copyRange(ss.showRange);
fr.row.end = pos.r - 1;
if (0 > fr.row.end) {
fr.row.start = 1;
fr.row.end = 0;
fr.row.len = 0;
} else {
fr.row.len = fr.row.end - fr.row.start + 1;
}
ss.cancelYSplit();
ss.cancelXSplit();
fr.col.end = pos.c - 1;
if (0 > fr.col.end) {
fr.col.start = 1;
fr.col.end = 0;
fr.col.len = 0;
} else {
fr.col.len = fr.col.end - fr.col.start + 1;
}
var splitFlag = Ext.ss.common.Mask.copy(ss.splitFlag);
ss.splitFlag = false;
ss.footerWidth = null;
ss.reSplitRange(fr, sr, true);
ds.fireEvent("splitchange", ofr, fr, splitFlag, ss.splitFlag);
ds.trace(feyaSoft.ss.lang.action_split_grid_change);
ss.dragRowSpliter.setStyle("display", "none");
ss.dragColSpliter.setStyle("display", "none");
},
onBodyMouseDownFn : function(e) {
if (0 != e.button) {
return;
}
var ss = this.spreadsheet;
var ds = ss.ds;
var target = e.getTarget();
var tgEl = Ext.get(target);
if (target.tagName.toUpperCase() == "A") {
return;
}
var xy = e.getXY();
if (tgEl.hasClass("x-spreadsheet-hsplit")
|| tgEl.hasClass("x-spreadsheet-vsplit-bar")) {
this.initDragSplitRow();
} else if (tgEl.hasClass("x-spreadsheet-vsplit")
|| tgEl.hasClass("x-spreadsheet-hsplit-bar")) {
this.initDragSplitCol();
} else if (tgEl.hasClass("x-spreadsheet-split-cross")) {
this.initDragSplitCross();
} else if (tgEl.hasClass("x-spreadsheet-select-cover-dot")) {
if (!ss.settings.readOnlyView) {
var pos = ds.getPosFromXY(xy[0], xy[1]);
if (pos) {
this.lastPosFlag = this.posFlag;
this.posFlag = this.whichRange(pos);
}
this.initAutoContenting();
}
} else {
this.resetAutoContenting();
var xlimit = ss.ylivescroller.getLeft();
var ylimit = ss.xlivescroller.getTop();
if (xy[0] <= xlimit && xy[1] <= ylimit) {
var pos = ds.getPosFromXY(xy[0], xy[1]);
if (pos) {
this.lastPosFlag = this.posFlag;
this.posFlag = this.whichRange(pos);
if (tgEl.hasClass("x-spreadsheet-col-resizer")) {
this.initColResize(pos, tgEl);
return;
}
if (tgEl.hasClass("x-spreadsheet-row-resizer")) {
this.initRowResize(pos, tgEl);
return;
}
if (!this.formulaEditing && 0 != pos.x * pos.y) {
this.transferFocus();
}
this.handleLeftClick(pos, undefined, undefined, e.ctrlKey);
}
}
}
},
initFormulaSelecting : function(nofocus, border) {
this.selectCoverBorder = border || "1px solid red";
this.borderWidth = 1;
this.formulaEditing = {
focusCell : Ext.apply({}, this.focusCell),
selectedStart : Ext.apply({}, this.selectedStart),
selectedEnd : Ext.apply({}, this.selectedEnd)
};
if (!nofocus) {
this.on("selectionchanged", this.updateFormulaForSelectionChange,
this);
var editor = this.spreadsheet.editor;
this.on("selectup", this.onFormulaSelectupFn, this);
var textCoverEl = Ext.get(this.getTextCover());
textCoverEl.un("blur", editor.onTextCoverBlurFn, editor);
}
},
selectLastFrginFormula : function(textcover) {
var posReg = this.spreadsheet.ds.posReg;
var formula = textcover.value;
var sindex, eindex, frg;
formula.replace(posReg, function(f) {
frg = f;
return f;
});
if (frg) {
sindex = formula.lastIndexOf(frg);
eindex = sindex + frg.length;
Ext.ss.common.Mask.setCaretPosition(textcover, eindex, eindex);
}
},
onFormulaSelectupFn : function() {
var ss = this.spreadsheet;
var len = ss.focusObj.value.length;
var pos = len;
if (false != Ext.type(ss.cachedCursorPos)) {
pos = ss.cachedCursorPos;
}
Ext.ss.common.Mask.setCaretPosition(ss.focusObj, pos, pos);
delete ss.cachedCursorPos;
},
updateFormulaForSelectionChange : function(selectedStart, selectedEnd,
spos, epos, ctrlKey) {
this.updateFormulaRange(ctrlKey);
},
updateFormulaRange : function(notReplace) {
var ss = this.spreadsheet;
var ds = ss.ds;
var textCover = this.getTextCover();
var pos = textCover.pos || {
sheetIndex : ds.activeSheet
};
this.adjustSelected();
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
var str = "";
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
} else if (0 == minx && 0 == maxx) {
str = ds.getLetter(miny) + ":" + ds.getLetter(maxy);
} else if (0 == miny && 0 == maxy) {
str = minx + ":" + maxx;
} else {
var mins = ds.getLetter(miny) + minx;
var maxs = ds.getLetter(maxy) + maxx;
if (mins != maxs) {
str = mins + ":" + maxs;
} else {
str = mins;
}
}
if (pos.sheetIndex != ds.activeSheet) {
var sheetName = ds.sheets[ds.activeSheet].name;
str = sheetName + "!" + str;
}
textCover.where = "db";
str = ss.updateLastFormulaDataRange(str, notReplace);
ss.sysFocusObj(str);
},
sysTextCover : function(text) {
var ss = this.spreadsheet, editor = ss.editor;
var textCover = this.getTextCover();
textCover.value = text;
var textCoverEl = Ext.get(textCover);
editor.autosizeTextArea(textCoverEl);
},
resetFormulaSelecting : function(nofocus) {
this.selectCoverBorder = "3px solid black";
this.borderWidth = 3;
if (this.formulaEditing) {
this.focusCell = Ext.apply({}, this.formulaEditing.focusCell);
this.selectedStart = Ext.apply({},
this.formulaEditing.selectedStart);
this.selectedEnd = Ext.apply({}, this.formulaEditing.selectedEnd);
delete this.formulaEditing;
}
if (!nofocus) {
this.un("selectionchanged", this.updateFormulaForSelectionChange,
this);
var editor = this.spreadsheet.editor;
this.un("selectup", this.onFormulaSelectupFn, this);
var textCoverEl = Ext.get(this.getTextCover());
textCoverEl.on("blur", editor.onTextCoverBlurFn, editor);
this.fireEvent("renderborder");
}
},
initAutoContenting : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
this.autoContentFlag = rt;
var sls = rt.minPos, sle = rt.maxPos;
var rows = ds.data.rows;
if (0 == sls.x && 0 == sls.y && 0 == sle.x && 0 == sle.y) {
this.mdFlag = "all";
} else if (0 == sls.x && 0 == sle.x) {
this.mdFlag = "col";
} else if (0 == sls.y && 0 == sle.y) {
this.mdFlag = "row";
} else {
this.mdFlag = "cell";
}
this.selectCoverBorder = "3px dashed black";
this.borderWidth = 3;
var spans = this.getXYSpan(rt.minPos, rt.maxPos);
if (spans) {
Ext.apply(this.autoContentFlag, spans);
}
},
checkAutoContentValid : function(minPos, maxPos, spans) {
spans = spans || this.getXYSpan(minPos, maxPos);
if (spans) {
var minx = spans.minx, miny = spans.miny, maxx = spans.maxx, maxy = spans.maxy;
if (false != Ext.type(minx)) {
if (0 != maxPos.x && !(minPos.x <= minx && maxPos.x >= maxx)
|| 0 != maxPos.y
&& !(minPos.y <= miny && maxPos.y >= maxy)) {
return false;
}
}
}
return true;
},
getXYSpan : function(minPos, maxPos) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
if (0 == minPos.x && 0 == maxPos.x) {
var minx = false, miny = false, maxx = false, maxy = false;
for (var i in rows) {
i = Number(i);
var row = rows[i];
for (var j = minPos.y; j <= maxPos.y; j++) {
var cell = row[j];
if (cell && cell.wrap) {
if (false === minx) {
minx = cell.wrap.minx;
} else if (minx > cell.wrap.minx) {
minx = cell.wrap.minx;
}
if (false === maxx) {
maxx = cell.wrap.maxx;
} else if (maxx < cell.wrap.maxx) {
maxx = cell.wrap.maxx;
}
if (false === miny) {
miny = cell.wrap.miny;
} else if (miny > cell.wrap.miny) {
miny = cell.wrap.miny;
}
if (false === maxy) {
maxy = cell.wrap.maxy;
} else if (maxy < cell.wrap.maxy) {
maxy = cell.wrap.maxy;
}
}
}
}
if (false !== minx) {
return {
minx : minx,
maxx : maxx,
miny : miny,
maxy : maxy,
xSpan : maxx - minx + 1,
ySpan : maxy - miny + 1
};
}
} else if (0 == minPos.y && 0 == maxPos.y) {
var minx = false, miny = false, maxx = false, maxy = false;
for (var i = minPos.x; i <= maxPos.x; i++) {
var row = rows[i];
if (row) {
for (var j in row) {
var cell = row[j];
if (cell.wrap) {
if (false === minx) {
minx = cell.wrap.minx;
} else if (minx > cell.wrap.minx) {
minx = cell.wrap.minx;
}
if (false === maxx) {
maxx = cell.wrap.maxx;
} else if (maxx < cell.wrap.maxx) {
maxx = cell.wrap.maxx;
}
if (false === miny) {
miny = cell.wrap.miny;
} else if (miny > cell.wrap.miny) {
miny = cell.wrap.miny;
}
if (false === maxy) {
maxy = cell.wrap.maxy;
} else if (maxy < cell.wrap.maxy) {
maxy = cell.wrap.maxy;
}
}
}
}
}
if (false !== minx) {
return {
minx : minx,
maxx : maxx,
miny : miny,
maxy : maxy,
xSpan : maxx - minx + 1,
ySpan : maxy - miny + 1
};
}
} else {
var minx = false, miny = false, maxx = false, maxy = false;
for (var i = minPos.x; i <= maxPos.x; i++) {
var row = rows[i];
if (row) {
for (var j = maxPos.y; j <= maxPos.y; j++) {
var cell = row[j];
if (cell && cell.wrap) {
if (false === minx) {
minx = cell.wrap.minx;
} else if (minx > cell.wrap.minx) {
minx = cell.wrap.minx;
}
if (false === maxx) {
maxx = cell.wrap.maxx;
} else if (maxx < cell.wrap.maxx) {
maxx = cell.wrap.maxx;
}
if (false === miny) {
miny = cell.wrap.miny;
} else if (miny > cell.wrap.miny) {
miny = cell.wrap.miny;
}
if (false === maxy) {
maxy = cell.wrap.maxy;
} else if (maxy < cell.wrap.maxy) {
maxy = cell.wrap.maxy;
}
}
}
}
}
if (false !== minx) {
return {
minx : minx,
maxx : maxx,
miny : miny,
maxy : maxy,
xSpan : maxx - minx + 1,
ySpan : maxy - miny + 1
};
}
}
},
resetAutoContenting : function(flag) {
if (this.autoContentFlag) {
var ss = this.spreadsheet;
ss.maskUI(feyaSoft.ss.lang.processing);
(function () {
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var xSpan = this.autoContentFlag.xSpan, ySpan = this.autoContentFlag.ySpan;
if (!this.checkAutoContentValid(this.autoContentFlag.minPos,
this.autoContentFlag.maxPos, this.autoContentFlag)) {
Ext.Msg.alert(feyaSoft.ss.lang.hint,
feyaSoft.ss.lang.canNotChangePartMergedCell);
this.cacheSelectedData();
delete this.autoContentFlag;
this.selectCoverBorder = "3px solid black";
this.borderWidth = 3;
this.fireEvent("renderborder");
ss.unmaskUI();
return;
}
this.selectCoverBorder = "3px solid black";
this.borderWidth = 3;
var ss = this.spreadsheet, ds = ss.ds;
if (xSpan || ySpan) {
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
if (xSpan && 0 !== minx) {
maxx = Math.ceil((maxx - minx + 1) / xSpan) * xSpan
+ minx - 1;
}
if (ySpan && 0 !== miny) {
maxy = Math.ceil((maxy - miny + 1) / ySpan) * ySpan
+ miny - 1;
}
this.selectedStart = {
x : minx,
y : miny
};
this.selectedEnd = {
x : maxx,
y : maxy
};
rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
}
if (!this.checkAutoContentValid(rt.minPos, rt.maxPos)) {
Ext.Msg.alert(feyaSoft.ss.lang.hint,
feyaSoft.ss.lang.canNotChangePartMergedCell);
this.cacheSelectedData();
delete this.autoContentFlag;
this.selectCoverBorder = "3px solid black";
this.borderWidth = 3;
this.fireEvent("renderborder");
ss.unmaskUI();
return;
}
this.cacheSelectedData();
ds.doAutoContent(this.autoContentFlag.minPos,
this.autoContentFlag.maxPos,
this.autoContentFlag.minMaxRange, this.autoContentFlag);
this.fireEvent("renderborder");
this.showAutoFillOptions();
ss.unmaskUI();
delete this.autoContentFlag;
}).defer(100, this);
} else {
delete this.autoContentFlag;
}
},
cacheSelectedData : function() {
this.autoContentFlag.selectedData = this.getSelectedData();
var span = this.autoContentFlag.selectedData.span;
var rt = {
minPos : {
x : span.minx,
y : span.miny
},
maxPos : {
x : span.maxx,
y : span.maxy
}
};
this.autoContentFlag.minMaxRange = rt;
},
showAutoFillOptions : function() {
this.cacheAutoFill = Ext.apply({}, this.autoContentFlag);
var ss = this.spreadsheet, ds = ss.ds;
var freezed = ss.isFreezed();
var range = this.whichRange(this.selectedEnd);
var ct, x = this.selectedEnd.x, y = this.selectedEnd.y;
var width, height;
var fr = ss.freezeRange, sr = ss.showRange;
if ("left-top" == range) {
ct = ss.lhctInner;
width = ds.getSpanWidth(fr.col.start, y);
height = ds.getSpanHeight(fr.row.start, x);
} else if ("left" == range) {
ct = ss.lsctInner;
width = ds.getSpanWidth(fr.col.start, y);
height = ds.getSpanHeight(fr.row.end + 1, x);
} else if ("top" == range) {
ct = ss.hctInner;
width = ds.getSpanWidth(fr.col.end + 1, y);
height = ds.getSpanHeight(fr.row.start, x);
} else {
ct = ss.sctInner;
width = ds.getSpanWidth(fr.col.end + 1, y);
height = ds.getSpanHeight(fr.row.end + 1, x);
}
this.autoFillOptions.show();
this.autoFillOptions.menu.items.get(0).setChecked(true, true);
var el = this.autoFillOptions.getEl();
ct.appendChild(el);
var pct = ct.parent();
var left = width + 10, top = height + 10;
if (freezed) {
if (("left-top" == range || "left" == range)
&& left + 45 > pct.getWidth()) {
left = pct.getWidth() - 45;
}
if (("left-top" == range || "top" == range)
&& top + 25 > pct.getHeight()) {
top = pct.getHeight() - 25;
}
}
el.setLeft(left);
el.setTop(top);
},
whichRange : function(pos) {
var ss = this.spreadsheet;
var freezeRange = ss.freezeRange;
var x = pos.x, y = pos.y, lf = pos.lf, tf = pos.tf;
if (false != Ext.type(lf) && false != Ext.type(tf)) {
if (!lf && !tf) {
return "left-top";
} else if (!lf && tf) {
return "left";
} else if (lf && !tf) {
return "top";
} else {
return "showRange";
}
} else {
if (freezeRange.row.end < x && freezeRange.col.end < y) {
return "showRange";
}
if (freezeRange.row.end >= x && freezeRange.col.end >= y) {
return "left-top";
}
if (freezeRange.row.end < x && freezeRange.col.end >= y) {
return "left";
}
if (freezeRange.row.end >= x && freezeRange.col.end < y) {
return "top";
}
}
},
isEqualPos : function(o, t) {
if (o.x == t.x && o.y == t.y) {
return true;
} else {
return false;
}
},
checkSelectionChange : function(spos, epos, ctrlKey) {
var flag = false;
if (spos) {
if (!this.isEqualPos(spos, this.selectedStart)) {
flag = true;
}
}
if (!flag) {
if (epos) {
if (!this.isEqualPos(epos, this.selectedEnd)) {
flag = true;
}
}
}
if (flag) {
this.fireEvent("selectionchanged", this.selectedStart,
this.selectedEnd, spos, epos, ctrlKey);
}
return flag;
},
handleLeftClick : function(pos, muFlag, update, ctrlKey) {
var ss = this.spreadsheet, ds = ss.ds;
var x = pos.x;
var y = pos.y;
if (0 == x && 0 == y && this.formulaEditing) {
return;
}
this.mdFlag = null;
var spos = Ext.apply({}, this.selectedStart);
var epos = Ext.apply({}, this.selectedEnd);
this.selectedStart = Ext.apply({}, pos);
this.selectedEnd = Ext.apply({}, pos);
var flag = this.checkSelectionChange(spos, epos, ctrlKey);
if (0 === x && 0 === y) {
this.clickAll(update);
} else if (0 === y) {
this.clickRow(x, update);
} else if (0 === x) {
this.clickCol(y, update);
} else {
if (!this.formulaEditing) {
this.focusCell = Ext.apply({}, pos);
this.adjustFocused();
} else {
this.adjustSelected();
}
this.clickCell(x, y, true, update);
}
if (muFlag) {
this.mdFlag = "contextmenu";
}
if (flag || this.lastPosFlag != this.posFlag) {
this.fireEvent("renderborder");
}
if (this.formulaEditing && !flag) {
var fc = this.formulaEditing.focusCell;
if (fc.x != x || fc.y != y) {
this.updateFormulaRange.defer(10, this, [true, undefined,
undefined, ctrlKey]);
}
} else {
this.fireEvent("focuschange", this.focusCell, this.spreadsheet,
this);
}
},
resetSelections : function() {
this.focusCell = {
x : 1,
y : 1
};
this.selectedStart = {
x : 1,
y : 1
};
this.selectedEnd = {
x : 1,
y : 1
};
var ds = this.spreadsheet.ds;
var row = ds.data.rows[1];
if (row) {
var cell = row[1];
if (cell && cell.wrap) {
this.selectedStart = {
x : cell.wrap.minx,
y : cell.wrap.miny
};
this.selectedEnd = {
x : cell.wrap.maxx,
y : cell.wrap.maxy
};
}
}
},
isSelected : function(x, y) {
if (this.selectedStart && this.selectedEnd) {
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 === minx && 0 === maxx && miny <= y && y <= maxy) {
return true;
}
if (0 === miny && 0 === maxy && minx <= x && x <= maxx) {
return true;
}
if (minx <= x && x <= maxx && miny <= y && y <= maxy) {
return true;
}
}
return false;
},
getSelectedRange : function() {
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
return {
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy
};
},
getSelectedData : function(convertFlag) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows, rs = ds.data.rowSetting, cs = ds.data.colSetting;
var data = {}, rowSetting = {}, colSetting = {}, flag = "all";
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
Ext.apply(data, rows);
return {
flag : flag,
span : {
minx : 1,
miny : 1,
maxx : ds.data.rowNum - 1,
maxy : ds.data.colNum - 1
},
data : data
};
} else if (0 === minx && 0 === maxx) {
flag = "cols";
for (var p in rows) {
if (0 == p) {
continue;
}
var row = rows[p];
for (var j = miny; j <= maxy; j++) {
var cell = row[j];
if (cell) {
data[p] = data[p] || {};
data[p][j] = ds.deepClone(cell);
if (true == convertFlag && cell.data) {
data[p][j].data = ds.getConvertData(p, j, cell);
}
}
}
}
for (var j = miny; j <= maxy; j++) {
var col = cs[j];
if (col) {
colSetting[j] = Ext.apply({}, col);
}
}
} else if (0 === miny && 0 === maxy) {
flag = "rows";
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
data[i] = data[i] || {};
for (var q in row) {
var cell = row[q];
if (0 != q && cell) {
data[i][q] = data[i][q] || {};
data[i][q] = ds.deepClone(cell);
if (true == convertFlag && cell.data) {
data[i][q].data = ds.getConvertData(i, q, cell);
}
}
}
}
}
for (var i = minx; i <= maxx; i++) {
var row = rs[i];
if (row) {
rowSetting[i] = Ext.apply({}, row);
}
}
} else {
flag = "cells";
for (var i = minx; i <= maxx; i++) {
var row = rows[i] || {};
for (var j = miny; j <= maxy; j++) {
var cell = row[j] || {};
data[i] = data[i] || {};
data[i][j] = ds.deepClone(cell);
if (true == convertFlag && cell.data) {
data[i][j].data = ds.getConvertData(i, j, cell);
}
}
}
}
return {
flag : flag,
span : {
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy
},
data : data,
rowSetting : rowSetting,
colSetting : colSetting
};
},
clearRange : function(minx, miny, maxx, maxy, stop) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
if (0 == minx && 0 == maxx) {
for (var p in rows) {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("datachange", p, j, "");
}
}
} else if (0 == miny && 0 == maxy) {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
for (var p in row) {
ds.fireEvent("datachange", i, p, "");
}
}
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("datachange", i, j, "");
}
}
}
if (!stop) {
ss.renderRange(ss.freezeRange, ss.showRange, false, true);
}
},
clearSelectedData : function() {
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
this.clearRange(minx, miny, maxx, maxy);
},
clearFormatRange : function(minx, miny, maxx, maxy, clearAll, stop) {
var ss = this.spreadsheet;
var ds = ss.ds;
var rows = ds.data.rows;
if (0 == minx && 0 == maxx) {
for (var p in rows) {
var row = rows[p];
for (var j = miny; j <= maxy; j++) {
var cell = row[j] || {};
if (clearAll) {
ds.fireEvent("cellchange", p, j, {});
} else {
ds.fireEvent("cellchange", p, j, {
data : cell.data
});
}
}
}
if (1 < miny) {
var j = miny - 1;
for (var p in rows) {
var row = rows[p];
var cell = row[j] || {};
if (cell.br) {
ds.fireEvent("attributechange", p, j, [["br", ""]]);
}
}
}
} else if (0 == miny && 0 == maxy) {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
for (var p in row) {
var cell = row[p] || {};
if (clearAll) {
ds.fireEvent("cellchange", i, p, {});
} else {
ds.fireEvent("cellchange", i, p, {
data : cell.data
});
}
}
}
if (1 < minx) {
var i = minx - 1;
var row = rows[i];
for (var p in row) {
var cell = row[p] || {};
if (cell.bb) {
ds.fireEvent("attributechange", i, p, [["bb", ""]]);
}
}
}
} else {
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
var brow = rows[i + 1];
for (var j = miny; j <= maxy; j++) {
var cell = row[j] || {};
var bb = "";
if (i === maxx) {
var bcell = brow[j - 1] || {};
if (bcell.br) {
bb = cell.bb;
}
}
var br = "";
if (j === maxy) {
var rrow = rows[i - 1] || {};
var rcell = rrow[j + 1] || {};
if (rcell.bb) {
br = cell.br;
}
}
if (clearAll) {
ds.fireEvent("cellchange", i, j, {
bb : bb,
br : br
});
} else {
ds.fireEvent("cellchange", i, j, {
data : cell.data,
bb : bb,
br : br
});
}
}
}
if (1 < minx) {
var i = minx - 1;
var row = rows[i];
for (var j = miny; j <= maxy; j++) {
var cell = row[j] || {};
var bcell = row[j - 1] || {};
if (cell.bb && !(cell.br && bcell.br)) {
ds.fireEvent("attributechange", i, j, [["bb", ""]]);
}
}
}
if (1 < miny) {
var j = miny - 1;
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
var cell = row[j] || {};
if (cell.br && !cell.bb) {
ds.fireEvent("attributechange", i, j, [["br", ""]]);
}
}
}
}
}
if (!stop) {
ss.renderRange(ss.freezeRange, ss.showRange, false, true);
}
},
clearSelectedFormat : function() {
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
this.clearFormatRange(minx, miny, maxx, maxy);
},
clearSelectedAll : function() {
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
this.clearFormatRange(minx, miny, maxx, maxy, true);
},
stopProg : function(e) {
e.stopPropagation();
},
createBorder : function() {
var ss = this.spreadsheet;
this.brushEl = Ext.DomHelper.append(document.body,
"",
true);
this.ufixedLefterCover = document.getElementById(ss.id
+ "-x-spreadsheet-upper-fixed-lefter-cover");
this.lfixedHeaderCover = document.getElementById(ss.id
+ "-x-spreadsheet-left-fixed-header-cover");
this.fixedHeaderCover = document.getElementById(ss.id
+ "-x-spreadsheet-fixed-header-cover");
this.fixedLefterCover = document.getElementById(ss.id
+ "-x-spreadsheet-fixed-lefter-cover");
this.fixedSelectCover = document.getElementById(ss.id
+ "-x-spreadsheet-fixed-select-cover");
this.ltfixedSelectCover = document.getElementById(ss.id
+ "-x-spreadsheet-fixed-left-top-select-cover");
this.tfixedSelectCover = document.getElementById(ss.id
+ "-x-spreadsheet-fixed-top-select-cover");
this.lfixedSelectCover = document.getElementById(ss.id
+ "-x-spreadsheet-fixed-left-select-cover");
this.fheaderCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-header-cover");
this.flefterCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-lefter-cover");
this.headerCover = document.getElementById(ss.id
+ "-x-spreadsheet-header-cover");
this.lefterCover = document.getElementById(ss.id
+ "-x-spreadsheet-lefter-cover");
this.lfrdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-row-left-dot");
this.lfrselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-row-left-select-cover");
this.frdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-row-dot");
this.frselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-row-select-cover");
this.frselectCoverEl = Ext.get(this.frselectCover);
this.lrdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-row-left-dot");
this.lrselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-row-left-select-cover");
this.rdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-row-dot");
this.rselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-row-select-cover");
this.rselectCoverEl = Ext.get(this.rselectCover);
this.ufcdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-col-upper-dot");
this.ufcselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-col-upper-select-cover");
this.fcdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-col-dot");
this.fcselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-freeze-col-select-cover");
this.fcselectCoverEl = Ext.get(this.fcselectCover);
this.ucdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-col-upper-dot");
this.ucselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-col-upper-select-cover");
this.cdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-col-dot");
this.cselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-col-select-cover");
this.cselectCoverEl = Ext.get(this.cselectCover);
this.lhdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-lh-dot");
this.lhselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-lh-select-cover");
this.lhselectCoverEl = Ext.get(this.lhselectCover);
this.lhfocusCover = document.getElementById(ss.id
+ "-x-spreadsheet-lh-focus-cover");
this.lhfocusCoverEl = Ext.get(this.lhfocusCover);
this.ldotCover = document.getElementById(ss.id
+ "-x-spreadsheet-left-dot");
this.lselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-left-select-cover");
this.lselectCoverEl = Ext.get(this.lselectCover);
this.lfocusCover = document.getElementById(ss.id
+ "-x-spreadsheet-left-focus-cover");
this.lfocusCoverEl = Ext.get(this.lfocusCover);
this.hdotCover = document.getElementById(ss.id
+ "-x-spreadsheet-header-dot");
this.hselectCover = document.getElementById(ss.id
+ "-x-spreadsheet-header-select-cover");
this.hselectCoverEl = Ext.get(this.hselectCover);
this.hfocusCover = document.getElementById(ss.id
+ "-x-spreadsheet-header-focus-cover");
this.hfocusCoverEl = Ext.get(this.hfocusCover);
this.dotCover = document.getElementById(ss.id + "-x-spreadsheet-dot");
this.selectCover = document.getElementById(ss.id
+ "-x-spreadsheet-select-cover");
this.selectCoverEl = Ext.get(this.selectCover);
this.focusCover = document.getElementById(ss.id
+ "-x-spreadsheet-focus-cover");
this.focusCoverEl = Ext.get(this.focusCover);
this.textCover = document.getElementById(ss.id
+ "-x-spreadsheet-text-cover");
this.textCoverEl = Ext.get(this.textCover);
this.textCoverEl.un("mousedown", this.stopProg, this);
this.textCoverEl.on("mousedown", this.stopProg, this);
this.textCoverEl.swallowEvent("dblclick", true);
this.focusCoverEl.un("mouseover", this.onFocusCoverMouseOverFn, this);
this.focusCoverEl.un("click", this.onFocusCoverClickFn, this);
this.focusCoverEl.on("mouseover", this.onFocusCoverMouseOverFn, this);
this.focusCoverEl.on("click", this.onFocusCoverClickFn, this);
this.lhfocusCoverEl.un("mouseover", this.onFocusCoverMouseOverFn, this);
this.lhfocusCoverEl.un("click", this.onFocusCoverClickFn, this);
this.lhfocusCoverEl.on("mouseover", this.onFocusCoverMouseOverFn, this);
this.lhfocusCoverEl.on("click", this.onFocusCoverClickFn, this);
this.lfocusCoverEl.un("mouseover", this.onFocusCoverMouseOverFn, this);
this.lfocusCoverEl.un("click", this.onFocusCoverClickFn, this);
this.lfocusCoverEl.on("mouseover", this.onFocusCoverMouseOverFn, this);
this.lfocusCoverEl.on("click", this.onFocusCoverClickFn, this);
this.hfocusCoverEl.un("mouseover", this.onFocusCoverMouseOverFn, this);
this.hfocusCoverEl.un("click", this.onFocusCoverClickFn, this);
this.hfocusCoverEl.on("mouseover", this.onFocusCoverMouseOverFn, this);
this.hfocusCoverEl.on("click", this.onFocusCoverClickFn, this);
},
onFocusCoverMouseOverFn : function(e) {
var ss = this.spreadsheet;
var ds = ss.ds;
var x = this.focusCell.x, y = this.focusCell.y;
var row = ds.data.rows[x];
var flag;
if (row) {
var cell = row[y];
if (cell && cell.data) {
flag = Ext.ss.common.Mask.isLink(cell.data);
if (flag) {
this.focusCoverEl.setStyle("cursor", "pointer");
}
}
}
if (!flag) {
this.focusCoverEl.setStyle("cursor", "");
}
},
onFocusCoverClickFn : function(e) {
var ss = this.spreadsheet;
var ds = ss.ds;
var x = this.focusCell.x, y = this.focusCell.y;
var row = ds.data.rows[x];
if (row) {
var cell = row[y];
if (cell && cell.data) {
var o = Ext.ss.common.Helper.unwrapLink(cell.data);
if (o.flag) {
window.location = o.url;
}
}
}
},
hideBorder : function() {
this.ufixedLefterCover.style.display = "none";
this.lfixedHeaderCover.style.display = "none";
this.fixedLefterCover.style.display = "none";
this.fixedHeaderCover.style.display = "none";
this.fixedSelectCover.style.display = "none";
this.ltfixedSelectCover.style.display = "none";
this.tfixedSelectCover.style.display = "none";
this.lfixedSelectCover.style.display = "none";
this.frselectCover.style.display = "none";
this.frdotCover.style.display = "none";
this.lfrselectCover.style.display = "none";
this.lfrdotCover.style.display = "none";
this.flefterCover.style.display = "none";
this.lrselectCover.style.display = "none";
this.lrdotCover.style.display = "none";
this.rselectCover.style.display = "none";
this.rdotCover.style.display = "none";
this.lefterCover.style.display = "none";
this.ufcselectCover.style.display = "none";
this.ufcdotCover.style.display = "none";
this.fcselectCover.style.display = "none";
this.fcdotCover.style.display = "none";
this.fheaderCover.style.display = "none";
this.ucselectCover.style.display = "none";
this.ucdotCover.style.display = "none";
this.cselectCover.style.display = "none";
this.cdotCover.style.display = "none";
this.headerCover.style.display = "none";
this.lhselectCover.style.display = "none";
this.lhdotCover.style.display = "none";
this.lselectCover.style.display = "none";
this.ldotCover.style.display = "none";
this.hselectCover.style.display = "none";
this.hdotCover.style.display = "none";
this.selectCover.style.display = "none";
this.dotCover.style.display = "none";
if (!this.formulaEditing) {
this.lhfocusCover.style.display = "none";
this.lfocusCover.style.display = "none";
this.hfocusCover.style.display = "none";
this.focusCover.style.display = "none";
}
},
renderBorder : function() {
var ss = this.spreadsheet;
if (ss.settings.readOnlyView) {
return;
}
this.hideBorder();
var fr = ss.freezeRange, sr = ss.showRange;
var ds = ss.ds;
this.recheckPos();
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var span = ds.getVisiableSpan(rt.minPos.x, rt.minPos.y, rt.maxPos.x,
rt.maxPos.y);
var minx = span.minx, miny = span.miny, maxx = span.maxx, maxy = span.maxy;
var fltx, flty, frbx, frby, ltx, lty, rbx, rby, sl, st, ltflag, lflag, tflag, sflag;
fltx = ds.getColDistance(fr.col.start, miny, "before");
frbx = ds.getColDistance(fr.col.start, maxy);
flty = ds.getRowDistance(fr.row.start, minx, "before");
frby = ds.getRowDistance(fr.row.start, maxx);
ltx = ds.getColDistance(sr.col.start, miny, "before");
rbx = ds.getColDistance(sr.col.start, maxy);
lty = ds.getRowDistance(sr.row.start, minx, "before");
rby = ds.getRowDistance(sr.row.start, maxx);
if (ss.splitFlag) {
ltflag = "left-top";
lflag = "left";
tflag = "top";
sflag = "showRange";
} else if (ss.freezeFlag) {
ltflag = this.whichRange({
x : minx - 1,
y : miny - 1
});
lflag = this.whichRange({
x : maxx + 1,
y : miny - 1
});
tflag = this.whichRange({
x : minx - 1,
y : maxy + 1
});
sflag = this.whichRange({
x : maxx + 1,
y : maxy + 1
});
} else {
ltflag = "showRange";
lflag = "showRange";
tflag = "showRange";
sflag = "showRange";
}
var posFlag = this.posFlag;
if (0 == minx && 0 == miny && 0 == maxx && 0 == maxy) {
this.borderFlag = {
lflag : true,
rflag : false,
tflag : true,
bflag : false
};
if (0 != fr.row.len && 0 != fr.col.len) {
sl = ss.lhct.dom.scrollLeft, st = ss.lhct.dom.scrollTop;
this.updateFocusCover(this.lhfocusCover, sl, st, fr, fr);
} else if (0 != fr.col.len) {
sl = ss.lsct.dom.scrollLeft, st = ss.lsct.dom.scrollTop;
this.updateFocusCover(this.lfocusCover, sl, st, sr, fr);
} else if (0 != fr.row.len) {
sl = ss.hct.dom.scrollLeft, st = ss.hct.dom.scrollTop;
this.updateFocusCover(this.hfocusCover, sl, st, fr, sr);
} else {
sl = ss.sct.dom.scrollLeft, st = ss.sct.dom.scrollTop;
this.updateFocusCover(this.focusCover, sl, st, sr, sr);
}
var lh = ss.lhscroller.getHeight(), lw = ss.lhscroller.getWidth();
var ut = ss.cellHeight + ss.ypaddingOffset, ub = lh
+ ss.yborderOffset, t, b;
t = lh;
if (ss.isRowSplit()) {
t += ss.SPLIT_BAR_SIZE;
}
b = ss.sh + t;
this.updateSelectedLefter(this.ufixedLefterCover, ut, ub, 0, 0);
this.updateSelectedLefter(this.fixedLefterCover, t, b, 0, 0);
var ll = ss.lcWidth + ss.xpaddingOffset, lr = lw + ss.xborderOffset, l, r;
l = lw;
if (ss.isColSplit()) {
l += ss.SPLIT_BAR_SIZE;
}
r = ss.sw + l;
this.updateSelectedHeader(this.lfixedHeaderCover, ll, lr, 0, 0);
this.updateSelectedHeader(this.fixedHeaderCover, l, r, 0, 0);
if (ss.splitFlag) {
this.updateSelectCover(ll, ut, lr, ub, this.ltfixedSelectCover,
0, 0);
this.updateSelectCover(l, ut, r, ub, this.tfixedSelectCover, 0,
0);
this.updateSelectCover(ll, t, lr, b, this.lfixedSelectCover, 0,
0);
this.updateSelectCover(l, t, r, b, this.fixedSelectCover, 0, 0);
} else {
this.updateSelectCover(ll, ut, r, b, this.fixedSelectCover, 0,
0);
}
} else if (0 == minx && 0 == maxx) {
this.borderFlag = {
lflag : true,
rflag : true,
tflag : false,
bflag : false
};
var lh = ss.lhscroller.getHeight();
var ut = ss.cellHeight + ss.ypaddingOffset, ub = lh
+ ss.yborderOffset, t, b;
t = lh;
if (ss.isRowSplit()) {
t += ss.SPLIT_BAR_SIZE;
}
b = ss.sh + t + ss.yborderOffset;
if ("left" == lflag || "left-top" == ltflag) {
sl = ss.fcolct.dom.scrollLeft, st = ss.fcolct.dom.scrollTop;
this.updateSelectCover(fltx, ut, frbx, ub, this.ufcselectCover,
sl, st);
this.updateSelectCover(fltx, t, frbx, b, this.fcselectCover,
sl, st);
}
if ("top" == tflag || "showRange" == sflag) {
sl = ss.colct.dom.scrollLeft, st = ss.colct.dom.scrollTop;
this.updateSelectCover(ltx, ut, rbx, ub, this.ucselectCover,
sl, st);
this.updateSelectCover(ltx, t, rbx, b, this.cselectCover, sl,
st);
}
if (!this.formulaEditing) {
this.updateDotCover(this.ufcdotCover);
this.updateDotCover(this.ucdotCover);
if (ss.splitFlag) {
this.updateDotCover(this.fcdotCover);
this.updateDotCover(this.cdotCover);
}
}
if ("left-top" == ltflag && "left-top" == posFlag) {
if (0 != fr.col.len && 0 != fr.row.len) {
sl = ss.lhct.dom.scrollLeft, st = ss.lhct.dom.scrollTop;
this.updateFocusCover(this.lhfocusCover, sl, st, fr, fr);
} else {
sl = ss.lsct.dom.scrollLeft, st = ss.lsct.dom.scrollTop;
this.updateFocusCover(this.lfocusCover, sl, st, sr, fr);
}
}
if ("left" == lflag && "left" == posFlag) {
sl = ss.lsct.dom.scrollLeft, st = ss.lsct.dom.scrollTop;
this.updateFocusCover(this.lfocusCover, sl, st, sr, fr);
}
if ("top" == tflag && "top" == posFlag) {
if (0 != fr.row.len) {
sl = ss.hct.dom.scrollLeft, st = ss.hct.dom.scrollTop;
this.updateFocusCover(this.hfocusCover, sl, st, fr, sr);
} else {
sl = ss.sct.dom.scrollLeft, st = ss.sct.dom.scrollTop;
this.updateFocusCover(this.focusCover, sl, st, sr, sr);
}
}
if ("showRange" == sflag && "showRange" == posFlag) {
sl = ss.sct.dom.scrollLeft, st = ss.sct.dom.scrollTop;
this.updateFocusCover(this.focusCover, sl, st, sr, sr);
}
if ("left" == lflag || "left-top" == ltflag) {
sl = ss.fcolct.dom.scrollLeft, st = ss.fcolct.dom.scrollTop;
this
.updateSelectedHeader(this.fheaderCover, fltx, frbx,
sl, st);
}
if ("top" == tflag || "showRange" == sflag) {
sl = ss.colct.dom.scrollLeft, st = ss.colct.dom.scrollTop;
this.updateSelectedHeader(this.headerCover, ltx, rbx, sl, st);
}
this.updateSelectedLefter(this.ufixedLefterCover, ut, ub, 0, 0);
this.updateSelectedLefter(this.fixedLefterCover, t, b, 0, 0);
} else if (0 == miny && 0 == maxy) {
this.borderFlag = {
lflag : false,
rflag : false,
tflag : true,
bflag : true
};
var lw = ss.lhscroller.getWidth();
var ll = ss.lcWidth + ss.xpaddingOffset, lr = lw + ss.xborderOffset, l, r;
l = lw;
if (ss.isColSplit()) {
l += ss.SPLIT_BAR_SIZE;
}
r = ss.sw + l + ss.xborderOffset;
if ("top" == tflag || "left-top" == ltflag) {
sl = ss.frowct.dom.scrollLeft, st = ss.frowct.dom.scrollTop;
this.updateSelectCover(ll, flty, lr, frby, this.lfrselectCover,
sl, st);
this.updateSelectCover(l, flty, r, frby, this.frselectCover,
sl, st);
}
if ("left" == lflag || "showRange" == sflag) {
sl = ss.rowct.dom.scrollLeft, st = ss.rowct.dom.scrollTop;
this.updateSelectCover(ll, lty, lr, rby, this.lrselectCover,
sl, st);
this.updateSelectCover(l, lty, r, rby, this.rselectCover, sl,
st);
}
if (!this.formulaEditing) {
this.updateDotCover(this.lfrdotCover);
this.updateDotCover(this.lrdotCover);
if (ss.splitFlag) {
this.updateDotCover(this.frdotCover);
this.updateDotCover(this.rdotCover);
}
}
if ("left-top" == ltflag && "left-top" == posFlag) {
if (0 != fr.col.len && 0 != fr.row.len) {
sl = ss.lhct.dom.scrollLeft, st = ss.lhct.dom.scrollTop;
this.updateFocusCover(this.lhfocusCover, sl, st, fr, fr);
} else {
sl = ss.hct.dom.scrollLeft, st = ss.hct.dom.scrollTop;
this.updateFocusCover(this.hfocusCover, sl, st, fr, sr);
}
}
if ("left" == lflag && "left" == posFlag) {
if (0 != fr.col.len) {
sl = ss.lsct.dom.scrollLeft, st = ss.lsct.dom.scrollTop;
this.updateFocusCover(this.lfocusCover, sl, st, sr, fr);
} else {
sl = ss.sct.dom.scrollLeft, st = ss.sct.dom.scrollTop;
this.updateFocusCover(this.focusCover, sl, st, sr, sr);
}
}
if ("top" == tflag && "top" == posFlag) {
sl = ss.hct.dom.scrollLeft, st = ss.hct.dom.scrollTop;
this.updateFocusCover(this.hfocusCover, sl, st, fr, sr);
}
if ("showRange" == sflag && "showRange" == posFlag) {
sl = ss.sct.dom.scrollLeft, st = ss.sct.dom.scrollTop;
this.updateFocusCover(this.focusCover, sl, st, sr, sr);
}
if ("left-top" == ltflag || "top" == tflag) {
sl = ss.frowct.dom.scrollLeft, st = ss.frowct.dom.scrollTop;
this
.updateSelectedLefter(this.flefterCover, flty, frby,
sl, st);
}
if ("left" == lflag || "showRange" == sflag) {
sl = ss.rowct.dom.scrollLeft, st = ss.rowct.dom.scrollTop;
this.updateSelectedLefter(this.lefterCover, lty, rby, sl, st);
}
this.updateSelectedHeader(this.lfixedHeaderCover, ll, lr, 0, 0);
this.updateSelectedHeader(this.fixedHeaderCover, l, r, 0, 0);
} else {
this.borderFlag = {
lflag : true,
rflag : true,
tflag : true,
bflag : true
};
if ("left-top" == ltflag) {
sl = ss.lhct.dom.scrollLeft, st = ss.lhct.dom.scrollTop;
this.updateBorder(fltx, flty, frbx, frby, this.lhfocusCover,
this.lhselectCover, this.lhdotCover, sl, st, fr, fr,
"left-top" == this.posFlag);
}
if ("left" == lflag) {
sl = ss.lsct.dom.scrollLeft, st = ss.lsct.dom.scrollTop;
this.updateBorder(fltx, lty, frbx, rby, this.lfocusCover,
this.lselectCover, this.ldotCover, sl, st, sr, fr,
"left" == this.posFlag);
}
if ("top" == tflag) {
sl = ss.hct.dom.scrollLeft, st = ss.hct.dom.scrollTop;
this.updateBorder(ltx, flty, rbx, frby, this.hfocusCover,
this.hselectCover, this.hdotCover, sl, st, fr, sr,
"top" == this.posFlag);
}
if ("showRange" == sflag) {
sl = ss.sct.dom.scrollLeft, st = ss.sct.dom.scrollTop;
this.updateBorder(ltx, lty, rbx, rby, this.focusCover,
this.selectCover, this.dotCover, sl, st, sr, sr,
"showRange" == this.posFlag);
}
if ("top" == tflag || "left-top" == ltflag) {
sl = ss.frowct.dom.scrollLeft, st = ss.frowct.dom.scrollTop;
this
.updateSelectedLefter(this.flefterCover, flty, frby,
sl, st);
}
if ("left" == lflag || "showRange" == sflag) {
sl = ss.rowct.dom.scrollLeft, st = ss.rowct.dom.scrollTop;
this.updateSelectedLefter(this.lefterCover, lty, rby, sl, st);
}
if ("left" == lflag || "left-top" == ltflag) {
sl = ss.fcolct.dom.scrollLeft, st = ss.fcolct.dom.scrollTop;
this
.updateSelectedHeader(this.fheaderCover, fltx, frbx,
sl, st);
}
if ("top" == tflag || "showRange" == sflag) {
sl = ss.colct.dom.scrollLeft, st = ss.colct.dom.scrollTop;
this.updateSelectedHeader(this.headerCover, ltx, rbx, sl, st);
}
}
if (this.formulaEditing) {
this.dotCover.style.display = "none";
this.dotCover.style.marginLeft = "-1000px";
this.dotCover.style.marginTop = "-1000px";
this.lhdotCover.style.display = "none";
this.lhdotCover.style.marginLeft = "-1000px";
this.lhdotCover.style.marginTop = "-1000px";
this.hdotCover.style.display = "none";
this.hdotCover.style.marginLeft = "-1000px";
this.hdotCover.style.marginTop = "-1000px";
this.ldotCover.style.display = "none";
this.ldotCover.style.marginLeft = "-1000px";
this.ldotCover.style.marginTop = "-1000px";
this.fcdotCover.style.display = "none";
this.fcdotCover.style.marginLeft = "-1000px";
this.fcdotCover.style.marginTop = "-1000px";
this.cdotCover.style.display = "none";
this.cdotCover.style.marginLeft = "-1000px";
this.cdotCover.style.marginTop = "-1000px";
this.lfrdotCover.style.display = "none";
this.lfrdotCover.style.marginLeft = "-1000px";
this.lfrdotCover.style.marginTop = "-1000px";
this.frdotCover.style.display = "none";
this.frdotCover.style.marginLeft = "-1000px";
this.frdotCover.style.marginTop = "-1000px";
}
},
updateSelectCover : function(ltx, lty, rbx, rby, selectCover, sl, st) {
ltx += sl;
lty += st;
rbx += sl;
rby += st;
var w = rbx - ltx - this.borderWidth, h = rby - lty - this.borderWidth;
var border = this.selectCoverBorder;
if (this.borderFlag.lflag) {
selectCover.style.borderLeft = border;
ltx -= Math.ceil(this.borderWidth / 2);
} else {
w += 1;
selectCover.style.borderLeft = "none";
}
if (this.borderFlag.tflag) {
selectCover.style.borderTop = border;
lty -= Math.ceil(this.borderWidth / 2);
} else {
h += 1;
selectCover.style.borderTop = "none";
}
if (this.borderFlag.rflag) {
selectCover.style.borderRight = border;
} else {
selectCover.style.borderRight = "none";
}
if (this.borderFlag.bflag) {
selectCover.style.borderBottom = border;
} else {
selectCover.style.borderBottom = "none";
}
selectCover.style.left = ltx + "px";
selectCover.style.top = lty + "px";
if (Number(w) && 0 < w) {
selectCover.style.width = w + "px";
}
if (Number(h) && 0 < h) {
selectCover.style.height = h + "px";
}
selectCover.style.display = "";
},
updateBorder : function(ltx, lty, rbx, rby, focuseCover, selectCover,
dotCover, sl, st, rr, cr, focusFlag) {
if (focusFlag) {
this.updateFocusCover(focuseCover, sl, st, rr, cr);
}
if (!this.formulaEditing) {
this.updateDotCover(dotCover);
}
this.updateSelectCover(ltx, lty, rbx, rby, selectCover, sl, st);
},
updateDotCover : function(dotCover) {
if (this.borderFlag.rflag && this.borderFlag.bflag) {
dotCover.style.left = "";
dotCover.style.top = "";
dotCover.style.right = "0px";
dotCover.style.bottom = "0px";
dotCover.style.marginLeft = "";
dotCover.style.marginTop = "";
dotCover.style.marginRight = "-5px";
dotCover.style.marginBottom = "-5px";
if (Ext.isIE) {
dotCover.style.overflow = "hidden";
}
dotCover.style.display = "";
} else if (this.borderFlag.rflag) {
if (0 == this.selectedStart.x && 0 == this.selectedEnd.x) {
if (Ext.isIE) {
if (!this.spreadsheet.splitFlag) {
dotCover = this.cdotCover;
}
dotCover.style.overflow = "hidden";
}
dotCover.style.left = "";
dotCover.style.top = "0px";
dotCover.style.right = "0px";
dotCover.style.bottom = "";
dotCover.style.marginLeft = "";
dotCover.style.marginTop = "-5px";
dotCover.style.marginRight = "-5px";
dotCover.style.marginBottom = "";
dotCover.style.display = "";
} else {
dotCover.style.display = "none";
}
} else if (this.borderFlag.bflag) {
if (0 == this.selectedStart.y && 0 == this.selectedEnd.y) {
if (Ext.isIE) {
if (!this.spreadsheet.splitFlag) {
dotCover = this.rdotCover;
}
dotCover.style.overflow = "hidden";
}
dotCover.style.left = "0px";
dotCover.style.top = "";
dotCover.style.right = "";
dotCover.style.bottom = "0px";
dotCover.style.marginLeft = "-5px";
dotCover.style.marginTop = "";
dotCover.style.marginRight = "";
dotCover.style.marginBottom = "-5px";
dotCover.style.display = "";
} else {
dotCover.style.display = "none";
}
} else {
dotCover.style.display = "none";
}
},
updateFocusCover : function(focusCover, sl, st, rr, cr) {
if (this.formulaEditing) {
return;
}
var ss = this.spreadsheet;
var ds = ss.ds;
var x = this.focusCell.x, y = this.focusCell.y;
var minx = x, miny = y, maxx = x, maxy = y;
var rows = ds.data.rows;
if (rows[x] && rows[x][y]) {
var wrap = rows[x][y].wrap;
if (wrap) {
minx = wrap.minx;
miny = wrap.miny;
maxx = wrap.maxx;
maxy = wrap.maxy;
}
}
var h = ds.getSpanHeight(minx, maxx), w = ds.getSpanWidth(miny, maxy);
var left = ds.getColDistance(cr.col.start, miny, "before") + sl;
var top = ds.getRowDistance(rr.row.start, minx, "before") + st;
if (!Ext.isIE) {
w -= 3;
h -= 3;
}
left -= 1;
top -= 1;
focusCover.style.left = left + "px";
focusCover.style.top = top + "px";
focusCover.style.width = w + "px";
focusCover.style.height = h + "px";
focusCover.style.display = "";
},
isInRange : function(pos) {
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var x = pos.x, y = pos.y;
if (sr.row.start <= x && sr.row.end >= x && sr.col.start <= y
&& sr.col.end >= y) {
return true;
}
if (fr.row.start <= x && fr.row.end >= x && fr.col.start <= y
&& fr.col.end >= y) {
return true;
}
if (fr.row.start <= x && fr.row.end >= x && sr.col.start <= y
&& sr.col.end >= y) {
return true;
}
if (sr.row.start <= x && sr.row.end >= x && fr.col.start <= y
&& fr.col.end >= y) {
return true;
}
return false;
},
updateSelectedHeader : function(headerCover, ltx, rbx, sl, st) {
if (!this.formulaEditing) {
if (0 == this.selectedStart.x && 0 == this.selectedEnd.x) {
if (headerCover.className != "x-spreadsheet-header-col-cover") {
headerCover.className = "x-spreadsheet-header-col-cover";
}
} else if (headerCover.className != "x-spreadsheet-header-cover") {
headerCover.className = "x-spreadsheet-header-cover";
}
headerCover.style.left = ltx + sl + "px";
var w = rbx - ltx;
if (headerCover.style.width != w && Number(w)) {
headerCover.style.width = w + "px";
}
headerCover.style.display = "";
}
},
updateSelectedLefter : function(lefterCover, lty, rby, sl, st) {
if (!this.formulaEditing) {
if (0 == this.selectedStart.y && 0 == this.selectedEnd.y) {
if (lefterCover.className != "x-spreadsheet-lefter-row-cover") {
lefterCover.className = "x-spreadsheet-lefter-row-cover";
}
} else if (lefterCover.className != "x-spreadsheet-lefter-cover") {
lefterCover.className = "x-spreadsheet-lefter-cover";
}
if (!lty) {
lty = 0;
}
lefterCover.style.top = lty + st + "px";
var h = rby - lty;
if (lefterCover.style.height != h && Number(h)) {
lefterCover.style.height = h + "px";
}
lefterCover.style.display = "";
}
},
onAfterResizeFn : function(p, x, y) {
if (this.selectedStart && this.selectedEnd) {
this.fireEvent("renderborder");
}
},
selectRange : function(focusCell, minPos, maxPos) {
this.focusCell = focusCell || this.focusCell;
this.selectedStart = minPos || this.selectedStart;
this.selectedEnd = maxPos || this.selectedEnd;
this.fireEvent("renderborder");
},
isContainHideCol : function() {
var ds = this.spreadsheet.ds;
var cs = ds.data.colSetting;
var rs = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var miny = rs.minPos.y, maxy = rs.maxPos.y;
var offset = ds.getVisibleColOffset(miny, 1);
if (0 == offset && 1 != miny) {
return true;
} else {
for (var j = miny; j <= maxy; j++) {
var c = cs[j];
if (!ds.isVisible(c)) {
return true;
}
}
}
},
isContainHideRow : function() {
var ds = this.spreadsheet.ds;
var rs = ds.data.rowSetting;
var rt = this.getMinMaxFromStartEnd(this.selectedStart,
this.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x;
var offset = ds.getVisibleRowOffset(minx, 1);
if (0 == offset && 1 != minx) {
return true;
} else {
for (var i = minx; i <= maxx; i++) {
var r = rs[i];
if (!ds.isVisible(r)) {
return true;
}
}
}
},
compareSelectionRange : function(o, t) {
var omin = o.minPos, omax = o.maxPos, tmin = t.minPos, tmax = t.maxPos;
var row = omin.x == tmin.x && omax.x == tmax.x;
var col = omin.y == tmin.y && omax.y == tmax.y;
if (row && col) {
return "all";
} else if (row) {
return "col";
} else if (col) {
return "row";
}
},
checkFormulaEditing : function(v, nofocus, border) {
var ss = this.spreadsheet;
var flag = false;
if (Ext.ss.common.Mask.isFormula(v)) {
flag = true;
}
if (!(flag && this.formulaEditing) && (flag || this.formulaEditing)) {
this.fireEvent("formulaeditingchanged", this.formulaEditing, flag,
nofocus, border);
return flag;
}
},
renderDataRangeOutBorder : function(range, br, bb, saveflag) {
br = br || "";
bb = bb || "";
var minx = range.minPos.x, miny = range.minPos.y, maxx = range.maxPos.x, maxy = range.maxPos.y;
var ss = this.spreadsheet;
var i = minx - 1, j;
for (j = miny; j <= maxy; j++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
Ext.get(els[k]).setStyle("border-bottom", bb);
}
}
}
j = miny - 1;
for (i = minx; i <= maxx; i++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
Ext.get(els[k]).setStyle("border-right", br);
}
}
}
i = maxx;
for (j = miny; j <= maxy; j++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
Ext.get(els[k]).setStyle("border-bottom", bb);
}
}
}
j = maxy;
for (i = minx; i <= maxx; i++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
Ext.get(els[k]).setStyle("border-right", br);
}
}
}
},
renderDataRangeFullBorder : function(range, br, bb, saveflag) {
br = br || "";
bb = bb || "";
var minx = range.minPos.x, miny = range.minPos.y, maxx = range.maxPos.x, maxy = range.maxPos.y;
var ss = this.spreadsheet;
var i = minx - 1, j;
for (j = miny; j <= maxy; j++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
Ext.get(els[k]).setStyle("border-bottom", bb);
}
}
}
j = miny - 1;
for (i = minx; i <= maxx; i++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
Ext.get(els[k]).setStyle("border-right", br);
}
}
}
for (i = minx; i <= maxx; i++) {
for (j = miny; j <= maxy; j++) {
var els = ss.getCellHEls(i, j);
if (els) {
for (var k = 0, len = els.length; k < len; k++) {
var El = Ext.get(els[k]);
El.setStyle("border-bottom", bb);
El.setStyle("border-right", br);
}
}
}
}
},
showDataRangeBorder : function(setting, flag, saveflag) {
var bb = "", br = "";
if (flag) {
bb = "1px solid blue";
br = "1px solid blue";
} else {
if (Ext.isIE) {
var ss = this.spreadsheet;
ss.renderRange();
return;
}
}
this.hideBorder();
var sposition = setting.series_position;
if ("row" == sposition) {
var nameRange, valueRange;
if (setting.rowCategories) {
nameRange = setting.rowCategories.data.name_range;
valueRange = setting.rowCategories.data.value_range;
}
if (!setting.col_label && nameRange && valueRange) {
if (nameRange.maxPos.y + 1 == valueRange.minPos.y) {
valueRange = Ext.applyIf({
minPos : nameRange.minPos
}, valueRange);
} else if (setting.row_label) {
this.renderDataRangeFullBorder(nameRange, br, bb, saveflag);
}
}
if (setting.row_label && valueRange) {
this.renderDataRangeFullBorder(valueRange, br, bb, saveflag);
}
for (var i = 0, len = setting.rowSeries.length; i < len; i++) {
var rd = setting.rowSeries[i];
nameRange = rd.data.name_range;
valueRange = rd.data.value_range;
if (nameRange) {
if (setting.col_label) {
this.renderDataRangeOutBorder(nameRange, br, bb,
saveflag);
} else {
if (nameRange.maxPos.y + 1 == valueRange.minPos.y) {
valueRange = Ext.applyIf({
minPos : nameRange.minPos
}, valueRange);
} else {
this.renderDataRangeOutBorder(nameRange, br, bb,
saveflag);
}
}
}
if (valueRange) {
this.renderDataRangeOutBorder(valueRange, br, bb, saveflag);
}
}
} else if ("col" == sposition) {
var nameRange, valueRange;
if (setting.colCategories) {
nameRange = setting.colCategories.data.name_range;
valueRange = setting.colCategories.data.value_range;
}
if (!setting.row_label && nameRange && valueRange) {
if (nameRange.maxPos.x + 1 == valueRange.minPos.x) {
valueRange = Ext.applyIf({
minPos : nameRange.minPos
}, valueRange);
} else if (setting.col_label) {
this.renderDataRangeFullBorder(nameRange, br, bb, saveflag);
}
}
if (setting.col_label && valueRange) {
this.renderDataRangeFullBorder(valueRange, br, bb, saveflag);
}
for (var i = 0, len = setting.colSeries.length; i < len; i++) {
var rd = setting.colSeries[i];
nameRange = rd.data.name_range;
valueRange = rd.data.value_range;
if (nameRange) {
if (setting.row_label) {
this.renderDataRangeOutBorder(nameRange, br, bb,
saveflag);
} else {
if (nameRange.maxPos.x + 1 == valueRange.minPos.x) {
valueRange = Ext.applyIf({
minPos : nameRange.minPos
}, valueRange);
} else {
this.renderDataRangeOutBorder(nameRange, br, bb,
saveflag);
}
}
}
if (valueRange) {
this.renderDataRangeOutBorder(valueRange, br, bb, saveflag);
}
}
}
},
showDataRangeBorder : function(span, flag, saveflag) {
var ds = this.spreadsheet.ds;
var bb = "", br = "";
if (flag) {
bb = "1px solid blue";
br = "1px solid blue";
} else {
if (Ext.isIE) {
var ss = this.spreadsheet;
ss.renderRange();
return;
}
}
this.hideBorder();
for (var i = 0, len = span.length; i < len; i++) {
var it = span[i];
if (it.sheetIndex == ds.activeSheet) {
this.renderDataRangeFullBorder({
minPos : {
x : it.x,
y : it.y
},
maxPos : {
x : it.ex,
y : it.ey
}
}, br, bb, saveflag);
}
}
},
getTextCover : function() {
return this.textCover;
},
getFocusCover : function() {
if ("left-top" == this.posFlag) {
return this.lhfocusCover;
} else if ("left" == this.posFlag) {
return this.lfocusCover;
} else if ("top" == this.posFlag) {
return this.hfocusCover;
} else {
return this.focusCover;
}
},
findFocusCover : function() {
var ss = this.spreadsheet;
if (!ss.splitFlag) {
var posFlag = this.posFlag;
this.posFlag = this.whichRange(this.focusCell);
if (posFlag != this.posFlag) {
this.fireEvent("renderborder");
}
}
return this.getFocusCover();
},
fillStyleContent : function() {
var ss = this.spreadsheet, ds = ss.ds;
var cache = this.cacheAutoFill, span = cache.selectedData.span;
var rt = cache.minMaxRange;
cache.flag = "stylecontent";
ds.doAutoContent(cache.minPos, cache.maxPos, rt, cache);
},
fillOnlyStyle : function() {
var ss = this.spreadsheet, ds = ss.ds;
var cache = this.cacheAutoFill, span = cache.selectedData.span;
var rt = cache.minMaxRange;
cache.flag = "style";
ds.doAutoContent(cache.minPos, cache.maxPos, rt, cache);
},
fillOnlyContent : function() {
var ss = this.spreadsheet, ds = ss.ds;
var cache = this.cacheAutoFill, span = cache.selectedData.span;
var rt = cache.minMaxRange;
cache.flag = "content";
ds.doAutoContent(cache.minPos, cache.maxPos, rt, cache);
},
fillCopyCell : function() {
var ss = this.spreadsheet, ds = ss.ds;
var cache = this.cacheAutoFill, span = cache.selectedData.span;
var rt = cache.minMaxRange;
cache.flag = "copy";
ds.doAutoContent(cache.minPos, cache.maxPos, rt, cache);
}
});
Ext.ns("Ext.ss");
/**Sheet的定义*/
Ext.ss.SpreadSheet = Ext.extend(Ext.Panel, {
settings : {},
zoom : 1,
dataStore:null,
maskDisabled : true,
freezeRange : {
row : {
start : 1,
end : 0,
len : 0
},
col : {
start : 1,
end : 0,
len : 0
}
},
showRange : {
row : {
start : 1,
end : 20,
len : 20
},
col : {
start : 1,
end : 12,
len : 12
}
},
cls : "x-spreadsheet-ct",
MAX_PIXEL : 10000000,
SPLIT_BAR_SIZE : 6,
resizerCache : {},
footerToolWidth : 86,
footerWidth : 500,
lineHeight : 13,
xborderOffset : 1,
xpaddingOffset : 7,
yborderOffset : 1,
ypaddingOffset : 7,
maxhfNum : 10,
maxlfNum : 8,
lastPosx : 27,
lastPosy : 101,
xScrollOffset : Ext.isChrome ? 40 : 10,
yScrollOffset : Ext.isChrome ? 40 : 18,
requestQueue : null,
loadMask : true,
autoOffset : 1,
rowInc : 3,
colInc : 2,
hselectedColor : "rgb(255,215,166)",
freezeColor : "rgb(242,242,242)",
selectedColor : "#B8CFEE",
fixColor : "rgb(241,238,209)",
fbColor : "gray",
fzColor : "#c3daf9",
ddGroup : "x-spreadsheet-dd",
editorMaxWidth : 400,
editorMaxHeight : 300,
scrollOffset : 18,
border : false,
lfWidth : 7,
hfHeight : 7,
rowNum : 101,
colNum : 27,
cellWidth : 100,
cellHeight : 13,
lcWidth : 35,
selectedSet : {},
selectedHdSet : {},
cssSet : {},
getCellCode : function(pos) {
var code = this.ds.getLetter(pos.y);
code += pos.x;
return code;
},
/**f(x)*/
generateTopBar : function() {
var lan_ss = feyaSoft.ss.lang;
var lan_common = feyaSoft.lang.common;
this.undoList = new Ext.ss.DoList({
defaultDisplay : lan_ss.no_action
});
this.undoList.on("mouseover", this.onUndoMouseOverFn, this);
this.undoList.on("beforeshow", this.onUndoBefroeShowFn, this);
this.redoList = new Ext.ss.DoList({
defaultDisplay : lan_ss.no_action
});
this.redoList.on("mouseover", this.onRedoMouseOverFn, this);
this.redoList.on("beforeshow", this.onRedoBefroeShowFn, this);
this.undoBtn = new Ext.SplitButton({
disabled : true,
iconCls : "icon_undo",
tooltip : "撤销",
menu : this.undoList,
handler : this.onUndoFn,
scope : this
});
this.redoBtn = new Ext.SplitButton({
disabled : true,
iconCls : "icon_redo",
tooltip : "重做",
menu : this.redoList,
handler : this.onRedoFn,
scope : this
});
this.stateField = new Ext.form.TextField({
width:100,
readOnly : true,
style : "text-align:center;"
});
this.searchField=new Ext.ux.form.SearchField({
fieldLabel:'数据集',
width : 150,
name:'ds_tablename',
id:'ds_tablename',
onTrigger1Click :this.onTrigger1Click.createDelegate(this),
onTrigger2Click :this.onTrigger2Click.createDelegate(this)
});
this.hideField=new Ext.form.TextField({
hidden:true,
name:'ds_id',
id:'ds_id',
readOnly : true,
style : "text-align:center;"
});
this.fxField = new Ext.form.TextArea({
width:850,
height : 20,
enableKeyEvents : true
});
this.fxField.un("keydown", this.onFxKeydownFn, this);
this.fxField.un("focus", this.onFxFocusFn, this);
this.fxField.un("blur", this.onFxBlurFn, this);
this.fxField.on("keydown", this.onFxKeydownFn, this);
this.fxField.on("focus", this.onFxFocusFn, this);
this.fxField.on("blur", this.onFxBlurFn, this);
this.aboutBtn = new Ext.Button({
iconCls : "icon_feyasoft",
text : "About FeyaSoft MySpreadsheet",
handler : this.onAboutFn,
scope : this
});
this.expandBtn = new Ext.Button({
iconCls : "icon_expand",
handler : this.toggleFx,
scope : this
});
this.fxLabel = new Ext.form.Label({
html : ""
});
this.searchLabel = new Ext.form.Label({
html : "数据集
"
});
this.tbar = new Ext.Toolbar({
hidden : this.settings.readOnlyView,
layoutConfig : {
lastOverflow : true
},
enableOverflow : false,
items : [this.undoBtn, this.redoBtn, "-", this.stateField,
"-",this.searchLabel,this.searchField,"-",this.fxLabel, this.fxField, this.expandBtn,this.hideField]
});
},
toggleFx : function(btn) {
if ("icon_expand" == btn.iconCls) {
btn.setIconClass("icon_collapse");
this.fxField.setHeight(50);
var tbar = this.getTopToolbar();
tbar.doLayout();
} else {
btn.setIconClass("icon_expand");
this.fxField.setHeight(20);
var tbar = this.getTopToolbar();
tbar.doLayout();
}
},
onFxBlurFn : function(e) {
var sm = this.sm;
if (!sm.formulaEditing && this.fxCell) {
var ds = this.ds;
var x = this.fxCell.x, y = this.fxCell.y;
var cell = ds.getCellObj(x, y, this.fxCell.sheetIndex) || {};
var data = cell.data || "";
if (data != sm.textCover.value) {
this.enterFx(true);
} else {
sm.getTextCover().style.display = "none";
}
}
},
enterFx : function(stayFlag) {
var sm = this.sm;
var hk = this.hotkey;
var editor = this.editor;
if (sm.formulaEditing) {
sm.fireEvent("formulaeditingchanged", true, false);
}
editor.onTextCoverBlurFn();
if (!stayFlag) {
hk.onDownFn();
}
},
onTrigger1Click:function(){
var sf = this.searchField;
if (sf.hasSearch) {
sf.reset();
sf.triggers[0].hide();
sf.hasSearch = false
}
},
onTrigger2Click: function(trigger) {
var key = "ds_tablename";// name属性
var id="ds_tablename";
var dbfind="";
var caller="ExcelTemplate";
var keyValue = Ext.getCmp('ds_tablename').getValue();// 当前值
keyValue = keyValue == null ? '' : keyValue;
var dbwin = new Ext.Window({
id : 'dbwin',
title: '查找',
height: "500",
width: "700",
maximizable : true,
buttonAlign : 'center',
layout : 'anchor',
items: [{
tag : 'iframe',
frame : true,
anchor : '100% 100%',
layout : 'fit',
html : ''
}],
buttons : [{
text : '关 闭',
iconCls: 'x-button-icon-close',
cls: 'x-btn-gray',
handler : function(){
Ext.getCmp('dbwin').close();
}
},{
text: '重置条件',
id: 'reset',
cls: 'x-btn-gray',
hidden: true,
handler: function(){
var grid = Ext.getCmp('dbwin').el.dom.getElementsByTagName('iframe')[0].contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel');
grid.resetCondition();
grid.getCount();
}
}]
});
dbwin.show();
var sf = this.searchField;
sf.hasSearch = true;
sf.triggers[0].show();
trigger.lastTriggerId = null;
},
onFxKeydownFn : function(fxfield, e) {
if (!Ext.isIE) {
e.stopPropagation();
}
var key = e.getKey();
var sm = this.sm, ds = this.ds, editor = this.editor;
var text = fxfield.getValue();
if (!this.fxCell) {
this.fxCell = Ext.apply({}, sm.focusCell);
this.fxCell.sheetIndex = ds.activeSheet;
}
var pos = this.fxCell;
pos = Ext.apply({}, pos);
if (key == Ext.EventObject.ENTER) {
e.stopEvent();
if (text.charAt(0) == "=") {
editor.fxInputEnter(fxfield);
} else {
this.enterFx();
}
} else if (Ext.EventObject.ESC == key) {
textCover = sm.getTextCover();
textCover.value = this.fxOv;
fxfield.setValue(this.fxOv);
if (sm.formulaEditing) {
if (editor.dropList) {
editor.dropList.hide();
}
sm.fireEvent("formulaeditingchanged", true, false);
}
textCover.style.display = "none";
fxfield.blur();
} else {
var keyStr = ",37,38,39,33,40,34,36,35,27,9,19";
if (e.ctrlKey && (key == 83 || key == 79 || key == 80)) {
e.stopEvent();
var hk = this.hotkey;
hk.onKeydownFn(e);
} else if (keyStr.indexOf("," + key + ",") == -1) {
(function () {
var text = fxfield.getValue();
this.presetTextCover(pos, text);
sm.sysTextCover(text);
sm.checkFormulaEditing(text);
if (text.charAt(0) == "=") {
this.editor.fxShowFormulaDropList(text, fxfield);
}
}).defer(10, this);
} else if (40 == key) {
e.stopEvent();
this.editor.dropList.selectDown();
} else if (38 == key) {
e.stopEvent();
this.editor.dropList.selectUp();
} else if (37 == key || 39 == key) {
if (text.charAt(0) == "=") {
this.editor.fxShowFormulaDropList(text, fxfield);
}
}
}
},
sysFxField : function(text) {
this.fxField.setValue(text);
},
sysFocusObj : function(text) {
var sm = this.sm;
if (this.focusObj == sm.textCover) {
this.sysFxField(text);
} else {
sm.sysTextCover(text);
}
},
presetTextCover : function(pos, text) {
var sm = this.sm;
var editor = this.editor;
var textCover = sm.getTextCover();
editor.prepareTextCover(pos, text);
},
onFxFocusFn : function(f) {
var sm = this.sm, ds = this.ds;
var v = f.getValue();
this.fxOv = v;
if (!this.fxCell) {
this.fxCell = Ext.apply({}, sm.focusCell);
this.fxCell.sheetIndex = ds.activeSheet;
}
var flag = sm.checkFormulaEditing(v);
this.presetTextCover(this.fxCell, v);
this.focusObj = this.fxField.getEl().dom;
if (flag) {
var text = this.selectDataRange();
this.showDataRangeBorder(text);
}
},
showDataRangeBorder : function(text) {
try {
var sm = this.sm;
var ds = this.ds;
var pos = ds.parseText2Pos(text);
if (pos.sheetIndex == ds.activeSheet
|| false == Ext.type(pos.sheetIndex)
|| "" == pos.sheetIndex) {
var sr = this.showRange;
if (sr.row.start <= pos.x && pos.x <= sr.row.end
&& sr.col.start <= pos.y && pos.y <= sr.col.end
|| sr.row.start <= pos.ex && pos.ex <= sr.row.end
&& sr.col.start <= pos.ey && pos.ey <= sr.col.end) {
sm.selectRange(null, {
x : pos.x,
y : pos.y
}, {
x : pos.ex,
y : pos.ey
});
}
}
} catch (e) {
}
},
selectDataRange : function() {
var ds = this.ds;
var posReg = ds.posReg;
var v = this.focusObj.value;
var spos = -1, epos = -1;
v.replace(posReg, function(w) {
spos = arguments[arguments.length - 2];
epos = spos + w.length;
});
if (-1 != spos && -1 != epos) {
Ext.ss.common.Mask.setCaretPosition.defer(1, this, [this.focusObj,
epos, epos]);
return v.slice(spos, epos);
}
},
getNearestFormulaSpan : function() {
var ds = this.ds, sm = this.sm;
var posReg = ds.posReg;
var focusObj = this.focusObj;
var v = focusObj.value;
var oldLen = v.length;
if (false == Ext.type(this.cachedCursorPos)) {
var cursorPos = Ext.ss.common.Mask.getCursorPos(focusObj);
this.cachedCursorPos = cursorPos;
}
var first = v.slice(0, this.cachedCursorPos);
first.replace(posReg, function(w) {
var pos = ds.parseText2Pos(w);
sm.selectedStart = {
x : pos.x,
y : pos.y
};
sm.selectedEnd = {
x : pos.ex,
y : pos.ey
};
});
},
updateLastFormulaDataRange : function(str, notReplace) {
var focusObj = this.focusObj;
if (!focusObj) {
return;
}
var v = focusObj.value;
var oldLen = v.length;
if (false == Ext.type(this.cachedCursorPos)) {
var cursorPos = Ext.ss.common.Mask.getCursorPos(focusObj);
this.cachedCursorPos = cursorPos;
}
var first = v.slice(0, this.cachedCursorPos), last = v.slice(
this.cachedCursorPos, oldLen);
var ds = this.ds;
var posReg = ds.posReg;
var spos = -1, epos = -1;
var fLen = first.length;
first.replace(posReg, function(w) {
spos = arguments[arguments.length - 2];
epos = spos + w.length;
});
if (fLen != epos
&& !(epos + 1 == fLen && ":" == first.charAt(fLen - 1))) {
spos = fLen;
epos = fLen;
}
var pre = first.slice(0, spos);
var parts = str.split("!");
if (2 == parts.length) {
var sheetName = parts[0];
var endPiece = pre.slice(pre.length - sheetName.length - 1,
pre.length);
if (endPiece.toUpperCase() == sheetName.toUpperCase() + "!") {
str = parts[1];
}
}
var pos = first.slice(epos + 1, fLen);
if (notReplace) {
pre = first.slice(0, epos + 1);
var lastChr = pre.charAt(pre.length - 1);
if (!/[,\(\+\-\*\/]/gi.test(lastChr)) {
pre = pre + ",";
}
}
first = pre + str + pos;
this.cachedCursorPos = first.length;
focusObj.value = first + last;
return focusObj.value;
},
generateCSS : function(data) {
this.sw = data.sw;
this.sh = data.sh;
this.slw = data.slw;
this.slh = data.slh;
var cellWidth = this.cellWidth;
var cellHeight = this.cellHeight;
if (Ext.isIE) {
}
var cssText = ".x-spreadsheet-cell-default-width{width:" + cellWidth
+ "px;}" + ".x-spreadsheet-cell-default-height{height:"
+ cellHeight + "px;}";
var lcw = this.lcWidth;
if (Ext.isIE) {
}
cssText += "." + this.id + "-x-spreadsheet-col-0{width:" + lcw
+ "px;text-align:center;}";
cssText += "." + this.id + "-x-spreadsheet-row-0{text-align:center;}";
cssText += "." + this.id + "-x-spreadsheet-cell-state{}";
cssText += ".x-spreadsheet-right-silver{border-right:1px solid rgb(212,216,218);}.x-spreadsheet-bottom-silver{border-bottom:1px solid rgb(212,216,218);}";
var cid = this.id + "-x-spreadsheet-css";
this.cssSet[cid] = Ext.util.CSS.createStyleSheet(cssText, cid);
},
removeCSS : function() {
for (var p in this.cssSet) {
Ext.util.CSS.removeStyleSheet(p);
}
},
initTemplates : function() {
var left = this.lcWidth + this.xpaddingOffset;
var top = this.cellHeight + this.ypaddingOffset;
var ts = this.templates || {};
if (!ts.viewport) {
ts.viewport = new Ext.XTemplate([
"",
"
",
"
",
"
",
"
",
"",
"",
"{slheader}",
"",
"{lscroller}",
" | ",
"",
"",
"",
"",
" | ",
"",
"{sheader}",
"",
"{scroller}",
" | ",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"",
"
",
"",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"
",
"", "
", "
",
"
"].join(""));
}
if (!ts.slheader) {
ts.slheader = new Ext.XTemplate([
"",
"", "
"].join(""));
}
if (!ts.lhrows) {
ts.lhrows = new Ext.XTemplate([
"",
"",
"
",
"",
"",
"",
"{data}",
" ",
" ",
"", " ", " | ", "",
"
", ""].join(""));
}
if (!ts.lscroller) {
ts.lscroller = new Ext.XTemplate([
""].join(""));
}
if (!ts.lrows) {
ts.lrows = new Ext.XTemplate([
"",
"",
"
",
"",
"",
"",
"{data}",
" ",
" ",
"", " ", " | ", "",
"
", "
", ""].join(""));
}
if (!ts.sheader) {
ts.sheader = new Ext.XTemplate([
"",
"", "
"].join(""));
}
if (!ts.htd) {
ts.htd = new Ext.XTemplate([
"",
"",
"",
"",
"{data}",
" ",
" ",
"", " ", " | ", "", ""].join(""));
}
if (!ts.hrows) {
ts.hrows = new Ext.XTemplate([
"",
"",
"
",
"",
"",
"",
"{data}",
" ",
" ",
"", " ", " | ", "",
"
", ""].join(""));
}
if (!ts.scroller) {
ts.scroller = new Ext.XTemplate([""].join(""));
}
if (!ts.std) {
ts.std = new Ext.XTemplate([
"",
"",
"",
"",
"{data}",
" ",
" ",
"", " ", " | ", "", ""].join(""));
}
if (!ts.rows) {
ts.rows = new Ext.XTemplate([
"",
"",
"
",
"",
"",
"",
"{data}",
" ",
" ",
"", " ", " | ", "",
"
", "
", ""].join(""));
}
if (!ts.cell) {
ts.cell = new Ext.XTemplate([
"",
"{data}",
"
",
"
",
"", "
"].join(""));
}
for (var k in ts) {
var t = ts[k];
if (t && typeof t.compile == "function" && !t.compiled) {
t.compile();
}
}
this.templates = ts;
},
getCellEl : function(x, y, region) {
var name = this.id + "-x-spreadsheet-cell-" + x + "-" + y;
if (!region) {
var El = this.sview.child("div[name=" + name + "]");
return El;
} else {
var rtEl;
if ("left-top" == region) {
rtEl = this.slheader;
} else if ("top" == region) {
rtEl = this.sheader;
} else if ("left" == region) {
rtEl = this.slbody;
} else {
rtEl = this.sbody;
}
var el = Ext.DomQuery
.selectNode("div[name=" + name + "]", rtEl.dom);
var El = Ext.get(el);
return El;
}
},
getCellHEls : function(x, y) {
var els = Ext.DomQuery.select("*[name=" + this.id
+ "-x-spreadsheet-cell-" + x + "-" + y + "]",
this.body.dom);
if (0 < els.length) {
return els;
}
},
getCellTdHEls : function(x, y) {
var els = Ext.DomQuery.select("td[name=" + this.id
+ "-x-spreadsheet-cell-td-" + x + "-" + y + "]",
this.body.dom);
if (0 < els.length) {
return els;
}
},
generateHTML : function(data) {
this.generateCSS(data);
var ts = this.templates;
var lhrows = ts.lhrows.apply(data.slheader);
var slheader = ts.slheader.apply({
lhrows : lhrows
});
var lrows = ts.lrows.apply(data.lscroller);
var lscroller = ts.lscroller.apply({
lrows : lrows
});
var hrows = ts.hrows.apply(data.sheader);
var sheader = ts.sheader.apply({
hrows : hrows
});
var rows = ts.rows.apply(data.scroller);
var scroller = ts.scroller.apply({
rows : rows
});
var sheets = this.generateSheets();
var html = ts.viewport.apply({
slheader : slheader,
lscroller : lscroller,
sheader : sheader,
scroller : scroller,
sheets : sheets
});
return html;
},
generateSheets : function() {
var ds = this.ds;
var sheets = ds.sheets;
var str = "";
for (var i = 0, len = sheets.length; i < len; i++) {
var s = sheets[i];
if (ds.activeSheet == i) {
str += this.generateActiveSheet(s.name, 0 < i, i < len - 1);
} else {
var left = false, right = false;
if (0 < i) {
if (ds.activeSheet + 1 == i) {
left = "active";
} else {
left = "inactive";
}
}
if (i < len - 1) {
if (ds.activeSheet - 1 == i) {
right = "active";
} else {
right = "inactive";
}
}
str += this.generateInActiveSheet(s.name, left, right);
}
}
return str;
},
generateInActiveSheet : function(name, left, right) {
var str = "";
if (!left) {
str += " | ";
} else if ("active" == left) {
str += "
| ";
} else if ("inactive" == left) {
str += "
| ";
}
str += "
" + name
+ " | ";
if (!right) {
str += "
| ";
}
return str;
},
generateActiveSheet : function(name, left, right) {
var str = "";
if (!left) {
str += "
| ";
} else {
str += "
| ";
}
str += "
" + name
+ " | ";
if (!right) {
str += "
| ";
}
return str;
},
generateUI : function() {
var data = this.ds.getRange({
rowStart : this.showRange.row.start,
colStart : this.showRange.col.start,
rowNum : this.showRange.row.len,
colNum : this.showRange.col.len,
adjustWidth : this.adjustWidth,
adjustHeight : this.adjustHeight
});
this.freezeRange = this.copyRange(data.freezeRange);
this.showRange.row.start = data.rowStart;
this.showRange.row.len = data.rowNum;
this.showRange.row.end = data.rowEnd;
this.showRange.col.start = data.colStart;
this.showRange.col.len = data.colNum;
this.showRange.col.end = data.colEnd;
return this.generateHTML(data);
},
reloadUI : function(fr) {
var sm = this.sm;
this.cancelYSplit();
this.cancelXSplit();
if (this.splitFlag) {
this.reSplitRange(this.freezeRange, this.showRange, true);
} else {
if (!fr || 0 == this.freezeRange.col.len
&& 0 == this.freezeRange.row.len
|| this.isEqualRange(fr, this.freezeRange)) {
this.renderRange(this.freezeRange, this.showRange, true);
} else {
this.reFreezeRange(this.freezeRange, this.showRange, true);
}
}
this.adjustLiveScroller();
sm.fireEvent("renderborder");
this.updateStatus(sm.focusCell.x, sm.focusCell.y);
this.changeSheetStatus(this.ds.activeSheet);
sm.transferFocus();
this.tryLoadCharts();
},
refreshRange : function() {
if (this.splitFlag) {
this.adjustShowRange(this.availWidth, this.availHeight, true);
} else {
this.renderRange(this.freezeRange, this.showRange, true);
}
},
setupRange : function(fr, sf) {
if (false != Ext.type(sf)) {
this.splitFlag = sf;
}
this.cancelYSplit();
this.cancelXSplit();
if (this.splitFlag) {
this.showRange = this.checkShowRange(fr, this.freezeRange,
this.showRange);
this.freezeRange = this.copyRange(fr);
this.reSplitRange(this.freezeRange, this.showRange, true);
this.adjustShowRange(this.availWidth, this.availHeight);
} else {
if (this.isEqualRange(fr, this.freezeRange)) {
this.refreshRange();
} else {
this.showRange = this.checkShowRange(fr, this.freezeRange,
this.showRange);
this.freezeRange = this.copyRange(fr);
this.reFreezeRange(this.freezeRange, this.showRange, true);
}
}
},
/**sheet 定义*/
initComponent : function() {
this.splitFlag = false;
this.id = Ext.id();
this.initTemplates();
this.ds = new Ext.ss.DataSource({
spreadsheet : this
});
this.sm = new Ext.ss.SelectionModel({
spreadsheet : this
});
this.editor = new Ext.ss.Editor({
spreadsheet : this
});
this.hotkey = new Ext.ss.HotKey({
spreadsheet : this
});
this.contextmenu = new Ext.ss.menu.ContextMenu({
spreadsheet : this
});
this.chartManager = new Ext.ss.ChartManager({
spreadsheet : this
});
this.chartSelector = new Ext.ss.popup.chart.ChartSelector({
spreadsheet : this
});
this.dataRangeSelector = new Ext.ss.popup.chart.DataRangeSelector({
spreadsheet : this
});
this.commenteditor = new Ext.ss.CommentEditor({
spreadsheet : this
});
this.commenttip = new Ext.ss.popup.CommentTip({
spreadsheet : this
});
this.hyperlinktip = new Ext.ss.popup.HyperlinkTip({
spreadsheet : this
});
this.hyperlinkwin = new Ext.ss.HyperlinkWin({
spreadsheet : this
});
this.sheetEditor = new Ext.Editor(new Ext.form.TextField({
allowBlank : false,
growMin : 90,
growMax : 240,
grow : true,
selectOnFocus : true
}), {
alignment : "tl-tl",
shim : false,
autoSize : "width",
cancelOnEsc : true,
completeOnEnter : true,
spreadsheet : this
});
this.initSheetMenu();
this.initPasteOptions();
this.addSheetWin = new Ext.ss.popup.AddSheetWin({
spreadsheet : this
});
this.publicLinkWin = new Ext.ux.dialog.PublicLinkWin({});
this.generateTopBar();
if (this.file && this.file.sheets) {
this.ds.setSheets(this.file.sheets, this.file.extraInfo,
this.file.activeSheet);
} else {
this.ds.loadSheets();
this.sm.initSelection();
}
this.html = this.generateUI();
Ext.ss.SpreadSheet.superclass.initComponent.call(this);
this.addEvents("movefreezer", "updateBeforeLeftBody",
"updateBeforeBody", "updateEndLeftBody", "updateEndBody",
"updateBeforeHeaderCol", "updateBeforeBodyCol",
"updateEndHeaderCol", "updateEndBodyCol",
"updateBeforeLeftHeaderCol", "updateBeforeLeftBodyCol",
"updateEndLeftHeaderCol", "updateEndLeftBodyCol",
"updateLeftBody", "updateBody", "updateHeader",
"updateBeforeHeader", "updateEndHeader", "updateLeftHeader",
"updateBeforeLeftHeader", "updateEndLeftHeader",
"removeLeftBodyRows", "removeBodyRows", "removeLeftHeaderRows",
"removeHeaderRows", "removeHeaderCols", "removeBodyCols",
"removeLeftHeaderCols", "removeLeftBodyCols", "updatecss",
"afterresize", "beforecut", "cut", "beforecopy", "copy",
"beforepaste", "paste", "updatefx", "poststatus",
"updatestate", "updatepress", "yscrolling", "uyscrolling",
"xscrolling", "lxscrolling", "containerupdated",
"freezechanged", "splitchanged");
this.on("afterrender", this.onAfterRenderFn, this, {
single : true
});
this.on("bodyresize", function() {
if (this.splitFlag) {
this.reloadUI();
}
}, this, {
delay : 500,
single : true
});
this.on("movefreezer", this.MoveFreezer, this);
this.on("updateBeforeLeftBody", this.onUpdateBeforeLeftBodyFn, this);
this.on("updateBeforeBody", this.onUpdateBeforeBodyFn, this);
this.on("updateEndLeftBody", this.onUpdateEndLeftBodyFn, this);
this.on("updateEndBody", this.onUpdateEndBodyFn, this);
this.on("updateBeforeHeaderCol", this.onUpdateBeforeHeaderColFn, this);
this.on("updateBeforeBodyCol", this.onUpdateBeforeBodyColFn, this);
this.on("updateEndHeaderCol", this.onUpdateEndHeaderColFn, this);
this.on("updateEndBodyCol", this.onUpdateEndBodyColFn, this);
this.on("updateBeforeLeftHeaderCol",
this.onUpdateBeforeLeftHeaderColFn, this);
this.on("updateBeforeLeftBodyCol", this.onUpdateBeforeLeftBodyColFn,
this);
this
.on("updateEndLeftHeaderCol", this.onUpdateEndLeftHeaderColFn,
this);
this.on("updateEndLeftBodyCol", this.onUpdateEndLeftBodyColFn, this);
this.on("updateLeftBody", this.onUpdateLeftBodyFn, this);
this.on("updateBody", this.onUpdateBodyFn, this);
this.on("updateHeader", this.onUpdateHeaderFn, this);
this.on("updateBeforeHeader", this.onUpdateBeforeHeaderFn, this);
this.on("updateEndHeader", this.onUpdateEndHeaderFn, this);
this.on("updateLeftHeader", this.onUpdateLeftHeaderFn, this);
this
.on("updateBeforeLeftHeader", this.onUpdateBeforeLeftHeaderFn,
this);
this.on("updateEndLeftHeader", this.onUpdateEndLeftHeaderFn, this);
this.on("removeLeftBodyRows", this.onRemoveLeftBodyRowsFn, this);
this.on("removeBodyRows", this.onRemoveBodyRowsFn, this);
this.on("removeLeftHeaderRows", this.onRemoveLeftHeaderRowsFn, this);
this.on("removeHeaderRows", this.onRemoveHeaderRowsFn, this);
this.on("removeHeaderCols", this.onRemoveHeaderColsFn, this);
this.on("removeBodyCols", this.onRemoveBodyColsFn, this);
this.on("removeLeftHeaderCols", this.onRemoveLeftHeaderColsFn, this);
this.on("removeLeftBodyCols", this.onRemoveLeftBodyColsFn, this);
this.on("updatecss", this.ds.onUpdateCssFn, this.ds);
this.on("afterresize", this.sm.onAfterResizeFn, this.sm);
this.on("bodyresize", this.onBodyResizeFn, this, {
buffer : 100
});
this.on("paste", this.onPasteFn, this);
this.editor.on("complete", this.onEditCompleteFn, this);
this.on("updatestate", this.updateStateField, this);
this.on("updatefx", this.updateFxField, this);
this.on("yscrolling", this.onYScrollingFn, this);
this.on("uyscrolling", this.onUYScrollingFn, this);
this.on("xscrolling", this.onXScrollingFn, this);
this.on("lxscrolling", this.onLXScrollingFn, this);
this.on("freezechanged", this.onFreezeChangedFn, this);
this.sheetEditor.on("complete", this.onSheetEditorCompleteFn, this);
this.sm.on("renderborder", this.chartManager.deselectChart,
this.chartManager);
this.ds.on("hstackchange", this.onHStackChangeFn, this);
},
onSheetEditorCompleteFn : function(ed, v, sv) {
var ds = this.ds, sheets = ds.sheets;
if (!v || ds.findSheetName(v)) {
Ext.Msg.alert(feyaSoft.lang.common.hint,
feyaSoft.ss.lang.nameDuplicated);
return;
}
if (/[\+\-\*\/\%\)\(\{\}\[\]\\]+/gi.test(v)) {
Ext.Msg.alert(feyaSoft.lang.common.hint,
feyaSoft.ss.lang.nameInvalid);
return;
}
var bs = ed.bindSheet;
ds.renameSheet(v, bs.index);
bs.El.dom.innerHTML = v;
},
firebugWarning : function() {
var cp = new Ext.state.CookieProvider;
var tpl, msg, bg, bc, t;
if (window.console && window.console.firebug
&& !cp.get("hideFBWarning")) {
t = "Warning";
msg = " Firebug is known to cause performance issues with MySpreadSheet. ";
} else if (!Ext.isChrome && !cp.get("hideFBWarning")) {
t = "Notice";
msg = " MySpreadSheet is known to run more smoothly in Google Chrome. ";
}
if (msg) {
tpl = new Ext.Template("
" + t + ": " + msg + "[
Hide ]");
var html = tpl.apply({
t : t,
msg : msg
});
this.setStatus({
text : html,
iconCls : "x-status-error"
});
Ext.fly(this.id + "-x-spreadsheet-hide-warning").on("click",
function() {
cp.set("hideFBWarning", true);
this.setStatus({
text : "Ready",
iconCls : "x-status-valid"
});
}, this);
}
},
tryLoadCharts : function() {
var ds = this.ds;
var data = ds.data;
if (data.charts && !data.chartSet) {
this.chartManager.generateCharts(data.charts);
}
},
onYScrollingFn : function(offset) {
if (0 != offset) {
var fr = this.freezeRange;
var ds = this.ds;
var st;
if (this.splitFlag) {
st = ds.getHeight(1, this.showRange.row.start - 1);
} else {
st = ds.getHeight(fr.row.end + 1, this.showRange.row.start - 1);
}
this.sct.dom.scrollTop = st;
if (0 != fr.col.len) {
this.lsct.dom.scrollTop = st;
}
this.rowct.dom.scrollTop = st;
}
},
onUYScrollingFn : function(offset) {
if (0 != offset) {
var fr = this.freezeRange;
var ds = this.ds;
var st = ds.getHeight(1, this.freezeRange.row.start - 1);
this.hct.dom.scrollTop = st;
if (0 != fr.col.len) {
this.lhct.dom.scrollTop = st;
}
this.frowct.dom.scrollTop = st;
}
},
onLXScrollingFn : function(offset) {
if (0 != offset) {
var fr = this.freezeRange;
var ds = this.ds;
var sl = ds.getWidth(1, fr.col.start - 1);
this.lsct.dom.scrollLeft = sl;
if (0 != fr.row.len) {
this.lhct.dom.scrollLeft = sl;
}
this.fcolct.dom.scrollLeft = sl;
}
},
onXScrollingFn : function(offset) {
if (0 != offset) {
var fr = this.freezeRange;
var ds = this.ds;
var sl;
if (this.splitFlag) {
sl = ds.getWidth(1, this.showRange.col.start - 1);
} else {
sl = ds.getWidth(fr.col.end + 1, this.showRange.col.start - 1);
}
this.sct.dom.scrollLeft = sl;
if (0 != fr.row.len) {
this.hct.dom.scrollLeft = sl;
}
this.colct.dom.scrollLeft = sl;
}
},
onBodyResizeFn : function(p, w, h) {
var wd = w - this.stateField.getWidth() - 405;
this.fxField.setWidth(wd);
this.handleResize(w, h);
},
onEditCompleteFn : function(ed, pos, v) {
this.ds.trace(feyaSoft.ss.lang.action_input_cell(v, this.ds
.getNameFromPos(pos)));
},
onAfterRenderFn : function(p) {
this.initEls();
this.tryLoadCharts();
var sm = this.sm;
sm.fireEvent("renderborder");
this.updateStatus(sm.focusCell.x, sm.focusCell.y);
return;
if (Ext.isIE) {
(function () {
this.adjustLiveScroller();
this.sysContainerRange();
}).defer(1000, this);
} else {
this.adjustLiveScroller();
this.sysContainerRange();
}
},
resetRange : function() {
this.freezeRange = {
row : {
start : 1,
end : 0,
len : 0
},
col : {
start : 1,
end : 0,
len : 0
}
};
this.showRange = {
row : {
start : 1,
end : 20,
len : 20
},
col : {
start : 1,
end : 12,
len : 12
}
};
},
copyRange : function(or) {
var obj = {
row : {
start : or.row.start,
end : or.row.end,
len : or.row.len
},
col : {
start : or.col.start,
end : or.col.end,
len : or.col.len
}
};
return obj;
},
CancelSpliter : function(stop) {
var ofr = this.freezeRange;
var osr = this.showRange;
var offseth = 0 - ofr.row.len, offsetl = 0 - ofr.col.len;
if (0 === offseth && 0 === offsetl) {
return;
}
var ds = this.ds;
var freezeRange = this.copyRange(ofr), ofr = this.copyRange(ofr);
var showRange = this.copyRange(osr);
showRange.row.len -= offseth;
showRange.col.len -= offsetl;
showRange.row.start = freezeRange.row.start;
showRange.col.start = freezeRange.col.start;
showRange.row.end = showRange.row.start + showRange.row.len - 1;
showRange.col.end = showRange.col.start + showRange.col.len - 1;
freezeRange.row.start = 1;
freezeRange.col.start = 1;
freezeRange.row.end = 0;
freezeRange.col.end = 0;
freezeRange.row.len = 0;
freezeRange.col.len = 0;
var splitFlag = Ext.ss.common.Mask.copy(this.splitFlag);
this.splitFlag = false;
this.reSplitRange(freezeRange, showRange, true);
if (!stop) {
ds.fireEvent("splitchange", ofr, freezeRange, splitFlag, false);
}
},
MoveSpliter : function(x, y, stop) {
if (1 == x && 1 == y) {
return;
}
x--;
y--;
var freezeRange = this.copyRange(this.freezeRange), ofr = this
.copyRange(this.freezeRange);
var showRange = this.copyRange(this.showRange);
var offseth, offsetl;
if (0 == freezeRange.row.end) {
freezeRange.row.start = showRange.row.start;
offseth = x - showRange.row.start + 1;
} else {
offseth = x - freezeRange.row.end + 1;
}
if (0 == freezeRange.col.end) {
freezeRange.col.start = showRange.col.start;
offsetl = y - showRange.col.start + 1;
} else {
offsetl = y - freezeRange.col.end + 1;
}
freezeRange.row.end = x;
freezeRange.col.end = y;
freezeRange.row.len = x - freezeRange.row.start + 1;
freezeRange.col.len = y - freezeRange.col.start + 1;
showRange.row.len -= offseth;
showRange.col.len -= offsetl;
showRange.row.start = x + 1;
showRange.col.start = y + 1;
showRange.row.end = showRange.row.start + showRange.row.len - 1;
showRange.col.end = showRange.col.start + showRange.col.len - 1;
var splitFlag = Ext.ss.common.Mask.copy(this.splitFlag);
this.reSplitRange(freezeRange, showRange, true);
if (!stop) {
this.ds.fireEvent("splitchange", ofr, freezeRange, splitFlag,
this.splitFlag);
}
},
CancelFreezer : function(stop) {
var ofr = this.freezeRange;
var osr = this.showRange;
var offseth = 0 - ofr.row.len, offsetl = 0 - ofr.col.len;
if (0 === offseth && 0 === offsetl) {
return;
}
var freezeRange = this.copyRange(ofr), ofr = this.copyRange(ofr);
var showRange = this.copyRange(osr);
showRange.row.len -= offseth;
showRange.col.len -= offsetl;
showRange.row.start = freezeRange.row.start;
showRange.col.start = freezeRange.col.start;
showRange.row.end = showRange.row.start + showRange.row.len - 1;
showRange.col.end = showRange.col.start + showRange.col.len - 1;
freezeRange.row.start = 1;
freezeRange.col.start = 1;
freezeRange.row.end = 0;
freezeRange.col.end = 0;
freezeRange.row.len = 0;
freezeRange.col.len = 0;
this.reFreezeRange(freezeRange, showRange, true);
if (!stop) {
this.ds.fireEvent("freezechange", ofr, freezeRange);
}
},
MoveFreezer : function(x, y, stop) {
var freezeRange = this.copyRange(this.freezeRange), ofr = this
.copyRange(this.freezeRange);
var showRange = this.copyRange(this.showRange);
var ox = showRange.row.start, oy = showRange.col.start;
if (0 != freezeRange.row.len) {
ox = freezeRange.row.start + 1;
}
if (0 != freezeRange.col.len) {
oy = freezeRange.col.start + 1;
}
if (ox == x && oy == y) {
return;
}
var ds = this.ds;
x--;
y--;
var offseth, offsetl;
if (0 == freezeRange.row.end) {
freezeRange.row.start = showRange.row.start;
offseth = x - showRange.row.start + 1;
} else {
offseth = x - freezeRange.row.end + 1;
}
if (0 == freezeRange.col.end) {
freezeRange.col.start = showRange.col.start;
offsetl = y - showRange.col.start + 1;
} else {
offsetl = y - freezeRange.col.end + 1;
}
freezeRange.row.end = x;
freezeRange.col.end = y;
freezeRange.row.len = x - freezeRange.row.start + 1;
freezeRange.col.len = y - freezeRange.col.start + 1;
showRange.row.len -= offseth;
showRange.col.len -= offsetl;
showRange.row.start = x + 1;
showRange.col.start = y + 1;
showRange.row.end = showRange.row.start + showRange.row.len - 1;
showRange.col.end = showRange.col.start + showRange.col.len - 1;
this.reFreezeRange(freezeRange, showRange, true);
if (!stop) {
ds.fireEvent("freezechange", ofr, freezeRange);
}
},
renderRange : function(freezeRange, showRange, updated, fixed) {
freezeRange = freezeRange || this.freezeRange;
showRange = showRange || this.showRange;
var obj = {
freezeRange : freezeRange,
rowStart : showRange.row.start,
rowEnd : showRange.row.end,
colStart : showRange.col.start,
colEnd : showRange.col.end
};
if (!fixed) {
this.adjustScrollBody();
Ext.apply(obj, {
adjustWidth : this.adjustWidth,
adjustHeight : this.adjustHeight
});
}
var data = this.ds.getRange(obj);
showRange.row.len = data.rowNum;
showRange.row.end = data.rowEnd;
showRange.col.len = data.colNum;
showRange.col.end = data.colEnd;
var ts = this.templates;
var lhrows = ts.lhrows.apply(data.slheader);
var lrows = ts.lrows.apply(data.lscroller);
var hrows = ts.hrows.apply(data.sheader);
var rows = ts.rows.apply(data.scroller);
this.fireEvent("updateLeftHeader", this, lhrows);
this.fireEvent("updateHeader", this, hrows);
this.fireEvent("updateLeftBody", this, lrows);
this.fireEvent("updateBody", this, rows);
if (true == updated) {
this.slw = data.slw;
this.sh = data.sh;
this.slh = data.slh;
this.sw = data.sw;
this.updateContainerRange(data);
}
return data;
},
sysContainerRange : function() {
var freezeRange = this.freezeRange, showRange = this.showRange;
var obj = {
freezeRange : freezeRange,
rowStart : showRange.row.start,
rowNum : showRange.row.len,
colStart : showRange.col.start,
colNum : showRange.col.len
};
var data = this.ds.getRange(obj);
this.updateContainerRange(data);
},
updateContainerRange : function(data) {
var ch = this.cellHeight + this.ypaddingOffset;
var lc = this.lcWidth + this.xpaddingOffset;
var slh, slw;
if (this.isRowSplited()) {
slh = this.splitFlag.splitHeight;
} else {
slh = data.slh;
}
var lh = slh - ch;
this.lhct.setHeight(lh);
this.frowct.setHeight(lh);
if (this.isRowSplit()) {
var top = slh + this.SPLIT_BAR_SIZE;
this.rowct.setTop(top);
this.lsct.setTop(top);
this.sct.setTop(top);
} else {
this.rowct.setTop(slh);
this.lsct.setTop(slh);
this.sct.setTop(slh);
}
this.hct.setHeight(lh);
this.fbrow.setHeight(slh);
if (this.isColSplited()) {
slw = this.splitFlag.splitWidth;
} else {
slw = data.slw;
}
var lw = slw - lc;
this.lhct.setWidth(lw);
this.fcolct.setWidth(lw);
if (this.isColSplit()) {
var left = slw + this.SPLIT_BAR_SIZE;
this.colct.setLeft(left);
this.hct.setLeft(left);
this.sct.setLeft(left);
} else {
this.colct.setLeft(slw);
this.hct.setLeft(slw);
this.sct.setLeft(slw);
}
this.lsct.setWidth(lw);
this.fbcol.setWidth(slw);
this.fireEvent("containerupdated");
},
updateCSS : function(obj) {
if (obj.nw) {
this.setScrollerWidth(obj.nw);
}
if (obj.nh) {
this.setScrollerHeight(obj.nh);
}
if (obj.slw) {
if (this.isColSplited()) {
this.lscroller.setWidth(this.splitFlag.splitWidth);
} else {
this.lscroller.setWidth(obj.slw);
}
}
},
cancelYSplit : function() {
this.hscroller.setHeight("auto");
this.lhscroller.setHeight("auto");
this.leftsplit.setStyle("display", "none");
this.hsplit.setStyle("display", "none");
this.vsplitcross.setStyle("display", "none");
this.uylivescroller.setStyle("display", "none");
this.ylivesplit.setStyle("display", "none");
this.ylivescroller.setTop(this.SPLIT_BAR_SIZE);
this.ylivescroller.setHeight(this.availHeight - this.SPLIT_BAR_SIZE);
},
cancelXSplit : function() {
this.lhscroller.setWidth("auto");
this.hsplittd.setStyle("display", "none");
this.vsplittd.setStyle("display", "none");
this.xlivesplit.setStyle("display", "");
this.lxlivescroller.setStyle("display", "none");
this.xlivescroller.setWidth(this.setFooterWidth(this.availWidth)
- this.SPLIT_BAR_SIZE);
},
sysnLiveScroller : function() {
var ds = this.ds, fr = this.freezeRange, sr = this.showRange;
if (this.splitFlag) {
if (fr.row.start != fr.row.end) {
this.uylivescroller.dom.scrollTop = this.yScrollOffset
* ds.getVisibleRowOffset(fr.row.start, 1);
}
if (fr.col.start != fr.col.end) {
this.lxlivescroller.dom.scrollLeft = this.yScrollOffset
* ds.getVisibleRowOffset(fr.col.start, 1);
}
this.ylivescroller.dom.scrollTop = this.yScrollOffset
* ds.getVisibleRowOffset(sr.row.start, 1);
this.xlivescroller.dom.scrollLeft = this.xScrollOffset
* ds.getVisibleColOffset(sr.col.start, 1);
} else {
this.ylivescroller.dom.scrollTop = this.yScrollOffset
* ds.getVisibleRowOffset(sr.row.start, fr.row.end + 1);
this.xlivescroller.dom.scrollLeft = this.xScrollOffset
* ds.getVisibleColOffset(sr.col.start, fr.col.end + 1);
}
},
reSplitRange : function(freezeRange, showRange, updated, fixed) {
var ofr = this.copyRange(this.freezeRange);
this.freezeRange = freezeRange;
var osr = this.copyRange(this.showRange);
this.showRange = showRange;
this.uylivescroller.un("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.lxlivescroller.un("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.ylivescroller.un("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.un("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
var splitWidth = null, splitHeight = null;
if (this.splitFlag) {
splitWidth = this.splitFlag.splitWidth;
splitHeight = this.splitFlag.splitHeight;
} else {
this.splitFlag = true;
}
var data = this.renderRange(freezeRange, showRange, updated, fixed);
this.slw = data.slw;
this.sh = data.sh;
this.slh = data.slh;
this.sw = data.sw;
if (null === splitWidth) {
splitWidth = this.lhscroller.getWidth();
}
if (null === splitHeight) {
splitHeight = this.hscroller.getHeight();
}
this.splitFlag = {
splitWidth : splitWidth,
splitHeight : splitHeight
};
var t = splitHeight + this.SPLIT_BAR_SIZE;
var h = this.availHeight - t;
this.fbrow.setStyle("display", "none");
this.fbcol.setStyle("display", "none");
if (0 != freezeRange.row.len) {
this.hscroller.setHeight(splitHeight);
this.lhscroller.setHeight(splitHeight);
this.leftsplit.setStyle("display", "");
this.hsplit.setStyle("display", "");
this.uylivescroller.setHeight(splitHeight);
this.uylivescroller.setStyle("display", "");
this.sysUpYFakebody(freezeRange, showRange);
this.ylivesplit.setTop(splitHeight);
this.ylivesplit.setStyle("display", "");
this.ylivescroller.setTop(t);
this.ylivescroller.setHeight(h);
this.vsplitcross.setStyle("display", "");
} else {
this.cancelYSplit();
}
if (0 != freezeRange.col.len) {
this.lhscroller.setWidth(splitWidth);
this.hsplittd.setStyle("display", "");
this.vsplittd.setStyle("display", "");
this.xlivesplit.setStyle("display", "none");
this.lxlivescroller.setStyle("display", "");
this.uppersplit.setHeight(splitHeight);
this.vsplit.setHeight(this.availHeight);
this.lxlivescroller.setWidth(this.setFooterWidth(splitWidth));
this.sysLeftXFakebody(freezeRange, showRange);
this.xlivescroller.setWidth(this.availWidth - splitWidth
- this.SPLIT_BAR_SIZE);
} else {
this.cancelXSplit();
}
this.fireEvent("splitchanged", this, freezeRange, showRange, ofr, osr);
this.sm.fireEvent.defer(1, this.sm, ["renderborder"]);
this.sysXFakebody(freezeRange, showRange);
this.sysYFakebody(freezeRange, showRange);
this.sysnLiveScroller();
this.onUYScrollingFn();
this.onLXScrollingFn();
this.onXScrollingFn();
this.onYScrollingFn();
this.uylivescroller.on("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.lxlivescroller.on("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.ylivescroller.on("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.on("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
if (0 == freezeRange.row.len && 0 == freezeRange.col.len) {
this.splitFlag = false;
}
this.fireEvent("splitchanged", this, freezeRange, showRange, ofr, osr);
this.sm.fireEvent.defer(1, this.sm, ["renderborder"]);
},
setFooterWidth : function(splitWidth) {
var footerToolWidth = this.sftool.getWidth();
var sw = Ext.get(this.fcontainer.dom).getWidth()
- this.frest.getWidth();
if (false != Ext.type(this.footerWidth)) {
var offset = this.footerWidth - footerToolWidth;
if (this.SPLIT_BAR_SIZE <= offset) {
this.fcontainer.setWidth(offset);
} else {
this.fcontainer.setWidth(this.SPLIT_BAR_SIZE);
this.sftool.setWidth(this.footerWidth - this.SPLIT_BAR_SIZE);
}
return splitWidth - this.footerWidth;
} else {
var lw = splitWidth - footerToolWidth - this.SPLIT_BAR_SIZE - sw;
var minw = this.lcWidth + this.xpaddingOffset - this.SPLIT_BAR_SIZE;
if (lw < minw) {
lw = minw;
}
var fw = splitWidth - footerToolWidth - lw;
if (this.SPLIT_BAR_SIZE > fw) {
footerToolWidth += fw - this.SPLIT_BAR_SIZE;
if (footerToolWidth < minw) {
lw += footerToolWidth - 1;
footerToolWidth = 1;
}
this.sftool.setWidth(footerToolWidth);
fw = this.SPLIT_BAR_SIZE;
}
this.fcontainer.setWidth(fw);
this.footerWidth = footerToolWidth + fw;
return lw;
}
},
reFreezeRange : function(freezeRange, showRange, updated, fixed) {
var ofr = this.copyRange(this.freezeRange);
this.freezeRange = freezeRange;
var osr = this.copyRange(this.showRange);
this.showRange = showRange;
var data = this.renderRange(freezeRange, showRange, updated, fixed);
this.slw = data.slw;
this.sh = data.sh;
this.slh = data.slh;
this.sw = data.sw;
this.fbrow.setStyle("display", "");
this.fbcol.setStyle("display", "");
this.ylivescroller.un("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.un("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.sysXFakebody(freezeRange, showRange);
this.sysYFakebody(freezeRange, showRange);
this.sysnLiveScroller();
this.onXScrollingFn();
this.onYScrollingFn();
this.ylivescroller.on("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.on("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.fireEvent("freezechanged", this, freezeRange, showRange, ofr, osr);
this.sm.fireEvent.defer(1, this.sm, ["renderborder"]);
},
sysXFakebody : function(freezeRange, showRange) {
freezeRange = freezeRange || this.freezeRange;
showRange = showRange || this.showRange;
var flen = freezeRange.col.len;
if (this.splitFlag) {
flen = 0;
}
var colNum = this.colNum > showRange.col.end
? this.colNum
: showRange.col.end;
var w = this.xlivescroller.getWidth()
+ this.ds.getOffsetWidth(this.xScrollOffset, flen,
showRange.col.len, colNum) + 1;
this.xfakebody.setWidth(w);
return w;
},
sysLeftXFakebody : function(freezeRange, showRange) {
freezeRange = freezeRange || this.freezeRange;
showRange = showRange || this.showRange;
var colNum = this.colNum > freezeRange.col.end
? this.colNum
: freezeRange.col.end;
var w = this.lxlivescroller.getWidth()
+ this.ds.getOffsetWidth(this.xScrollOffset, 0,
freezeRange.col.len, colNum) + 1;
this.lxfakebody.setWidth(w);
return w;
},
sysYFakebody : function(freezeRange, showRange) {
freezeRange = freezeRange || this.freezeRange;
showRange = showRange || this.showRange;
var flen = freezeRange.row.len;
if (this.splitFlag) {
flen = 0;
}
var rowNum = this.rowNum > showRange.row.end
? this.rowNum
: showRange.row.end;
var h = this.ylivescroller.getHeight()
+ this.ds.getOffsetHeight(this.yScrollOffset, flen,
showRange.row.len, rowNum) + 1;
this.yfakebody.setHeight(h);
return h;
},
sysUpYFakebody : function(freezeRange, showRange) {
freezeRange = freezeRange || this.freezeRange;
showRange = showRange || this.showRange;
var rowNum = this.rowNum > freezeRange.row.end
? this.rowNum
: freezeRange.row.end;
var h = this.uylivescroller.getHeight()
+ this.ds.getOffsetHeight(this.yScrollOffset, 0,
freezeRange.row.len, rowNum) + 1;
this.uyfakebody.setHeight(h);
return h;
},
encode : function(name) {
if ("height" === name) {
return "ch";
} else if ("width" == name) {
return "cw";
} else {
return name;
}
},
decode : function(name) {
if ("ch" === name) {
return "height";
} else if ("cw" == name) {
return "width";
} else {
return name;
}
},
generateRows : function(startRow, endRow, fillHeight) {
var startCol = this.showRange.col.start;
var endCol = this.showRange.col.end;
var addlist = "";
var laddlist = "";
var data = this.ds.getRowRange({
freezeRange : this.freezeRange,
rowStart : startRow,
rowEnd : endRow,
fillHeight : fillHeight,
colStart : startCol,
colEnd : endCol
});
var ts = this.templates;
laddlist = ts.lrows.apply(data.lscroller);
addlist = ts.rows.apply(data.scroller);
return {
rh : data.rh,
rowNum : data.rowNum,
rowEnd : data.rowEnd,
laddlist : laddlist,
addlist : addlist
};
},
generateURows : function(startRow, endRow, fillHeight) {
var startCol = this.showRange.col.start;
var endCol = this.showRange.col.end;
var addlist = "";
var laddlist = "";
var data = this.ds.getURowRange({
freezeRange : this.freezeRange,
rowStart : startRow,
rowEnd : endRow,
fillHeight : fillHeight,
colStart : startCol,
colEnd : endCol
});
var ts = this.templates;
laddlist = ts.lrows.apply(data.lheader);
addlist = ts.rows.apply(data.header);
return {
rh : data.rh,
rowNum : data.rowNum,
rowEnd : data.rowEnd,
laddlist : laddlist,
addlist : addlist
};
},
generateCols : function(startCol, endCol, fillWidth) {
var startRow = this.showRange.row.start;
var endRow = this.showRange.row.end;
var addlist = "";
var haddlist = "";
var data = this.ds.getColRange({
freezeRange : this.freezeRange,
rowStart : startRow,
rowEnd : endRow,
colStart : startCol,
colEnd : endCol,
fillWidth : fillWidth
});
var ts = this.templates;
haddlist = ts.hrows.apply(data.sheader);
addlist = ts.rows.apply(data.scroller);
return {
rw : data.rw,
colNum : data.colNum,
colEnd : data.colEnd,
haddlist : haddlist,
addlist : addlist
};
},
generateLCols : function(startCol, endCol, fillWidth) {
var startRow = this.showRange.row.start;
var endRow = this.showRange.row.end;
var addlist = "";
var haddlist = "";
var data = this.ds.getLColRange({
freezeRange : this.freezeRange,
rowStart : startRow,
rowEnd : endRow,
colStart : startCol,
colEnd : endCol,
fillWidth : fillWidth
});
var ts = this.templates;
haddlist = ts.hrows.apply(data.lheader);
addlist = ts.rows.apply(data.lscroller);
return {
rw : data.rw,
colNum : data.colNum,
colEnd : data.colEnd,
haddlist : haddlist,
addlist : addlist
};
},
generateTdCols : function(startCol, endCol, fillWidth) {
var startRow = this.showRange.row.start;
var endRow = this.showRange.row.end;
var addlist = [];
var haddlist = [];
var data = this.ds.getColRange({
freezeRange : this.freezeRange,
rowStart : startRow,
rowEnd : endRow,
colStart : startCol,
colEnd : endCol,
fillWidth : fillWidth
});
var ts = this.templates;
var sheader = data.sheader;
for (var i = 0, len = sheader.length; i < len; i++) {
var o = sheader[i];
haddlist.push(ts.htd.apply(o));
}
var scroller = data.scroller;
for (var i = 0, len = scroller.length; i < len; i++) {
var o = scroller[i];
addlist.push(ts.std.apply(o));
}
return {
rw : data.rw,
colNum : data.colNum,
colEnd : data.colEnd,
haddlist : haddlist,
addlist : addlist
};
},
isColSplited : function() {
return "object" == Ext.type(this.splitFlag)
&& null !== this.splitFlag.splitWidth;
},
isRowSplited : function() {
return "object" == Ext.type(this.splitFlag)
&& null !== this.splitFlag.splitHeight;
},
adjustScrollBody : function() {
var ds = this.ds, fr = this.freezeRange, obj = {};
var fh, fw;
if (this.isRowSplited()) {
fh = this.splitFlag.splitHeight;
} else {
fh = ds.getHeight(fr.row.start, fr.row.end);
fh += this.cellHeight + this.ypaddingOffset;
}
if (fh != this.sheader.getHeight()) {
this.adjustHeight = this.body.getHeight() - this.scrollOffset - fh;
obj.nh = this.adjustHeight;
}
if (this.isColSplited()) {
fw = this.splitFlag.splitWidth;
} else {
fw = ds.getWidth(fr.col.start, fr.col.end);
fw += this.lcWidth + this.xpaddingOffset;
}
if (fw != this.lscroller.getWidth()) {
this.adjustWidth = this.body.getWidth() - this.scrollOffset - fw;
obj.nw = this.adjustWidth;
obj.slw = fw;
}
this.updateCSS(obj);
},
handleResize : function(bw, bh) {
var adjustWidth, adjustHeight, availWidth, availHeight;
var footerToolWidth = this.sftool.getWidth();
availWidth = bw - this.scrollOffset;
var fw;
adjustWidth = availWidth - this.lhscroller.getWidth();
if (this.isColSplit()) {
fw = adjustWidth;
} else {
if (0 < adjustWidth
&& adjustWidth - this.footerWidth < adjustWidth / 3) {
this.footerWidth = adjustWidth * 2 / 3;
}
this.fcontainer.setWidth(this.footerWidth - footerToolWidth);
fw = availWidth - this.footerWidth;
}
this.setScrollerWidth(adjustWidth);
this.sline.dom.lastChild.style.width = "100%";
this.xlivescroller.setWidth(fw - this.SPLIT_BAR_SIZE);
availHeight = bh - this.scrollOffset;
adjustHeight = availHeight - this.lhscroller.getHeight();
this.setScrollerHeight(adjustHeight);
this.ylivescroller.setHeight(availHeight
- this.uylivescroller.getHeight() - this.SPLIT_BAR_SIZE);
this.sview.setHeight(bh);
this.frowct.setWidth(availWidth);
this.rowct.setWidth(availWidth);
this.fcolct.setHeight(availHeight);
this.colct.setHeight(availHeight);
this.adjustShowRange(availWidth, availHeight, false);
this.fireEvent("afterresize", this, availWidth, availHeight);
},
initEls : function() {
this.dragRowSpliter = Ext.get(this.id
+ "-x-spreadsheet-draging-split-row");
this.dragColSpliter = Ext.get(this.id
+ "-x-spreadsheet-draging-split-col");
this.hsplittd = Ext.get(this.id + "-x-spreadsheet-hsplit-td");
this.xlivesplit = Ext.get(this.id + "-x-spreadsheet-live-split-x");
this.vsplittd = Ext.get(this.id + "-x-spreadsheet-vsplit-td");
this.vsplitcross = Ext.get(this.id + "-x-spreadsheet-vsplit-cross");
this.uppersplit = Ext.get(this.id + "-x-spreadsheet-upper-vsplit");
this.vsplit = Ext.get(this.id + "-x-spreadsheet-vsplit");
this.ylivesplit = Ext.get(this.id + "-x-spreadsheet-live-split-y");
this.leftsplit = Ext.get(this.id + "-x-spreadsheet-left-split");
this.hsplit = Ext.get(this.id + "-x-spreadsheet-split");
this.footresizer = Ext.get(this.id + "-x-spreadsheet-footer-resizer");
this.sline = Ext.get(this.id + "-x-spreadsheet-footer-sheets-line");
this.fcontainer = Ext.get(this.id + "-x-spreadsheet-footer-container");
this.colline = Ext.get(this.id + "-x-spreadsheet-col-line");
this.rowline = Ext.get(this.id + "-x-spreadsheet-row-line");
this.toy = Ext.get(this.id + "-x-spreadsheet-toy");
this.fbrow = Ext.get(this.id + "-x-spreadsheet-freeze-row-bg");
this.fbcol = Ext.get(this.id + "-x-spreadsheet-freeze-col-bg");
this.frowct = Ext.get(this.id + "-x-spreadsheet-freeze-row-container");
this.frowctInner = Ext.get(this.frowct.dom.firstChild);
this.frowctInner.dom.style.width = this.MAX_PIXEL + "px";
this.frowctInner.dom.style.height = this.MAX_PIXEL + "px";
this.fcolct = Ext.get(this.id + "-x-spreadsheet-freeze-col-container");
this.fcolctInner = Ext.get(this.fcolct.dom.firstChild);
this.fcolctInner.dom.style.width = this.MAX_PIXEL + "px";
this.fcolctInner.dom.style.height = this.MAX_PIXEL + "px";
this.rowct = Ext.get(this.id + "-x-spreadsheet-row-container");
this.rowctInner = Ext.get(this.rowct.dom.firstChild);
this.rowctInner.dom.style.width = this.MAX_PIXEL + "px";
this.rowctInner.dom.style.height = this.MAX_PIXEL + "px";
this.colct = Ext.get(this.id + "-x-spreadsheet-col-container");
this.colctInner = Ext.get(this.colct.dom.firstChild);
this.colctInner.dom.style.width = this.MAX_PIXEL + "px";
this.colctInner.dom.style.height = this.MAX_PIXEL + "px";
this.lhct = Ext.get(this.id + "-x-spreadsheet-left-header-container");
this.lhctInner = Ext.get(this.lhct.dom.firstChild);
this.lhctInner.dom.style.width = this.MAX_PIXEL + "px";
this.lhctInner.dom.style.height = this.MAX_PIXEL + "px";
this.lsct = Ext.get(this.id + "-x-spreadsheet-left-scroller-container");
this.lsctInner = Ext.get(this.lsct.dom.firstChild);
this.lsctInner.dom.style.width = this.MAX_PIXEL + "px";
this.lsctInner.dom.style.height = this.MAX_PIXEL + "px";
this.hct = Ext.get(this.id + "-x-spreadsheet-header-container");
this.hctInner = Ext.get(this.hct.dom.firstChild);
this.hctInner.dom.style.width = this.MAX_PIXEL + "px";
this.hctInner.dom.style.height = this.MAX_PIXEL + "px";
this.sct = Ext.get(this.id + "-x-spreadsheet-scroller-container");
this.sctInner = Ext.get(this.sct.dom.firstChild);
this.sctInner.dom.style.width = this.MAX_PIXEL + "px";
this.sctInner.dom.style.height = this.MAX_PIXEL + "px";
this.sview = Ext.get(this.id + "-x-spreadsheet-viewport");
this.ylivescroller = Ext
.get(this.id + "-x-spreadsheet-live-scroller-y");
this.xlivescroller = Ext
.get(this.id + "-x-spreadsheet-live-scroller-x");
this.uylivescroller = Ext.get(this.id
+ "-x-spreadsheet-upper-live-scroller-y");
this.lxlivescroller = Ext.get(this.id
+ "-x-spreadsheet-left-live-scroller-x");
this.yfakebody = Ext.get(this.id + "-x-spreadsheet-fake-body-y");
this.xfakebody = Ext.get(this.id + "-x-spreadsheet-fake-body-x");
this.lxfakebody = Ext.get(this.id + "-x-spreadsheet-left-fake-body-x");
this.uyfakebody = Ext.get(this.id + "-x-spreadsheet-upper-fake-body-y");
this.scroller = Ext.get(this.id + "-x-spreadsheet-scroller");
this.sheader = Ext.get(this.id + "-x-spreadsheet-header");
this.sbody = Ext.get(this.id + "-x-spreadsheet-body");
this.lscroller = Ext.get(this.id + "-x-spreadsheet-left-scroller");
this.hscroller = Ext.get(this.id + "-x-spreadsheet-header-scroller");
this.lhscroller = Ext.get(this.id + "-x-spreadsheet-lh-scroller");
this.slheader = Ext.get(this.id + "-x-spreadsheet-left-header");
this.slbody = Ext.get(this.id + "-x-spreadsheet-left-body");
this.sfooter = Ext.get(this.id + "-x-spreadsheet-footer");
this.sftool = Ext.get(this.id + "-x-spreadsheet-footer-tool");
this.fadd = Ext.get(this.id + "-x-spreadsheet-footer-add");
this.ffirst = Ext.get(this.id + "-x-spreadsheet-footer-first");
this.fpre = Ext.get(this.id + "-x-spreadsheet-footer-pre");
this.fnext = Ext.get(this.id + "-x-spreadsheet-footer-next");
this.flast = Ext.get(this.id + "-x-spreadsheet-footer-last");
this.frest = Ext.get(this.id + "-x-spreadsheet-footer-rest");
this.hfocus = Ext.get(this.id + "-x-spreadsheet-hidefocus");
this.hfocus.swallowEvent("click", true);
this.initSheetNavEvents();
this.initScrollEvents();
this.initSViewEvents();
this.initHotKey();
var sm = this.sm;
sm.createBorder();
this.initSMEvents();
this.initSheetDragZone();
this.initFooterResizer();
if (this.settings.readOnlyView) {
this.fadd.dom.style.display = "none";
sm.hideBorder();
} else {
this.fadd.dom.style.display = "";
sm.handleFocus(sm.focusCell.x, sm.focusCell.y);
this.hfocus.focus();
}
},
initHotKey : function() {
var hk = this.hotkey;
if (!this.settings.readOnlyView) {
var docBody = Ext.getBody();
docBody.un("keydown", hk.onKeydownFn, hk);
docBody.un("keyup", hk.onKeyupFn, hk);
docBody.on("keydown", hk.onKeydownFn, hk);
docBody.on("keyup", hk.onKeyupFn, hk);
document.body.onkeypress = function(ev) {
if (ev) {
var obj = ev.srcElement || ev.target;
if (obj.tagName != "TEXTAREA" && obj.tagName != "INPUT") {
ev.preventDefault();
return false;
} else {
return true;
}
}
};
if (Ext.isIE) {
document.onselectstart = function() {
var tagName = event.srcElement.tagName.toLowerCase();
var formtags = "input,textarea";
if (formtags.indexOf(tagName) == -1) {
return false;
}
};
}
}
},
initSMEvents : function() {
var sm = this.sm;
var editor = this.editor;
var textCoverEl = Ext.get(sm.getTextCover());
textCoverEl.un("keydown", editor.onTextCoverKeyDownFn, editor);
textCoverEl.un("keyup", editor.onTextCoverKeyUpFn, editor);
textCoverEl.un("keypress", editor.onTextCoverKeyPressFn, editor);
textCoverEl.un("blur", editor.onTextCoverBlurFn, editor);
textCoverEl.un("focus", editor.onTextCoverFocusFn, editor);
textCoverEl.un("click", editor.onTextCoverClickFn, editor);
textCoverEl.on("click", editor.onTextCoverClickFn, editor);
textCoverEl.on("keydown", editor.onTextCoverKeyDownFn, editor);
textCoverEl.on("keyup", editor.onTextCoverKeyUpFn, editor);
textCoverEl.on("keypress", editor.onTextCoverKeyPressFn, editor);
textCoverEl.on("blur", editor.onTextCoverBlurFn, editor);
textCoverEl.on("focus", editor.onTextCoverFocusFn, editor);
},
initSViewEvents : function() {
this.sview.un("mousewheel", this.onMouseWheelFn, this);
this.body.un("mousedown", this.onBodyMouseDown, this);
this.sview.un("mousedown", this.chartManager.deselectChart,
this.chartManager);
this.sview
.un("mousemove", this.commenttip.onMouseMove, this.commenttip);
this.sview.un("dblclick", this.editor.onBodyDbClickFn, this.editor);
this.sview.on("mousewheel", this.onMouseWheelFn, this);
this.body.on("mousedown", this.onBodyMouseDown, this);
this.sview
.on("mousemove", this.commenttip.onMouseMove, this.commenttip);
this.sview.on("mousedown", this.chartManager.deselectChart,
this.chartManager);
this.sview.on("dblclick", this.editor.onBodyDbClickFn, this.editor);
if (!this.settings.readOnlyView) {
this.sview.un("contextmenu", this.contextmenu.onBodyContextMenuFn,
this.contextmenu);
this.sview.on("contextmenu", this.contextmenu.onBodyContextMenuFn,
this.contextmenu);
}
},
initScrollEvents : function() {
this.ylivescroller.un("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.un("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.uylivescroller.un("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.lxlivescroller.un("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.ylivescroller.dom.scrollTop = 0;
this.xlivescroller.dom.scrollLeft = 0;
this.ylivescroller.on("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.on("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.uylivescroller.on("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.lxlivescroller.on("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
},
initSheetNavEvents : function() {
if (this.ffirst) {
this.ffirst.addClassOnOver("x-spreadsheet-footer-over");
this.ffirst.addClassOnClick("x-spreadsheet-footer-selected");
this.ffirst.un("click", this.onFFirstClickFn, this);
this.ffirst.on("click", this.onFFirstClickFn, this);
}
if (this.fpre) {
this.fpre.addClassOnOver("x-spreadsheet-footer-over");
this.fpre.addClassOnClick("x-spreadsheet-footer-selected");
this.fpre.un("click", this.onFPreClickFn, this);
this.fpre.on("click", this.onFPreClickFn, this);
}
if (this.fnext) {
this.fnext.addClassOnOver("x-spreadsheet-footer-over");
this.fnext.addClassOnClick("x-spreadsheet-footer-selected");
this.fnext.un("click", this.onFNextClickFn, this);
this.fnext.on("click", this.onFNextClickFn, this);
}
if (this.flast) {
this.flast.addClassOnOver("x-spreadsheet-footer-over");
this.flast.addClassOnClick("x-spreadsheet-footer-selected");
this.flast.un("click", this.onFLastClickFn, this);
this.flast.on("click", this.onFLastClickFn, this);
}
if (this.fadd) {
this.fadd.addClassOnOver("x-spreadsheet-footer-over");
this.fadd.addClassOnClick("x-spreadsheet-footer-selected");
this.fadd.un("click", this.onFAddClickFn, this);
this.fadd.on("click", this.onFAddClickFn, this);
}
this.fcontainer.un("click", this.onFContainerClickFn, this);
this.fcontainer.un("dblclick", this.onFContainerDblClickFn, this);
this.fcontainer.un("contextmenu", this.onFContainerContextMenuFn, this);
this.fcontainer.on("click", this.onFContainerClickFn, this);
this.fcontainer.on("dblclick", this.onFContainerDblClickFn, this);
this.fcontainer.on("contextmenu", this.onFContainerContextMenuFn, this);
},
onBodyMouseDown : function(e) {
var tgEl = e.getTarget(null, null, true);
if (tgEl.hasClass("x-spreadsheet-filter")) {
var xy = e.getXY();
var pos = this.ds.getPosFromXY(xy[0], xy[1]);
this.showFilterMenu(pos, e);
} else {
var ds = this.ds, sm = this.sm;
var isGroup = tgEl.hasClass("x-spreadsheet-group");
if (isGroup || tgEl.hasClass("x-spreadsheet-group-pin")) {
var dir = tgEl.getAttribute("dirtype"), min = tgEl
.getAttribute("min"), max = tgEl.getAttribute("max");
min = Number(min);
max = Number(max);
if (!isGroup) {
tgEl = tgEl.parent();
}
if ("col" == dir) {
var colSetting = ds.data.colSetting;
var groupCollapsed = colSetting[min].groupCollapsed;
if (groupCollapsed) {
for (var i = min; i <= max; i++) {
var arr = [["groupCollapsed", false]];
if (i != min) {
arr.push(["display", ""]);
}
ds.fireEvent("colattributechange", i, arr);
}
this.refreshRange();
ds.trace(feyaSoft.ss.lang.expand_col_group);
sm.fireEvent("renderborder");
} else {
for (var i = min; i <= max; i++) {
var arr = [["groupCollapsed", true]];
if (i != min) {
arr.push(["display", "none"]);
}
ds.fireEvent("colattributechange", i, arr);
}
ds.trace(feyaSoft.ss.lang.collapse_col_group);
this.refreshRange();
sm.fireEvent("renderborder");
}
} else {
var rowSetting = ds.data.rowSetting;
var groupCollapsed = rowSetting[min].groupCollapsed;
if (groupCollapsed) {
for (var i = min; i <= max; i++) {
var arr = [["groupCollapsed", false]];
if (i != min) {
arr.push(["display", ""]);
}
ds.fireEvent("rowattributechange", i, arr);
}
ds.trace(feyaSoft.ss.lang.expand_row_group);
this.refreshRange();
sm.fireEvent("renderborder");
} else {
for (var i = min; i <= max; i++) {
var arr = [["groupCollapsed", true]];
if (i != min) {
arr.push(["display", "none"]);
}
ds.fireEvent("rowattributechange", i, arr);
}
ds.trace(feyaSoft.ss.lang.collapse_row_group);
this.refreshRange();
sm.fireEvent("renderborder");
}
}
} else {
this.sm.onBodyMouseDownFn(e);
this.hotkey.mouseKeydown(e);
}
}
},
onFootresizerMouseDownFn : function(e) {
e.stopEvent();
this.footResizing = true;
},
onFootresizerMouseUpFn : function(e) {
delete this.footResizing;
},
onFootresizerMouseMoveFn : function(e) {
if (this.footResizing) {
var footerToolWidth = this.sftool.getWidth();
var left = e.getXY()[0] - this.fcontainer.getLeft();
if (left < 0) {
var sw = this.sftool.getWidth() + left;
if (sw < 1) {
sw = 1;
}
this.sftool.setWidth(sw);
footerToolWidth = this.sftool.getWidth();
left = 0;
} else if (footerToolWidth < this.footerToolWidth) {
var sw = footerToolWidth + left;
if (sw > this.footerToolWidth) {
left = sw - this.footerToolWidth;
sw = this.footerToolWidth;
} else {
left = 0;
}
this.sftool.setWidth(sw);
footerToolWidth = this.sftool.getWidth();
}
if (this.isColSplit()) {
var width = this.availWidth - this.xlivescroller.getWidth()
- this.SPLIT_BAR_SIZE;
var ml = width - footerToolWidth - this.SPLIT_BAR_SIZE;
if (left > ml - 1) {
left = ml - 1;
}
var w = left + this.SPLIT_BAR_SIZE;
this.fcontainer.setWidth(w);
this.footerWidth = w + footerToolWidth;
var fw = width - this.footerWidth;
this.lxlivescroller.setWidth(fw);
this.sysLeftXFakebody(this.freezeRange, this.showRange);
} else {
var ml = this.availWidth - footerToolWidth
- this.SPLIT_BAR_SIZE * 2;
if (left > ml) {
left = ml;
}
var w = left + this.SPLIT_BAR_SIZE;
this.fcontainer.setWidth(w);
this.footerWidth = w + footerToolWidth;
var fw = this.availWidth - this.footerWidth;
this.xlivescroller.setWidth(fw - this.SPLIT_BAR_SIZE);
this.sysXFakebody(this.freezeRange, this.showRange);
}
}
},
resetFooterResizer : function() {
this.footresizer.un("mousedown", this.onFootresizerMouseDownFn, this);
Ext.EventManager.un(document, "mouseup", this.onFootresizerMouseUpFn,
this);
Ext.EventManager.un(document, "mousemove",
this.onFootresizerMouseMoveFn, this);
},
initFooterResizer : function() {
this.resetFooterResizer();
this.footresizer.on("mousedown", this.onFootresizerMouseDownFn, this);
Ext.EventManager.on(document, "mouseup", this.onFootresizerMouseUpFn,
this);
Ext.EventManager.on(document, "mousemove",
this.onFootresizerMouseMoveFn, this);
},
initSheetDragZone : function() {
if (this.sheetDragZone) {
this.sheetDragZone.unreg();
}
var proxy = new Ext.dd.StatusProxy({
dropNotAllowed : "x-dd-drop-ok"
});
this.sheetDragZone = new Ext.dd.DragZone(this.fcontainer, {
ddGroup : "x-spreadsheet-sheet",
proxy : proxy,
scroll : false,
proxyOffsets : [-4, -9],
spreadsheet : this,
onInitDrag : function(x, y) {
this.proxyTop = Ext.DomHelper.append(document.body, {
cls : "col-move-top",
html : " "
}, true);
this.proxyTop.hide = function() {
this.setLeftTop(-100, -100);
this.setStyle("visibility", "hidden");
};
var clone = this.dragData.ddel.cloneNode(true);
this.proxy.update(clone);
this.onStartDrag(x, y);
return true;
},
getDragData : function(e) {
var target = e.getTarget();
var tgEl = Ext.get(target);
if (tgEl
.hasClass("x-spreadsheet-sheet-inactive-center")
|| tgEl
.hasClass("x-spreadsheet-sheet-active-center")) {
this.dragSheetIndex = this.spreadsheet
.getIndexForSheet(tgEl.dom);
var ddel = tgEl.dom.cloneNode(true);
return {
ddel : ddel
};
} else {
return false;
}
},
getRepairXY : function(e, data) {
return null;
},
onDrag : function(e) {
var ss = this.spreadsheet;
ss.dragingSheet = true;
var xy = e.getXY();
var x = xy[0];
ss.scrollSheet(x);
var pos = ss.getIndicatorPosFromX(x);
var l = pos.l + this.proxyOffsets[0];
var t = pos.t + this.proxyOffsets[1];
this.dropSheetIndex = pos.index;
this.proxyTop.setLeftTop(l, t);
this.proxyTop.show();
},
endDrag : function(e) {
var ss = this.spreadsheet;
e.stopEvent();
this.proxyTop.hide();
ss.moveSheet(this.dragSheetIndex, this.dropSheetIndex);
(function () {
ss.dragingSheet = false;
}).defer(1);
}
});
},
scrollSheet : function(x) {
var l = this.fcontainer.getLeft();
var r = this.fcontainer.getRight();
if (x < l) {
if ("none" == this.sline.dom.firstChild.style.display) {
this.onFPreClickFn();
}
} else if (x > r) {
this.onFNextClickFn();
}
},
getIndicatorPosFromX : function(x) {
var sn = this.sline.dom.childNodes;
var len = sn.length;
var lstEl = Ext.get(sn[len - 2]);
var l = lstEl.getRight(), t = lstEl.getTop(), index = Math.floor(len
/ 2)
- 1;
var cEl, lEl, rEl;
for (var i = 0; i < len - 1; i++) {
var td = sn[i];
if ("none" != td.style.display
&& ("x-spreadsheet-sheet-inactive-center" == td.className || "x-spreadsheet-sheet-active-center" == td.className)) {
cEl = Ext.get(td);
lEl = cEl.prev();
rEl = cEl.next();
var left = lEl.getRight();
var right = rEl.getRight();
if (x <= right) {
index = Math.floor((i - 1) / 2);
if (x > (right + left) / 2) {
l = right;
t = rEl.getTop();
index++;
} else {
l = left;
t = lEl.getTop();
}
break;
}
}
}
return {
index : index,
l : l,
t : t
};
},
onRenameSheetFn : function(item) {
var bindSheet = item.parentMenu.bindSheet;
this.sheetEditor.bindSheet = bindSheet;
this.sheetEditor.startEdit(bindSheet.El, bindSheet.name);
},
onInsertSheetFn : function(item) {
this.onFAddClickFn();
},
onDeleteSheetFn : function(item) {
Ext.Msg.show({
title : "Confirm",
msg : "Are you sure you want to permanently delete this sheet?",
buttons : Ext.Msg.YESNO,
icon : Ext.MessageBox.QUESTION,
fn : function(bid, text) {
if ("yes" == bid) {
var bindSheet = item.parentMenu.bindSheet;
var ds = this.ds;
this.chartManager.cleanCharts();
ds.deleteSheet(bindSheet.index, function() {
this.chartManager.displayCharts(
ds.activeSheet, "");
this.updateSheetStatus();
this.reloadUI();
}, this);
}
},
scope : this
});
},
onCopySheetFn : function(item) {
var ds = this.ds;
var bindSheet = item.parentMenu.bindSheet;
this.addSheetWin.popup({
title : "Copy " + bindSheet.name + " into a new sheet as",
bindSheet : bindSheet
});
},
initSheetMenu : function() {
this.insertSheetItem = new Ext.menu.Item({
iconCls : "icon_insert_sheet",
text : "Insert Sheet",
handler : this.onInsertSheetFn,
scope : this
});
this.renameSheetItem = new Ext.menu.Item({
iconCls : "icon_rename_sheet",
text : "Rename Sheet",
handler : this.onRenameSheetFn,
scope : this
});
this.deleteSheetItem = new Ext.menu.Item({
iconCls : "icon_delete_sheet",
text : "Delete Sheet",
handler : this.onDeleteSheetFn,
scope : this
});
this.copySheetItem = new Ext.menu.Item({
iconCls : "icon_copy_sheet",
text : "Copy Sheet",
handler : this.onCopySheetFn,
scope : this
});
this.smenu = new Ext.menu.Menu({
items : [this.insertSheetItem, this.renameSheetItem,
this.deleteSheetItem, this.copySheetItem]
});
},
onFContainerContextMenuFn : function(e) {
e.stopEvent();
var ds = this.ds;
var target = e.getTarget();
var tgEl = Ext.get(target);
if (tgEl.hasClass("x-spreadsheet-sheet-inactive-center")
|| tgEl.hasClass("x-spreadsheet-sheet-active-center")) {
var index = this.getIndexForSheet(tgEl.dom);
var sname = ds.sheets[index].name;
this.smenu.bindSheet = {
index : index,
name : sname,
El : tgEl
};
if (1 < ds.sheets.length) {
this.deleteSheetItem.show();
} else {
this.deleteSheetItem.hide();
}
this.smenu.show(target, "bl-tl");
}
},
onFContainerDblClickFn : function(e) {
var ds = this.ds;
var target = e.getTarget();
var tgEl = Ext.get(target);
if (tgEl.hasClass("x-spreadsheet-sheet-active-center")) {
var index = this.getIndexForSheet(target);
var sname = ds.sheets[index].name;
this.sheetEditor.bindSheet = {
index : index,
name : sname,
El : tgEl
};
this.sheetEditor.startEdit(target, sname);
}
},
onFAddClickFn : function(e) {
this.addSheetWin.popup();
},
onFFirstClickFn : function(e) {
for (var i = 0; i < this.sline.dom.childNodes.length - 1; i++) {
var td = this.sline.dom.childNodes[i];
td.style.display = "";
}
},
onFPreClickFn : function(e) {
var p = -1;
for (var i = this.sline.dom.childNodes.length - 2; i >= 0; i--) {
var td = this.sline.dom.childNodes[i];
if ("none" == td.style.display) {
td.style.display = "";
if (-1 == p) {
p = Math.floor(i / 2) * 2;
}
if (i == p) {
break;
}
}
}
},
onFNextClickFn : function(e) {
var fw = this.fcontainer.getWidth();
var rw = this.sline.getWidth();
var w = fw - rw;
if (0 > w) {
var p = -1;
for (var i = 0, len = this.sline.dom.childNodes.length - 4; i < len; i++) {
var td = this.sline.dom.childNodes[i];
if ("none" != td.style.display) {
td.style.display = "none";
if (-1 == p) {
p = Math.floor(i / 2 + 1) * 2 - 1;
}
if (i == p) {
break;
}
}
}
}
},
onFLastClickFn : function(e) {
this.locateSheetPosition();
},
onFContainerClickFn : function(e) {
if (!this.dragingSheet) {
var target = e.getTarget();
var tgEl = Ext.get(target);
if (tgEl.hasClass("x-spreadsheet-sheet-inactive-center")) {
var index = this.getIndexForSheet(target);
this.changeSheet(index, tgEl);
}
}
},
getIndexForSheet : function(target) {
var pn = target.parentNode;
var index = 0;
for (var i = 0, len = pn.childNodes.length; i < len; i++) {
var cn = pn.childNodes[i];
if (cn == target) {
break;
}
if ("x-spreadsheet-sheet-active-center" == cn.className
|| "x-spreadsheet-sheet-inactive-center" == cn.className) {
index++;
}
}
return index;
},
turnOffActive : function() {
var els = Ext.DomQuery.select(
"td[class=x-spreadsheet-sheet-active-center]",
this.fcontainer.dom);
for (var i = 0, len = els.length; i < len; i++) {
var el = els[i];
el.className = "x-spreadsheet-sheet-inactive-center";
var txt = el.innerHTML;
el.innerHTML = txt;
}
els = Ext.DomQuery.select("div[class=x-spreadsheet-sheet-active-left]",
this.fcontainer.dom);
for (var i = 0, len = els.length; i < len; i++) {
var el = els[i];
el.className = "x-spreadsheet-sheet-inactive-left";
}
els = Ext.DomQuery.select(
"div[class=x-spreadsheet-sheet-active-right]",
this.fcontainer.dom);
for (var i = 0, len = els.length; i < len; i++) {
var el = els[i];
el.className = "x-spreadsheet-sheet-inactive-right-inactive";
}
els = Ext.DomQuery.select(
"div[class=x-spreadsheet-sheet-active-right-none]",
this.fcontainer.dom);
for (var i = 0, len = els.length; i < len; i++) {
var el = els[i];
el.className = "x-spreadsheet-sheet-inactive-right";
}
els = Ext.DomQuery.select(
"div[class=x-spreadsheet-sheet-inactive-right-active]",
this.fcontainer.dom);
for (var i = 0, len = els.length; i < len; i++) {
var el = els[i];
el.className = "x-spreadsheet-sheet-inactive-right-inactive";
}
},
locateSheetPosition : function(max) {
if (0 != max) {
max = max || this.sline.dom.childNodes.length;
}
var fw = this.fcontainer.getWidth();
var rw = this.sline.getWidth();
var w = fw - rw;
if (0 > w) {
w = -1 * w;
var a = 0;
for (var i = 0; i < max; i++) {
var td = this.sline.dom.childNodes[i];
a += Ext.get(td).getWidth();
td.style.display = "none";
if (a > w) {
break;
}
}
}
},
changeSheetStatus : function(index, tgEl) {
this.turnOffActive();
if (!tgEl) {
tgEl = Ext.get(this.sline.dom.childNodes[1 + 2 * index]);
}
tgEl.dom.className = "x-spreadsheet-sheet-active-center";
var txt = tgEl.dom.innerHTML;
tgEl.dom.innerHTML = txt;
var rEl = tgEl.next();
var r = rEl.dom.firstChild;
var name = r.className;
if ("x-spreadsheet-sheet-inactive-right-inactive" == name) {
r.className = "x-spreadsheet-sheet-active-right";
} else if ("x-spreadsheet-sheet-inactive-right" == name) {
r.className = "x-spreadsheet-sheet-active-right-none";
}
var lEl = tgEl.prev();
var l = lEl.dom.firstChild;
name = l.className;
if ("x-spreadsheet-sheet-inactive-right-inactive" == name) {
l.className = "x-spreadsheet-sheet-inactive-right-active";
} else if ("x-spreadsheet-sheet-inactive-left" == name) {
l.className = "x-spreadsheet-sheet-active-left";
}
this.locateSheetPosition(2 * index);
},
changeSheet : function(index, tgEl) {
var ds = this.ds, sm = this.sm;
var oldIndex = ds.activeSheet;
this.resetCutStatus();
this.chartManager.displayCharts(ds.activeSheet, "none");
this.maskUI(feyaSoft.ss.lang.loadSheet);
(function() {
var fr = this.copyRange(this.freezeRange);
ds.changeSheet(index, function() {
this.chartManager.displayCharts(ds.activeSheet, "");
this.reloadUI(fr);
this.processCrossSheetEditing(oldIndex, index);
this.checkEditorForCrossEditing(oldIndex, index);
this.unmaskUI();
}, this);
}).defer(10, this);
},
checkEditorForCrossEditing : function(oldSheetIndex, sheetIndex) {
var sm = this.sm, ds = this.ds;
var textCover = sm.getTextCover();
var textCoverEl = Ext.get(textCover);
if (textCoverEl.isVisible()
&& Ext.ss.common.Mask.isFormula(textCover.value)) {
var pos = textCover.pos;
var focusEl = textCoverEl.parent(), pnode = focusEl.parent();
var labelEl = pnode.child(".x-spreadsheet-focus-label");
if (pos.sheetIndex != ds.activeSheet) {
var sheetName = ds.sheets[pos.sheetIndex].name;
var posStr = sheetName + "!" + ds.getLetter(pos.y) + pos.x;
if (!labelEl) {
labelEl = Ext.DomHelper.append(pnode,
"
",
true);
}
labelEl.update(posStr);
labelEl.setLeft(focusEl.getLeft() - pnode.getLeft());
labelEl.setTop(focusEl.getTop() - pnode.getTop()
- labelEl.getHeight());
} else if (labelEl) {
Ext.removeNode(labelEl.dom);
}
}
},
initEvents : function() {
Ext.ss.SpreadSheet.superclass.initEvents.call(this);
if (this.loadMask) {
this.loadMask = new Ext.LoadMask(this.getEl(), Ext.apply({
msg : "Loading data and rendering UI..."
}, this.loadMask));
}
},
calculateRange : function(availWidth, availHeight, flag) {
this.availWidth = availWidth;
this.availHeight = availHeight;
this.adjustWidth = this.ylivescroller.getWidth()
+ this.scroller.getWidth();
this.adjustHeight = this.scroller.getHeight()
+ this.xlivescroller.getHeight();
var fr = this.freezeRange, sr = this.showRange;
var rt, rowNum, colNum;
if (this.splitFlag) {
var freezeWidth = this.lhct.getWidth(), freezeHeight = this.lhct
.getHeight();
rt = this.ds.calculateShowRange(fr.row.start, fr.col.start,
freezeWidth, freezeHeight);
rowNum = rt.rowNum;
colNum = rt.colNum;
if (fr.row.len !== rowNum) {
fr.row.len = rowNum;
fr.row.end = fr.row.start + rowNum - 1;
flag = true;
}
if (fr.col.len !== colNum) {
fr.col.len = colNum;
fr.col.end = fr.col.start + colNum - 1;
flag = true;
}
}
rt = this.ds.calculateShowRange(sr.row.start, sr.col.start,
this.adjustWidth, this.adjustHeight);
rowNum = rt.rowNum;
colNum = rt.colNum;
if (sr.row.len !== rowNum) {
sr.row.len = rowNum;
sr.row.end = sr.row.start + rowNum - 1;
flag = true;
}
if (sr.col.len !== colNum) {
sr.col.len = colNum;
sr.col.end = sr.col.start + colNum - 1;
flag = true;
}
return flag;
},
adjustShowRange : function(availWidth, availHeight, flag, fixed) {
flag = this.calculateRange(availWidth, availHeight, flag);
if (true == flag) {
this.renderRange(this.freezeRange, this.showRange, true, fixed);
}
this.adjustLiveScroller();
},
onScrollUBottomFn : function(inc) {
this.uyfakebody.setHeight(this.uyfakebody.getHeight() + (inc + 1)
* this.yScrollOffset);
this.uylivescroller.dom.scrollTop += inc * this.yScrollOffset;
this.uLastPosy += inc;
},
onScrollBottomFn : function(inc) {
this.yfakebody.setHeight(this.yfakebody.getHeight() + (inc + 1)
* this.yScrollOffset);
this.ylivescroller.dom.scrollTop += inc * this.yScrollOffset;
this.lastPosy += inc;
},
onScrollLRightFn : function(inc) {
this.lxfakebody.setWidth(this.lxfakebody.getWidth() + (inc + 1)
* this.xScrollOffset);
this.lxlivescroller.dom.scrollLeft += inc * this.xScrollOffset;
this.lLastPosx += inc;
},
onScrollRightFn : function(inc) {
this.xfakebody.setWidth(this.xfakebody.getWidth() + (inc + 2)
* this.xScrollOffset);
this.xlivescroller.dom.scrollLeft += inc * this.xScrollOffset;
this.lastPosx += inc;
},
onYLiveScrollFn : function(e) {
e.stopEvent();
this.ylivescroller.un("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
var fr = this.freezeRange, sr = this.showRange;
var sm = this.sm, ds = this.ds;
var pos;
if (Math.abs(this.ylivescroller.dom.scrollTop - this.lastScrollPosy) < this.yScrollOffset) {
if (this.ylivescroller.dom.scrollTop < this.lastScrollPosy) {
this.ylivescroller.dom.scrollTop = this.lastScrollPosy
- this.yScrollOffset;
} else if (this.ylivescroller.dom.scrollTop > this.lastScrollPosy
|| this.ylivescroller.dom.scrollTop == 0) {
this.ylivescroller.dom.scrollTop = this.lastScrollPosy
+ this.yScrollOffset;
}
}
pos = Math.floor(this.ylivescroller.dom.scrollTop / this.yScrollOffset);
var fn = function() {
var sIndex;
if (this.splitFlag) {
sIndex = ds.walkVisibleRow(1, pos);
} else {
sIndex = ds.walkVisibleRow(fr.row.end + 1, pos);
}
this.renderRows(sIndex);
};
var span = this.ylivescroller.dom.scrollTop
+ this.ylivescroller.getHeight();
var xh = this.yfakebody.getHeight();
var renderFlag = false;
if (true == this.autoRowSelected) {
fn.call(this);
sm.fireEvent("updateselected", this, "row");
this.autoRowSelected = false;
renderFlag = true;
} else {
if (sm.downFlag) {
if (xh - span <= this.yScrollOffset) {
this.onScrollBottomFn(this.rowInc);
pos += this.rowInc;
}
}
fn.call(this);
}
this.ylivescroller.dom.scrollTop = pos * this.yScrollOffset;
this.fireEvent("yscrolling", this.ylivescroller.dom.scrollTop
- this.lastScrollPosy);
this.lastScrollPosy = this.ylivescroller.dom.scrollTop;
if (renderFlag) {
sm.fireEvent("renderborder");
}
this.ylivescroller.on("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
},
onUYLiveScrollFn : function(e) {
e.stopEvent();
this.uylivescroller.un("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
var fr = this.freezeRange, sr = this.showRange;
var sm = this.sm, ds = this.ds;
var pos;
if (Math.abs(this.uylivescroller.dom.scrollTop - this.uLastScrollPosy) < this.yScrollOffset) {
if (this.uylivescroller.dom.scrollTop < this.uLastScrollPosy) {
this.uylivescroller.dom.scrollTop = this.uLastScrollPosy
- this.yScrollOffset;
} else if (this.uylivescroller.dom.scrollTop > this.uLastScrollPosy
|| this.uylivescroller.dom.scrollTop == 0) {
this.uylivescroller.dom.scrollTop = this.uLastScrollPosy
+ this.yScrollOffset;
}
}
pos = Math
.floor(this.uylivescroller.dom.scrollTop / this.yScrollOffset);
var fn = function() {
var sIndex = ds.walkVisibleRow(1, pos);
this.renderURows(sIndex);
};
var span = this.uylivescroller.dom.scrollTop
+ this.uylivescroller.getHeight();
var xh = this.uyfakebody.getHeight();
var renderFlag = false;
if (true == this.autoRowSelected) {
fn.call(this);
sm.fireEvent("updateselected", this, "urow");
this.autoRowSelected = false;
renderFlag = true;
} else {
if (sm.downFlag) {
if (xh - span <= this.yScrollOffset) {
this.onScrollUBottomFn(this.rowInc);
pos += this.rowInc;
}
}
fn.call(this);
}
this.uylivescroller.dom.scrollTop = pos * this.yScrollOffset;
this.fireEvent("uyscrolling", this.uylivescroller.dom.scrollTop
- this.uLastScrollPosy);
this.uLastScrollPosy = this.uylivescroller.dom.scrollTop;
if (renderFlag) {
sm.fireEvent("renderborder");
}
this.uylivescroller.on("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
},
onLXLiveScrollFn : function(e) {
e.stopEvent();
var fr = this.freezeRange;
this.lxlivescroller.un("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
var sm = this.sm, ds = this.ds;
var pos;
if (Math.abs(this.lxlivescroller.dom.scrollLeft - this.lLastScrollPosx) < this.xScrollOffset) {
if (this.lxlivescroller.dom.scrollLeft < this.lLastScrollPosx) {
this.lxlivescroller.dom.scrollLeft = this.lLastScrollPosx
- this.xScrollOffset;
} else if (this.lxlivescroller.dom.scrollLeft > this.lLastScrollPosx) {
this.lxlivescroller.dom.scrollLeft = this.lLastScrollPosx
+ this.xScrollOffset;
}
}
pos = Math.floor(this.lxlivescroller.dom.scrollLeft
/ this.xScrollOffset);
var fn = function() {
var sIndex = ds.walkVisibleCol(1, pos);
this.renderLCols(sIndex);
};
var span = this.lxlivescroller.dom.scrollLeft
+ this.lxlivescroller.getWidth();
var xw = this.lxfakebody.getWidth();
var renderFlag = false;
if (true === this.autoColSelected) {
fn.call(this);
sm.fireEvent("updateselected", this, "lcol");
this.autoColSelected = false;
renderFlag = true;
} else {
if (sm.downFlag) {
if (xw - span <= this.xScrollOffset) {
this.onScrollLRightFn(this.colInc);
pos += this.colInc;
}
}
fn.call(this);
}
this.lxlivescroller.dom.scrollLeft = pos * this.xScrollOffset;
this.fireEvent("lxscrolling", this.lxlivescroller.dom.scrollLeft
- this.lLastScrollPosx);
this.lLastScrollPosx = this.lxlivescroller.dom.scrollLeft;
if (renderFlag) {
sm.fireEvent("renderborder");
}
this.lxlivescroller.on("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
},
onXLiveScrollFn : function(e) {
var fr = this.freezeRange, sr = this.showRange;
this.xlivescroller.un("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
var sm = this.sm, ds = this.ds;
var pos;
if (Math.abs(this.xlivescroller.dom.scrollLeft - this.lastScrollPosx) < this.xScrollOffset) {
if (this.xlivescroller.dom.scrollLeft < this.lastScrollPosx) {
this.xlivescroller.dom.scrollLeft = this.lastScrollPosx
- this.xScrollOffset;
} else if (this.xlivescroller.dom.scrollLeft > this.lastScrollPosx) {
this.xlivescroller.dom.scrollLeft = this.lastScrollPosx
+ this.xScrollOffset;
}
}
pos = Math
.floor(this.xlivescroller.dom.scrollLeft / this.xScrollOffset);
var fn = function() {
var sIndex;
if (this.splitFlag) {
sIndex = ds.walkVisibleCol(1, pos);
} else {
sIndex = ds.walkVisibleCol(fr.col.end + 1, pos);
}
this.renderCols(sIndex);
};
var span = this.xlivescroller.dom.scrollLeft
+ this.xlivescroller.getWidth();
var xw = this.xfakebody.getWidth();
var renderFlag = false;
if (true === this.autoColSelected) {
fn.call(this);
sm.fireEvent("updateselected", this, "col");
this.autoColSelected = false;
renderFlag = true;
} else {
if (sm.downFlag) {
if (xw - span <= this.xScrollOffset) {
this.onScrollRightFn(this.colInc);
pos += this.colInc;
}
}
fn.call(this);
}
this.xlivescroller.dom.scrollLeft = pos * this.xScrollOffset;
this.fireEvent("xscrolling", this.xlivescroller.dom.scrollLeft
- this.lastScrollPosx);
this.lastScrollPosx = this.xlivescroller.dom.scrollLeft;
if (renderFlag) {
sm.fireEvent("renderborder");
}
this.xlivescroller.on("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
},
onRemoveLeftHeaderColsFn : function(sp, start, end) {
var headerChildren = this.slheader.dom.childNodes;
var len = headerChildren.length;
for (var j = start; j <= end; j++) {
for (var i = 0; i < len; i++) {
var row = headerChildren[i].firstChild.firstChild.firstChild;
var children = row.childNodes;
Ext.removeNode(children[start]);
}
}
},
onRemoveHeaderColsFn : function(sp, start, end) {
var headerChildren = this.sheader.dom.childNodes;
var len = headerChildren.length;
for (var j = start; j <= end; j++) {
for (var i = 0; i < len; i++) {
var row = headerChildren[i].firstChild.firstChild.firstChild;
var children = row.childNodes;
Ext.removeNode(children[start]);
}
}
},
onRemoveLeftBodyColsFn : function(sp, start, end) {
var bodyChildren = this.slbody.dom.childNodes;
var len = bodyChildren.length;
for (var j = start; j <= end; j++) {
for (var i = 0; i < len; i++) {
var row = bodyChildren[i].firstChild.firstChild.firstChild;
var children = row.childNodes;
Ext.removeNode(children[start]);
}
}
},
onRemoveBodyColsFn : function(sp, start, end) {
var bodyChildren = this.sbody.dom.childNodes;
var len = bodyChildren.length;
for (var j = start; j <= end; j++) {
for (var i = 0; i < len; i++) {
var row = bodyChildren[i].firstChild.firstChild.firstChild;
var children = row.childNodes;
Ext.removeNode(children[start]);
}
}
},
removeCols : function(start, end, fillWidth) {
var ds = this.ds;
if (fillWidth) {
var eIndex = this.showRange.col.end;
end = eIndex;
start = end + 1;
var cw = w = ds.getColWidth(eIndex), dw = 0;
while (cw <= fillWidth) {
if (0 !== w) {
start--;
}
eIndex--;
dw = cw;
w = ds.getColWidth(eIndex);
cw += w;
}
if (start <= end) {
var len = this.sheader.dom.firstChild.firstChild.firstChild.firstChild.childNodes.length;
start = len - (end - start) - 1;
end = len - 1;
this.fireEvent("removeHeaderCols", this, start, end);
this.fireEvent("removeBodyCols", this, start, end);
}
return {
dw : dw,
colEnd : eIndex
};
} else {
var base = this.showRange.col.start;
this.fireEvent("removeHeaderCols", this, start, end);
this.fireEvent("removeBodyCols", this, start, end);
var span = end - start;
start += base;
return {
dw : ds.getWidth(start, ds.walkVisibleCol(start, span))
};
}
},
removeLCols : function(start, end, fillWidth) {
var ds = this.ds;
if (fillWidth) {
var eIndex = this.freezeRange.col.end;
end = eIndex;
start = end + 1;
var cw = w = ds.getColWidth(eIndex), dw = 0;
while (cw <= fillWidth) {
if (0 !== w) {
start--;
}
eIndex--;
dw = cw;
w = ds.getColWidth(eIndex);
cw += w;
}
if (start <= end) {
var len = this.slheader.dom.firstChild.firstChild.firstChild.firstChild.childNodes.length;
start = len - (end - start + 1);
end = len - 1;
this.fireEvent("removeLeftHeaderCols", this, start, end);
this.fireEvent("removeLeftBodyCols", this, start, end);
}
return {
dw : dw,
colEnd : eIndex
};
} else {
var base = this.freezeRange.col.start - 1;
this.fireEvent("removeLeftHeaderCols", this, start, end);
this.fireEvent("removeLeftBodyCols", this, start, end);
var span = end - start;
start += base;
return {
dw : ds.getWidth(start, ds.walkVisibleCol(start, span))
};
}
},
removeURows : function(start, end, fillHeight) {
var ds = this.ds;
if (fillHeight) {
var eIndex = this.freezeRange.row.end;
end = eIndex;
start = end + 1;
var rh = h = ds.getRowHeight(eIndex), dh = 0;
while (rh <= fillHeight) {
if (0 !== h) {
start--;
}
eIndex--;
dh = rh;
h = ds.getRowHeight(eIndex);
rh += h;
}
if (start <= end) {
var len = this.sheader.dom.childNodes.length;
start = len - (end - start) - 1;
end = len - 1;
this.fireEvent("removeLeftHeaderRows", this, start, end);
this.fireEvent("removeHeaderRows", this, start, end);
}
return {
dh : dh,
rowEnd : eIndex
};
} else {
var base = this.freezeRange.row.start - 1;
this.fireEvent("removeLeftHeaderRows", this, start, end);
this.fireEvent("removeHeaderRows", this, start, end);
var span = end - start;
start += base;
return {
dh : ds.getHeight(start, ds.walkVisibleRow(start, span))
};
}
},
removeRows : function(start, end, fillHeight) {
var ds = this.ds;
if (fillHeight) {
var eIndex = this.showRange.row.end;
end = eIndex;
start = end + 1;
var rh = h = ds.getRowHeight(eIndex), dh = 0;
while (rh <= fillHeight) {
if (0 !== h) {
start--;
}
eIndex--;
dh = rh;
h = ds.getRowHeight(eIndex);
rh += h;
}
if (start <= end) {
var len = this.sbody.dom.childNodes.length;
start = len - (end - start + 1);
end = len - 1;
this.fireEvent("removeLeftBodyRows", this, start, end);
this.fireEvent("removeBodyRows", this, start, end);
}
return {
dh : dh,
rowEnd : eIndex
};
} else {
var base = this.showRange.row.start;
this.fireEvent("removeLeftBodyRows", this, start, end);
this.fireEvent("removeBodyRows", this, start, end);
var span = end - start;
start += base;
return {
dh : ds.getHeight(start, ds.walkVisibleRow(start, span))
};
}
},
onRemoveLeftHeaderRowsFn : function(sp, start, end) {
var children = this.slheader.dom.childNodes;
for (var i = start; i <= end; i++) {
Ext.removeNode(children[start]);
}
},
onRemoveLeftBodyRowsFn : function(sp, start, end) {
var children = this.slbody.dom.childNodes;
for (var i = start; i <= end; i++) {
Ext.removeNode(children[start]);
}
},
onRemoveHeaderRowsFn : function(sp, start, end) {
var children = this.sheader.dom.childNodes;
for (var i = start; i <= end; i++) {
Ext.removeNode(children[start]);
}
},
onRemoveBodyRowsFn : function(sp, start, end) {
var children = this.sbody.dom.childNodes;
for (var i = start; i <= end; i++) {
Ext.removeNode(children[start]);
}
},
renderURows : function(start) {
var ds = this.ds;
var fr = this.freezeRange;
var spill = ds.getVisibleRowOffset(start, fr.row.start);
if (0 === spill) {
return;
}
var append = spill > 0;
spill = Math.abs(spill);
var fh = this.lhscroller.getHeight();
if (spill >= fr.row.len) {
var lists = this.generateURows(start, null, fh);
this.slh = lists.rh;
this.fireEvent("updateLeftHeader", this, lists.laddlist);
this.fireEvent("updateHeader", this, lists.addlist);
fr.row.end = lists.rowEnd;
} else {
if (append) {
var rt = this.removeURows(1, spill);
this.slh -= rt.dh;
fh -= this.slh;
if (0 >= fh && 1 == sr.row.len - spill) {
fh = 1;
}
if (0 < fh) {
var lists = this.generateRows(fr.row.end + 1, null, fh);
this.fireEvent("updateEndLeftHeader", this, lists.laddlist);
this.fireEvent("updateEndHeader", this, lists.addlist);
this.slh += lists.rh;
fr.row.end = lists.rowEnd;
}
} else {
var lists = this.generateRows(start, fr.row.start - 1);
this.fireEvent("updateBeforeLeftHeader", this, lists.laddlist);
this.fireEvent("updateBeforeHeader", this, lists.addlist);
this.slh += lists.rh;
fh = this.slh - fh;
if (0 < fh) {
var rt = this.removeURows(null, null, fh);
this.slh -= rt.dh;
fr.row.end = rt.rowEnd;
if (fr.row.end == start) {
var lists = this.generateRows(fr.row.end + 1,
fr.row.end + 1);
this.fireEvent("updateEndLeftHeader", this,
lists.laddlist);
this.fireEvent("updateEndHeader", this, lists.addlist);
this.slh += lists.rh;
fr.row.end = lists.rowEnd;
}
}
}
}
fr.row.start = start;
fr.row.len = fr.row.end - fr.row.start + 1;
if (fr.row.end >= this.rowNum) {
this.rowNum = fr.row.end + 1;
}
},
renderRows : function(start) {
var ds = this.ds;
var sr = this.showRange;
var spill = ds.getVisibleRowOffset(start, sr.row.start);
if (0 === spill) {
return;
}
var append = spill > 0;
spill = Math.abs(spill);
var fh = this.scroller.getHeight();
if (spill >= sr.row.len) {
var lists = this.generateRows(start, null, fh);
this.sh = lists.rh;
this.fireEvent("updateLeftBody", this, lists.laddlist);
this.fireEvent("updateBody", this, lists.addlist);
sr.row.end = lists.rowEnd;
} else {
if (append) {
var rt = this.removeRows(0, spill - 1);
this.sh -= rt.dh;
fh -= this.sh;
if (0 >= fh && 1 == sr.row.len - spill) {
fh = 1;
}
if (0 < fh) {
var lists = this.generateRows(sr.row.end + 1, null, fh);
this.fireEvent("updateEndLeftBody", this, lists.laddlist);
this.fireEvent("updateEndBody", this, lists.addlist);
this.sh += lists.rh;
sr.row.end = lists.rowEnd;
}
} else {
var lists = this.generateRows(start, sr.row.start - 1);
this.fireEvent("updateBeforeLeftBody", this, lists.laddlist);
this.fireEvent("updateBeforeBody", this, lists.addlist);
this.sh += lists.rh;
fh = this.sh - fh;
if (0 < fh) {
var rt = this.removeRows(null, null, fh);
this.sh -= rt.dh;
sr.row.end = rt.rowEnd;
if (sr.row.end == start) {
var lists = this.generateRows(sr.row.end + 1,
sr.row.end + 1);
this.fireEvent("updateEndLeftBody", this,
lists.laddlist);
this.fireEvent("updateEndBody", this, lists.addlist);
this.sh += lists.rh;
sr.row.end = lists.rowEnd;
}
}
}
}
sr.row.start = start;
sr.row.len = sr.row.end - sr.row.start + 1;
if (sr.row.end >= this.rowNum) {
this.rowNum = sr.row.end + 1;
}
},
renderLCols : function(start) {
var ds = this.ds;
var fr = this.freezeRange;
var spill = ds.getVisibleColOffset(start, fr.col.start);
if (0 === spill) {
return;
}
var append = spill > 0;
spill = Math.abs(spill);
var fw = this.lscroller.getWidth();
if (spill >= fr.col.len || Ext.isIE && spill != 0) {
var lists = this.generateLCols(start, null, fw);
this.slw = lists.rw;
this.fireEvent("updateLeftBody", this, lists.addlist);
this.fireEvent("updateLeftHeader", this, lists.haddlist);
fr.col.end = lists.colEnd;
} else {
if (append) {
var rt = this.removeLCols(1, spill);
this.slw -= rt.dw;
fw -= this.slw;
if (0 >= fw && 1 == fr.col.len - spill) {
fw = 1;
}
if (0 < fw) {
var lists = this.generateTdCols(fr.col.end + 1, null, fw);
this.fireEvent("updateEndLeftHeaderCol", this,
lists.haddlist);
this.fireEvent("updateEndLeftBodyCol", this, lists.addlist);
this.slw += lists.rw;
fr.col.end = lists.colEnd;
}
} else {
var lists = this.generateTdCols(start, fr.col.start - 1);
this.fireEvent("updateBeforeLeftHeaderCol", this,
lists.haddlist);
this.fireEvent("updateBeforeLeftBodyCol", this, lists.addlist);
this.slw += lists.rw;
fw = this.slw - fw;
if (0 < fw) {
var rt = this.removeLCols(null, null, fw);
this.slw -= rt.dw;
fr.col.end = rt.colEnd;
if (fr.row.end == start) {
var lists = this.generateTdCols(fr.col.end + 1,
fr.col.end + 1);
this.fireEvent("updateEndLeftHeaderCol", this,
lists.haddlist);
this.fireEvent("updateEndLeftBodyCol", this,
lists.addlist);
this.slw += lists.rw;
fr.col.end = lists.colEnd;
}
}
}
}
fr.col.start = start;
fr.col.len = fr.col.end - fr.col.start + 1;
if (fr.col.end >= this.colNum) {
this.colNum = fr.col.end + 1;
}
},
renderCols : function(start) {
var ds = this.ds;
var sr = this.showRange;
var spill = ds.getVisibleColOffset(start, sr.col.start);
if (0 === spill) {
return;
}
var append = spill > 0;
spill = Math.abs(spill);
var fw = this.scroller.getWidth();
if (spill >= sr.col.len || Ext.isIE && spill != 0) {
var lists = this.generateCols(start, null, fw);
this.sw = lists.rw;
this.fireEvent("updateBody", this, lists.addlist);
this.fireEvent("updateHeader", this, lists.haddlist);
sr.col.end = lists.colEnd;
} else {
if (append) {
var rt = this.removeCols(0, spill - 1);
this.sw -= rt.dw;
fw -= this.sw;
if (0 >= fw && 1 == sr.col.len - spill) {
fw = 1;
}
if (0 < fw) {
var lists = this.generateTdCols(sr.col.end + 1, null, fw);
this.fireEvent("updateEndHeaderCol", this, lists.haddlist);
this.fireEvent("updateEndBodyCol", this, lists.addlist);
this.sw += lists.rw;
sr.col.end = lists.colEnd;
}
} else {
var lists = this.generateTdCols(start, sr.col.start - 1);
this.fireEvent("updateBeforeHeaderCol", this, lists.haddlist);
this.fireEvent("updateBeforeBodyCol", this, lists.addlist);
this.sw += lists.rw;
fw = this.sw - fw;
if (0 < fw) {
var rt = this.removeCols(null, null, fw);
this.sw -= rt.dw;
sr.col.end = rt.colEnd;
if (sr.row.end == start) {
var lists = this.generateTdCols(sr.col.end + 1,
sr.col.end + 1);
this.fireEvent("updateEndHeaderCol", this,
lists.haddlist);
this.fireEvent("updateEndBodyCol", this, lists.addlist);
this.sw += lists.rw;
sr.col.end = lists.colEnd;
}
}
}
}
sr.col.start = start;
sr.col.len = sr.col.end - sr.col.start + 1;
if (sr.col.end >= this.colNum) {
this.colNum = sr.col.end + 1;
}
},
onUpdateLeftBodyFn : function(sp, html) {
this.slbody.update(html);
},
onUpdateHeaderFn : function(sp, html) {
this.sheader.update(html);
},
onUpdateLeftHeaderFn : function(sp, html) {
this.slheader.update(html);
},
onUpdateBodyFn : function(sp, html) {
this.sbody.update(html);
},
onUpdateEndLeftBodyFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeEnd", this.slbody.dom, html);
},
onUpdateEndBodyFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeEnd", this.sbody.dom, html);
},
onUpdateBeforeLeftBodyFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeBegin", this.slbody.dom.firstChild,
html);
},
onUpdateBeforeBodyFn : function(sp, html) {
Ext.DomHelper
.insertHtml("beforeBegin", this.sbody.dom.firstChild, html);
},
onUpdateBeforeHeaderFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeBegin", this.sheader.dom.childNodes[1],
html);
},
onUpdateEndHeaderFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeEnd", this.sheader.dom, html);
},
onUpdateBeforeLeftHeaderFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeBegin",
this.slheader.dom.childNodes[1], html);
},
onUpdateEndLeftHeaderFn : function(sp, html) {
Ext.DomHelper.insertHtml("beforeEnd", this.slheader.dom, html);
},
onUpdateEndHeaderColFn : function(sp, list) {
var headerChildren = this.sheader.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = headerChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
if (Ext.isIE) {
var td = trEl.insertCell();
td.innerHTML = "
";
} else if (trEl.insertAdjacentHTML) {
trEl.insertAdjacentHTML("beforeEnd", list[i]);
}
} else {
Ext.DomHelper.insertHtml("beforeEnd", trEl, list[i]);
}
}
},
onUpdateEndLeftHeaderColFn : function(sp, list) {
var headerChildren = this.slheader.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = headerChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
if (Ext.isIE) {
var fn = function(td, attr) {
td.className = attr.replace(/class="(.*)"/, "$1");
};
this.setTRHtmlForIE(trEl, list[i], -1, fn);
} else if (trEl.insertAdjacentHTML) {
trEl.insertAdjacentHTML("beforeEnd", list[i]);
} else {
Ext.DomHelper.insertHtml("beforeEnd", trEl, list[i]);
}
}
}
},
onUpdateEndBodyColFn : function(sp, list) {
var bodyChildren = this.sbody.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = bodyChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
if (trEl.insertAdjacentHTML) {
if (Ext.isIE) {
var td = trEl.insertCell();
td.innerHTML = "
";
} else {
trEl.insertAdjacentHTML("beforeEnd", list[i]);
}
} else {
Ext.DomHelper.insertHtml("beforeEnd", trEl, list[i]);
}
}
}
},
onUpdateEndLeftBodyColFn : function(sp, list) {
var bodyChildren = this.slbody.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = bodyChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
if (Ext.isIE) {
var fn = function(td, attr) {
td.className = attr.replace(/class="(.*)"/, "$1");
};
this.setTRHtmlForIE(trEl, list[i], -1, fn);
} else if (trEl.insertAdjacentHTML) {
trEl.insertAdjacentHTML("beforeEnd", list[i]);
} else {
Ext.DomHelper.insertHtml("beforeEnd", trEl, list[i]);
}
}
}
},
onUpdateBeforeHeaderColFn : function(sp, list) {
var headerChildren = this.sheader.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = headerChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
var td = trEl.firstChild;
if (Ext.isIE) {
var tr = td.parentNode;
var cellobj = tr.insertCell(td.cellIndex);
cellobj.innerHTML = "
";
} else if (td.insertAdjacentHTML) {
td.insertAdjacentHTML("beforeBegin", list[i]);
}
} else {
Ext.DomHelper.insertHtml("beforeBegin", td, list[i]);
}
}
},
onUpdateBeforeLeftHeaderColFn : function(sp, list) {
var headerChildren = this.slheader.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = headerChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
var td = trEl.childNodes[1];
if (Ext.isIE) {
var fn = function(td, attr) {
td.className = attr.replace(/class="(.*)"/, "$1");
};
this.setTRHtmlForIE(trEl, list[i], td.cellIndex, fn);
} else if (td.insertAdjacentHTML) {
td.insertAdjacentHTML("beforeBegin", list[i]);
} else {
Ext.DomHelper.insertHtml("beforeBegin", td, list[i]);
}
}
}
},
onUpdateBeforeBodyColFn : function(sp, list) {
var bodyChildren = this.sbody.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = bodyChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
var td = trEl.firstChild;
if (Ext.isIE) {
var fn = function(td, attr) {
td.className = attr.replace(/class="(.*)"/, "$1");
};
this.setTRHtmlForIE(trEl, list[i], td.cellIndex, fn);
} else if (td.insertAdjacentHTML) {
td.insertAdjacentHTML("beforeBegin", list[i]);
} else {
Ext.DomHelper.insertHtml("beforeBegin", td, list[i]);
}
}
}
},
onUpdateBeforeLeftBodyColFn : function(sp, list) {
var bodyChildren = this.slbody.dom.childNodes;
for (var i = 0, len = list.length; i < len; i++) {
var trEl = bodyChildren[i].firstChild.firstChild.firstChild;
if (trEl) {
var td = trEl.childNodes[1];
if (Ext.isIE) {
var fn = function(td, attr) {
td.className = attr.replace(/class="(.*)"/, "$1");
};
this.setTRHtmlForIE(trEl, list[i], td.cellIndex, fn);
} else if (td.insertAdjacentHTML) {
td.insertAdjacentHTML("beforeBegin", list[i]);
} else {
Ext.DomHelper.insertHtml("beforeBegin", td, list[i]);
}
}
}
},
onMouseWheelFn : function(e) {
e.stopEvent();
var sm = this.sm;
var d = e.getWheelDelta();
if (0 > d) {
d = -1;
} else {
d = 1;
}
if (this.splitFlag && ("left-top" == sm.posFlag || "top" == sm.posFlag)) {
this.scrollingURow(d);
} else {
this.scrollingRow(d);
}
},
scrollingURow : function(d, rowInc) {
rowInc = rowInc || this.rowInc;
var span = this.uylivescroller.dom.scrollTop
+ this.uylivescroller.getHeight();
var xh = this.uyfakebody.getHeight();
if (span + 1 >= xh && 0 > d) {
this.onScrollUBottomFn(rowInc);
} else {
this.uylivescroller.dom.scrollTop += -d * rowInc
* this.yScrollOffset;
}
},
scrollingRow : function(d, rowInc) {
rowInc = rowInc || this.rowInc;
var span = this.ylivescroller.dom.scrollTop
+ this.ylivescroller.getHeight();
var xh = this.yfakebody.getHeight();
if (span + 1 >= xh && 0 > d) {
this.onScrollBottomFn(rowInc);
} else {
this.ylivescroller.dom.scrollTop += -d * rowInc
* this.yScrollOffset;
}
},
scrollingLCol : function(d, colInc) {
colInc = colInc || this.colInc;
var span = this.lxlivescroller.dom.scrollLeft
+ this.lxlivescroller.getWidth();
var xw = this.lxfakebody.getWidth();
if (span + 1 >= xw && 0 > d) {
this.onScrollLRightFn(colInc);
} else {
this.lxlivescroller.dom.scrollLeft += -d * colInc
* this.xScrollOffset;
}
},
scrollingCol : function(d, colInc) {
colInc = colInc || this.colInc;
var span = this.xlivescroller.dom.scrollLeft
+ this.xlivescroller.getWidth();
var xw = this.xfakebody.getWidth();
if (span + 1 >= xw && 0 > d) {
this.onScrollRightFn(colInc);
} else {
this.xlivescroller.dom.scrollLeft += -d * colInc
* this.xScrollOffset;
}
},
scroll2Pos : function(x, y, offset) {
var sr = this.showRange;
var xoff = yoff = 0;
if (x < sr.row.start) {
xoff = x - sr.row.start;
} else if (x > sr.row.end) {
xoff = x - sr.row.end;
}
if (y < sr.col.start) {
yoff = y - sr.col.start;
} else if (y > sr.col.end) {
yoff = y - sr.col.end;
}
if (yoff) {
if (0 > yoff) {
yoff -= offset[1];
} else {
yoff += offset[1];
}
this.scrollingCol(-yoff, 1);
}
if (xoff) {
if (0 > xoff) {
xoff -= offset[0];
} else {
xoff += offset[0];
}
this.scrollingRow(-xoff, 1);
}
},
xResizingRow : function(x, h, onlyOne, notRefresh, autoHeight) {
var ds = this.ds;
var rh = this.ds.getRowHeight(x);
var offset = h - rh;
h = h - this.ypaddingOffset;
var sm = this.sm;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x;
if (minx <= x && x <= maxx && !onlyOne) {
for (var j = minx; j <= maxx; j++) {
this.fireEvent("updatecss", "rowSetting", j, "ch", h);
if (!autoHeight) {
this.fireEvent("updatecss", "rowSetting", j, "hchanged",
true);
} else {
this.fireEvent("updatecss", "rowSetting", j, "hchanged",
false);
}
}
} else {
this.fireEvent("updatecss", "rowSetting", x, "ch", h);
if (!autoHeight) {
this.fireEvent("updatecss", "rowSetting", x, "hchanged", true);
} else {
this.fireEvent("updatecss", "rowSetting", x, "hchanged", false);
}
}
if (x <= this.freezeRange.row.end) {
if (!this.isRowSplit()) {
this.slh += offset;
var nh = this.scroller.getHeight() - offset;
this.setScrollerHeight(nh);
} else {
}
} else {
this.sh += offset;
}
if (!notRefresh) {
this.adjustShowRange(this.availWidth, this.availHeight, true);
this.sm.fireEvent("renderborder");
var wraps = ds.getWrapCellInRow(x);
for (var p in wraps) {
this.refreshWrapCell(wraps[p]);
}
}
},
yResizingCol : function(y, w) {
var ds = this.ds;
var cw = this.ds.getColWidth(y);
var offset = w - cw;
var rw = w - this.xpaddingOffset;
var sm = this.sm;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var miny = rt.minPos.y, maxy = rt.maxPos.y;
if (miny <= y && y <= maxy) {
for (var j = miny; j <= maxy; j++) {
this.fireEvent("updatecss", "colSetting", j, "cw", rw);
}
} else {
this.fireEvent("updatecss", "colSetting", y, "cw", rw);
}
if (y <= this.freezeRange.col.end) {
if (!this.isColSplit()) {
this.slw += offset;
this.lscroller.setWidth(this.slw);
var nw = this.scroller.getWidth() - offset;
this.setScrollerWidth(nw);
} else {
}
} else {
this.sw += offset;
}
this.adjustShowRange(this.availWidth, this.availHeight, true);
this.sm.fireEvent("renderborder");
var wraps = ds.getWrapCellInCol(y);
for (var p in wraps) {
this.refreshWrapCell(wraps[p]);
}
},
getInnerText : function(x, y) {
var v = "";
var ds = this.ds;
var cell = ds.getCell(x, y);
v = cell['origin-data'] || cell.data;
if ("percent" == cell.format
&& !Ext.ss.common.Mask.isFormula(cell.data)) {
v = cell.data;
} else {
var date = ds.transfer2Date(v);
if (date) {
v = date.format(cell.dateFormat || ds.defaultDateFormat);
}
}
if (typeof v == "string") {
v = v.replace(/
/gi, "\n");
}
v = Ext.ss.common.Mask.cleanTag(v);
v = Ext.ss.common.Helper.unwrapLink(v).url;
return v;
},
prepareOrigin2Data : function(intxt, x, y) {
var ds = this.ds, editor = this.editor;
var origintxt;
if (!Ext.ss.common.Mask.isFormula(intxt)) {
if (Ext.ss.common.Mask.isLink(intxt)) {
intxt = ds.wrapLink(intxt);
} else if (!Ext.ss.common.Mask.isImage(intxt)) {
intxt = Ext.util.Format.htmlEncode(intxt);
intxt = intxt.replace(/\n/gi, "
");
}
} else {
intxt = intxt.replace(/[\w\s]+!/gi, function(w) {
var index = arguments[arguments.length - 2];
var inQuote = Ext.ss.common.Helper.whetherInQuote(
intxt, index + 1);
if (!inQuote) {
index += w.length;
var chr = intxt.charAt(index);
if (/[a-zA-Z]/gi.test(chr)) {
var v = w.slice(0, w.length - 1);
v = v.trim();
return "\"" + v + "\"!";
} else {
return w;
}
} else {
return w;
}
});
origintxt = intxt;
intxt = ds.adjustFormula(x, y, intxt);
}
return intxt;
},
setInnerText : function(intxt, x, y, skipRefreshFlag) {
var ds = this.ds, editor = this.editor;
var origintxt;
if (!Ext.ss.common.Mask.isFormula(intxt)) {
if (Ext.ss.common.Mask.isLink(intxt)) {
intxt = ds.wrapLink(intxt);
} else if (!Ext.ss.common.Mask.isImage(intxt)) {
intxt = Ext.util.Format.htmlEncode(intxt);
intxt = intxt.replace(/\n/gi, "
");
}
} else {
intxt = intxt.replace(/[\w\s]+!/gi, function(w) {
var index = arguments[arguments.length - 2];
var inQuote = Ext.ss.common.Helper.whetherInQuote(
intxt, index + 1);
if (!inQuote) {
index += w.length;
var chr = intxt.charAt(index);
if (/[a-zA-Z]/gi.test(chr)) {
var v = w.slice(0, w.length - 1);
v = v.trim();
return "\"" + v + "\"!";
} else {
return w;
}
} else {
return w;
}
});
origintxt = intxt;
intxt = ds.adjustFormula(x, y, intxt);
}
ds.fireEvent("datachange", x, y, intxt, origintxt);
var obj = ds.getCell(x, y);
if (!skipRefreshFlag) {
obj.x = x;
obj.y = y;
this.refreshCell(obj);
var row = ds.data.rows[x];
if (row) {
var cell = row[y];
if (cell) {
var wrap = cell.wrap;
if (wrap) {
this.refreshWrapCell(wrap);
}
}
}
}
editor.fitRow(x, true);
return obj.data;
},
refreshCell : function(obj) {
var x = obj.x, y = obj.y;
var cels = this.getCellTdHEls(x, y);
if (cels) {
var data;
for (var i = 0, len = cels.length; i < len; i++) {
var td = cels[i];
data = this.templates.cell.apply(obj);
td.style.backgroundColor = obj.bg;
td.className = obj.tdcss;
td.style.display = obj.display;
td.innerHTML = data;
}
return data;
}
},
refreshWrapCell : function(wrap) {
var ds = this.ds;
for (var i = wrap.minx; i <= wrap.maxx; i++) {
for (var j = wrap.miny; j <= wrap.maxy; j++) {
var obj = ds.getCell(i, j);
obj.x = i;
obj.y = j;
this.refreshCell(obj);
}
}
},
updateStateField : function(s, e) {
var ds = this.ds;
var code = "";
if (0 == s.x && 0 == e.x) {
code = Math.abs(s.y - e.y) + 1 + "C";
} else if (0 == s.y && 0 == e.y) {
code = Math.abs(s.x - e.x) + 1 + "R";
} else {
if (s.x == e.x && s.y == e.y) {
s = ds.findVisiableCell(s.x, s.y);
code = this.getCellCode(s);
} else {
code = Math.abs(s.x - e.x) + 1 + "R x "
+ (Math.abs(s.y - e.y) + 1) + "C";
}
}
this.stateField.setValue(code);
},
updateFxField : function(x, y) {
if (!this.sm.formulaEditing) {
var v = this.getInnerText(x, y);
v = Ext.util.Format.htmlDecode(v);
this.fxField.setValue(v);
}
},
maskUI : function(msg) {
this.setStatus({
text : msg || "Processing...",
iconCls : "x-status-busy"
});
this.loadMask.msg = msg || this.loadMask.defaultMsg;
this.loadMask.show();
},
setStatus : function(o) {
this.fireEvent("poststatus", {
text : o.text,
iconCls : o.iconCls
});
},
unmaskUI : function(msg) {
this.setStatus({
text : msg || "Ready",
iconCls : "x-status-valid"
});
this.loadMask.hide();
},
setFreezeRange : function(freezeRange) {
freezeRange = freezeRange || this.ds.getDefaultFreezeRange();
this.freezeRange = {
row : {
start : freezeRange.row.start,
end : freezeRange.row.end,
len : freezeRange.row.len
},
col : {
start : freezeRange.col.start,
end : freezeRange.col.end,
len : freezeRange.col.len
}
};
},
setShowRange : function(showRange) {
showRange = showRange || this.ds.getDefaultShowRange();
this.showRange = {
row : {
start : showRange.row.start,
end : showRange.row.end,
len : showRange.row.len
},
col : {
start : showRange.col.start,
end : showRange.col.end,
len : showRange.col.len
}
};
},
adjustLiveScroller : function() {
var ds = this.ds;
var freezeRange = this.freezeRange, showRange = this.showRange;
this.uylivescroller.un("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.lxlivescroller.un("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.ylivescroller.un("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.un("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.sysXFakebody(freezeRange, showRange);
this.sysYFakebody(freezeRange, showRange);
if (this.isRowSplit()) {
this.uylivescroller.dom.scrollTop = ds.getVisibleRowOffset(
freezeRange.row.start, 1)
* this.yScrollOffset;
this.ylivescroller.dom.scrollTop = ds.getVisibleRowOffset(
showRange.row.start, 1)
* this.yScrollOffset;
this.onUYScrollingFn();
} else {
this.ylivescroller.dom.scrollTop = ds.getVisibleRowOffset(
showRange.row.start, freezeRange.row.end + 1)
* this.yScrollOffset;
}
this.onYScrollingFn();
if (this.isColSplit()) {
this.lxlivescroller.dom.scrollLeft = ds.getVisibleColOffset(
freezeRange.col.start, 1)
* this.xScrollOffset;
this.xlivescroller.dom.scrollLeft = ds.getVisibleColOffset(
showRange.col.start, 1)
* this.xScrollOffset;
this.onLXScrollingFn();
} else {
this.xlivescroller.dom.scrollLeft = ds.getVisibleColOffset(
showRange.col.start, freezeRange.col.end + 1)
* this.xScrollOffset;
}
this.onXScrollingFn();
this.uylivescroller.on("scroll", this.onUYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.lxlivescroller.on("scroll", this.onLXLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.ylivescroller.on("scroll", this.onYLiveScrollFn, this, {
buffer : this.scrollDelay
});
this.xlivescroller.on("scroll", this.onXLiveScrollFn, this, {
buffer : this.scrollDelay
});
},
setComment : function(x, y, obj) {
if (obj.comment && "" !== obj.comment) {
var cels = this.getCellHEls(x, y);
if (cels) {
for (var i = 0, len = cels.length; i < len; i++) {
var cellEl = Ext.get(cels[i]);
if (!cellEl.hasClass(Ext.ss.CONST.cssHash[3])) {
cellEl.addClass(Ext.ss.CONST.cssHash[3]);
}
}
}
this.ds.addCommentFn(x, y, obj.comment);
}
},
pasteCell : function(cell, ox, oy, transpose, x, y) {
var ds = this.ds;
var posReg = ds.posReg;
var obj = ds.deepClone(cell);
delete obj.relativeWrap;
var origin = cell['origin-data'];
if (origin) {
obj['origin-data'] = ds.refreshOriginFormula(origin, ox, oy);
obj.data = ds.adjustFormula(x, y, obj['origin-data']);
} else {
if (Ext.ss.common.Mask.isFormula(cell.data)) {
var cellData = cell.data.replace(/"/g, "\"");
obj['origin-data'] = ds.refreshOriginFormula(cellData, 0, 0);
obj.data = ds.adjustFormula(x, y, obj['origin-data']);
} else {
Ext.ss.common.Helper.generateHyperlink(obj.data, obj);
}
}
if (cell.wrap) {
obj.wrap = {
minx : cell.wrap.minx + ox,
miny : cell.wrap.miny + oy,
maxx : cell.wrap.maxx + ox,
maxy : cell.wrap.maxy + oy
};
if (transpose) {
var wp = Ext.apply({}, obj.wrap);
obj.wrap = {
minx : wp.minx,
miny : wp.miny,
maxx : wp.minx + wp.maxy - wp.miny,
maxy : wp.miny + wp.maxx - wp.minx
};
}
}
delete obj.ISIParams;
delete obj.lastOriginData;
obj.status = "dynamic";
return obj;
},
isValidPaste : function(fromRange) {
var ds = this.ds;
var sm = this.sm;
var currentSheetIndex = ds.activeSheet;
var xspan, yspan;
if (fromRange) {
ds.data = ds.sheets[fromRange.sheetIndex];
var wflag = false;
if (0 == fromRange.maxx) {
var rows = ds.data.rows;
for (var i in rows) {
var row = rows[i];
if (row) {
for (var j = fromRange.miny; j <= fromRange.maxy; j++) {
if (ds.isWraped(i, j)) {
var cellObj = ds.getCell(i, j);
var wrap = cellObj.wrap;
if (wrap.miny < fromRange.miny
|| wrap.maxy > fromRange.maxy) {
wflag = true;
break;
}
}
}
}
}
if (wflag) {
return true;
}
} else if (0 == fromRange.maxy) {
var rows = ds.data.rows;
for (var i = fromRange.minx; i <= fromRange.maxx; i++) {
var row = rows[i];
if (row) {
for (var j in row) {
if (ds.isWraped(i, j)) {
var cellObj = ds.getCell(i, j);
var wrap = cellObj.wrap;
if (wrap.minx < fromRange.minx
|| wrap.maxx > fromRange.maxx) {
wflag = true;
break;
}
}
}
}
}
if (wflag) {
return true;
}
}
ds.data = ds.sheets[currentSheetIndex];
xspan = fromRange.maxx - fromRange.minx + 1;
yspan = fromRange.maxy - fromRange.miny + 1;
} else {
xspan = 1;
yspan = 1;
}
var startPos = sm.selectedStart, endPos = sm.selectedEnd;
var rt = sm.getMinMaxFromStartEnd(startPos, endPos);
var minPos = rt.minPos, maxPos = rt.maxPos;
var minx = minPos.x, miny = minPos.y, maxx = maxPos.x, maxy = maxPos.y;
if (0 == maxx) {
if (maxy < miny + yspan - 1) {
maxy = miny + yspan - 1;
}
var rows = ds.data.rows;
for (var i in rows) {
var row = rows[i];
if (row) {
for (var j = miny; j <= maxy; j++) {
if (ds.isWraped(i, j)) {
var cellObj = ds.getCell(i, j);
var wrap = cellObj.wrap;
if (wrap.miny < miny || wrap.maxy > maxy) {
wflag = true;
break;
}
}
}
}
}
} else if (0 == maxy) {
if (maxx < minx + xspan - 1) {
maxx = minx + xspan - 1;
}
var rows = ds.data.rows;
for (var i = minx; i <= maxx; i++) {
var row = rows[i];
if (row) {
for (var j in row) {
if (ds.isWraped(i, j)) {
var cellObj = ds.getCell(i, j);
var wrap = cellObj.wrap;
if (wrap.minx < minx || wrap.maxx > maxx) {
wflag = true;
break;
}
}
}
}
}
} else {
if (maxx < minx + xspan - 1) {
maxx = minx + xspan - 1;
}
if (maxy < miny + yspan - 1) {
maxy = miny + yspan - 1;
}
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
if (ds.isWraped(i, j)) {
var cellObj = ds.getCell(i, j);
var wrap = cellObj.wrap;
if (wrap.minx < minx || wrap.maxx > maxx
|| wrap.miny < miny || wrap.maxy > maxy) {
wflag = true;
break;
}
}
}
}
}
return wflag;
},
pasteDataFromBoard2SS : function(ss, type, pasteType, board, outside) {
var ds = ss.ds;
var sm = ss.sm;
var board = board || Ext.util.GlobalBoard.getBoard();
board = ds.deepClone(board);
if (board) {
var content = board.content;
var fromRange = board.fromRange;
if (".ss" == type && content) {
var data = content.data;
var rs = content.rowSetting;
var cs = content.colSetting;
var span = content.span;
var flag = content.flag;
var startPos = sm.selectedStart, endPos = sm.selectedEnd;
var rt = sm.getMinMaxFromStartEnd(startPos, endPos);
var minPos = rt.minPos, maxPos = rt.maxPos;
var wflag = ss.isValidPaste(fromRange);
if (wflag) {
Ext.Msg.show({
title : feyaSoft.ss.lang.hint,
msg : feyaSoft.ss.lang.can_not_change_combine,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.INFO
});
return;
}
if ("rows" == flag) {
if (0 == minPos.y && 0 == maxPos.y) {
var xoffset = minPos.x - span.minx;
var xspan = span.maxx - span.minx + 1, yspan = span.maxy
- span.miny + 1;
if (xoffset < span.maxx - span.minx) {
ss.resetCutStatus();
}
if (0 == (maxPos.x - minPos.x + 1) % xspan) {
minPos.y = 0;
maxPos.y = 0;
} else {
minPos = {
x : span.minx + xoffset,
y : 0
};
maxPos = {
x : span.maxx + xoffset,
y : 0
};
}
var curRows = ds.data.rows;
for (var i = minPos.x; i <= maxPos.x; i++) {
var abXoffset = i - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
var row = data[oldx] || {};
var curRow = curRows[i];
for (var q in curRow) {
if (!row[q]) {
ds.fireEvent("cellchange", i, q, {});
}
}
for (var q in row) {
var cell = ss.pasteCell(row[q], i - oldx, 0,
false, i, q);
delete cell.tdcss;
if ("value" == pasteType) {
if (Ext.ss.common.Mask.isFormula(cell.data)) {
delete cell['origin-data'];
cell.data = oldCell.result || "";
}
} else if ("style" == pasteType) {
var old = ds.getCell(i, j);
cell['origin-data'] = old['origin-data'];
cell.data = old.data;
cell.format = old.format;
} else if ("content" == pasteType) {
cell = {
'origin-data' : cell['origin-data'],
data : cell.data,
format : cell.format,
wrap : cell.wrap
};
}
ds.fireEvent("cellchange", i, q, cell);
}
}
for (var i = minPos.x; i <= maxPos.x; i++) {
var abXoffset = i - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
if (0 == oldx) {
oldx = 1;
}
if (rs[oldx]) {
var row = Ext.apply({}, rs[oldx]);
delete row.tdcss;
ds.fireEvent("rowchange", i, row);
}
}
if (fromRange && 1 < minPos.x && "content" != pasteType) {
var currentSheetIndex = ds.activeSheet;
ds.data = ds.sheets[fromRange.sheetIndex];
var abXoffset = minPos.x - 1 - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
var row = ds.data.rows[oldx] || {};
for (var j in row) {
ds.data = ds.sheets[fromRange.sheetIndex];
var oldCell = ds.getCell(oldx, j);
ds.data = ds.sheets[currentSheetIndex];
if ("x-spreadsheet-bottom-black" == oldCell.bb
&& (!oldCell.wrap || oldCell.wrap.maxx == oldx)) {
ds.fireEvent("attributechange", minPos.x
- 1, j,
[["bb", oldCell.bb]]);
}
}
ds.data = ds.sheets[currentSheetIndex];
}
} else {
Ext.Msg.show({
title : "Notice",
msg : "Please select row(s) to paste!",
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.INFO
});
return;
}
} else if ("cols" == flag) {
if (0 == minPos.x && 0 == maxPos.x) {
var yoffset = minPos.y - span.miny;
var xspan = span.maxx - span.minx + 1, yspan = span.maxy
- span.miny + 1;
if (yoffset < span.maxy - span.miny) {
ss.resetCutStatus();
}
if (0 == (maxPos.y - minPos.y + 1) % yspan) {
minPos.x = 0;
maxPos.x = 0;
} else {
minPos = {
x : 0,
y : span.miny + yoffset
};
maxPos = {
x : 0,
y : span.maxy + yoffset
};
}
var curRows = ds.data.rows;
for (var p in curRows) {
if (!data[p]) {
for (var j = minPos.y; j <= maxPos.y; j++) {
ds.fireEvent("cellchange", p, j, {});
}
}
}
for (var p in data) {
var row = data[p];
for (var j = minPos.y; j <= maxPos.y; j++) {
var abYoffset = j - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
if (row[oldy]) {
var cell = ss.pasteCell(row[oldy], 0, j
- oldy, false, p, j);
delete cell.tdcss;
if ("value" == pasteType) {
if (Ext.ss.common.Mask
.isFormula(cell.data)) {
delete cell['origin-data'];
cell.data = oldCell.result || "";
}
} else if ("style" == pasteType) {
var old = ds.getCell(i, j);
cell['origin-data'] = old['origin-data'];
cell.data = old.data;
cell.format = old.format;
} else if ("content" == pasteType) {
cell = {
'origin-data' : cell['origin-data'],
data : cell.data,
format : cell.format,
wrap : cell.wrap
};
}
ds.fireEvent("cellchange", p, j, cell);
}
}
}
for (var j = minPos.y; j <= maxPos.y; j++) {
var abYoffset = j - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
if (cs[oldy]) {
var col = Ext.apply({}, cs[oldy]);
delete col.tdcss;
ds.fireEvent("colchange", j, col);
}
}
if (fromRange && 1 < minPos.y && "content" != pasteType) {
var currentSheetIndex = ds.activeSheet;
ds.data = ds.sheets[fromRange.sheetIndex];
var abYoffset = minPos.y - 1 - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
if (0 == oldy) {
oldy = 1;
}
var rows = ds.data.rows;
for (var i in rows) {
ds.data = ds.sheets[fromRange.sheetIndex];
var oldCell = ds.getCell(i, oldy);
if ("x-spreadsheet-right-black" == oldCell.br
&& (!oldCell.wrap || oldCell.wrap.maxy == oldy)) {
ds.data = ds.sheets[currentSheetIndex];
ds.fireEvent("attributechange", i, minPos.y
- 1, [["br", oldCell.br]]);
}
}
ds.data = ds.sheets[currentSheetIndex];
}
} else {
Ext.Msg.show({
title : "Notice",
msg : "Please select column(s) to paste!",
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.INFO
});
return;
}
} else if ("cells" == flag) {
var xoffset = minPos.x - span.minx;
var yoffset = minPos.y - span.miny;
var xspan = span.maxx - span.minx + 1, yspan = span.maxy
- span.miny + 1;
if (xoffset < span.maxx - span.minx
|| yoffset < span.maxy - span.miny) {
ss.resetCutStatus();
}
if (0 == (maxPos.x - minPos.x + 1) % xspan
&& 0 == (maxPos.y - minPos.y + 1) % yspan) {
} else {
minPos = {
x : span.minx + xoffset,
y : span.miny + yoffset
};
maxPos = {
x : span.maxx + xoffset,
y : span.maxy + yoffset
};
}
if ("transpose" == pasteType) {
var xoff = maxPos.x - minPos.x, yoff = maxPos.y
- minPos.y;
for (var i = minPos.x; i <= maxPos.x; i++) {
var abXoffset = i - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
var row = data[oldx] || {};
for (var j = minPos.y; j <= maxPos.y; j++) {
var abYoffset = j - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
var oldCell = row[oldy] || {};
var nj = minPos.y + i - minPos.x, ni = minPos.x
+ j - minPos.y;
var cell = ss.pasteCell(oldCell, ni - oldx, nj
- oldy, true, ni, nj);
delete cell.tdcss;
if ("value" == pasteType) {
if (Ext.ss.common.Mask.isFormula(cell.data)) {
delete cell['origin-data'];
cell.data = oldCell.result || "";
}
} else if ("style" == pasteType) {
var old = ds.getCell(ni, nj);
cell['origin-data'] = old['origin-data'];
cell.data = old.data;
cell.format = old.format;
} else if ("content" == pasteType) {
cell = {
'origin-data' : cell['origin-data'],
data : cell.data,
format : cell.format,
wrap : cell.wrap
};
}
ds.fireEvent("cellchange", ni, nj, cell);
}
ss.editor.fitRow(ni, true, true);
}
maxPos.x = minPos.x + yoff;
maxPos.y = minPos.y + xoff;
} else {
for (var i = minPos.x; i <= maxPos.x; i++) {
var abXoffset = i - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
var row = data[oldx] || {};
for (var j = minPos.y; j <= maxPos.y; j++) {
var abYoffset = j - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
var oldCell = row[oldy] || {};
oldCell = Ext.apply({}, oldCell);
var cell = ss.pasteCell(oldCell, i - oldx, j
- oldy, false, i, j);
delete cell.tdcss;
if ("value" == pasteType) {
if (Ext.ss.common.Mask.isFormula(cell.data)) {
delete cell['origin-data'];
cell.data = oldCell.result || "";
}
} else if ("style" == pasteType) {
var old = ds.getCell(i, j);
cell['origin-data'] = old['origin-data'];
cell.data = old.data;
cell.format = old.format;
} else if ("content" == pasteType) {
cell = {
'origin-data' : cell['origin-data'],
data : cell.data,
format : cell.format,
wrap : cell.wrap
};
}
ds.fireEvent("cellchange", i, j, cell);
}
ss.editor.fitRow(i, true, true);
}
}
if (fromRange && "content" != pasteType) {
var currentSheetIndex = ds.activeSheet;
ds.data = ds.sheets[fromRange.sheetIndex];
if (1 < minPos.x) {
var abXoffset = minPos.x - 1 - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
if (0 == oldx) {
oldx = 1;
}
for (var j = minPos.y; j <= maxPos.y; j++) {
var abYoffset = j - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
ds.data = ds.sheets[fromRange.sheetIndex];
var oldCell = ds.getCell(oldx, oldy);
if ("x-spreadsheet-bottom-black" == oldCell.bb
&& (!oldCell.wrap || oldCell.wrap.maxx == oldx)) {
ds.data = ds.sheets[currentSheetIndex];
ds.fireEvent("attributechange", minPos.x
- 1, j,
[["bb", oldCell.bb]]);
}
}
}
if (1 < minPos.y) {
var abYoffset = minPos.y - 1 - yoffset - span.miny;
var oldy = abYoffset % yspan + span.miny;
if (0 == oldy) {
oldy = 1;
}
for (var i = minPos.x; i <= maxPos.x; i++) {
var abXoffset = i - xoffset - span.minx;
var oldx = abXoffset % xspan + span.minx;
ds.data = ds.sheets[fromRange.sheetIndex];
var oldCell = ds.getCell(oldx, oldy);
if ("x-spreadsheet-right-black" == oldCell.br
&& (!oldCell.wrap || oldCell.wrap.maxy == oldy)) {
ds.data = ds.sheets[currentSheetIndex];
ds.fireEvent("attributechange", i, minPos.y
- 1, [["br", oldCell.br]]);
}
}
}
ds.data = ds.sheets[currentSheetIndex];
}
}
ds.trace(feyaSoft.ss.lang.action_paste);
var cb = board.cb;
var scope = board.scope || ss;
if (cb) {
cb.call(scope, content);
}
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.selectRange(sm.focusCell, minPos, maxPos);
ds.fireEvent("checkformula");
ss.fireEvent("updatefx", sm.focusCell.x, sm.focusCell.y);
ss.fireEvent("paste", ss, board, outside);
}
}
},
onPasteFn : function(ss, board, outside) {
var ds = ss.ds;
if (!outside) {
this.showPasteOptions();
} else {
this.hidePasteOptions();
}
},
getResultPos : function(minPos, maxPos) {
if (minPos.x === maxPos.x) {
return {
x : maxPos.x,
y : maxPos.y + 1
};
} else if (minPos.y === maxPos.y) {
return {
x : maxPos.x + 1,
y : maxPos.y
};
} else {
return {
x : maxPos.x + 1,
y : maxPos.y + 1
};
}
},
onFreezeChangedFn : function(ss, fr, sr, ofr, osr) {
this.chartManager.sysnChartPos(fr, sr, ofr, osr);
},
setCutStatus : function(minx, miny, maxx, maxy) {
this.resetCutStatus();
var el = this.sm.selectCover.cloneNode();
el.id = Ext.id();
this.sm.selectCover.parentNode.appendChild(el);
el.innerHTML = "";
el = Ext.get(el);
el.setStyle("border", "0px");
el.setHeight(el.getHeight() + 5);
el.setWidth(el.getWidth() + 5);
el.addClass("x-spreadsheet-cut-top");
this.cutRange = {
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy,
el : el.dom
};
},
resetCutStatus : function() {
this.sm.hideAutoFillOptions();
this.hidePasteOptions();
if (this.cutRange) {
Ext.removeNode(this.cutRange.el);
}
delete this.cutRange;
},
setBorderStatus : function(minx, miny, maxx, maxy, t, r, b, l) {
var ds = this.ds;
var rows = ds.data.rows;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
} else if (0 == minx && 0 == maxx) {
var cs = ds.data.colSetting;
var y = miny - 1;
cs[y] = cs[y] || {};
cs[y].tdcss = l;
y = maxy + 1;
cs[y] = cs[y] || {};
cs[y].tdcss = r;
this.renderRange(this.freezeRange, this.showRange, false, true);
} else if (0 == miny && 0 == maxy) {
var rs = ds.data.rowSetting;
var x = minx - 1;
rs[x] = rs[x] || {};
rs[x].tdcss = t;
x = maxx + 1;
rs[x] = rs[x] || {};
rs[x].tdcss = b;
this.renderRange(this.freezeRange, this.showRange, false, true);
} else {
var x = minx - 1;
rows[x] = rows[x] || {};
var row = rows[x];
for (var j = miny; j <= maxy; j++) {
row[j] = row[j] || {};
var cell = row[j];
cell.tdcss = t;
var obj;
if (0 == x) {
obj = ds.getHeadText(j);
} else {
obj = ds.getCell(x, j);
}
obj.x = x;
obj.y = j;
this.refreshCell(obj);
}
x = maxx + 1;
rows[x] = rows[x] || {};
row = rows[x];
for (var j = miny; j <= maxy; j++) {
row[j] = row[j] || {};
var cell = row[j];
cell.tdcss = b;
var obj = ds.getCell(x, j);
obj.x = x;
obj.y = j;
this.refreshCell(obj);
}
var y = miny - 1;
for (var i = minx; i <= maxx; i++) {
rows[i] = rows[i] || {};
rows[i][y] = rows[i][y] || {};
rows[i][y].tdcss = l;
var obj;
if (0 == y) {
obj = ds.getLeftText(i);
} else {
obj = ds.getCell(i, y);
}
obj.x = i;
obj.y = y;
this.refreshCell(obj);
}
y = maxy + 1;
for (var i = minx; i <= maxx; i++) {
rows[i] = rows[i] || {};
rows[i][y] = rows[i][y] || {};
rows[i][y].tdcss = r;
var obj = ds.getCell(i, y);
obj.x = i;
obj.y = y;
this.refreshCell(obj);
}
}
},
isEqualRange : function(or, r) {
if (or.col.start == r.col.start && or.col.end == r.col.end
&& or.row.start == r.row.start && or.row.end == r.row.end) {
return true;
} else {
return false;
}
},
checkShowRange : function(fr, ofr, osr) {
var rs;
var cs;
if (0 == fr.col.len) {
if (0 == ofr.col.len) {
cs = osr.col.start;
} else {
cs = ofr.col.start;
}
} else {
cs = fr.col.end + 1;
}
if (0 == fr.row.len) {
if (0 == ofr.row.len) {
rs = osr.row.start;
} else {
rs = ofr.row.start;
}
} else {
rs = fr.row.end + 1;
}
var obj = {
row : {
start : rs,
end : rs + osr.row.len - 1,
len : osr.row.len
},
col : {
start : cs,
end : cs + osr.col.len - 1,
len : osr.col.len
}
};
return obj;
},
onAboutFn : function() {
var myHtml = ""
+ ""
+ "
FeyaSoft MySpreadSheet"
+ "
Version 1.1.1"
+ "
"
+ " Copyright © 2006-2010 FeyaSoft Inc. All right reserved
"
+ "
http://www.feyasoft.com"
+ "
"
+ ""
+ " To query license"
+ " information, please send the email to:
info@feyasoft.com."
+ "
"
+ " Warning: This computer program is protected by the copyright law and international treaties. Unauthorized "
+ " reproduction or distribution this program, or any portion of it, maybe result in severe civil and "
+ " criminal penalties, and will be prosecuted to the maximum extent possible under the law.";
var aboutUsWin = new Ext.Window({
iconCls : "icon_feyasoft",
title : "About FeyaSoft MySpreadsheet",
width : 600,
height : 300,
closable : true,
resizable : false,
modal : true,
html : myHtml
});
aboutUsWin.show();
},
resetSpreadSheet : function() {
var ds = this.ds;
this.chartManager.cleanCharts();
delete this.file;
delete this.splitFlag;
var sm = this.sm;
ds.loadSheets(true);
ds.resetModifiedCache();
this.resetRange();
sm.resetSelections();
this.updateSheetStatus();
this.reloadUI();
},
updateSheetStatus : function() {
var str = this.generateSheets();
if (Ext.isIE) {
this.fcontainer.dom.innerHTML = "
"
+ "
";
this.footresizer = Ext.get(this.id
+ "-x-spreadsheet-footer-resizer");
this.sline = Ext.get(this.id + "-x-spreadsheet-footer-sheets-line");
this.footresizer.on("mousedown", this.onFootresizerMouseDownFn,
this);
} else {
this.sline.dom.innerHTML = str
+ "";
}
},
insertActiveSheet : function(name, pos) {
var ds = this.ds;
var sheets = ds.sheets;
this.turnOffActive();
var left = 0 == pos ? false : "inactive", right = pos == sheets.length
- 1;
var str = this.generateInActiveSheet(name, left, right);
var ctd;
if (!left) {
Ext.get(this.sline.dom.firstChild).remove();
ctd = this.sline.dom.childNodes[1];
Ext.DomHelper.insertBefore(ctd, str);
} else if (right) {
Ext.get(this.sline.dom.childNodes[this.sline.dom.childNodes.length
- 2]).remove();
ctd = this.sline.dom.lastChild;
Ext.DomHelper.insertBefore(ctd, str);
} else {
pos--;
ctd = this.sline.dom.childNodes[pos * 2 + 1];
var rtd = this.sline.dom.childNodes[pos * 2 + 2];
Ext.get(rtd).remove();
Ext.DomHelper.insertAfter(ctd, str);
}
},
addSheet : function(name, pos) {
var ds = this.ds;
var i;
if ("first" == pos) {
i = 0;
} else if ("before" == pos) {
i = ds.activeSheet;
} else if ("after" == pos) {
i = ds.activeSheet + 1;
} else {
i = ds.sheets.length;
}
this.chartManager.displayCharts(ds.activeSheet, "none");
ds.addSheet(name, i, function() {
this.chartManager.displayCharts(ds.activeSheet, "");
this.updateSheetStatus();
this.reloadUI();
}, this);
},
copySheet : function(name, pos, index) {
var ds = this.ds;
var i;
if ("first" == pos) {
i = 0;
} else if ("before" == pos) {
i = ds.activeSheet;
} else if ("after" == pos) {
i = ds.activeSheet + 1;
} else {
i = ds.sheets.length;
}
this.chartManager.displayCharts(ds.activeSheet, "none");
ds.copySheet(name, i, index, function() {
this.chartManager.displayCharts(ds.activeSheet, "");
this.updateSheetStatus();
this.reloadUI();
}, this);
},
moveSheet : function(sIndex, tIndex) {
var ds = this.ds;
if (sIndex != tIndex && sIndex + 1 != tIndex) {
ds.moveSheet(sIndex, tIndex);
this.updateSheetStatus();
this.reloadUI();
}
},
setScrollerWidth : function(w) {
this.colct.setWidth(w);
this.hct.setWidth(w);
this.sct.setWidth(w);
this.sheader.setWidth(w);
this.scroller.setWidth(w);
},
setScrollerHeight : function(h) {
this.rowct.setHeight(h);
this.lsct.setHeight(h);
this.sct.setHeight(h);
this.lscroller.setHeight(h);
this.scroller.setHeight(h);
},
insertImageInCell : function(url, setting, x, y) {
var sm = this.sm;
x = x || sm.focusCell.x;
y = y || sm.focusCell.y;
var data = "

";
this.setInCellImage(x, y, data);
},
setInCellImage : function(x, y, data) {
var ds = this.ds;
ds.fireEvent("datachange", x, y, data);
ds.trace(feyaSoft.ss.lang.action_incell_image(ds.getNameFromPos({
x : x,
y : y
})));
var obj = ds.getCell(x, y);
var wrap = obj.wrap;
if (wrap) {
this.refreshWrapCell(wrap);
} else {
obj.x = x;
obj.y = y;
this.refreshCell(obj);
}
this.updateStatus(x, y);
},
updateStatus : function(x, y) {
this.fireEvent("updatefx", x, y);
this.fireEvent("updatepress", this, x, y);
},
getDataRange : function(format) {
var sm = this.sm;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
return this.encodeDataRange(rs, format);
},
encodeDataRange : function(range, format) {
var str = "";
if (range) {
var minPos = range.minPos, maxPos = range.maxPos;
var ds = this.ds;
var sl = ds.getLetter(minPos.y);
var el = ds.getLetter(maxPos.y);
if (0 == minPos.x && 0 == minPos.y) {
} else if (0 == minPos.x) {
if ("local" == format) {
str = sl + ":" + el;
} else {
str = ds.sheets[ds.activeSheet].name + "!$" + sl + ":$"
+ el;
}
} else if (0 == minPos.y) {
if ("local" == format) {
str = minPos.x + ":" + maxPos.x;
} else {
str = ds.sheets[ds.activeSheet].name + "!$" + minPos.x
+ ":$" + maxPos.x;
}
} else {
if ("local" == format) {
str = sl + minPos.x + ":" + el + maxPos.x;
} else {
str = ds.sheets[ds.activeSheet].name + "!$" + sl + "$"
+ minPos.x + ":$" + el + "$" + maxPos.x;
}
}
}
return str;
},
isRowSplit : function(pf, fr) {
pf = pf || this.splitFlag;
fr = fr || this.freezeRange;
return pf && 0 != fr.row.len;
},
isColSplit : function(pf, fr) {
pf = pf || this.splitFlag;
fr = fr || this.freezeRange;
return pf && 0 != fr.col.len;
},
isFreezed : function() {
var fr = this.freezeRange;
return 0 < fr.col.len || 0 < fr.row.len;
},
scroll2Show : function(x, y) {
var sm = this.sm;
var pf = sm.posFlag;
var sr = this.showRange, fr = this.freezeRange;
var offset = this.autoOffset;
var cellEl = this.getCellEl(x, y, pf);
if (cellEl) {
var b = cellEl.getBottom();
if ("showRange" == pf || "left" == pf) {
if (b > this.xlivescroller.getTop() && x != sr.row.start) {
this.scrollingRow(-offset, 1);
}
} else if ("left-top" == pf || "top" == pf) {
if (b > this.lsct.getTop() && x != fr.row.start) {
this.scrollingURow(-offset, 1);
}
}
var r = cellEl.getRight();
if ("showRange" == pf || "top" == pf) {
if (r > this.ylivescroller.getLeft() && y != sr.col.start) {
this.scrollingCol(-offset, 1);
}
} else if ("left-top" == pf || "left" == pf) {
if (r > this.hct.getLeft() && y != fr.col.start) {
this.scrollingLCol(-offset, 1);
}
}
}
},
showFilterMenu : function(pos, e) {
if (!this.filterMenu) {
this.initFilterMenu();
}
this.filterMenu.show(e.getTarget(), pos);
},
initFilterMenu : function(e) {
this.filterMenu = new Ext.ss.menu.FilterMenu({
spreadsheet : this
});
},
getDistinctValue : function(col, minrow, maxrow, filters) {
var id = [col, minrow, maxrow].join("-");
var otherFilters = {};
for (var p in filters) {
if (p != id) {
otherFilters[p] = filters[p];
}
}
var ds = this.ds, cache = {}, flag;
for (var i = minrow; i <= maxrow; i++) {
if (ds.doFilterChecking(i, otherFilters)) {
var cell = ds.getCell(i, col);
var val = cell.data;
if (cell.wrap) {
val = ds.getCellValue(cell.wrap.minx, cell.wrap.miny,
ds.activeSheet, true);
} else {
val = ds.getCellValue(i, col, ds.activeSheet, true);
}
if (false !== Ext.type(val)) {
val = val.toString();
}
if (false != Ext.type(val) && "" !== val) {
flag = true;
cache[val] = "none" == cell.display ? false : true;
}
}
}
if (flag) {
return cache;
}
},
extendSelection : function() {
var sm = this.sm, ds = this.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, miny = rt.minPos.y, maxx = rt.maxPos.x, maxy = rt.maxPos.y;
if (minx == maxx && miny == maxy) {
var visited = {}, rest = {}, top = false, bottom = false, left = false, right = false;
var extending = function(x, y, first) {
var id = x + "-" + y;
if (true === first) {
var cell = ds.getCell(x, y);
first = false == Ext.type(cell.data) || "" === cell.data;
}
if (!first) {
if (false === left || y < left) {
left = y;
}
if (false === right || y > right) {
right = y;
}
if (false === top || x < top) {
top = x;
}
if (false === bottom || x > bottom) {
bottom = x;
}
}
if (!visited[id]) {
visited[id] = true;
delete rest[id];
var fromx = 1 < x ? x - 1 : x, tox = x + 1, fromy = 1 < y
? y - 1
: y, toy = y + 1;
for (var j = fromy; j <= toy; j++) {
for (var i = fromx; i <= tox; i++) {
var cell = ds.getCellObj(i, j);
if (false != Ext.type(cell.data) && "" != cell.data) {
id = i + "-" + j;
if (!visited[id]) {
rest[id] = [i, j];
}
}
}
}
} else {
delete rest[id];
}
for (var p in rest) {
if (rest.hasOwnProperty(p)) {
var it = rest[p];
extending(it[0], it[1], false);
break;
}
}
};
extending(minx, miny, true);
return {
minx : top,
miny : left,
maxx : bottom,
maxy : right
};
} else {
return {
minx : minx,
miny : miny,
maxx : maxx,
maxy : maxy
};
}
},
createFilterForSelection : function() {
var lan_com = feyaSoft.lang.common, lan_ss = feyaSoft.ss.lang;
var ds = this.ds, sm = this.sm;
var rows = ds.data.rows;
var selectedRange = this.extendSelection();
var minx = selectedRange.minx, miny = selectedRange.miny, maxx = selectedRange.maxx, maxy = selectedRange.maxy;
var flag = false;
var row = rows[minx];
for (var i = miny; i <= maxy; i++) {
var distinct = this.getDistinctValue(i, minx + 1, maxx);
if (distinct) {
flag = true;
var cell = {};
if (row) {
cell = Ext.apply({}, row[i]);
}
ds.fireEvent("cellchange", minx, i, Ext.apply(cell, {
filter : {
minx : 1,
maxx : maxx - minx
}
}));
}
}
ds.trace(lan_ss.createFilter);
if (flag) {
this.refreshRange();
} else {
Ext.Msg.alert(lan_com.hint, lan_ss.no_data_in_selection);
}
},
cancelFilter : function() {
var ds = this.ds, lan_ss = feyaSoft.ss.lang;
var rows = ds.data.rows, flag;
for (var p in rows) {
p = Number(p);
var row = rows[p];
for (var q in row) {
q = Number(q);
var cell = row[q];
if (cell.filter) {
ds
.fireEvent("attributechange", p, q, [[
"filterCheck", ""]]);
this.doFilter({
x : p,
y : q
}, null, true);
ds.fireEvent("attributechange", p, q, [["filter", ""]]);
flag = true;
}
}
}
ds.trace(lan_ss.cancelFilter);
if (flag) {
this.refreshRange();
}
},
doFilter : function(pos, notmatch, notTrace) {
var ds = this.ds;
var cell = ds.getCell(pos.x, pos.y);
if (notmatch) {
ds.fireEvent("attributechange", pos.x, pos.y, [["filterCheck", {
notmatch : [].concat(notmatch)
}],
["filter-trigger", "x-spreadsheet-filtered"]]);
} else {
ds.fireEvent("attributechange", pos.x, pos.y, [["filterCheck", ""],
["filter-trigger", ""]]);
}
var minrow = cell.filter.minx + pos.x, maxrow = cell.filter.maxx
+ pos.x;
ds.doFiltering(minrow, maxrow);
if (!notTrace) {
ds.trace(feyaSoft.ss.lang.filtering);
this.refreshRange();
}
},
initPasteOptions : function() {
var lan_ss = feyaSoft.ss.lang;
this.pasteOptions = new Ext.Button({
cls : "x-spreadsheet-autofill-option",
hidden : true,
iconCls : "icon_paste",
menu : new Ext.menu.Menu({
defaults : {
group : Ext.id() + "-paste",
checked : false
},
items : [{
checked : true,
text : lan_ss.paste,
handler : this.onPasteNormalFn,
scope : this
}, {
text : lan_ss.paste_value_style,
handler : this.onPasteValueFn,
scope : this
}, {
text : lan_ss.only_paste_style,
handler : this.onPasteStyleFn,
scope : this
}, {
text : lan_ss.only_paste_content,
handler : this.onPasteContentFn,
scope : this
}, {
text : lan_ss.transpose_paste,
handler : this.onPasteTransposeFn,
scope : this
}]
}),
renderTo : Ext.getBody(),
listeners : {
render : {
fn : function(btn) {
btn.getEl().swallowEvent("mousedown");
}
}
}
});
},
hidePasteOptions : function() {
this.pasteOptions.hide();
},
showPasteOptions : function() {
var sm = this.sm, ds = this.ds;
var freezed = this.isFreezed();
var range = sm.whichRange(sm.selectedEnd);
var ct, x = sm.selectedEnd.x, y = sm.selectedEnd.y;
var board = Ext.util.GlobalBoard.getBoard();
var wrap = false, isCell = true;
if (board) {
var content = board.content;
if (content) {
var span = content.span;
if (0 == span.maxx || 0 == span.maxy) {
isCell = false;
}
var data = content.data;
for (var p in data) {
var it = data[p], stopFlag = false;
for (var q in it) {
var cell = it[q];
if (cell.wrap) {
wrap = true;
stopFlag = true;
break;
}
}
if (stopFlag) {
break;
}
}
}
}
var items = this.pasteOptions.menu.items;
items.get(0).setChecked(true, true);
if (wrap || !isCell) {
items.get(items.getCount() - 1).hide();
} else {
items.get(items.getCount() - 1).show();
}
var fr = this.freezeRange, sr = this.showRange;
var width, height;
if ("left-top" == range) {
ct = this.lhctInner;
width = ds.getSpanWidth(fr.col.start, y);
height = ds.getSpanHeight(fr.row.start, x);
} else if ("left" == range) {
ct = this.lsctInner;
width = ds.getSpanWidth(fr.col.start, y);
height = ds.getSpanHeight(fr.row.end + 1, x);
} else if ("top" == range) {
ct = this.hctInner;
width = ds.getSpanWidth(fr.col.end + 1, y);
height = ds.getSpanHeight(fr.row.start, x);
} else {
ct = this.sctInner;
width = ds.getSpanWidth(fr.col.end + 1, y);
height = ds.getSpanHeight(fr.row.end + 1, x);
}
this.pasteOptions.show();
var el = this.pasteOptions.getEl();
ct.appendChild(el);
var pct = ct.parent();
var left = width + 10, top = height + 10;
if (freezed) {
if ("left-top" == range || "left" == range) {
if (left + 40 > pct.getWidth()) {
left = pct.getWidth() - 40;
}
}
if ("left-top" == range || "top" == range) {
if (top + 25 > pct.getHeight()) {
top = pct.getHeight() - 25;
}
}
}
el.setLeft(left);
el.setTop(top);
},
onPasteNormalFn : function() {
this.ds.undo();
Ext.util.GlobalBoard.getBoard().paste2Fn(this, ".ss");
},
onPasteValueFn : function() {
this.ds.undo();
Ext.util.GlobalBoard.getBoard().paste2Fn(this, ".ss", "value");
},
onPasteStyleFn : function() {
this.ds.undo();
Ext.util.GlobalBoard.getBoard().paste2Fn(this, ".ss", "style");
},
onPasteContentFn : function() {
this.ds.undo();
Ext.util.GlobalBoard.getBoard().paste2Fn(this, ".ss", "content");
},
onPasteTransposeFn : function() {
this.ds.undo();
Ext.util.GlobalBoard.getBoard().paste2Fn(this, ".ss", "transpose");
},
isChanged : function() {
return this.ds.isChanged();
},
isReadOnly : function() {
if (!this.file) {
return false;
} else if (2 == this.file.permission) {
if (this.file.lockedBy && !this.file.isLockedBySelf) {
return "locked";
}
return false;
}
return true;
},
isEmptyFile : function() {
return !this.file;
},
getFileId : function() {
if (this.file) {
return this.file.id;
}
},
updateFile : function(fileId, name, tabIds) {
this.file.id = fileId;
this.file.name = name;
this.ds.updateTabIds(tabIds);
},
setTRHtmlForIE : (function() {
var re = /
(.*?)<\/td>/gi;
return function(tr, html, index, fn) {
if (typeof index != "number") {
index = -1;
}
var arr;
while ((arr = re.exec(html)) != null) {
var td = tr.insertCell(index);
if (Ext.isFunction(fn)) {
fn.call(this, td, arr[1]);
}
td.innerHTML = arr[2];
if (index != -1) {
index++;
}
}
};
})(),
processCrossSheetEditing : function(oldSheetIndex, sheetIndex) {
//sheet切换
var me = this;
var sm = this.sm, ds = this.ds;
var textCover = sm.getTextCover();
var textCoverEl = Ext.get(textCover);
if (textCoverEl.isVisible()) {
var pos = textCover.pos;
var relatedSheetIndex = pos.sheetIndex;
if (relatedSheetIndex != sheetIndex) {
var relatedSheetName = ds.sheets[relatedSheetIndex].name;
var val = textCover.value;
var posReg = ds.posReg;
var newVal = val.replace(posReg, function(w) {
var idx = arguments[arguments.length - 2];
var oldIdx = idx;
idx += w.length;
if (-1 == w.indexOf("!") && "!" != val.charAt(idx)) {
var addLen = relatedSheetName.length + 1;
w = relatedSheetName + "!" + w;
}
return w;
});
textCover.value = newVal;
this.stateField.setValue(relatedSheetName + "!"
+ ds.getLetter(pos.y) + pos.x);
} else {
this.stateField.setValue(ds.getLetter(pos.y) + pos.x);
}
textCoverEl.focus(50);
(function () {
sm.onFormulaSelectupFn();
me.sysFocusObj(textCover.value);
}).defer(100, this);
} else {
var focusCell = sm.focusCell;
//处理dataStore 清空
this.stateField.setValue(ds.getLetter(focusCell.y) + focusCell.x);
}
},
combineRanges : function(ranges, dir) {
var ds = this.ds;
if ("x" == dir) {
} else {
var xSpan = 0, len = ranges.length;
for (var i = 0; i < len; i++) {
var it = ranges[i];
var off = it.ex - it.x + 1;
if (xSpan < off) {
xSpan = off;
}
}
var col = [];
for (var j = 0; j < xSpan; j++) {
col.push(0);
}
var data = [];
for (var k = 0; k < len; k++) {
var it = ranges[k];
for (var j = it.y; j <= it.ey; j++) {
var ncol = [].concat(col);
for (var i = it.x; i <= it.ex; i++) {
var val = ds.getCellValue(i, j, it.sheetIndex, true);
val = Ext.num(val, val) || "";
if (Ext.isString(val)) {
val = val.replace(" ", " ");
val = val.replace(" ", " ");
val = val.replace(/\s/gi, " ");
}
ncol[i - it.x] = val;
}
data.push(ncol);
}
}
return data;
}
},
changeConfig : function(config) {
if (config) {
Ext.apply(this, config);
var ss = this, ds = ss.ds, sct = ss.scontainer;
if (config.file && config.file.sheets) {
var file = this.file;
ss.chartManager.cleanCharts();
var fr = ss.copyRange(ss.freezeRange);
ds.resetModifiedCache();
ds.setSheets(file.sheets, file.extraInfo, file.activeSheet);
ss.updateSheetStatus();
ss.reloadUI(fr);
var title = file.name;
sct.fireEvent("changetitle", title);
}
}
},
onUndoMouseOverFn : function(dolist, e, item, index) {
var lan_ss = feyaSoft.ss.lang;
var foot = dolist.foot;
var index = dolist.activeCount;
var step = lan_ss.step;
if (1 < index) {
step = lan_ss.steps;
}
foot.update(lan_ss.undo + " " + index + " " + step);
},
onRedoMouseOverFn : function(dolist, e, item) {
var lan_ss = feyaSoft.ss.lang;
var foot = dolist.foot;
var index = dolist.activeCount;
var step = lan_ss.step;
if (1 < index) {
step = lan_ss.steps;
}
foot.update(lan_ss.redo + " " + index + " " + step);
},
onUndoBefroeShowFn : function(m) {
var ss = this;
var ds = ss.ds;
var hs = ds.getActiveHStack();
var ul = this.undoList;
ul.removeAll();
for (var i = hs.index, start = hs.start; i > start; i--) {
var index = i - 1;
var rd = hs.records[index];
var action = rd.action || "Step" + i;
ul.add({
text : action,
handler : this.onUndoMoreFn,
scope : this
});
}
return 0 < ul.items.getCount();
},
onRedoBefroeShowFn : function(m) {
var ss = this;
var ds = ss.ds;
var hs = ds.getActiveHStack();
var rl = this.redoList;
rl.removeAll();
for (var i = hs.index, end = hs.max; i < end; i++) {
var rd = hs.records[i];
var action = rd.action || "Step" + (i + 1);
rl.add({
text : action,
handler : this.onRedoMoreFn,
scope : this
});
}
return 0 < rl.items.getCount();
},
onUndoFn : function() {
var ss = this;
ss.resetCutStatus();
ss.ds.undo();
},
onRedoFn : function() {
var ss = this;
ss.resetCutStatus();
ss.ds.redo();
},
onUndoMoreFn : function(item) {
var ss = this;
var ds = ss.ds;
ds.undo(this.undoList.activeCount);
ss.sm.transferFocus();
},
onRedoMoreFn : function(item) {
var ss = this;
var ds = ss.ds;
ds.redo(this.redoList.activeCount);
ss.sm.transferFocus();
},
onHStackChangeFn : function(hs) {
if (hs == null) {
this.undoBtn.disable();
this.redoBtn.disable();
} else {
if (hs.index > hs.start) {
this.undoBtn.enable();
} else {
this.undoBtn.disable();
}
if (hs.index < hs.max) {
this.redoBtn.enable();
} else {
this.redoBtn.disable();
}
}
},
updateConditionFormat : function(changed, deleted) {
var ds = this.ds;
var sheet = ds.sheets[ds.activeSheet];
var oldCfm = sheet.conditionFormat || [];
changed = changed || [];
var og = {
action : "set-cfm",
type : "undo",
cfm : ds.deepClone(oldCfm)
};
var md = {
action : "set-cfm",
type : "redo",
cfm : ds.deepClone(changed)
};
var sm = this.sm;
ds.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
sheet.conditionFormat = changed;
ds.prepareConditionFormat(changed, sheet);
ds.saveExtraInfo();
this.renderRange(this.freezeRange, this.showRange);
ds.trace(feyaSoft.ss.lang.setConditionFormat);
},
getCompanyReferenceCell : function(withSheetName, asPos, far) {
var sm = this.sm, ds = this.ds;
var focusCell = sm.focusCell;
var x = focusCell.x, y = focusCell.y;
var rows = ds.data.rows;
var row = rows[x];
var pos;
for (var i = y - 1; i > 0; i--) {
var cell = row[i];
if (cell) {
if (ds.isCompanyCell(cell)) {
pos = {
x : x,
y : i
};
pos.ex = pos.x;
pos.ey = pos.y;
pos.sheetIndex = ds.activeSheet;
if (!far) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false,
!withSheetName);
}
return pos;
}
} else if (far && pos) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false,
!withSheetName);
}
return pos;
}
} else if (far && pos) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false, !withSheetName);
}
return pos;
}
}
if (pos) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false, !withSheetName);
}
return pos;
}
for (var i = x - 1; i > 0; i--) {
var row = rows[i];
if (row) {
var cell = row[y];
if (cell) {
if (ds.isCompanyCell(cell)) {
pos = {
x : i,
y : y
};
pos.ex = pos.x;
pos.ey = pos.y;
pos.sheetIndex = ds.activeSheet;
if (!far) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false,
!withSheetName);
}
return pos;
}
} else if (far && pos) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false,
!withSheetName);
}
return pos;
}
} else if (far && pos) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false,
!withSheetName);
}
return pos;
}
}
}
if (pos) {
if (!asPos) {
return ds.transfer5TplPos2Text(pos, false, !withSheetName);
}
return pos;
}
},
autoSelectCompanyCell : function() {
var pos = this.getCompanyReferenceCell(false, true);
if (pos) {
var sm = this.sm;
sm.selectRange({
x : pos.x,
y : pos.y
}, {
x : pos.x,
y : pos.y
}, {
x : pos.ex,
y : pos.ey
});
}
},
findCompanyReferenceCellInRow : function(x, y, dir) {
var sm = this.sm, ds = this.ds;
var rows = ds.data.rows;
var row = rows[x];
var pos;
if ("pos" == dir) {
var max = ds.getMaxColumnNumber();
for (var i = y + 1; i <= max; i++) {
var cell = row[i];
if (cell) {
if (ds.isCompanyCell(cell)) {
pos = {
x : x,
y : i
};
pos.ex = pos.x;
pos.ey = pos.y;
pos.sheetIndex = ds.activeSheet;
} else {
break;
}
} else {
break;
}
}
return pos;
} else {
for (var i = y - 1; i > 0; i--) {
var cell = row[i];
if (cell) {
if (ds.isCompanyCell(cell)) {
pos = {
x : x,
y : i
};
pos.ex = pos.x;
pos.ey = pos.y;
pos.sheetIndex = ds.activeSheet;
} else {
break;
}
} else {
break;
}
}
return pos;
}
},
findCompanyReferenceCellInColumn : function(x, y, dir) {
var sm = this.sm, ds = this.ds;
var rows = ds.data.rows;
var pos;
if ("pos" == dir) {
var max = ds.getMaxRowNumber();
for (var i = x + 1; i <= max; i++) {
var row = rows[i];
if (row) {
var cell = row[y];
if (cell) {
if (ds.isCompanyCell(cell)) {
pos = {
x : i,
y : y
};
pos.ex = pos.x;
pos.ey = pos.y;
pos.sheetIndex = ds.activeSheet;
} else {
break;
}
} else {
break;
}
} else {
break;
}
}
return pos;
} else {
for (var i = x - 1; i > 0; i--) {
var row = rows[i];
if (row) {
var cell = row[y];
if (cell) {
if (ds.isCompanyCell(cell)) {
pos = {
x : i,
y : y
};
pos.ex = pos.x;
pos.ey = pos.y;
pos.sheetIndex = ds.activeSheet;
} else {
break;
}
} else {
break;
}
} else {
break;
}
}
return pos;
}
},
getCompanyReferenceCellRange : function(withSheetName, asPos) {
var sm = this.sm, ds = this.ds;
var focusCell = sm.focusCell;
var x = focusCell.x, y = focusCell.y;
var pos = this.getCompanyReferenceCell(false, true, true);
if (pos) {
if (pos.x === x) {
var minPos = this.findCompanyReferenceCellInColumn(pos.x,
pos.y, "pre");
if (minPos) {
pos.x = minPos.x;
pos.y = minPos.y;
}
var maxPos = this.findCompanyReferenceCellInColumn(pos.x,
pos.y, "pos");
if (maxPos) {
pos.ex = maxPos.ex;
pos.ey = maxPos.ey;
}
if (pos.x === pos.ex && pos.y === pos.ey) {
minPos = this.findCompanyReferenceCellInRow(pos.x, pos.y,
"pre");
if (minPos) {
pos.x = minPos.x;
pos.y = minPos.y;
}
maxPos = this.findCompanyReferenceCellInRow(pos.x, pos.y,
"pos");
if (maxPos) {
pos.ex = maxPos.ex;
pos.ey = maxPos.ey;
}
}
if (!asPos) {
var text = ds.transfer5TplPos2Text(pos, false,
!withSheetName);
var arr = text.split(":");
if (1 == arr.length) {
arr.push(arr[0]);
}
arr.push(pos.x === pos.ex ? "horizontal" : "vertical");
return arr;
}
return pos;
} else {
var minPos = this.findCompanyReferenceCellInRow(pos.x, pos.y,
"pre");
if (minPos) {
pos.x = minPos.x;
pos.y = minPos.y;
}
var maxPos = this.findCompanyReferenceCellInRow(pos.x, pos.y,
"pos");
if (maxPos) {
pos.ex = maxPos.ex;
pos.ey = maxPos.ey;
}
if (pos.x === pos.ex && pos.y === pos.ey) {
minPos = this.findCompanyReferenceCellInColumn(pos.x,
pos.y, "pre");
if (minPos) {
pos.x = minPos.x;
pos.y = minPos.y;
}
maxPos = this.findCompanyReferenceCellInColumn(pos.x,
pos.y, "pos");
if (maxPos) {
pos.ex = maxPos.ex;
pos.ey = maxPos.ey;
}
}
if (!asPos) {
var text = ds.transfer5TplPos2Text(pos, false,
!withSheetName);
var arr = text.split(":");
if (1 == arr.length) {
arr.push(arr[0]);
}
arr.push(pos.x === pos.ex ? "horizontal" : "vertical");
return arr;
}
return pos;
}
} else {
return false;
}
},
updateCells : function(json, startPos) {
startPos = startPos || {
row : 0,
col : 0
};
var me = this;
var ds = this.ds;
var dsRows = ds.data.rows;
var x = startPos.row, y = startPos.col;
var rows = json.rows;
for (var p in rows) {
var r = Number(p) + x;
var row = rows[p];
if (!dsRows[r]) {
dsRows[r] = {};
}
var dsRow = dsRows[r];
for (var q in row) {
var c = Number(q) + y;
var cellObj = row[q];
dsRow[c] = ds.deepClone(cellObj);
var origin = cellObj['origin-data'];
if (false == Ext.type(origin)) {
origin = cellObj.data;
if (false == Ext.type(origin)) {
origin = cellObj.d;
}
}
origin = this.prepareOrigin2Data(origin, r, c);
ds.setCellData(r, c, origin, true);
}
}
ds.fireEvent("checkformula", ds.activeSheet);
(function() {
me.refreshRange();
}).defer(500);
},
getCell : function(row, col, sheetIndex) {
var ds = this.ds;
var tmp = ds.activeSheet;
if (false !== Ext.type(sheetIndex)) {
ds.activeSheet = sheetIndex;
ds.data = ds.sheets[sheetIndex];
}
var cell = ds.getCell(row, col);
ds.activeSheet = tmp;
ds.data = ds.sheets[tmp];
return cell;
}
});
Ext.ns("Ext.ss");
Ext.ss.Toolbar = function(config) {
var needHidden = false;
if (feyaSoft.home.CONST.CLIENT_NAME == "pradac") {
needHidden = true;
}
Ext.apply(this, config);
this.spreadsheet.toolbar = this;
var lan_ss = feyaSoft.ss.lang;
var lan_common = feyaSoft.lang.common;
var lan_lock = feyaSoft.lang.lock;
this.newBtn = new Ext.SplitButton({
hidden : needHidden,
iconCls : "icon_new",
text : lan_common['new'],
tooltip : "New",
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onNewFn();
}, this);
},
scope : this,
menu : new Ext.menu.Menu({
items : [{
text : lan_ss.newSpreadsheet,
handler : function() {
feyaSoft.home.LoginCheck(
function() {
this.onNewFn();
}, this);
},
scope : this
}, {
text : lan_ss.newfileFromTemp,
handler : function() {
feyaSoft.home.LoginCheck(
function() {
this
.onNewFromTemplateFn();
}, this);
},
scope : this
}, {
iconCls : "icon_new",
text : lan_ss.newtemplate,
handler : function() {
feyaSoft.home.LoginCheck(
function() {
this.onNewFn(true);
}, this);
},
scope : this
}]
})
});
/**打开模板*/
this.openBtn = new Ext.SplitButton({
hidden : needHidden,
iconCls : "icon_open",
tooltip : lan_common.open,
text : lan_common.open,
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onOpenFn();
}, this);
},
scope : this,
menu : new Ext.menu.Menu({
items : [{
text : lan_common.open,
handler : function() {
feyaSoft.home.LoginCheck(
function() {
this.onOpenFn();
}, this);
},
scope : this
}, {
text : lan_ss.openTemplate,
handler : function() {
var me=this;
me.onOpenFn(true);
/**feyaSoft.home.LoginCheck(
function() {
this.onOpenFn(true);
}, this);**/
},
scope : this
}]
})
});
this.saveMenu = new Ext.menu.Menu({
items : [{
iconCls : "icon_save",
text : lan_common.save,
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onSaveFn();
}, this);
},
scope : this
}, {
iconCls : "icon_save_as",
text : lan_common.saveAs,
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onSaveAsFn();
}, this);
},
scope : this
}, {
iconCls : "icon_save_as",
text : lan_ss.saveAsTemplate,
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onSaveTemplateAsFn();
}, this);
},
scope : this
}]
});
this.saveBtn = new Ext.SplitButton({
iconCls : "icon_ss_save",
scale : "large",
rowspan : 3,
colspan : 3,
iconAlign : "top",
text : lan_common.save,
tooltip : "保存",
handler : this.onSaveFn,
scope : this,
arrowAlign : "right",
menu : this.saveMenu
});
this.closeBtn = new Ext.Button({
iconCls : "icon_close",
text : lan_common.close,
tooltip : "关闭",
handler : this.onCloseFn,
scope : this
});
this.printBtn = new Ext.Button({
iconCls : "printer",
text : lan_common.print,
tooltip : lan_common.print_tip,
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onPrintFn();
}, this);
},
scope : this
});
if (feyaSoft.home.CONST.CLIENT_NAME == "pradac") {
this.saveBtn = new Ext.Button({
iconCls : "icon_ss_save",
scale : "large",
rowspan : 3,
colspan : 3,
iconAlign : "top",
text : " " + lan_common.save + " ",
tooltip : "Save",
handler : this.onSaveFn,
scope : this
});
}
this.fileGroup = new Ext.ButtonGroup({
title : lan_common.file,
columns : 4,
items : [this.saveBtn, this.newBtn, this.openBtn, this.printBtn]
});
this.cutBtn = new Ext.Button({
iconCls : "icon_cut",
tooltip : lan_common.cut,
handler : this.onCutFn,
scope : this
});
this.copyBtn = new Ext.Button({
iconCls : "icon_copy",
tooltip : lan_common.copy,
handler : this.onCopyFn,
scope : this
});
this.pasteBtn = new Ext.SplitButton({
iconCls : "icon_ss_paste",
iconAlign : "top",
text : " " + lan_common.paste + " ",
scale : "large",
colspan : 3,
rowspan : 3,
tooltip : "粘贴",
handler : this.onPasteFn,
scope : this,
menu : [{
text : lan_ss.only_paste_value,
handler : this.onPasteValueFn,
scope : this
}, {
text : lan_ss.only_paste_style,
handler : this.onPasteStyleFn,
scope : this
}, {
text : lan_ss.only_paste_content,
handler : this.onPasteContentFn,
scope : this
}, {
text : lan_ss.transpose_paste,
handler : this.onPasteTransposeFn,
scope : this
}]
});
this.brushBtn = new Ext.Button({
iconCls : "icon_brush",
tooltip : "格式刷",
handler : this.onBrushFn,
scope : this
});
this.clipGroup = new Ext.ButtonGroup({
title : lan_common.clipboard,
columns : 4,
items : [this.pasteBtn, this.cutBtn, this.copyBtn,
this.brushBtn]
});
this.formulaMenu = new Ext.menu.Menu({
items : [{
iconCls : "icon_sum",
text : lan_common.sum,
handler : this.onSumFn,
scope : this
}, {
iconCls : "icon_average",
text : lan_common.average,
handler : this.onAverageFn,
scope : this
}, {
iconCls : "icon_count",
text : lan_common.count,
handler : this.onCountFn,
scope : this
}, {
iconCls : "icon_min",
text : lan_common.min,
handler : this.onMinFn,
scope : this
}, {
iconCls : "icon_max",
text : lan_common.max,
handler : this.onMaxFn,
scope : this
}, "-", {
text : lan_ss.insertFormula,
iconCls : "icon_fx",
handler : this.onInsertFormula,
scope : this
}, "-", {
text : lan_ss.nameManager,
iconCls : "icon_edit",
handler : this.onNameMgr,
scope : this
}]
});
this.formulaBtn = new Ext.SplitButton({
iconCls : "icon_formula32",
iconAlign : "top",
scale : "large",
text : lan_ss.formula,
colspan : 3,
rowspan : 3,
tooltip : "Insert Formula",
handler : this.onInsertFormula,
scope : this,
menu : this.formulaMenu
});
this.formulaGroup = new Ext.ButtonGroup({
title : lan_ss.formula,
columns : 3,
items : [this.formulaBtn]
});
this.deleteRangeMenu = new Ext.menu.Menu({
items : [{
iconCls : "icon_delete_row",
text : lan_ss.deleteRows,
handler : this.onDeleteRowFn,
scope : this
}, {
iconCls : "icon_delete_col",
text : lan_ss.deleteColumns,
handler : this.onDeleteColFn,
scope : this
}]
});
this.deleteRangeBtn = new Ext.SplitButton({
iconCls : "icon_ss_delete",
iconAlign : "top",
scale : "large",
text : lan_common['delete'],
colspan : 1,
rowspan : 3,
tooltip : "Delete selected range",
handler : this.onDeleteFn,
scope : this,
menu : this.deleteRangeMenu
});
this.insertRangeMenu = new Ext.menu.Menu({
items : [{
iconCls : "icon_insert_row_above",
text : lan_ss.insertRowAbove,
handler : this.onInsertRowAboveFn,
scope : this
}, {
iconCls : "icon_insert_row_below",
text : lan_ss.insertRowBelow,
handler : this.onInsertRowBelowFn,
scope : this
}, {
iconCls : "icon_insert_col_before",
text : lan_ss.insertColBefore,
handler : this.onInsertColBeforeFn,
scope : this
}, {
iconCls : "icon_insert_col_after",
text : lan_ss.insertColAfter,
handler : this.onInsertColAfterFn,
scope : this
}]
});
this.insertRangeBtn = new Ext.SplitButton({
iconCls : "icon_ss_insert",
iconAlign : "top",
scale : "large",
text : " " + lan_common.insert,
colspan : 1,
rowspan : 3,
tooltip : "Insert",
handler : this.onInsertRowAboveFn,
scope : this,
menu : this.insertRangeMenu
});
this.dataRangeGroup = new Ext.ButtonGroup({
title : lan_ss.rowColumn,
columns : 2,
items : [this.insertRangeBtn, this.deleteRangeBtn]
});
this.insertChartBtn = new Ext.Button({
iconCls : "icon_ss_insert_chart",
iconAlign : "top",
rowspan : 3,
colspan : 3,
scale : "large",
text : " " + lan_common.chart + " ",
tooltip : "Insert Chart",
handler : this.onInsertChartFn,
scope : this
});
this.insertPictureBtn = new Ext.Button({
iconCls : "icon_insert_picture",
text : lan_common.image,
menu : new Ext.menu.Menu({
items : [{
iconCls : "icon_insert_picture_open",
text : lan_ss.selectImage,
handler : this.onInsertImageByOpenFn,
scope : this
}, {
iconCls : "icon_insert_picture_link",
text : lan_ss.linkImage,
menu : {
items : [{
xtype : "textarea",
width : 300,
height : 150,
emptyText : "输入图片的网络地址",
allowBlank : false,
enableKeyEvents : true,
listeners : {
keydown : {
fn : this.onInsertImageByLinkFn,
scope : this
}
}
}]
}
}]
})
});
this.insertIncellImageBtn = new Ext.Button({
iconCls : "icon_insert_image",
text : lan_ss.incell,
tooltip : lan_ss.inCellImage,
menu : new Ext.menu.Menu({
items : [{
iconCls : "icon_insert_image_open",
text : lan_ss.selectImage,
handler : this.onInsertIncellImageByOpenFn,
scope : this
}, {
iconCls : "icon_insert_image_link",
text : lan_ss.linkImage,
menu : {
items : [{
xtype : "textarea",
width : 300,
height : 150,
emptyText : "输入图片的网络地址",
allowBlank : false,
enableKeyEvents : true,
listeners : {
keydown : {
fn : this.onInsertIncellImageByLinkFn,
scope : this
}
}
}]
}
}]
})
});
this.conditionFormatBtn = new Ext.Button({
iconCls : "icon_ss_conditionformat",
text : feyaSoft.ss.lang.condition,
tooltip : feyaSoft.ss.lang.conditionFormat,
handler : this.onConditionFormat,
scope : this
});
this.insertGroup = new Ext.ButtonGroup({
title : lan_common.insert,
columns : 4,
items : [this.insertChartBtn, this.insertPictureBtn,
this.insertIncellImageBtn, this.conditionFormatBtn]
});
this.findReplaceBtn = new Ext.SplitButton({
iconCls : "icon_find32",
iconAlign : "top",
scale : "large",
colspan : 3,
rowspan : 3,
text : " " + lan_common.find + " ",
tooltip : lan_common.find_tip,
handler : this.onFindFn,
scope : this,
menu : [{
iconCls : "icon_find",
text : lan_common.find,
tooltip : lan_common.find_tip,
handler : this.onFindFn,
scope : this
}, {
iconCls : "icon_replace",
text : lan_common.replace,
tooltip : lan_common.replace_tip,
handler : this.onReplaceFn,
scope : this
}]
});
this.clearBtn = new Ext.Button({
iconCls : "icon_remove_format",
text : feyaSoft.lang.common.clear,
menu : [{
text : feyaSoft.lang.common.clearAll,
handler : this.onClearAllFn,
scope : this
}, {
text : feyaSoft.lang.common.clearContent,
handler : this.onClearContentFn,
scope : this
}, {
text : feyaSoft.word.lang.remove_format,
handler : this.onRemoveFormatFn,
scope : this
}]
});
this.commentBtn = new Ext.Button({
iconCls : "icon_comment",
text : lan_common.comments,
tooltip : "添加/编辑 批注",
handler : this.onCommentFn,
scope : this
});
this.filterItem = new Ext.menu.CheckItem({
checked : false,
text : lan_common.filter,
tooltip : lan_ss.filter_tip,
handler : this.onFilterFn,
scope : this
});
this.filterBtn = new Ext.Button({
iconCls : "icon_filter_sort",
text : lan_common.filter,
tooltip : lan_ss.filter_tip,
menu : new Ext.menu.Menu({
items : [this.filterItem, {
iconCls : "icon_asc",
text : lan_ss.asc_tip,
handler : this.onAscFn,
scope : this
}, {
iconCls : "icon_desc",
text : lan_ss.desc_tip,
handler : this.onDescFn,
scope : this
}],
listeners : {
show : {
fn : this.onFilterMenuShow,
scope : this
}
}
})
});
this.findFilterGroup = new Ext.ButtonGroup({
title : lan_ss.findFilter,
columns : 4,
items : [this.findReplaceBtn, this.filterBtn, this.commentBtn,
this.clearBtn]
});
this.helpBtn = new Ext.Button({
iconCls : "icon_info32",
iconAlign : "top",
rowspan : 3,
colspan : 3,
scale : "large",
tooltip : "Help",
handler : function() {
var newWindow = window
.open(
"http://www.feyasoft.com/wordPublic?id=waGuAW04a-0_&viewStatus=publicView",
"_blank");
newWindow.focus();
},
scope : this
});
this.helpGroup = new Ext.ButtonGroup({
title : " " + lan_common.help,
columns : 2,
items : [this.helpBtn]
});
this.fontFamilyCombo = new Ext.form.ComboBox({
width : 120,
colspan : 4,
store : new Ext.ss.common.Mask.getFontFamilyStore,
displayField : "text",
valueField : "id",
value : "Arial",
typeAhead : true,
mode : "local",
triggerAction : "all",
selectOnFocus : true,
tpl : "{text} "
});
this.fontFamilyCombo.on("select", this.onFontFamilySelectFn, this);
this.fontSizeCombo = new Ext.form.ComboBox({
width : 120,
minListWidth : 200,
colspan : 4,
store : Ext.ss.common.Mask.getFontSizeStore(),
displayField : "id",
valueField : "id",
value : "10pt",
typeAhead : true,
mode : "local",
triggerAction : "all",
selectOnFocus : true,
tpl : "{id} "
});
this.fontSizeCombo.on("select", this.onFontSizeSelectFn, this);
this.boldBtn = new Ext.Button({
iconCls : "icon_bold",
tooltip : "加粗",
handler : this.onBoldFn,
scope : this
});
this.italicBtn = new Ext.Button({
iconCls : "icon_italic",
tooltip : "斜体",
handler : this.onItalicFn,
scope : this
});
this.underlineBtn = new Ext.Button({
iconCls : "icon_underline",
tooltip : "下划线",
handler : this.onUnderlineFn,
scope : this
});
this.strikeBtn = new Ext.Button({
iconCls : "icon_strike",
tooltip : "剔除",
handler : this.onStrikeFn,
scope : this
});
this.fontColorPalette = new Ext.ColorPalette({
allowReselect : true
});
this.fontColorPalette.on("select", this.onFontColorSelectFn, this);
this.fontColorMenu = new Ext.menu.Menu({
items : [this.fontColorPalette]
});
this.fontColorBtn = new Ext.SplitButton({
colspan : 1,
iconCls : "icon_font_color",
iconAlign : top,
tooltip : "字体颜色",
menu : this.fontColorMenu,
handler : this.onFontColorFn,
scope : this,
listeners : {
afterrender : {
fn : function(p) {
var El = p.getEl();
var bEl = El.child("button");
bEl.setStyle("border-bottom", "4px solid #000000");
}
}
}
});
this.bgColorPalette = new Ext.ColorPalette({
allowReselect : true
});
this.bgColorPalette.on("select", this.onBgColorSelectFn, this);
this.bgTransparentBtn = new Ext.menu.Item({
text : lan_common.transparent,
style : "text-align:center;",
handler : this.onBgTransparentFn,
scope : this
});
this.bgColorMenu = new Ext.menu.Menu({
items : [this.bgTransparentBtn, this.bgColorPalette]
});
this.bgColorBtn = new Ext.SplitButton({
colspan : 1,
cls : "x-background-color",
iconCls : "icon_back_color",
tooltip : "背景颜色",
menu : this.bgColorMenu,
handler : this.onBgColorFn,
scope : this,
listeners : {
afterrender : {
fn : function(p) {
var El = p.getEl();
var bEl = El.child("button");
bEl.setStyle("border-bottom",
"4px solid transparent");
}
}
}
});
this.borderMenu = new Ext.menu.Menu({
items : [{
iconCls : "icon_border_all",
text : "所有框线",
handler : this.onBorderAllFn,
scope : this
}, {
iconCls : "icon_border_outside",
text : "外框线",
handler : this.onBorderOutsideFn,
scope : this
}, {
iconCls : "icon_border_inside",
text : "内框线",
handler : this.onBorderInsideFn,
scope : this
}, {
iconCls : "icon_border_none",
text : "无边框",
handler : this.onBorderNoneFn,
scope : this
}, {
iconCls : "icon_border_left",
text : "左边框",
handler : this.onBorderLeftFn,
scope : this
}, {
iconCls : "icon_border_top",
text : "上边框",
handler : this.onBorderTopFn,
scope : this
}, {
iconCls : "icon_border_right",
text : "右边框",
handler : this.onBorderRightFn,
scope : this
}, {
iconCls : "icon_border_bottom",
text : "下边框",
handler : this.onBorderBottomFn,
scope : this
}]
});
this.borderBtn = new Ext.SplitButton({
colspan : 2,
iconCls : "icon_border_bottom",
tooltip : "Border",
menu : this.borderMenu,
handler : this.onBorderButtonFn,
scope : this
});
this.combineBtn = new Ext.Button({
iconCls : "icon_combine_cell",
tooltip : "合并单元格",
handler : this.onCombineFn,
scope : this
});
this.wordWrapBtn = new Ext.Button({
iconCls : "icon_wordwrap",
tooltip : "自动换行",
enableToggle : true,
handler : this.onWordWrapFn,
scope : this
});
this.fontGroup = new Ext.ButtonGroup({
title : lan_common.font,
columns : 9,
defaults : {
scale : "small"
},
items : [this.fontFamilyCombo, this.boldBtn, this.fontColorBtn,
this.underlineBtn, this.strikeBtn, this.wordWrapBtn,
this.fontSizeCombo, this.italicBtn, this.bgColorBtn,
this.borderBtn, this.combineBtn]
});
this.alignLeftBtn = new Ext.Button({
iconCls : "icon_align_left",
tooltip : "左对齐",
handler : this.onAlignLeftFn,
scope : this
});
this.alignCenterBtn = new Ext.Button({
iconCls : "icon_align_center",
tooltip : "居中",
handler : this.onAlignCenterFn,
scope : this
});
this.alignRightBtn = new Ext.Button({
iconCls : "icon_align_right",
tooltip : "右对齐",
handler : this.onAlignRightFn,
scope : this
});
this.alignTopBtn = new Ext.Button({
iconCls : "icon_align_top",
tooltip : "顶端对齐",
handler : this.onAlignTopFn,
scope : this
});
this.alignMiddleBtn = new Ext.Button({
iconCls : "icon_align_middle",
tooltip : "垂直居中",
handler : this.onAlignMiddleFn,
scope : this
});
this.alignBottomBtn = new Ext.Button({
iconCls : "icon_align_bottom",
tooltip : "底端对齐",
handler : this.onAlignBottomFn,
scope : this
});
this.alignGroup = new Ext.ButtonGroup({
title : lan_common.align,
columns : 3,
defaults : {
scale : "small"
},
items : [this.alignLeftBtn, this.alignCenterBtn,
this.alignRightBtn, this.alignTopBtn,
this.alignMiddleBtn, this.alignBottomBtn]
});
this.formatCombo = new Ext.form.ComboBox({
width : 155,
minListWidth : 200,
colspan : 6,
store : new Ext.ss.common.Mask.getFormatStore,
tpl : (new Ext.XTemplate([
"",
"{text} ", "{preview}", " ", ""].join("")))
.compile(),
displayField : "text",
valueField : "id",
value : "regular",
typeAhead : true,
mode : "local",
triggerAction : "all",
selectOnFocus : true
});
this.formatCombo.on("select", this.onFormatSelect, this);
this.moneyBtn = new Ext.SplitButton({
colspan : 1,
tooltip : feyaSoft.ss.lang.moneyFormat,
iconCls : "icon_money",
menu : new Ext.menu.Menu({
defaults : {
group : Ext.id() + "-money",
checked : false
},
items : [{
text : "$ " + lan_ss.usdollar,
handler : this.onDollarFn,
scope : this
}, {
text : String.fromCharCode(165) + " "
+ lan_ss.rmb,
handler : this.onRMBFn,
scope : this
}, {
text : String.fromCharCode(8364) + " "
+ lan_ss.euro,
handler : this.onEuroFn,
scope : this
}, {
text : String.fromCharCode(8356) + " "
+ lan_ss.pound,
handler : this.onPoundFn,
scope : this
}]
}),
handler : this.onMoneyFn,
scope : this
});
this.percentBtn = new Ext.Button({
iconCls : "icon_percent",
tooltip : feyaSoft.ss.lang.percentFormat,
handler : this.onPercentFn,
scope : this
});
this.commaBtn = new Ext.Button({
iconCls : "icon_comma",
tooltip : feyaSoft.ss.lang.commaFormat,
handler : this.onCommaFn,
scope : this
});
this.dotMoveLeftBtn = new Ext.Button({
iconCls : "icon_dot_move_left",
tooltip : feyaSoft.ss.lang.moveLeftFormat,
handler : this.onDotMoveLeftFn,
scope : this
});
this.dotMoveRightBtn = new Ext.Button({
iconCls : "icon_dot_move_right",
tooltip : feyaSoft.ss.lang.moveRightFormat,
handler : this.onDotMoveRightFn,
scope : this
});
this.initDateFormatMenu();
this.dateBtn = new Ext.Button({
iconCls : "meeting",
tooltip : feyaSoft.ss.lang.dateFormat,
colspan : 1,
menu : this.dateFormatMenu
});
this.numberGroup = new Ext.ButtonGroup({
title : lan_common.number,
columns : 6,
items : [this.formatCombo, this.moneyBtn, this.percentBtn,
this.commaBtn, this.dotMoveLeftBtn,
this.dotMoveRightBtn, this.dateBtn]
});
this.publicBtn = new Ext.Button({
iconCls : "icon_public32",
iconAlign : "top",
text : lan_common.publicFile,
rowspan : 3,
scale : "large",
tooltip : lan_common.publicFile_tip,
handler : this.onPublicReadOnlyFn,
scope : this
});
this.shareBtn = new Ext.Button({
iconCls : "icon_share32",
iconAlign : "top",
text : lan_common.shareFile,
rowspan : 3,
scale : "large",
tooltip : lan_common.shareFile_tip,
handler : this.onShareFn,
scope : this
});
var locked = FPROXY.isLocked(this.getFile());
this.lockBtn = new Ext.Button({
disabled : !FPROXY.canChangeLockStatus(this.getFile()),
iconCls : locked ? "icon_unlock32" : "icon_lock32",
iconAlign : "top",
text : locked
? feyaSoft.lang.lock.unlockFile
: feyaSoft.lang.lock.lockFile,
rowspan : 3,
scale : "large",
tooltip : feyaSoft.lang.lock.lockFile_tip,
handler : this.onLockFn,
scope : this
});
this.revisionBtn = new Ext.Button({
disabled : !FPROXY.isEditable(this.getFile())
|| FPROXY.isLockedForMe(this.getFile()),
iconCls : "icon_history32",
iconAlign : "top",
text : lan_common.history,
rowspan : 3,
scale : "large",
tooltip : lan_common.history_tip,
handler : this.onRevisionFn,
scope : this
});
this.shieldBtn = new Ext.Button({
iconCls : "icon_shield32",
iconAlign : "top",
text : feyaSoft.lang.common.additionalAccess,
rowspan : 3,
scale : "large",
tooltip : feyaSoft.lang.common.setAccessDesc,
handler : this.onShieldFn,
scope : this
});
this.publicGroup = new Ext.ButtonGroup({
title : lan_common['public'],
columns : 5,
items : [this.publicBtn, this.shareBtn, this.lockBtn,
this.shieldBtn]
});
this.fzItem = new Ext.menu.Item({
text : lan_ss.freezeGrid,
handler : this.onFreezeFn,
scope : this
});
this.fzrowItem = new Ext.menu.Item({
text : lan_ss.freeze_first_row,
handler : this.onFreezeRowFn,
scope : this
});
this.fzcolItem = new Ext.menu.Item({
text : lan_ss.freeze_first_col,
handler : this.onFreezeColFn,
scope : this
});
this.freezeMenu = new Ext.menu.Menu({
items : [this.fzItem, this.fzrowItem, this.fzcolItem]
});
this.freezeBtn = new Ext.Button({
iconCls : "icon_ss_freeze32",
iconAlign : "top",
text : lan_ss.freezeGrid,
rowspan : 3,
colspan : 3,
scale : "large",
tooltip : lan_ss.freezeGrid,
menu : this.freezeMenu
});
this.gridLineBtn = new Ext.Button({
iconCls : "icon_border_hide",
text : lan_ss.hideGridLine,
tooltip : "隐藏/显示网络线",
handler : this.onGridLineFn,
scope : this
});
this.headerFooterBtn = new Ext.SplitButton({
iconCls : "document",
text : lan_ss.header_footer,
menu : [{
text : lan_ss.editHeadFoot,
handler : function() {
this.fireEvent("editheadfoot", this);
},
scope : this
}, {
text : lan_ss.showHeadFoot,
handler : function() {
this.fireEvent("showheadfoot", this);
},
scope : this
}, {
text : lan_ss.hideHeadFoot,
handler : function() {
this.fireEvent("hideheadfoot", this);
},
scope : this
}],
handler : this.onHeaderFooter,
scope : this
});
this.splitBtn = new Ext.Button({
iconCls : "icon_ss_split",
text : lan_ss.splitGrid,
tooltip : "分割表格",
handler : this.onSplitFn,
scope : this
});
this.gridGroup = new Ext.ButtonGroup({
title : lan_ss.grid,
columns : 4,
items : [this.freezeBtn, this.splitBtn, this.gridLineBtn,
this.headerFooterBtn]
});
this.importBtn = new Ext.Button({
iconCls : "icon_ss_import32",
iconAlign : "top",
rowspan : 3,
colspan : 3,
scale : "large",
text : lan_ss.importExcel,
tooltip : feyaSoft.lang.file.importExcel,
handler : this.onImportExcelFn,
scope : this
});
this.importGroup = new Ext.ButtonGroup({
title : lan_common['import'],
columns : 3,
hidden : needHidden,
items : [this.importBtn]
});
this.exportExcel2007Menu = new Ext.menu.Item({
text : lan_ss.exportExcel2007,
iconCls : "excel",
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onExportExcel2007Fn();
}, this);
},
scope : this
});
this.exportExcelMenu = new Ext.menu.Item({
text : lan_ss.exportExcel,
iconCls : "excel",
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onExportExcelFn();
}, this);
},
scope : this
});
this.exportPDFmenu = new Ext.menu.Item({
text : lan_ss.exportPDF,
iconCls : "pdf",
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onExportPDFFn();
}, this);
},
scope : this
});
this.exportCSVmenu = new Ext.menu.Item({
text : lan_ss.exportCSV,
iconCls : "csv",
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onExportCSVFn();
}, this);
},
scope : this
});
this.exportHTMLmenu = new Ext.menu.Item({
text : lan_ss.exportHTML,
iconCls : "html",
handler : function() {
feyaSoft.home.LoginCheck(function() {
this.onExportHTMLFn();
}, this);
},
scope : this
});
this.exportMenu = new Ext.menu.Menu({
items : [this.exportExcelMenu,this.exportExcel2007Menu, this.exportCSVmenu, "-",
this.exportPDFmenu, this.exportHTMLmenu]
});
this.exportBtn = new Ext.Button({
iconCls : "icon_ss_export32",
iconAlign : "top",
rowspan : 3,
colspan : 3,
scale : "large",
text : " " + feyaSoft.lang.common['export'] + " ",
menu : this.exportMenu,
scope : this
});
this.exportGroup = new Ext.ButtonGroup({
title : " " + feyaSoft.lang.common['export'] + " ",
columns : 2,
items : [this.exportBtn]
});
this.restoreBtn = new Ext.Button({
iconCls : "icon_ss_restore32",
iconAlign : "top",
rowspan : 3,
colspan : 3,
scale : "large",
text : " " + feyaSoft.lang.common.revision
+ " ",
handler : this.onRestoreFn,
scope : this
});
this.restoreGroup = new Ext.ButtonGroup({
hidden : needHidden,
title : " " + feyaSoft.lang.common.revision + " ",
columns : 2,
items : [this.restoreBtn]
});
this.gridGroup = new Ext.ButtonGroup({
title : lan_ss.grid,
columns : 4,
items : [this.freezeBtn, this.splitBtn, this.gridLineBtn,
this.headerFooterBtn]
});
Ext.ss.Toolbar.superclass.constructor.call(this, {
cls : "x-ribbon-toolbar",
items : [{
title : feyaSoft.lang.common.start,
border : false,
autoHeight : true,
tbar : new Ext.Toolbar({
cls : "x-ribbon-toolbar",
enableOverflow : true,
items : [this.fileGroup, this.clipGroup,
this.fontGroup, this.alignGroup,
this.numberGroup, this.formulaGroup,
this.dataRangeGroup, this.insertGroup,
this.findFilterGroup]
})
}, {
title : feyaSoft.lang.common.data,
border : false,
autoHeight : true,
tbar : new Ext.Toolbar({
cls : "x-ribbon-toolbar",
enableOverflow : true,
items : [this.importGroup, this.exportGroup,
this.restoreGroup, this.gridGroup]
})
}]
});
this.addEvents("filesaved", "toolswitch", "lockchanged");
var ss = this.spreadsheet;
ss.on("updatepress", this.updatePress, this);
ss.on("splitchanged", this.onSplitChangedFn, this);
ss.on("freezechanged", this.onFreezeChangedFn, this);
this.freezeMenu.on("beforeshow", this.onFreezeMenuShowFn, this);
this.on("lockchanged", this.updateToolbarStatus, this);
ss.on("freezechanged", function() {
var file = this.getFile();
if (file && !file.isTemp) {
this.save(null, null, true);
}
}, this);
ss.on("splitchanged", function() {
var file = this.getFile();
if (file && !file.isTemp) {
this.save(null, null, true);
}
}, this);
};
Ext.extend(Ext.ss.Toolbar, Ext.TabPanel, {
createEmptyUrl :basePath+'excel/ResetUI.action',
onNewFn : function(isTemplate) {
var ss = this.spreadsheet;
ss.scontainer.toolbar.saveBtn.setDisabled(false);
var file = this.getFile();
var readOnlyView = !FPROXY.isEditable(file);
var me = this;
var newFn = function() {
ss.maskUI("恢复界面,请稍后...");
me.createEmptyFile(function(file) {
ss.resetSpreadSheet();
me.setFile(file);
file.isTemplate = isTemplate;
ss.unmaskUI();
var fileName = feyaSoft.ss.lang.newSpreadsheet;
if (isTemplate) {
fileName = fileName + " ["
+ feyaSoft.ss.lang.template + "]";
}
ss.scontainer.fireEvent("changetitle", fileName);
me.fireEvent("newfile", this);
me.backToolbarNormal();
}, me);
};
if (!readOnlyView && ss.isChanged()) {
Ext.Msg.show({
title : feyaSoft.lang.common.hint,
msg : feyaSoft.lang.common.fileChanged,
buttons : Ext.Msg.YESNOCANCEL,
fn : function(bid) {
if ("yes" == bid) {
me.save(false, false, false, function() {
newFn();
}, me);
} else if ("no" == bid) {
newFn();
}
},
scope : this,
icon : Ext.MessageBox.QUESTION
});
} else {
newFn();
}
},
onNewFromTemplateFn : function() {
var ss = this.spreadsheet, ds = ss.ds;
ss.scontainer.toolbar.saveBtn.setDisabled(false);
var me = this;
Ext.ux.dialog.OpenDialog.popup(function(fileId, data) {
ss.maskUI("加载数据,请稍后...");
var IdField=Ext.getCmp('Id');
fileId = fileId || this.getFileId();
if(IdField){
fileId=IdField.getValue();
}
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.spreadSheetUrl.createFileFromTemplate,
params : {
id : fileId,
isTemplate:"false"
},
success : function(response) {
var me=this;
var res=Ext.decode(response.responseText);
if(res.success){
ss.maskUI("加载数据,请稍等...");
Ext.Ajax.request({
url :basePath+'Excel/LoadJson',
method:'POST',
success:function(response,options){
var jsonData = Ext.decode(response.responseText);
if (jsonData.success == "true") {
if (jsonData.sheets) {
var templateName = jsonData.name;
ss.chartManager.cleanCharts();
ss.file = jsonData;
ss.file.id = jsonData.id;
ss.file.isTemp = true;
var fr = ss.copyRange(ss.freezeRange);
ds.resetModifiedCache();
ds.setSheets(jsonData.sheets, jsonData.extraInfo,
jsonData.activeSheet);
ss.updateSheetStatus();
ss.reloadUI(fr);
ss.scontainer
.fireEvent(
"changetitle",
feyaSoft.ss.lang.newSpreadsheet
+ " [From 模板: "
+ templateName + "]");
}
ss.unmaskUI();
me.fireEvent("newfile", this);
me.backToolbarNormal();
}
},
failure:function(response,options){
}
});
}else {
Ext.Msg.alert('提示','加载失败!请查看条件是否输入正确,月份格式:如201301');
ss.unmaskUI();
}
},
scope : me
});
}, this, "myXls", true);
},
onOpenFn : function(isTemplate) {
Ext.ux.dialog.OpenDialog
.popup(this.openFile, this, "myXls", isTemplate);
},
openCallback : function(response, isTemplate) {
var ss = this.spreadsheet, sct = ss.scontainer;
var ds = ss.ds;
var jsonData = Ext.decode(response.responseText);
if(isTemplate){
//不是模板 不让保存
sct.toolbar.saveBtn.setDisabled(true);
}else {
sct.toolbar.saveBtn.setDisabled(false);
}
if (jsonData.success == "true") {
if (jsonData.sheets) {
ss.chartManager.cleanCharts();
ss.file = jsonData;
var fr = ss.copyRange(ss.freezeRange);
ds.resetModifiedCache();
if(isTemplate!=undefined){
Ext.getCmp('ds_tablename').setValue(jsonData.storename);
Ext.getCmp('ds_id').setValue(jsonData.storeid);
}
ds.setSheets(jsonData.sheets, jsonData.extraInfo,
jsonData.activeSheet);
ss.updateSheetStatus();
ss.reloadUI(fr);
var title = jsonData.name;
if (isTemplate) {
title += " [" + feyaSoft.ss.lang.template
+ "]";
}
sct.fireEvent("changetitle", title);
}
if ("MYSELF_REPLACE" !== ss.file.sharing) {
this.fireEvent("showeditinglist", new Date, this);
} else {
this.fireEvent("hideeditinglist", this);
}
ss.unmaskUI();
}
},
/**打开模板*/
openFile : function(fileId, data, isTemplate) {
var me = this;
var ss = this.spreadsheet;
var file = this.getFile();
var readOnlyView = !FPROXY.isEditable(file);
var ColCondition=null;
var CellCondition=null;
var opentemplate=isTemplate?isTemplate:false;
var IdField=Ext.getCmp('Id');
fileId = fileId || this.getFileId();
if(IdField){
fileId=IdField.getValue();
}
var loadFn = function(condition) {
ss.maskUI("加载数据,请稍等...");
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.spreadSheetUrl.loadJson,
params : {
id : fileId,
colcondition:ColCondition,
cellcondition:CellCondition,
isTemplate:opentemplate
},
success : function(response, options) {
var me=this;
var res=Ext.decode(response.responseText);
if(res.success){
ss.maskUI("加载数据,请稍等...");
Ext.Ajax.request({
url :basePath+'Excel/LoadJson',
method:'POST',
success:function(response,options){
me.openCallback(response, isTemplate);
},
failure:function(response,options){
}
});
}else {
Ext.Msg.alert('提示','加载失败!请查看条件是否输入正确,月份格式:如201301');
ss.unmaskUI();
}
},
failure : function(response, options) {
var backObj = Ext.decode(response.responseText);
ss.unmaskUI();
},
scope : me
});
};
var openFn = function() {
var me=this;
//打开之前先判断是否有条件
if(isTemplate){
var Id=Ext.getCmp('Id').getValue();
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.documentUrl.ishaveCondition,
params : {
id : Id
},
success:function(response,options){
var rec=Ext.decode(response.responseText);
if(rec.havecondition){
//存在条件
Ext.Ajax.request({//拿到form的items
url : basePath +'excel/getTemplateCondition.action',
params : {
id : Id
},
method : 'post',
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.exceptionInfo != null){
showError(res.exceptionInfo);return;
}
var items=res.items;
var form=new Ext.FormPanel({
id:'excelform',
//anchor:'100% 100%',
frame:true,
layout:'form',
bodyStyle:'padding:5px 5px 0',
defaults: {
autoScroll:true,
margins:{
top: 5,
right: 5,
bottom: 5,
left: 5
}
},
autoScroll : true,
defaultType : 'textfield',
labelSeparator : '',
buttonAlign : 'center',
items:items,
title:res.title
});
var win = new Ext.Window({
id : 'win',
title: '条件',
height: "500",
width: "700",
maximizable : true,
buttonAlign : 'center',
layout : 'fit',
items: form,
buttons : [{
text : '提交',
iconCls: 'x-button-icon-close',
handler : function(){
var items= Ext.getCmp('excelform').items.items;
var colarr="";
var cellarr=""
for(var i=0;i["
+ feyaSoft.ss.lang.template
+ "]";
}
scontainer.fireEvent("changetitle",
name);
delete file.isTemp;
ds.disableCallingBackEnd = false;
delete file.isFake;
delete file.onceChanged;
ss.unmaskUI(feyaSoft.ss.lang.saved
+ " "
+ feyaSoft.lang.common.at
+ " "
+ (new Date)
.format("H:i:s d/m Y"));
if (callback) {
callback.call(scope);
}
}, this, true);
} else {
ss.unmaskUI();
if (json.info == "relogin") {
new feyaSoft.home.Login;
} else {
Ext.MessageBox.alert(
feyaSoft.lang.common.error,
json.info);
}
ss.unmaskUI();
if (callback) {
callback.call(scope);
}
}
},
scope : this
});
}
} else {
var param = {
oldFileId : file.id,
folderId : folderId,
name : name
};
var url = feyaSoft.home.CONST.spreadSheetUrl.saveAs;
if (isTemplate) {
param.isTemplate = isTemplate;
}
if (file.isFake) {
param = {
folderId : folderId,
name : name
};
Ext.apply(param, this.prepareSheetsForSave(ds
.getSheets()));
param.sheets = Ext.encode(param.sheets);
var datastoretablename=Ext.getCmp('ds_tablename').getValue();
var datastoreid=Ext.getCmp('ds_id').getValue();
if(!datastoretablename) return;
param.tablename=datastoretablename;
param.dsId=datastoreid;
url = feyaSoft.home.CONST.spreadSheetUrl.saveJsonAs;
param = {
inJson : Ext.encode(param)
};
}
Ext.Ajax.request({
timeout : 300000,
url : url,
params : param,
success : function(response) {
var json = Ext.decode(response.responseText);
if ("true" == json.success) {
ss.updateFile(json.id, name, json.tabIds);
ds.saveChanges(function() {
var scontainer = ss.scontainer;
if (isTemplate) {
name += "[Template]";
}
scontainer.fireEvent("changetitle", name);
delete file.isTemp;
ds.disableCallingBackEnd = false;
delete file.isFake;
delete file.onceChanged;
ss.unmaskUI(feyaSoft.ss.lang.saved + " "
+ feyaSoft.lang.common.at + " "
+ (new Date).format("H:i:s d/m Y"));
}, this, true);
} else {
ss.unmaskUI();
Ext.MessageBox.alert(
'提示',
'保存成功');
ss.unmaskUI();
}
if (callback) {
callback.call(scope);
}
},
scope : this
});
}
}, this, "myXls", isTemplate);
} else {
if (!silent) {
ss.maskUI(feyaSoft.ss.lang.saveChanges);
}
FPROXY.checkLockStatus(file.id, function(lockedForMe, data) {
var lanLock = feyaSoft.lang.lock, text;
Ext.apply(file, data);
if (lockedForMe == null) {
ss.unmaskUI();
} else if (lockedForMe) {
text = lanLock.lockedBy + " [" + file.lockedBy
+ "], " + lanLock.notChange;
Ext.Msg.alert(feyaSoft.lang.common.Hint, text);
ss.unmaskUI();
ds.resetModifiedCache();
if (callback) {
callback.call(scope);
}
} else {
ds.saveChanges(function() {
ss.unmaskUI(feyaSoft.ss.lang.saved
+ " "
+ feyaSoft.lang.common.at
+ " "
+ (new Date)
.format("H:i:s d/m Y"));
if (callback) {
callback.call(scope);
}
}, this, true);
}
}, this);
}
},
onSaveFn : function() {
this.save();
},
onSaveAsFn : function() {
var file = this.getFile();
delete file.isTemplate;
this.save(null, true);
},
onSaveTemplateAsFn : function() {
this.save(null, true, null, null, null, true);
},
onCutFn : function() {
this.spreadsheet.contextmenu.onCutFn();
},
onCopyFn : function() {
this.spreadsheet.contextmenu.onCopyFn();
},
onPasteFn : function() {
this.spreadsheet.contextmenu.onPasteFn();
},
onPasteValueFn : function() {
Ext.util.GlobalBoard.getBoard().paste2Fn(this.spreadsheet, ".ss",
"value");
},
onPasteStyleFn : function() {
Ext.util.GlobalBoard.getBoard().paste2Fn(this.spreadsheet, ".ss",
"style");
},
onPasteContentFn : function() {
Ext.util.GlobalBoard.getBoard().paste2Fn(this.spreadsheet, ".ss",
"content");
},
onPasteTransposeFn : function() {
Ext.util.GlobalBoard.getBoard().paste2Fn(this.spreadsheet, ".ss",
"transpose");
},
onFindFn : function() {
this.spreadsheet.hotkey.onFindFn();
},
onReplaceFn : function() {
this.spreadsheet.hotkey.onReplaceFn();
},
onCommentFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
var focusCell = sm.focusCell;
var x = focusCell.x, y = focusCell.y;
var tEl = ss.getCellEl(x, y, sm.posFlag);
if (tEl) {
if (!tEl.hasClass(Ext.ss.CONST.cssHash[3])) {
this.spreadsheet.contextmenu.onAddCommentFn();
} else {
this.spreadsheet.contextmenu.onEditCommentFn();
}
}
},
applyFunction : function(name) {
var ss = this.spreadsheet;
var sm = ss.sm;
var ds = ss.ds;
var drSelector = ss.dataRangeSelector;
var rpos = Ext.apply({}, sm.focusCell);
sm.fireEvent("formulaeditingchanged", false, true, true);
drSelector.popup(null, "", function(v, dataRange) {
var data = "=" + name + "(" + v + ")";
ss.editor.resize2FitText(data, rpos);
ds.trace(feyaSoft.ss.lang.action_apply_function(ds
.getNameFromPos(rpos)));
sm.fireEvent("formulaeditingchanged", true, false, true);
sm.fireEvent("renderborder");
ss.updateStatus(rpos.x, rpos.y);
}, this, "local");
},
onSumFn : function() {
this.applyFunction("sum");
},
onAverageFn : function() {
this.applyFunction("average");
},
onCountFn : function() {
this.applyFunction("count");
},
onMinFn : function() {
this.applyFunction("min");
},
onMaxFn : function() {
this.applyFunction("max");
},
onOtherFn : function() {
},
onBoldFn : function(btn) {
if (btn && btn.el.hasClass("x-btn-pressed")) {
btn.el.removeClass("x-btn-pressed");
this.applyAttribute([["b", ""]]);
} else {
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["b", ""]]);
}
},
onItalicFn : function(btn) {
if (btn && btn.el.hasClass("x-btn-pressed")) {
btn.el.removeClass("x-btn-pressed");
this.applyAttribute([["i", ""]]);
} else {
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["i", ""]]);
}
},
onUnderlineFn : function(btn) {
if (btn && btn.el.hasClass("x-btn-pressed")) {
btn.el.removeClass("x-btn-pressed");
this.applyAttribute([["u", ""]]);
} else {
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["u", ""]]);
}
},
onStrikeFn : function(btn) {
if (btn && btn.el.hasClass("x-btn-pressed")) {
btn.el.removeClass("x-btn-pressed");
this.applyAttribute([["s", ""]]);
} else {
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["s", ""]]);
}
},
applyBgStyle : function(sn, sv) {
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minPos = rs.minPos, maxPos = rs.maxPos;
var minx = minPos.x, miny = minPos.y, maxx = maxPos.x, maxy = maxPos.y;
if ("transparent" == sv) {
sv = "";
}
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [["bg", sv]]);
for (var y = fr.col.start; y <= fr.col.end; y++) {
for (var x = fr.row.start; x <= fr.row.end; x++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
for (var x = sr.row.start; x <= sr.row.end; x++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
}
for (var y = sr.col.start; y <= sr.col.end; y++) {
for (var x = fr.row.start; x <= fr.row.end; x++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
for (var x = sr.row.start; x <= sr.row.end; x++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
}
} else if (0 == minx && 0 == maxx) {
for (var y = miny; y <= maxy; y++) {
ds.fireEvent("colattributechange", y, [["bg", sv]]);
for (var x = fr.row.start; x <= fr.row.end; x++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
for (var x = sr.row.start; x <= sr.row.end; x++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
}
} else if (0 == miny && 0 == maxy) {
for (var x = minx; x <= maxx; x++) {
ds.fireEvent("rowattributechange", x, [["bg", sv]]);
for (var y = fr.col.start; y <= fr.col.end; y++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
for (var y = sr.col.start; y <= sr.col.end; y++) {
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
}
} else {
for (var x = minx; x <= maxx; x++) {
for (var y = miny; y <= maxy; y++) {
ds.fireEvent("attributechange", x, y, [["bg", sv]]);
var tds = ss.getCellTdHEls(x, y);
var bg = ds.getCell(x, y).bg;
if (tds) {
for (var i = 0, len = tds.length; i < len; i++) {
var td = tds[i];
td.style.backgroundColor = bg;
}
}
}
}
}
ds.trace(feyaSoft.ss.lang.action_change_background);
sm.transferFocus();
},
getStyle : function(style, sn) {
var m;
if ("text-align" == sn) {
m = style.match(/text-align:[^;]+;/);
} else if ("color" == sn) {
m = style.match(/color:[^;]+;/);
} else if ("font-family" == sn) {
m = style.match(/font-family:[^;]+;/);
} else if ("font-size" == sn) {
m = style.match(/font-size:[^;]+;/);
} else if ("background-color" == sn) {
m = style.match(/background-color:[^;]+;/);
}
return m;
},
getStyleValue : function(style, sn) {
var str = this.getStyle(style, sn);
if (str) {
var parts = str.toString().split(":");
return parts[1].split(";")[0];
}
},
updateStyle : function(style, sn, sv) {
var str = sn + ":" + sv + ";";
if (style && "" !== style) {
var m, n, str1 = "";
m = this.getStyle(style, sn);
if ("font-size" == sn) {
n = style.match(/line-height:[^;]+;/);
str1 = "line-height:" + sv + ";";
}
if (m) {
var s = style.replace(m, str);
if (n) {
s = s.replace(n, str1);
}
return s;
} else {
return style + str + str1;
}
} else {
var str1 = "";
if ("font-size" == sn) {
str1 = "line-height:" + sv + ";";
}
return str + str1;
}
},
applyAttribute : function(pairs, skipTrace) {
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minPos = rs.minPos, maxPos = rs.maxPos;
var minx = minPos.x, miny = minPos.y, maxx = maxPos.x, maxy = maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", pairs);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
for (var y = miny; y <= maxy; y++) {
ds.fireEvent("colattributechange", y, pairs);
for (var x = fr.row.start; x <= fr.row.end; x++) {
var El = ss.getCellEl(x, y);
if (El) {
var obj = ds.getCell(x, y);
Ext.apply(obj, {
x : x,
y : y
});
ss.refreshCell(obj);
}
}
for (var x = sr.row.start; x <= sr.row.end; x++) {
var El = ss.getCellEl(x, y);
if (El) {
var obj = ds.getCell(x, y);
Ext.apply(obj, {
x : x,
y : y
});
ss.refreshCell(obj);
}
}
}
} else if (0 == miny && 0 == maxy) {
for (var x = minx; x <= maxx; x++) {
ds.fireEvent("rowattributechange", x, pairs);
for (var y = fr.col.start; y <= fr.col.end; y++) {
var El = ss.getCellEl(x, y);
if (El) {
var obj = ds.getCell(x, y);
Ext.apply(obj, {
x : x,
y : y
});
ss.refreshCell(obj);
}
}
for (var y = sr.col.start; y <= sr.col.end; y++) {
var El = ss.getCellEl(x, y);
if (El) {
var obj = ds.getCell(x, y);
Ext.apply(obj, {
x : x,
y : y
});
ss.refreshCell(obj);
}
}
}
} else {
for (var x = minx; x <= maxx; x++) {
for (var y = miny; y <= maxy; y++) {
ds.fireEvent("attributechange", x, y, pairs);
var El = ss.getCellEl(x, y);
if (El) {
var obj = ds.getCell(x, y);
Ext.apply(obj, {
x : x,
y : y
});
ss.refreshCell(obj);
}
}
}
}
if (!skipTrace) {
ds.trace(feyaSoft.ss.lang.action_change_attribute);
}
sm.transferFocus();
},
clearAlginPress : function(flag) {
if (true === flag) {
this.alignTopBtn.removeClass("x-btn-pressed");
this.alignMiddleBtn.removeClass("x-btn-pressed");
this.alignBottomBtn.removeClass("x-btn-pressed");
} else {
this.alignLeftBtn.removeClass("x-btn-pressed");
this.alignCenterBtn.removeClass("x-btn-pressed");
this.alignRightBtn.removeClass("x-btn-pressed");
}
},
onAlignLeftFn : function(btn) {
this.clearAlginPress();
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["text-align", "text-align:left;"]]);
},
onAlignCenterFn : function(btn) {
this.clearAlginPress();
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["text-align", "text-align:center;"]]);
},
onAlignRightFn : function(btn) {
this.clearAlginPress();
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["text-align", "text-align:right;"]]);
},
onAlignMiddleFn : function(btn) {
this.clearAlginPress(true);
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["align", "middle"]]);
},
onAlignTopFn : function(btn) {
this.clearAlginPress(true);
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["align", "top"]]);
},
onAlignBottomFn : function(btn) {
this.clearAlginPress(true);
btn.el.addClass("x-btn-pressed");
this.applyAttribute([["align", "bottom"]]);
},
sortSelection : function(dir) {
var lan_com = feyaSoft.lang.common;
var lan_ss = feyaSoft.ss.lang;
var ss = this.spreadsheet;
ss.resetCutStatus();
var ds = ss.ds;
var sm = ss.sm;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
if (!(minx == maxx && miny == maxy && 0 != minx)
&& !(0 == miny && 0 == maxy)) {
var flag = ds.sortRange(minx, miny, maxx, maxy, dir);
if (!flag) {
Ext.Msg.show({
title : lan_com.notice,
msg : lan_ss.canNotSortMerge,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.INFO
});
return;
}
ss.renderRange(ss.freezeRange, ss.showRange, null, true);
ds.trace(1 == dir
? feyaSoft.ss.lang.action_sort_asc
: feyaSoft.ss.lang.action_sort_desc);
}
sm.transferFocus();
},
onAscFn : function() {
this.sortSelection(1);
},
onDescFn : function() {
this.sortSelection(-1);
},
onCloseFn : function() {
var ss = this.spreadsheet;
ss.scontainer.fireEvent("closewindow");
var sm = ss.sm;
},
onBgTransparentFn : function() {
var El = this.bgColorBtn.getEl();
var bEl = El.child("button");
if (bEl) {
bEl.setStyle("border-bottom-color", "transparent");
this.applyBgStyle("border-bottom-color", "transparent");
}
},
onBgColorFn : function() {
var El = this.bgColorBtn.getEl();
var bEl = El.child("button");
if (bEl) {
var color = bEl.getStyle("border-bottom-color");
this.applyBgStyle("background-color", color);
}
},
onBgColorSelectFn : function(cp, color) {
var El = this.bgColorBtn.getEl();
var bEl = El.child("button");
if (bEl) {
bEl.setStyle("border-bottom", "4px solid #" + color);
this.applyBgStyle("background-color", "#" + color);
}
this.bgColorMenu.hide();
},
onFontColorFn : function() {
var El = this.fontColorBtn.getEl();
var bEl = El.child("button");
if (bEl) {
var color = bEl.getStyle("border-bottom-color");
this.applyAttribute([["color", "color:" + color + ";"]]);
}
},
onFontColorSelectFn : function(cp, color) {
var El = this.fontColorBtn.getEl();
var bEl = El.child("button");
if (bEl) {
bEl.setStyle("border-bottom", "4px solid #" + color);
this.applyAttribute([["color", "color:#" + color + ";"]]);
}
this.fontColorMenu.hide();
},
onFontFamilySelectFn : function(combo, rd, index) {
var ff = rd.data.id;
this.applyAttribute([["font-family", "font-family:" + ff + ";"]]);
},
onFontSizeSelectFn : function(combo, rd, index) {
var fs = rd.data.id;
this.applyAttribute([["font-size",
"font-size:" + fs + ";line-height:" + fs + ";"]], true);
var ss = this.spreadsheet;
var editor = ss.editor, sm = ss.sm, ds = ss.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
for (var i = minx; i < maxx; i++) {
editor.fitRow(i, true, true);
}
editor.fitRow(maxx, true);
ds.trace(feyaSoft.ss.lang.action_change_attribute);
},
onBorderButtonFn : function(btn) {
var iconCls = btn.iconCls;
this.borderMenu.items.each(function(it) {
if (iconCls == it.iconCls) {
it.handler.call(this, it);
return;
}
}, this);
},
onBorderAllFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [
["br", "x-spreadsheet-right-black"],
["bb", "x-spreadsheet-bottom-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
ds.fireEvent("colattributechange", miny - 1, [["br",
"x-spreadsheet-right-black"]]);
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, [
["br", "x-spreadsheet-right-black"],
["bb", "x-spreadsheet-bottom-black"]]);
}
ss.renderRange(fr, sr, null, true);
} else if (0 == miny && 0 == maxy) {
ds.fireEvent("rowattributechange", minx - 1, [["bb",
"x-spreadsheet-bottom-black"]]);
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [
["br", "x-spreadsheet-right-black"],
["bb", "x-spreadsheet-bottom-black"]]);
}
ss.renderRange(fr, sr, null, true);
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var wrap = null;
if (rows[i] && rows[i][j]) {
wrap = rows[i][j].wrap;
}
if (i == minx && 1 < i) {
var x = i - 1, y = j;
ds.fireEvent("attributechange", x, y, [["bb",
"x-spreadsheet-bottom-black"]]);
}
if (j == miny && 1 < j) {
var x = i, y = j - 1;
ds.fireEvent("attributechange", x, y, [["br",
"x-spreadsheet-right-black"]]);
}
if (wrap) {
var br = null, bb = null;
if (j == wrap.maxy) {
br = "x-spreadsheet-right-black";
}
if (i == wrap.maxx) {
bb = "x-spreadsheet-bottom-black";
}
var pairs = [];
if (br) {
pairs.push(["br", br]);
}
if (bb) {
pairs.push(["bb", bb]);
}
if (0 < pairs.length) {
ds.fireEvent("attributechange", i, j, pairs);
}
} else {
ds.fireEvent("attributechange", i, j, [
["br", "x-spreadsheet-right-black"],
["bb", "x-spreadsheet-bottom-black"]]);
}
}
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_all);
sm.transferFocus();
},
onBorderOutsideFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
} else if (0 == minx && 0 == maxx) {
} else if (0 == miny && 0 == maxy) {
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var wrap = null;
if (rows[i] && rows[i][j]) {
wrap = rows[i][j].wrap;
}
if (i == minx && 1 < i) {
var x = i - 1, y = j;
ds.fireEvent("attributechange", x, y, [["bb",
"x-spreadsheet-bottom-black"]]);
}
if (j == miny && 1 < j) {
var x = i, y = j - 1;
ds.fireEvent("attributechange", x, y, [["br",
"x-spreadsheet-right-black"]]);
}
if (wrap) {
var br = null, bb = null;
if (j == wrap.maxy) {
if (j == maxy) {
br = "x-spreadsheet-right-black";
}
}
if (i == wrap.maxx) {
if (i == maxx) {
bb = "x-spreadsheet-bottom-black";
}
}
var pairs = [];
if (br) {
pairs.push(["br", br]);
}
if (bb) {
pairs.push(["bb", bb]);
}
if (0 < pairs.length) {
ds.fireEvent("attributechange", i, j, pairs);
}
} else {
var br = null, bb = null;
if (j == maxy) {
br = "x-spreadsheet-right-black";
}
if (i == maxx) {
bb = "x-spreadsheet-bottom-black";
}
var pairs = [];
if (br) {
pairs.push(["br", br]);
}
if (bb) {
pairs.push(["bb", bb]);
}
if (0 < pairs.length) {
ds.fireEvent("attributechange", i, j, pairs);
}
}
}
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_outside);
sm.transferFocus();
},
onBorderInsideFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
} else if (0 == minx && 0 == maxx) {
} else if (0 == miny && 0 == maxy) {
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var wrap = null;
if (rows[i] && rows[i][j]) {
wrap = rows[i][j].wrap;
}
if (wrap) {
var br = null, bb = null;
if (j == wrap.maxy) {
if (j != maxy) {
br = "x-spreadsheet-right-black";
}
}
if (i == wrap.maxx) {
if (i != maxx) {
bb = "x-spreadsheet-bottom-black";
}
}
var pairs = [];
if (br) {
pairs.push(["br", br]);
}
if (bb) {
pairs.push(["bb", bb]);
}
if (0 < pairs.length) {
ds.fireEvent("attributechange", i, j, pairs);
}
} else {
var br = null, bb = null;
if (j != maxy) {
br = "x-spreadsheet-right-black";
}
if (i != maxx) {
bb = "x-spreadsheet-bottom-black";
}
var pairs = [];
if (br) {
pairs.push(["br", br]);
}
if (bb) {
pairs.push(["bb", bb]);
}
if (0 < pairs.length) {
ds.fireEvent("attributechange", i, j, pairs);
}
}
}
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_in);
sm.transferFocus();
},
onBorderNoneFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [["br", ""], ["bb", ""]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
ds.fireEvent("colattributechange", miny - 1, [["br", ""]]);
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, [["br", ""], ["bb", ""]]);
}
ss.renderRange(fr, sr, null, true);
} else if (0 == miny && 0 == maxy) {
ds.fireEvent("rowattributechange", minx - 1, [["bb", ""]]);
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [["br", ""], ["bb", ""]]);
}
ss.renderRange(fr, sr, null, true);
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var wrap = null;
if (rows[i] && rows[i][j]) {
wrap = rows[i][j].wrap;
}
if (i == minx && 1 < i && fr.row.end != i - 1) {
var x = i - 1, y = j;
ds.fireEvent("attributechange", x, y, [["bb",
"x-spreadsheet-bottom-silver"]]);
}
if (j == miny && 1 < j && fr.col.end != j - 1) {
var x = i, y = j - 1;
ds.fireEvent("attributechange", x, y, [["br",
"x-spreadsheet-right-silver"]]);
}
if (wrap) {
var br = null, bb = null;
if (j == wrap.maxy && j != fr.col.end) {
br = "x-spreadsheet-right-silver";
}
if (i == wrap.maxx && i != fr.row.end) {
bb = "x-spreadsheet-bottom-silver";
}
var pairs = [];
if (br) {
pairs.push(["br", br]);
}
if (bb) {
pairs.push(["bb", bb]);
}
if (0 < pairs.length) {
ds.fireEvent("attributechange", i, j, pairs);
}
} else {
ds.fireEvent("attributechange", i, j, [
["br", "x-spreadsheet-right-silver"],
["bb", "x-spreadsheet-bottom-silver"]]);
}
}
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_none);
sm.transferFocus();
},
onBorderLeftFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [["br",
"x-spreadsheet-right-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
ds.fireEvent("colattributechange", miny - 1, [["br",
"x-spreadsheet-right-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == miny && 0 == maxy) {
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= miny; j++) {
var x = i, y = miny - 1;
ds.fireEvent("attributechange", x, y, [["br",
"x-spreadsheet-right-black"]]);
}
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_left);
sm.transferFocus();
},
onBorderTopFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [["bb",
"x-spreadsheet-bottom-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
} else if (0 == miny && 0 == maxy) {
ds.fireEvent("rowattributechange", minx - 1, [["bb",
"x-spreadsheet-bottom-black"]]);
ss.renderRange(fr, sr, null, true);
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
var x = minx - 1, y = j;
ds.fireEvent("attributechange", x, y, [["bb",
"x-spreadsheet-bottom-black"]]);
}
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_top);
sm.transferFocus();
},
onBorderRightFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [["br",
"x-spreadsheet-right-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
ds.fireEvent("colattributechange", maxy, [["br",
"x-spreadsheet-right-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == miny && 0 == maxy) {
} else {
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("attributechange", i, maxy, [["br",
"x-spreadsheet-right-black"]]);
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_right);
sm.transferFocus();
},
onBorderBottomFn : function(mBtn) {
this.borderBtn.setIconClass(mBtn.iconCls);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var sm = ss.sm;
var ds = ss.ds;
var rows = ds.data.rows;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == maxx && 0 == miny && 0 == maxy) {
ds.fireEvent("wholeattributechange", [["bb",
"x-spreadsheet-bottom-black"]]);
ss.renderRange(fr, sr, null, true);
} else if (0 == minx && 0 == maxx) {
} else if (0 == miny && 0 == maxy) {
ds.fireEvent("rowattributechange", maxx, [["bb",
"x-spreadsheet-bottom-black"]]);
ss.renderRange(fr, sr, null, true);
} else {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("attributechange", maxx, j, [["bb",
"x-spreadsheet-bottom-black"]]);
}
ss.renderRange(fr, sr, null, true);
}
ds.trace(feyaSoft.ss.lang.action_border_bottom);
sm.transferFocus();
},
onInsertRowAboveFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
ds.insertRow(sm.focusCell.x, "above");
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.selectedStart.x++;
sm.selectedEnd.x++;
sm.focusCell.x++;
sm.fireEvent("renderborder");
ds.trace(feyaSoft.ss.lang.action_insert_row_above(sm.focusCell.x));
sm.transferFocus();
},
onInsertRowBelowFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var x = sm.focusCell.x, y = sm.focusCell.y;
ds.insertRow(x);
ss.renderRange(ss.freezeRange, ss.showRange, true);
if (ds.isWraped(x, y)) {
sm.selectedEnd.x++;
}
sm.fireEvent("renderborder");
ds.trace(feyaSoft.ss.lang.action_insert_row_below(sm.focusCell.x));
sm.transferFocus();
},
onInsertColBeforeFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
ds.insertCol(sm.focusCell.y, "before");
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.selectedStart.y++;
sm.selectedEnd.y++;
sm.focusCell.y++;
sm.fireEvent("renderborder");
ds.trace(feyaSoft.ss.lang.action_insert_col_before(ds
.getLetter(sm.focusCell.y)));
sm.transferFocus();
},
onInsertColAfterFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var x = sm.focusCell.x, y = sm.focusCell.y;
ds.insertCol(y);
ss.renderRange(ss.freezeRange, ss.showRange, true);
if (ds.isWraped(x, y)) {
sm.selectedEnd.y++;
}
sm.fireEvent("renderborder");
ds.trace(feyaSoft.ss.lang.action_insert_col_after(ds
.getLetter(sm.focusCell.y)));
sm.transferFocus();
},
onDeleteFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm;
if (0 == sm.selectedStart.x) {
this.onDeleteColFn();
} else {
this.onDeleteRowFn();
}
},
onDeleteRowFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var x = rt.minPos.x;
var span = rt.maxPos.x - x + 1;
ds.deleteRow(x, span);
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.fireEvent("renderborder");
ds.trace(feyaSoft.ss.lang.action_delete_row(x));
sm.transferFocus();
},
onDeleteColFn : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
var sm = ss.sm;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var y = rt.minPos.y;
var span = rt.maxPos.y - y + 1;
ds.deleteCol(y, span);
ss.renderRange(ss.freezeRange, ss.showRange, true);
sm.fireEvent("renderborder");
ds.trace(feyaSoft.ss.lang.action_delete_col(ds.getLetter(y)));
sm.transferFocus();
},
onCombineFn : function(btn) {
var ss = this.spreadsheet;
var sm = ss.sm;
if (false == sm.isSingleSelected()) {
if (btn && btn.el.hasClass("x-btn-pressed")) {
btn.el.removeClass("x-btn-pressed");
ss.contextmenu.onSplitFn();
} else {
btn.el.addClass("x-btn-pressed");
ss.contextmenu.onCombineFn();
}
}
sm.transferFocus();
},
onWordWrapFn : function(btn) {
var arr;
if (btn.pressed) {
arr = [["word-wrap", "word-wrap:break-word;"]];
} else {
arr = [["word-wrap", ""]];
}
this.applyAttribute(arr, true);
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var rs = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rs.minPos.x, miny = rs.minPos.y, maxx = rs.maxPos.x, maxy = rs.maxPos.y;
for (var i = minx; i < maxx; i++) {
ss.editor.fitRow(i, true, true);
}
ss.editor.fitRow(maxx, true);
ds.trace(feyaSoft.ss.lang.action_change_attribute);
},
onInsertChartFn : function() {
var ss = this.spreadsheet;
ss.chartSelector.popup();
},
onGridLineFn : function() {
if ("icon_border_hide" == this.gridLineBtn.iconCls) {
this.gridLineBtn.setIconClass("icon_border_show");
this.gridLineBtn.setText(feyaSoft.ss.lang.showGridLine);
Ext.util.CSS.updateRule(".x-spreadsheet-bottom-silver",
"border-bottom", "1px solid transparent");
Ext.util.CSS.updateRule(".x-spreadsheet-right-silver",
"border-right", "1px solid transparent");
} else {
this.gridLineBtn.setIconClass("icon_border_hide");
this.gridLineBtn.setText(feyaSoft.ss.lang.hideGridLine);
Ext.util.CSS.updateRule(".x-spreadsheet-bottom-silver",
"border-bottom", "1px solid silver");
Ext.util.CSS.updateRule(".x-spreadsheet-right-silver",
"border-right", "1px solid silver");
}
var ss = this.spreadsheet;
var sm = ss.sm;
sm.transferFocus();
},
onBrushFn : function(btn) {
var ss = this.spreadsheet;
var sm = ss.sm;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
ss.setCutStatus(minx, miny, maxx, maxy);
var El = btn.getEl();
if (El.hasClass("x-btn-pressed")) {
this.stopBrushFormat(El);
} else {
El.addClass("x-btn-pressed");
sm.getBrushFormat();
}
},
stopBrushFormat : function(El) {
El = El || this.brushBtn.getEl();
var ss = this.spreadsheet;
var sm = ss.sm;
ss.resetCutStatus();
El.removeClass("x-btn-pressed");
sm.resetBrushFormat();
sm.transferFocus();
},
onInsertImageByLinkFn : function(tf, e) {
var key = e.getKey();
if (Ext.EventObject.ENTER == key) {
var ss = this.spreadsheet;
var ds = ss.ds, sm = ss.sm;
var v = tf.getValue();
if (Ext.ss.common.Helper.validateURL(v)) {
tf.reset();
var chartObj = ss.chartManager.addChart(undefined, {
url : v
}, "image");
this.insertPictureBtn.menu.hide();
var og = {
action : "add-chart",
type : "undo",
sheetIndex : ds.activeSheet,
chartId : chartObj.chartEl.id
};
var md = {
action : "add-chart",
type : "redo",
sheetIndex : ds.activeSheet,
chartId : chartObj.chartEl.id,
chartConfig : ss.chartManager.getChartConfig(
ds.activeSheet, chartObj.chartEl.id)
};
ds.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
ds.trace(feyaSoft.ss.lang.insertPicture);
ds.saveActiveSheet(true);
ds.saveExtraInfo();
} else {
tf
.markInvalid("The URL should be like \"http://www.xxx.com/xxx.xxx\"");
}
}
},
onInsertImageByOpenFn : function() {
new feyaSoft.ss.popup.ImagePopup(function(imagePath) {
var ss = this.spreadsheet;
var ds = ss.ds, sm = ss.sm;
var chartObj = ss.chartManager.addChart(undefined, {
url : imagePath
}, "image");
var og = {
action : "add-chart",
type : "undo",
sheetIndex : ds.activeSheet,
chartId : chartObj.chartEl.id
};
var md = {
action : "add-chart",
type : "redo",
sheetIndex : ds.activeSheet,
chartId : chartObj.chartEl.id,
chartConfig : ss.chartManager.getChartConfig(
ds.activeSheet, chartObj.chartEl.id)
};
ds.add2Modified({
focusCell : Ext.apply({}, sm.focusCell),
selectedStart : Ext.apply({}, sm.selectedStart),
selectedEnd : Ext.apply({}, sm.selectedEnd),
origin : og,
modified : md
}, true);
ds.trace(feyaSoft.ss.lang.insertPicture);
ds.saveActiveSheet(true);
ds.saveExtraInfo();
}, this);
},
onInsertGadgetsFn : function() {
var ss = this.spreadsheet;
ss.addGadgetsWin.popup();
},
onInsertIncellImageByOpenFn : function() {
this.spreadsheet.contextmenu.onInsertIncellImageByOpenFn();
},
onInsertIncellImageByLinkFn : function(ta, e) {
this.spreadsheet.contextmenu.onInsertIncellImageByLinkFn(ta, e,
this.insertIncellImageBtn.menu);
},
onPrintFn : function() {
var file = this.getFile();
if (file && file.id) {
var ds = this.spreadsheet.ds;
var fn = function() {
var win = new Ext.ss.popup.PrintSettingWin({
fileId : file.id,
callback : function(url) {
var newWindow = window.open(url, "_blank");
newWindow.focus();
},
scope : this
});
};
var flag = ds.saveModifiedCache(null, function() {
fn.call(this);
}, this);
} else {
Ext.Msg.show({
title : feyaSoft.lang.common.notice,
msg : feyaSoft.lang.common.saveBeforeAction,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.WARNING
});
}
},
/**导出2007Excel*/
onExportExcel2007Fn : function() {
var ds = this.spreadsheet.ds;
var title=this.spreadsheet.scontainer.title;
title=title.split('<')[0];
window.location.href=basePath+'excel/DownLoadAsExcel.action?type=xlsx&title='+title;
},
/**导出Excel*/
onExportExcelFn : function() {
var ds = this.spreadsheet.ds;
var title=this.spreadsheet.scontainer.title;
title=title.split('<')[0];
window.location.href=basePath+'excel/DownLoadAsExcel.action?type=xls&title='+title;
/** Ext.Ajax.request({
timeout : 300000,
url : basePath+'excel/DownLoadAsExcel.action',
params : {
type:'xls'
},
success : function(response, options) {
// var jsonData=Ext.decode(response.responseText);
},
failure : function(response, options) {
},
scope : this
});**/
//alert('todo');
//this.save(null, true, null, null, null, true);
/**var ds = this.spreadsheet.ds;
var file = ds.getFile() || {};
var isTemp = file.isTemp;
var fn = function() {
var file = this.getFile();
if (file && file.id) {
document.location = feyaSoft.home.CONST.spreadSheetUrl.exportExcel
+ "?id=" + file.id;
} else {
Ext.Msg.show({
title : feyaSoft.lang.common.notice,
msg : feyaSoft.lang.common.saveBeforeAction,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.WARNING
});
}
};
var changed = ds.saveModifiedCache(null, function() {
if (isTemp) {
ds.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : ds.getModifiedData(0, 0)
});
}
fn.call(this);
}, this);
if (!changed) {
fn.call(this);
}**/
},
onExportPDFFn : function() {
var ds = this.spreadsheet.ds;
var title=this.spreadsheet.scontainer.title;
title=title.split('<')[0];
window.location.href=basePath+'excel/DownLoadAsPDF.action?title='+title;
/**var ds = this.spreadsheet.ds;
var file = ds.getFile() || {};
var isTemp = file.isTemp;
var fn = function() {
var file = this.getFile();
if (file && file.id) {
document.location = feyaSoft.home.CONST.spreadSheetUrl.exportPDF
+ "?id=" + file.id;
} else {
Ext.Msg.show({
title : feyaSoft.lang.common.notice,
msg : feyaSoft.lang.common.saveBeforeAction,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.WARNING
});
}
};
var changed = ds.saveModifiedCache(null, function() {
if (isTemp) {
ds.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : ds.getModifiedData(0, 0)
});
}
fn.call(this);
}, this);
if (!changed) {
fn.call(this);
}**/
},
onExportHTMLFn : function() {
var ds = this.spreadsheet.ds;
var file = ds.getFile() || {};
var isTemp = file.isTemp;
var fn = function() {
var file = this.getFile();
if (file && file.id) {
document.location = feyaSoft.home.CONST.spreadSheetUrl.exportPDF
+ "?printWay=html&id=" + file.id;
} else {
Ext.Msg.show({
title : feyaSoft.lang.common.notice,
msg : feyaSoft.lang.common.saveBeforeAction,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.WARNING
});
}
};
var changed = ds.saveModifiedCache(null, function() {
if (isTemp) {
ds.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : ds.getModifiedData(0, 0)
});
}
fn.call(this);
}, this);
if (!changed) {
fn.call(this);
}
},
onExportCSVFn : function() {
var ds = this.spreadsheet.ds;
var file = ds.getFile() || {};
var isTemp = file.isTemp;
var fn = function() {
var file = this.getFile();
if (file && file.id) {
document.location = feyaSoft.home.CONST.spreadSheetUrl.exportCSV
+ "?id=" + file.id;
} else {
Ext.Msg.show({
title : feyaSoft.lang.common.notice,
msg : feyaSoft.lang.common.saveBeforeAction,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.WARNING
});
}
};
var changed = ds.saveModifiedCache(null, function() {
if (isTemp) {
ds.put2ModifiedCache("createUpdate", {
x : 0,
y : 0,
data : ds.getModifiedData(0, 0)
});
}
fn.call(this);
}, this);
if (!changed) {
fn.call(this);
}
},
onImportExcelFn : function() {
feyaSoft.home.LoginCheck(function() {
new Ext.ss.popup.ImportFileWin({
parentView : this
});
}, this);
},
onFilterMenuShow : function() {
var ds = this.spreadsheet.ds;
if (ds.withFilter()) {
this.filterItem.setChecked(true);
} else {
this.filterItem.setChecked(false);
}
},
updatePress : function(ss, x, y) {
var ds = ss.ds;
var tb = this;
if (tb.isVisible()) {
var cell = ds.getCell(x, y);
var b = cell.b;
var i = cell.i;
var u = cell.u;
var s = cell.s;
var color = tb.getStyleValue(cell.color, "color") || "black";
var fontsize = tb.getStyleValue(cell['font-size'], "font-size")
|| "10pt";
var fontfamily = tb.getStyleValue(cell['font-family'],
"font-family")
|| "Arial";
var textalign = tb.getStyleValue(cell['text-align'], "text-align")
|| "left";
var bg = cell.bg;
var align = cell.align;
var wrap = cell.wrap;
var fm = cell.format, dateFm = cell.dateFormat;
if ("dollar" == fm || "money" == fm) {
var menu = tb.moneyBtn.menu;
var item = menu.items.get(0);
item.setChecked(true, true);
} else if ("rmb" == fm) {
var menu = tb.moneyBtn.menu;
var item = menu.items.get(1);
item.setChecked(true, true);
} else if ("pound" == fm) {
var menu = tb.moneyBtn.menu;
var item = menu.items.get(3);
item.setChecked(true, true);
} else if ("euro" == fm) {
var menu = tb.moneyBtn.menu;
var item = menu.items.get(2);
item.setChecked(true, true);
} else {
var menu = tb.moneyBtn.menu;
menu.items.each(function(it) {
if (it.checked) {
it.setChecked(false, true);
}
});
}
this.formatCombo.setValue(fm || "regular");
var dateItems = this.dateFormatMenu.items;
dateItems.each(function(it) {
if (dateFm == it.fm) {
it.setChecked(true, true);
return false;
} else {
it.setChecked(false, true);
}
});
tb.boldBtn.removeClass("x-btn-pressed");
tb.italicBtn.removeClass("x-btn-pressed");
tb.underlineBtn.removeClass("x-btn-pressed");
tb.strikeBtn.removeClass("x-btn-pressed");
if (b) {
tb.boldBtn.addClass("x-btn-pressed");
}
if (i) {
tb.italicBtn.addClass("x-btn-pressed");
}
if (u) {
tb.underlineBtn.addClass("x-btn-pressed");
}
if (s) {
tb.strikeBtn.addClass("x-btn-pressed");
}
tb.alignLeftBtn.removeClass("x-btn-pressed");
tb.alignCenterBtn.removeClass("x-btn-pressed");
tb.alignRightBtn.removeClass("x-btn-pressed");
if ("left" == textalign) {
tb.alignLeftBtn.addClass("x-btn-pressed");
} else if ("center" == textalign) {
tb.alignCenterBtn.addClass("x-btn-pressed");
} else if ("right" == textalign) {
tb.alignRightBtn.addClass("x-btn-pressed");
}
var El = tb.fontColorBtn.getEl();
if (El) {
var bEl = El.child("button");
bEl = bEl.child("div");
if (bEl) {
bEl.setStyle("background-color", color);
}
}
tb.fontSizeCombo.setValue(fontsize);
tb.fontFamilyCombo.setValue(fontfamily);
bg = bg || "transparent";
El = tb.bgColorBtn.getEl();
if (El) {
bEl = El.child("button");
bEl = bEl.child("div");
if (bEl) {
bEl.setStyle("background-color", bg);
}
}
tb.alignTopBtn.removeClass("x-btn-pressed");
tb.alignMiddleBtn.removeClass("x-btn-pressed");
tb.alignBottomBtn.removeClass("x-btn-pressed");
if (align) {
if ("top" == align) {
tb.alignTopBtn.addClass("x-btn-pressed");
}
if ("middle" == align) {
tb.alignMiddleBtn.addClass("x-btn-pressed");
}
if ("bottom" == align) {
tb.alignBottomBtn.addClass("x-btn-pressed");
}
} else {
tb.alignTopBtn.addClass("x-btn-pressed");
}
if (wrap) {
tb.combineBtn.addClass("x-btn-pressed");
} else {
tb.combineBtn.removeClass("x-btn-pressed");
}
if (cell['word-wrap']) {
tb.wordWrapBtn.toggle(true, true);
} else {
tb.wordWrapBtn.toggle(false, true);
}
}
},
onPublicReadOnlyFn : function() {
var lan_common = feyaSoft.lang.common;
var fileId = this.getFileId();
if (false == Ext.type(fileId)) {
Ext.Msg.show({
title : lan_common.hint,
msg : lan_common.save_before_public,
buttons : Ext.Msg.YESNO,
fn : function(bid, text) {
if ("yes" == bid) {
this.on("filesaved", function(file) {
this.popPublicLinkWin(file.id);
}, this, {
single : true
});
this.save();
}
},
scope : this
});
} else {
this.popPublicLinkWin(fileId);
}
},
popPublicLinkWin : function(fileId) {
var ss = this.spreadsheet;
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.documentUrl.loadPublicUrl,
params : {
id : fileId
},
success : function(response, options) {
var jsonData = Ext.decode(response.responseText);
if (jsonData.success == "true") {
ss.publicLinkWin.popup({
id : fileId,
link : jsonData.url,
isPublic : jsonData.isPublic,
sender : "ssPublic"
});
} else {
if (jsonData.info == "relogin") {
new feyaSoft.home.Login;
} else {
Ext.MessageBox.alert("Failed", jsonData.info);
}
}
ss.sm.transferFocus();
},
failure : function(response, options) {
},
scope : this
});
},
onPublicReadWriteFn : function() {
},
onShareFn : function() {
var lan_common = feyaSoft.lang.common;
if (false == Ext.type(this.getFileId())) {
Ext.Msg.show({
title : "Hint",
msg : lan_common.save_before_share,
buttons : Ext.Msg.YESNO,
fn : function(bid, text) {
if ("yes" == bid) {
this.on("filesaved", function(file) {
this.shareFile(file);
}, this, {
single : true
});
this.onSaveFn();
}
},
scope : this
});
} else {
this.shareFile(this.getFile());
}
},
shareFile : function(file) {
new feyaSoft.home.common.share.ShareWin({
fileId : file.id,
name : file.name,
myOwnerCt : this,
componentClass : "documentShareFile"
});
},
onSplitFn : function(btn) {
btn.toggle();
this.spreadsheet.contextmenu.onSplitGridFn();
var ss = this.spreadsheet;
ss.sm.transferFocus();
},
onSplitChangedFn : function(ss, fr, sr, ofr, osr) {
if (0 == fr.row.len && 0 == fr.col.len) {
this.splitBtn.toggle(false);
this.freezeBtn.enable();
} else {
this.splitBtn.toggle(true);
this.splitBtn.enable();
this.freezeBtn.disable();
}
},
onFreezeChangedFn : function(ss, fr, sr, ofr, osr) {
if (fr.row.start == fr.row.end && fr.col.start == fr.col.end
|| fr.row.end == 0 && fr.col.end == 0) {
this.splitBtn.enable();
} else {
this.splitBtn.disable();
}
ss.sm.transferFocus();
},
onClearAllFn : function() {
this.spreadsheet.contextmenu.onClearAllFn();
},
onClearContentFn : function() {
this.spreadsheet.contextmenu.onClearContentFn();
},
onRemoveFormatFn : function() {
this.spreadsheet.contextmenu.onRemoveFormatFn();
},
onFreezeFn : function(item) {
var lan_ss = feyaSoft.ss.lang;
var ss = this.spreadsheet;
var sm = ss.sm;
if (ss.isFreezed()) {
ss.CancelFreezer();
item.setText(lan_ss.freezeGrid);
} else {
var x = sm.focusCell.x;
var y = sm.focusCell.y;
if (ss.getCellHEls(x, y)) {
ss.MoveFreezer(x, y);
ss.ds.trace(lan_ss.freezeGrid);
} else {
var fr = ss.freezeRange, sr = ss.showRange;
x = sr.row.start + 1;
y = sr.col.start + 1;
if (0 != fr.row.len) {
x = fr.row.start + 1;
}
if (0 != fr.col.len) {
y = fr.col.start + 1;
}
ss.MoveFreezer(x, y);
}
item.setText(lan_ss.unfreezeGrid);
}
},
onFreezeRowFn : function() {
var lan_ss = feyaSoft.ss.lang;
this.fzItem.setText(lan_ss.unfreezeGrid);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var x = sr.row.start + 1, y = sr.col.start;
if (0 != fr.row.len) {
x = fr.row.start + 1;
}
if (0 != fr.col.len) {
y = fr.col.start;
}
ss.MoveFreezer(x, y);
ss.ds.trace(lan_ss.freeze_first_row);
},
onFreezeColFn : function() {
var lan_ss = feyaSoft.ss.lang;
this.fzItem.setText(lan_ss.unfreezeGrid);
var ss = this.spreadsheet;
var fr = ss.freezeRange, sr = ss.showRange;
var x = sr.row.start, y = sr.col.start + 1;
if (0 != fr.row.len) {
x = fr.row.start;
}
if (0 != fr.col.len) {
y = fr.col.start + 1;
}
ss.MoveFreezer(x, y);
ss.ds.trace(lan_ss.freeze_first_col);
},
onFreezeMenuShowFn : function() {
var lan_ss = feyaSoft.ss.lang;
var ss = this.spreadsheet;
if (ss.isFreezed()) {
this.fzItem.setText(lan_ss.unfreezeGrid);
} else {
this.fzItem.setText(lan_ss.freezeGrid);
}
},
afterRender : function() {
Ext.ss.Toolbar.superclass.afterRender.call(this);
this.createToolSwitch();
},
createToolSwitch : function() {
this.pos = this.tabPosition == "bottom" ? this.footer : this.header;
var tt = this.pos.insertFirst({
cls : "x-spreadsheet-swtich x-tool x-tool-toggle"
});
tt.addClassOnOver("x-tool-toggle-over");
tt.on("click", this.onSwtichFn, this);
this.toolSwitch = tt;
},
onSwtichFn : function() {
var El = this.getEl();
var collapsed = false;
if (El.hasClass("x-panel-collapsed")) {
El.removeClass("x-panel-collapsed");
El.setStyle("height", "");
} else {
El.setStyle("height", "24px");
El.addClass("x-panel-collapsed");
collapsed = true;
}
this.fireEvent("toolswitch", collapsed);
},
onFilterFn : function(item) {
var ss = this.spreadsheet;
if (!item.checked) {
ss.createFilterForSelection();
} else {
ss.cancelFilter();
}
},
onFormatSelect : function(cb, rd, index) {
var format = rd.data.id;
this.setFormatForSelection(format);
},
onMoneyFn : function() {
this.setFormatForSelection("money");
},
onRMBFn : function() {
this.setFormatForSelection("rmb");
},
onDollarFn : function() {
this.setFormatForSelection("dollar");
},
onPoundFn : function() {
this.setFormatForSelection("pound");
},
onEuroFn : function() {
this.setFormatForSelection("euro");
},
onPercentFn : function() {
this.setFormatForSelection("percent");
},
onCommaFn : function() {
this.setFormatForSelection("comma");
},
onDotMoveRightFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var focusCell = sm.focusCell;
var x = focusCell.x, y = focusCell.y;
var cell = ds.getCell(x, y), dotLen = 0;
if (cell) {
var digital = Number(cell.digital);
var format = Number(cell.format);
if ("" !== cell.digital && false != Ext.type(cell.digital)
&& Ext.isNumber(digital)) {
dotLen = digital;
} else if ("" !== cell.format && false != Ext.type(cell.format)
&& Ext.isNumber(format)) {
dotLen = format;
} else {
var data = Number(cell.data);
if (Ext.isNumber(data) || /[0-9\.\,\%]/gi.test(cell.data)) {
var str = cell.data.toString();
var parts = str.split(".");
if (str.indexOf("e") == -1 && 2 == parts.length) {
dotLen = parts[1].length;
}
}
}
}
if (0 < dotLen) {
dotLen--;
}
this.setDotLenForSelection(dotLen);
},
onDotMoveLeftFn : function() {
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var focusCell = sm.focusCell;
var x = focusCell.x, y = focusCell.y;
var cell = ds.getCell(x, y), dotLen = 0;
if (cell) {
var digital = Number(cell.digital);
var format = Number(cell.format);
if ("" !== cell.digital && false != Ext.type(cell.digital)
&& Ext.isNumber(digital)) {
dotLen = digital;
} else if ("" !== cell.format && false != Ext.type(cell.format)
&& Ext.isNumber(format)) {
dotLen = format;
} else {
var data = Number(cell.data);
if (Ext.isNumber(data) || /[0-9\.\,\%]/gi.test(cell.data)) {
var str = cell.data.toString();
var parts = str.split(".");
if (str.indexOf("e") == -1 && 2 == parts.length) {
dotLen = parts[1].length;
}
}
}
}
if (dotLen < ds.dotMaxLen) {
dotLen++;
}
this.setDotLenForSelection(dotLen);
},
setDotLenForSelection : function(dotLen) {
var isDigital = Ext.isNumber(dotLen);
var lan_ss = feyaSoft.ss.lang, str;
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
dotLen = dotLen.toString();
if (0 == minx && 0 == miny) {
if (isDigital) {
ds.fireEvent("wholeattributechange", [["digital", dotLen]]);
} else {
ds.fireEvent("wholeattributechange", [["format", dotLen]]);
}
} else if (0 == minx) {
for (var j = miny; j <= maxy; j++) {
if (isDigital) {
ds
.fireEvent("colattributechange", j, [["digital",
dotLen]]);
} else {
ds.fireEvent("colattributechange", j, [["format", dotLen]]);
}
}
} else if (0 == miny) {
var rs = ds.data.rowSetting;
for (var i = minx; i <= maxx; i++) {
if (isDigital) {
ds
.fireEvent("rowattributechange", i, [["digital",
dotLen]]);
} else {
ds.fireEvent("rowattributechange", i, [["format", dotLen]]);
}
}
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
if (isDigital) {
ds.fireEvent("attributechange", i, j, [["digital",
dotLen]]);
} else {
ds.fireEvent("attributechange", i, j, [["format",
dotLen]]);
}
}
}
}
ss.renderRange();
ds.trace(lan_ss.change_dot_len);
ss.sm.transferFocus();
},
setFormatForSelection : function(format) {
var lan_ss = feyaSoft.ss.lang, str;
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
var dateFormat = "";
if ("date" == format) {
dateFormat = ds.defaultDateFormat;
}
if (0 == minx && 0 == miny) {
ds.fireEvent("wholeattributechange", [["format", format],
["dateFormat", dateFormat]]);
str = lan_ss.wholeSheet;
} else if (0 == minx) {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, [["format", format],
["dateFormat", dateFormat]]);
}
str = miny != maxy ? lan_ss.column + miny + " : " + lan_ss.column
+ maxy : lan_ss.column + maxy;
} else if (0 == miny) {
var rs = ds.data.rowSetting;
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [["format", format],
["dateFormat", dateFormat]]);
}
str = minx != maxx
? lan_ss.row + minx + " : " + lan_ss.row + maxx
: lan_ss.row + minx;
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("attributechange", i, j, [["format", format],
["dateFormat", dateFormat]]);
}
}
str = ds.getLetter(miny) + minx + " : " + ds.getLetter(maxy) + maxx;
}
ss.renderRange();
ds.trace(lan_ss.changeFormat + " " + lan_ss['for'] + " " + str);
ss.fireEvent("updatefx", sm.focusCell.x, sm.focusCell.y);
this.updatePress(ss, sm.focusCell.x, sm.focusCell.y);
ss.sm.transferFocus();
},
onShieldFn : function() {
var file = this.getFile();
if (!file || !file.id) {
Ext.Msg.show({
title : feyaSoft.lang.common.notice,
msg : feyaSoft.lang.common.saveBeforeAction,
buttons : Ext.Msg.OK,
icon : Ext.MessageBox.WARNING
});
return;
}
var fileShield = file.fileShield;
var info = (fileShield == "yes"
? feyaSoft.lang.common.remove
: feyaSoft.lang.common.add)
+ " "
+ feyaSoft.lang.common.additionalAccess
+ " - "
+ file.name;
Ext.MessageBox.confirm(info, feyaSoft.lang.common.setAccessDesc
+ "
" + feyaSoft.lang.common.confirmProcess
+ " [ " + info + " ]", function(btn) {
if (btn == "yes") {
this.secureWin = new feyaSoft.home.common.SecureAuthWin(
{
authSuccessCallback : function() {
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.documentUrl.addRemove,
params : {
docId : file.id
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
file.fileShield = fileShield == "yes"
? "no"
: "yes";
Ext.Message
.msgStay(
feyaSoft.lang.common.ok,
feyaSoft.lang.common.saveChanges,
2000);
} else {
if (jsonData.info == "relogin") {
new feyaSoft.home.Login;
} else {
Ext.MessageBox
.alert(
feyaSoft.lang.common.error,
jsonData.info);
}
}
},
failure : function(result, request) {
Ext.MessageBox
.alert(
feyaSoft.lang.common.failed,
feyaSoft.lang.common.errorInternal);
},
scope : this
});
},
scope : this
});
this.secureWin.show();
}
}, this);
},
onRevisionFn : function() {
var file = this.getFile();
var readOnlyView = !FPROXY.isEditable(file);
if (!readOnlyView) {
if (FPROXY.isLockedForMe(file)) {
Ext.MessageBox.alert(feyaSoft.lang.common.failed,
feyaSoft.lang.lock.lockedBy + " [ " + file.lockedBy
+ " ]");
} else {
new feyaSoft.home.common.ListRevisionsWin({
revertURL : "spreadsheet/revert",
fileId : file.id,
exname : file.exname,
name : file.name,
myOwnerCt : this
});
}
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.failed,
feyaSoft.lang.lock.canViewOnly);
}
},
onLockFn : function(btn) {
var lanCom = feyaSoft.lang.common;
var lanLock = feyaSoft.lang.lock;
var file = this.getFile();
if (!file || !file.id) {
Ext.MessageBox.alert(lanCom.failed, lanCom.saveBeforeAction);
return;
}
if ("icon_lock32" == btn.iconCls) {
Ext.Msg.show({
title : lanLock.lockCheckTitle,
msg : lanLock.lockCheckMsg,
buttons : Ext.Msg.OKCANCEL,
fn : function(bid) {
if ("ok" == bid) {
FPROXY.lock({
params : {
id : file.id
},
successFn : function(response) {
file.lockedBy = "me";
file.isLockedBySelf = true;
this.fireEvent("lockchanged",
true, this);
Ext.Message.msgStay("Confirm",
lanLock.lockSuccessful,
2000);
},
scope : this
});
}
},
scope : this,
icon : Ext.MessageBox.QUESTION
});
} else {
Ext.Msg.show({
title : lanLock.unlockCheckTitle,
msg : lanLock.unlockCheckMsg,
buttons : Ext.Msg.OKCANCEL,
fn : function(bid) {
if ("ok" == bid) {
FPROXY.unlock({
params : {
id : file.id
},
successFn : function(response) {
delete file.lockedBy;
delete file.isLockedBySelf;
this.fireEvent("lockchanged", false,
this);
Ext.Message.msgStay(
feyaSoft.lang.common.confirm,
lanLock.unlockSuccessful, 2000);
},
scope : this
});
}
},
scope : this,
icon : Ext.MessageBox.QUESTION
});
}
},
updateToolbarStatus : function(status, toolbar) {
var lanCom = feyaSoft.lang.common;
var lanLock = feyaSoft.lang.lock;
var lockBtn = this.lockBtn;
var revisionBtn = this.revisionBtn;
this.spreadsheet.scontainer.fireEvent("changetitle");
var file = this.getFile();
if (FPROXY.isLocked(file)) {
lockBtn.setIconClass("icon_unlock32");
lockBtn.setText(lanLock.unlockFile);
} else {
lockBtn.setIconClass("icon_lock32");
lockBtn.setText(lanLock.lockFile);
}
if (FPROXY.canChangeLockStatus(file)) {
lockBtn.enable();
} else {
lockBtn.disable();
}
if (!FPROXY.isEditable(file) || FPROXY.isLockedForMe(file)) {
revisionBtn.disable();
} else {
revisionBtn.enable();
}
},
backToolbarNormal : function() {
var lockBtn = this.lockBtn;
var revisionBtn = this.revisionBtn;
lockBtn.setIconClass("icon_lock32");
lockBtn.setText(feyaSoft.lang.lock.lockFile);
lockBtn.enable();
revisionBtn.enable();
},
reload : function() {
this.openFile(this.getFileId());
},
getFile : function() {
return this.spreadsheet.file;
},
setFile : function(file) {
var ss = this.spreadsheet;
ss.file = file;
ss.ds.setSheets(file.sheets, file.extraInfo, file.activeSheet);
},
getFileId : function() {
var file = this.getFile();
if (file) {
return file.id;
}
},
setFileId : function(fileId) {
var file = this.getFile();
if (file) {
file.id = fileId;
} else {
this.setFile({
id : fileId
});
}
},
createEmptyFile : function(callback, scope) {
Ext.Ajax.request({
timeout : 300000,
url : this.createEmptyUrl,
params : {
createDefault : true
},
success : function(response, options) {
var jsonData = Ext.decode(response.responseText);
if (jsonData.success == "true") {
jsonData.isTemp = true;
if (callback) {
callback.call(scope, jsonData);
}
}
},
scope : this
});
},
onHeaderFooter : function() {
this.fireEvent("editheadfoot", this);
},
initDateFormatMenu : function() {
var formats = ["Y-m-d", "Y/m/d", "M/d Y", "m/d/Y", "m-d-Y", "d/m/Y"];
var formatDetails = ["yyyy-MM-dd", "yyyy/MM/dd", "MMM/dd yyyy",
"MM/dd/yyyy", "MM-dd-yyyy", "dd/MM/yyyy"];
var items = [];
var today = new Date;
for (var i = 0, len = formats.length; i < len; i++) {
var fm = formats[i];
var fmDetail = formatDetails[i];
items.push({
text : today.format(fm)
+ " "
+ fmDetail + "",
fm : fm,
handler : this.selectDateFormat,
scope : this
});
}
this.dateFormatMenu = new Ext.menu.Menu({
defaults : {
group : Ext.id() + "-date",
checked : false
},
items : items
});
},
setDateFormatForSelection : function(fm) {
var lan_ss = feyaSoft.ss.lang, str;
var ss = this.spreadsheet;
var sm = ss.sm, ds = ss.ds;
var rt = sm.getMinMaxFromStartEnd(sm.selectedStart, sm.selectedEnd);
var minx = rt.minPos.x, maxx = rt.maxPos.x, miny = rt.minPos.y, maxy = rt.maxPos.y;
if (0 == minx && 0 == miny) {
ds.fireEvent("wholeattributechange", [["dateFormat", fm]]);
str = lan_ss.wholeSheet;
} else if (0 == minx) {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("colattributechange", j, [["dateFormat", fm]]);
}
str = miny != maxy ? lan_ss.column + miny + " : " + lan_ss.column
+ maxy : lan_ss.column + maxy;
} else if (0 == miny) {
var rs = ds.data.rowSetting;
for (var i = minx; i <= maxx; i++) {
ds.fireEvent("rowattributechange", i, [["dateFormat", fm]]);
}
str = minx != maxx
? lan_ss.row + minx + " : " + lan_ss.row + maxx
: lan_ss.row + minx;
} else {
for (var i = minx; i <= maxx; i++) {
for (var j = miny; j <= maxy; j++) {
ds.fireEvent("attributechange", i, j, [["dateFormat", fm]]);
}
}
str = ds.getLetter(miny) + minx + " : " + ds.getLetter(maxy) + maxx;
}
ss.renderRange();
sm.transferFocus();
},
onNameMgr : function() {
if (!this.nameRangeWin) {
this.nameRangeWin = new Ext.ss.popup.NameRangeWin({
title : feyaSoft.ss.lang.nameManager,
closeAction : "hide",
spreadsheet : this.spreadsheet,
width : 300,
height : 350
});
}
this.nameRangeWin.popup();
},
onInsertFormula : function() {
if (!this.insertFormulaWin) {
this.insertFormulaWin = new Ext.ss.popup.FormulaFunctionWin({
title : feyaSoft.ss.lang.insertFormula,
closeAction : "hide",
spreadsheet : this.spreadsheet
});
}
this.insertFormulaWin.popup();
},
selectDateFormat : function(btn) {
var fm = btn.fm;
this.setDateFormatForSelection(fm);
},
onConditionFormat : function() {
var ss = this.spreadsheet;
var ds = ss.ds;
if (!this.conditionFormatWin) {
this.conditionFormatWin = new Ext.ss.popup.ConditionFormatWin({
spreadsheet : ss
});
}
var conditionFormat = ds.data.conditionFormat;
this.conditionFormatWin.popup({
cfm : conditionFormat
});
},
onRestoreFn : function() {
var fileId = this.getFileId();
if (fileId == "fake-file") {
Ext.MessageBox.alert(feyaSoft.lang.common.hint,
feyaSoft.ss.lang.fileIsNotSaved);
return;
}
Ext.Ajax.request({
url : feyaSoft.home.CONST.spreadSheetUrl.listHistory,
params : {
fileId : fileId
},
success : function(response, options) {
var jsonData = Ext.decode(response.responseText);
if (jsonData.success == "true"
&& jsonData.savedAt != null) {
this.confirmRestore(jsonData.savedAt);
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.hint,
feyaSoft.ss.lang.fileIsNotSaved);
}
},
failure : function(result, request) {
Ext.MessageBox.alert(feyaSoft.lang.common.failed,
feyaSoft.lang.common.errorInternal);
},
scope : this
});
},
confirmRestore : function(savedAt) {
var fileId = this.getFileId();
Ext.Msg.show({
title : feyaSoft.lang.file.confirmRecover,
msg : "Revision file saved at " + savedAt + " "
+ feyaSoft.lang.file.confirmRecoverDesc,
width : 400,
buttons : Ext.MessageBox.OKCANCEL,
scope : this,
animEl : Ext.getBody(),
icon : Ext.MessageBox.INFO,
fn : function(btn, text) {
if (btn == "ok") {
Ext.Ajax.request({
url : feyaSoft.home.CONST.spreadSheetUrl.restore,
params : {
fileId : fileId
},
success : function(response, options) {
var jsonData = Ext
.decode(response.responseText);
if (jsonData.success == "true") {
if (jsonData.isBackup == "true") {
this.reload();
}
} else {
Ext.MessageBox
.alert(
feyaSoft.lang.common.failed,
feyaSoft.lang.common.errorInternal);
}
},
failure : function(result, request) {
Ext.MessageBox.alert(
feyaSoft.lang.common.failed,
feyaSoft.lang.common.errorInternal);
},
scope : this
});
}
}
});
}
});
Ext.ns("Ext.ss");
Ext.ss.SheetContainer = function(config) {
var lanCom = feyaSoft.lang.common;
config = config || {};
Ext.apply(this, config);
this.settings = this.settings || {};
this.ss = new Ext.ss.SpreadSheet({
region : "center",
file : this.file,
scontainer : this,
settings : this.settings
});
var hideEditingFlag = false, file = this.getFile();
if (file) {
hideEditingFlag = "MYSELF_REPLACE" !== file.sharing ? false : true;
}
var tbar = new Ext.ss.Toolbar({
region : "north",
border : false,
activeTab : 0,
autoHeight : true,
deferredRender : false,
hidden : this.settings.readOnlyView,
spreadsheet : this.ss
});
this.editingUserBtn = new Ext.Button({
hidden : hideEditingFlag,
iconCls : "group",
handler : this.toggleSidebar,
scope : this
});
this.editingCommentBtn = new Ext.Button({
hidden : hideEditingFlag,
iconCls : "message",
handler : this.toggleSidebar,
scope : this
});
var bbar = new Ext.ss.StatusBar({
text : "Ready",
iconCls : "x-status-valid",
items : ["-", this.editingUserBtn, "-", this.editingCommentBtn]
});
var ds = this.ss.ds;
var info = ds.sheets[ds.activeSheet].printHeadFoot || {
hidden : true
};
var o = this.getHeadFootHtml(info);
this.sheetHeader = new Ext.Container({
hidden : info.hidden,
cls : "x-spreadsheet-print-head",
html : o.headHtml,
region : "north",
height : 30
});
this.sheetFooter = new Ext.Container({
hidden : info.hidden,
cls : "x-spreadsheet-print-foot",
html : o.footHtml,
region : "south",
height : 30
});
this.sheet = Ext.isIE ? new Ext.Container({
region : "center",
layout : "fit",
items : [{
border : false,
layout : "border",
items : [this.sheetHeader, this.ss,
this.sheetFooter]
}]
}) : new Ext.Container({
region : "center",
layout : "border",
items : [this.sheetHeader, this.ss, this.sheetFooter]
});
this.editingUserPanel = new feyaSoft.home.common.document.EditingUserList({
iconCls : "group",
title : lanCom.currentEditingUser,
region : "north",
collapsible : true,
split : true,
height : 160,
maxHeight : 200,
frame : true,
autoScroll : true
});
this.commentPanel = new feyaSoft.home.common.document.EditingCommentList({
iconCls : "message",
title : lanCom.message,
region : "center",
collapsible : true
});
this.sidebar = new Ext.Panel({
hidden : hideEditingFlag,
style : "padding:5px 5px 5px 0px;",
border : false,
bodyStyle : "background:none;",
region : "east",
split : true,
collapsible : true,
collapsed : true,
collapseMode : "mini",
hideCollapseTool : true,
width : 250,
layout : "border",
items : [this.editingUserPanel, this.commentPanel]
});
this.toolbar = tbar;
Ext.ss.SheetContainer.superclass.constructor.call(this, {
layout : "border",
bbar : bbar,
items : [tbar, this.sheet, this.sidebar]
});
this.addEvents("closewindow", "changetitle");
this.ss.on("poststatus", this.onPostStatusFn, this);
this.on("destroy", this.onDestroyFn, this);
tbar.on("toolswitch", this.onToolSwitchFn, this);
tbar.on("newfile", this.hideEditingUserBtns, this);
tbar.on("editheadfoot", this.editHeadFoot, this);
tbar.on("showheadfoot", function() {
this.showHeadFoot();
}, this);
tbar.on("hideheadfoot", function() {
this.hideHeadFoot();
}, this);
this.editingUserPanel.on("pullingcomment",
this.commentPanel.pullingComment, this.commentPanel);
this.editingUserPanel.on("refreshfile", this.refreshFile, this);
this.editingUserPanel.on("rednumberchange", this.updateUserNo, this);
this.commentPanel.on("rednumberchange", this.updateMessageNo, this);
tbar.on("showeditinglist", this.showEditingUserBtns, this);
tbar.on("hideeditinglist", this.hideEditingUserBtns, this);
this.on("afterlayout", this._afterLayout, this, {
single : true
});
this.sidebar.on("expand", function() {
this.editingUserPanel.setHeight(160);
this.sidebar.doLayout();
}, this);
this.ss.ds.on("switchsheet", this.onSwitchSheet, this);
this.on("changetitle", function(title) {
title = FPROXY.prepareTitle(title, this.getFile());
this.setTitle(title);
}, this);
};
Ext.extend(Ext.ss.SheetContainer, Ext.Panel, {
hideEditingUserBtns : function() {
this.editingUserBtn.hide();
this.editingCommentBtn.hide();
this.hideEditingList();
},
showEditingUserBtns : function() {
this.editingUserBtn.show();
this.editingCommentBtn.show();
this.sidebar.show();
this.loadEditingUserComment.apply(this, arguments);
},
_afterLayout : function() {
if (this.sidebar.isVisible()) {
this.loadEditingUserComment(new Date);
}
},
toggleSidebar : function() {
if (this.sidebar.collapsed) {
this.sidebar.expand();
} else {
this.sidebar.collapse();
}
},
refreshFile : function(fileId) {
Ext.Msg.show({
title : feyaSoft.lang.common.confirm,
msg : feyaSoft.lang.common.refreshConfirm,
buttons : Ext.Msg.YESNO,
fn : function(bid) {
if ("yes" == bid) {
this.toolbar.openFile(fileId);
}
},
scope : this,
icon : Ext.MessageBox.QUESTION
});
},
showEditingList : function(timestamp) {
this.sidebar.show();
this.sidebar.expand();
this.doLayout();
this.loadEditingUserComment(timestamp);
},
hideEditingList : function() {
this.sidebar.hide();
this.sidebar.collapse();
},
loadEditingUserComment : function(timestamp) {
timestamp = timestamp || new Date;
var fileId = this.getFileId();
if (fileId) {
this.editingUserPanel.showUsers(fileId);
this.commentPanel.showTopics(fileId, 0, timestamp);
}
},
updateMessageNo : function(no, timestamp) {
this.editingCommentBtn.setText(" "
+ feyaSoft.lang.common.after + " " + timestamp.format("H:i:s"));
},
updateUserNo : function(no) {
this.editingUserBtn.setText("");
},
onToolSwitchFn : function() {
this.doLayout();
},
onPostStatusFn : function(o) {
this.getBottomToolbar().setStatus(o);
},
getFile : function() {
return this.ss.file;
},
getFileId : function() {
var file = this.getFile();
if (file) {
return file.id;
}
},
onDestroyFn : function(p) {
var ss = this.ss;
ss.removeCSS();
var hk = ss.hotkey;
if (hk) {
var lookupwin = hk.lookupwin;
if (lookupwin) {
lookupwin.close();
}
}
var sm = ss.sm;
if (sm) {
Ext.EventManager.un(document, "mousedown", sm.onMouseDownFn);
Ext.EventManager.un(document, "mousemove", sm.onMouseMoveFn);
Ext.EventManager.un(document, "mouseup", sm.onMouseUpFn);
}
},
getHeadFootHtml : function(info) {
var head = info.head || "", headLeft = info.headLeft || "", headRight = info.headRight
|| "";
var foot = info.foot || "", footLeft = info.footLeft || "", footRight = info.footRight
|| "";
var headHtml = "";
if (head || headLeft || headRight) {
headHtml = ""
+ ""
+ headLeft
+ " | "
+ ""
+ head
+ " | "
+ ""
+ headRight + " | " + " ";
}
var footHtml = "";
if (foot || footLeft || footRight) {
footHtml = ""
+ ""
+ footLeft
+ " | "
+ ""
+ foot
+ " | "
+ ""
+ footRight + " | " + " ";
}
return {
headHtml : headHtml,
footHtml : footHtml
};
},
setHeadFoot : function(info) {
var obj = this.getHeadFootHtml(info);
this.sheetHeader.getEl().update(obj.headHtml);
this.sheetFooter.getEl().update(obj.footHtml);
},
updateHeadFoot : function(info) {
this.setHeadFoot(info);
var ds = this.ss.ds;
ds.setPrintHeadFoot(info);
ds.saveActiveSheet(true);
ds.saveExtraInfo();
},
editHeadFoot : function() {
if (!this.headFootWin) {
this.headFootWin = new feyaSoft.word.popup.HeadFootWin({
width : 600,
autoHeight : true,
closeAction : "hide",
modal : true,
title : feyaSoft.word.lang.edit_head_foot,
applyCallback : function(info) {
info.hidden = false;
this.updateHeadFoot(info);
this.sheetHeader.show();
this.sheetFooter.show();
this.sheet.doLayout();
},
scope : this
});
}
var ds = this.ss.ds;
this.headFootWin.popup(ds.sheets[ds.activeSheet].printHeadFoot);
},
showHeadFoot : function(suspendUpdate) {
var ds = this.ss.ds;
var info = ds.sheets[ds.activeSheet].printHeadFoot;
if (info) {
info.hidden = false;
if (!suspendUpdate) {
this.updateHeadFoot(info);
}
this.sheetHeader.show();
this.sheetFooter.show();
this.sheet.doLayout();
} else {
Ext.Msg.alert(feyaSoft.lang.common.hint,
feyaSoft.ss.lang.noHeadFoot2Show);
}
},
hideHeadFoot : function(suspendUpdate) {
var ds = this.ss.ds;
var info = ds.sheets[ds.activeSheet].printHeadFoot;
if (info && !suspendUpdate) {
info.hidden = true;
this.updateHeadFoot(info);
}
this.sheetHeader.hide();
this.sheetFooter.hide();
this.sheet.doLayout();
},
onSwitchSheet : function(ds) {
var info = ds.sheets[ds.activeSheet].printHeadFoot;
if (!info || info.hidden) {
this.hideHeadFoot(true);
} else {
this.setHeadFoot(info);
this.showHeadFoot(true);
}
},
changeConfig : function(config) {
if (config) {
Ext.apply(this, config);
this.ss.changeConfig(config);
var hideEditingFlag = false, file = this.getFile();
if (file) {
hideEditingFlag = "MYSELF_REPLACE" !== file.sharing
? false
: true;
}
}
}
});
Ext.ns("feyaSoft.api");
feyaSoft.api.SpreadSheet = Ext.extend(Ext.ss.SheetContainer, {
constructor : function(config) {
Ext.QuickTips.init();
Ext.apply(this, config);
this.initSpreadSheet();
feyaSoft.api.SpreadSheet.superclass.constructor.call(this);
var sm = this.ss.sm, ds = this.ss.ds;
this.lastFocusCell = Ext.apply({
sheetIndex : ds.activeSheet
}, sm.focusCell);
sm.on("focuschange", this.onFocusChanged, this)
},
initSpreadSheet : function() {
this.publicView = document.getElementById("publicView")
.getAttribute("value");
this.editFileId = document.getElementById("editFileId")
.getAttribute("value");
this.url = feyaSoft.home.CONST.spreadSheetUrl.loadJson;
if (this.publicView && this.publicView == "yes") {
this.url = "ssPublic/loadPublicData"
}
this.loadFile()
},
loadFile : function(editFileId) {
if (false !== Ext.type(editFileId) && "" !== editFileId) {
this.editFileId = editFileId
}
var file = {
name : "New SpreadSheet",
description : '{"json":{"sheets":[{"name":"Sheet1","tabId":"8RVNYY3vXeM_","rows":{}},{"name":"Sheet2","tabId":"EegrAbLaKeY_","rows":{}},{"name":"Sheet3","tabId":"jfLiBKj/ex4_","rows":{}}],"activeSheet":0},"date":"2012-10-12 09:07:20"}',
subject : null,
isPublic : false,
isOwner : true,
sharing : "MYSELF_REPLACE",
permission : 2,
lockedBy : "",
isLockedBySelf : false,
extraInfo : null,
exname : "myXls",
updateDate : "2012-10-12 21:07:19"
};
file.data = Ext.decode(file.description);
if (file.data.json) {
Ext.apply(file, file.data.json)
}
file.isTemp = true;
file.isFake = true;
delete(file.description);
Ext.apply(this, {
file : file,
title : FPROXY.prepareTitle(null, file)
})
},
getCell : function(row, col, sheetIndex) {
return this.ss.getCell(row, col, sheetIndex)
},
save : function() {
this.toolbar.onSaveFn()
},
loadData2Sheet : function(json) {
if (Ext.isString(json)) {
json = Ext.decode(json)
}
var file = json;
if (file.description) {
file.data = Ext.decode(file.description);
delete(file.description);
if (file.data.json) {
Ext.apply(file, file.data.json)
}
} else {
if (file.data.json) {
Ext.apply(file, file.data.json)
}
}
if (false == Ext.type(file.permission)) {
file.permission = 2
}
file.isTemp = true;
file.isFake = true;
this.changeConfig({
file : file
})
},
autoSelectCompanyCell : function() {
this.ss.autoSelectCompanyCell()
},
loadById : function(fileId) {
this.toolbar.openFile(fileId)
},
getCompanyReferenceCell : function() {
return this.ss.getCompanyReferenceCell()
},
getCompanyReferenceCellRange : function() {
return this.ss.getCompanyReferenceCellRange()
},
updateCells : function(json, startPos) {
return this.ss.updateCells(json, startPos)
},
onFocusChanged : function(focusCell) {
var ds = this.ss.ds;
var lastFocusCell = this.lastFocusCell;
if (lastFocusCell) {
if (lastFocusCell.x !== focusCell.x
|| lastFocusCell.y !== focusCell.y
|| lastFocusCell.sheetIndex !== ds.activeSheet) {
this.fireEvent("focuscellchange", Ext.apply({}, lastFocusCell),
this)
}
}
this.lastFocusCell = Ext.apply({
sheetIndex : ds.activeSheet
}, focusCell)
}
});
Ext.ns("Ext.ss");
var sc;
var isbrowserClose = true;
Ext.onReady(function() {
document.body.parentNode.className += " ext-content-box ";
var ua = navigator.userAgent.toLowerCase(), check = function(r) {
return r.test(ua);
}, docMode = document.documentMode;
Ext.isIE9 = Ext.isIE
&& (check(/msie 9/) && docMode != 7 && docMode != 8 || docMode == 9);
Ext.isIE10 = Ext.isIE
&& (check(/msie 10/) && docMode != 7 && docMode != 8
&& docMode != 9 || docMode == 10);
Ext.BLANK_IMAGE_URL = "images/s.gif";
Ext.QuickTips.init();
var wait = new Ext.LoadMask(document.body, {
msg : "Welcome to Enterprise "
+ feyaSoft.lang.common.spreadsheet + " "
+ feyaSoft.lang.common.loadingData
});
wait.show();
var fn = function(config) {
sc = new Ext.ss.ViewerCon(config);
new Ext.Viewport({
border : false,
layout : "fit",
items : [sc]
});
wait.hide();
};
this.publicView = document.getElementById("publicView")
.getAttribute("value");
this.editFileId = document.getElementById("editFileId")
.getAttribute("value");
this.url = feyaSoft.home.CONST.spreadSheetUrl.loadJson;
if (this.publicView && this.publicView == "yes") {
this.url = feyaSoft.home.CONST.spreadSheetUrl.loadPublicData;
}
if (this.editFileId) {
var loadFn = function() {
Ext.Ajax.request({
timeout : 300000,
url : this.url,
params : {
id : this.editFileId
},
success : function(response, options) {
var jsonData = Ext.decode(response.responseText);
if (jsonData.success == "true") {
fn.call(this, {
file : jsonData,
title : FPROXY.prepareTitle(null,
jsonData)
});
} else {
Ext.MessageBox.alert(
feyaSoft.lang.common.error,
jsonData.info);
wait.hide();
}
},
scope : this
});
};
var me = this;
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.documentUrl.isShield,
params : {
id : this.editFileId,
publicView : this.publicView
},
success : function(response, options) {
var json = Ext.decode(response.responseText);
if ("no" == json.fileShield) {
loadFn.call(me);
} else {
wait.hide();
var secureWin = new feyaSoft.home.common.SecureAuthWin(
{
modal : true,
authSuccessCallback : function() {
loadFn.call(me);
},
scope : me
});
secureWin.show();
}
},
failure : function(response, options) {
wait.hide();
},
scope : me
});
} else if (this.useTmpFile) {
Ext.Ajax.request({
timeout : 300000,
url : this.url,
params : {
createDefault : true
},
success : function(response, options) {
var jsonData = Ext.decode(response.responseText);
if (jsonData.success == "true") {
jsonData.isTemp = true;
fn.call(this, {
file : jsonData,
title : FPROXY.prepareTitle(null,
jsonData)
});
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
jsonData.info);
wait.hide();
}
},
scope : this
});
} else {
var fakeJson = {
lockedBy : "",
exname : "myXls",
permission : 2,
isPublic : false,
updateDate : "2013-01-13 16:04:01",
id : "fake-file",
sheets : [{
name : "Sheet1",
tabId : "tab1",
rows : {}
}, {
name : "Sheet2",
tabId : "tab2",
rows : {}
}, {
name : "Sheet3",
tabId : "tab3",
rows : {}
}],
activeSheet : 0,
sharing : "MYSELF_REPLACE",
isLockedBySelf : false,
name : "新建电子表格",
isOwner : true,
extraInfo : null,
success : "true"
};
fakeJson.isTemp = true;
fakeJson.isFake = true;
fn.call(this, {
file : fakeJson,
title : FPROXY.prepareTitle(null, fakeJson)
});
}
});
Ext.ss.ViewerCon = function(config) {
Ext.apply(this, config);
var file = {};
if (config && config.file) {
file = config.file;
}
var flag = document.getElementById("flag").getAttribute("value");
if (flag && (flag == "true" || flag == true)) {
flag = true;
} else {
flag = this.readOnlyView || false;
}
Ext.ss.ViewerCon.superclass.constructor.call(this, {
id : file.id,
title : this.title || file.name || feyaSoft.lang.common.spreadsheet,
settings : {
readOnlyView : flag
},
iconCls : "excel",
tools : [{
id : "gear",
qtip : "Version " + Ext.ss.common.Mask.version,
handler : function() {
//new Ext.ss.popup.about.AboutSS;
},
scope : this
}, {
id : "help",
qtip : "Help",
handler : function() {
var newWindow = window
.open(
"http://www.usoftchina.com",
"_blank");
newWindow.focus();
},
scope : this
}],
file : file
});
this.on("closewindow", this.onCloseWindowFn, this);
};
Ext.extend(Ext.ss.ViewerCon, Ext.ss.SheetContainer, {
onBeforeCloseFn : function(p) {
var ss = this.ss;
var file = this.getFile() || {};
if (ss.isChanged() || file.isTemp && file.onceChanged) {
Ext.Msg.show({
title : feyaSoft.lang.common.confirm,
msg : feyaSoft.lang.common.fileChanged,
buttons : Ext.Msg.YESNOCANCEL,
fn : function(bid, text) {
var toolbar = ss.toolbar;
if ("yes" == bid) {
toolbar.save(true);
} else if ("no" == bid) {
isbrowserClose = false;
window.close();
}
},
scope : this,
icon : Ext.MessageBox.QUESTION
});
return false;
} else {
if (file.isTemp) {
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.documentUrl.deleteFile,
params : {
id : file.id
}
});
}
isbrowserClose = false;
window.close();
}
},
browserClose : function() {
var file = this.getFile() || {};
if (isbrowserClose) {
if (this.ss.isChanged() || file.isTemp && file.onceChanged) {
return feyaSoft.lang.common.save_before_open;
} else {
if (file && file.isTemp) {
if (file.onceChanged) {
return feyaSoft.lang.common.save_before_open;
}
var ds = this.ss.ds;
Ext.Ajax.request({
timeout : 300000,
url : feyaSoft.home.CONST.documentUrl.deleteFile,
params : {
id : file.id
}
});
}
}
}
}
});
window.onload = function() {
try {
if (!window.onbeforeunload) {
window.onbeforeunload = function() {
if (sc) {
return sc.browserClose();
}
};
}
} catch (e) {
}
};
Ext.ns("feyaSoft.home.common");
feyaSoft.home.common.AddContactWin = function(config) {
var searchInvitePanel = new feyaSoft.home.common.SearchInvitePanel(config
|| {});
feyaSoft.home.common.AddContactWin.superclass.constructor.call(this, {
title : feyaSoft.lang.file.addFriend,
width : 600,
height : 400,
shim : false,
constrainHeader : true,
modal : true,
border : true,
buttonAlign : "right",
layout : "fit",
items : [searchInvitePanel],
buttons : [{
text : feyaSoft.lang.common.cancel,
handler : this.cancelFn,
scope : this
}]
});
this.show()
};
Ext.extend(feyaSoft.home.common.AddContactWin, Ext.Window, {
cancelFn : function() {
this.close()
}
});
feyaSoft.home.common.SearchInvitePanel = Ext.extend(Ext.Panel, {
border : false,
autoScroll : true,
initComponent : function() {
var addFriendGroup = feyaSoft.lang.contact.addAsFriend;
this.addUrl = "contact/inviteContact";
if (this.groupId != null) {
addFriendGroup = feyaSoft.lang.group.invite2group;
this.addUrl = "locationUserPending/inviteFriend"
}
this.dataStore = new Ext.data.JsonStore({
url : "userAccess/listForContact",
fields : []
});
this.dataStore.baseParams = {
excludeMe : "yes",
start : 0,
limit : 10,
searchForFriend : true
};
this.inviteBtn = new Ext.Button({
text : '' + feyaSoft.lang.file.invite
+ "",
iconCls : "email",
handler : this.inviteFn,
minWidth : 80,
pressed : true,
scope : this
});
this.dataView = new feyaSoft.home.common.ContactGroupDataView({
store : this.dataStore,
emptyText : ''
+ feyaSoft.lang.contact.inviteMsg + " ",
applyText : addFriendGroup,
applyCallback : this.addFriend,
applyScope : this
});
this.tbar = [feyaSoft.lang.common.search, "",
new Ext.ux.form.SearchField({
autoShow : true,
store : this.dataStore,
width : 300,
emptyText : feyaSoft.lang.common.atleast4char
}), "->", this.inviteBtn];
this.bbar = new Ext.PagingToolbar({
pageSize : 10,
store : this.dataStore,
displayInfo : true,
displayMsg : "{0} - {1} of {2}"
});
this.items = [this.dataView];
feyaSoft.home.common.SearchInvitePanel.superclass.initComponent
.call(this);
this.reload()
},
addFriend : function(id) {
var params = {
userId : id
};
if (this.groupId != null) {
params = {
userId : id,
groupId : this.groupId
}
}
Ext.Ajax.request({
url : this.addUrl,
params : params,
success : function(result, request) {
var backObj = Ext.util.JSON.decode(result.responseText);
if (backObj.success == "true") {
Ext.Message.msgStay(feyaSoft.lang.common.confirm,
backObj.info, 2000);
this.reload()
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
backObj.info)
}
},
failure : function() {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Fail to connect!")
},
scope : this
})
},
reload : function() {
this.dataStore.load({
params : {
start : 0,
limit : 10
}
})
},
inviteFn : function() {
new feyaSoft.home.common.InviteWindow(this.initialConfig)
}
});
Ext.ns("feyaSoft.home.common");
feyaSoft.home.common.ContactGroupDataView = Ext.extend(Ext.DataView, {
cls : "x-publicgroup-list",
applyText : "Apply",
defaultLogo : feyaSoft.home.CONST.userLogo,
overClass : "x-view-over",
itemSelector : "div.x-group-preview",
singleSelect : true,
emptyText : ''
+ feyaSoft.lang.common.noResultDisplay + " ",
initComponent : function() {
var arr = [
'',
'',
" ",
'',
' ',
" | ",
"",
' {[values.firstname?values.firstname+" "+values.lastname:values.name]} ',
'{[values.description?values.description:"(',
feyaSoft.lang.contact.noDescriptionForUser, ')"]} '];
if (!this.hideApply) {
arr = arr.concat(['"])
}
arr = arr.concat([" | ", "
", " ", "",
'']);
this.tpl = new Ext.XTemplate(arr.join("")).compile();
feyaSoft.home.common.ContactGroupDataView.superclass.initComponent
.call(this);
this.on("click", this.onClickFn, this)
},
onClickFn : function(dv, index, node, e) {
var target = e.getTarget();
if ("apply" == target.name) {
if (this.applyCallback) {
var rd = dv.getRecord(node);
var id = rd.data.id || rd.data.contactUserId;
this.applyCallback.call(this.applyScope || this, id, rd, node,
dv)
}
}
}
});
Ext.ns("feyaSoft.home.common.share");
feyaSoft.home.common.share.SharePanel = function(config) {
this.myOwnerCt = null;
this.listUsers = new feyaSoft.home.common.share.ListUsers(config);
this.addUser = new feyaSoft.home.common.share.AddUser(config);
feyaSoft.home.common.share.SharePanel.superclass.constructor.call(this, {
title : feyaSoft.lang.file.peopleAccess,
border : false,
layout : "border",
items : [this.listUsers, this.addUser]
})
};
Ext.extend(feyaSoft.home.common.share.SharePanel, Ext.Panel, {
initLoad : function(config) {
this.myOwnerCt = config.myOwnerCt;
this.listUsers.initLoad(config);
this.addUser.initLoad(config)
},
existedUsers : function() {
return this.listUsers.existedUsers()
},
reloadList : function() {
this.listUsers.reload();
this.myOwnerCt.reload()
}
});
feyaSoft.home.common.share.ListUsers = function(config) {
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "documentShareFile";
if (config.componentClass) {
this.componentClass = config.componentClass
}
var selectBoxModel = new Ext.grid.CheckboxSelectionModel({
singleSelect : true
});
function viewEditPermission(val) {
var result = val;
if (val == 1) {
result = feyaSoft.lang.common.canView
} else {
if (val == 2) {
result = feyaSoft.lang.common.canEdit
} else {
if (val == 7) {
result = feyaSoft.lang.common.canEdit
}
}
}
return result
}
function infoAction(val, p) {
return ' '
}
var shareCM = new Ext.grid.ColumnModel([selectBoxModel, {
id : "id",
header : "Identify",
dataIndex : "id",
width : 100,
hidden : true
}, {
header : feyaSoft.lang.common.user,
width : 190,
dataIndex : "shareUser"
}, {
header : feyaSoft.lang.common.permission,
width : 110,
dataIndex : "permission",
scope : this,
renderer : viewEditPermission
}, {
header : feyaSoft.lang.common.date,
width : 140,
dataIndex : "updateDate",
renderer : Ext.util.Common.formatDateHour
}, {
header : "Info",
width : 40,
sortable : false,
dataIndex : "note",
renderer : infoAction
}]);
this.shareStore = new Ext.data.JsonStore({
url : this.componentClass + "/list",
remoteSort : true,
fields : []
});
this.deleteBtn = new Ext.Button({
disabled : true,
text : feyaSoft.lang.common.remove,
id : "delete-share-file-action",
tooltip : "Highlight the item and click this button to remove this shared user",
iconCls : "delete",
handler : function() {
var record = this.getSelectionModel().getSelected();
if (record.data.id == 0) {
Ext.MessageBox.alert(feyaSoft.lang.common.permissionDeny,
"Not allowed to delete Owner share")
} else {
this.deleteItem(record)
}
},
scope : this
});
this.changePermit = new Ext.Button({
disabled : true,
text : feyaSoft.lang.common.changePermission,
tooltip : "Highlight the item and click this button to change this shared user permission",
iconCls : "editItem",
handler : function() {
var record = this.getSelectionModel().getSelected();
if (record.data.id == 0) {
Ext.MessageBox.alert(feyaSoft.lang.common.permissionDeny,
"Not allowed to change owner permission")
} else {
this.changeItem(record)
}
},
scope : this
});
feyaSoft.home.common.share.ListUsers.superclass.constructor.call(this, {
region : "center",
border : true,
store : this.shareStore,
cm : shareCM,
sm : selectBoxModel,
width : 600,
height : 300,
viewConfig : {
forceFit : true
},
loadMask : {
msg : feyaSoft.lang.common.loadingData
},
tbar : [this.deleteBtn, this.changePermit],
autoScroll : true
});
selectBoxModel.on("selectionchange", this.onSelectionChangeFn, this)
};
Ext.extend(feyaSoft.home.common.share.ListUsers, Ext.grid.GridPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.shareStore.baseParams = {
fileId : this.fileId
};
this.shareStore.load()
},
existedUsers : function() {
return this.shareStore.data.items
},
onSelectionChangeFn : function(sm) {
if (0 < sm.getSelections().length) {
this.deleteBtn.enable();
if (this.componentClass == "myPhotoShare"
|| this.componentClass == "myPhotoFolderShare") {
this.changePermit.disable()
} else {
this.changePermit.enable()
}
} else {
this.deleteBtn.disable();
this.changePermit.disable()
}
},
deleteItem : function(rd) {
Ext.Msg.show({
title : feyaSoft.lang.common.confirmDelete,
msg : feyaSoft.lang.common.confirmDeleteDesc,
icon : Ext.Msg.QUESTION,
buttons : Ext.Msg.YESNO,
fn : this.onDeleteConfirm,
scope : this,
record : rd
})
},
onDeleteConfirm : function(button_id, text, options) {
if (button_id == "yes") {
Ext.Ajax.request({
url : this.componentClass + "/delete",
params : {
id : options.record.data.id
},
success : function(result, request) {
this.reload();
this.myOwnerCt.reload()
},
failure : function(result, request) {
Ext.MessageBox.alert("Failed",
"Internal Error, please try again")
},
scope : this
})
}
},
changeItem : function(rd) {
var changedPermit = feyaSoft.lang.common.canView;
if (rd.data.permission == 1) {
changedPermit = feyaSoft.lang.common.canEdit
}
Ext.Msg.show({
title : feyaSoft.lang.common.confirm,
msg : feyaSoft.lang.common.confirmChangePermit
+ changedPermit,
icon : Ext.Msg.QUESTION,
buttons : Ext.Msg.YESNO,
fn : this.onChangeConfirm,
scope : this,
record : rd
})
},
onChangeConfirm : function(button_id, text, options) {
if (button_id == "yes") {
Ext.Ajax.request({
url : this.componentClass + "/changePermit",
params : {
id : options.record.data.id
},
success : function(result, request) {
this.reload();
this.myOwnerCt.reload()
},
failure : function(result, request) {
Ext.MessageBox.alert("Failed",
"Internal Error, please try again")
},
scope : this
})
}
},
reload : function() {
this.shareStore.reload()
},
disableDelete : function() {
Ext.getCmp("delete-share-file-action").setDisabled(true)
}
});
feyaSoft.home.common.share.AddUser = function(config) {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = "side";
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "documentShareFile";
if (config.componentClass) {
this.componentClass = config.componentClass
}
var permissionStore = [["1", feyaSoft.lang.common.canView],
["2", feyaSoft.lang.common.canEdit]];
if (this.componentClass == "myPhotoShare"
|| this.componentClass == "myPhotoFolderShare") {
permissionStore = [["1", feyaSoft.lang.common.canView]]
}
var permission_data = new Ext.data.SimpleStore({
fields : ["id", "name"],
data : permissionStore
});
var userStore = new Ext.data.JsonStore({
url : "contact/list",
remoteSort : true,
fields : []
});
userStore.setDefaultSort("name", "ASC");
this.contactName = new Ext.ux.form.LovCombo({
fieldLabel : feyaSoft.lang.common.user,
forceSelection : true,
allowBlank : false,
typeAhead : true,
minChars : 2,
triggerAction : "all",
store : userStore,
displayField : "name",
hiddenName : "sharedUserId",
valueField : "contactUserId",
loadingText : feyaSoft.lang.common.loadingData,
pageSize : 15,
anchor : "93%",
listeners : {
select : this.onUserSelectFn,
scope : this
}
});
this.permission = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.common.permission,
forceSelection : true,
allowBlank : false,
typeAhead : true,
triggerAction : "all",
store : permission_data,
displayField : "name",
hiddenName : "permission",
mode : "local",
valueField : "id",
anchor : "93%",
listeners : {
select : this.onPermissionSelectFn,
scope : this
}
});
this.allowInvite = new Ext.form.Checkbox({
hideLabel : true,
boxLabel : feyaSoft.lang.file.allowViewEdit,
name : "allowInvite",
disabled : true
});
this.note = new Ext.form.HtmlEditor({
hideLabel : true,
name : "note",
height : 150,
anchor : "93%"
});
var emailNotify = new Ext.form.Checkbox({
hideLabel : true,
boxLabel : feyaSoft.lang.file.sendEmail,
name : "emailNotify",
checked : true
});
this.addMoreBtn = new Ext.Button({
text : feyaSoft.lang.file.addFriend,
handler : function() {
new feyaSoft.home.common.AddContactWin()
},
minWidth : 90,
iconCls : "addItem",
scope : this
});
this.saveBtn = new Ext.Button({
minWidth : 75,
text : feyaSoft.lang.common.save,
tooltip : "Save the result to the system",
iconCls : "save",
handler : this.doSaveFn,
scope : this
});
feyaSoft.home.common.share.AddUser.superclass.constructor.call(this, {
region : "east",
width : 350,
split : true,
baseCls : "x-plain",
labelWidth : 65,
bodyStyle : "padding: 20px 10px 10px 10px",
url : this.componentClass + "/create",
items : [this.contactName, this.permission, this.allowInvite,
this.note, emailNotify],
buttons : [this.addMoreBtn, this.saveBtn]
})
};
Ext.extend(feyaSoft.home.common.share.AddUser, Ext.form.FormPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.permission.setValue("1")
},
onUserSelectFn : function(obj) {
var name = null;
var existedUser = false;
var existedUsers = this.ownerCt.existedUsers();
for (var i = 0; i < existedUsers.length; i++) {
if (obj.value == existedUsers[i].data.shareUserId) {
existedUser = true;
name = existedUsers[i].data.shareUser
}
}
if (existedUser) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.file.itemShared + ": " + name);
this.contactName.setValue(null)
}
},
onPermissionSelectFn : function(obj) {
if (obj && obj.value == 2) {
this.allowInvite.setDisabled(false)
} else {
this.allowInvite.setDisabled(true);
this.allowInvite.setValue(false)
}
},
doSaveFn : function() {
if (this.form.isValid()) {
this.form.submit({
params : {
fileId : this.fileId
},
waitMsg : "In processing",
failure : function(form, action) {
Ext.MessageBox.alert("Error Message",
action.result.errorInfo)
},
success : function(form, action) {
if (action.result.success == "true") {
Ext.Message.msgStay(
feyaSoft.lang.common.confirm,
action.result.info, 2000);
this.ownerCt.reloadList();
this.contactName.reset()
} else {
Ext.MessageBox.alert("Error Message",
action.result.info)
}
},
scope : this
})
} else {
Ext.MessageBox.alert("Errors",
"Please fix the errors noted.")
}
}
});
Ext.ns("feyaSoft.home.common.share");
feyaSoft.home.common.share.GroupSharePanel = function(config) {
this.listGroups = new feyaSoft.home.common.share.ListGroups(config);
this.addGroup = new feyaSoft.home.common.share.AddGroup(config);
feyaSoft.home.common.share.GroupSharePanel.superclass.constructor.call(
this, {
title : feyaSoft.lang.file.groupAccess,
border : false,
layout : "border",
items : [this.listGroups, this.addGroup]
})
};
Ext.extend(feyaSoft.home.common.share.GroupSharePanel, Ext.Panel, {
initLoad : function(config) {
this.listGroups.initLoad(config);
this.addGroup.initLoad(config)
},
existedGroups : function() {
return this.listGroups.existedGroups()
},
reloadListGroup : function() {
this.listGroups.reload()
}
});
feyaSoft.home.common.share.ListGroups = function(config) {
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "locationFile";
if (config.componentClass == "myPhotoFolderShare") {
this.componentClass = "locationPhotoFolder"
} else {
if (config.componentClass == "myPhotoShare") {
this.componentClass = "locationPhoto"
} else {
if (config.componentClass == "browserBookmarkShare") {
this.componentClass = "locationBookmark"
}
}
}
var selectBoxModel = new Ext.grid.CheckboxSelectionModel({
singleSelect : true
});
function viewEditPermission(val) {
var result = val;
if (val == 1) {
result = feyaSoft.lang.common.canView
} else {
if (val == 2) {
result = feyaSoft.lang.common.canEdit
} else {
if (val == 7) {
result = feyaSoft.lang.common.canEdit
}
}
}
return result
}
var shareCM = new Ext.grid.ColumnModel([selectBoxModel, {
id : "id",
header : "Identify",
dataIndex : "id",
width : 100,
hidden : true
}, {
header : feyaSoft.lang.common.name,
width : 200,
dataIndex : "name"
}, {
header : feyaSoft.lang.common.permission,
width : 100,
dataIndex : "permission",
scope : this,
renderer : viewEditPermission
}, {
header : feyaSoft.lang.common.date,
width : 150,
dataIndex : "shareDate",
renderer : Ext.util.Common.formatDateHour
}]);
this.shareStore = new Ext.data.JsonStore({
url : this.componentClass + "/sharedGroups",
remoteSort : true,
fields : []
});
this.deleteBtn = new Ext.Button({
text : feyaSoft.lang.common.remove,
tooltip : "Highlight the item and click this button to remove this shared user",
iconCls : "delete",
disabled : true,
handler : this.deleteItem,
scope : this
});
this.changePermit = new Ext.Button({
disabled : true,
text : feyaSoft.lang.common.changePermission,
tooltip : "Highlight the item and click this button to change this shared user permission",
iconCls : "editItem",
handler : this.changeItem,
scope : this
});
feyaSoft.home.common.share.ListGroups.superclass.constructor.call(this, {
region : "center",
store : this.shareStore,
cm : shareCM,
sm : selectBoxModel,
viewConfig : {
forceFit : true
},
loadMask : {
msg : feyaSoft.lang.common.loadingData
},
tbar : [this.deleteBtn, this.changePermit],
autoScroll : true
});
selectBoxModel.on("selectionchange", this.onSelectionChangeFn, this)
};
Ext.extend(feyaSoft.home.common.share.ListGroups, Ext.grid.GridPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.shareStore.baseParams = {
fileId : this.fileId
};
this.shareStore.load()
},
existedGroups : function() {
return this.shareStore.data.items
},
onSelectionChangeFn : function(sm) {
if (0 < sm.getSelections().length) {
this.deleteBtn.enable();
if (this.componentClass == "locationPhoto"
|| this.componentClass == "locationPhotoFolder") {
this.changePermit.disable()
} else {
this.changePermit.enable()
}
} else {
this.deleteBtn.disable();
this.changePermit.disable()
}
},
deleteItem : function() {
var record = this.getSelectionModel().getSelected();
if (record == null || record.data == null
|| record.data.id == null) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.common.pleaseSelectOne);
return
}
var deleteInfo = feyaSoft.lang.common.confirmDelete + ": "
+ record.data.name;
Ext.MessageBox.confirm(deleteInfo,
feyaSoft.lang.common.confirmDeleteDesc, function(btn) {
if (btn == "yes") {
Ext.Ajax.request({
url : this.componentClass
+ "/remove",
params : {
groupId : record.data.id,
fileId : this.fileId
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
this.reload();
this.myOwnerCt.reload()
} else {
Ext.MessageBox
.alert(
feyaSoft.lang.common.error,
jsonData.info)
}
},
failure : function(result, request) {
},
scope : this
})
}
}, this)
},
changeItem : function() {
var record = this.getSelectionModel().getSelected();
if (record == null || record.data == null
|| record.data.id == null) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.common.pleaseSelectOne);
return
}
var changedPermit = feyaSoft.lang.common.canView;
if (record.data.permission == 1) {
changedPermit = feyaSoft.lang.common.canEdit
}
Ext.Msg.show({
title : feyaSoft.lang.common.confirm,
msg : feyaSoft.lang.common.confirmChangePermit
+ changedPermit,
icon : Ext.Msg.QUESTION,
buttons : Ext.Msg.YESNO,
fn : this.onChangeConfirm,
scope : this,
record : record
})
},
onChangeConfirm : function(button_id, text, options) {
if (button_id == "yes") {
Ext.Ajax.request({
url : this.componentClass + "/changePermit",
params : {
groupId : options.record.data.id,
fileId : this.fileId
},
success : function(result, request) {
this.reload();
this.myOwnerCt.reload()
},
failure : function(result, request) {
Ext.MessageBox.alert("Failed",
"Internal Error, please try again")
},
scope : this
})
}
},
reload : function() {
this.shareStore.reload()
},
disableDelete : function() {
Ext.getCmp("delete-share-file-action").setDisabled(true)
}
});
feyaSoft.home.common.share.AddGroup = function(config) {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = "side";
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "locationFile";
if (config.componentClass == "myPhotoFolderShare") {
this.componentClass = "locationPhotoFolder"
} else {
if (config.componentClass == "myPhotoShare") {
this.componentClass = "locationPhoto"
} else {
if (config.componentClass == "browserBookmarkShare") {
this.componentClass = "locationBookmark"
}
}
}
var groupStore = new Ext.data.JsonStore({
url : "locationUser/list",
remoteSort : true,
fields : []
});
groupStore.setDefaultSort("name", "ASC");
this.group = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.group.group,
forceSelection : true,
allowBlank : false,
typeAhead : true,
minChars : 2,
triggerAction : "all",
store : groupStore,
displayField : "name",
hiddenName : "groupId",
valueField : "id",
emptyText : feyaSoft.lang.common.pleaseSelectOne,
loadingText : feyaSoft.lang.common.loadingData,
pageSize : 15,
anchor : "93%",
listeners : {
select : this.onGroupSelectFn,
scope : this
}
});
var permissionStore = [["1", feyaSoft.lang.common.canView],
["2", feyaSoft.lang.common.canEdit]];
if (config.componentClass == "myPhotoShare"
|| config.componentClass == "myPhotoFolderShare") {
permissionStore = [["1", feyaSoft.lang.common.canView]]
}
var permission_data = new Ext.data.SimpleStore({
fields : ["id", "name"],
data : permissionStore
});
this.permission = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.common.permission,
forceSelection : true,
allowBlank : false,
typeAhead : true,
triggerAction : "all",
store : permission_data,
displayField : "name",
hiddenName : "permission",
mode : "local",
valueField : "id",
anchor : "93%"
});
this.note = new Ext.form.HtmlEditor({
hideLabel : true,
name : "note",
height : 150,
anchor : "93%"
});
this.posting = new Ext.form.Checkbox({
hideLabel : true,
boxLabel : feyaSoft.lang.file.groupShareMsg,
name : "doPosting",
checked : true
});
this.saveBtn = new Ext.Button({
minWidth : 75,
text : feyaSoft.lang.common.save,
tooltip : "Save the result to the system",
iconCls : "save",
handler : this.doSaveFn,
scope : this
});
feyaSoft.home.common.share.AddGroup.superclass.constructor.call(this, {
region : "east",
width : 350,
split : true,
baseCls : "x-plain",
labelWidth : 70,
bodyStyle : "padding: 20px 10px 10px 10px",
url : this.componentClass + "/createUpdate",
items : [this.group, this.permission, this.note, this.posting],
buttons : [this.saveBtn]
})
};
Ext.extend(feyaSoft.home.common.share.AddGroup, Ext.form.FormPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.permission.setValue("1")
},
onGroupSelectFn : function(obj) {
var allowPosting = true;
var name = null;
var items = obj.store.data.items;
for (var i = 0; i < items.length; i++) {
if (obj.value == items[i].data.id) {
allowPosting = items[i].data.allowPosting;
name = items[i].data.name
}
}
if (!allowPosting) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.group.notAllowPosting + ": " + name);
this.group.setValue(null)
}
var existedGroup = false;
var existedGroups = this.ownerCt.existedGroups();
for (var i = 0; i < existedGroups.length; i++) {
if (obj.value == existedGroups[i].data.id) {
existedGroup = true;
name = existedGroups[i].data.name
}
}
if (existedGroup) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.group.groupShared + ": " + name);
this.group.setValue(null)
}
},
doSaveFn : function() {
if (this.form.isValid()) {
this.form.submit({
params : {
fileId : this.fileId
},
waitMsg : "In processing",
failure : function(form, action) {
Ext.MessageBox.alert("Error Message",
action.result.errorInfo)
},
success : function(form, action) {
if (action.result.success == "true") {
Ext.Message.msgStay(
feyaSoft.lang.common.confirm,
action.result.info, 2000);
this.ownerCt.reloadListGroup();
this.group.reset()
} else {
Ext.MessageBox.alert(
feyaSoft.lang.common.error,
action.result.info)
}
},
scope : this
})
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Please fix the errors noted.")
}
}
});
Ext.ns("feyaSoft.home.common.share");
feyaSoft.home.common.share.ContactSharePanel = function(config) {
this.myOwnerCt = config.myOwnerCt;
this.listContact = new feyaSoft.home.common.share.ListContacts(config);
this.addContact = new feyaSoft.home.common.share.AddContact(config);
feyaSoft.home.common.share.ContactSharePanel.superclass.constructor.call(
this, {
title : feyaSoft.lang.file.contactAccess,
border : false,
layout : "border",
items : [this.listContact, this.addContact]
})
};
Ext.extend(feyaSoft.home.common.share.ContactSharePanel, Ext.Panel, {
initLoad : function(config) {
this.listContact.initLoad(config);
this.addContact.initLoad(config)
},
existedItems : function() {
return this.listContact.existedItem()
},
reloadList : function() {
this.listContact.reload()
}
});
feyaSoft.home.common.share.ListContacts = function(config) {
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "contactShareFile";
if (config.componentClass == "myPhotoFolderShare") {
this.componentClass = "contactSharePhotoFolder"
} else {
if (config.componentClass == "myPhotoShare") {
this.componentClass = "contactSharePhoto"
} else {
if (config.componentClass == "browserBookmarkShare") {
this.componentClass = "contactShareBookmark"
}
}
}
var selectBoxModel = new Ext.grid.CheckboxSelectionModel({
singleSelect : true
});
function viewEditPermission(val) {
var result = val;
if (val == 1) {
result = feyaSoft.lang.common.canView
} else {
if (val == 2) {
result = feyaSoft.lang.common.canEdit
} else {
if (val == 7) {
result = feyaSoft.lang.common.canEdit
}
}
}
return result
}
var shareCM = new Ext.grid.ColumnModel([selectBoxModel, {
id : "id",
header : "Identify",
dataIndex : "id",
width : 100,
hidden : true
}, {
header : feyaSoft.lang.common.contactCategory,
width : 200,
dataIndex : "shareCategory"
}, {
header : feyaSoft.lang.common.permission,
width : 90,
dataIndex : "permission",
scope : this,
renderer : viewEditPermission
}, {
header : feyaSoft.lang.common.date,
width : 140,
dataIndex : "updateDate",
renderer : Ext.util.Common.formatDateHour
}]);
this.shareStore = new Ext.data.JsonStore({
url : this.componentClass + "/list",
remoteSort : true,
fields : []
});
this.deleteBtn = new Ext.Button({
disabled : true,
text : feyaSoft.lang.common.remove,
id : "delete-contact-file-action",
tooltip : "Highlight the item and click this button to remove this item",
iconCls : "delete",
handler : function() {
var record = this.getSelectionModel().getSelected();
if (record) {
this.deleteItem(record)
}
},
scope : this
});
this.changePermit = new Ext.Button({
disabled : true,
text : feyaSoft.lang.common.changePermission,
tooltip : "Highlight the item and click this button to change this shared user permission",
iconCls : "editItem",
handler : function() {
var record = this.getSelectionModel().getSelected();
if (record) {
this.changeItem(record)
}
},
scope : this
});
feyaSoft.home.common.share.ListContacts.superclass.constructor.call(this, {
region : "center",
border : true,
store : this.shareStore,
cm : shareCM,
sm : selectBoxModel,
width : 600,
height : 300,
viewConfig : {
forceFit : true
},
loadMask : {
msg : feyaSoft.lang.common.loadingData
},
tbar : [this.deleteBtn, this.changePermit],
autoScroll : true
});
selectBoxModel.on("selectionchange", this.onSelectionChangeFn, this)
};
Ext.extend(feyaSoft.home.common.share.ListContacts, Ext.grid.GridPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.shareStore.baseParams = {
fileId : this.fileId
};
this.shareStore.load()
},
existedItem : function() {
return this.shareStore.data.items
},
onSelectionChangeFn : function(sm) {
if (0 < sm.getSelections().length) {
this.deleteBtn.enable();
if (this.componentClass == "contactSharePhotoFolder"
|| this.componentClass == "contactSharePhoto") {
this.changePermit.disable()
} else {
this.changePermit.enable()
}
} else {
this.deleteBtn.disable();
this.changePermit.disable()
}
},
deleteItem : function(rd) {
Ext.Msg.show({
title : feyaSoft.lang.common.confirmDelete,
msg : feyaSoft.lang.common.confirmDeleteDesc,
icon : Ext.Msg.QUESTION,
buttons : Ext.Msg.YESNO,
fn : this.onDeleteConfirm,
scope : this,
record : rd
})
},
onDeleteConfirm : function(button_id, text, options) {
if (button_id == "yes") {
Ext.Ajax.request({
url : this.componentClass + "/delete",
params : {
id : options.record.data.id
},
success : function(result, request) {
this.reload()
},
failure : function(result, request) {
Ext.MessageBox.alert("Failed",
"Internal Error, please try again")
},
scope : this
})
}
},
changeItem : function(rd) {
var changedPermit = feyaSoft.lang.common.canView;
if (rd.data.permission == 1) {
changedPermit = feyaSoft.lang.common.canEdit
}
Ext.Msg.show({
title : feyaSoft.lang.common.confirm,
msg : feyaSoft.lang.common.confirmChangePermit
+ changedPermit,
icon : Ext.Msg.QUESTION,
buttons : Ext.Msg.YESNO,
fn : this.onChangeConfirm,
scope : this,
record : rd
})
},
onChangeConfirm : function(button_id, text, options) {
if (button_id == "yes") {
Ext.Ajax.request({
url : this.componentClass + "/changePermit",
params : {
id : options.record.data.id
},
success : function(result, request) {
this.reload();
this.myOwnerCt.reload()
},
failure : function(result, request) {
Ext.MessageBox.alert("Failed",
"Internal Error, please try again")
},
scope : this
})
}
},
reload : function() {
this.shareStore.reload()
},
disableDelete : function() {
Ext.getCmp("delete-contact-file-action").setDisabled(true)
}
});
feyaSoft.home.common.share.AddContact = function(config, myOwnerCt) {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = "side";
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "contactShareFile";
if (config.componentClass == "myPhotoFolderShare") {
this.componentClass = "contactSharePhotoFolder"
} else {
if (config.componentClass == "myPhotoShare") {
this.componentClass = "contactSharePhoto"
} else {
if (config.componentClass == "browserBookmarkShare") {
this.componentClass = "contactShareBookmark"
}
}
}
var permissionStore = [["1", feyaSoft.lang.common.canView],
["2", feyaSoft.lang.common.canEdit]];
if (config.componentClass == "myPhotoShare"
|| config.componentClass == "myPhotoFolderShare") {
permissionStore = [["1", feyaSoft.lang.common.canView]]
}
var permission_data = new Ext.data.SimpleStore({
fields : ["id", "name"],
data : permissionStore
});
var categoryStore = new Ext.data.JsonStore({
url : "contactCategory/list",
remoteSort : true,
fields : []
});
categoryStore.setDefaultSort("name", "ASC");
this.categoryName = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.common.category,
forceSelection : true,
allowBlank : false,
typeAhead : true,
minChars : 2,
triggerAction : "all",
store : categoryStore,
displayField : "name",
hiddenName : "categoryId",
valueField : "id",
emptyText : feyaSoft.lang.common.pleaseSelectOne,
loadingText : feyaSoft.lang.common.loadingData,
pageSize : 15,
anchor : "93%",
listeners : {
select : this.onCategorySelectFn,
scope : this
}
});
this.permission = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.common.permission,
forceSelection : true,
allowBlank : false,
typeAhead : true,
triggerAction : "all",
store : permission_data,
displayField : "name",
hiddenName : "permission",
mode : "local",
valueField : "id",
allowBlank : false,
anchor : "93%"
});
this.note = new Ext.form.HtmlEditor({
hideLabel : true,
name : "note",
height : 150,
anchor : "93%"
});
this.posting = new Ext.form.Checkbox({
hideLabel : true,
boxLabel : feyaSoft.lang.file.contactShareMsg,
name : "doPosting",
checked : true
});
this.saveBtn = new Ext.Button({
minWidth : 75,
text : feyaSoft.lang.common.save,
tooltip : "Save the result to the system",
iconCls : "save",
handler : this.doSaveFn,
scope : this
});
feyaSoft.home.common.share.AddContact.superclass.constructor.call(this, {
region : "east",
width : 350,
split : true,
baseCls : "x-plain",
labelWidth : 65,
bodyStyle : "padding: 20px 10px 10px 10px",
url : this.componentClass + "/createUpdate",
items : [this.categoryName, this.permission, this.note,
this.posting],
buttons : [this.saveBtn]
})
};
Ext.extend(feyaSoft.home.common.share.AddContact, Ext.form.FormPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.permission.setValue("1")
},
onCategorySelectFn : function(obj) {
var name = null;
var existedItem = false;
var existedItems = this.ownerCt.existedItems();
for (var i = 0; i < existedItems.length; i++) {
if (obj.value == existedItems[i].data.categoryId) {
existedItem = true;
name = existedItems[i].data.shareCategory
}
}
if (existedItem) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.file.itemShared + ": " + name);
this.categoryName.setValue(null)
}
},
doSaveFn : function() {
if (this.form.isValid()) {
this.form.submit({
params : {
fileId : this.fileId
},
waitMsg : "In processing",
failure : function(form, action) {
Ext.MessageBox.alert("Error Message",
action.result.errorInfo)
},
success : function(form, action) {
if (action.result.success == "true") {
Ext.Message.msgStay(
feyaSoft.lang.common.confirm,
action.result.info, 2000);
this.ownerCt.reloadList();
this.categoryName.reset();
this.note.reset()
} else {
Ext.MessageBox.alert("Error Message",
action.result.info)
}
},
scope : this
})
} else {
Ext.MessageBox.alert("Errors",
"Please fix the errors noted.")
}
}
});
Ext.ns("feyaSoft.home.common.share");
feyaSoft.home.common.share.OrganizationSharePanel = function(config) {
this.listOrganizations = new feyaSoft.home.common.share.ListOrganizations(config);
this.addOrganization = new feyaSoft.home.common.share.AddOrganization(config);
feyaSoft.home.common.share.OrganizationSharePanel.superclass.constructor
.call(this, {
title : feyaSoft.lang.file.organizationAccess,
border : false,
layout : "border",
items : [this.listOrganizations, this.addOrganization]
})
};
Ext.extend(feyaSoft.home.common.share.OrganizationSharePanel, Ext.Panel, {
initLoad : function(config) {
this.listOrganizations.initLoad(config);
this.addOrganization.initLoad(config)
},
existedOrganizations : function() {
return this.listOrganizations.existedOrganizations()
},
reloadListOrganization : function() {
this.listOrganizations.reload()
}
});
feyaSoft.home.common.share.ListOrganizations = function(config) {
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "organizationFile";
if (config.componentClass == "myPhotoFolderShare") {
this.componentClass = "organizationPhotoFolder"
} else {
if (config.componentClass == "myPhotoShare") {
this.componentClass = "organizationPhoto"
} else {
if (config.componentClass == "browserBookmarkShare") {
this.componentClass = "organizationBookmark"
}
}
}
var selectBoxModel = new Ext.grid.CheckboxSelectionModel({
singleSelect : true
});
function viewEditPermission(val) {
var result = val;
if (val == 1) {
result = feyaSoft.lang.common.canView
} else {
if (val == 2) {
result = feyaSoft.lang.common.canEdit
} else {
if (val == 7) {
result = feyaSoft.lang.common.canEdit
}
}
}
return result
}
var shareCM = new Ext.grid.ColumnModel([selectBoxModel, {
id : "id",
header : "Identify",
dataIndex : "id",
width : 100,
hidden : true
}, {
header : feyaSoft.lang.common.name,
width : 200,
dataIndex : "name"
}, {
header : feyaSoft.lang.common.permission,
width : 100,
dataIndex : "permission",
scope : this,
renderer : viewEditPermission
}, {
header : feyaSoft.lang.common.date,
width : 150,
dataIndex : "shareDate",
renderer : Ext.util.Common.formatDateHour
}]);
this.shareStore = new Ext.data.JsonStore({
url : this.componentClass + "/sharedOrganizations",
remoteSort : true,
fields : []
});
this.deleteBtn = new Ext.Button({
text : feyaSoft.lang.common.remove,
tooltip : "Highlight the item and click this button to remove this shared user",
iconCls : "delete",
disabled : true,
handler : function() {
this.deleteItem()
},
scope : this
});
this.changePermit = new Ext.Button({
disabled : true,
text : feyaSoft.lang.common.changePermission,
tooltip : "Highlight the item and click this button to change this shared organization permission",
iconCls : "editItem",
handler : this.changeItem,
scope : this
});
feyaSoft.home.common.share.ListOrganizations.superclass.constructor.call(
this, {
region : "center",
store : this.shareStore,
cm : shareCM,
sm : selectBoxModel,
viewConfig : {
forceFit : true
},
loadMask : {
msg : feyaSoft.lang.common.loadingData
},
tbar : [this.deleteBtn, this.changePermit],
autoScroll : true
});
selectBoxModel.on("selectionchange", this.onSelectionChangeFn, this)
};
Ext.extend(feyaSoft.home.common.share.ListOrganizations, Ext.grid.GridPanel, {
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.shareStore.baseParams = {
fileId : this.fileId
};
this.shareStore.load()
},
existedOrganizations : function() {
return this.shareStore.data.items
},
onSelectionChangeFn : function(sm) {
if (0 < sm.getSelections().length) {
this.deleteBtn.enable();
if (this.componentClass == "organizationPhotoFolder"
|| this.componentClass == "organizationPhoto") {
this.changePermit.disable()
} else {
this.changePermit.enable()
}
} else {
this.deleteBtn.disable();
this.changePermit.disable()
}
},
deleteItem : function(rd) {
var record = this.getSelectionModel().getSelected();
if (record == null || record.data == null
|| record.data.id == null) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.common.pleaseSelectOne);
return
}
var deleteInfo = feyaSoft.lang.common.confirmDelete + ": "
+ record.data.name;
Ext.MessageBox.confirm(deleteInfo,
feyaSoft.lang.common.confirmDeleteDesc, function(btn) {
if (btn == "yes") {
Ext.Ajax.request({
url : this.componentClass
+ "/remove",
params : {
organizationId : record.data.id,
fileId : this.fileId
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
this.reload();
this.myOwnerCt.reload()
} else {
Ext.MessageBox
.alert(
feyaSoft.lang.common.error,
jsonData.info)
}
},
failure : function(result, request) {
},
scope : this
})
}
}, this)
},
changeItem : function() {
var record = this.getSelectionModel().getSelected();
if (record == null || record.data == null
|| record.data.id == null) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.common.pleaseSelectOne);
return
}
var changedPermit = feyaSoft.lang.common.canView;
if (record.data.permission == 1) {
changedPermit = feyaSoft.lang.common.canEdit
}
Ext.Msg.show({
title : feyaSoft.lang.common.confirm,
msg : feyaSoft.lang.common.confirmChangePermit
+ changedPermit,
icon : Ext.Msg.QUESTION,
buttons : Ext.Msg.YESNO,
fn : this.onChangeConfirm,
scope : this,
record : record
})
},
onChangeConfirm : function(button_id, text, options) {
if (button_id == "yes") {
Ext.Ajax.request({
url : this.componentClass + "/changePermit",
params : {
organizationId : options.record.data.id,
fileId : this.fileId
},
success : function(result, request) {
this.reload();
this.myOwnerCt.reload()
},
failure : function(result, request) {
Ext.MessageBox.alert("Failed",
"Internal Error, please try again")
},
scope : this
})
}
},
reload : function() {
this.shareStore.reload()
},
disableDelete : function() {
Ext.getCmp("delete-share-file-action").setDisabled(true)
}
});
feyaSoft.home.common.share.AddOrganization = function(config) {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = "side";
this.fileId = null;
this.myOwnerCt = null;
this.componentClass = "organizationFile";
if (config.componentClass == "myPhotoFolderShare") {
this.componentClass = "organizationPhotoFolder"
} else {
if (config.componentClass == "myPhotoShare") {
this.componentClass = "organizationPhoto"
} else {
if (config.componentClass == "browserBookmarkShare") {
this.componentClass = "organizationBookmark"
}
}
}
var organizationStore = new Ext.data.JsonStore({
url : "organizationUser/list",
remoteSort : true,
fields : []
});
organizationStore.setDefaultSort("name", "ASC");
this.organization = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.organization.organization,
forceSelection : true,
allowBlank : false,
typeAhead : true,
minChars : 2,
triggerAction : "all",
store : organizationStore,
displayField : "name",
hiddenName : "itemId",
valueField : "id",
emptyText : feyaSoft.lang.common.pleaseSelectOne,
loadingText : feyaSoft.lang.common.loadingData,
pageSize : 15,
anchor : "93%",
listeners : {
select : this.onOrganizationSelectFn,
scope : this
}
});
this.permissionStore = [["1", feyaSoft.lang.common.canView],
["2", feyaSoft.lang.common.canEdit]];
if (this.componentClass == "organizationPhotoFolder"
|| this.componentClass == "organizationPhoto") {
this.permissionStore = [["1", feyaSoft.lang.common.canView]]
}
this.permission_data = new Ext.data.SimpleStore({
fields : ["id", "name"],
data : this.permissionStore
});
this.permission = new Ext.form.ComboBox({
fieldLabel : feyaSoft.lang.common.permission,
forceSelection : true,
allowBlank : false,
typeAhead : true,
triggerAction : "all",
store : this.permission_data,
displayField : "name",
hiddenName : "permission",
mode : "local",
valueField : "id",
anchor : "93%"
});
this.note = new Ext.form.HtmlEditor({
hideLabel : true,
name : "note",
height : 150,
anchor : "93%"
});
this.posting = new Ext.form.Checkbox({
hideLabel : true,
boxLabel : feyaSoft.lang.file.organizationShareMsg,
name : "doPosting",
checked : true
});
this.saveBtn = new Ext.Button({
minWidth : 75,
text : feyaSoft.lang.common.save,
tooltip : "Save the result to the system",
iconCls : "save",
handler : this.doSaveFn,
scope : this
});
feyaSoft.home.common.share.AddOrganization.superclass.constructor.call(
this, {
region : "east",
width : 350,
split : true,
baseCls : "x-plain",
labelWidth : 70,
bodyStyle : "padding: 20px 10px 10px 10px",
url : this.componentClass + "/createUpdate",
items : [this.organization, this.permission, this.note,
this.posting],
buttons : [this.saveBtn]
})
};
Ext.extend(feyaSoft.home.common.share.AddOrganization, Ext.form.FormPanel, {
onOrgAfterRenderFn : function() {
this.permission_data.on("load", function() {
this.permission.setValue("1")
}, this)
},
initLoad : function(config) {
this.fileId = config.fileId;
this.myOwnerCt = config.myOwnerCt;
this.permission.setValue("1")
},
onOrganizationSelectFn : function(obj) {
var allowPosting = true;
var name = null;
var items = obj.store.data.items;
for (var i = 0; i < items.length; i++) {
if (obj.value == items[i].data.id) {
allowPosting = items[i].data.allowPosting;
name = items[i].data.name
}
}
if (!allowPosting) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.group.notAllowPosting + ": " + name);
this.organization.setValue(null)
}
var existedOrganization = false;
var existedOrganizations = this.ownerCt.existedOrganizations();
for (var i = 0; i < existedOrganizations.length; i++) {
if (obj.value == existedOrganizations[i].data.id) {
existedOrganization = true;
name = existedOrganizations[i].data.name
}
}
if (existedOrganization) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
feyaSoft.lang.group.groupShared + ": " + name);
this.organization.setValue(null)
}
},
doSaveFn : function() {
if (this.form.isValid()) {
this.form.submit({
params : {
fileId : this.fileId
},
waitMsg : "In processing",
failure : function(form, action) {
Ext.MessageBox.alert("Error Message",
action.result.errorInfo)
},
success : function(form, action) {
if (action.result.success == "true") {
Ext.Message.msgStay(
feyaSoft.lang.common.confirm,
action.result.info, 2000);
this.ownerCt.reloadListOrganization();
this.organization.reset()
} else {
Ext.MessageBox.alert(
feyaSoft.lang.common.error,
action.result.info)
}
},
scope : this
})
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Please fix the errors noted.")
}
}
});
Ext.namespace("Ext.ux.designHelper");
Ext.ux.designHelper.selection = function(win, doc) {
this.sel = null;
this.range = null;
this.sdRange = null;
this.init = function() {
var sel = win.getSelection ? win.getSelection() : doc.selection;
var range;
try {
if (sel.rangeCount > 0) {
range = sel.getRangeAt(0)
} else {
range = sel.createRange()
}
} catch (e) {
}
if (!range) {
range = Ext.ux.designHelper.util.createRange(doc)
}
this.sel = sel;
this.range = range;
var startNode, startPos, endNode, endPos;
if (Ext.isIE) {
if (range.item) {
var el = range.item(0);
startNode = endNode = el;
startPos = endPos = 0
} else {
var getStartEnd = function(isStart) {
var pointRange = range.duplicate();
pointRange.collapse(isStart);
var parentNode = pointRange.parentElement();
var nodes = parentNode.childNodes;
if (nodes.length == 0) {
return {
node : parentNode,
pos : 0
}
}
var startNode;
var endElement;
var startPos = 0;
var isEnd = false;
var testRange = range.duplicate();
testRange.moveToElementText(parentNode);
for (var i = 0, len = nodes.length; i < len; i++) {
var node = nodes[i];
var cmp = testRange.compareEndPoints("StartToStart",
pointRange);
if (cmp > 0) {
isEnd = true
} else {
if (cmp == 0) {
if (node.nodeType == 1) {
var sdRange = new Ext.ux.designHelper.range(doc);
sdRange.selectTextNode(node);
return {
node : sdRange.startNode,
pos : 0
}
} else {
return {
node : node,
pos : 0
}
}
}
}
if (node.nodeType == 1) {
var nodeRange = range.duplicate();
nodeRange.moveToElementText(node);
testRange.setEndPoint("StartToEnd", nodeRange);
if (isEnd) {
startPos += nodeRange.text.length
} else {
startPos = 0
}
} else {
if (node.nodeType == 3) {
testRange.moveStart("character",
node.nodeValue.length);
startPos += node.nodeValue.length
}
}
if (!isEnd) {
startNode = node
}
}
if (!isEnd && startNode.nodeType == 1) {
var startNode = parentNode.lastChild;
return {
node : startNode,
pos : startNode.nodeType == 1
? 1
: startNode.nodeValue.length
}
}
testRange = range.duplicate();
testRange.moveToElementText(parentNode);
testRange.setEndPoint("StartToEnd", pointRange);
startPos -= testRange.text.replace(/\r\n|\n|\r/g, "").length;
return {
node : startNode,
pos : startPos
}
};
var start = getStartEnd(true);
var end = getStartEnd(false);
startNode = start.node;
startPos = start.pos;
endNode = end.node;
endPos = end.pos
}
} else {
startNode = range.startContainer;
startPos = range.startOffset;
endNode = range.endContainer;
endPos = range.endOffset;
if (startNode.nodeType == 1
&& typeof startNode.childNodes[startPos] != "undefined") {
startNode = startNode.childNodes[startPos];
startPos = 0
}
if (endNode.nodeType == 1) {
endPos = endPos == 0 ? 1 : endPos;
if (typeof endNode.childNodes[endPos - 1] != "undefined") {
endNode = endNode.childNodes[endPos - 1];
endPos = (endNode.nodeType == 1)
? 0
: endNode.nodeValue.length
}
}
if (startNode.nodeType == 1 && endNode.nodeType == 3 && endPos == 0
&& endNode.previousSibling) {
var node = endNode.previousSibling;
while (node) {
if (node === startNode) {
endNode = startNode;
break
}
if (node.childNodes.length != 1) {
break
}
node = node.childNodes[0]
}
}
}
var sdRange = new Ext.ux.designHelper.range(doc);
sdRange.setTextStart(startNode, startPos);
sdRange.setTextEnd(endNode, endPos);
this.sdRange = sdRange
};
this.init();
this.addRange = function(sdRange) {
this.sdRange = sdRange;
if (Ext.isIE) {
var getEndRange = function(isStart) {
var range = Ext.ux.designHelper.util.createRange(doc);
var node = isStart ? sdRange.startNode : sdRange.endNode;
if (node.nodeType == 1) {
range.moveToElementText(node);
range.collapse(isStart)
} else {
if (node.nodeType == 3) {
range = Ext.ux.designHelper.util.getNodeStartRange(doc,
node);
var pos = isStart ? sdRange.startPos : sdRange.endPos;
range.moveStart("character", pos)
}
}
return range
};
if (!this.range.item) {
var node = sdRange.startNode;
if (node == sdRange.endNode
&& Ext.ux.designHelper.util.getNodeType(node) == 1
&& Ext.ux.designHelper.util.getNodeTextLength(node) == 0) {
var temp = doc.createTextNode(" ");
node.appendChild(temp);
this.range.moveToElementText(node);
this.range.collapse(false);
this.range.select();
node.removeChild(temp)
} else {
this.range.setEndPoint("StartToStart", getEndRange(true));
this.range.setEndPoint("EndToStart", getEndRange(false));
this.range.select()
}
}
} else {
var getNodePos = function(node) {
var pos = 0;
while (node) {
node = node.previousSibling;
pos++
}
return --pos
};
var range = new Ext.ux.designHelper.range(doc);
range.setTextStart(sdRange.startNode, sdRange.startPos);
range.setTextEnd(sdRange.endNode, sdRange.endPos);
if (Ext.ux.designHelper.util.getNodeType(range.startNode) == 88) {
this.range.setStart(range.startNode.parentNode,
getNodePos(range.startNode))
} else {
this.range.setStart(range.startNode, range.startPos)
}
if (Ext.ux.designHelper.util.getNodeType(range.endNode) == 88) {
this.range.setEnd(range.endNode.parentNode,
getNodePos(range.endNode) + 1)
} else {
this.range.setEnd(range.endNode, range.endPos)
}
this.sel.removeAllRanges();
this.sel.addRange(this.range)
}
};
this.focus = function() {
if (Ext.isIE && this.range != null) {
this.range.select()
}
}
};
Ext.ux.designHelper.range = function(doc) {
this.startNode = null;
this.startPos = null;
this.endNode = null;
this.endPos = null;
this.getParentElement = function() {
var scanParent = function(node, func) {
while (node
&& (!node.tagName || node.tagName.toLowerCase() != "body")) {
node = node.parentNode;
if (func(node)) {
return
}
}
};
var nodeList = [];
scanParent(this.startNode, function(node) {
nodeList.push(node)
});
var parentNode;
scanParent(this.endNode, function(node) {
if (Ext.ux.designHelper.util.inArray(node, nodeList)) {
parentNode = node;
return true
}
});
return parentNode ? parentNode : doc.body
};
this.getNodeList = function() {
var self = this;
var parentNode = this.getParentElement();
var nodeList = [];
var isStarted = false;
if (parentNode == self.startNode) {
isStarted = true
}
if (isStarted) {
nodeList.push(parentNode)
}
Ext.ux.designHelper.util.eachNode(parentNode, function(node) {
if (node == self.startNode) {
isStarted = true
}
var range = new Ext.ux.designHelper.range(doc);
range.selectTextNode(node);
if (range.comparePoints("START_TO_END", self) >= 0) {
return false
}
if (isStarted) {
nodeList.push(node)
}
return true
});
return nodeList
};
this.comparePoints = function(how, range) {
var compareNodes = function(nodeA, posA, nodeB, posB) {
var cmp;
if (Ext.isIE) {
var getStartRange = function(node, pos, isStart) {
var range = Ext.ux.designHelper.util.createRange(doc);
var type = Ext.ux.designHelper.util.getNodeType(node);
if (type == 1) {
range.moveToElementText(node);
range.collapse(isStart)
} else {
if (type == 3) {
range = Ext.ux.designHelper.util.getNodeStartRange(
doc, node);
range.moveStart("character", pos);
range.collapse(true)
}
}
return range
};
var rangeA, rangeB;
if (how == "START_TO_START" || how == "START_TO_END") {
rangeA = getStartRange(nodeA, posA, true)
} else {
rangeA = getStartRange(nodeA, posA, false)
}
if (how == "START_TO_START" || how == "END_TO_START") {
rangeB = getStartRange(nodeB, posB, true)
} else {
rangeB = getStartRange(nodeB, posB, false)
}
return rangeA.compareEndPoints("StartToStart", rangeB)
} else {
var rangeA = Ext.ux.designHelper.util.createRange(doc);
rangeA.selectNode(nodeA);
if (how == "START_TO_START" || how == "START_TO_END") {
rangeA.collapse(true)
} else {
rangeA.collapse(false)
}
var rangeB = Ext.ux.designHelper.util.createRange(doc);
rangeB.selectNode(nodeB);
if (how == "START_TO_START" || how == "END_TO_START") {
rangeB.collapse(true)
} else {
rangeB.collapse(false)
}
if (rangeA.compareBoundaryPoints(Range.START_TO_START, rangeB) > 0) {
cmp = 1
} else {
if (rangeA.compareBoundaryPoints(Range.START_TO_START,
rangeB) == 0) {
if (posA > posB) {
cmp = 1
} else {
if (posA == posB) {
cmp = 0
} else {
cmp = -1
}
}
} else {
cmp = -1
}
}
}
return cmp
};
if (how == "START_TO_START") {
return compareNodes(this.startNode, this.startPos, range.startNode,
range.startPos)
}
if (how == "START_TO_END") {
return compareNodes(this.startNode, this.startPos, range.endNode,
range.endPos)
}
if (how == "END_TO_START") {
return compareNodes(this.endNode, this.endPos, range.startNode,
range.startPos)
}
if (how == "END_TO_END") {
return compareNodes(this.endNode, this.endPos, range.endNode,
range.endPos)
}
};
this.setTextStart = function(node, pos) {
var textNode = node;
Ext.ux.designHelper.util.eachNode(node, function(n) {
if (Ext.ux.designHelper.util.getNodeType(n) == 3
&& n.nodeValue.length > 0
|| Ext.ux.designHelper.util.getNodeType(n) == 88) {
textNode = n;
pos = 0;
return false
}
return true
});
this.setStart(textNode, pos)
};
this.setStart = function(node, pos) {
this.startNode = node;
this.startPos = pos;
if (this.endNode === null) {
this.endNode = node;
this.endPos = pos
}
};
this.setTextEnd = function(node, pos) {
var textNode = node;
Ext.ux.designHelper.util.eachNode(node, function(n) {
if (Ext.ux.designHelper.util.getNodeType(n) == 3
&& n.nodeValue.length > 0
|| Ext.ux.designHelper.util.getNodeType(n) == 88) {
textNode = n;
pos = Ext.ux.designHelper.util.getNodeType(n) == 3
? n.nodeValue.length
: 0
}
return true
});
this.setEnd(textNode, pos)
};
this.setEnd = function(node, pos) {
this.endNode = node;
this.endPos = pos;
if (this.startNode === null) {
this.startNode = node;
this.startPos = pos
}
};
this.selectNode = function(node) {
this.setStart(node, 0);
this.setEnd(node, node.nodeType == 1 ? 0 : node.nodeValue.length)
};
this.selectTextNode = function(node) {
this.setTextStart(node, 0);
this.setTextEnd(node, node.nodeType == 1 ? 0 : node.nodeValue.length)
};
this.extractContents = function(isDelete) {
isDelete = (isDelete === false) ? false : true;
var thisRange = this;
var startNode = this.startNode;
var startPos = this.startPos;
var endNode = this.endNode;
var endPos = this.endPos;
var extractTextNode = function(node, startPos, endPos) {
var length = node.nodeValue.length;
var cloneNode = node.cloneNode(true);
var centerNode = cloneNode.splitText(startPos);
centerNode.splitText(endPos - startPos);
if (isDelete) {
var center = node;
if (startPos > 0) {
center = node.splitText(startPos)
}
if (endPos < length) {
center.splitText(endPos - startPos)
}
center.parentNode.removeChild(center)
}
return centerNode
};
var isStarted = false;
var isEnd = false;
var extractNodes = function(parent, frag) {
if (Ext.ux.designHelper.util.getNodeType(parent) != 1) {
return true
}
var node = parent.firstChild;
while (node) {
if (node == startNode) {
isStarted = true
}
if (node == endNode) {
isEnd = true
}
var nextNode = node.nextSibling;
var type = node.nodeType;
if (type == 1) {
var range = new Ext.ux.designHelper.range(doc);
range.selectNode(node);
if (isStarted
&& range.comparePoints("END_TO_END", thisRange) < 0) {
var cloneNode = node.cloneNode(true);
frag.appendChild(cloneNode);
if (isDelete) {
node.parentNode.removeChild(node)
}
} else {
var childFlag = node.cloneNode(false);
frag.appendChild(childFlag);
if (!extractNodes(node, childFlag)) {
return false
}
}
}
node = nextNode;
if (isEnd) {
return false
}
}
return true
};
var parentNode = this.getParentElement();
var docFrag = parentNode.cloneNode(false);
extractNodes(parentNode, docFrag);
return docFrag
}
};
Ext.ux.designHelper.cmd = function(iframeWin, iframeDoc) {
this.doc = iframeDoc;
this.sdSel = new Ext.ux.designHelper.selection(iframeWin, iframeDoc);
this.sdRange = this.sdSel.sdRange;
this.mergeAttributes = function(el, attr) {
for (var i = 0, len = attr.length; i < len; i++) {
Ext.ux.designHelper.util.each(attr[i], function(key, value) {
if (key.charAt(0) == ".") {
var jsKey = Ext.ux.designHelper.util.getJsKey(key
.substr(1));
eval("el.style." + jsKey + " = value;")
} else {
el.setAttribute(key, value)
}
})
}
return el
};
this.wrapTextNode = function(node, startPos, endPos, element, attributes) {
var length = node.nodeValue.length;
var isFull = (startPos == 0 && endPos == length);
var range = new Ext.ux.designHelper.range(this.doc);
range.selectTextNode(node.parentNode);
if (isFull && node.parentNode.tagName == element.tagName
&& range.comparePoints("END_TO_END", this.sdRange) <= 0
&& range.comparePoints("START_TO_START", this.sdRange) >= 0) {
this.mergeAttributes(node.parentNode, attributes);
return node
} else {
var el = element.cloneNode(true);
if (isFull) {
var cloneNode = node.cloneNode(true);
el.appendChild(cloneNode);
node.parentNode.replaceChild(el, node);
return cloneNode
} else {
var centerNode = node;
if (startPos < endPos) {
if (startPos > 0) {
centerNode = node.splitText(startPos)
}
if (endPos < length) {
centerNode.splitText(endPos - startPos)
}
var cloneNode = centerNode.cloneNode(true);
el.appendChild(cloneNode);
centerNode.parentNode.replaceChild(el, centerNode);
return cloneNode
} else {
if (startPos < length) {
centerNode = node.splitText(startPos);
centerNode.parentNode.insertBefore(el, centerNode)
} else {
if (centerNode.nextSibling) {
centerNode.parentNode.insertBefore(el,
centerNode.nextSibling)
} else {
centerNode.parentNode.appendChild(el)
}
}
return el
}
}
}
};
this.wrap = function(tagName, attributes) {
var self = this;
this.sdSel.focus();
var element = this.doc.createElement(tagName);
this.mergeAttributes(element, attributes);
var sdRange = this.sdRange;
var startNode = sdRange.startNode;
var startPos = sdRange.startPos;
var endNode = sdRange.endNode;
var endPos = sdRange.endPos;
var parentNode = sdRange.getParentElement();
var isStarted = false;
Ext.ux.designHelper.util.eachNode(parentNode, function(node) {
if (node == startNode) {
isStarted = true
}
if (node.nodeType == 1) {
if (node == startNode && node == endNode) {
if (Ext.ux.designHelper.util.inArray(node.tagName
.toLowerCase(), ["br", "hr", "img", "area",
"col", "embed", "input", "param"])) {
if (startPos > 0) {
node.parentNode.appendChild(element)
} else {
node.parentNode.insertBefore(element, node)
}
} else {
node.appendChild(element)
}
sdRange.selectNode(element);
return false
} else {
if (node == startNode) {
sdRange.setStart(node, 0)
} else {
if (node == endNode) {
sdRange.setEnd(node, 0);
return false
}
}
}
} else {
if (node.nodeType == 3) {
if (isStarted) {
if (node == startNode && node == endNode) {
var rangeNode = self.wrapTextNode(node, startPos,
endPos, element, attributes);
sdRange.selectNode(rangeNode);
return false
} else {
if (node == startNode) {
var rangeNode = self.wrapTextNode(node,
startPos, node.nodeValue.length,
element, attributes);
sdRange.setStart(rangeNode, 0)
} else {
if (node == endNode) {
var rangeNode = self.wrapTextNode(node, 0,
endPos, element, attributes);
sdRange
.setEnd(
rangeNode,
rangeNode.nodeType == 1
? 0
: rangeNode.nodeValue.length);
return false
} else {
self.wrapTextNode(node, 0,
node.nodeValue.length, element,
attributes)
}
}
}
}
}
}
return true
});
this.sdSel.addRange(sdRange)
};
this.execLink = function(url, txt, stype) {
var startNode = this.sdRange.startNode;
var endNode = this.sdRange.endNode;
var node = this.sdRange.getParentElement();
while (node) {
if (node.tagName.toLowerCase() == "a"
|| node.tagName.toLowerCase() == "body") {
break
}
node = node.parentNode
}
node = node.parentNode;
if (startNode.nodeType == 1 && startNode === endNode) {
return
}
if (Ext.isIE) {
var html = '' + txt
+ "";
this.sdSel.range.pasteHTML(html)
} else {
var arr = node.getElementsByTagName("a");
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i].href.match(/\/?_tmp_link_url_$/)) {
arr[i].href = "#"
}
}
this.doc.execCommand("createlink", false, "_tmp_link_url_");
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i].href.match(/\/?_tmp_link_url_$/)) {
arr[i].setAttribute("tmpurl", (stype == "web"
? url
: "mailto:" + url));
arr[i].setAttribute("target", "_blank")
}
}
}
};
this.execWordLink = function(url, txt, stype) {
var startNode = this.sdRange.startNode;
var endNode = this.sdRange.endNode;
var node = this.sdRange.getParentElement();
while (node) {
if (node.tagName.toLowerCase() == "a"
|| node.tagName.toLowerCase() == "body") {
break
}
node = node.parentNode
}
node = node.parentNode;
if (startNode.nodeType == 1 && startNode === endNode) {
return
}
if (Ext.isIE) {
var html = ''
+ this.sdSel.range.text + "";
this.sdSel.range.pasteHTML(html)
}
}
};
Ext.ux.designHelper.util = {
inArray : function(str, arr) {
for (var i = 0; i < arr.length; i++) {
if (str == arr[i]) {
return true
}
}
return false
},
getJsKey : function(key) {
var arr = key.split("-");
key = "";
for (var i = 0, len = arr.length; i < len; i++) {
key += (i > 0)
? arr[i].charAt(0).toUpperCase() + arr[i].substr(1)
: arr[i]
}
return key
},
createRange : function(doc) {
return doc.createRange ? doc.createRange() : doc.body.createTextRange()
},
getNodeType : function(node) {
return (node.nodeType == 1 && Ext.ux.designHelper.util.inArray(
node.tagName.toLowerCase(), ["br", "hr", "img", "area", "col",
"embed", "input", "param"])) ? 88 : node.nodeType
},
getNodeTextLength : function(node) {
var type = Ext.ux.designHelper.util.getNodeType(node);
if (type == 1) {
var html = node.innerHTML;
return html.replace(/<.*?>/ig, "").length
} else {
if (type == 3) {
return node.nodeValue.length
}
}
},
getNodeStartRange : function(doc, node) {
var range = Ext.ux.designHelper.util.createRange(doc);
var type = node.nodeType;
if (type == 1) {
range.moveToElementText(node);
return range
} else {
if (type == 3) {
var offset = 0;
var sibling = node.previousSibling;
while (sibling) {
if (sibling.nodeType == 1) {
var nodeRange = Ext.ux.designHelper.util
.createRange(doc);
nodeRange.moveToElementText(sibling);
range.setEndPoint("StartToEnd", nodeRange);
range.moveStart("character", offset);
return range
} else {
if (sibling.nodeType == 3) {
offset += sibling.nodeValue.length
}
}
sibling = sibling.previousSibling
}
range.moveToElementText(node.parentNode);
range.moveStart("character", offset);
return range
}
}
},
each : function(obj, func) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
func(key, obj[key])
}
}
},
eachNode : function(node, func) {
var walkNodes = function(parent) {
if (Ext.ux.designHelper.util.getNodeType(parent) != 1) {
return true
}
var n = parent.firstChild;
while (n) {
var next = n.nextSibling;
if (!func(n)) {
return false
}
if (!walkNodes(n)) {
return false
}
n = next
}
return true
};
walkNodes(node)
},
getStyleOfSelection : function(win, doc, style) {
var selection = new Ext.ux.designHelper.selection(win, doc);
var range = selection.sdRange;
if (range) {
var pn = range.startNode;
if (pn) {
if (pn.tagName) {
pn = Ext.fly(pn)
} else {
pn = Ext.fly(range.getParentElement())
}
if (pn) {
return pn.getStyle(style)
}
}
}
},
getStartNodeOfSelection : function(win, doc) {
var selection = new Ext.ux.designHelper.selection(win, doc);
var range = selection.sdRange;
if (range) {
var pn = range.startNode;
if (pn) {
if (pn.tagName) {
pn = Ext.fly(pn)
} else {
pn = Ext.fly(range.getParentElement())
}
if (pn) {
return pn
}
}
}
},
getBackgroundColor : function(El, doc) {
doc = doc || document;
var bg = El.getStyle("background-color");
while (("transparent" == bg || !bg) && El && (El.dom.parentNode != doc)) {
El = Ext.fly(El.dom.parentNode);
if (El) {
bg = El.getStyle("background-color")
}
}
return bg
},
hasClass : function(El, doc, className) {
doc = doc || document;
while (El && (El.dom.parentNode != doc)) {
if (El.hasClass(className)) {
return El
}
El = Ext.fly(El.dom.parentNode)
}
},
selectRange : function(doc, win) {
var selection = new Ext.ux.designHelper.selection(win, doc);
var r = selection.sdRange;
doc.execCommand("SelectAll", false, null);
selection.addRange(r)
},
getSelectedText : function(win, doc) {
if (win.getSelection) {
return doc.getSelection().toString()
} else {
if (doc.getSelection) {
return doc.getSelection()
} else {
if (doc.selection) {
return doc.selection.createRange().text
}
}
}
}
};
Ext.ns("Ext.ux");
Ext.ux.MessagePusher = Ext.extend(Ext.Window, {
iconCls : "cubedrive_icon",
title : "News",
width : 380,
height : 180,
closable : true,
plain : false,
resizable : false,
animCollapse : false,
manager : {
register : Ext.emptyFn,
unregister : Ext.emptyFn,
bringToFront : Ext.emptyFn,
sendToBack : Ext.emptyFn
},
initComponent : function() {
this.layout = "fit";
var p;
if (Ext.isIE) {
p = 96
} else {
p = 100
}
this.tpl = new Ext.XTemplate('Cubedrive Notification ');
this.tpl.compile();
this.viewpanel = new Ext.Panel({
autoScroll : true,
bodyStyle : "background:transparent;",
border : false
});
this.items = [this.viewpanel];
this.tools = [{
id : "down",
handler : this.onDownFn,
scope : this
}, {
id : "up",
hidden : true,
handler : this.onUpFn,
scope : this
}];
Ext.ux.MessagePusher.superclass.initComponent.call(this);
this.on("show", this.onShowFn, this);
this.on("render", function() {
this.body.on("click", function(e) {
var tgEl = Ext.get(e.getTarget());
if (tgEl.hasClass("invitation")) {
var vid = e.getTarget()
.getAttribute("name");
this.onAcceptInvitation(vid)
} else {
if (tgEl.hasClass("reject")) {
var vid = e.getTarget()
.getAttribute("name");
this.onRejectInvitation(vid)
} else {
if (tgEl.hasClass("groupInvitation")) {
var vid = e.getTarget()
.getAttribute("name");
this.onGroupInvitation(vid)
} else {
if (tgEl.hasClass("groupReject")) {
var vid = e.getTarget()
.getAttribute("name");
this.onGroupReject(vid)
}
}
}
}
}, this)
})
},
changeTool : function(id) {
if ("up" == id) {
this.tools.down.hide();
this.tools.up.show()
} else {
this.tools.up.hide();
this.tools.down.show()
}
},
onUpFn : function(event, tEl, p) {
this.changeTool("down");
var ch = this.getSize().height;
this.expand();
var eh = this.getSize().height;
var pos = this.getPosition(true);
this.setPosition(pos[0], pos[1] + ch - eh)
},
onDownFn : function(event, tEl, p) {
this.changeTool("up");
var eh = this.getSize().height;
this.collapse();
var ch = this.getSize().height;
var pos = this.getPosition(true);
this.setPosition(pos[0], pos[1] + eh - ch)
},
popup : function(messages) {
this.messages = messages;
if (this.isVisible()) {
if (this.collapsed) {
this.onUpFn()
}
this.onShowFn()
} else {
this.show();
if (true != this.mini) {
this.expand();
this.changeTool("down")
} else {
this.collapse();
this.changeTool("up")
}
var taskBar = Ext.get("ux-taskbar");
if (taskBar) {
this.el.alignTo(taskBar, "br-tr", [-1, -1])
} else {
this.el.alignTo(Ext.getBody(), "br-br", [-10, -10])
}
this.el.slideIn("b", {
duration : 0.7
})
}
},
onShowFn : function(p) {
var len = this.messages.length;
if (0 < len) {
this.setTitle("Notification(" + len + ")");
var html = this.tpl.apply(this.messages);
this.viewpanel.body.update(html);
this.viewpanel.body.highlight("#c3daf9", {
block : true
})
} else {
this.hide()
}
},
onAcceptInvitation : function(id) {
Ext.Ajax.request({
url : "contactPending/accept",
params : {
id : id
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
Ext.Message.msgStay(feyaSoft.lang.common.confirm,
jsonData.info, 2000)
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
jsonData.info)
}
},
failure : function(result, request) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Internal Error")
},
scope : this
})
},
onRejectInvitation : function(id) {
Ext.Ajax.request({
url : "contactPending/reject",
params : {
id : id
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
Ext.Message.msgStay(feyaSoft.lang.common.confirm,
jsonData.info, 2000)
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
jsonData.info)
}
},
failure : function(result, request) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Internal Error")
},
scope : this
})
},
onGroupInvitation : function(id) {
Ext.Ajax.request({
url : "locationUserPending/accept",
params : {
id : id
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
Ext.Message.msgStay(feyaSoft.lang.common.confirm,
jsonData.info, 2000)
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
jsonData.info)
}
},
failure : function(result, request) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Internal Error")
},
scope : this
})
},
onGroupReject : function(id) {
Ext.Ajax.request({
url : "locationUserPending/reject",
params : {
id : id
},
method : "GET",
success : function(result, request) {
var jsonData = Ext.util.JSON
.decode(result.responseText);
if (jsonData.success == "true") {
Ext.Message.msgStay(feyaSoft.lang.common.confirm,
jsonData.info, 2000)
} else {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
jsonData.info)
}
},
failure : function(result, request) {
Ext.MessageBox.alert(feyaSoft.lang.common.error,
"Internal Error")
},
scope : this
})
}
});
Ext.ux.SlidingPager = Ext.extend(Object, {
init : function(pbar) {
Ext.each(pbar.items.getRange(2, 6), function(c) {
c.hide()
});
var slider = new Ext.Slider({
width : 114,
minValue : 1,
maxValue : 1,
plugins : new Ext.ux.SliderTip({
getText : function(s) {
return String
.format(
"Page {0} of {1}",
s.value, s.maxValue)
}
}),
listeners : {
changecomplete : function(s, v) {
pbar.changePage(v)
}
}
});
pbar.insert(5, slider);
pbar.on({
change : function(pb, data) {
slider.maxValue = data.pages;
slider.setValue(data.activePage)
},
beforedestroy : function() {
slider.destroy()
}
})
}
}); |