Re-land else-after-returns
[pdfium.git] / fpdfsdk / src / javascript / JS_EventHandler.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "../../include/javascript/JavaScript.h"
8 #include "../../include/javascript/IJavaScript.h"
9 #include "../../include/javascript/JS_EventHandler.h"
10 #include "../../include/javascript/JS_Context.h"
11 #include "../../include/javascript/JS_Runtime.h"
12 #include "../../include/javascript/JS_Define.h"
13 #include "../../include/javascript/JS_Object.h"
14 #include "../../include/javascript/JS_Value.h"
15 #include "../../include/javascript/Document.h"
16 #include "../../include/javascript/Field.h"
17
18 /* ---------------------------- CJS_EventHandler ---------------------------- */
19
20 CJS_EventHandler::CJS_EventHandler(CJS_Context * pContext)   :
21     m_pJSContext(pContext),
22     m_eEventType(JET_UNKNOWN),
23     m_bValid(FALSE),
24     m_pWideStrChange(NULL),
25     m_nCommitKey(-1),
26     m_bKeyDown(FALSE),
27     m_bModifier(FALSE),
28     m_bShift(FALSE),
29     m_pISelEnd(NULL),
30     m_nSelEndDu(0),
31     m_pISelStart(NULL),
32     m_nSelStartDu(0),
33     m_bWillCommit(FALSE),
34     m_pValue(NULL),
35     m_bFieldFull(FALSE),
36     m_pbRc(NULL),
37     m_bRcDu(FALSE),
38     m_pSourceDoc(NULL),
39     m_pTargetBookMark(NULL),
40     m_pTargetDoc(NULL),
41     m_pTargetAnnot(NULL)
42 {
43 }
44
45 CJS_EventHandler::~CJS_EventHandler()
46 {
47 }
48
49 void CJS_EventHandler::OnApp_Init()
50 {
51     Initial(JET_APP_INIT);
52 }
53
54 void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName)
55 {
56     Initial(JET_DOC_OPEN);
57
58     m_pTargetDoc = pDoc;
59     m_strTargetName = strTargetName;
60 }
61
62 void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc)
63 {
64     Initial(JET_DOC_WILLPRINT);
65
66     m_pTargetDoc = pDoc;
67 }
68
69 void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc)
70 {
71     Initial(JET_DOC_DIDPRINT);
72
73     m_pTargetDoc = pDoc;
74 }
75
76 void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc)
77 {
78     Initial(JET_DOC_WILLSAVE);
79     m_pTargetDoc = pDoc;
80 }
81
82 void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc)
83 {
84     Initial(JET_DOC_DIDSAVE);
85
86     m_pTargetDoc = pDoc;
87 }
88
89 void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc)
90 {
91     Initial(JET_DOC_WILLCLOSE);
92
93     m_pTargetDoc = pDoc;
94 }
95
96 void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc)
97 {
98     Initial(JET_PAGE_OPEN);
99
100     m_pTargetDoc = pDoc;
101 }
102
103 void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc)
104 {
105     Initial(JET_PAGE_CLOSE);
106
107     m_pTargetDoc = pDoc;
108 }
109
110 void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc)
111 {
112     Initial(JET_PAGE_INVIEW);
113
114     m_pTargetDoc = pDoc;
115 }
116
117 void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc)
118 {
119     Initial(JET_PAGE_OUTVIEW);
120
121     m_pTargetDoc = pDoc;
122 }
123
124 void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
125 {
126     Initial(JET_FIELD_MOUSEENTER);
127
128     m_bModifier = bModifier;
129     m_bShift = bShift;
130
131     ASSERT(pTarget != NULL);
132     m_strTargetName = pTarget->GetFullName();
133 }
134
135 void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
136 {
137     Initial(JET_FIELD_MOUSEEXIT);
138
139     m_bModifier = bModifier;
140     m_bShift = bShift;
141     ASSERT(pTarget != NULL);
142     m_strTargetName = pTarget->GetFullName();
143 }
144
145 void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
146 {
147     Initial(JET_FIELD_MOUSEDOWN);
148     m_eEventType = JET_FIELD_MOUSEDOWN;
149
150     m_bModifier = bModifier;
151     m_bShift = bShift;
152     ASSERT(pTarget != NULL);
153     m_strTargetName = pTarget->GetFullName();
154 }
155
156 void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
157 {
158     Initial(JET_FIELD_MOUSEUP);
159
160     m_bModifier = bModifier;
161     m_bShift = bShift;
162     ASSERT(pTarget != NULL);
163     m_strTargetName = pTarget->GetFullName();
164 }
165
166 void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
167                                      const CFX_WideString& Value)
168 {
169     Initial(JET_FIELD_FOCUS);
170
171     m_bModifier = bModifier;
172     m_bShift = bShift;
173     ASSERT(pTarget != NULL);
174     m_strTargetName = pTarget->GetFullName();
175     m_pValue = (CFX_WideString*)&Value;
176 }
177
178 void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
179                                     const CFX_WideString& Value)
180 {
181     Initial(JET_FIELD_BLUR);
182
183     m_bModifier = bModifier;
184     m_bShift = bShift;
185     ASSERT(pTarget != NULL);
186     m_strTargetName = pTarget->GetFullName();
187     m_pValue = (CFX_WideString*)&Value;
188 }
189
190 void CJS_EventHandler::OnField_Keystroke(CFX_WideString &strChange,
191                                          const CFX_WideString& strChangeEx, FX_BOOL KeyDown,
192                                          FX_BOOL bModifier, int& nSelEnd, int& nSelStart,
193                                          FX_BOOL bShift, CPDF_FormField* pTarget,
194                                          CFX_WideString& Value, FX_BOOL bWillCommit,
195                                           FX_BOOL bFieldFull, FX_BOOL& bRc)
196 {
197     Initial(JET_FIELD_KEYSTROKE);
198
199     m_nCommitKey = 0;
200     m_pWideStrChange = &strChange;
201     m_WideStrChangeEx = strChangeEx;
202     m_bKeyDown = KeyDown;
203     m_bModifier = bModifier;
204     m_pISelEnd = &nSelEnd;
205     m_pISelStart = &nSelStart;
206     m_bShift = bShift;
207     ASSERT(pTarget != NULL);
208     m_strTargetName = pTarget->GetFullName();
209     m_pValue = &Value;
210     m_bWillCommit = bWillCommit;
211     m_pbRc = &bRc;
212     m_bFieldFull = bFieldFull;
213 }
214
215 void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
216                                         FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift,
217                                         CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc)
218 {
219     Initial(JET_FIELD_VALIDATE);
220
221     m_pWideStrChange = &strChange;
222     m_WideStrChangeEx = strChangeEx;
223     m_bKeyDown = bKeyDown;
224     m_bModifier = bModifier;
225     m_bShift = bShift;
226     ASSERT(pTarget != NULL);
227     m_strTargetName = pTarget->GetFullName();
228     m_pValue = &Value;
229     m_pbRc = &bRc;
230 }
231
232 void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget,
233                                          CFX_WideString& Value, FX_BOOL& bRc)
234 {
235     Initial(JET_FIELD_CALCULATE);
236
237     if (pSource)
238         m_strSourceName = pSource->GetFullName();
239     ASSERT(pTarget != NULL);
240     m_strTargetName = pTarget->GetFullName();
241     m_pValue = &Value;
242     m_pbRc = &bRc;
243 }
244
245 void CJS_EventHandler::OnField_Format(CPDF_FormField* pTarget,
246                                       CFX_WideString& Value,
247                                       FX_BOOL bWillCommit)
248 {
249     Initial(JET_FIELD_FORMAT);
250
251     m_nCommitKey = 0;
252     ASSERT(pTarget != NULL);
253     m_strTargetName = pTarget->GetFullName();
254     m_pValue = &Value;
255     m_bWillCommit = bWillCommit;
256 }
257
258 void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
259 {
260     Initial(JET_SCREEN_FOCUS);
261
262     m_bModifier = bModifier;
263     m_bShift = bShift;
264     m_pTargetAnnot = pScreen;
265 }
266
267 void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
268 {
269     Initial(JET_SCREEN_BLUR);
270
271     m_bModifier = bModifier;
272     m_bShift = bShift;
273     m_pTargetAnnot = pScreen;
274 }
275
276 void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
277 {
278     Initial(JET_SCREEN_OPEN);
279
280     m_bModifier = bModifier;
281     m_bShift = bShift;
282     m_pTargetAnnot = pScreen;
283 }
284
285 void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
286 {
287     Initial(JET_SCREEN_CLOSE);
288
289     m_bModifier = bModifier;
290     m_bShift = bShift;
291     m_pTargetAnnot = pScreen;
292 }
293
294 void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
295 {
296     Initial(JET_SCREEN_MOUSEDOWN);
297
298     m_bModifier = bModifier;
299     m_bShift = bShift;
300     m_pTargetAnnot = pScreen;
301 }
302
303 void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
304 {
305     Initial(JET_SCREEN_MOUSEUP);
306
307     m_bModifier = bModifier;
308     m_bShift = bShift;
309     m_pTargetAnnot = pScreen;
310 }
311
312 void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
313 {
314     Initial(JET_SCREEN_MOUSEENTER);
315
316     m_bModifier = bModifier;
317     m_bShift = bShift;
318     m_pTargetAnnot = pScreen;
319 }
320
321 void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
322 {
323     Initial(JET_SCREEN_MOUSEEXIT);
324
325     m_bModifier = bModifier;
326     m_bShift = bShift;
327     m_pTargetAnnot = pScreen;
328 }
329
330 void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
331 {
332     Initial(JET_SCREEN_INVIEW);
333
334     m_bModifier = bModifier;
335     m_bShift = bShift;
336     m_pTargetAnnot = pScreen;
337 }
338
339 void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
340 {
341     Initial(JET_SCREEN_OUTVIEW);
342
343     m_bModifier = bModifier;
344     m_bShift = bShift;
345     m_pTargetAnnot = pScreen;
346 }
347
348 void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget)
349 {
350     Initial(JET_LINK_MOUSEUP);
351
352     m_pTargetDoc = pTarget;
353 }
354
355 void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark)
356 {
357     Initial(JET_BOOKMARK_MOUSEUP);
358
359     m_pTargetBookMark = pBookMark;
360 }
361
362 void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName)
363 {
364     Initial(JET_MENU_EXEC);
365
366     m_pTargetDoc = pTarget;
367     m_strTargetName = strTargetName;
368 }
369
370 void CJS_EventHandler::OnExternal_Exec()
371 {
372     Initial(JET_EXTERNAL_EXEC);
373 }
374
375 void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget)
376 {
377     Initial(JET_BATCH_EXEC);
378
379     m_pTargetDoc = pTarget;
380 }
381
382 void CJS_EventHandler::OnConsole_Exec()
383 {
384     Initial(JET_CONSOLE_EXEC);
385 }
386
387
388 void CJS_EventHandler::Initial(JS_EVENT_T type)
389 {
390     m_eEventType = type;
391
392     m_strTargetName = L"";
393     m_strSourceName = L"";
394     m_pWideStrChange = NULL;
395     m_WideStrChangeDu = L"";
396     m_WideStrChangeEx = L"";
397     m_nCommitKey = -1;
398     m_bKeyDown = FALSE;
399     m_bModifier = FALSE;
400     m_bShift = FALSE;
401     m_pISelEnd = NULL;
402     m_nSelEndDu = 0;
403     m_pISelStart = NULL;
404     m_nSelStartDu = 0;
405     m_bWillCommit = FALSE;
406     m_pValue = NULL;
407     m_bFieldFull = FALSE;
408     m_pbRc = NULL;
409     m_bRcDu = FALSE;
410
411     m_pSourceDoc = NULL;
412     m_pTargetBookMark = NULL;
413     m_pTargetDoc = NULL;
414     m_pTargetAnnot = NULL;
415
416     m_bValid = TRUE;
417 }
418
419 void CJS_EventHandler::Destroy()
420 {
421     m_bValid = FALSE;
422 }
423
424 FX_BOOL CJS_EventHandler::IsValid()
425 {
426     return m_bValid;
427 }
428
429 CFX_WideString & CJS_EventHandler::Change()
430 {
431     if (m_pWideStrChange) {
432         return *m_pWideStrChange;
433     }
434     return m_WideStrChangeDu;
435 }
436
437 CFX_WideString CJS_EventHandler::ChangeEx()
438 {
439     return m_WideStrChangeEx;
440 }
441
442 int CJS_EventHandler::CommitKey()
443 {
444     return m_nCommitKey;
445 }
446
447 FX_BOOL CJS_EventHandler::FieldFull()
448 {
449     return m_bFieldFull;
450 }
451
452 FX_BOOL CJS_EventHandler::KeyDown()
453 {
454     return m_bKeyDown;
455 }
456
457 FX_BOOL CJS_EventHandler::Modifier()
458 {
459     return m_bModifier;
460 }
461
462 const FX_WCHAR* CJS_EventHandler::Name()
463 {
464     switch (m_eEventType)
465     {
466     case JET_APP_INIT:          return L"Init";
467     case JET_BATCH_EXEC:        return L"Exec";
468     case JET_BOOKMARK_MOUSEUP:  return L"Mouse Up";
469     case JET_CONSOLE_EXEC:      return L"Exec";
470     case JET_DOC_DIDPRINT:      return L"DidPrint";
471     case JET_DOC_DIDSAVE:       return L"DidSave";
472     case JET_DOC_OPEN:          return L"Open";
473     case JET_DOC_WILLCLOSE:     return L"WillClose";
474     case JET_DOC_WILLPRINT:     return L"WillPrint";
475     case JET_DOC_WILLSAVE:      return L"WillSave";
476     case JET_EXTERNAL_EXEC:     return L"Exec";
477     case JET_FIELD_FOCUS:
478     case JET_SCREEN_FOCUS:      return L"Focus";
479     case JET_FIELD_BLUR:
480     case JET_SCREEN_BLUR:       return L"Blur";
481     case JET_FIELD_MOUSEDOWN:
482     case JET_SCREEN_MOUSEDOWN:  return L"Mouse Down";
483     case JET_FIELD_MOUSEUP:
484     case JET_SCREEN_MOUSEUP:    return L"Mouse Up";
485     case JET_FIELD_MOUSEENTER:
486     case JET_SCREEN_MOUSEENTER: return L"Mouse Enter";
487     case JET_FIELD_MOUSEEXIT:
488     case JET_SCREEN_MOUSEEXIT:  return L"Mouse Exit";
489     case JET_FIELD_CALCULATE:   return L"Calculate";
490     case JET_FIELD_FORMAT:      return L"Format";
491     case JET_FIELD_KEYSTROKE:   return L"Keystroke";
492     case JET_FIELD_VALIDATE:    return L"Validate";
493     case JET_LINK_MOUSEUP:      return L"Mouse Up";
494     case JET_MENU_EXEC:         return L"Exec";
495     case JET_PAGE_OPEN:
496     case JET_SCREEN_OPEN:       return L"Open";
497     case JET_PAGE_CLOSE:
498     case JET_SCREEN_CLOSE:      return L"Close";
499     case JET_SCREEN_INVIEW:
500     case JET_PAGE_INVIEW:       return L"InView";
501     case JET_PAGE_OUTVIEW:
502     case JET_SCREEN_OUTVIEW:    return L"OutView";
503     default:
504         return L"";
505     }
506
507     return L"";
508 }
509
510 const FX_WCHAR* CJS_EventHandler::Type()
511 {
512     switch (m_eEventType)
513     {
514     case JET_APP_INIT:          return L"App";
515     case JET_BATCH_EXEC:        return L"Batch";
516     case JET_BOOKMARK_MOUSEUP:  return L"BookMark";
517     case JET_CONSOLE_EXEC:      return L"Console";
518     case JET_DOC_DIDPRINT:
519     case JET_DOC_DIDSAVE:
520     case JET_DOC_OPEN:
521     case JET_DOC_WILLCLOSE:
522     case JET_DOC_WILLPRINT:
523     case JET_DOC_WILLSAVE:      return L"Doc";
524     case JET_EXTERNAL_EXEC:     return L"External";
525     case JET_FIELD_BLUR:
526     case JET_FIELD_FOCUS:
527     case JET_FIELD_MOUSEDOWN:
528     case JET_FIELD_MOUSEENTER:
529     case JET_FIELD_MOUSEEXIT:
530     case JET_FIELD_MOUSEUP:
531     case JET_FIELD_CALCULATE:
532     case JET_FIELD_FORMAT:
533     case JET_FIELD_KEYSTROKE:
534     case JET_FIELD_VALIDATE:    return L"Field";
535     case JET_SCREEN_FOCUS:
536     case JET_SCREEN_BLUR:
537     case JET_SCREEN_OPEN:
538     case JET_SCREEN_CLOSE:
539     case JET_SCREEN_MOUSEDOWN:
540     case JET_SCREEN_MOUSEUP:
541     case JET_SCREEN_MOUSEENTER:
542     case JET_SCREEN_MOUSEEXIT:
543     case JET_SCREEN_INVIEW:
544     case JET_SCREEN_OUTVIEW:    return L"Screen";
545     case JET_LINK_MOUSEUP:      return L"Link";
546     case JET_MENU_EXEC:         return L"Menu";
547     case JET_PAGE_OPEN:
548     case JET_PAGE_CLOSE:
549     case JET_PAGE_INVIEW:
550     case JET_PAGE_OUTVIEW:return L"Page";
551     default:
552         return L"";
553     }
554
555     return L"";
556 }
557
558 FX_BOOL& CJS_EventHandler::Rc()
559 {
560     if (m_pbRc) {
561         return *m_pbRc;
562     }
563     return m_bRcDu;
564 }
565
566 int & CJS_EventHandler::SelEnd()
567 {
568     if (m_pISelEnd) {
569         return *m_pISelEnd;
570     }
571     return m_nSelEndDu;
572 }
573
574 int & CJS_EventHandler::SelStart()
575 {
576     if (m_pISelStart) {
577         return *m_pISelStart;
578     }
579     return m_nSelStartDu;
580 }
581
582 FX_BOOL CJS_EventHandler::Shift()
583 {
584     return m_bShift;
585 }
586
587 Field* CJS_EventHandler::Source()
588 {
589     ASSERT(m_pJSContext != NULL);
590
591     CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
592
593     JSFXObject  pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
594     ASSERT(pDocObj.IsEmpty() == FALSE);
595     JSFXObject  pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
596     ASSERT(pFieldObj.IsEmpty() == FALSE);
597
598     CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
599     ASSERT(pJSDocument != NULL);
600     Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
601     ASSERT(pDocument != NULL);
602     if (m_pTargetDoc != NULL)
603         pDocument->AttachDoc(m_pTargetDoc);
604     else
605         pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
606
607     //if (m_pSourceField == NULL)
608     //  return NULL;
609     //CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField);
610     //CPDF_FormField* pFormField = pWidget->GetFormField();
611     //ASSERT(pFormField);
612     //CFX_WideString csFieldName = pFormField->GetFullName();
613     CJS_Field * pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
614     ASSERT(pJSField != NULL);
615     Field * pField = (Field *)pJSField->GetEmbedObject();
616     ASSERT(pField != NULL);
617     pField->AttachField(pDocument, m_strSourceName);
618     return pField;
619 }
620
621 Field* CJS_EventHandler::Target_Field()
622 {
623     ASSERT(m_pJSContext != NULL);
624
625     CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
626
627     JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
628     ASSERT(pDocObj.IsEmpty() == FALSE);
629     JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
630     ASSERT(pFieldObj.IsEmpty() == FALSE);
631
632     CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
633     ASSERT(pJSDocument != NULL);
634     Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
635     ASSERT(pDocument != NULL);
636     if (m_pTargetDoc != NULL)
637         pDocument->AttachDoc(m_pTargetDoc);
638     else
639         pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
640
641     CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
642     ASSERT(pJSField != NULL);
643
644     Field* pField = (Field *)pJSField->GetEmbedObject();
645     ASSERT(pField != NULL);
646
647     pField->AttachField(pDocument, m_strTargetName);
648     return pField;
649 }
650
651 CFX_WideString& CJS_EventHandler::Value()
652 {
653     return *m_pValue;
654 }
655
656 FX_BOOL CJS_EventHandler::WillCommit()
657 {
658     return m_bWillCommit;
659 }
660
661 CFX_WideString CJS_EventHandler::TargetName()
662 {
663     return m_strTargetName;
664 }