summaryrefslogtreecommitdiff
path: root/fxjs
diff options
context:
space:
mode:
Diffstat (limited to 'fxjs')
-rw-r--r--fxjs/cjx_nodelist.cpp114
-rw-r--r--fxjs/cjx_nodelist.h35
2 files changed, 149 insertions, 0 deletions
diff --git a/fxjs/cjx_nodelist.cpp b/fxjs/cjx_nodelist.cpp
new file mode 100644
index 0000000000..8200e2ef08
--- /dev/null
+++ b/fxjs/cjx_nodelist.cpp
@@ -0,0 +1,114 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "fxjs/cjx_nodelist.h"
+
+#include "fxjs/cfxjse_arguments.h"
+#include "fxjs/cfxjse_engine.h"
+#include "fxjs/cfxjse_value.h"
+#include "xfa/fxfa/parser/cxfa_document.h"
+#include "xfa/fxfa/parser/cxfa_node.h"
+#include "xfa/fxfa/parser/cxfa_nodelist.h"
+
+CJX_NodeList::CJX_NodeList(CXFA_NodeList* list) : CJX_Object(list) {}
+
+CJX_NodeList::~CJX_NodeList() {}
+
+CXFA_NodeList* CJX_NodeList::GetXFANodeList() {
+ return static_cast<CXFA_NodeList*>(GetXFAObject());
+}
+
+void CJX_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"append");
+ return;
+ }
+
+ auto* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
+ if (!pNode) {
+ ThrowArgumentMismatchException();
+ return;
+ }
+ GetXFANodeList()->Append(pNode);
+}
+
+void CJX_NodeList::Script_ListClass_Insert(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 2) {
+ ThrowParamCountMismatchException(L"insert");
+ return;
+ }
+
+ auto* pNewNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
+ auto* pBeforeNode = static_cast<CXFA_Node*>(pArguments->GetObject(1));
+ if (!pNewNode) {
+ ThrowArgumentMismatchException();
+ return;
+ }
+ GetXFANodeList()->Insert(pNewNode, pBeforeNode);
+}
+
+void CJX_NodeList::Script_ListClass_Remove(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"remove");
+ return;
+ }
+
+ auto* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
+ if (!pNode) {
+ ThrowArgumentMismatchException();
+ return;
+ }
+ GetXFANodeList()->Remove(pNode);
+}
+
+void CJX_NodeList::Script_ListClass_Item(CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"item");
+ return;
+ }
+
+ int32_t iIndex = pArguments->GetInt32(0);
+ if (iIndex < 0 || iIndex >= GetXFANodeList()->GetLength()) {
+ ThrowIndexOutOfBoundsException();
+ return;
+ }
+ pArguments->GetReturnValue()->Assign(
+ GetXFANodeList()->GetDocument()->GetScriptContext()->GetJSValueFromMap(
+ GetXFANodeList()->Item(iIndex)));
+}
+
+void CJX_NodeList::Script_TreelistClass_NamedItem(
+ CFXJSE_Arguments* pArguments) {
+ int32_t argc = pArguments->GetLength();
+ if (argc != 1) {
+ ThrowParamCountMismatchException(L"namedItem");
+ return;
+ }
+
+ ByteString szName = pArguments->GetUTF8String(0);
+ CXFA_Node* pNode = GetXFANodeList()->NamedItem(
+ WideString::FromUTF8(szName.AsStringView()).AsStringView());
+ if (!pNode)
+ return;
+
+ pArguments->GetReturnValue()->Assign(
+ GetXFANodeList()->GetDocument()->GetScriptContext()->GetJSValueFromMap(
+ pNode));
+}
+
+void CJX_NodeList::Script_ListClass_Length(CFXJSE_Value* pValue,
+ bool bSetting,
+ XFA_ATTRIBUTE eAttribute) {
+ if (bSetting) {
+ ThrowInvalidPropertyException();
+ return;
+ }
+ pValue->SetInteger(GetXFANodeList()->GetLength());
+}
diff --git a/fxjs/cjx_nodelist.h b/fxjs/cjx_nodelist.h
new file mode 100644
index 0000000000..eec9b23960
--- /dev/null
+++ b/fxjs/cjx_nodelist.h
@@ -0,0 +1,35 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef FXJS_CJX_NODELIST_H_
+#define FXJS_CJX_NODELIST_H_
+
+#include "fxjs/cjx_object.h"
+#include "xfa/fxfa/fxfa_basic.h"
+
+class CFXJSE_Arguments;
+class CFXJSE_Value;
+class CXFA_NodeList;
+
+class CJX_NodeList : public CJX_Object {
+ public:
+ explicit CJX_NodeList(CXFA_NodeList* list);
+ ~CJX_NodeList() override;
+
+ CXFA_NodeList* GetXFANodeList();
+
+ void Script_ListClass_Append(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Insert(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Remove(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Item(CFXJSE_Arguments* pArguments);
+
+ void Script_TreelistClass_NamedItem(CFXJSE_Arguments* pArguments);
+ void Script_ListClass_Length(CFXJSE_Value* pValue,
+ bool bSetting,
+ XFA_ATTRIBUTE eAttribute);
+};
+
+#endif // FXJS_CJX_NODELIST_H_