void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, const CFX_WideString& script) { ASSERT(type != CPDF_AAction::Calculate); ASSERT(type != CPDF_AAction::Format); IJS_Runtime* pRuntime = pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(pDocument); IJS_Context* pContext = pRuntime->NewContext(); switch (type) { case CPDF_AAction::CursorEnter: pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField); break; case CPDF_AAction::CursorExit: pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField); break; case CPDF_AAction::ButtonDown: pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField); break; case CPDF_AAction::ButtonUp: pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField); break; case CPDF_AAction::GetFocus: pContext->OnField_Focus(data.bModifier, data.bShift, pFormField, data.sValue); break; case CPDF_AAction::LoseFocus: pContext->OnField_Blur(data.bModifier, data.bShift, pFormField, data.sValue); break; case CPDF_AAction::KeyStroke: pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown, data.bModifier, data.nSelEnd, data.nSelStart, data.bShift, pFormField, data.sValue, data.bWillCommit, data.bFieldFull, data.bRC); break; case CPDF_AAction::Validate: pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, data.bModifier, data.bShift, pFormField, data.sValue, data.bRC); break; default: ASSERT(FALSE); break; } CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(script, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); }
void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { CPDFSDK_Environment* pEnv = m_pDocument->GetEnv(); ASSERT(pEnv); if (!pEnv->IsJSInitiated()) return; if (m_bBusy) return; m_bBusy = TRUE; if (!IsCalculateEnabled()) { m_bBusy = FALSE; return; } IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(m_pDocument); int nSize = m_pInterForm->CountFieldsInCalculationOrder(); for (int i = 0; i < nSize; i++) { CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i); if (!pField) continue; int nType = pField->GetFieldType(); if (nType != FIELDTYPE_COMBOBOX && nType != FIELDTYPE_TEXTFIELD) continue; CPDF_AAction aAction = pField->GetAdditionalAction(); if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Calculate)) continue; CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate); if (!action.GetDict()) continue; CFX_WideString csJS = action.GetJavaScript(); if (csJS.IsEmpty()) continue; IJS_Context* pContext = pRuntime->NewContext(); CFX_WideString sOldValue = pField->GetValue(); CFX_WideString sValue = sOldValue; FX_BOOL bRC = TRUE; pContext->OnField_Calculate(pFormField, pField, sValue, bRC); CFX_WideString sInfo; FX_BOOL bRet = pContext->RunScript(csJS, &sInfo); pRuntime->ReleaseContext(pContext); if (bRet && bRC && sValue.Compare(sOldValue) != 0) pField->SetValue(sValue, TRUE); } m_bBusy = FALSE; }
void CPDFSDK_ActionHandler::RunDocumentPageJavaScript( CPDFSDK_Document* pDocument, CPDF_AAction::AActionType type, const CFX_WideString& script) { ASSERT(pDocument != NULL); IJS_Runtime* pRuntime = pDocument->GetJsRuntime(); ASSERT(pRuntime != NULL); pRuntime->SetReaderDocument(pDocument); IJS_Context* pContext = pRuntime->NewContext(); ASSERT(pContext != NULL); switch (type) { case CPDF_AAction::OpenPage: pContext->OnPage_Open(pDocument); break; case CPDF_AAction::ClosePage: pContext->OnPage_Close(pDocument); break; case CPDF_AAction::CloseDocument: pContext->OnDoc_WillClose(pDocument); break; case CPDF_AAction::SaveDocument: pContext->OnDoc_WillSave(pDocument); break; case CPDF_AAction::DocumentSaved: pContext->OnDoc_DidSave(pDocument); break; case CPDF_AAction::PrintDocument: pContext->OnDoc_WillPrint(pDocument); break; case CPDF_AAction::DocumentPrinted: pContext->OnDoc_DidPrint(pDocument); break; case CPDF_AAction::PageVisible: pContext->OnPage_InView(pDocument); break; case CPDF_AAction::PageInvisible: pContext->OnPage_OutView(pDocument); break; default: ASSERT(FALSE); break; } CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(script, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); }
void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript( CPDFSDK_FormFillEnvironment* pFormFillEnv, const CFX_WideString& sScriptName, const CFX_WideString& script) { IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); IJS_Context* pContext = pRuntime->NewContext(); pContext->OnDoc_Open(pFormFillEnv, sScriptName); CFX_WideString csInfo; bool bRet = pContext->RunScript(script, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); }
void CPDFSDK_ActionHandler::RunDocumentPageJavaScript( CPDFSDK_FormFillEnvironment* pFormFillEnv, CPDF_AAction::AActionType type, const CFX_WideString& script) { IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); IJS_Context* pContext = pRuntime->NewContext(); switch (type) { case CPDF_AAction::OpenPage: pContext->OnPage_Open(pFormFillEnv); break; case CPDF_AAction::ClosePage: pContext->OnPage_Close(pFormFillEnv); break; case CPDF_AAction::CloseDocument: pContext->OnDoc_WillClose(pFormFillEnv); break; case CPDF_AAction::SaveDocument: pContext->OnDoc_WillSave(pFormFillEnv); break; case CPDF_AAction::DocumentSaved: pContext->OnDoc_DidSave(pFormFillEnv); break; case CPDF_AAction::PrintDocument: pContext->OnDoc_WillPrint(pFormFillEnv); break; case CPDF_AAction::DocumentPrinted: pContext->OnDoc_DidPrint(pFormFillEnv); break; case CPDF_AAction::PageVisible: pContext->OnPage_InView(pFormFillEnv); break; case CPDF_AAction::PageInvisible: pContext->OnPage_OutView(pFormFillEnv); break; default: ASSERT(false); break; } CFX_WideString csInfo; bool bRet = pContext->RunScript(script, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); }
void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript( CPDFSDK_Document* pDocument, const CFX_WideString& sScriptName, const CFX_WideString& script) { IJS_Runtime* pRuntime = pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(pDocument); IJS_Context* pContext = pRuntime->NewContext(); pContext->OnDoc_Open(pDocument, sScriptName); CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(script, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); }
CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormatted) { CFX_WideString sValue = pFormField->GetValue(); CPDFSDK_Environment* pEnv = m_pDocument->GetEnv(); ASSERT(pEnv); if (!pEnv->IsJSInitiated()) { bFormatted = FALSE; return sValue; } IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(m_pDocument); if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX && pFormField->CountSelectedItems() > 0) { int index = pFormField->GetSelectedIndex(0); if (index >= 0) sValue = pFormField->GetOptionLabel(index); } bFormatted = FALSE; CPDF_AAction aAction = pFormField->GetAdditionalAction(); if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) { CPDF_Action action = aAction.GetAction(CPDF_AAction::Format); if (action.GetDict()) { CFX_WideString script = action.GetJavaScript(); if (!script.IsEmpty()) { CFX_WideString Value = sValue; IJS_Context* pContext = pRuntime->NewContext(); pContext->OnField_Format(pFormField, Value, TRUE); CFX_WideString sInfo; FX_BOOL bRet = pContext->RunScript(script, &sInfo); pRuntime->ReleaseContext(pContext); if (bRet) { sValue = Value; bFormatted = TRUE; } } } } return sValue; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument, CPDF_Bookmark* pBookmark, CFX_PtrList& list) { ASSERT(pDocument != NULL); CPDF_Dictionary* pDict = action.GetDict(); if (list.Find(pDict)) return FALSE; list.AddTail(pDict); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if (pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { IJS_Runtime* pRuntime = pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(pDocument); IJS_Context* pContext = pRuntime->NewContext(); pContext->OnBookmark_MouseUp(pBookmark); CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(swJS, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); } } } else { DoAction_NoJs(action, pDocument); } for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteBookMark(subaction, pDocument, pBookmark, list)) return FALSE; } return TRUE; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction( const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen, std::set<CPDF_Dictionary*>* visited) { CPDF_Dictionary* pDict = action.GetDict(); if (pdfium::ContainsKey(*visited, pDict)) return FALSE; visited->insert(pDict); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if (pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { IJS_Runtime* pRuntime = pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(pDocument); IJS_Context* pContext = pRuntime->NewContext(); CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(swJS, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); } } } else { DoAction_NoJs(action, pDocument); } for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteScreenAction(subaction, type, pDocument, pScreen, visited)) return FALSE; } return TRUE; }
bool CPDFSDK_ActionHandler::ExecuteBookMark( const CPDF_Action& action, CPDFSDK_FormFillEnvironment* pFormFillEnv, CPDF_Bookmark* pBookmark, std::set<CPDF_Dictionary*>* visited) { CPDF_Dictionary* pDict = action.GetDict(); if (pdfium::ContainsKey(*visited, pDict)) return false; visited->insert(pDict); ASSERT(pFormFillEnv); if (action.GetType() == CPDF_Action::JavaScript) { if (pFormFillEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); IJS_Context* pContext = pRuntime->NewContext(); pContext->OnBookmark_MouseUp(pBookmark); CFX_WideString csInfo; bool bRet = pContext->RunScript(swJS, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); } } } else { DoAction_NoJs(action, pFormFillEnv); } for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteBookMark(subaction, pFormFillEnv, pBookmark, visited)) return false; } return true; }