Calligra/Proposal for scripting in ODF

From KDE Community Wiki
Revision as of 11:12, 15 November 2011 by Sebsauer (talk | contribs) (→‎API)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This page provides a proposal how to implement scripting in ODF.

Proposal

  • So far the only way to get such dynamic functionality in is using macros. But macros suck, they are unflexible and functionality is missing.
  • Since this days we have so many different Javascript-implementations around + they allow to sandbox (unlike python for exampl) + they are light and fast (unlike Java) and are already a de facto standard in HTML it would make sense to get Javascript into ODF as official "scripting-language".
  • The Javascript is loaded from and saved to the ODF document zip-file as ScriptN/content.js and then referenced with a unique name in the document-content or other scripts.
  • Ideally Calligra, LibreOffice and OpenOffice.org are adopting the same solution and provide compatible Javascript-APIs.

Use-cases

  • Allow to register Javascript for on-load, on-save and other events.
  • Do something if e.g. an image is clicked.
  • Formula variable for complex calculations.
  • In forms e.g. for input-validation.

API

  • Allow live-editing (loading and manipulation) of the ODF DOM tree from within Javascript. That covers all kind of scenarios and provides an (in the ODF specifications) already well documented and proven API. So, very much what Javascript is able to do with HTML+Stylesheet in a Browser for an Office-suite.
  • Helper-classes written in Javascript could provide a higher level API to deal with the ODF DOM tree.
  • Add or remove files from the ODF zip file.
  • Maybe allow access from within Javascript to the Calligra Tables formula logic. So Words and Stage could do complex calculations the OpenFormula-way in Javascript.
  • Network-access to e.g. update content or fetch informations for processing from the internet. By it's nature this needs proper security (e.g. document signing).
  • Persistent per-document and application-local storage to e.g. save and restore settings or variable-states.