diff --git a/scripting/source/jsprov/loader.cxx b/scripting/source/jsprov/loader.cxx index e012351cc1f6..0336ec91307f 100644 --- a/scripting/source/jsprov/loader.cxx +++ b/scripting/source/jsprov/loader.cxx @@ -15,14 +15,17 @@ #include #include +#include namespace { class ScriptWrapper : public cppu::WeakImplHelper { public: - ScriptWrapper(const OUString& sScript) - : m_sScript(sScript) + ScriptWrapper(const css::uno::Reference& xContext, + const OUString& sScript) + : m_xScriptContext(new sf_misc::ScriptContext(xContext)) + , m_sScript(sScript) { } @@ -32,6 +35,7 @@ public: css::uno::Sequence& aOutParam) override; private: + css::uno::Reference m_xScriptContext; OUString m_sScript; }; @@ -51,10 +55,10 @@ OUString JsProvScriptFactory::getLanguageName() const { return "JavaScript"; } OUString JsProvScriptFactory::getExtension() const { return ".js"; } css::uno::Reference -JsProvScriptFactory::getScript(css::uno::Reference, const OUString&, - std::string_view sSource) const +JsProvScriptFactory::getScript(css::uno::Reference xContext, + const OUString&, std::string_view sSource) const { - return new ScriptWrapper(OStringToOUString(sSource, RTL_TEXTENCODING_UTF8)); + return new ScriptWrapper(xContext, OStringToOUString(sSource, RTL_TEXTENCODING_UTF8)); } bool JsProvScriptFactory::appMightExecute(const OUString& sAppName) const @@ -64,12 +68,7 @@ bool JsProvScriptFactory::appMightExecute(const OUString& sAppName) const OUString JsProvScriptFactory::getExampleMacro() const { - return u"let context = uno.componentContext;\n" - "let desktop = uno.idl.com.sun.star.frame.theDesktop(context);\n" - "let frame = desktop.getCurrentFrame();\n" - "let controller = frame.getController();\n" - "let model = controller.getModel();\n" - "let text = model.getText();\n" + return u"let text = XSCRIPTCONTEXT.getDocument().getText();\n" "\n" "text.getEnd().setString(\"Hello, world!\");\n"_ustr; } @@ -78,7 +77,11 @@ css::uno::Any SAL_CALL ScriptWrapper::invoke(const css::uno::Sequence&, css::uno::Sequence&) { - jsuno::execute(m_sScript); + std::pair> aGlobalVariables[] = { + { "XSCRIPTCONTEXT", m_xScriptContext }, + }; + + jsuno::execute(m_sScript, aGlobalVariables); return css::uno::Any(); }