1 // Copyright 2017 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 "fxjs/xfa/cjx_field.h"
8 
9 #include <vector>
10 
11 #include "core/fxcrt/cfx_decimal.h"
12 #include "fxjs/cfxjse_value.h"
13 #include "fxjs/js_resources.h"
14 #include "xfa/fxfa/cxfa_eventparam.h"
15 #include "xfa/fxfa/cxfa_ffnotify.h"
16 #include "xfa/fxfa/fxfa.h"
17 #include "xfa/fxfa/parser/cxfa_document.h"
18 #include "xfa/fxfa/parser/cxfa_field.h"
19 #include "xfa/fxfa/parser/cxfa_value.h"
20 
21 const CJX_MethodSpec CJX_Field::MethodSpecs[] = {
22     {"addItem", addItem_static},
23     {"boundItem", boundItem_static},
24     {"clearItems", clearItems_static},
25     {"deleteItem", deleteItem_static},
26     {"execCalculate", execCalculate_static},
27     {"execEvent", execEvent_static},
28     {"execInitialize", execInitialize_static},
29     {"execValidate", execValidate_static},
30     {"getDisplayItem", getDisplayItem_static},
31     {"getItemState", getItemState_static},
32     {"getSaveItem", getSaveItem_static},
33     {"setItemState", setItemState_static}};
34 
CJX_Field(CXFA_Field * field)35 CJX_Field::CJX_Field(CXFA_Field* field) : CJX_Container(field) {
36   DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
37 }
38 
~CJX_Field()39 CJX_Field::~CJX_Field() {}
40 
clearItems(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)41 CJS_Return CJX_Field::clearItems(
42     CJS_V8* runtime,
43     const std::vector<v8::Local<v8::Value>>& params) {
44   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
45   if (pWidgetAcc)
46     pWidgetAcc->DeleteItem(-1, true, false);
47   return CJS_Return(true);
48 }
49 
execEvent(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)50 CJS_Return CJX_Field::execEvent(
51     CJS_V8* runtime,
52     const std::vector<v8::Local<v8::Value>>& params) {
53   if (params.size() != 1)
54     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
55 
56   WideString eventString = runtime->ToWideString(params[0]);
57   int32_t iRet =
58       execSingleEventByName(eventString.AsStringView(), XFA_Element::Field);
59   if (eventString != L"validate")
60     return CJS_Return(true);
61 
62   return CJS_Return(runtime->NewBoolean(iRet != XFA_EVENTERROR_Error));
63 }
64 
execInitialize(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)65 CJS_Return CJX_Field::execInitialize(
66     CJS_V8* runtime,
67     const std::vector<v8::Local<v8::Value>>& params) {
68   if (!params.empty())
69     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
70 
71   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
72   if (pNotify) {
73     pNotify->ExecEventByDeepFirst(GetXFANode(), XFA_EVENT_Initialize, false,
74                                   false);
75   }
76   return CJS_Return(true);
77 }
78 
deleteItem(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)79 CJS_Return CJX_Field::deleteItem(
80     CJS_V8* runtime,
81     const std::vector<v8::Local<v8::Value>>& params) {
82   if (params.size() != 1)
83     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
84 
85   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
86   if (!pWidgetAcc)
87     return CJS_Return(true);
88 
89   bool bValue = pWidgetAcc->DeleteItem(runtime->ToInt32(params[0]), true, true);
90   return CJS_Return(runtime->NewBoolean(bValue));
91 }
92 
getSaveItem(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)93 CJS_Return CJX_Field::getSaveItem(
94     CJS_V8* runtime,
95     const std::vector<v8::Local<v8::Value>>& params) {
96   if (params.size() != 1)
97     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
98 
99   int32_t iIndex = runtime->ToInt32(params[0]);
100   if (iIndex < 0)
101     return CJS_Return(runtime->NewNull());
102 
103   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
104   if (!pWidgetAcc)
105     return CJS_Return(runtime->NewNull());
106 
107   Optional<WideString> value = pWidgetAcc->GetChoiceListItem(iIndex, true);
108   if (!value)
109     return CJS_Return(runtime->NewNull());
110 
111   return CJS_Return(runtime->NewString(value->UTF8Encode().AsStringView()));
112 }
113 
boundItem(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)114 CJS_Return CJX_Field::boundItem(
115     CJS_V8* runtime,
116     const std::vector<v8::Local<v8::Value>>& params) {
117   if (params.size() != 1)
118     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
119 
120   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
121   if (!pWidgetAcc)
122     return CJS_Return(true);
123 
124   WideString value = runtime->ToWideString(params[0]);
125   WideString boundValue = pWidgetAcc->GetItemValue(value.AsStringView());
126   return CJS_Return(runtime->NewString(boundValue.UTF8Encode().AsStringView()));
127 }
128 
getItemState(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)129 CJS_Return CJX_Field::getItemState(
130     CJS_V8* runtime,
131     const std::vector<v8::Local<v8::Value>>& params) {
132   if (params.size() != 1)
133     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
134 
135   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
136   if (!pWidgetAcc)
137     return CJS_Return(true);
138 
139   int32_t state = pWidgetAcc->GetItemState(runtime->ToInt32(params[0]));
140   return CJS_Return(runtime->NewBoolean(state != 0));
141 }
142 
execCalculate(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)143 CJS_Return CJX_Field::execCalculate(
144     CJS_V8* runtime,
145     const std::vector<v8::Local<v8::Value>>& params) {
146   if (!params.empty())
147     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
148 
149   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
150   if (pNotify) {
151     pNotify->ExecEventByDeepFirst(GetXFANode(), XFA_EVENT_Calculate, false,
152                                   false);
153   }
154   return CJS_Return(true);
155 }
156 
getDisplayItem(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)157 CJS_Return CJX_Field::getDisplayItem(
158     CJS_V8* runtime,
159     const std::vector<v8::Local<v8::Value>>& params) {
160   if (params.size() != 1)
161     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
162 
163   int32_t iIndex = runtime->ToInt32(params[0]);
164   if (iIndex < 0)
165     return CJS_Return(runtime->NewNull());
166 
167   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
168   if (!pWidgetAcc)
169     return CJS_Return(runtime->NewNull());
170 
171   Optional<WideString> value = pWidgetAcc->GetChoiceListItem(iIndex, false);
172   if (!value)
173     return CJS_Return(runtime->NewNull());
174 
175   return CJS_Return(runtime->NewString(value->UTF8Encode().AsStringView()));
176 }
177 
setItemState(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)178 CJS_Return CJX_Field::setItemState(
179     CJS_V8* runtime,
180     const std::vector<v8::Local<v8::Value>>& params) {
181   if (params.size() != 2)
182     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
183 
184   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
185   if (!pWidgetAcc)
186     return CJS_Return(true);
187 
188   int32_t iIndex = runtime->ToInt32(params[0]);
189   if (runtime->ToInt32(params[1]) != 0) {
190     pWidgetAcc->SetItemState(iIndex, true, true, true, true);
191     return CJS_Return(true);
192   }
193   if (pWidgetAcc->GetItemState(iIndex))
194     pWidgetAcc->SetItemState(iIndex, false, true, true, true);
195 
196   return CJS_Return(true);
197 }
198 
addItem(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)199 CJS_Return CJX_Field::addItem(CJS_V8* runtime,
200                               const std::vector<v8::Local<v8::Value>>& params) {
201   if (params.size() != 1 && params.size() != 2)
202     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
203 
204   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
205   if (!pWidgetAcc)
206     return CJS_Return(true);
207 
208   WideString label;
209   if (params.size() >= 1)
210     label = runtime->ToWideString(params[0]);
211 
212   WideString value;
213   if (params.size() >= 2)
214     value = runtime->ToWideString(params[1]);
215 
216   pWidgetAcc->InsertItem(label, value, true);
217   return CJS_Return(true);
218 }
219 
execValidate(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)220 CJS_Return CJX_Field::execValidate(
221     CJS_V8* runtime,
222     const std::vector<v8::Local<v8::Value>>& params) {
223   if (!params.empty())
224     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
225 
226   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
227   if (!pNotify)
228     return CJS_Return(runtime->NewBoolean(false));
229 
230   int32_t iRet = pNotify->ExecEventByDeepFirst(GetXFANode(), XFA_EVENT_Validate,
231                                                false, false);
232   return CJS_Return(runtime->NewBoolean(iRet != XFA_EVENTERROR_Error));
233 }
234 
defaultValue(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)235 void CJX_Field::defaultValue(CFXJSE_Value* pValue,
236                              bool bSetting,
237                              XFA_Attribute eAttribute) {
238   CXFA_Node* xfaNode = GetXFANode();
239   CXFA_WidgetAcc* pWidgetAcc = xfaNode->GetWidgetAcc();
240   if (!pWidgetAcc)
241     return;
242 
243   if (bSetting) {
244     if (pValue) {
245       pWidgetAcc->SetPreNull(pWidgetAcc->IsNull());
246       pWidgetAcc->SetIsNull(pValue->IsNull());
247     }
248 
249     WideString wsNewText;
250     if (pValue && !(pValue->IsNull() || pValue->IsUndefined()))
251       wsNewText = pValue->ToWideString();
252 
253     CXFA_Node* pUIChild = pWidgetAcc->GetUIChild();
254     if (pUIChild->GetElementType() == XFA_Element::NumericEdit) {
255       wsNewText = pWidgetAcc->NumericLimit(
256           wsNewText, pWidgetAcc->GetLeadDigits(), pWidgetAcc->GetFracDigits());
257     }
258 
259     CXFA_WidgetAcc* pContainerWidgetAcc = xfaNode->GetContainerWidgetAcc();
260     WideString wsFormatText(wsNewText);
261     if (pContainerWidgetAcc)
262       wsFormatText = pContainerWidgetAcc->GetFormatDataValue(wsNewText);
263 
264     SetContent(wsNewText, wsFormatText, true, true, true);
265     return;
266   }
267 
268   WideString content = GetContent(true);
269   if (content.IsEmpty()) {
270     pValue->SetNull();
271     return;
272   }
273 
274   CXFA_Node* pUIChild = pWidgetAcc->GetUIChild();
275   CXFA_Node* formValue = xfaNode->GetFormValueIfExists();
276   CXFA_Node* pNode = formValue ? formValue->GetFirstChild() : nullptr;
277   if (pNode && pNode->GetElementType() == XFA_Element::Decimal) {
278     if (pUIChild->GetElementType() == XFA_Element::NumericEdit &&
279         (pNode->JSObject()->GetInteger(XFA_Attribute::FracDigits) == -1)) {
280       pValue->SetString(content.UTF8Encode().AsStringView());
281     } else {
282       CFX_Decimal decimal(content.AsStringView());
283       pValue->SetFloat((float)(double)decimal);
284     }
285   } else if (pNode && pNode->GetElementType() == XFA_Element::Integer) {
286     pValue->SetInteger(FXSYS_wtoi(content.c_str()));
287   } else if (pNode && pNode->GetElementType() == XFA_Element::Boolean) {
288     pValue->SetBoolean(FXSYS_wtoi(content.c_str()) == 0 ? false : true);
289   } else if (pNode && pNode->GetElementType() == XFA_Element::Float) {
290     CFX_Decimal decimal(content.AsStringView());
291     pValue->SetFloat((float)(double)decimal);
292   } else {
293     pValue->SetString(content.UTF8Encode().AsStringView());
294   }
295 }
296 
editValue(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)297 void CJX_Field::editValue(CFXJSE_Value* pValue,
298                           bool bSetting,
299                           XFA_Attribute eAttribute) {
300   CXFA_WidgetAcc* pWidgetAcc = GetXFANode()->GetWidgetAcc();
301   if (!pWidgetAcc)
302     return;
303 
304   if (bSetting) {
305     pWidgetAcc->SetValue(XFA_VALUEPICTURE_Edit, pValue->ToWideString());
306     return;
307   }
308   pValue->SetString(
309       pWidgetAcc->GetValue(XFA_VALUEPICTURE_Edit).UTF8Encode().AsStringView());
310 }
311 
formatMessage(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)312 void CJX_Field::formatMessage(CFXJSE_Value* pValue,
313                               bool bSetting,
314                               XFA_Attribute eAttribute) {
315   Script_Som_Message(pValue, bSetting, XFA_SOM_FormatMessage);
316 }
317 
formattedValue(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)318 void CJX_Field::formattedValue(CFXJSE_Value* pValue,
319                                bool bSetting,
320                                XFA_Attribute eAttribute) {
321   CXFA_WidgetAcc* pWidgetAcc = GetXFANode()->GetWidgetAcc();
322   if (!pWidgetAcc)
323     return;
324 
325   if (bSetting) {
326     pWidgetAcc->SetValue(XFA_VALUEPICTURE_Display, pValue->ToWideString());
327     return;
328   }
329   pValue->SetString(pWidgetAcc->GetValue(XFA_VALUEPICTURE_Display)
330                         .UTF8Encode()
331                         .AsStringView());
332 }
333 
parentSubform(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)334 void CJX_Field::parentSubform(CFXJSE_Value* pValue,
335                               bool bSetting,
336                               XFA_Attribute eAttribute) {
337   if (bSetting) {
338     ThrowInvalidPropertyException();
339     return;
340   }
341   pValue->SetNull();
342 }
343 
selectedIndex(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)344 void CJX_Field::selectedIndex(CFXJSE_Value* pValue,
345                               bool bSetting,
346                               XFA_Attribute eAttribute) {
347   CXFA_WidgetAcc* pWidgetAcc = GetXFANode()->GetWidgetAcc();
348   if (!pWidgetAcc)
349     return;
350 
351   if (!bSetting) {
352     pValue->SetInteger(pWidgetAcc->GetSelectedItem(0));
353     return;
354   }
355 
356   int32_t iIndex = pValue->ToInteger();
357   if (iIndex == -1) {
358     pWidgetAcc->ClearAllSelections();
359     return;
360   }
361 
362   pWidgetAcc->SetItemState(iIndex, true, true, true, true);
363 }
364 
access(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)365 void CJX_Field::access(CFXJSE_Value* pValue,
366                        bool bSetting,
367                        XFA_Attribute eAttribute) {
368   Script_Attribute_String(pValue, bSetting, eAttribute);
369 }
370 
accessKey(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)371 void CJX_Field::accessKey(CFXJSE_Value* pValue,
372                           bool bSetting,
373                           XFA_Attribute eAttribute) {
374   Script_Attribute_String(pValue, bSetting, eAttribute);
375 }
376 
anchorType(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)377 void CJX_Field::anchorType(CFXJSE_Value* pValue,
378                            bool bSetting,
379                            XFA_Attribute eAttribute) {
380   Script_Attribute_String(pValue, bSetting, eAttribute);
381 }
382 
borderColor(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)383 void CJX_Field::borderColor(CFXJSE_Value* pValue,
384                             bool bSetting,
385                             XFA_Attribute eAttribute) {
386   Script_Som_BorderColor(pValue, bSetting, eAttribute);
387 }
388 
borderWidth(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)389 void CJX_Field::borderWidth(CFXJSE_Value* pValue,
390                             bool bSetting,
391                             XFA_Attribute eAttribute) {
392   Script_Som_BorderWidth(pValue, bSetting, eAttribute);
393 }
394 
colSpan(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)395 void CJX_Field::colSpan(CFXJSE_Value* pValue,
396                         bool bSetting,
397                         XFA_Attribute eAttribute) {
398   Script_Attribute_String(pValue, bSetting, eAttribute);
399 }
400 
fillColor(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)401 void CJX_Field::fillColor(CFXJSE_Value* pValue,
402                           bool bSetting,
403                           XFA_Attribute eAttribute) {
404   Script_Som_FillColor(pValue, bSetting, eAttribute);
405 }
406 
fontColor(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)407 void CJX_Field::fontColor(CFXJSE_Value* pValue,
408                           bool bSetting,
409                           XFA_Attribute eAttribute) {
410   Script_Som_FontColor(pValue, bSetting, eAttribute);
411 }
412 
h(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)413 void CJX_Field::h(CFXJSE_Value* pValue,
414                   bool bSetting,
415                   XFA_Attribute eAttribute) {
416   Script_Attribute_String(pValue, bSetting, eAttribute);
417 }
418 
hAlign(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)419 void CJX_Field::hAlign(CFXJSE_Value* pValue,
420                        bool bSetting,
421                        XFA_Attribute eAttribute) {
422   Script_Attribute_String(pValue, bSetting, eAttribute);
423 }
424 
locale(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)425 void CJX_Field::locale(CFXJSE_Value* pValue,
426                        bool bSetting,
427                        XFA_Attribute eAttribute) {
428   Script_Attribute_String(pValue, bSetting, eAttribute);
429 }
430 
mandatory(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)431 void CJX_Field::mandatory(CFXJSE_Value* pValue,
432                           bool bSetting,
433                           XFA_Attribute eAttribute) {
434   Script_Som_Mandatory(pValue, bSetting, eAttribute);
435 }
436 
mandatoryMessage(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)437 void CJX_Field::mandatoryMessage(CFXJSE_Value* pValue,
438                                  bool bSetting,
439                                  XFA_Attribute eAttribute) {
440   Script_Som_MandatoryMessage(pValue, bSetting, eAttribute);
441 }
442 
maxH(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)443 void CJX_Field::maxH(CFXJSE_Value* pValue,
444                      bool bSetting,
445                      XFA_Attribute eAttribute) {
446   Script_Attribute_String(pValue, bSetting, eAttribute);
447 }
448 
maxW(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)449 void CJX_Field::maxW(CFXJSE_Value* pValue,
450                      bool bSetting,
451                      XFA_Attribute eAttribute) {
452   Script_Attribute_String(pValue, bSetting, eAttribute);
453 }
454 
minH(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)455 void CJX_Field::minH(CFXJSE_Value* pValue,
456                      bool bSetting,
457                      XFA_Attribute eAttribute) {
458   Script_Attribute_String(pValue, bSetting, eAttribute);
459 }
460 
minW(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)461 void CJX_Field::minW(CFXJSE_Value* pValue,
462                      bool bSetting,
463                      XFA_Attribute eAttribute) {
464   Script_Attribute_String(pValue, bSetting, eAttribute);
465 }
466 
presence(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)467 void CJX_Field::presence(CFXJSE_Value* pValue,
468                          bool bSetting,
469                          XFA_Attribute eAttribute) {
470   Script_Attribute_String(pValue, bSetting, eAttribute);
471 }
472 
rawValue(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)473 void CJX_Field::rawValue(CFXJSE_Value* pValue,
474                          bool bSetting,
475                          XFA_Attribute eAttribute) {
476   defaultValue(pValue, bSetting, eAttribute);
477 }
478 
relevant(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)479 void CJX_Field::relevant(CFXJSE_Value* pValue,
480                          bool bSetting,
481                          XFA_Attribute eAttribute) {
482   Script_Attribute_String(pValue, bSetting, eAttribute);
483 }
484 
rotate(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)485 void CJX_Field::rotate(CFXJSE_Value* pValue,
486                        bool bSetting,
487                        XFA_Attribute eAttribute) {
488   Script_Attribute_String(pValue, bSetting, eAttribute);
489 }
490 
use(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)491 void CJX_Field::use(CFXJSE_Value* pValue,
492                     bool bSetting,
493                     XFA_Attribute eAttribute) {
494   Script_Attribute_String(pValue, bSetting, eAttribute);
495 }
496 
usehref(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)497 void CJX_Field::usehref(CFXJSE_Value* pValue,
498                         bool bSetting,
499                         XFA_Attribute eAttribute) {
500   Script_Attribute_String(pValue, bSetting, eAttribute);
501 }
502 
validationMessage(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)503 void CJX_Field::validationMessage(CFXJSE_Value* pValue,
504                                   bool bSetting,
505                                   XFA_Attribute eAttribute) {
506   Script_Som_ValidationMessage(pValue, bSetting, eAttribute);
507 }
508 
vAlign(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)509 void CJX_Field::vAlign(CFXJSE_Value* pValue,
510                        bool bSetting,
511                        XFA_Attribute eAttribute) {
512   Script_Attribute_String(pValue, bSetting, eAttribute);
513 }
514 
w(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)515 void CJX_Field::w(CFXJSE_Value* pValue,
516                   bool bSetting,
517                   XFA_Attribute eAttribute) {
518   Script_Attribute_String(pValue, bSetting, eAttribute);
519 }
520 
x(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)521 void CJX_Field::x(CFXJSE_Value* pValue,
522                   bool bSetting,
523                   XFA_Attribute eAttribute) {
524   Script_Attribute_String(pValue, bSetting, eAttribute);
525 }
526 
y(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)527 void CJX_Field::y(CFXJSE_Value* pValue,
528                   bool bSetting,
529                   XFA_Attribute eAttribute) {
530   Script_Attribute_String(pValue, bSetting, eAttribute);
531 }
532