@@ -6,23 +6,25 @@ import { copyTextToClipboard } from '@qwinsi/utilities-js/clipboard'
6
6
import CopiedToast from ' ./components/CopiedToast.svelte'
7
7
import SettingsDialog from ' ./components/SettingsDialog.svelte'
8
8
import { getRandomFormula } from ' ./random'
9
- import { DEFAULT_SETTINGS } from ' ./default- settings' ;
9
+ import { load_settings , remember_to_save_settings_before_unload } from ' ./settings' ;
10
10
import { version as APP_VERSION } from ' ../package.json' ;
11
11
import butterup from ' butteruptoasts' ;
12
12
import SwapIcon from ' ./assets/SwapIcon.svelte' ;
13
13
// have to do this because butteruptoasts places CSS in wrong place
14
14
import ' ../node_modules/butteruptoasts/src/butterup.css' ;
15
15
16
- let directionToTypst = $state (true );
17
-
18
- let settings = $state (DEFAULT_SETTINGS );
16
+ const init_settings = load_settings ();
17
+ if (! init_settings .rememberDirection ) {
18
+ init_settings .directionToTypst = true ;
19
+ }
20
+ let settings = $state (init_settings);
19
21
20
22
let inputStr = $state (' ' );
21
23
22
24
function get_output (inputStr , settings ) {
23
25
try {
24
26
const tex = inputStr;
25
- if (directionToTypst) {
27
+ if (settings . directionToTypst ) {
26
28
const typst = convertTex2Typst (tex, {
27
29
preferShorthands: settings .preferShorthands ,
28
30
fracToSlash: settings .texFracToTypstSlash ,
@@ -114,8 +116,8 @@ function handleSettingsClick() {
114
116
}
115
117
116
118
117
- function get_rendered_html (directionToTypst , inputStr , output , settings ) {
118
- const latex = directionToTypst ? inputStr : output .target ;
119
+ function get_rendered_html (inputStr , output , settings ) {
120
+ const latex = settings . directionToTypst ? inputStr : output .target ;
119
121
if (latex === ' ' ) {
120
122
return null ;
121
123
} else {
@@ -130,31 +132,22 @@ function get_rendered_html(directionToTypst, inputStr, output, settings) {
130
132
}
131
133
}
132
134
133
- const renderedFormulaHtml = $derived (get_rendered_html (directionToTypst, inputStr, output, settings));
135
+ const renderedFormulaHtml = $derived (get_rendered_html (inputStr, output, settings));
134
136
135
137
136
138
137
139
function handleNewSettings (data ) {
138
- settings = data;
139
- localStorage .setItem (' settings' , JSON .stringify (data));
140
+ settings = Object .assign ({directionToTypst: settings .directionToTypst }, data);
140
141
}
141
142
142
143
function handleFlipDirection () {
143
144
const outputStr = output .target ;
144
- directionToTypst = ! directionToTypst;
145
+ settings . directionToTypst = ! settings . directionToTypst ;
145
146
inputStr = outputStr;
146
147
}
147
148
148
149
149
150
onMount (() => {
150
- const settingsStr = localStorage .getItem (' settings' );
151
- if (settingsStr) {
152
- settings = Object .assign (settings, JSON .parse (settingsStr));
153
- }
154
- if (settings .rememberDirection && localStorage .getItem (' lastDirection' )) {
155
- directionToTypst = localStorage .getItem (' lastDirection' ) !== ' false' ;
156
- }
157
-
158
151
inputArea .focus ();
159
152
160
153
// Enable ":active" pseudo-class on mobile safari. https://stackoverflow.com/q/3885018/
@@ -165,9 +158,7 @@ onMount(() => {
165
158
});
166
159
}
167
160
168
- window .addEventListener (' beforeunload' , function () {
169
- localStorage .setItem (' lastDirection' , directionToTypst .toString ());
170
- });
161
+ remember_to_save_settings_before_unload (() => settings);
171
162
172
163
const channel = new BroadcastChannel (' SW_MESSAGES' );
173
164
channel .addEventListener (' message' , event => {
@@ -220,9 +211,9 @@ To use new version, close all tabs of this website then open again.
220
211
<main class =" flex-1 flex flex-col justify-between ml-6 mr-6" >
221
212
<div class =" flex justify-between p-2 border-b border-gray-700" >
222
213
<div class =" flex-1 flex justify-between" >
223
- <span class ="app-text p-2" >{ directionToTypst ? " LaTeX" : " Typst" }</span >
214
+ <span class ="app-text p-2" >{ settings . directionToTypst ? " LaTeX" : " Typst" }</span >
224
215
<div >
225
- <button class ="mr-2 op-btn" onclick ={() => {inputStr = getRandomFormula (directionToTypst );}}>
216
+ <button class ="mr-2 op-btn" onclick ={() => {inputStr = getRandomFormula (settings . directionToTypst );}}>
226
217
<span class =" hide-on-mobile" >Random</span >
227
218
<span class =" hide-on-desktop" >R</span >
228
219
</button >
@@ -238,7 +229,7 @@ To use new version, close all tabs of this website then open again.
238
229
</button >
239
230
240
231
<div class =" flex-1 flex justify-between relative" >
241
- <span class ="app-text p-2" >{ directionToTypst ? " Typst" : " LaTeX" }</span >
232
+ <span class ="app-text p-2" >{ settings . directionToTypst ? " Typst" : " LaTeX" }</span >
242
233
<button class =" op-btn"
243
234
onclick ={sendToClipboard }>Copy</button >
244
235
<CopiedToast style ="position: absolute; top: -55px; right: -4px;" bind:this ={copiedToast } msg =" Copied!" />
0 commit comments