Git commit d039a77b53c4724df3259eb801aff26995704b4a by Thomas Friedrichsmeier. Committed on 02/05/2022 at 20:44. Pushed by tfry into branch 'master'.
Provide a default implementation for a preview() function in plugins' JS template. M +1 -0 ChangeLog M +8 -12 doc/rkwardplugins/index.docbook M +6 -4 rkward/plugins/descriptive/descriptive_statistics.js M +3 -2 rkward/plugins/descriptive/descriptive_statistics.xml M +20 -18 rkward/plugins/uni1.2/code.js M +1 -0 rkward/plugins/uni1.2/description.xml M +9 -4 rkward/scriptbackends/common.js https://invent.kde.org/education/rkward/commit/d039a77b53c4724df3259eb801aff26995704b4a diff --git a/ChangeLog b/ChangeLog index a6460546..27c7f72b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ TODOs: - More tolerant handshake on Windows? Simply a matter of allowing more time? +- A default preview() function is available to plugins, reducing the code needed to add preview functionaality - Better placement of messages in non-plot preview windows - Fixed some problems with cancelling running commands - Package installation uses inline widget to provide progress feedback, instead of separate dialogs diff --git a/doc/rkwardplugins/index.docbook b/doc/rkwardplugins/index.docbook index 8a38299f..2095736c 100644 --- a/doc/rkwardplugins/index.docbook +++ b/doc/rkwardplugins/index.docbook @@ -44,7 +44,7 @@ as Authors, publish date, the abstract, and Keywords --> <copyright> -<year>2006-2020</year> +<year>2006-2022</year> <holder>Thomas Friedrichsmeier</holder> </copyright> <!-- Translators: put here the copyright notice of the translation --> @@ -52,8 +52,8 @@ as Authors, publish date, the abstract, and Keywords --> and in the FDL itself on how to use it. --> <legalnotice>&FDLNotice;</legalnotice> -<date>2020-09-26</date> -<releaseinfo>0.7.2</releaseinfo> +<date>2022-04-24</date> +<releaseinfo>0.7.4</releaseinfo> <abstract> <para> @@ -1354,7 +1354,10 @@ This chapter contains information on some topics that are useful only to certain And that is it for the &GUI; definition. </para> <para> - Adjusting the JS template is a little more work. You will have to create a new function called <function>preview()</function> in addition to the <function>preprocess()</function>, <function>calculate()</function>, &etc; functions. This function should generate the code needed to produce the plot, and only that. Esp. no printing of headers, <function>rk.graphics.on()</function>, or similar calls. See the <link linkend="plot_plugin_example">example</link>, below for the typical pattern that you will use. + Adjusting the JS template is only a little more work, here you will have to make sure, only the plot itself is generated, and shown in an onscreen-device, rather than directed to the output. I.e. no printing of headers, <function>rk.graphics.on()</function>, or similar calls. To assist you in this, &rkward; will call the <function>preprocess()</function>, <function>calculate()</function>, and <function>printout()</function> functions with an additional parameter that is set to <parameter>true</parameter>, when generating code for a preview. (The parameter is omitted when generating the final code. In javascript this will evaluate to <parameter>false</parameter> when used inside an <function>if</function>-statement.) See the <link linkend="plot_plugin_example">example</link>, below for the typical pattern that you will use. + </para> + <para> + Alternatively, should you need more control than this, you can instead add a new function called <function>preview()</function> to your JS template, and generate the code required for a preview, there (probably, at least in part, again by calling <function>calculate()</function>, etc.). </para> </sect2> <sect2 id="plot_options"> @@ -1399,16 +1402,9 @@ This chapter contains information on some topics that are useful only to certain // the "somepackage" is needed to create the plot echo ("require (somepackage)\n"); } - - function preview () { - // we call all stages of the general code. Only the printout () function needs to be called slightly different for the plot preview - preprocess (); - // calculate (); // in this example, the plugin has no calculate () function. - printout (true); // in this case, 'true' means: Create the plot, but not any headers or other output. - } function printout (is_preview) { - // If "is_preview" is set to false, it generates the full code, including headers. + // If "is_preview" is set to false/undefined, it generates the full code, including headers. // If "is_preview" is set to true, only the essentials will be generated. if (!is_preview) { diff --git a/rkward/plugins/descriptive/descriptive_statistics.js b/rkward/plugins/descriptive/descriptive_statistics.js index 5769bbef..fbb2e063 100644 --- a/rkward/plugins/descriptive/descriptive_statistics.js +++ b/rkward/plugins/descriptive/descriptive_statistics.js @@ -68,10 +68,12 @@ function calculate () { echo ('}\n'); } -function printout () { - new Header (i18n ("Descriptive statistics")).addFromUI ("trim").print (); - if (getValue ("mad")) { - new Header (i18n ("Median Absolute Deviation"), 3).addFromUI ("constMad").addFromUI ("mad_type").print (); +function printout (is_preview) { + if (!is_preview) { + new Header (i18n ("Descriptive statistics")).addFromUI ("trim").print (); + if (getValue ("mad")) { + new Header (i18n ("Median Absolute Deviation"), 3).addFromUI ("constMad").addFromUI ("mad_type").print (); + } } echo ('rk.results (results)\n'); if (getValue ("save_to_file")) echo ('write.csv(file="' + getValue ("file") + '", results)\n'); diff --git a/rkward/plugins/descriptive/descriptive_statistics.xml b/rkward/plugins/descriptive/descriptive_statistics.xml index 3c9026ec..eb028401 100644 --- a/rkward/plugins/descriptive/descriptive_statistics.xml +++ b/rkward/plugins/descriptive/descriptive_statistics.xml @@ -15,8 +15,9 @@ <varslot multi="true" source="vars" id="groups" num_dimensions="1" label="group by:" required="false" /> </column> </row> - <checkbox value_unchecked="0" checked="flase" value="1" id="save_to_file" label="Save results to file" /> - <browser type="savefile" size="small" id="file" filter="*.csv" initial="data" label="Name of the file" /> + <checkbox value_unchecked="0" checked="flase" value="1" id="save_to_file" label="Save results to file" /> + <browser type="savefile" size="small" id="file" filter="*.csv" initial="data" label="Name of the file" /> + <preview id="preview" mode="output"/> </tab> <tab label="Mean Standard Deviation" id="tab_mean_sd"> <column> diff --git a/rkward/plugins/uni1.2/code.js b/rkward/plugins/uni1.2/code.js index fb72c26b..7c28c18d 100644 --- a/rkward/plugins/uni1.2/code.js +++ b/rkward/plugins/uni1.2/code.js @@ -93,27 +93,29 @@ function calculate () { } } -function printout () { - header = new Header (i18n ("Univariate statistics")).addFromUI ("narm"); - if (getBoolean("trim.state")) { - header.add (i18n ("Proportion of trimmed values for trimmed mean"), getString ("pourcent")); - } - if (getBoolean("mad.state")) { - header.add (i18n ("Constant for the MAD estimation"), getString ("constMad")); - } - if (getBoolean("huber.state")) { - header.add (i18n ("Winsorized values for Huber estimator"), getString ("winsor")); - header.add (i18n ("Tolerance in Huber estimator"), getString ("tol")); - if (getBoolean ("customMu.state")) { - header.add (i18n ("Mu for Huber estimator"), getString ("mu")); +function printout (is_preview) { + if (!is_preview) { + header = new Header (i18n ("Univariate statistics")).addFromUI ("narm"); + if (getBoolean("trim.state")) { + header.add (i18n ("Proportion of trimmed values for trimmed mean"), getString ("pourcent")); } - if (getBoolean ("customS.state")) { - header.add (i18n ("S for Huber estimator"), getString ("s")); + if (getBoolean("mad.state")) { + header.add (i18n ("Constant for the MAD estimation"), getString ("constMad")); } - header.add (i18n ("Initial value"), getString ("initmu")); + if (getBoolean("huber.state")) { + header.add (i18n ("Winsorized values for Huber estimator"), getString ("winsor")); + header.add (i18n ("Tolerance in Huber estimator"), getString ("tol")); + if (getBoolean ("customMu.state")) { + header.add (i18n ("Mu for Huber estimator"), getString ("mu")); + } + if (getBoolean ("customS.state")) { + header.add (i18n ("S for Huber estimator"), getString ("s")); + } + header.add (i18n ("Initial value"), getString ("initmu")); + } + header.print (); + echo ('\n'); } - header.print (); - echo ('\n'); echo ('rk.results (results)\n'); if (getValue ("save_to_file")) echo ('write.csv(file="' + getValue ("file") + '", results)\n'); } diff --git a/rkward/plugins/uni1.2/description.xml b/rkward/plugins/uni1.2/description.xml index 20f3ce03..5f547621 100644 --- a/rkward/plugins/uni1.2/description.xml +++ b/rkward/plugins/uni1.2/description.xml @@ -26,6 +26,7 @@ <varselector id="vars" /> <varslot multi="true" classes="numeric integer" id="z" source="vars" label="Variable" required="true" /> </row> + <preview id="preview" mode="output"/> </column> <checkbox value_unchecked="0" checked="false" value="1" id="save_to_file" label="Save results to file" /> <browser type="savefile" size="small" id="file" filter="*.csv" initial="data" label="Name of the file" /> diff --git a/rkward/scriptbackends/common.js b/rkward/scriptbackends/common.js index 3654380a..32b7a2bf 100644 --- a/rkward/scriptbackends/common.js +++ b/rkward/scriptbackends/common.js @@ -179,10 +179,15 @@ do_printout = function () { return (flushOutput ()); } -do_preview = function () { - if (typeof (preview) == "undefined") return (""); - preview (); - return (flushOutput ()); +do_preview = function() { + if (typeof(preview) == "undefined") { + if (typeof(preprocess) != "undefined") preprocess(true); + if (typeof(calculate) != "undefined") calculate(true); + if (typeof(printout) != "undefined") printout(true); + } else { + preview(); + } + return (flushOutput()); } // for compatibility with the converted PHP code
