1+ import { Setting } from "obsidian" ;
2+ import { AbstractSettingsHandler , SettingHandlerResponse } from "settings/handlers/AbstractSettingHandler" ;
3+
4+ export class MediaDimensionsHandler extends AbstractSettingsHandler {
5+ settingTitle : string = 'Choose dimensions of embeded media' ;
6+ handle ( settingHandlerResponse : SettingHandlerResponse ) : SettingHandlerResponse {
7+ const { local, settingsManager, containerEl, view } = settingHandlerResponse ;
8+ const media_settings = local ? view . diskConfig . yaml . config . media_settings : settingsManager . plugin . settings . local_settings . media_settings ;
9+ if ( media_settings . enable_media_view ) {
10+ // Check if media_settings is enabled
11+ const dimensionSettings = new Setting ( containerEl )
12+ . addText ( text => {
13+ text . setPlaceholder ( "Height" )
14+ . setValue ( media_settings . height . toString ( ) )
15+ . onChange ( async ( value : string ) : Promise < void > => {
16+ // Common modifications of value
17+ const parsedNumber = Number ( value ) ;
18+ const validatedNumber = isNaN ( parsedNumber ) ? media_settings . height : parsedNumber ;
19+ media_settings . height = validatedNumber ;
20+ if ( local ) {
21+ // Persist changes in local config
22+ view . diskConfig . updateConfig ( 'media_settings' , media_settings ) ;
23+ } else {
24+ // Persist changes in plugin settings
25+ const update_local_settings = settingsManager . plugin . settings . local_settings ;
26+ update_local_settings . media_settings = media_settings ;
27+ await settingsManager . plugin . updateSettings ( {
28+ local_settings : update_local_settings
29+ } ) ;
30+ }
31+ } ) ;
32+ } ) . addText ( text => {
33+ text . setPlaceholder ( "Width" )
34+ . setValue ( media_settings . width . toString ( ) )
35+ . onChange ( async ( value : string ) : Promise < void > => {
36+ // Common modifications of value
37+ const parsedNumber = Number ( value ) ;
38+ const validatedNumber = isNaN ( parsedNumber ) ? media_settings . width : parsedNumber ;
39+ media_settings . width = validatedNumber ;
40+ if ( local ) {
41+ // Persist changes in local config
42+ view . diskConfig . updateConfig ( 'media_settings' , media_settings ) ;
43+ } else {
44+ // Persist changes in plugin settings
45+ const update_local_settings = settingsManager . plugin . settings . local_settings ;
46+ update_local_settings . media_settings = media_settings ;
47+ await settingsManager . plugin . updateSettings ( {
48+ local_settings : update_local_settings
49+ } ) ;
50+ }
51+ } ) ;
52+ } )
53+ if ( local ) {
54+ dimensionSettings . addExtraButton ( ( cb ) => {
55+ cb . setIcon ( "reset" )
56+ . setTooltip ( "Restart default values" )
57+ . onClick ( async ( ) : Promise < void > => {
58+ // Persist changes
59+ media_settings . width = settingsManager . settings . local_settings . media_settings . width ;
60+ media_settings . height = settingsManager . settings . local_settings . media_settings . height ;
61+ view . diskConfig . updateConfig ( 'media_settings' , media_settings ) ;
62+ // Force refresh of settings
63+ settingsManager . reset ( settingHandlerResponse ) ;
64+ } ) ;
65+ } ) ;
66+ }
67+ }
68+ return this . goNext ( settingHandlerResponse ) ;
69+ }
70+ }
0 commit comments