ChangeLog for package rkwarddev changes in version 0.10-2 (2022-05-03) fixed: - rk.updatePluginMessages(): check that python is version 3 changes in version 0.10-1 (2022-04-21) fixed: - rk.XML.connect(): no dot is appended to the governor any more if 'get=""' - rk.plugin.component(): also use 'gen.info' with autogenerated help documents (from scanned XML nodes) - rk.plugin.skeleton(): add "Encoding: UTF-8" to the DESCRIPTION file, required to satisfy roxygen2 changed: - modifier checks: private function modif.validity() now also lists valid modifiers when in stop-at-error mode, not only when a warning should be shown - rk.XML.convert(): does now try not to complain if sources is not a list - vignette: converted into RMarkdown and updated screenshots added: - rk.XML.select(): new parameter "single" (available as of RKWard 0.7.1). changes in version 0.08-2 (2017-07-28) fixed: - rk.uniqueIDs() was using lists internally in some cases which caused an unneccessary warning - rk.XML.formula() was missing the label attribute (also missing in the documentation) - rk.JS.scan() omitted nodes - re-implemented the dropping of variables if they're globally defined in rk.JS.doc() - private function p2s.checkModifiers() (called by plugin2script()) didn't detect *.not modifiers correctly - plugin2script() does now output numeric values when mandatory; internally this is defined in the FONA list - rk.XML.about() now prints dates correctly - rk.XML.vars() now knows type "numeric" instead of "number" - fixed tests/generate_test_standards.R (replacing "number" with "numeric") - rk.JS.header() doesn't fail any longer if ".add" vectors have no names changed: - internal function get.IDs() now uses new internal function filter.relevant.tags() - function rk.JS.scan() now has a new mode switch and supports scanning for nodes - rk.JS.scan() can now also check if a variable is actually being used in the script body (if given via the new script argument), and if not omit it from its result; this is the new default, but can be turned off by setting the new argument unused.vars=TRUE in rk.plugin.component() and rk.plugin.skeleton() - handling of previews was changed; using "doPrintout" is deprecated now, but still works. most scripts should still do without changes, allthough the JS code looks different now - improved output of rk.JS.doc() - improved the handling of nodes in JS code: previously id() just returned the camelCode id of frames, you had to manually define an object outside rk.paste.JS() via rk.JS.vars(, modifiers="checked"). the default is now to add the checked modifier, since using frames in JS is most likely useless otherwise. i.e., you now need to manually call via rk.JS.vars() with no modifiers if you happen to need the frame's ID for whatever reason - adjusted plugin2script() to the new rk.XML.preview() parameters (see "added") - rk.XML.embed() now also accepts objects of class rk.plug.comp as components - rk.plotOptions() gained new argument namespace to work well with the changed approach of rk.XML.embed() - rk.XML.connect() now allows objects of class rk.plug.comp to be used as clients and nodes to be used as the "set" modifier for that client, and can therefore be used to connect properties from embedded plugins - objects of class rk.JS.var now have a new slot "methods" to append method calls - moved internal js.try.scan() function from body of rk.plugin.component() to rk-internal.R - rk.XML.about() finally no longer supports "dependency", "package" or "pluginmap"; these arguments were deprecated for years now - adjusted test standards added: - new parameters "mode", "placement", "active" and "id.name" in rk.XML.preview() - new parameter "preview" in rk.JS.doc() to force adding a preview() function - rk.plugin.component() and rk.plugin.skeleton() now support "preview" in both the "js" option and the "scan" option - new options "preview" and "level" in rk.JS.saveobj() - id() gained the new attribute "guess.modifier" to toggle the new default for nodes in JS (see above) - new parameter "namespace" in rk.XML.embed() to result in "namespace::component", takes character strings, nodes and pluginmap XML trees and is not yet covered by plugin2script() - new function rk.JS.method() to generate JS method calls - plugin2script() now also scans *.rkh and *.pluginmap files - rk.JS.header() now accepts rk.JS.ite objects as the second value of "add" entries and prints them in a condensed statement changes in version 0.08-1 (2015-12-17) fixed: - attribute "max_precision" in was misspelled - rk.XML.connect() still handled modifiers for "governor" wrong if it wasn't a XiMpLe node - also fixed how rk.XML.convert() and rk.XML.switch() were handling modifier checking - rk.XML.dependencies() didn't know about min/max versions of pluginmaps (fixed in rk.XML.about() as well) - some fixes to the skeleton GUI and demo script - prevent internal function indent() from losing it over negative values - indentation of rk.paste.JS.graph() was incorrect - pasting comments via rk.paste.JS() gained an extra space for subsequent lines - the "i18n" attribute in lists e.g. for rk.XML.radio() didn't really work - improved indetation for rk.JS.oset objects - rk.XML.varslot() and rk.XML.valueslot() didn't correctly add sources if they were character strings (which is valid) - R.comment() didn't correctly paste indentation levels > 2 added: - new methods plugin2script() to try to translate raw plugin XML into working rkwarddev script calls - new option "ignore" enables rk.uniqueIDs() to not check nodes for duplicates (e.g., ) - new wrapper function js() for id() makes it possible to use several operators without quoting, preserve "if" conditions and "for" loops, which all will be translated to JavaScript equivalents without the need for quoting. however, the "for" loop code is not publicly documented and remains a proof of concept kind of thing for now - new option ".objects" in id() and ".ite" in rk.JS.options() to provide objects as a list - new option "rk.JS.vars" to make JS variables match the name of the original R object - new function idq() to print quoted IDs of XML nodes for use in JavaScript sections - new function modifiers() to make checking for valid mdifiers of a given node easier - new functions rk.get.indent() and rk.set.indent() to globally set indentation string - new functions rk.get.empty.e() and rk.set.empty.e() to globally define the handling of empty "else" clauses in JavaScript - in rk.JS.header(), the second value provided by "add" can now be named "noquote" to have it nested in the JS noquote() function - new wrapper function rk.updatePluginMessages() for update_plugin_messages.py, the package now comes with its own copy of this core i18n script - the generator info gained support for hinting at the very rkwarddev script file that was used to generate a particular plugin file - new function rk.local() to be used as an alternative to local() with a predefined local environment to solve scope issues with js() changed: - improved error handling in rk.JS.header(), error messages are more informative now - rk.uniqueIDs() now checks "dialog" and "wizard" sections separately - updated the vignette with information on js(), plugin2script(), and how to add help pages - internal function modif.validity() now calls modifiers() to give more useful feedback - all functions offering "intent.by" as an option now fetch the default value by calling rk.get.indent() - all functions offering "empty.e" as an option now fetch the default value by calling rk.get.empty.e() - removed trailing newline in rk.JS.header() output - updated test standards changes in version 0.07-3 (2015-06-29) fixed: - rk.JS.header() now produces usable level options added: - new slot "opt.sep" in classes rk.JS.arr and rk.JS.opt, as well as new option "opt.sep" in rk.paste.JS(), rk.JS.array() and rk.JS.options(), to manipulate the character string separating the previous options from the ones defined by these objects changes in version 0.07-2 (2015-03-14) fixed: - replaced the outdated links to sourceforge with our new KDE URL changes in version 0.07-1 (2015-03-13) fixed: - rk.XML.optionset() does now allow to re-use objects defined in the same function call (i.e., refer to optioncolumns in the logic section) - removed arguments "help" and "component" from rk.XML.optionscolumn() again, as these are already being documented via the objects they connect to. - rk.build.plugin() was still only using the "--no-vignettes" option from R < 3 - rk.XML.pluginmap() malformed label argument names if they referred to standrad maneu entries - rk.plugin.skeleton() still allowed invalid IDs, fixed the regexp - rk.XML.snippets() now also accepts as child node - rk.XML.tabbook() returns nodes as-is, not nested in - rk.JS.scan() now sets "state" as default modifier for checkboxes if guess.getter is TRUE - rk.XML.connect() handled modifiers too strict if "client" was a string, and too liberal when "governor" was - join() referenced a wrong object name if "var" was of class rk.JS.arr - rk.XML.about() had a malformed error message - rk.plugin.component() called XMLAttrs() with too many arguments - rk.XML.values() and rk.XML.vars() do now handle all combinations of "horiz" and "add.nodes" properly - fixed wrong link to rk.plugin.skeleton() in documentation of rk.XML.pluginmap() added: - all "help" values can now be a list of character strings or XiMpLe nodes, to have more control over the markup - added "property" and "duplicates" arguments to rk.XML.valueslot() and rk.XML.varslot(). - rk.XML.pluginmap() now adds a "po_id" attribute to pluginmaps, necessary for i18n - new attribute "require.defaults" in rk.XML.pluginmap() to add rkward::menu and rkward::embedded as requirements - new attribute "i18n" added to several XML functions; it takes a list with the named arguments "comment" or "context" to either produce an i18n comment node or an "i18n_context" attribute - new function rk.i18n.comment() to give context for translators - new function rk.JS.header() to easily generate JavaScript header code fit for i18n - rk.JS.doc(), rk.plugin.skeleton() and rk.plugin.component() now use rk.JS.header() instead of rk.header(), and also accept its "header.add" attribute - new function R.comment() to generate JavaScript "comment()" calls - first unit tests using the testthat package - added documentation to the used S4 classes - enhanced rk.XML.values() to also accept "options" and "duplicates", and rk.XML.vars() to also accept "duplicates" - new argument "var" in rk.paste.JS() to define whether the JS keyword "var" should be used or omitted for rk.JS.var objects - rk.XML.matrix() now also accepts the arguments "min_rows" and "min_columns" - , and nodes - new functions rk.set.rkh.prompter() and rk.get.rkh.prompter() to make it easier to generate help files (later...) - rk.rkh.scan() (and automatically rk.plugin.skeleton() and rk.plugin.component()) are now capable of fetching text set with rk.set.rkh.prompter() and use it to generate help files - all functions scanned by rk.rkh.scan() for setting nodes in .rkh files have gained two additional arguments, "help" and "component", to register the text to be used via rk.set.rkh.prompter() - new function rk.XML.option() to allow setting and accessing IDs for single options as well - new function rk.JS.optionset() and object class "rk.JS.oset" to generate for loops over columns changed: - updated the plugin skeleton example script; e.g., it now uses the new .rkh file generating features - rk.XML.radio() and rk.XML.dropdown() now also accept objects made with rk.XML.option() in their respective list of options - renamed all class definition files due to include problems with roxygenize() - allow non-maintainers to omit email addresses in nodes changes in version 0.06-4 (2014-09-14) added: - new functions rk.set.language(), rk.get.language() and i18n() to facilitate static internationalisation of plugins; makes use of a new internal environment .rkdev.env - new parameter "lang" in functions rk.rkh.doc(), rk.XML.plugin(), rk.XML.pluginmap() and rk.plugin.skeleton() for internationalisation. if used, the attributes "lang" and "xml:lang" will be set in the root of the generated files, respectively - new parameter "localized" in rk.XML.require() for internationalisation - the document id in rk.XML.pluginmap() can now be set manually fixed: - abbreviation of labels now limits valid characters to [0-9A-Za-z] - in rk.XML.pluginmap(), "components" and "hierarchy" may be set to NULL if "require" is used accordingly changes in version 0.06-3 (2013-12-21) fixed: - fixed outdated example code for rk.plugin.component() added: - new function rk.uniqueIDs() checks for duplicate IDs - rk.JS.array() can now be told to quote values changed: - rk.plugin.component() and rk.rkh.doc() do now interpret the "hints" argument to prevent the generation of optional XML nodes. - rk.plugin.component() now automatically calls rk.uniqueIDs() and stops if IDs are not unique changes in version 0.06-2 (2013-04-04) changed: - the structure of nodes will change in RKWard 0.6.1, will become a direct child of or , which explains several changes in this release. this is not really critical, because this information wasn't evaluated by RKWard until now anyway - for consistency, from now on is never an empty node - rk.XML.pluginmap(), rk.XML.plugin() and rk.plugin.skeleton() will now move from to a top level child node of plugin maps, with a warning - from rk.plugin.component() and rk.XML.plugin(), the "pluginmap" argument was replaced by the more general "include", which can now also process a vector of file names - the object class rk.JS.var gained a new slot "getter" to set a default JS function to query variable values. it defaults to "getValue" to ensure compatibility with earlier releases. consequently, rk.JS.vars() and rk.paste.JS() have a new "getter" argument to set or overwrite this value. another new argument, "guess.getter", can be used to turn on automatic guessing which getter function might be most appropriate. this was also added to rk.plugin.component() and rk.plugin.skeleton(). - updated the skeleton_dialog.R demo file and recreated the plugin code - JavaScript functions like rk.JS.scan() and id() learned how to treat , and - internally paste(..., sep="") was replaced with paste0(...), in a way that ensures compatibility with R < 2.15 added: - new function rk.XML.switch() - new function rk.XML.optiondisplay() - new function rk.XML.optionset() - new function rk.XML.matrix() - new function rk.XML.dependencies() - new function rk.XML.dependency_check() - new function join() to simplify ".join()" for JavaScript arrays - added options "dependencies", "namespace" and "priority" to rk.XML.pluginmap() - added option "dependencies" to rk.XML.component() - added "map" to rk.XML.require() - the new class rk.JS.echo allows having objects in an echo() statement without quoting it - new combined modifiers "visible.not", "visible.numeric", "enabled.not", "enabled.numeric", "state.not" and "state.numeric" are now supported - modifiers have been added for and , and can have any modifier fixed: - added some missing parameter in the docs for rk.paste.JS.graph() - fixed a bug in the modifier checks; this unveiled a bug in how rk.JS.scan() dealt with nodes, which was also fixed - fixed a duplicate entry in this ChangeLog for version 0.04-6 - rk.plugin.skeleton() now correctly works with more than one author - pluginmap files are no longer included into plugin XML files automatically changes in version 0.06-1 (2012-11-08) changed: - rk.plugin.skeleton(): "tests" will now ignore "overwrite" and not replace existing testsuite files fixed: - dots will now be removed from pluginmap IDs - modifiers of "external" XML nodes will not be checked, since it can be all kinds of stuff changes in version 0.05-8 (2012-09-30) added: - new function rk.plotOptions() and class "rk.plot.opts" to simplify code generation for plots; this also caused changes in the internal workflow, especially for child.node() and rk.paste.JS() changed: - rk.paste.JS.graph() also takes objects of class "rk.plot.opts" - rk.XML.embed() now supresses the label if "button=FALSE" changes in version 0.05-7 (2012-09-29) added: - new function rk.paste.JS.graph() to simplify JS code generation for plots changes in version 0.05-6 (2012-05-10) added: - rk.XML.wizard() and rk.XML.dialog() can now set the "recommended" attribute changes in version 0.05-5 (2012-04-19) added: - rk.plugin.skeleton() can now also generate initial ChangeLog files (but won't overwrite existing ones) - added a LICENSE file to the sources - sources were initially debianized by roxyPackage changed: - if files are being skipped by rk.plugin.skeleton(), the corresponding warning will now include the 'create' actions that these files belong to fixed: - rk.paste.JS() pastes rk.comment() objects correctly again changes in version 0.05-4 (2012-04-06) fixed: - rk.XML.frame() didn't generate attributes due to a typo changes in version 0.05-3 (2012-03-18) - fixed: rk.XML.text() now preserves XML tags in the text value - internally, functions now call XiMpLe::XMLNode() and XiMpLe::XMLTree() constructors instead of new(), and pasteXMLNode() and pasteXMLTree() were globally renamed into pasteXML() - internally, replaced object@node with slot(object, "node") - internally, moved checks for valid child and parent nodes to an internal functions, valid.child() and valid.parent() changes in version 0.05-2 (2012-03-10) - added missing dependency to package methods - fixed docs in rk.XML.plugin(), rk.XML.saveobj() and rk.plugin.skeleton() - fixed bug in rk.XML.snippets() - re-formatted the ChangeLog so roxyPackage can translate it into a NEWS.Rd file changes in version 0.05-1 (2012-01-04) - removed superfluous "level=1" arguments from automatic "rk.header()"s in rk.JS.doc() - added wrapper function rk.XML.checkbox() for rk.XML.cbox() - changed rk.JS.saveobj() to use ".GlobalEnv$" instead of "assign()" in the resulting code - added option to toggle the addition of empty "else {}" statements in rk.JS.ite objects to rk.paste.JS() changes in version 0.05-0 (2011-12-14) - "result.header" now doesn't add quotes by itself in rk.JS.doc(), so you can have R objects pasted. previous scripts need to be adapted accordingly! the headers can also be deactivated by setting to FALSE or "" - fixed show method for objects of class rk.JS.var with more than one variable object - added support for global variables to rk.JS.doc() and rk.plugin.component(), and therefore also rk.plugin.skeleton() - "variables" and "globals" in rk.JS.doc() can now also be given as objects of class rk.JS.var - worked on the vignette changes in version 0.04-13 (2011-12-12) - set default value of checked checkboxes to "true" in rk.XML.cbox() - rk.XML.connect() now correctly supports 'governor="..not"' changes in version 0.04-12 (2011-12-11) - added function tf() for even quicker JavaScript code generation from checkboxes - fixed issue with "about" not being an XML node in rk.plugin.skeleton() changes in version 0.04-11 (2011-12-10) - ite() now supports full recursion also for the "thenjs" option. - fixed superfluous first newline in rk.JS.vars() changes in version 0.04-10 (2011-12-05) - when using rk.comment() for logic scripting, its contents will automatically be placed inside a