Commit 2d7238f3 authored by Alexander.Trofimov's avatar Alexander.Trofimov

fix bug 20834

parent 86139e1b
...@@ -5275,11 +5275,19 @@ function parseNum( str ) { ...@@ -5275,11 +5275,19 @@ function parseNum( str ) {
return !isNaN( str ); return !isNaN( str );
} }
function matching( x, y, oper ) { function matching(x, y, operator) {
var res = false, rS; var res = false, rS;
if ( y instanceof cString ) { if (cElementType.string === y.type) {
rS = searchRegExp2( x.value, y.toString() ); y = y.toString();
switch ( oper ) { if ('' === y) {
// Empty compare string
rS = (cElementType.empty === x.type);
} else {
// Equal only string values
rS = (cElementType.string === x.type) ? searchRegExp2(x.value, y) : false;
}
switch (operator) {
case "<>": case "<>":
res = !rS; res = !rS;
break; break;
...@@ -5288,22 +5296,23 @@ function matching( x, y, oper ) { ...@@ -5288,22 +5296,23 @@ function matching( x, y, oper ) {
res = rS; res = rS;
break; break;
} }
} else if (typeof x === typeof y) { } else {
switch ( oper ) { rS = (x.type === y.type);
switch (operator) {
case "<>": case "<>":
res = (x.value != y.value); res = !rS || (x.value != y.value);
break; break;
case ">": case ">":
res = (x.value > y.value); res = rS && (x.value > y.value);
break; break;
case "<": case "<":
res = (x.value < y.value); res = rS && (x.value < y.value);
break; break;
case ">=": case ">=":
res = (x.value >= y.value); res = rS && (x.value >= y.value);
break; break;
case "<=": case "<=":
res = (x.value <= y.value); res = rS && (x.value <= y.value);
break; break;
case "=": case "=":
default: default:
...@@ -5312,7 +5321,7 @@ function matching( x, y, oper ) { ...@@ -5312,7 +5321,7 @@ function matching( x, y, oper ) {
} }
} }
return res; return res;
} }
function GetDiffDate360( nDay1, nMonth1, nYear1, nDay2, nMonth2, nYear2, bUSAMethod ) { function GetDiffDate360( nDay1, nMonth1, nYear1, nDay2, nMonth2, nYear2, bUSAMethod ) {
var nDayDiff; var nDayDiff;
......
...@@ -1145,11 +1145,7 @@ cCOUNTBLANK.prototype.getInfo = function () { ...@@ -1145,11 +1145,7 @@ cCOUNTBLANK.prototype.getInfo = function () {
}; };
}; };
function cCOUNTIF() { function cCOUNTIF() {
// cBaseFunction.call( this, "COUNTIF" );
// this.setArgumentsMin( 2 );
// this.setArgumentsMax( 2 );
this.name = "COUNTIF"; this.name = "COUNTIF";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -1157,69 +1153,63 @@ function cCOUNTIF() { ...@@ -1157,69 +1153,63 @@ function cCOUNTIF() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 2; this.argumentsMax = 2;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
} }
cCOUNTIF.prototype = Object.create( cBaseFunction.prototype ); cCOUNTIF.prototype = Object.create(cBaseFunction.prototype);
cCOUNTIF.prototype.Calculate = function ( arg ) { cCOUNTIF.prototype.Calculate = function (arg) {
var arg0 = arg[0], arg1 = arg[1], _count = 0, valueForSearching; var arg0 = arg[0], arg1 = arg[1], _count = 0, valueForSearching;
if ( !(arg0 instanceof cRef || arg0 instanceof cRef3D || arg0 instanceof cArea || arg0 instanceof cArea3D) ) { if (!(arg0 instanceof cRef || arg0 instanceof cRef3D || arg0 instanceof cArea || arg0 instanceof cArea3D)) {
return this.value = new cError( cErrorType.wrong_value_type ); return this.value = new cError(cErrorType.wrong_value_type);
} }
if ( arg1 instanceof cArea || arg1 instanceof cArea3D ) { if (arg1 instanceof cArea || arg1 instanceof cArea3D) {
arg1 = arg1.cross( arguments[1].first ); arg1 = arg1.cross(arguments[1].first);
} } else if (arg1 instanceof cArray) {
else if ( arg1 instanceof cArray ) { arg1 = arg1.getElementRowCol(0, 0);
arg1 = arg1.getElementRowCol( 0, 0 );
} }
arg1 = arg1.tocString(); arg1 = arg1.tocString();
if ( !(arg1 instanceof cString) ) { if (!(arg1 instanceof cString)) {
return this.value = new cError( cErrorType.wrong_value_type ); return this.value = new cError(cErrorType.wrong_value_type);
} }
arg1 = arg1.toString(); arg1 = arg1.toString();
var operators = new RegExp( "^ *[<=> ]+ *" ), search, oper, val, var operators = new RegExp("^ *[<=> ]+ *"), search, oper, val, match = arg1.match(operators);
match = arg1.match( operators );
if ( match ) { if (match) {
search = arg1.substr( match[0].length ); search = arg1.substr(match[0].length);
oper = match[0].replace( /\s/g, "" ); oper = match[0].replace(/\s/g, "");
} } else {
else {
search = arg1; search = arg1;
} }
valueForSearching = parseNum( search ) ? new cNumber( search ) : new cString( search ); valueForSearching = parseNum(search) ? new cNumber(search) : new cString(search);
if ( arg0 instanceof cArea ) { if (arg0 instanceof cArea) {
arg0.foreach2( function ( _val ) { arg0.foreach2(function (_val) {
_count += matching( _val, valueForSearching, oper ); _count += matching(_val, valueForSearching, oper);
} ) })
} } else if (arg0 instanceof cArea3D) {
else if ( arg0 instanceof cArea3D ) {
val = arg0.getValue(); val = arg0.getValue();
for ( var i = 0; i < val.length; i++ ) { for (var i = 0; i < val.length; i++) {
_count += matching( val[i], valueForSearching, oper ); _count += matching(val[i], valueForSearching, oper);
}
} }
else { } else {
val = arg0.getValue(); val = arg0.getValue();
_count += matching( val, valueForSearching, oper ); _count += matching(val, valueForSearching, oper);
} }
return this.value = new cNumber( _count ); return this.value = new cNumber(_count);
}; };
cCOUNTIF.prototype.getInfo = function () { cCOUNTIF.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( cell-range, selection-criteria )"
args:"( cell-range, selection-criteria )" };
}; };
};
function cCOUNTIFS() { function cCOUNTIFS() {
cBaseFunction.call( this, "COUNTIFS" ); cBaseFunction.call( this, "COUNTIFS" );
......
...@@ -191,82 +191,83 @@ ...@@ -191,82 +191,83 @@
return this; return this;
} }
CellEditor.prototype._init = function ( settings ) { CellEditor.prototype._init = function (settings) {
var t = this; var t = this;
var z = t.defaults.canvasZIndex; var z = t.defaults.canvasZIndex;
this.defaults.padding = settings.padding; this.defaults.padding = settings.padding;
if ( null != this.element ) { if (null != this.element) {
t.canvasOuter = document.createElement( 'div' ); t.canvasOuter = document.createElement('div');
t.canvasOuter.id = "ce-canvas-outer"; t.canvasOuter.id = "ce-canvas-outer";
t.canvasOuter.style.display = "none"; t.canvasOuter.style.display = "none";
t.canvasOuter.style.zIndex = z; t.canvasOuter.style.zIndex = z;
var innerHTML = '<canvas id="ce-canvas" style="z-index: ' + (z + 1) + '"></canvas>'; var innerHTML = '<canvas id="ce-canvas" style="z-index: ' + (z + 1) + '"></canvas>';
innerHTML += '<canvas id="ce-canvas-overlay" style="z-index: ' + (z + 2) + '; cursor: ' + t.defaults.cursorShape + '"></canvas>'; innerHTML += '<canvas id="ce-canvas-overlay" style="z-index: ' + (z + 2) + '; cursor: ' + t.defaults.cursorShape +
'"></canvas>';
innerHTML += '<div id="ce-cursor" style="display: none; z-index: ' + (z + 3) + '"></div>'; innerHTML += '<div id="ce-cursor" style="display: none; z-index: ' + (z + 3) + '"></div>';
t.canvasOuter.innerHTML = innerHTML; t.canvasOuter.innerHTML = innerHTML;
this.element.appendChild( t.canvasOuter ); this.element.appendChild(t.canvasOuter);
t.canvasOuterStyle = t.canvasOuter.style; t.canvasOuterStyle = t.canvasOuter.style;
t.canvas = document.getElementById( "ce-canvas" ); t.canvas = document.getElementById("ce-canvas");
t.canvasOverlay = document.getElementById( "ce-canvas-overlay" ); t.canvasOverlay = document.getElementById("ce-canvas-overlay");
t.cursor = document.getElementById( "ce-cursor" ); t.cursor = document.getElementById("ce-cursor");
t.cursorStyle = t.cursor.style; t.cursorStyle = t.cursor.style;
} }
// create text render // create text render
t.drawingCtx = new asc.DrawingContext( { t.drawingCtx = new asc.DrawingContext({
canvas: t.canvas, units: 1/*pt*/, fmgrGraphics: this.fmgrGraphics, font: this.m_oFont canvas: t.canvas, units: 1/*pt*/, fmgrGraphics: this.fmgrGraphics, font: this.m_oFont
} ); });
t.overlayCtx = new asc.DrawingContext( { t.overlayCtx = new asc.DrawingContext({
canvas: t.canvasOverlay, units: 1/*pt*/, fmgrGraphics: this.fmgrGraphics, font: this.m_oFont canvas: t.canvasOverlay, units: 1/*pt*/, fmgrGraphics: this.fmgrGraphics, font: this.m_oFont
} ); });
t.textRender = new AscCommonExcel.CellTextRender( t.drawingCtx ); t.textRender = new AscCommonExcel.CellTextRender(t.drawingCtx);
t.textRender.setDefaultFont( settings.font.clone() ); t.textRender.setDefaultFont(settings.font.clone());
// bind event handlers // bind event handlers
if ( t.canvasOuter && t.canvasOuter.addEventListener ) { if (t.canvasOuter && t.canvasOuter.addEventListener) {
t.canvasOuter.addEventListener( "mousedown", function () { t.canvasOuter.addEventListener("mousedown", function () {
return t._onMouseDown.apply( t, arguments ); return t._onMouseDown.apply(t, arguments);
}, false ); }, false);
t.canvasOuter.addEventListener( "mouseup", function () { t.canvasOuter.addEventListener("mouseup", function () {
return t._onMouseUp.apply( t, arguments ); return t._onMouseUp.apply(t, arguments);
}, false ); }, false);
t.canvasOuter.addEventListener( "mousemove", function () { t.canvasOuter.addEventListener("mousemove", function () {
return t._onMouseMove.apply( t, arguments ); return t._onMouseMove.apply(t, arguments);
}, false ); }, false);
t.canvasOuter.addEventListener( "mouseleave", function () { t.canvasOuter.addEventListener("mouseleave", function () {
return t._onMouseLeave.apply( t, arguments ); return t._onMouseLeave.apply(t, arguments);
}, false ); }, false);
} }
// check input, it may have zero len, for mobile version // check input, it may have zero len, for mobile version
if ( t.input && t.input.addEventListener ) { if (t.input && t.input.addEventListener) {
t.input.addEventListener( "focus", function () { t.input.addEventListener("focus", function () {
return t.isOpened ? t._topLineGotFocus.apply( t, arguments ) : true; return t.isOpened ? t._topLineGotFocus.apply(t, arguments) : true;
}, false ); }, false);
t.input.addEventListener( "mousedown", function () { t.input.addEventListener("mousedown", function () {
return t.isOpened ? (t.callTopLineMouseup = true) : true; return t.isOpened ? (t.callTopLineMouseup = true) : true;
}, false ); }, false);
t.input.addEventListener( "mouseup", function () { t.input.addEventListener("mouseup", function () {
return t.isOpened ? t._topLineMouseUp.apply( t, arguments ) : true; return t.isOpened ? t._topLineMouseUp.apply(t, arguments) : true;
}, false ); }, false);
t.input.addEventListener( "input", function () { t.input.addEventListener("input", function () {
return t._onInputTextArea.apply( t, arguments ); return t._onInputTextArea.apply(t, arguments);
}, false ); }, false);
// Не поддерживаем drop на верхнюю строку // Не поддерживаем drop на верхнюю строку
t.input.addEventListener( "drop", function ( e ) { t.input.addEventListener("drop", function (e) {
e.preventDefault(); e.preventDefault();
return false; return false;
}, false ); }, false);
} }
this.fKeyMouseUp = function () { this.fKeyMouseUp = function () {
return t._onWindowMouseUp.apply( t, arguments ); return t._onWindowMouseUp.apply(t, arguments);
}; };
this.fKeyMouseMove = function () { this.fKeyMouseMove = function () {
return t._onWindowMouseMove.apply( t, arguments ); return t._onWindowMouseMove.apply(t, arguments);
}; };
}; };
...@@ -555,13 +556,13 @@ ...@@ -555,13 +556,13 @@
} }
}; };
CellEditor.prototype.setFocus = function ( hasFocus ) { CellEditor.prototype.setFocus = function (hasFocus) {
this.hasFocus = !!hasFocus; this.hasFocus = !!hasFocus;
this.handlers.trigger( "gotFocus", this.hasFocus ); this.handlers.trigger("gotFocus", this.hasFocus);
}; };
CellEditor.prototype.restoreFocus = function () { CellEditor.prototype.restoreFocus = function () {
if ( this.isTopLineActive ) { if (this.isTopLineActive) {
this.input.focus(); this.input.focus();
} }
}; };
...@@ -1597,18 +1598,18 @@ ...@@ -1597,18 +1598,18 @@
var t = this; var t = this;
t.isTopLineActive = true; t.isTopLineActive = true;
t.input.isFocused = true; t.input.isFocused = true;
t.setFocus( true ); t.setFocus(true);
t._hideCursor(); t._hideCursor();
t._updateTopLineCurPos(); t._updateTopLineCurPos();
t._cleanSelection(); t._cleanSelection();
}; };
CellEditor.prototype._topLineMouseUp = function() { CellEditor.prototype._topLineMouseUp = function () {
var t = this; var t = this;
this.callTopLineMouseup = false; this.callTopLineMouseup = false;
// при такой комбинации ctrl+a, click, ctrl+a, click не обновляется selectionStart // при такой комбинации ctrl+a, click, ctrl+a, click не обновляется selectionStart
// поэтому выполняем обработку после обработчика системы // поэтому выполняем обработку после обработчика системы
setTimeout(function() { setTimeout(function () {
var b = t.input.selectionStart; var b = t.input.selectionStart;
var e = t.input.selectionEnd; var e = t.input.selectionEnd;
if (typeof b !== "undefined") { if (typeof b !== "undefined") {
...@@ -1624,25 +1625,24 @@ ...@@ -1624,25 +1625,24 @@
CellEditor.prototype._syncEditors = function () { CellEditor.prototype._syncEditors = function () {
var t = this; var t = this;
var s1 = t._getFragmentsText( t.options.fragments ); var s1 = t._getFragmentsText(t.options.fragments);
var s2 = t.input.value; var s2 = t.input.value;
var l = Math.min( s1.length, s2.length ); var l = Math.min(s1.length, s2.length);
var i1 = 0, i2 = 0; var i1 = 0, i2 = 0;
while ( i1 < l && s1.charAt( i1 ) === s2.charAt( i1 ) ) { while (i1 < l && s1.charAt(i1) === s2.charAt(i1)) {
++i1; ++i1;
} }
i2 = i1 + 1; i2 = i1 + 1;
if ( i2 >= l ) { if (i2 >= l) {
i2 = Math.max( s1.length, s2.length ); i2 = Math.max(s1.length, s2.length);
} } else {
else { while (i2 < l && s1.charAt(i1) !== s2.charAt(i2)) {
while ( i2 < l && s1.charAt( i1 ) !== s2.charAt( i2 ) ) {
++i2; ++i2;
} }
} }
t._addChars( s2.slice( i1, i2 ), i1 ); t._addChars(s2.slice(i1, i2), i1);
}; };
// Content // Content
...@@ -1820,44 +1820,43 @@ ...@@ -1820,44 +1820,43 @@
} }
}; };
CellEditor.prototype._selectChars = function ( kind, pos ) { CellEditor.prototype._selectChars = function (kind, pos) {
var t = this; var t = this;
var begPos, endPos; var begPos, endPos;
begPos = t.selectionBegin === t.selectionEnd ? t.cursorPos : t.selectionBegin; begPos = t.selectionBegin === t.selectionEnd ? t.cursorPos : t.selectionBegin;
t._moveCursor( kind, pos ); t._moveCursor(kind, pos);
endPos = t.cursorPos; endPos = t.cursorPos;
t.selectionBegin = begPos; t.selectionBegin = begPos;
t.selectionEnd = endPos; t.selectionEnd = endPos;
t._drawSelection(); t._drawSelection();
if ( t.isTopLineActive && !t.skipTLUpdate ) { if (t.isTopLineActive && !t.skipTLUpdate) {
t._updateTopLineCurPos(); t._updateTopLineCurPos();
} }
}; };
CellEditor.prototype._changeSelection = function ( coord ) { CellEditor.prototype._changeSelection = function (coord) {
var t = this; var t = this;
function doChangeSelection( coordTmp ) { function doChangeSelection(coordTmp) {
// ToDo реализовать для слова. // ToDo реализовать для слова.
if ( c_oAscCellEditorSelectState.word === t.isSelectMode ) { if (c_oAscCellEditorSelectState.word === t.isSelectMode) {
return; return;
} }
var pos = t._findCursorPosition( coordTmp ); var pos = t._findCursorPosition(coordTmp);
if ( pos !== undefined ) { if (pos !== undefined) {
pos >= 0 ? t._selectChars( kPosition, pos ) : t._selectChars( pos ); pos >= 0 ? t._selectChars(kPosition, pos) : t._selectChars(pos);
} }
} }
if ( window['IS_NATIVE_EDITOR'] ) { if (window['IS_NATIVE_EDITOR']) {
doChangeSelection( coord ); doChangeSelection(coord);
} } else {
else { window.clearTimeout(t.selectionTimer);
window.clearTimeout( t.selectionTimer ); t.selectionTimer = window.setTimeout(function () {
t.selectionTimer = window.setTimeout( function () { doChangeSelection(coord);
doChangeSelection( coord ); }, 0);
}, 0 );
} }
}; };
...@@ -2644,12 +2643,12 @@ ...@@ -2644,12 +2643,12 @@
}; };
/** @param event {MouseEvent} */ /** @param event {MouseEvent} */
CellEditor.prototype._onMouseMove = function ( event ) { CellEditor.prototype._onMouseMove = function (event) {
var coord = this._getCoordinates( event ); var coord = this._getCoordinates(event);
this.clickCounter.mouseMoveEvent( coord.x, coord.y ); this.clickCounter.mouseMoveEvent(coord.x, coord.y);
this.hasCursor = true; this.hasCursor = true;
if ( c_oAscCellEditorSelectState.no !== this.isSelectMode ) { if (c_oAscCellEditorSelectState.no !== this.isSelectMode) {
this._changeSelection( coord ); this._changeSelection(coord);
} }
return true; return true;
}; };
......
...@@ -1277,8 +1277,7 @@ ...@@ -1277,8 +1277,7 @@
//TODO: add checks and error handling //TODO: add checks and error handling
//Get data type //Get data type
var dataObject = JSON.parse(e.data); var dataObject = JSON.parse(e.data);
var type = dataObject['type']; switch (dataObject['type']) {
switch (type) {
case 'auth' : case 'auth' :
t._onAuth(dataObject); t._onAuth(dataObject);
break; break;
...@@ -1325,6 +1324,7 @@ ...@@ -1325,6 +1324,7 @@
break; break;
case 'license': case 'license':
t._onLicense(dataObject); t._onLicense(dataObject);
break;
} }
}; };
sockjs.onclose = function(evt) { sockjs.onclose = function(evt) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment