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_ResMgr.h"
11#include "../../include/javascript/JS_Context.h"
12#include "../../include/javascript/JS_Runtime.h"
13#include "../../include/javascript/JS_Define.h"
14#include "../../include/javascript/JS_Object.h"
15#include "../../include/javascript/JS_Value.h"
16#include "../../include/javascript/Document.h"
17#include "../../include/javascript/Field.h"
18
19/* ---------------------------- CJS_EventHandler ---------------------------- */
20
21CJS_EventHandler::CJS_EventHandler(CJS_Context * pContext)	 :
22	m_pJSContext(pContext),
23	m_eEventType(JET_UNKNOWN),
24	m_bValid(FALSE),
25	m_pWideStrChange(NULL),
26	m_nCommitKey(-1),
27	m_bKeyDown(FALSE),
28	m_bModifier(FALSE),
29	m_bShift(FALSE),
30	m_pISelEnd(NULL),
31	m_nSelEndDu(0),
32	m_pISelStart(NULL),
33	m_nSelStartDu(0),
34	m_bWillCommit(FALSE),
35	m_pValue(NULL),
36	m_bFieldFull(FALSE),
37	m_pbRc(NULL),
38	m_bRcDu(FALSE),
39	m_pSourceDoc(NULL),
40	m_pTargetBookMark(NULL),
41	m_pTargetDoc(NULL),
42	m_pTargetAnnot(NULL)
43{
44}
45
46CJS_EventHandler::~CJS_EventHandler()
47{
48}
49
50void CJS_EventHandler::OnApp_Init()
51{
52	Initial(JET_APP_INIT);
53}
54
55void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName)
56{
57	Initial(JET_DOC_OPEN);
58
59	m_pTargetDoc = pDoc;
60	m_strTargetName = strTargetName;
61}
62
63void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc)
64{
65	Initial(JET_DOC_WILLPRINT);
66
67	m_pTargetDoc = pDoc;
68}
69
70void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc)
71{
72	Initial(JET_DOC_DIDPRINT);
73
74	m_pTargetDoc = pDoc;
75}
76
77void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc)
78{
79	Initial(JET_DOC_WILLSAVE);
80	m_pTargetDoc = pDoc;
81}
82
83void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc)
84{
85	Initial(JET_DOC_DIDSAVE);
86
87	m_pTargetDoc = pDoc;
88}
89
90void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc)
91{
92	Initial(JET_DOC_WILLCLOSE);
93
94	m_pTargetDoc = pDoc;
95}
96
97void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc)
98{
99	Initial(JET_PAGE_OPEN);
100
101	m_pTargetDoc = pDoc;
102}
103
104void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc)
105{
106	Initial(JET_PAGE_CLOSE);
107
108	m_pTargetDoc = pDoc;
109}
110
111void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc)
112{
113	Initial(JET_PAGE_INVIEW);
114
115	m_pTargetDoc = pDoc;
116}
117
118void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc)
119{
120	Initial(JET_PAGE_OUTVIEW);
121
122	m_pTargetDoc = pDoc;
123}
124
125void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
126{
127	Initial(JET_FIELD_MOUSEENTER);
128
129	m_bModifier = bModifier;
130	m_bShift = bShift;
131
132	ASSERT(pTarget != NULL);
133	m_strTargetName = pTarget->GetFullName();
134}
135
136void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
137{
138	Initial(JET_FIELD_MOUSEEXIT);
139
140	m_bModifier = bModifier;
141	m_bShift = bShift;
142	ASSERT(pTarget != NULL);
143	m_strTargetName = pTarget->GetFullName();
144}
145
146void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
147{
148	Initial(JET_FIELD_MOUSEDOWN);
149	m_eEventType = JET_FIELD_MOUSEDOWN;
150
151	m_bModifier = bModifier;
152	m_bShift = bShift;
153	ASSERT(pTarget != NULL);
154	m_strTargetName = pTarget->GetFullName();
155}
156
157void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
158{
159	Initial(JET_FIELD_MOUSEUP);
160
161	m_bModifier = bModifier;
162	m_bShift = bShift;
163	ASSERT(pTarget != NULL);
164	m_strTargetName = pTarget->GetFullName();
165}
166
167void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
168									 const CFX_WideString& Value)
169{
170	Initial(JET_FIELD_FOCUS);
171
172	m_bModifier = bModifier;
173	m_bShift = bShift;
174	ASSERT(pTarget != NULL);
175	m_strTargetName = pTarget->GetFullName();
176	m_pValue = (CFX_WideString*)&Value;
177}
178
179void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
180									const CFX_WideString& Value)
181{
182	Initial(JET_FIELD_BLUR);
183
184	m_bModifier = bModifier;
185	m_bShift = bShift;
186	ASSERT(pTarget != NULL);
187	m_strTargetName = pTarget->GetFullName();
188	m_pValue = (CFX_WideString*)&Value;
189}
190
191void CJS_EventHandler::OnField_Keystroke(int nCommitKey, CFX_WideString &strChange,
192										 const CFX_WideString& strChangeEx, FX_BOOL KeyDown,
193										 FX_BOOL bModifier, int& nSelEnd, int& nSelStart,
194										 FX_BOOL bShift, CPDF_FormField* pTarget,
195										 CFX_WideString& Value, FX_BOOL bWillCommit,
196										  FX_BOOL bFieldFull, FX_BOOL& bRc)
197{
198	Initial(JET_FIELD_KEYSTROKE);
199
200	m_nCommitKey = nCommitKey;
201	m_pWideStrChange = &strChange;
202	m_WideStrChangeEx = strChangeEx;
203	m_bKeyDown = KeyDown;
204	m_bModifier = bModifier;
205	m_pISelEnd = &nSelEnd;
206	m_pISelStart = &nSelStart;
207	m_bShift = bShift;
208	ASSERT(pTarget != NULL);
209	m_strTargetName = pTarget->GetFullName();
210	m_pValue = &Value;
211	m_bWillCommit = bWillCommit;
212	m_pbRc = &bRc;
213	m_bFieldFull = bFieldFull;
214}
215
216void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
217										FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift,
218										CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc)
219{
220	Initial(JET_FIELD_VALIDATE);
221
222	m_pWideStrChange = &strChange;
223	m_WideStrChangeEx = strChangeEx;
224	m_bKeyDown = bKeyDown;
225	m_bModifier = bModifier;
226	m_bShift = bShift;
227	ASSERT(pTarget != NULL);
228	m_strTargetName = pTarget->GetFullName();
229	m_pValue = &Value;
230	m_pbRc = &bRc;
231}
232
233void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget,
234										 CFX_WideString& Value, FX_BOOL& bRc)
235{
236	Initial(JET_FIELD_CALCULATE);
237
238	if (pSource)
239		m_strSourceName = pSource->GetFullName();
240	ASSERT(pTarget != NULL);
241	m_strTargetName = pTarget->GetFullName();
242    m_pValue = &Value;
243	m_pbRc = &bRc;
244}
245
246void CJS_EventHandler::OnField_Format(int nCommitKey, CPDF_FormField* pTarget,
247									  CFX_WideString& Value, FX_BOOL bWillCommit)
248{
249	Initial(JET_FIELD_FORMAT);
250
251	m_nCommitKey = nCommitKey;
252	ASSERT(pTarget != NULL);
253	m_strTargetName = pTarget->GetFullName();
254	m_pValue = &Value;
255	m_bWillCommit = bWillCommit;
256}
257
258void 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
267void 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
276void 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
285void 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
294void 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
303void 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
312void 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
321void 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
330void 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
339void 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
348void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget)
349{
350	Initial(JET_LINK_MOUSEUP);
351
352	m_pTargetDoc = pTarget;
353}
354
355void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark)
356{
357	Initial(JET_BOOKMARK_MOUSEUP);
358
359	m_pTargetBookMark = pBookMark;
360}
361
362void 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
370void CJS_EventHandler::OnExternal_Exec()
371{
372	Initial(JET_EXTERNAL_EXEC);
373}
374
375void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget)
376{
377	Initial(JET_BATCH_EXEC);
378
379	m_pTargetDoc = pTarget;
380}
381
382void CJS_EventHandler::OnConsole_Exec()
383{
384	Initial(JET_CONSOLE_EXEC);
385}
386
387
388void 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
419void CJS_EventHandler::Destroy()
420{
421	m_bValid = FALSE;
422}
423
424FX_BOOL CJS_EventHandler::IsValid()
425{
426	return m_bValid;
427}
428
429CFX_WideString & CJS_EventHandler::Change()
430{
431	if (m_pWideStrChange != NULL)
432		return *m_pWideStrChange;
433	else
434	{
435		return m_WideStrChangeDu;
436	}
437}
438
439CFX_WideString CJS_EventHandler::ChangeEx()
440{
441	return m_WideStrChangeEx;
442}
443
444int CJS_EventHandler::CommitKey()
445{
446	return m_nCommitKey;
447}
448
449FX_BOOL CJS_EventHandler::FieldFull()
450{
451	return m_bFieldFull;
452}
453
454FX_BOOL CJS_EventHandler::KeyDown()
455{
456	return m_bKeyDown;
457}
458
459FX_BOOL CJS_EventHandler::Modifier()
460{
461	return m_bModifier;
462}
463
464FX_LPCWSTR CJS_EventHandler::Name()
465{
466	switch (m_eEventType)
467	{
468	case JET_APP_INIT:			return (FX_LPCWSTR)L"Init";
469	case JET_BATCH_EXEC:		return (FX_LPCWSTR)L"Exec";
470	case JET_BOOKMARK_MOUSEUP:	return (FX_LPCWSTR)L"Mouse Up";
471	case JET_CONSOLE_EXEC:		return (FX_LPCWSTR)L"Exec";
472	case JET_DOC_DIDPRINT:		return (FX_LPCWSTR)L"DidPrint";
473	case JET_DOC_DIDSAVE:		return (FX_LPCWSTR)L"DidSave";
474	case JET_DOC_OPEN:			return (FX_LPCWSTR)L"Open";
475	case JET_DOC_WILLCLOSE:		return (FX_LPCWSTR)L"WillClose";
476	case JET_DOC_WILLPRINT:		return (FX_LPCWSTR)L"WillPrint";
477	case JET_DOC_WILLSAVE:		return (FX_LPCWSTR)L"WillSave";
478	case JET_EXTERNAL_EXEC:		return (FX_LPCWSTR)L"Exec";
479	case JET_FIELD_FOCUS:
480	case JET_SCREEN_FOCUS:		return (FX_LPCWSTR)L"Focus";
481	case JET_FIELD_BLUR:
482	case JET_SCREEN_BLUR:		return (FX_LPCWSTR)L"Blur";
483	case JET_FIELD_MOUSEDOWN:
484	case JET_SCREEN_MOUSEDOWN:	return (FX_LPCWSTR)L"Mouse Down";
485	case JET_FIELD_MOUSEUP:
486	case JET_SCREEN_MOUSEUP:	return (FX_LPCWSTR)L"Mouse Up";
487	case JET_FIELD_MOUSEENTER:
488	case JET_SCREEN_MOUSEENTER:	return (FX_LPCWSTR)L"Mouse Enter";
489	case JET_FIELD_MOUSEEXIT:
490	case JET_SCREEN_MOUSEEXIT:	return (FX_LPCWSTR)L"Mouse Exit";
491	case JET_FIELD_CALCULATE:	return (FX_LPCWSTR)L"Calculate";
492	case JET_FIELD_FORMAT:		return (FX_LPCWSTR)L"Format";
493	case JET_FIELD_KEYSTROKE:	return (FX_LPCWSTR)L"Keystroke";
494	case JET_FIELD_VALIDATE:	return (FX_LPCWSTR)L"Validate";
495	case JET_LINK_MOUSEUP:		return (FX_LPCWSTR)L"Mouse Up";
496	case JET_MENU_EXEC:			return (FX_LPCWSTR)L"Exec";
497	case JET_PAGE_OPEN:
498	case JET_SCREEN_OPEN:		return (FX_LPCWSTR)L"Open";
499	case JET_PAGE_CLOSE:
500	case JET_SCREEN_CLOSE:		return (FX_LPCWSTR)L"Close";
501	case JET_SCREEN_INVIEW:
502	case JET_PAGE_INVIEW:		return (FX_LPCWSTR)L"InView";
503	case JET_PAGE_OUTVIEW:
504	case JET_SCREEN_OUTVIEW:	return (FX_LPCWSTR)L"OutView";
505	default:
506		return (FX_LPCWSTR)L"";
507	}
508
509	return (FX_LPCWSTR)L"";
510}
511
512FX_LPCWSTR CJS_EventHandler::Type()
513{
514	switch (m_eEventType)
515	{
516	case JET_APP_INIT:			return (FX_LPCWSTR)L"App";
517	case JET_BATCH_EXEC:		return (FX_LPCWSTR)L"Batch";
518	case JET_BOOKMARK_MOUSEUP:	return (FX_LPCWSTR)L"BookMark";
519	case JET_CONSOLE_EXEC:		return (FX_LPCWSTR)L"Console";
520	case JET_DOC_DIDPRINT:
521	case JET_DOC_DIDSAVE:
522	case JET_DOC_OPEN:
523	case JET_DOC_WILLCLOSE:
524	case JET_DOC_WILLPRINT:
525	case JET_DOC_WILLSAVE:		return (FX_LPCWSTR)L"Doc";
526	case JET_EXTERNAL_EXEC:		return (FX_LPCWSTR)L"External";
527	case JET_FIELD_BLUR:
528	case JET_FIELD_FOCUS:
529	case JET_FIELD_MOUSEDOWN:
530	case JET_FIELD_MOUSEENTER:
531	case JET_FIELD_MOUSEEXIT:
532	case JET_FIELD_MOUSEUP:
533	case JET_FIELD_CALCULATE:
534	case JET_FIELD_FORMAT:
535	case JET_FIELD_KEYSTROKE:
536	case JET_FIELD_VALIDATE:	return (FX_LPCWSTR)L"Field";
537	case JET_SCREEN_FOCUS:
538	case JET_SCREEN_BLUR:
539	case JET_SCREEN_OPEN:
540	case JET_SCREEN_CLOSE:
541	case JET_SCREEN_MOUSEDOWN:
542	case JET_SCREEN_MOUSEUP:
543	case JET_SCREEN_MOUSEENTER:
544	case JET_SCREEN_MOUSEEXIT:
545	case JET_SCREEN_INVIEW:
546	case JET_SCREEN_OUTVIEW:	return (FX_LPCWSTR)L"Screen";
547	case JET_LINK_MOUSEUP:		return (FX_LPCWSTR)L"Link";
548	case JET_MENU_EXEC:			return (FX_LPCWSTR)L"Menu";
549	case JET_PAGE_OPEN:
550	case JET_PAGE_CLOSE:
551	case JET_PAGE_INVIEW:
552	case JET_PAGE_OUTVIEW:return (FX_LPCWSTR)L"Page";
553	default:
554		return (FX_LPCWSTR)L"";
555	}
556
557	return (FX_LPCWSTR)L"";
558}
559
560FX_BOOL& CJS_EventHandler::Rc()
561{
562	if (m_pbRc != NULL)
563		return *m_pbRc;
564	else
565	{
566		return m_bRcDu;
567	}
568}
569
570int & CJS_EventHandler::SelEnd()
571{
572	if (m_pISelEnd != NULL)
573	{
574		return *m_pISelEnd;
575	}
576	else
577	{
578		return m_nSelEndDu;
579	}
580}
581
582int & CJS_EventHandler::SelStart()
583{
584	if (m_pISelStart != NULL)
585		return * m_pISelStart;
586	else
587	{
588		return m_nSelStartDu;
589	}
590}
591
592FX_BOOL CJS_EventHandler::Shift()
593{
594	return m_bShift;
595}
596
597Field* CJS_EventHandler::Source()
598{
599	ASSERT(m_pJSContext != NULL);
600
601	CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
602
603	JSFXObject  pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
604	ASSERT(pDocObj.IsEmpty() == FALSE);
605	JSFXObject  pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
606	ASSERT(pFieldObj.IsEmpty() == FALSE);
607
608	CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
609	ASSERT(pJSDocument != NULL);
610	Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
611	ASSERT(pDocument != NULL);
612 	if (m_pTargetDoc != NULL)
613 		pDocument->AttachDoc(m_pTargetDoc);
614 	else
615 		pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
616
617	//if (m_pSourceField == NULL)
618	//	return NULL;
619	//CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField);
620	//CPDF_FormField* pFormField = pWidget->GetFormField();
621	//ASSERT(pFormField);
622	//CFX_WideString csFieldName = pFormField->GetFullName();
623	CJS_Field * pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
624	ASSERT(pJSField != NULL);
625	Field * pField = (Field *)pJSField->GetEmbedObject();
626	ASSERT(pField != NULL);
627	pField->AttachField(pDocument, m_strSourceName);
628	return pField;
629}
630
631Field* CJS_EventHandler::Target_Field()
632{
633	ASSERT(m_pJSContext != NULL);
634
635	CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
636
637	JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
638	ASSERT(pDocObj.IsEmpty() == FALSE);
639	JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
640	ASSERT(pFieldObj.IsEmpty() == FALSE);
641
642	CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
643	ASSERT(pJSDocument != NULL);
644	Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
645 	ASSERT(pDocument != NULL);
646 	if (m_pTargetDoc != NULL)
647 		pDocument->AttachDoc(m_pTargetDoc);
648 	else
649 		pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
650
651	CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
652	ASSERT(pJSField != NULL);
653
654	Field* pField = (Field *)pJSField->GetEmbedObject();
655	ASSERT(pField != NULL);
656
657	pField->AttachField(pDocument, m_strTargetName);
658	return pField;
659}
660
661CFX_WideString& CJS_EventHandler::Value()
662{
663	return *m_pValue;
664}
665
666FX_BOOL CJS_EventHandler::WillCommit()
667{
668	return m_bWillCommit;
669}
670
671CFX_WideString CJS_EventHandler::TargetName()
672{
673	return m_strTargetName;
674}
675
676
677