From: m.eik m. <mei...@un...> - 2015-01-02 21:55:59
|
Git commit 38857891a9b20d5fe736c2cda292783f9e26e128 by m.eik michalke. Committed on 02/01/2015 at 21:53. Pushed by meikm into branch 'master'. make using global JS variables more robust by dividing definition and initialisation (through a helper function) M +8 -3 packages/rkwarddev/ChangeLog M +4 -4 packages/rkwarddev/DESCRIPTION M +7 -4 packages/rkwarddev/R/rk-internal.R M +23 -5 packages/rkwarddev/R/rk.JS.doc.R M +4 -2 packages/rkwarddev/R/rk.paste.JS.R M +2 -2 packages/rkwarddev/R/rkwarddev-package.R M +1 -1 packages/rkwarddev/man/i18n.Rd M +1 -1 packages/rkwarddev/man/rk.JS.doc.Rd M +2 -2 packages/rkwarddev/man/rk.XML.vars.Rd M +5 -1 packages/rkwarddev/man/rk.paste.JS.Rd M +2 -2 packages/rkwarddev/man/rkwarddev-package.Rd http://commits.kde.org/rkward/38857891a9b20d5fe736c2cda292783f9e26e128 diff --git a/packages/rkwarddev/ChangeLog b/packages/rkwarddev/ChangeLog index c2424c1..a761708 100644 --- a/packages/rkwarddev/ChangeLog +++ b/packages/rkwarddev/ChangeLog @@ -1,6 +1,6 @@ ChangeLog for package rkwarddev -changes in version 0.06-6 (2014-12-17) +changes in version 0.06-6 (2015-01-02) 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) @@ -20,8 +20,8 @@ fixed: - 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 + - rk.XML.values() and rk.XML.vars() do now handle all combinations of + "horiz" and "add.nodes" properly added: - all "help" values can now be a list of character strings or XiMpLe nodes, to have more control over the markup @@ -43,6 +43,8 @@ added: - 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 changed: - function i18n() was changed to be used in JavaScript generation only; this breaks code using the function introduced with 0.06-4, but that was to @@ -57,6 +59,9 @@ changed: they're more obvious to find and check - rk.XML.input() now checks wheter "size" is exactly one of "small", "medium" or "large" + - rk.JS.doc() now uses a more robust method to set global variables, namely + by defining an additional function setGlobalVars() and calling that + inside preprocess() removed: - the functions rk.set.language() rk.get.language() were no longer useful and therefore removed diff --git a/packages/rkwarddev/DESCRIPTION b/packages/rkwarddev/DESCRIPTION index 52687bd..a86a3ae 100644 --- a/packages/rkwarddev/DESCRIPTION +++ b/packages/rkwarddev/DESCRIPTION @@ -8,16 +8,16 @@ Depends: Suggests: testthat Enhances: rkward -Description: Provides functions to create plugin skeletons and XML - structures for RKWard. +Description: Provides functions to create plugin skeletons and XML structures + for RKWard. License: GPL (>= 3) Encoding: UTF-8 LazyLoad: yes -URL: http://rkward.kde.org +URL: http://rkward.sourceforge.net Authors@R: c(person(given="m.eik", family="michalke", email="mei...@hh...", role=c("aut", "cre"))) Version: 0.06-6 -Date: 2014-12-17 +Date: 2015-01-02 Collate: '00_class_01_rk.JS.arr.R' '00_class_02_rk.JS.var.R' diff --git a/packages/rkwarddev/R/rk-internal.R b/packages/rkwarddev/R/rk-internal.R index b5b2687..637e73f 100644 --- a/packages/rkwarddev/R/rk-internal.R +++ b/packages/rkwarddev/R/rk-internal.R @@ -948,8 +948,9 @@ paste.JS.options <- function(object, level=2, indent.by="\t", array=NULL, funct= # append.modifier: if a modifier is given, should that become part of the variable name? this is mostly # important for "checkbox", which has "state" as default modifier, but using the checkbox object will not # notice this. works only for the first modifier given. +# var: if FALSE, the variable is assumed to be already defined (globally?) and "var " will be omitted paste.JS.var <- function(object, level=2, indent.by="\t", JS.prefix=NULL, modifiers=NULL, default=NULL, append.modifier=NULL, - join=NULL, getter=NULL, names.only=FALSE, check.modifiers=FALSE){ + join=NULL, getter=NULL, names.only=FALSE, check.modifiers=FALSE, var=TRUE){ # paste several objects results <- unlist(sapply(slot(object, "vars"), function(this.obj){ paste.JS.var(this.obj, @@ -961,7 +962,9 @@ paste.JS.var <- function(object, level=2, indent.by="\t", JS.prefix=NULL, modifi append.modifier=append.modifier, join=join, getter=getter, - names.only=names.only)})) + names.only=names.only, + check.modifiers=check.modifiers, + var=var)})) if(!isTRUE(names.only) & !is.null(results)){ results <- paste(results, collapse="\n") } @@ -1006,7 +1009,7 @@ paste.JS.var <- function(object, level=2, indent.by="\t", JS.prefix=NULL, modifi if(isTRUE(names.only)){ results <- c(results, camelCode(c(JS.prefix, JS.var))) } else { - results <- paste0(main.indent, "var ", camelCode(c(JS.prefix, JS.var)), " = ", getter, "(\"", XML.var, "\")", join.code, ";") + results <- paste0(main.indent, ifelse(isTRUE(var), "var ", ""), camelCode(c(JS.prefix, JS.var)), " = ", getter, "(\"", XML.var, "\")", join.code, ";") } } else {} if(length(modifiers) > 0){ @@ -1024,7 +1027,7 @@ paste.JS.var <- function(object, level=2, indent.by="\t", JS.prefix=NULL, modifi if(isTRUE(names.only)){ return(this.name) } else { - return(paste0(main.indent, "var ", this.name, + return(paste0(main.indent, ifelse(isTRUE(var), "var ", ""), this.name, " = ", getter, "(\"", XML.var, ".", this.modif, "\")", join.code, ";")) } }) diff --git a/packages/rkwarddev/R/rk.JS.doc.R b/packages/rkwarddev/R/rk.JS.doc.R index 461c0d4..9bbf9d5 100644 --- a/packages/rkwarddev/R/rk.JS.doc.R +++ b/packages/rkwarddev/R/rk.JS.doc.R @@ -22,7 +22,7 @@ #' #' @param require A character vector with names of R packages that the dialog depends on. #' @param variables Either a character string to be included to read in all needed variables from the dialog (see \code{\link{rk.JS.scan}}), -#' or an object of class \code{rk.JS.var} which will be coerced into character. These variables will be defined in +#' or a (list of) objects of class \code{rk.JS.var} which will be coerced into character. These variables will be defined in #' the \code{calculate()} and/or \code{doPrintout()} functions. #' @param globals Like \code{variables}, but these variables will be defined globally. If \code{variables} is set as well, #' the function tries to remove duplicate definitions. @@ -61,19 +61,36 @@ rk.JS.doc <- function(require=c(), variables=NULL, globals=NULL, results.header=NULL, header.add=list(), preprocess=NULL, calculate=NULL, printout=NULL, doPrintout=NULL, load.silencer=NULL, gen.info=TRUE, indent.by="\t", guess.getter=FALSE){ + # variable to determine whether to add setGlobalVars() to preprocess() later + addSetGlobalVars <- FALSE # some data transformation + if(all(sapply(variables, function(x){inherits(x, "rk.JS.var")}))){ + variables <- rk.paste.JS( + paste0(unlist(sapply(variables, function(x){rk.paste.JS(x, var=FALSE)}))) + ) + } else {} if(inherits(variables, "rk.JS.var")){ - variables <- rk.paste.JS(variables) } else {} - if(inherits(globals, "rk.JS.var")){ - globals <- rk.paste.JS(globals, level=1) + if(all(sapply(globals, function(x){inherits(x, "rk.JS.var")}))){ + globalNames <- paste0("var ", unlist(sapply(globals, function(x){paste.JS.var(x, names.only=TRUE)})), ";", collapse="\n") + globalFunction <- paste0( + "function setGlobalVars(){\n", + paste0( + unlist(sapply(globals, function(x){rk.paste.JS(x, var=FALSE, level=2)})), + collapse="\n" + ), + "\n}", + collapse="\n" + ) + globals <- paste0(globalNames, "\n\n", globalFunction) + addSetGlobalVars <- TRUE } else {} js.gen.info <- ifelse(isTRUE(gen.info), rk.paste.JS(generator.info, level=1), "") if(!is.null(globals)){ - js.globals <- paste( + js.globals <- paste0( "// define variables globally\n", paste0(globals, collapse="")) if(!is.null(variables)){ @@ -107,6 +124,7 @@ rk.JS.doc <- function(require=c(), variables=NULL, globals=NULL, results.header= return(req.result) })) js.preprocess <- paste0("function preprocess(){\n", + ifelse(isTRUE(addSetGlobalVars), paste0(indent(2, by=indent.by), "setGlobalVars();\n"), ""), indent(2, by=indent.by), "// add requirements etc. here\n", paste(js.require, collapse=""), "\n", diff --git a/packages/rkwarddev/R/rk.paste.JS.R b/packages/rkwarddev/R/rk.paste.JS.R index 2e9304a..5ce5f6c 100644 --- a/packages/rkwarddev/R/rk.paste.JS.R +++ b/packages/rkwarddev/R/rk.paste.JS.R @@ -40,6 +40,8 @@ #' @param getter For \code{rk.JS.var} objects only: A character string, naming the JavaScript function which should be used to get the #' values in the actual plugin. Depending on the XML element, \code{"getString"}, \code{"getBool"} or \code{"getList"} can be #' useful alternatives. For backwards compatibility, the default is set to \code{"getValue"}. +#' @param var For \code{rk.JS.var} objects only: Logical, if \code{FALSE} the variable(s) are assumed to already be defined (globally?) +#' and the JS keyword "var" will be omitted. #' @param empty.e For \code{rk.JS.ite} objects only: Logical, if \code{TRUE} will force to add empty \code{else \{\}} brackets when #' there is no \code{else} statement defined, which is considered to enhance code readability by some. #' @return A character string. @@ -60,7 +62,7 @@ #' @export rk.paste.JS <- function(..., level=2, indent.by="\t", funct=NULL, array=NULL, - var.prefix=NULL, modifiers=NULL, default=NULL, join=NULL, getter=NULL, empty.e=FALSE){ + var.prefix=NULL, modifiers=NULL, default=NULL, join=NULL, getter=NULL, var=TRUE, empty.e=FALSE){ stopifnot(level > 0) all.objects <- list(...) @@ -81,7 +83,7 @@ rk.paste.JS <- function(..., level=2, indent.by="\t", funct=NULL, array=NULL, result <- paste.JS.optionsset(this.object, level=level, indent.by=indent.by) } else if(inherits(this.object, "rk.JS.var")){ result <- paste.JS.var(this.object, level=level, indent.by=indent.by, JS.prefix=var.prefix, - modifiers=modifiers, default=default, join=join, getter=getter) + modifiers=modifiers, default=default, join=join, getter=getter, var=var) } else if(inherits(this.object, "rk.JS.echo")){ result <- slot(this.object, "value") } else if(inherits(this.object, "rk.JS.i18n")){ diff --git a/packages/rkwarddev/R/rkwarddev-package.R b/packages/rkwarddev/R/rkwarddev-package.R index 0ea7606..4e03bf0 100644 --- a/packages/rkwarddev/R/rkwarddev-package.R +++ b/packages/rkwarddev/R/rkwarddev-package.R @@ -4,13 +4,13 @@ #' Package: \tab rkwarddev\cr #' Type: \tab Package\cr #' Version: \tab 0.06-6\cr -#' Date: \tab 2014-12-17\cr +#' Date: \tab 2015-01-02\cr #' Depends: \tab R (>= 2.9.0),methods,XiMpLe (>= 0.03-21),rkward (>= 0.5.7)\cr #' Enhances: \tab rkward\cr #' Encoding: \tab UTF-8\cr #' License: \tab GPL (>= 3)\cr #' LazyLoad: \tab yes\cr -#' URL: \tab http://rkward.kde.org\cr +#' URL: \tab http://rkward.sourceforge.net\cr #' } #' #' Provides functions to create plugin skeletons and XML structures for RKWard. diff --git a/packages/rkwarddev/man/i18n.Rd b/packages/rkwarddev/man/i18n.Rd index bf9cc14..ef30f5d 100644 --- a/packages/rkwarddev/man/i18n.Rd +++ b/packages/rkwarddev/man/i18n.Rd @@ -9,7 +9,7 @@ i18n(msgid, ..., context = NULL, plural = NULL, newline = "") \item{msgid}{Character string, the message to be translated (if applicable, its singular form).} -\item{...}{Either character string wich will be pasted unquoted to be used in conjunctions with +\item{...}{Either character string which will be pasted unquoted to be used in conjunctions with placeholders in msgid, or XiMpLe.node objects of which the JavaScript variable name will be used.} diff --git a/packages/rkwarddev/man/rk.JS.doc.Rd b/packages/rkwarddev/man/rk.JS.doc.Rd index dacdb39..4e1129b 100644 --- a/packages/rkwarddev/man/rk.JS.doc.Rd +++ b/packages/rkwarddev/man/rk.JS.doc.Rd @@ -13,7 +13,7 @@ rk.JS.doc(require = c(), variables = NULL, globals = NULL, \item{require}{A character vector with names of R packages that the dialog depends on.} \item{variables}{Either a character string to be included to read in all needed variables from the dialog (see \code{\link{rk.JS.scan}}), -or an object of class \code{rk.JS.var} which will be coerced into character. These variables will be defined in +or a (list of) objects of class \code{rk.JS.var} which will be coerced into character. These variables will be defined in the \code{calculate()} and/or \code{doPrintout()} functions.} \item{globals}{Like \code{variables}, diff --git a/packages/rkwarddev/man/rk.XML.vars.Rd b/packages/rkwarddev/man/rk.XML.vars.Rd index 39b36f9..9720ba0 100644 --- a/packages/rkwarddev/man/rk.XML.vars.Rd +++ b/packages/rkwarddev/man/rk.XML.vars.Rd @@ -108,7 +108,7 @@ cat(pasteXML(test.vars)) } \seealso{ \code{\link[rkwarddev:rk.XML.varslot]{rk.XML.varslot}}, - \code{\link[rkwarddev:rk.XML.varselector]{rk.XML.varselector}}, - and the \href{help:rkwardplugins}{Introduction to Writing Plugins for RKWard} + \code{\link[rkwarddev:rk.XML.varselector]{rk.XML.varselector}}, + and the \href{help:rkwardplugins}{Introduction to Writing Plugins for RKWard} } diff --git a/packages/rkwarddev/man/rk.paste.JS.Rd b/packages/rkwarddev/man/rk.paste.JS.Rd index 520e69f..600b58b 100644 --- a/packages/rkwarddev/man/rk.paste.JS.Rd +++ b/packages/rkwarddev/man/rk.paste.JS.Rd @@ -5,7 +5,7 @@ \usage{ rk.paste.JS(..., level = 2, indent.by = "\\t", funct = NULL, array = NULL, var.prefix = NULL, modifiers = NULL, default = NULL, - join = NULL, getter = NULL, empty.e = FALSE) + join = NULL, getter = NULL, var = TRUE, empty.e = FALSE) } \arguments{ \item{...}{Objects of class \code{rk.JS.ite}, \code{rk.JS.arr}, \code{rk.JS.opt}, @@ -48,6 +48,10 @@ values in the actual plugin. Depending on the XML element, \code{"getString"}, useful alternatives. For backwards compatibility, the default is set to \code{"getValue"}.} +\item{var}{For \code{rk.JS.var} objects only: Logical, + if \code{FALSE} the variable(s) are assumed to already be defined (globally?) +and the JS keyword "var" will be omitted.} + \item{empty.e}{For \code{rk.JS.ite} objects only: Logical, if \code{TRUE} will force to add empty \code{else \{\}} brackets when there is no \code{else} statement defined, diff --git a/packages/rkwarddev/man/rkwarddev-package.Rd b/packages/rkwarddev/man/rkwarddev-package.Rd index 56d5bc0..9808c2a 100644 --- a/packages/rkwarddev/man/rkwarddev-package.Rd +++ b/packages/rkwarddev/man/rkwarddev-package.Rd @@ -11,13 +11,13 @@ A collection of tools for RKWard plugin development. Package: \tab rkwarddev\cr Type: \tab Package\cr Version: \tab 0.06-6\cr -Date: \tab 2014-12-17\cr +Date: \tab 2015-01-02\cr Depends: \tab R (>= 2.9.0),methods,XiMpLe (>= 0.03-21),rkward (>= 0.5.7)\cr Enhances: \tab rkward\cr Encoding: \tab UTF-8\cr License: \tab GPL (>= 3)\cr LazyLoad: \tab yes\cr -URL: \tab http://rkward.kde.org\cr +URL: \tab http://rkward.sourceforge.net\cr } Provides functions to create plugin skeletons and XML structures for RKWard. |