63
63
</ div >
64
64
< button class ="classic-btn " id ="convert " disabled > Convert</ button >
65
65
</ nav >
66
- < main >
67
- < label for ="input1 ">
68
- Your 1st input
69
- </ label >
70
- < div class ="input " touch-action ="none " id ="input1 "> </ div >
71
- < label for ="input2 ">
72
- Your 2nd input
73
- </ label >
74
- < div class ="input " touch-action ="none " id ="input2 "> </ div >
75
- < label for ="input3 ">
76
- Your 3rd input
77
- </ label >
78
- < div class ="input " touch-action ="none " id ="input3 "> </ div >
79
- < label for ="input4 ">
80
- Your 4th input
81
- </ label >
82
- < div class ="input " touch-action ="none " id ="input4 "> </ div >
66
+ < main id ="mainContent ">
83
67
</ main >
84
68
< div id ="editor " touch-action ="none "> </ div >
85
69
< div id ="editor2 " touch-action ="none "> </ div >
86
70
</ div >
87
- < script >
88
- let waitingForIdle = false ;
89
- let pointerDownOnInput = false ;
90
- let pointerDownOnInputPoint ;
91
- let clearForIdle ;
92
- let selectedInput ;
93
- let oldInput ;
94
- let selectedEditor = 0 ;
95
-
96
- const editorElement = document . getElementById ( 'editor' ) ;
97
- const editorElement2 = document . getElementById ( 'editor2' ) ;
98
- let editorElementRef = editorElement ;
99
-
100
- const undoElement = document . getElementById ( 'undo' ) ;
101
- const redoElement = document . getElementById ( 'redo' ) ;
102
- const convertElement = document . getElementById ( 'convert' ) ;
103
-
104
- const input1 = document . getElementById ( 'input1' ) ;
105
- const input2 = document . getElementById ( 'input2' ) ;
106
- const input3 = document . getElementById ( 'input3' ) ;
107
- const input4 = document . getElementById ( 'input4' ) ;
108
-
109
- const inputValues = new Map ( ) ;
110
- inputValues . set ( input1 . id , '' ) ;
111
- inputValues . set ( input2 . id , '' ) ;
112
- inputValues . set ( input3 . id , '' ) ;
113
- inputValues . set ( input4 . id , '' ) ;
114
-
115
- function extractPoint ( event , domElement , configuration , offsetTop = 0 , offsetLeft = 0 ) {
116
- let eventRef = event ;
117
- if ( eventRef . changedTouches ) {
118
- eventRef = eventRef . changedTouches [ 0 ] ;
119
- }
120
- const rect = domElement . getBoundingClientRect ( ) ;
121
- return {
122
- x : roundFloat ( eventRef . clientX - rect . left - domElement . clientLeft - offsetLeft , configuration . xyFloatPrecision ) ,
123
- y : roundFloat ( eventRef . clientY - rect . top - domElement . clientTop - offsetTop , configuration . xyFloatPrecision ) ,
124
- t : roundFloat ( Date . now ( ) , configuration . timestampFloatPrecision )
125
- } ;
126
- }
127
-
128
- const floatPrecisionArray = [ 1 , 10 , 100 , 1000 , 10000 , 100000 , 1000000 , 10000000 , 100000000 , 1000000000 ] ;
129
-
130
- function roundFloat ( oneFloat , requestedFloatPrecision ) {
131
- if ( requestedFloatPrecision || requestedFloatPrecision === 0 ) {
132
- let floatPrecision ;
133
- if ( requestedFloatPrecision > 10 ) {
134
- floatPrecision = floatPrecisionArray [ 10 ] ;
135
- } else {
136
- floatPrecision = floatPrecisionArray [ requestedFloatPrecision ] ;
137
- }
138
- return Math . round ( oneFloat * floatPrecision ) / floatPrecision ;
139
- }
140
- return oneFloat ;
141
- }
142
-
143
- function addChangedListeners ( editors ) {
144
- editors . forEach ( function ( editor ) {
145
- editor . addEventListener ( 'changed' , function ( event ) {
146
- undoElement . disabled = ! event . detail . canUndo ;
147
- redoElement . disabled = ! event . detail . canRedo ;
148
- convertElement . disabled = event . detail . isEmpty ;
149
- } ) ;
150
- } ) ;
151
- }
152
-
153
- undoElement . addEventListener ( 'click' , function ( ) {
154
- editorElementRef . editor . undo ( ) ;
155
- } ) ;
156
- redoElement . addEventListener ( 'click' , function ( ) {
157
- editorElementRef . editor . redo ( ) ;
158
- } ) ;
159
- convertElement . addEventListener ( 'click' , function ( ) {
160
- editorElementRef . editor . convert ( ) ;
161
- } ) ;
162
-
163
- function addIdleListeners ( editors ) {
164
- editors . forEach ( function ( editor ) {
165
- editor . addEventListener ( 'idle' , function ( ) {
166
- if ( waitingForIdle ) {
167
- if ( editor . editor . exports ) {
168
- inputValues . set ( oldInput . id , editor . editor . exports [ 'text/plain' ] ) ;
169
- }
170
- const childModel = editor . querySelector ( 'svg:nth-child(3)' )
171
- . cloneNode ( true ) ;
172
- const childBackground = editor . querySelector ( 'svg:nth-child(4)' )
173
- . cloneNode ( true ) ;
174
- childModel . style . zIndex = '10' ;
175
- childBackground . style . zIndex = '10' ;
176
- while ( oldInput . firstChild ) {
177
- oldInput . removeChild ( oldInput . firstChild ) ;
178
- }
179
- oldInput . appendChild ( childBackground ) ;
180
- oldInput . appendChild ( childModel ) ;
181
- editor . style . display = 'none' ;
182
- editor . editor . clear ( ) ;
183
- clearForIdle = true ;
184
- waitingForIdle = false ;
185
- }
186
- } ) ;
187
- } ) ;
188
- }
189
-
190
- function addInputsPointerDownListener ( inputId ) {
191
- const input = document . getElementById ( inputId ) ;
192
- input . addEventListener ( 'pointerdown' , function ( event ) {
193
- pointerDownOnInput = true ;
194
- pointerDownOnInputPoint = extractPoint ( event , input , editorElementRef . editor . configuration ) ;
195
- if ( selectedInput !== input ) {
196
- if ( editorElementRef ) {
197
- if ( selectedInput ) {
198
- oldInput = selectedInput ;
199
- editorElementRef . editor . convert ( ) ;
200
- editorElementRef . editor . waitForIdle ( ) ;
201
- waitingForIdle = true ;
202
- }
203
- }
204
- clearForIdle = false ;
205
- selectedEditor === 0 ? editorElementRef = editorElement : editorElementRef = editorElement2 ;
206
- selectedInput = input ;
207
- editorElementRef . style . width = `${ event . target . clientWidth } px` ;
208
- editorElementRef . style . height = `${ event . target . clientHeight } px` ;
209
- editorElementRef . style . display = 'block' ;
210
- editorElementRef . style . position = 'absolute' ;
211
- editorElementRef . style . left = `${ event . target . tagName === 'svg' ? event . target . parentElement . offsetLeft + 1 : event . target . offsetLeft + 1 } px` ;
212
- editorElementRef . style . top = `${ event . target . tagName === 'svg' ? event . target . parentElement . offsetTop + 1 : event . target . offsetTop + 1 } px` ;
213
- editorElementRef . style . background = 'white' ;
214
- const inputValue = inputValues . get ( selectedInput . id ) ;
215
- if ( inputValue ) {
216
- console . log ( inputValue ) ;
217
- editorElementRef . editor . import_ ( inputValue , 'text/plain' ) ;
218
- }
219
- editorElementRef . editor . resize ( ) ;
220
- selectedEditor === 0 ? selectedEditor = 1 : selectedEditor = 0 ;
221
- }
222
- } ) ;
223
- input . addEventListener ( 'pointermove' , function ( event ) { // Trigger a pointerMove
224
- console . log ( 'move' ) ;
225
- if ( this . activePointerId && this . activePointerId === event . pointerId ) {
226
- editorElementRef . editor . pointerMove ( extractPoint ( event , editorElementRef . editor . domElement , editorElementRef . editor . configuration ) ) ;
227
- }
228
- else if ( pointerDownOnInput ) {
229
- const point = extractPoint ( event , editorElementRef . editor . domElement , editorElementRef . editor . configuration ) ;
230
- const diffX = Math . abs ( pointerDownOnInputPoint . x - point . x ) ;
231
- const diffY = Math . abs ( pointerDownOnInputPoint . y - point . y ) ;
232
- // mMaxDiffX = Math.max(diffX, mMaxDiffX);
233
- const cond1 = diffX < 1 && diffY > 1 ; // && mMaxDiffX < 15;
234
- const cond2 = diffX > 1 && diffY > 1 ; // && mMaxDiffX < 15;
235
- if ( cond1 || cond2 ) {
236
- this . activePointerId = event . pointerId ;
237
- // Hack for iOS 9 Safari : pointerId has to be int so -1 if > max value
238
- const pointerId = event . pointerId > 2147483647 ? - 1 : event . pointerId ;
239
- editorElementRef . editor . pointerDown ( pointerDownOnInputPoint , event . pointerType , pointerId ) ;
240
- }
241
- }
242
- } ) ;
243
- input . addEventListener ( 'pointerup' , function ( event ) { // Trigger a pointerMove
244
- pointerDownOnInput = false ;
245
- if ( this . activePointerId && this . activePointerId === event . pointerId ) { // Only considering the active pointer
246
- this . activePointerId = undefined ; // Managing the active pointer
247
- event . stopPropagation ( ) ;
248
- editorElementRef . editor . pointerUp ( extractPoint ( event , editorElementRef . editor . domElement , editorElementRef . editor . configuration ) ) ;
249
- }
250
- } ) ;
251
- }
252
-
253
- function attach ( element , editor ) {
254
-
255
- function unfocus ( ) {
256
- if ( window . getSelection ( ) . type !== 'None' ) {
257
- window . getSelection ( )
258
- . removeAllRanges ( ) ;
259
- }
260
- }
261
-
262
- const context = {
263
- options : { passive : true } ,
264
- listeners : [ {
265
- types : [ 'pointerdown' ] ,
266
- listener :
267
- function pointerDownHandler ( evt ) { // Trigger a pointerDown
268
- console . log ( 'okok' ) ;
269
- const pointerDownOnEditor = evt . target . id === editor . domElement . id || evt . target . classList . contains ( 'ms-canvas' ) ;
270
- if ( this . activePointerId ) {
271
- if ( this . activePointerId === evt . pointerId ) {
272
- console . log ( `${ evt . type } event with the same id without any pointer up` , evt . pointerId ) ;
273
- }
274
- } else if ( ( evt . button !== 2 ) && ( evt . buttons !== 2 ) && pointerDownOnEditor ) { // Ignore right click
275
- this . activePointerId = evt . pointerId ;
276
- // Hack for iOS 9 Safari : pointerId has to be int so -1 if > max value
277
- const pointerId = evt . pointerId > 2147483647 ? - 1 : evt . pointerId ;
278
- unfocus ( ) ;
279
- evt . stopPropagation ( ) ;
280
- editor . pointerDown ( extractPoint ( evt , element , editor . configuration ) , evt . pointerType , pointerId ) ;
281
- }
282
- }
283
- } , {
284
- types : [ 'pointermove' ] ,
285
- listener :
286
- function pointerMoveHandler ( evt ) { // Trigger a pointerMove
287
- console . log ( 'move' ) ;
288
- // Only considering the active pointer
289
- if ( this . activePointerId && this . activePointerId === evt . pointerId ) {
290
- unfocus ( ) ;
291
- editor . pointerMove ( extractPoint ( evt , element , editor . configuration ) ) ;
292
- } else if ( pointerDownOnInput ) {
293
- const point = extractPoint ( evt , element , editor . configuration ) ;
294
- const diffX = Math . abs ( pointerDownOnInputPoint . x - point . x ) ;
295
- const diffY = Math . abs ( pointerDownOnInputPoint . y - point . y ) ;
296
- // mMaxDiffX = Math.max(diffX, mMaxDiffX);
297
- const cond1 = diffX < 1 && diffY > 1 ; // && mMaxDiffX < 15;
298
- const cond2 = diffX > 1 && diffY > 1 ; // && mMaxDiffX < 15;
299
- if ( cond1 || cond2 ) {
300
- this . activePointerId = evt . pointerId ;
301
- // Hack for iOS 9 Safari : pointerId has to be int so -1 if > max value
302
- unfocus ( ) ;
303
- const pointerId = evt . pointerId > 2147483647 ? - 1 : evt . pointerId ;
304
- editor . pointerDown ( pointerDownOnInputPoint , evt . pointerType , pointerId ) ;
305
- }
306
- }
307
- }
308
- } , {
309
- types : [ 'pointerup' ] ,
310
- listener :
311
- function pointerUpHandler ( evt ) { // Trigger a pointerUp
312
- pointerDownOnInput = false ;
313
- if ( this . activePointerId && this . activePointerId === evt . pointerId ) { // Only considering the active pointer
314
- this . activePointerId = undefined ; // Managing the active pointer
315
- evt . stopPropagation ( ) ;
316
- editor . pointerUp ( extractPoint ( evt , element , editor . configuration ) ) ;
317
- }
318
- }
319
- } ]
320
- } ;
321
-
322
- context . listeners . forEach ( ( item ) => {
323
- item . types . forEach ( type => element . addEventListener ( type , item . listener , context . options ) ) ;
324
- } ) ;
325
- return context ;
326
- }
327
-
328
- function detach ( element , context ) {
329
- context . listeners . forEach ( ( item ) => {
330
- item . types . forEach ( type => element . removeEventListener ( type , item . listener , context . options ) ) ;
331
- } ) ;
332
- }
333
-
334
- var customGrabber = {
335
- attach : attach ,
336
- detach : detach
337
- } ;
338
-
339
- editorElement . addEventListener ( 'loaded' , function ( ) {
340
- editorElement . style . display = 'none' ;
341
- editorElement2 . style . display = 'none' ;
342
- } ) ;
343
-
344
- function initEditors ( editors ) {
345
- editors . forEach ( function ( editorElement ) {
346
- MyScript . register ( editorElement , {
347
- recognitionParams : {
348
- type : 'TEXT' ,
349
- protocol : 'WEBSOCKET' ,
350
- apiVersion : 'V4' ,
351
- server : {
352
- scheme : 'https' ,
353
- host : 'webdemoapi.myscript.com' ,
354
- applicationKey : '515131ab-35fa-411c-bb4d-3917e00faf60' ,
355
- hmacKey : '54b2ca8a-6752-469d-87dd-553bb450e9ad'
356
- } ,
357
- v4 : {
358
- text : {
359
- guide : {
360
- enable : false
361
- } ,
362
- smartGuide : false ,
363
- margin : {
364
- left : 10 ,
365
- right : 10 ,
366
- top : 5
367
- }
368
- }
369
- }
370
- }
371
- } , undefined , undefined , {
372
- grabber : customGrabber
373
- } ) ;
374
- } ) ;
375
- }
376
-
377
- initEditors ( [ editorElement , editorElement2 ] ) ;
378
-
379
- for ( const inputId of inputValues . keys ( ) ) {
380
- addInputsPointerDownListener ( inputId ) ;
381
- }
382
-
383
- addIdleListeners ( [ editorElement , editorElement2 ] ) ;
384
- addChangedListeners ( [ editorElement , editorElement2 ] ) ;
385
-
386
- window . addEventListener ( 'resize' , function ( ) {
387
- editorElement . editor . resize ( ) ;
388
- editorElement2 . editor . resize ( ) ;
389
- } ) ;
390
- </ script >
71
+ < script src ="multiple_inputs.js "> </ script >
391
72
</ body >
392
73
</ html >
0 commit comments