2020-04-26 09:40:02 +02:00
import CollapsibleWidget from "../collapsible_widget.js" ;
2021-01-20 22:17:40 +01:00
import server from "../../services/server.js" ;
2019-08-15 21:18:33 +02:00
2019-07-21 11:32:38 +02:00
const TPL = `
2020-01-21 22:08:41 +01:00
< table class = "note-info-widget-table" >
< style >
. note - info - widget - table {
2020-09-05 22:49:30 +02:00
max - width : 100 % ;
display : block ;
overflow - x : auto ;
white - space : nowrap ;
2020-01-21 22:08:41 +01:00
}
. note - info - widget - table td , . note - info - widget - table th {
padding : 5 px ;
}
2020-03-01 19:06:26 +01:00
. note - info - mime {
max - width : 13 em ;
overflow : hidden ;
text - overflow : ellipsis ;
white - space : nowrap ;
}
2020-01-21 22:08:41 +01:00
< / s t y l e >
2019-07-21 11:32:38 +02:00
< tr >
2020-05-06 17:12:28 -04:00
< th > Note ID : < / t h >
2020-06-04 12:27:41 +02:00
< td class = "note-info-note-id" > < / t d >
2019-09-01 09:16:08 +02:00
< th > Type : < / t h >
2020-06-04 12:27:41 +02:00
< td >
< span class = "note-info-type" > < / s p a n >
< span class = "note-info-mime" > < / s p a n >
< / t d >
2019-07-21 11:32:38 +02:00
< / t r >
2020-09-05 22:49:30 +02:00
< tr >
< th > Created : < / t h >
< td class = "note-info-date-created" > < / t d >
< th > Modified : < / t h >
< td class = "note-info-date-modified" > < / t d >
< / t r >
2021-01-21 20:02:40 +01:00
< tr title = "Note size provides rough estimate of storage requirements for this note. It takes into account note's content and content of its note revisions." >
< th > Note size : < / t h >
< td colspan = "3" >
2021-01-22 15:16:08 +01:00
< button class = "btn btn-sm calculate-button" style = "padding: 0px 10px 0px 10px;" >
< span class = "bx bx-calculator" > < / s p a n > c a l c u l a t e
< / b u t t o n >
2021-01-21 20:02:40 +01:00
2021-01-22 15:16:08 +01:00
< span class = "note-sizes-wrapper" >
< span class = "note-size" > < / s p a n >
2021-03-14 20:47:33 +01:00
< span class = "subtree-size" > < / s p a n >
2021-01-22 15:16:08 +01:00
< / s p a n >
2021-01-21 20:02:40 +01:00
< / t d >
< / t r >
2019-07-21 11:32:38 +02:00
< / t a b l e >
` ;
2020-02-02 21:16:20 +01:00
export default class NoteInfoWidget extends CollapsibleWidget {
2020-09-13 21:59:31 +02:00
isEnabled ( ) {
return super . isEnabled ( ) && ! this . note . hasLabel ( 'noteInfoWidgetDisabled' ) ;
}
2020-03-16 22:14:18 +01:00
get widgetTitle ( ) { return "Note info" ; }
2019-07-21 11:32:38 +02:00
2020-02-29 19:43:19 +01:00
async doRenderBody ( ) {
2019-08-15 21:18:33 +02:00
this . $body . html ( TPL ) ;
2020-02-02 18:46:50 +01:00
this . $noteId = this . $body . find ( ".note-info-note-id" ) ;
this . $dateCreated = this . $body . find ( ".note-info-date-created" ) ;
this . $dateModified = this . $body . find ( ".note-info-date-modified" ) ;
this . $type = this . $body . find ( ".note-info-type" ) ;
this . $mime = this . $body . find ( ".note-info-mime" ) ;
2021-01-22 15:16:08 +01:00
this . $noteSizesWrapper = this . $body . find ( '.note-sizes-wrapper' ) ;
2021-01-21 20:02:40 +01:00
this . $noteSize = this . $body . find ( ".note-size" ) ;
this . $subTreeSize = this . $body . find ( ".subtree-size" ) ;
2021-01-22 15:16:08 +01:00
this . $calculateButton = this . $body . find ( ".calculate-button" ) ;
this . $calculateButton . on ( 'click' , async ( ) => {
this . $noteSizesWrapper . show ( ) ;
this . $calculateButton . hide ( ) ;
this . $noteSize . empty ( ) . append ( $ ( '<span class="bx bx-loader bx-spin"></span>' ) ) ;
this . $subTreeSize . empty ( ) . append ( $ ( '<span class="bx bx-loader bx-spin"></span>' ) ) ;
const noteSizeResp = await server . get ( ` stats/note-size/ ${ this . noteId } ` ) ;
this . $noteSize . text ( this . formatSize ( noteSizeResp . noteSize ) ) ;
2021-03-14 20:47:33 +01:00
const subTreeResp = await server . get ( ` stats/subtree-size/ ${ this . noteId } ` ) ;
if ( subTreeResp . subTreeNoteCount > 1 ) {
this . $subTreeSize . text ( "(subtree size: " + this . formatSize ( subTreeResp . subTreeSize ) + ` in ${ subTreeResp . subTreeNoteCount } notes) ` ) ;
}
else {
this . $subTreeSize . text ( "" ) ;
}
2021-01-22 15:16:08 +01:00
} ) ;
2020-01-14 21:23:32 +01:00
}
2019-07-21 11:32:38 +02:00
2020-02-01 11:33:31 +01:00
async refreshWithNote ( note ) {
const noteComplement = await this . tabContext . getNoteComplement ( ) ;
2020-01-25 14:37:12 +01:00
2020-02-02 18:46:50 +01:00
this . $noteId . text ( note . noteId ) ;
this . $dateCreated
2020-05-07 23:02:46 +02:00
. text ( noteComplement . dateCreated . substr ( 0 , 16 ) )
2020-02-01 11:15:58 +01:00
. attr ( "title" , noteComplement . dateCreated ) ;
2020-01-04 09:04:08 +01:00
2020-02-02 18:46:50 +01:00
this . $dateModified
2020-08-16 22:57:48 +02:00
. text ( noteComplement . combinedDateModified . substr ( 0 , 16 ) )
. attr ( "title" , noteComplement . combinedDateModified ) ;
2020-01-04 09:04:08 +01:00
2020-02-02 18:46:50 +01:00
this . $type . text ( note . type ) ;
2020-01-04 09:04:08 +01:00
2020-06-04 12:27:41 +02:00
if ( note . mime ) {
this . $mime . text ( '(' + note . mime + ')' ) ;
}
else {
this . $mime . empty ( ) ;
}
2021-01-20 22:17:40 +01:00
2021-01-22 15:16:08 +01:00
this . $calculateButton . show ( ) ;
this . $noteSizesWrapper . hide ( ) ;
2021-01-21 20:02:40 +01:00
}
formatSize ( size ) {
size = Math . max ( Math . round ( size / 1024 ) , 1 ) ;
2021-01-20 22:17:40 +01:00
2021-01-21 20:02:40 +01:00
if ( size < 1024 ) {
return ` ${ size } KiB ` ;
}
else {
return ` ${ Math . round ( size / 102.4 ) / 10 } MiB ` ;
}
2019-07-21 11:32:38 +02:00
}
2019-08-06 22:39:27 +02:00
2020-02-16 19:23:49 +01:00
entitiesReloadedEvent ( { loadResults } ) {
2020-08-16 22:57:48 +02:00
if ( loadResults . isNoteReloaded ( this . noteId ) || loadResults . isNoteContentReloaded ( this . noteId ) ) {
2020-01-18 20:49:49 +01:00
this . refresh ( ) ;
2019-08-06 22:39:27 +02:00
}
}
2020-05-06 17:12:28 -04:00
}