bugfix
This commit is contained in:
parent
b479461741
commit
3adab2a60e
@ -52,6 +52,10 @@ bricks.Camera = class extends bricks.Popup {
|
|||||||
this.task = schedule_once(this.show_picture.bind(this), this.task_period);
|
this.task = schedule_once(this.show_picture.bind(this), this.task_period);
|
||||||
}
|
}
|
||||||
take_picture(){
|
take_picture(){
|
||||||
|
if (this.task){
|
||||||
|
task.cancel();
|
||||||
|
}
|
||||||
|
this.task = null;
|
||||||
var d = this.imgw.base64();
|
var d = this.imgw.base64();
|
||||||
this.dispatch('shot', d);
|
this.dispatch('shot', d);
|
||||||
// Create a blob from the canvas data URL
|
// Create a blob from the canvas data URL
|
||||||
|
119
bricks/docxviewer.js
Normal file
119
bricks/docxviewer.js
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/* need mammoth module
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/mammoth/1.4.2/mammoth.browser.min.js"></script>
|
||||||
|
*/
|
||||||
|
var bricks = window.bricks || {};
|
||||||
|
|
||||||
|
bricks.DOCXviewer = class extends bricks.VBox {
|
||||||
|
/*
|
||||||
|
url:
|
||||||
|
*/
|
||||||
|
constructor(opts){
|
||||||
|
super(opts);
|
||||||
|
this.bind('on_parent', this.set_url.bind(this));
|
||||||
|
// schedule_once(this.set_url.bind(this, this.url), 0.2);
|
||||||
|
}
|
||||||
|
async set_url(url){
|
||||||
|
var container = this.dom_element
|
||||||
|
var hab = new bricks.HttpArrayBuffer();
|
||||||
|
var ab = await hab.get(this.url);
|
||||||
|
var result = await mammoth.convertToHtml({ arrayBuffer: ab });
|
||||||
|
container.innerHTML = result.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function extractBodyContent(htmlString) {
|
||||||
|
// 正则表达式匹配<body>和</body>之间的内容
|
||||||
|
const regex = /<body[^>]*>([\s\S]*?)<\/body>/i;
|
||||||
|
const matches = htmlString.match(regex);
|
||||||
|
return matches ? matches[1] : null; // 如果匹配到,返回匹配的内容,否则返回null
|
||||||
|
}
|
||||||
|
|
||||||
|
bricks.EXCELviewer = class extends bricks.VBox {
|
||||||
|
constructor(opts){
|
||||||
|
opts.height = "100%",
|
||||||
|
super(opts);
|
||||||
|
this.sheets_w = new bricks.HBox({cheight:3, width:'100%'});
|
||||||
|
this.sheets_w.set_css('scroll');
|
||||||
|
this.cur_sheetname = null;
|
||||||
|
this.container = new bricks.Filler({});
|
||||||
|
this.add_widget(this.container);
|
||||||
|
this.add_widget(this.sheets_w);
|
||||||
|
this.bind('on_parent', this.set_url.bind(this));
|
||||||
|
}
|
||||||
|
async set_url(url){
|
||||||
|
this.sheets_w.clear_widgets();
|
||||||
|
var hab = new bricks.HttpArrayBuffer();
|
||||||
|
var ab = await hab.get(this.url);
|
||||||
|
const data = new Uint8Array(ab);
|
||||||
|
this.workbook = XLSX.read(data, {type: 'array'});
|
||||||
|
this.workbook.SheetNames.forEach((sheetname, index) => {
|
||||||
|
var w = new bricks.Text({text:sheetname, wrap:false});
|
||||||
|
w.set_css('clickable');
|
||||||
|
w.set_style('padding', '10px');
|
||||||
|
w.bind('click', this.show_sheet_by_name.bind(this, sheetname, w));
|
||||||
|
this.sheets_w.add_widget(w);
|
||||||
|
if (index==0){
|
||||||
|
this.show_sheet_by_name(this.workbook.SheetNames[0], w);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
show_sheet_by_name(sheetname, tw){
|
||||||
|
if (this.cur_sheetname == sheetname) return;
|
||||||
|
this.sheets_w.children.forEach(c => c.set_css('selected', true));
|
||||||
|
tw.set_css('selected');
|
||||||
|
const x = new bricks.VScrollPanel({width: '100%', height: '100%'});
|
||||||
|
const sheet = this.workbook.Sheets[sheetname];
|
||||||
|
// const html = extractBodyContent(XLSX.utils.sheet_to_html(sheet));
|
||||||
|
const html = XLSX.utils.sheet_to_html(sheet);
|
||||||
|
x.dom_element.innerHTML = html;
|
||||||
|
this.container.clear_widgets();
|
||||||
|
this.container.add_widget(x);
|
||||||
|
this.cur_sheetname = sheetname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bricks.PDFviewer = class extends bricks.VBox {
|
||||||
|
/*
|
||||||
|
url:
|
||||||
|
*/
|
||||||
|
constructor(opts){
|
||||||
|
opts.width = '100%';
|
||||||
|
super(opts);
|
||||||
|
this.bind('on_parent', this.set_url.bind(this));
|
||||||
|
}
|
||||||
|
async set_url(url){
|
||||||
|
var container = this.dom_element
|
||||||
|
var hab = new bricks.HttpArrayBuffer();
|
||||||
|
var ab = await hab.get(this.url);
|
||||||
|
const task = pdfjsLib.getDocument({ data: ab });
|
||||||
|
task.promise.then((pdf) => {
|
||||||
|
this.pdf = pdf;
|
||||||
|
for (let i = 1; i <= this.pdf.numPages; i++) {
|
||||||
|
this.pdf.getPage(i).then((page) => {
|
||||||
|
this.add_page_content(page);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch((err) => {
|
||||||
|
console.log('error');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
add_page_content(page){
|
||||||
|
const scale = 1.5;
|
||||||
|
const viewport = page.getViewport({ scale });
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
const context = canvas.getContext('2d');
|
||||||
|
canvas.height = viewport.height;
|
||||||
|
canvas.width = viewport.width;
|
||||||
|
page.render({ canvasContext: context, viewport });
|
||||||
|
var w = new bricks.JsWidget();
|
||||||
|
w.dom_element.appendChild(canvas);
|
||||||
|
this.add_widget(w);
|
||||||
|
if (i < this.pdf.numPages){
|
||||||
|
w = new bricks.Splitter();
|
||||||
|
this.add_widget(w)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bricks.Factory.register('DOCXviewer', bricks.DOCXviewer);
|
||||||
|
bricks.Factory.register('EXCELviewer', bricks.EXCELviewer);
|
||||||
|
bricks.Factory.register('PDFviewer', bricks.PDFviewer);
|
@ -372,16 +372,17 @@ bricks.UiImage =class extends bricks.VBox {
|
|||||||
"height":"90%",
|
"height":"90%",
|
||||||
"width":"90%"
|
"width":"90%"
|
||||||
});
|
});
|
||||||
camera.bind('shot', function(d){
|
camera.bind('shot', this.accept_photo.bind(this));
|
||||||
|
}
|
||||||
|
accept_photo(url){
|
||||||
if (this.imgw){
|
if (this.imgw){
|
||||||
this.remove_widget(this.imgw);
|
this.remove_widget(this.imgw);
|
||||||
}
|
}
|
||||||
this.imgw = new bricks.Image({
|
this.imgw = new bricks.Image({
|
||||||
url:d,
|
url:url,
|
||||||
width:'100%'
|
width:'100%'
|
||||||
});
|
});
|
||||||
this.add_widget(this.imgw);
|
this.add_widget(this.imgw);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
handleFileSelect(event){
|
handleFileSelect(event){
|
||||||
const file = event.target.files[0];
|
const file = event.target.files[0];
|
||||||
|
99
bricks/period.js
Normal file
99
bricks/period.js
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
var bricks = window.bricks || {};
|
||||||
|
bricks.str2date = function(sdate){
|
||||||
|
let [year, month, day] = sdate.split("-");
|
||||||
|
var dateObj = new Date(year, month - 1, day);
|
||||||
|
return dateObj;
|
||||||
|
}
|
||||||
|
bricks.date2str = function(date){
|
||||||
|
let year = date.getFullYear();
|
||||||
|
let month = String(date.getMonth() + 1).padStart(2, '0');
|
||||||
|
let day = String(date.getDate()).padStart(2, '0');
|
||||||
|
let formattedDate = `${year}-${month}-${day}`;
|
||||||
|
return formattedDate;
|
||||||
|
}
|
||||||
|
bricks.addMonths = function(dateObj, months){
|
||||||
|
var newDate = new Date(dateObj);
|
||||||
|
newDate.setMonth(newDate.getMonth() + months);
|
||||||
|
return newDate;
|
||||||
|
}
|
||||||
|
bricks.addYears = function(dateObj, years){
|
||||||
|
const newDate = new Date(dateObj);
|
||||||
|
newDate.setYear(newDate.getYear() + years);
|
||||||
|
return newDate;
|
||||||
|
}
|
||||||
|
bricks.addDays = function(dateObj, days){
|
||||||
|
var newdate = new Date(dateObj);
|
||||||
|
newdate.setDate(newdate.getDate() + days);
|
||||||
|
return newdate;
|
||||||
|
}
|
||||||
|
|
||||||
|
bricks.PeriodDays = class extends bricks.HBox {
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
start_date:
|
||||||
|
end_date:
|
||||||
|
step_type: 'days', 'months', 'years'
|
||||||
|
step_cnt:
|
||||||
|
title:'',
|
||||||
|
splitter:' -- '
|
||||||
|
}
|
||||||
|
event: 'changed';
|
||||||
|
*/
|
||||||
|
constructor(opts){
|
||||||
|
opts.splitter = opts.splitter || ' 至 ';
|
||||||
|
opts.step_cnt = opts.step_cnt || 1;
|
||||||
|
super(opts);
|
||||||
|
this.start_w = new bricks.Text({
|
||||||
|
text:opts.start_date
|
||||||
|
});
|
||||||
|
this.end_w = new bricks.Text({
|
||||||
|
text:opts.end_date
|
||||||
|
});
|
||||||
|
this.start_w.set_css('clickable');
|
||||||
|
this.end_w.set_css('clickable');
|
||||||
|
this.start_w.bind('click', this.step_back.bind(this));
|
||||||
|
this.end_w.bind('click', this.step_forward.bind(this));
|
||||||
|
if (this.title){
|
||||||
|
this.add_widget(new bricks.Text({otext:this.title, i18n:true}));
|
||||||
|
}
|
||||||
|
this.add_widget(this.start_w);
|
||||||
|
this.add_widget(new bricks.Text({
|
||||||
|
otext:this.splitter,
|
||||||
|
i18n:true
|
||||||
|
}));
|
||||||
|
this.add_widget(this.end_w);
|
||||||
|
}
|
||||||
|
date_add(strdate, step_cnt, step_type){
|
||||||
|
var date = bricks.str2date(strdate);
|
||||||
|
switch(step_type){
|
||||||
|
case 'years':
|
||||||
|
var nd = bricks.addYears(date, step_cnt);
|
||||||
|
return bricks.date2str(nd);
|
||||||
|
break;
|
||||||
|
case 'months':
|
||||||
|
var nd = bricks.addMonths(date, step_cnt);
|
||||||
|
return bricks.date2str(nd);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
var nd = bricks.addDays(date, step_cnt);
|
||||||
|
return bricks.date2str(nd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
step_back(){
|
||||||
|
this.start_date = this.date_add(this.start_date, -this.step_cnt, this.step_type);
|
||||||
|
this.end_date = this.date_add(this.end_date, -this.step_cnt, this.step_type);
|
||||||
|
this.start_w.set_text(this.start_date);
|
||||||
|
this.end_w.set_text(this.end_date);
|
||||||
|
this.dispatch('changed', {start_date:this.start_date, end_date:this.end_date});
|
||||||
|
}
|
||||||
|
step_forward(){
|
||||||
|
this.start_date = this.date_add(this.start_date, this.step_cnt, this.step_type);
|
||||||
|
this.end_date = this.date_add(this.end_date, this.step_cnt, this.step_type);
|
||||||
|
this.start_w.set_text(this.start_date);
|
||||||
|
this.end_w.set_text(this.end_date);
|
||||||
|
this.dispatch('changed', {start_date:this.start_date, end_date:this.end_date});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bricks.Factory.register('PeriodDays', bricks.PeriodDays);
|
Loading…
Reference in New Issue
Block a user