• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_exclgroup.h"
8 
9 #include <vector>
10 
11 #include "fxjs/cfxjse_engine.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_exclgroup.h"
19 
20 const CJX_MethodSpec CJX_ExclGroup::MethodSpecs[] = {
21     {"execCalculate", execCalculate_static},
22     {"execEvent", execEvent_static},
23     {"execInitialize", execInitialize_static},
24     {"execValidate", execValidate_static},
25     {"selectedMember", selectedMember_static}};
26 
CJX_ExclGroup(CXFA_ExclGroup * group)27 CJX_ExclGroup::CJX_ExclGroup(CXFA_ExclGroup* group) : CJX_Node(group) {
28   DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
29 }
30 
~CJX_ExclGroup()31 CJX_ExclGroup::~CJX_ExclGroup() {}
32 
execEvent(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)33 CJS_Return CJX_ExclGroup::execEvent(
34     CJS_V8* runtime,
35     const std::vector<v8::Local<v8::Value>>& params) {
36   if (params.size() != 1)
37     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
38 
39   execSingleEventByName(runtime->ToWideString(params[0]).AsStringView(),
40                         XFA_Element::ExclGroup);
41   return CJS_Return(true);
42 }
43 
execInitialize(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)44 CJS_Return CJX_ExclGroup::execInitialize(
45     CJS_V8* runtime,
46     const std::vector<v8::Local<v8::Value>>& params) {
47   if (!params.empty())
48     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
49 
50   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
51   if (pNotify)
52     pNotify->ExecEventByDeepFirst(GetXFANode(), XFA_EVENT_Initialize);
53   return CJS_Return(true);
54 }
55 
execCalculate(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)56 CJS_Return CJX_ExclGroup::execCalculate(
57     CJS_V8* runtime,
58     const std::vector<v8::Local<v8::Value>>& params) {
59   if (!params.empty())
60     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
61 
62   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
63   if (pNotify)
64     pNotify->ExecEventByDeepFirst(GetXFANode(), XFA_EVENT_Calculate);
65   return CJS_Return(true);
66 }
67 
execValidate(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)68 CJS_Return CJX_ExclGroup::execValidate(
69     CJS_V8* runtime,
70     const std::vector<v8::Local<v8::Value>>& params) {
71   if (!params.empty())
72     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
73 
74   CXFA_FFNotify* notify = GetDocument()->GetNotify();
75   if (!notify)
76     return CJS_Return(runtime->NewBoolean(false));
77 
78   int32_t iRet = notify->ExecEventByDeepFirst(GetXFANode(), XFA_EVENT_Validate);
79   return CJS_Return(runtime->NewBoolean(iRet != XFA_EVENTERROR_Error));
80 }
81 
selectedMember(CJS_V8 * runtime,const std::vector<v8::Local<v8::Value>> & params)82 CJS_Return CJX_ExclGroup::selectedMember(
83     CJS_V8* runtime,
84     const std::vector<v8::Local<v8::Value>>& params) {
85   if (!params.empty())
86     return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
87 
88   CXFA_WidgetAcc* pWidgetAcc = ToNode(GetXFAObject())->GetWidgetAcc();
89   if (!pWidgetAcc)
90     return CJS_Return(runtime->NewNull());
91 
92   CXFA_Node* pReturnNode = nullptr;
93   if (params.empty()) {
94     pReturnNode = pWidgetAcc->GetSelectedMember();
95   } else {
96     pReturnNode = pWidgetAcc->SetSelectedMember(
97         runtime->ToWideString(params[0]).AsStringView(), true);
98   }
99   if (!pReturnNode)
100     return CJS_Return(runtime->NewNull());
101 
102   CFXJSE_Value* value =
103       GetDocument()->GetScriptContext()->GetJSValueFromMap(pReturnNode);
104   if (!value)
105     return CJS_Return(runtime->NewNull());
106 
107   return CJS_Return(value->DirectGetValue().Get(runtime->GetIsolate()));
108 }
109 
defaultValue(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)110 void CJX_ExclGroup::defaultValue(CFXJSE_Value* pValue,
111                                  bool bSetting,
112                                  XFA_Attribute eAttribute) {
113   CXFA_WidgetAcc* pWidgetAcc = GetXFANode()->GetWidgetAcc();
114   if (!pWidgetAcc)
115     return;
116 
117   if (bSetting) {
118     pWidgetAcc->SetSelectedMemberByValue(pValue->ToWideString().AsStringView(),
119                                          true, true, true);
120     return;
121   }
122 
123   WideString wsValue = GetContent(true);
124   XFA_VERSION curVersion = GetDocument()->GetCurVersionMode();
125   if (wsValue.IsEmpty() && curVersion >= XFA_VERSION_300) {
126     pValue->SetNull();
127     return;
128   }
129   pValue->SetString(wsValue.UTF8Encode().AsStringView());
130 }
131 
rawValue(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)132 void CJX_ExclGroup::rawValue(CFXJSE_Value* pValue,
133                              bool bSetting,
134                              XFA_Attribute eAttribute) {
135   defaultValue(pValue, bSetting, eAttribute);
136 }
137 
transient(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)138 void CJX_ExclGroup::transient(CFXJSE_Value* pValue,
139                               bool bSetting,
140                               XFA_Attribute eAttribute) {}
141 
access(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)142 void CJX_ExclGroup::access(CFXJSE_Value* pValue,
143                            bool bSetting,
144                            XFA_Attribute eAttribute) {
145   Script_Attribute_String(pValue, bSetting, eAttribute);
146 }
147 
accessKey(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)148 void CJX_ExclGroup::accessKey(CFXJSE_Value* pValue,
149                               bool bSetting,
150                               XFA_Attribute eAttribute) {
151   Script_Attribute_String(pValue, bSetting, eAttribute);
152 }
153 
anchorType(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)154 void CJX_ExclGroup::anchorType(CFXJSE_Value* pValue,
155                                bool bSetting,
156                                XFA_Attribute eAttribute) {
157   Script_Attribute_String(pValue, bSetting, eAttribute);
158 }
159 
borderColor(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)160 void CJX_ExclGroup::borderColor(CFXJSE_Value* pValue,
161                                 bool bSetting,
162                                 XFA_Attribute eAttribute) {
163   Script_Som_BorderColor(pValue, bSetting, eAttribute);
164 }
165 
borderWidth(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)166 void CJX_ExclGroup::borderWidth(CFXJSE_Value* pValue,
167                                 bool bSetting,
168                                 XFA_Attribute eAttribute) {
169   Script_Som_BorderWidth(pValue, bSetting, eAttribute);
170 }
171 
colSpan(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)172 void CJX_ExclGroup::colSpan(CFXJSE_Value* pValue,
173                             bool bSetting,
174                             XFA_Attribute eAttribute) {
175   Script_Attribute_String(pValue, bSetting, eAttribute);
176 }
177 
fillColor(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)178 void CJX_ExclGroup::fillColor(CFXJSE_Value* pValue,
179                               bool bSetting,
180                               XFA_Attribute eAttribute) {
181   Script_Som_FillColor(pValue, bSetting, eAttribute);
182 }
183 
h(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)184 void CJX_ExclGroup::h(CFXJSE_Value* pValue,
185                       bool bSetting,
186                       XFA_Attribute eAttribute) {
187   Script_Attribute_String(pValue, bSetting, eAttribute);
188 }
189 
hAlign(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)190 void CJX_ExclGroup::hAlign(CFXJSE_Value* pValue,
191                            bool bSetting,
192                            XFA_Attribute eAttribute) {
193   Script_Attribute_String(pValue, bSetting, eAttribute);
194 }
195 
layout(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)196 void CJX_ExclGroup::layout(CFXJSE_Value* pValue,
197                            bool bSetting,
198                            XFA_Attribute eAttribute) {
199   Script_Attribute_String(pValue, bSetting, eAttribute);
200 }
201 
mandatory(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)202 void CJX_ExclGroup::mandatory(CFXJSE_Value* pValue,
203                               bool bSetting,
204                               XFA_Attribute eAttribute) {
205   Script_Som_Mandatory(pValue, bSetting, eAttribute);
206 }
207 
mandatoryMessage(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)208 void CJX_ExclGroup::mandatoryMessage(CFXJSE_Value* pValue,
209                                      bool bSetting,
210                                      XFA_Attribute eAttribute) {
211   Script_Som_MandatoryMessage(pValue, bSetting, eAttribute);
212 }
213 
maxH(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)214 void CJX_ExclGroup::maxH(CFXJSE_Value* pValue,
215                          bool bSetting,
216                          XFA_Attribute eAttribute) {
217   Script_Attribute_String(pValue, bSetting, eAttribute);
218 }
219 
maxW(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)220 void CJX_ExclGroup::maxW(CFXJSE_Value* pValue,
221                          bool bSetting,
222                          XFA_Attribute eAttribute) {
223   Script_Attribute_String(pValue, bSetting, eAttribute);
224 }
225 
minH(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)226 void CJX_ExclGroup::minH(CFXJSE_Value* pValue,
227                          bool bSetting,
228                          XFA_Attribute eAttribute) {
229   Script_Attribute_String(pValue, bSetting, eAttribute);
230 }
231 
minW(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)232 void CJX_ExclGroup::minW(CFXJSE_Value* pValue,
233                          bool bSetting,
234                          XFA_Attribute eAttribute) {
235   Script_Attribute_String(pValue, bSetting, eAttribute);
236 }
237 
presence(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)238 void CJX_ExclGroup::presence(CFXJSE_Value* pValue,
239                              bool bSetting,
240                              XFA_Attribute eAttribute) {
241   Script_Attribute_String(pValue, bSetting, eAttribute);
242 }
243 
relevant(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)244 void CJX_ExclGroup::relevant(CFXJSE_Value* pValue,
245                              bool bSetting,
246                              XFA_Attribute eAttribute) {
247   Script_Attribute_String(pValue, bSetting, eAttribute);
248 }
249 
use(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)250 void CJX_ExclGroup::use(CFXJSE_Value* pValue,
251                         bool bSetting,
252                         XFA_Attribute eAttribute) {
253   Script_Attribute_String(pValue, bSetting, eAttribute);
254 }
255 
usehref(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)256 void CJX_ExclGroup::usehref(CFXJSE_Value* pValue,
257                             bool bSetting,
258                             XFA_Attribute eAttribute) {
259   Script_Attribute_String(pValue, bSetting, eAttribute);
260 }
261 
validationMessage(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)262 void CJX_ExclGroup::validationMessage(CFXJSE_Value* pValue,
263                                       bool bSetting,
264                                       XFA_Attribute eAttribute) {
265   Script_Som_ValidationMessage(pValue, bSetting, eAttribute);
266 }
267 
vAlign(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)268 void CJX_ExclGroup::vAlign(CFXJSE_Value* pValue,
269                            bool bSetting,
270                            XFA_Attribute eAttribute) {
271   Script_Attribute_String(pValue, bSetting, eAttribute);
272 }
273 
w(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)274 void CJX_ExclGroup::w(CFXJSE_Value* pValue,
275                       bool bSetting,
276                       XFA_Attribute eAttribute) {
277   Script_Attribute_String(pValue, bSetting, eAttribute);
278 }
279 
x(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)280 void CJX_ExclGroup::x(CFXJSE_Value* pValue,
281                       bool bSetting,
282                       XFA_Attribute eAttribute) {
283   Script_Attribute_String(pValue, bSetting, eAttribute);
284 }
285 
y(CFXJSE_Value * pValue,bool bSetting,XFA_Attribute eAttribute)286 void CJX_ExclGroup::y(CFXJSE_Value* pValue,
287                       bool bSetting,
288                       XFA_Attribute eAttribute) {
289   Script_Attribute_String(pValue, bSetting, eAttribute);
290 }
291