Skip to content

Commit 824fa74

Browse files
committed
- add sorting API
- bump version
1 parent bc45355 commit 824fa74

File tree

9 files changed

+122
-5
lines changed

9 files changed

+122
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Change Logs
22

3+
## v0.5.9
4+
5+
- add sorting API
6+
7+
38
## v0.5.8
49

510
- support html parsing when HTML code is detected in paste event.

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ initialize:
7272
- `rowspan`: span of row. will be 1 if omitted
7373
- `{}` = the whole table selected, based on the definition of the selection object.
7474
- otherwise, set selection based on the `opt` selection range object described as above.
75+
- `slice()`: delete selected rows/columns
76+
- `insert()`: insert empty row/column at selected location.
77+
- `sort(opt)`: sort data based on selected column. `opt` is an object with following fields as options:
78+
- `dir`: direction. either `asc` or `desc`, by default `asc`.
7579

7680

7781
## Event

dist/index.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,6 +1181,53 @@
11811181
this._data = it;
11821182
return this.render();
11831183
},
1184+
sort: function(o){
1185+
var ref$, sc, ec, sr, er, d, this$ = this;
1186+
o == null && (o = {});
1187+
ref$ = this._bound({
1188+
defined: false
1189+
}), sc = ref$.sc, ec = ref$.ec, sr = ref$.sr, er = ref$.er;
1190+
d = this._data.map(function(d, i){
1191+
return {
1192+
d: d,
1193+
i: i
1194+
};
1195+
});
1196+
d.sort(function(a, b){
1197+
if (a.i < this$.frozen.row) {
1198+
if (b.i >= this$.frozen.row) {
1199+
return -1;
1200+
}
1201+
}
1202+
if (b.i < this$.frozen.row) {
1203+
if (a.i >= this$.frozen.row) {
1204+
return 1;
1205+
}
1206+
}
1207+
a = isNaN(+a.d[sc])
1208+
? a.d[sc]
1209+
: +a.d[sc];
1210+
b = isNaN(+b.d[sc])
1211+
? b.d[sc]
1212+
: +b.d[sc];
1213+
return (o.dir === 'asc'
1214+
? 1
1215+
: -1) * (a > b
1216+
? 1
1217+
: a < b ? -1 : 0);
1218+
});
1219+
this._data = d.map(function(d){
1220+
return d.d;
1221+
});
1222+
this.fire('change', {
1223+
row: 0,
1224+
col: 0,
1225+
data: this._data,
1226+
range: true
1227+
});
1228+
this.renderSelection();
1229+
return this.render();
1230+
},
11841231
insert: function(){
11851232
var ref$, sc, ec, sr, er, d;
11861233
ref$ = this._bound({

dist/index.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"name": "@plotdb/sheet",
44
"license": "MIT",
55
"description": "spreadsheet",
6-
"version": "0.5.8",
6+
"version": "0.5.9",
77
"style": "dist/index.min.css",
88
"browser": "dist/index.min.js",
99
"main": "dist/index.min.js",

src/index.ls

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,20 @@ sheet.prototype = Object.create(Object.prototype) <<< do
593593
@_data = it
594594
@render!
595595
596+
sort: (o={}) ->
597+
{sc,ec,sr,er} = @_bound defined: false
598+
d = @_data.map (d,i) -> {d,i}
599+
d.sort (a,b) ~>
600+
if a.i < @frozen.row => if b.i >= @frozen.row => return -1
601+
if b.i < @frozen.row => if a.i >= @frozen.row => return 1
602+
a = if isNaN(+a.d[sc]) => a.d[sc] else +a.d[sc]
603+
b = if isNaN(+b.d[sc]) => b.d[sc] else +b.d[sc]
604+
(if o.dir == \asc => 1 else -1) * (if a > b => 1 else if a < b => -1 else 0)
605+
@_data = d.map (d) -> d.d
606+
@fire \change, {row: 0, col: 0, data: @_data, range: true}
607+
@render-selection!
608+
@render!
609+
596610
insert: ->
597611
{sc,ec,sr,er} = @_bound defined: false
598612
if !ec? => d = @_data.splice sr, 0, []

web/static/assets/lib/@plotdb/sheet/dev/index.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,6 +1181,53 @@
11811181
this._data = it;
11821182
return this.render();
11831183
},
1184+
sort: function(o){
1185+
var ref$, sc, ec, sr, er, d, this$ = this;
1186+
o == null && (o = {});
1187+
ref$ = this._bound({
1188+
defined: false
1189+
}), sc = ref$.sc, ec = ref$.ec, sr = ref$.sr, er = ref$.er;
1190+
d = this._data.map(function(d, i){
1191+
return {
1192+
d: d,
1193+
i: i
1194+
};
1195+
});
1196+
d.sort(function(a, b){
1197+
if (a.i < this$.frozen.row) {
1198+
if (b.i >= this$.frozen.row) {
1199+
return -1;
1200+
}
1201+
}
1202+
if (b.i < this$.frozen.row) {
1203+
if (a.i >= this$.frozen.row) {
1204+
return 1;
1205+
}
1206+
}
1207+
a = isNaN(+a.d[sc])
1208+
? a.d[sc]
1209+
: +a.d[sc];
1210+
b = isNaN(+b.d[sc])
1211+
? b.d[sc]
1212+
: +b.d[sc];
1213+
return (o.dir === 'asc'
1214+
? 1
1215+
: -1) * (a > b
1216+
? 1
1217+
: a < b ? -1 : 0);
1218+
});
1219+
this._data = d.map(function(d){
1220+
return d.d;
1221+
});
1222+
this.fire('change', {
1223+
row: 0,
1224+
col: 0,
1225+
data: this._data,
1226+
range: true
1227+
});
1228+
this.renderSelection();
1229+
return this.render();
1230+
},
11841231
insert: function(){
11851232
var ref$, sc, ec, sr, er, d;
11861233
ref$ = this._bound({

web/static/assets/lib/@plotdb/sheet/dev/index.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)