You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.6 KiB
60 lines
1.6 KiB
2 years ago
|
const colCache = require('../utils/col-cache');
|
||
|
const Anchor = require('./anchor');
|
||
|
|
||
|
class Image {
|
||
|
constructor(worksheet, model) {
|
||
|
this.worksheet = worksheet;
|
||
|
this.model = model;
|
||
|
}
|
||
|
|
||
|
get model() {
|
||
|
switch (this.type) {
|
||
|
case 'background':
|
||
|
return {
|
||
|
type: this.type,
|
||
|
imageId: this.imageId,
|
||
|
};
|
||
|
case 'image':
|
||
|
return {
|
||
|
type: this.type,
|
||
|
imageId: this.imageId,
|
||
|
hyperlinks: this.range.hyperlinks,
|
||
|
range: {
|
||
|
tl: this.range.tl.model,
|
||
|
br: this.range.br && this.range.br.model,
|
||
|
ext: this.range.ext,
|
||
|
editAs: this.range.editAs,
|
||
|
},
|
||
|
};
|
||
|
default:
|
||
|
throw new Error('Invalid Image Type');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
set model({type, imageId, range, hyperlinks}) {
|
||
|
this.type = type;
|
||
|
this.imageId = imageId;
|
||
|
|
||
|
if (type === 'image') {
|
||
|
if (typeof range === 'string') {
|
||
|
const decoded = colCache.decode(range);
|
||
|
this.range = {
|
||
|
tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),
|
||
|
br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),
|
||
|
editAs: 'oneCell',
|
||
|
};
|
||
|
} else {
|
||
|
this.range = {
|
||
|
tl: new Anchor(this.worksheet, range.tl, 0),
|
||
|
br: range.br && new Anchor(this.worksheet, range.br, 0),
|
||
|
ext: range.ext,
|
||
|
editAs: range.editAs,
|
||
|
hyperlinks: hyperlinks || range.hyperlinks,
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Image;
|