Browse Source

added cloc metrics

master
boB Rudis 4 years ago
parent
commit
bf5ce8c895
No known key found for this signature in database GPG Key ID: 1D7529BE14E2BBA9
  1. 12
      DESCRIPTION
  2. 11
      R/xmltreeview.R
  3. 24
      README.Rmd
  4. 89
      README.md
  5. 105
      docs/LICENSE.html
  6. 136
      docs/authors.html
  7. 9
      docs/jquery.sticky-kit.min.js
  8. 12
      docs/link.svg
  9. 153
      docs/pkgdown.css
  10. 11
      docs/pkgdown.js
  11. 19
      inst/COPYRIGHTS
  12. 5
      inst/htmlwidgets/lib/jquery/jquery.min.js
  13. 21
      inst/htmlwidgets/lib/xml-viewer/LICENSE
  14. 40
      inst/htmlwidgets/lib/xml-viewer/README.md
  15. 12
      inst/htmlwidgets/lib/xml-viewer/XMLDisplay.css
  16. BIN
      inst/htmlwidgets/lib/xml-viewer/add.png
  17. BIN
      inst/htmlwidgets/lib/xml-viewer/bullet_arrow_down.png
  18. BIN
      inst/htmlwidgets/lib/xml-viewer/bullet_arrow_up.png
  19. BIN
      inst/htmlwidgets/lib/xml-viewer/callout.gif
  20. BIN
      inst/htmlwidgets/lib/xml-viewer/draghandle.gif
  21. BIN
      inst/htmlwidgets/lib/xml-viewer/exclamation.png
  22. BIN
      inst/htmlwidgets/lib/xml-viewer/loader.gif
  23. BIN
      inst/htmlwidgets/lib/xml-viewer/magnifier.png
  24. BIN
      inst/htmlwidgets/lib/xml-viewer/minus.gif
  25. 21
      inst/htmlwidgets/lib/xml-viewer/package.json
  26. BIN
      inst/htmlwidgets/lib/xml-viewer/plus.gif
  27. 5
      inst/htmlwidgets/lib/xml-viewer/treewdgt.css
  28. 2346
      inst/htmlwidgets/lib/xml-viewer/xml-viewer.js
  29. 455
      inst/htmlwidgets/lib/xml-viewer/xonomy.css
  30. 1306
      inst/htmlwidgets/lib/xml-viewer/xonomy.js
  31. 20
      inst/htmlwidgets/xmltreeview.js
  32. 10
      inst/htmlwidgets/xmltreeview.yaml
  33. 17
      man/xml_tree_view.Rd

12
DESCRIPTION

@ -1,6 +1,6 @@
Package: htmltidy
Title: Tidy Up and Test XPath Queries on HTML and XML Content
Version: 0.4.0
Version: 0.5.0
Encoding: UTF-8
Authors@R: c(
person("Bob", "Rudis", email = "bob@rud.is", role = c("aut", "cre")),
@ -16,7 +16,7 @@ Authors@R: c(
comment = "vkbeautify library"),
person("Ivan", "Sagalaev", role = c("ctb", "cph"),
comment = "highlight.js library"),
person("Julian", "Gruber", role = c("ctb", "cph"),
person("Lev", "Muchnik", email = "LevMuchnik@gmail.com", role = c("ctb", "cph"),
comment = "xml-viewer library")
)
Maintainer: Bob Rudis <bob@rud.is>
@ -31,10 +31,10 @@ Description: HTML documents can be beautiful and pristine. They can also be
content from HTML/XML document objects, nodes, node sets and plain character HTML/XML
using 'vkbeautify' (by Vadim Kiryukhin) and 'highlight.js' (by Ivan Sagalaev).
Also (optionally) enables filtering of nodes via XPath or viewing an HTML/XML document
in "tree" view using 'xml-viewer' (by Julian Gruber). See
in "tree" view using 'XMLDisplay' (by Lev Muchnik). See
<https://github.com/vkiryukhin/vkBeautify> and
<https://github.com/juliangruber/xml-viewer> for more information about 'vkbeautify'
and 'xml-viewer', respectively.
<http://www.levmuchnik.net/Content/ProgrammingTips/WEB/XMLDisplay/DisplayXMLFileWithJavascript.html>
for more information about 'vkbeautify' and 'XMLDisplay', respectively.
Copyright: file inst/COPYRIGHTS
URL: https://github.com/hrbrmstr/htmltidy
BugReports: https://github.com/hrbrmstr/htmltidy/issues
@ -54,4 +54,4 @@ Imports:
XML,
htmlwidgets,
htmltools
RoxygenNote: 6.0.1
RoxygenNote: 6.0.1.9000

11
R/xmltreeview.R

@ -4,8 +4,11 @@
#' tree viewer for HTML/XML documents, nodes, node sets and plain character
#' HTML/XML in an \code{htmlwidget} pane.
#'
#' @md
#' @param doc \code{xml2} document/node/nodeset, an \code{HTMLInternalDocument}/
#' \code{XMLInternalDocument} or atomic character vector of HTML/XML content
#' @param mode viewer mode. `traditional` uses tag notation; `modern` favors readability
#' oveer angle brackets.
#' @param scroll should the \code{<div>} holding the HTML/XML content scroll
#' (\code{TRUE}) or take up the full viewer/browser window (\code{FALSE}).
#' Default is \code{FALSE} (take up the full viewer/browser window). If
@ -17,14 +20,14 @@
#' that this function be used on as minimal of a subset of HTML/XML as possible
#' or used in a browser context vs an IDE viewer context.
#' @export
#' @references \href{https://github.com/juliangruber/xml-viewer}{xml-viewer}
#' @references \href{http://www.lexiconista.com/xonomy/}{xonomy xml viewer}
#' @examples
#' if(interactive()) {
#' txt <- paste0("<note><to>Tove</to><from>Jani</from><heading>Reminder</heading>",
#' "<body>Don't forget me this weekend!</body></note>")
#' # xml_tree_view(txt)
#' }
xml_tree_view <- function(doc=NULL, scroll=FALSE, width="100%", height=NULL) {
xml_tree_view <- function(doc=NULL, mode=c("traditional", "modern"), scroll=FALSE, width="100%", height=NULL) {
if (inherits(doc, "character")) {
doc <- paste0(doc, collapse="")
@ -37,8 +40,12 @@ xml_tree_view <- function(doc=NULL, scroll=FALSE, width="100%", height=NULL) {
doc <- XML::saveXML(doc)
}
mode <- match.arg(trimws(tolower(mode)), c("traditional", "modern"))
mode <- unname(c("traditional"="nerd", "modern"="laic")[mode])
params <- list(
xmlDoc = doc,
mode = mode,
scroll = scroll
)

24
README.Rmd

@ -21,13 +21,19 @@ knitr::opts_chunk$set(
)
```
`htmltidy` — Tidy Up and Test XPath Queries on HTML and XML Content
# htmltidy
Tidy Up and Test XPath Queries on HTML and XML Content
## Description
Partly inspired by [this SO question](http://stackoverflow.com/questions/37061873/identify-a-weblink-in-bold-in-r) and because there's a great deal of cruddy HTML out there that needs fixing to use properly when scraping data.
It relies on a locally included version of [`libtidy`](http://www.html-tidy.org/) and works on macOS, Linux & Windows.
It also incorporates an `htmlwidget` to view and test XPath queries on HTML/XML content.
It also incorporates an `htmlwidget` to view and test XPath queries on HTML/XML content and another widget to view an XML document in a collapseable tree view.
## What's inside the tin?
The following functions are implemented:
@ -37,7 +43,7 @@ The following functions are implemented:
- `html_tree_view`: HTML/XML tree viewer
- `xml_tree_view`: HTML/XML tree viewer
### Installation
## Installation
```{r eval=FALSE}
devtools::install_github("hrbrmstr/htmltidy")
@ -47,7 +53,7 @@ devtools::install_github("hrbrmstr/htmltidy")
options(width=120)
```
### Usage
## Usage
```{r message=FALSE, warning=FALSE}
library(htmltidy)
@ -114,7 +120,7 @@ And, show the markup errors:
invisible(tidy_html(url("https://rud.is/test/untidy.html"), verbose=TRUE))
```
### Testing Options
## Testing Options
```{r message=FALSE, warning=FALSE}
@ -155,7 +161,13 @@ system.time(tidy_book <- tidy_html(book))
(It's usually between 20 & 25 milliseconds to process those 202 kilobytes of HTML.) Not too shabby.
### Code of Conduct
## htmltidy Metrics
```{r echo=FALSE}
cloc::cloc_pkg_md()
```
## Code of Conduct
Please note that this project is released with a [Contributor Code of Conduct](CONDUCT.md).
By participating in this project you agree to abide by its terms.

89
README.md

@ -1,37 +1,56 @@
[![Travis-CI Build Status](https://travis-ci.org/hrbrmstr/htmltidy.svg?branch=master)](https://travis-ci.org/hrbrmstr/htmltidy) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/hrbrmstr/htmltidy?branch=master&svg=true)](https://ci.appveyor.com/project/hrbrmstr/htmltidy) [![CRAN\_Status\_Badge](http://www.r-pkg.org/badges/version/htmltidy)](https://cran.r-project.org/package=htmltidy) ![downloads](http://cranlogs.r-pkg.org/badges/grand-total/htmltidy)
[![Travis-CI Build
Status](https://travis-ci.org/hrbrmstr/htmltidy.svg?branch=master)](https://travis-ci.org/hrbrmstr/htmltidy)
[![AppVeyor Build
Status](https://ci.appveyor.com/api/projects/status/github/hrbrmstr/htmltidy?branch=master&svg=true)](https://ci.appveyor.com/project/hrbrmstr/htmltidy)
[![CRAN\_Status\_Badge](http://www.r-pkg.org/badges/version/htmltidy)](https://cran.r-project.org/package=htmltidy)
![downloads](http://cranlogs.r-pkg.org/badges/grand-total/htmltidy)
<!-- README.md is generated from README.Rmd. Please edit that file -->
`htmltidy` — Tidy Up and Test XPath Queries on HTML and XML Content
Partly inspired by [this SO question](http://stackoverflow.com/questions/37061873/identify-a-weblink-in-bold-in-r) and because there's a great deal of cruddy HTML out there that needs fixing to use properly when scraping data.
# htmltidy
It relies on a locally included version of [`libtidy`](http://www.html-tidy.org/) and works on macOS, Linux & Windows.
Tidy Up and Test XPath Queries on HTML and XML Content
It also incorporates an `htmlwidget` to view and test XPath queries on HTML/XML content.
## Description
Partly inspired by [this SO
question](http://stackoverflow.com/questions/37061873/identify-a-weblink-in-bold-in-r)
and because there’s a great deal of cruddy HTML out there that needs
fixing to use properly when scraping data.
It relies on a locally included version of
[`libtidy`](http://www.html-tidy.org/) and works on macOS, Linux &
Windows.
It also incorporates an `htmlwidget` to view and test XPath queries on
HTML/XML content and another widget to view an XML document in a
collapseable tree view.
## What’s inside the tin?
The following functions are implemented:
- `tidy_html`: Tidy or "Pretty Print" HTML/XHTML Documents
- `html_view`: HTML/XML pretty printer and viewer
- `xml_view`: HTML/XML pretty printer and viewer
- `html_tree_view`: HTML/XML tree viewer
- `xml_tree_view`: HTML/XML tree viewer
- `tidy_html`: Tidy or “Pretty Print” HTML/XHTML Documents
- `html_view`: HTML/XML pretty printer and viewer
- `xml_view`: HTML/XML pretty printer and viewer
- `html_tree_view`: HTML/XML tree viewer
- `xml_tree_view`: HTML/XML tree viewer
### Installation
## Installation
``` r
devtools::install_github("hrbrmstr/htmltidy")
```
### Usage
## Usage
``` r
library(htmltidy)
# current verison
packageVersion("htmltidy")
## [1] '0.4.0'
## [1] '0.5.0'
library(XML)
library(xml2)
@ -39,7 +58,7 @@ library(httr)
library(purrr)
```
This is really "un-tidy" content:
This is really “un-tidy” content:
``` r
res <- GET("https://rud.is/test/untidy.html")
@ -55,7 +74,7 @@ cat(content(res, as="text"))
## as is this <span id="sp">portion<div>
```
Let's see what `tidy_html()` does to it.
Lets see what `tidy_html()` does to it.
It can handle the `response` object directly:
@ -81,7 +100,9 @@ cat(tidy_html(res, list(TidyDocType="html5", TidyWrapLen=200)))
## </html>
```
But, you'll probably mostly use it on HTML you've identified as gnarly and already have that HTML text content handy:
But, you’ll probably mostly use it on HTML you’ve identified as gnarly
and already have that HTML text content
handy:
``` r
cat(tidy_html(content(res, as="text"), list(TidyDocType="html5", TidyWrapLen=200)))
@ -122,7 +143,8 @@ cat(tidy_html(url("https://rud.is/test/untidy.html"),
## </html>
```
You'll see that this differs substantially from the mangling `libxml2` does (via `read_html()`):
You’ll see that this differs substantially from the mangling `libxml2`
does (via `read_html()`):
``` r
pg <- read_html("https://rud.is/test/untidy.html")
@ -143,7 +165,7 @@ cat(toString(pg))
## </html>
```
It can also deal with "raw" and parsed objects:
It can also deal with “raw” and parsed objects:
``` r
tidy_html(content(res, as="raw"))
@ -177,7 +199,8 @@ tidy_html(htmlParse("https://rud.is/test/untidy.html"))
##
```
And, show the markup errors:
And, show the markup
errors:
``` r
invisible(tidy_html(url("https://rud.is/test/untidy.html"), verbose=TRUE))
@ -194,7 +217,7 @@ invisible(tidy_html(url("https://rud.is/test/untidy.html"), verbose=TRUE))
## Tidy found 9 warnings and 0 errors!
```
### Testing Options
## Testing Options
``` r
@ -235,9 +258,9 @@ cat(tidy_html(txt, option=opts))
## </html>
```
But, you're probably better off running it on plain HTML source.
But, youre probably better off running it on plain HTML source.
Since it's C/C++-backed, it's pretty fast:
Since it’s C/C++-backed, it’s pretty fast:
``` r
book <- readLines("http://singlepageappbook.com/single-page.html")
@ -245,11 +268,25 @@ sum(map_int(book, nchar))
## [1] 207501
system.time(tidy_book <- tidy_html(book))
## user system elapsed
## 0.023 0.001 0.025
## 0.028 0.001 0.029
```
(It's usually between 20 & 25 milliseconds to process those 202 kilobytes of HTML.) Not too shabby.
(It’s usually between 20 & 25 milliseconds to process those 202
kilobytes of HTML.) Not too
shabby.
## htmltidy Metrics
| Lang | \# Files | (%) | LoC | (%) | Blank lines | (%) | \# Lines | (%) |
| :----------- | -------: | ---: | ----: | ---: | ----------: | ---: | -------: | ---: |
| C | 27 | 0.34 | 28646 | 0.81 | 4696 | 0.77 | 4304 | 0.59 |
| C/C++ Header | 37 | 0.47 | 5799 | 0.16 | 1227 | 0.20 | 2674 | 0.36 |
| C++ | 4 | 0.05 | 647 | 0.02 | 117 | 0.02 | 64 | 0.01 |
| R | 10 | 0.13 | 151 | 0.00 | 38 | 0.01 | 235 | 0.03 |
| Rmd | 1 | 0.01 | 53 | 0.00 | 52 | 0.01 | 68 | 0.01 |
### Code of Conduct
## Code of Conduct
Please note that this project is released with a [Contributor Code of Conduct](CONDUCT.md). By participating in this project you agree to abide by its terms.
Please note that this project is released with a [Contributor Code of
Conduct](CONDUCT.md). By participating in this project you agree to
abide by its terms.

105
docs/LICENSE.html

@ -0,0 +1,105 @@
<!-- Generated by pkgdown: do not edit by hand -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>License • htmltidy</title>
<!-- jquery -->
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
<!-- Bootstrap -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<!-- Font Awesome icons -->
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
<!-- pkgdown -->
<link href="pkgdown.css" rel="stylesheet">
<script src="jquery.sticky-kit.min.js"></script>
<script src="pkgdown.js"></script>
<!-- mathjax -->
<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container template-license">
<header>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">htmltidy</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="reference/index.html">Reference</a>
</li>
<li>
<a href="news/index.html">News</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="https://github.com/hrbrmstr/htmltidy">
<span class="fa fa-github fa-lg"></span>
</a>
</li>
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
</header>
<div class="row">
<div class="contents col-md-12">
<div class="page-header">
<h1>License</h1>
</div>
<pre>YEAR: 2016
COPYRIGHT HOLDER: Bob Rudis
</pre>
</div>
</div>
<footer>
<div class="copyright">
<p>Developed by Bob Rudis, Dave Raggett, Charles Reitzel, Björn Höhrmann, Kenton Russell.</p>
</div>
<div class="pkgdown">
<p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
</div>
</footer>
</div>
</body>
</html>

136
docs/authors.html

@ -0,0 +1,136 @@
<!-- Generated by pkgdown: do not edit by hand -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Authors • htmltidy</title>
<!-- jquery -->
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
<!-- Bootstrap -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<!-- Font Awesome icons -->
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
<!-- pkgdown -->
<link href="pkgdown.css" rel="stylesheet">
<script src="jquery.sticky-kit.min.js"></script>
<script src="pkgdown.js"></script>
<!-- mathjax -->
<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container template-authors">
<header>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">htmltidy</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="reference/index.html">Reference</a>
</li>
<li>
<a href="news/index.html">News</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="https://github.com/hrbrmstr/htmltidy">
<span class="fa fa-github fa-lg"></span>
</a>
</li>
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
</header>
<div class="row">
<div class="contents col-md-12">
<div class="page-header">
<h1>Authors</h1>
</div>
<ul class="list-unstyled">
<li>
<p><strong>Bob Rudis</strong>. Author, maintainer.
</p>
</li>
<li>
<p><strong>Dave Raggett</strong>. Contributor, author.
<br /><small>Original HTML Tidy library</small></p>
</li>
<li>
<p><strong>Charles Reitzel</strong>. Contributor, author.
<br /><small>Modern HTML Tidy library</small></p>
</li>
<li>
<p><strong>Björn Höhrmann</strong>. Contributor, author.
<br /><small>HTML5 Support</small></p>
</li>
<li>
<p><strong>Kenton Russell</strong>. Author, contributor.
<br /><small>xml-viewer integration</small></p>
</li>
<li>
<p><strong>Vadim Kiryukhin</strong>. Contributor, copyright&nbsp;holder.
<br /><small>vkbeautify library</small></p>
</li>
<li>
<p><strong>Ivan Sagalaev</strong>. Contributor, copyright&nbsp;holder.
<br /><small>highlight.js library</small></p>
</li>
<li>
<p><strong>Lev Muchnik</strong>. Contributor, copyright&nbsp;holder.
<br /><small>xml-viewer library</small></p>
</li>
</ul>
</div>
</div>
<footer>
<div class="copyright">
<p>Developed by Bob Rudis, Dave Raggett, Charles Reitzel, Björn Höhrmann, Kenton Russell.</p>
</div>
<div class="pkgdown">
<p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
</div>
</footer>
</div>
</body>
</html>

9
docs/jquery.sticky-kit.min.js

@ -0,0 +1,9 @@
/*
Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
*/
(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));
if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("<div />"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,
u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,c=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),
h.detach()),b={position:"",width:"",top:""},a.css(b).removeClass(t).trigger("sticky_kit:unstick")),B&&(b=f.height(),u+q>b&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),
a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",
y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n<K;n++)d=this[n],J(b(d));return this}}).call(this);

12
docs/link.svg

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" style="enable-background:new 0 0 20 20;" xml:space="preserve">
<style type="text/css">
.st0{fill:#75AADB;}
</style>
<path class="st0" d="M4,11.3h1.3v1.3H4c-2,0-4-2.3-4-4.7s2.1-4.7,4-4.7h5.3c1.9,0,4,2.3,4,4.7c0,1.9-1.2,3.6-2.7,4.3v-1.5
C11.4,10.2,12,9.1,12,8c0-1.7-1.4-3.3-2.7-3.3H4C2.7,4.7,1.3,6.3,1.3,8S2.7,11.3,4,11.3z M16,7.3h-1.3v1.3H16c1.3,0,2.7,1.6,2.7,3.3
s-1.4,3.3-2.7,3.3h-5.3C9.4,15.3,8,13.7,8,12c0-1.1,0.6-2.2,1.3-2.8V7.7C7.9,8.4,6.7,10.1,6.7,12c0,2.4,2.1,4.7,4,4.7H16
c1.9,0,4-2.3,4-4.7S18,7.3,16,7.3z"/>
</svg>

After

Width:  |  Height:  |  Size: 810 B

153
docs/pkgdown.css

@ -1,59 +1,158 @@
body {
position: relative;
/* Sticker footer */
body > .container {
display: flex;
padding-top: 60px;
min-height: calc(100vh);
flex-direction: column;
}
.icon img {
float: right;
border: 1px solid #ccc;
body > .container .row {
flex: 1;
}
.index .internal {display: none;}
ul.index li {margin-bottom: 0.5em; clear: both;}
footer {
margin-top: 45px;
padding: 35px 0 36px;
border-top: 1px solid #e5e5e5;
color: #666;
display: flex;
}
footer p {
margin-bottom: 0;
}
footer div {
flex: 1;
}
footer .pkgdown {
text-align: right;
}
footer p {
margin-bottom: 0;
color: #555;
}
/* Fixes for fixed navbar --------------------------*/
img.icon {
float: right;
}
body {
position: relative;
padding-top: 60px;
img {
max-width: 100%;
}
/* Section anchors ---------------------------------*/
a.anchor {
margin-left: -30px;
display:inline-block;
width: 30px;
height: 30px;
visibility: hidden;
background-image: url(./link.svg);
background-repeat: no-repeat;
background-size: 20px 20px;
background-position: center center;
}
.hasAnchor:hover a.anchor {
visibility: visible;
}
@media (max-width: 767px) {
.hasAnchor:hover a.anchor {
visibility: hidden;
}
}
.section h1, .section h2, .section h3, .section h4 {
/* Fixes for fixed navbar --------------------------*/
.contents h1, .contents h2, .contents h3, .contents h4 {
padding-top: 60px;
margin-top: -60px;
}
/* Table of contents --------------------------*/
/* Static header placement on mobile devices */
@media (max-width: 767px) {
.navbar-fixed-top {
position: absolute;
}
.navbar {
padding: 0;
}
}
#tocnav h2 {
margin-top: 0;
/* Sidebar --------------------------*/
#sidebar {
margin-top: 30px;
}
#sidebar h2 {
font-size: 1.5em;
margin-top: 1em;
}
#sidebar h2:first-child {
margin-top: 0;
}
#sidebar .list-unstyled li {
margin-bottom: 0.5em;
}
/* Reference index & topics ----------------------------------------------- */
.ref-index th {font-weight: normal;}
.ref-index h2 {font-size: 20px;}
.ref-index td {vertical-align: top;}
.ref-index .alias {width: 40%;}
.ref-index .title {width: 60%;}
.ref-index .alias {width: 40%;}
.ref-index .title {width: 60%;}
.ref-arguments th {text-align: right; padding-right: 10px;}
.ref-arguments th, .ref-arguments td {vertical-align: top;}
.ref-arguments .name {width: 20%;}
.ref-arguments .desc {width: 80%;}
/* Nice scrolling for wide elements --------------------------------------- */
table {
display: block;
overflow: auto;
}
/* Syntax highlighting ---------------------------------------------------- */
.fl,.number {color:rgb(21,20,181);}
.fu,.functioncall {color:#264D66 ;}
.ch,.st,.string {color:#375D81 ;}
.kw,.keyword {font-weight:bolder ;color:black;}
.argument {color:#264D66 ;}
.co,.comment {color: #333;}
.formalargs {color: #264D66;}
.eqformalargs {color:#264D66;}
.slot {font-style:italic;}
.symbol {color:black ;}
.prompt {color:black ;}
pre {
word-wrap: normal;
word-break: normal;
border: 1px solid #eee;
}
pre, code {
background-color: #f8f8f8;
color: #333;
}
pre img {
background-color: #fff;
display: block;
}
code a, pre a {
color: #375f84;
}
.fl {color: #1514b5;}
.fu {color: #000000;} /* function */
.ch,.st {color: #036a07;} /* string */
.kw {color: #264D66;} /* keyword */
.co {color: #888888;} /* comment */
.message { color: black; font-weight: bolder;}
.error { color: orange; font-weight: bolder;}
.warning { color: #6A0366; font-weight: bolder;}

11
docs/pkgdown.js

@ -1,13 +1,8 @@
$(function() {
$('#tocnav').affix({
offset: {
top: $('#tocnav').offset().top - 80
}
});
$("#sidebar").stick_in_parent({offset_top: 40});
$('body').scrollspy({
target: '#tocnav',
offset: 80
target: '#sidebar',
offset: 60
});
});

19
inst/COPYRIGHTS

@ -5,12 +5,12 @@ All R source code and source file src/htmltidy.cpp are released under the GNU AG
As per https://github.com/htacg/tidy-html5/blob/master/README/LICENSE.md, libtidy source
code is:
"Copyright (c) 1998-2016 World Wide Web Consortium (Massachusetts Institute of
Technology, European Research Consortium for Informatics and Mathematics, Keio University).
All Rights Reserved.
Copyright (c) 1998-2016 World Wide Web Consortium (Massachusetts Institute of
Technology, European Research Consortium for Informatics and Mathematics,
Keio University). All Rights Reserved.
Additional contributions (c) 2001-2016 University of Toronto, Terry Teague, @geoffmcl,
HTACG, and others.""
HTACG, and others."
The authors of the libtidy sources also used other source code that is licensed GPL-2.
@ -25,7 +25,16 @@ Both of those files have been marked as modified in the license copyright header
------
xml-viewer is MIT licensed
XMLDisplay has the following license:
Copyright (c) 2007 Lev Muchnik <LevMuchnik@gmail.com>. All rights reserved.
You may copy and modify this script as long as the above copyright notice,
this condition and the following disclaimer is left intact.
This software is provided by the author "AS IS" and no warranties are
implied, including fitness for a particular purpose. In no event shall
the author be liable for any damages arising in any way out of the use
of this software, even if advised of the possibility of such damage.
$Date: 2007-10-03 19:08:15 -0700 (Wed, 03 Oct 2007)
------

5
inst/htmlwidgets/lib/jquery/jquery.min.js

File diff suppressed because one or more lines are too long

21
inst/htmlwidgets/lib/xml-viewer/LICENSE

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Michal Boleslav Měchura
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

40
inst/htmlwidgets/lib/xml-viewer/README.md

@ -1,39 +1,5 @@
# Xonomy
# xml-viewer
Render and interact with XML in the browser
## Example
[![view on requirebin](http://requirebin.com/badge.png)](http://requirebin.com/?gist=e5a12cd900f6c63824a7)
```js
var Viewer = require('xml-viewer');
var fs = require('fs');
var xml = fs.readFileSync(__dirname + '/data.xml');
var insertCSS = require('insert-css');
var view = new Viewer(xml);
view.appendTo(document.body);
view.on('select', function(node){
if (!node) return console.log('nothing selected');
console.log('selected:');
console.log(node);
console.log(node.text());
});
insertCSS('.selected { background-color: #FFFF91 }');
```
## Installation
```bash
$ npm install xml-viewer
```
## License
MIT
<img src="http://www.lexiconista.com/Xonomy/xonomy3.gif" style="display: block; width: 100%; max-width: 948px; border: 2px solid #333333"/>
Xonomy is a web-based, schema-driven XML editor. For demos and documentation see http://www.lexiconista.com/xonomy/

12
inst/htmlwidgets/lib/xml-viewer/XMLDisplay.css

@ -2,26 +2,23 @@
/* CSS Document */
.Utility {
font-family: monospace;
color: black;
color: black;
}
.NodeName {
font-family: monospace;
font-weight:bold;
color: #800080;
}
.AttributeName
{
.AttributeName {
font-family: monospace;
font-weight:bold;
color: black;
}
.AttributeValue
{
.AttributeValue {
font-family: monospace;
color:blue;
}
.NodeValue
{
.NodeValue {
font-family: monospace;
color: black;
}
@ -39,6 +36,5 @@
font-size:large;
color: #800080;
cursor:pointer;
vertical-align:middle;
}

BIN
inst/htmlwidgets/lib/xml-viewer/add.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
inst/htmlwidgets/lib/xml-viewer/bullet_arrow_down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

BIN
inst/htmlwidgets/lib/xml-viewer/bullet_arrow_up.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

BIN
inst/htmlwidgets/lib/xml-viewer/callout.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 B

BIN
inst/htmlwidgets/lib/xml-viewer/draghandle.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 B

BIN
inst/htmlwidgets/lib/xml-viewer/exclamation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

BIN
inst/htmlwidgets/lib/xml-viewer/loader.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
inst/htmlwidgets/lib/xml-viewer/magnifier.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

BIN
inst/htmlwidgets/lib/xml-viewer/minus.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

21
inst/htmlwidgets/lib/xml-viewer/package.json

@ -1,21 +0,0 @@
{
"name": "xml-viewer",
"version": "1.3.7",
"description": "Render and interact with XML in the browser",
"scripts": {
"test": "make test"
},
"repository": "juliangruber/xml-viewer",
"devDependencies": {
"beefy": "^2.1.5",
"brfs": "^1.4.1",
"insert-css": "^0.2.0",
"tape": "*"
},
"license": "MIT",
"dependencies": {
"hyperscript": "^1.4.7",
"xml-parser": "^1.2.1",
"xml-render": "^2.0.0"
}
}

BIN
inst/htmlwidgets/lib/xml-viewer/plus.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

5
inst/htmlwidgets/lib/xml-viewer/treewdgt.css

@ -1,5 +0,0 @@
.xmltreeview {
font-family: monospace;
color: #2b2b2b;
cursor: pointer;
}

2346
inst/htmlwidgets/lib/xml-viewer/xml-viewer.js

File diff suppressed because it is too large

455
inst/htmlwidgets/lib/xml-viewer/xonomy.css

@ -0,0 +1,455 @@
#xonomyBubble .menuItem:focus {background-color: #f5f5f5 !important; outline: none;}
#xonomyBubble .menuLabel:focus {background-color: #f5f5f5 !important; outline: none;}
.xonomy:focus {outline: none; }
.xonomy .tag.focused > .name { outline: 1px dotted #666666; }
.xonomy .textnode.focused { margin-left: -2px !important; }
.xonomy .textnode.focused > .value { border: 1px dotted #666666; }
.xonomy .attribute.focused .attributeName { outline: 1px dotted #666666; }
.xonomy .attributeValue.focused { outline: 1px dotted #666666; }
.xonomy .childrenCollapsed.focused { outline: 1px dotted #666666; background-color: #ffff99 !important; }
.xonomy .rollouter.focused { border: 1px dotted #666666 !important; background-color: #ffff99 !important; margin-left: 2px !important; }
.xonomy.nerd .element > .children > .textnode .char.focused { }
.xonomy.nerd .element > .children > .textnode .char.focused > .selector { position: absolute; left: 0px; right: 0px; z-index: 2; background-color: #00cc00; height: 3px; bottom: -3px; }
.xonomy.nerd .element > .children > .textnode .char.focused > .selector > .inside { position: absolute; left: 0px; right: 0px; top: -2px; bottom: -1px; background-color: transparent; }
.xonomy.laic .element > .children > .textnode .char.focused { }
.xonomy.laic .element > .children > .textnode .char.focused > .selector { position: absolute; left: 0px; right: 0px; z-index: 2; background-color: #00cc00; height: 8px; bottom: -10px; }
.xonomy.laic .element > .children > .textnode .char.focused > .selector > .inside { position: absolute; left: 0px; right: 0px; top: -2px; bottom: -1px; background-color: transparent; }
/*NERD MODE*/
.xonomy.nerd { font-family: monospace; font-size: 1rem; cursor: default; background-color: #ffffff;
-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;
line-height: 2em; padding-left: 5px; }
.xonomy.nerd * { position: relative; }
/*Inline formatting of names, values, punctuation*/
.xonomy.nerd .element .punc { color: #669acc; z-index: 1; }
.xonomy.nerd .element > .tag { border-radius: 2px; }
.xonomy.nerd .element > .tag.opening { }
.xonomy.nerd .element > .tag.opening > .punc.slash { display: none; }
.xonomy.nerd .element > .tag.closing { }
.xonomy.nerd .element > .tag > .name { color: #cc3333; cursor: pointer; }
.xonomy.nerd .element > .tag.opening > .attributes { }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute { }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .name { color: #ff4455; cursor: pointer; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .valueContainer { cursor: pointer; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .valueContainer > .value { color: #666666; }
.xonomy.nerd .element > .children > .textnode > .value { color: #000000; cursor: pointer; }
.xonomy.nerd .element > .children > .textnode > .value > .insertionPoint { display: none; }
.xonomy.nerd .element > .children > .textnode > .value > .dots { display: none; }
/*Clickable items: hover state*/
.xonomy.nerd .element > .tag > .name:hover { color: #00cc00; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .name:hover { color: #00cc00; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .valueContainer:hover > .value { color: #00cc00; }
.xonomy.nerd .element > .children > .textnode > .value:hover { color: #666666; }
.xonomy.nerd .element > .children > .textnode.whitespace > .value:hover { background-color: #f2f2f2; }
/*Clickable items: current state*/
.xonomy.nerd .element.current > .tag > .name { background-color: #ffff99; color: #00cc00; padding: 0px 3px; margin: 0px -3px; border-radius: 2px; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute.current > .name { background-color: #ffff99; color: #00cc00; padding: 0px 3px; margin: 0px -3px; border-radius: 2px; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .valueContainer.current { background-color: #ffff99; padding: 0px 3px; margin: 0px -3px; border-radius: 2px; }
.xonomy.nerd .element > .tag.opening > .attributes > .attribute > .valueContainer.current > .value { color: #00cc00; border-radius: 2px; }
.xonomy.nerd .element > .children > .textnode.current > .value { background-color: #ffff99 !important; color: #00cc00; padding: 0px 3px; margin: 0px -3px; border-radius: 2px; }
/*Read-only stuff*/
.xonomy.nerd .readonly * { color: #aaaaaa !important; cursor: default !important;
-webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; cursor: text !important;}
.xonomy.nerd .element.readonly.draggable > .connector > .draghandle { cursor: move !important; }
.xonomy.nerd .element.readonly .warner .inside { cursor: pointer !important; }
.xonomy.nerd .readonly .plusminus { cursor: pointer !important; }
.xonomy.nerd .readonly .childrenCollapsed { cursor: pointer !important; }
.xonomy.nerd .readonly .textnode .char > .selector > .inside:hover { background-color: transparent !important; }
.xonomy.nerd .invisible { display: none; }
.xonomy.nerd .attribute.shy { display: none; }
.xonomy.nerd .rollouter { background-color: #eeeeee; border-radius: 10px; margin: 0px 4px; background-image: url(bullet_arrow_down.png); background-position: center center; background-repeat: no-repeat; padding: 0px 8px; height: 16px; cursor: pointer; }
.xonomy.nerd .rollouter.rolledout { background-image: url(bullet_arrow_up.png); }
.xonomy.nerd .rollouter:hover { background-color: #ffff99; }
.xonomy.nerd .element > .tag.opening > .attributes.rolledout { display: block; padding: 0px 0px 5px 15px; border-left: 1px dotted #cccccc; margin: 0px 0px 0px 10px; }
.xonomy.nerd .element > .tag.opening > .attributes.rolledout > .attribute { display: block; border: 0px; padding: 0px; margin: 0px; }
.xonomy.nerd .element > .tag.opening > .attributes.rolledout > .attribute.invisible { display: none; }
/*Block layout*/
.xonomy.nerd .element { padding-left: 25px; margin-top: 5px; margin-bottom: 5px; }
.xonomy.nerd .element .connector { border-top: 1px dotted #b6b6b6; width: 24px; height: 10px; position: absolute; top: 17px; left: 0px; }
.xonomy.nerd .element.oneliner .connector { top: 17px; }
.xonomy.nerd .element .children { margin-left: 10px; border-left: 1px dotted #cccccc; padding-top: 1px; padding-bottom: 1px; }
.xonomy.nerd .element .children .textnode { padding-left: 25px; margin-top: 5px; margin-bottom: 5px; }
/*Inline layout (overrides block-layout default)*/
.xonomy.nerd .element.hasText > .children > .element { padding-left: 0px; display: inline; }
.xonomy.nerd .element.hasText .children .connector { position: relative; top: 0px; left: 0px; display: inline; padding-right: 16px; border: 0px; }
.xonomy.nerd .element.hasText .children .element.uncollapsible .connector { padding-right: 0px; }
.xonomy.nerd .element.hasText .children .element.noChildren .connector { padding-right: 0px; }
.xonomy.nerd .textnode > .connector { display: none !important; }
.xonomy.nerd .element.hasText .children { padding-left: 25px; padding-top: 5px; padding-bottom: 5px; }
.xonomy.nerd .element.hasText .element.hasText .children { margin-left: 0px; border-left: 0px; padding: 0px; display: inline; }
.xonomy.nerd .element.hasText .children .textnode { padding-left: 0px; display: inline; }
.xonomy.nerd .element.oneliner .children .textnode .dots { display: none !important; }
/*One-liner layout*/
.xonomy.nerd .element.oneliner .element { padding-left: 0px; display: inline; }
.xonomy.nerd .element.oneliner .children { margin-left: 0px; border-left: 0px; padding: 0px; display: inline; }
.xonomy.nerd .element.oneliner .element.hasText .children { margin-left: 0px; border-left: 0px; padding: 0px; display: inline; }
.xonomy.nerd .element.oneliner .children .textnode { padding-left: 0px; display: inline; }
/*Empty text nodes: */
.xonomy.nerd .element .children .textnode.empty { min-height: 1em; }
.xonomy.nerd .element .children .textnode.empty .value { cursor: pointer; }
.xonomy.nerd .element .children .textnode.empty .value > .insertionPoint { display: inline; padding: 0px 2px; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; }
.xonomy.nerd .element .children .textnode.empty .value > .insertionPoint > .inside { border-left: 1px solid #dddddd; }
.xonomy.nerd .element .children .textnode.empty:first-child:last-child .value > .dots { display: inline; padding-left: 2em;}
.xonomy.nerd .element .children .textnode.empty .value:hover { background-color: #f2f2f2; }
.xonomy.nerd .element .children .textnode.empty .value:focus { background-color: #f2f2f2; }
/*Plus-minus collapsor*/
.xonomy.nerd .element > .connector > .plusminus { background-image: url(minus.gif); width: 9px; height: 9px; position: absolute; top: -5px; left: -5px; cursor: pointer; }
.xonomy.nerd .element.hasText .element.oneliner .connector .plusminus { top: 4px; left: 4px; }
/*Collapsed elements*/
.xonomy.nerd .element.collapsed > .connector > .plusminus { background-image: url(plus.gif); }
.xonomy.nerd .element.collapsed > .children { display: none !important; }
.xonomy.nerd .element.hasText .element.oneliner.collapsed > .tag { display: none; }
/*The "collapsoid" (= rectangle that hides collapsed stuff)*/
.xonomy.nerd .element > .childrenCollapsed { display: none; border: 1px solid #cccccc; color: #999999; border-radius: 2px; margin: 0px 2px; padding: 0px 5px 0px 5px; cursor: pointer; font-size: 1rem; }
.xonomy.nerd .element.collapsed > .childrenCollapsed { display: inline; }
.xonomy.nerd .element > .childrenCollapsed:hover { background-color: #f4f4f4; }
/*Elements with no children*/
.xonomy.nerd .element.noChildren > .connector > .plusminus { display: none; }
.xonomy.nerd .element.noChildren > .children { display: none; }
.xonomy.nerd .element.noChildren > .tag.closing { display: none; }
.xonomy.nerd .element.noChildren > .tag.opening > .punc.slash { display: inline }
.xonomy.nerd .element.noChildren > .childrenCollapsed { display: none; }
.xonomy.nerd .element.uncollapsible > .connector > .plusminus { display: none; }
.xonomy.nerd .element.uncollapsible > .childrenCollapsed { display: none; }
.xonomy.nerd .element.hasText .element.uncollapsible .connector { display: none; }
/*Drag handle*/
.xonomy.nerd .connector > .draghandle { display: none; width: 9px; height: 13px; background-image: url(draghandle.gif); position: absolute; top: -7px; right: 2px; cursor: move; }
.xonomy.nerd .element.draggable > .connector > .draghandle { display: block; }
.xonomy.nerd .element.readonly .element .draghandle { display: none; }
.xonomy.nerd .element.hasText .element .connector .draghandle { display: none; }
/*Classes involved in dragging and dropping*/
.xonomy.nerd .dragging { color: #cccccc !important; }
.xonomy.nerd .dragging * { color: #cccccc !important; }
.xonomy.nerd .dragging .draghandle { opacity: 0.5; }
.xonomy.nerd .elementDropper { display: block; margin-top: 0px; margin-bottom: 0px; height: 0px; position: relative; }
.xonomy.nerd .elementDropper > .inside { display: block; height: 9px; width: 9px; border: 1px solid #ffffff; background-color: #dddddd; position: absolute; top: -8px; left: -6px; z-index: 10; }
.xonomy.nerd .elementDropper:first-child > .inside { top: -1px; }
.xonomy.nerd .elementDropper:only-child > .inside { top: -5px; }
.xonomy.nerd .activeDropper > .inside { background-color: #888888; }
/*Chewed selectable text*/
.xonomy.nerd .element > .children > .textnode .char { }
.xonomy.nerd .element > .children > .textnode .word { white-space: nowrap; }
.xonomy.nerd .hasInlineMenu > .children > .textnode .char > .selector { position: absolute; left: 0px; right: 0px; bottom: -2px; height: 1px; background-color: #eeeeee; z-index: 2; }
.xonomy.nerd .hasInlineMenu > .children > .textnode .char > .selector > .inside { position: absolute; left: 0px; right: 0px; bottom: -2px; top: -3px; background-color: transparent; }
.xonomy.nerd .hasInlineMenu > .children > .textnode .char > .selector > .inside:hover { background-color: #cccccc; left: -1px; right: -1px; }
.xonomy.nerd .element > .children > .textnode .char.on { background-color: #ffff99; }
.xonomy.nerd .element > .children > .textnode .char.on > .selector { position: absolute; left: 0px; right: 0px; z-index: 2; background-color: #00cc00; xbackground-color: #669acc; height: 3px; bottom: -3px; }
.xonomy.nerd .element > .children > .textnode .char.on > .selector > .inside { position: absolute; left: 0px; right: 0px; top: -2px; bottom: -1px; background-color: transparent; }
.xonomy.nerd span.space { font-weight: bold; color: #00cc00; }
/*The exclamation mark that lets you know if there is a warning attached to an element or attribute*/
.xonomy.nerd .warner { display: none; width: 16px; margin: 0px 1px 0px 1px; }
.xonomy.nerd .warner .inside { position: absolute; bottom: -4px; left: 0px; background-image: url(exclamation.png); background-position: 0px 0px; width: 16px; height: 16px; cursor: pointer; }
.xonomy.nerd .element.invalid > .tag > .warner { display: inline-block; }
.xonomy.nerd .attribute.invalid > .warner { display: inline-block; }
/*Caption beside attribute values and elements*/
.xonomy.nerd .inlinecaption { font-family: Verdana, sans-serif; font-size: 0.8rem; color: #999999; font-weight: normal;
-webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; cursor: text !important;
}
/*Pop-up box*/
#xonomyBubble.nerd { display: none; position: absolute; z-index: 10; min-width: 100px; }
#xonomyBubble.nerd > div.inside { box-shadow: 0px 0px 5px #99cbff; border: 1px solid #333333; background-color: #dddddd; border-radius: 2px; margin-top: 8px; }
#xonomyBubble.nerd > div.inside > #xonomyBubbleContent { font-family: Verdana, sans-serif; font-size: 0.8rem; color: #666666; margin: 5px; padding: 5px; background-color: #ffffff; border-radius: 2px; }
#xonomyBubble.nerd span.punc { color: #669acc; }
/*When the pop-up box functions as menu or picker*/
#xonomyBubble.nerd #xonomyBubbleContent div.menu { margin: -5px; max-height: 250px; overflow-y: auto; white-space: nowrap; }
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem { padding: 8px 20px 7px 10px; border-top: 1px solid #dddddd; cursor: pointer; margin-top: -1px; background-color: #ffffff;}
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem div.menuLabel {margin: -8px -20px -7px -10px; padding: 8px 20px 7px 30px; background-color: #ffffff; background-image: url(plus.gif); background-position: 10px center; background-repeat: no-repeat; font-weight: bold;}
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem div.menuLabel:hover {background-color: #ffffcc;}
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem span.icon {display: inline-block; margin: -8px 0px -7px 0px; width: 18px;}
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem span.icon img {max-height: 15px; max-width: 20px; display: inline-block;}
#xonomyBubble.nerd #xonomyBubbleContent div.submenu { margin: 0px -20px -7px -10px; display: none; }
#xonomyBubble.nerd #xonomyBubbleContent div.submenu div.menuItem { padding-left: 30px; }
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem.expanded div.menuLabel {background-image: url(minus.gif);}
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem.expanded > div.menuLabel {margin-bottom: 0px; padding-bottom: 7px;}
#xonomyBubble.nerd #xonomyBubbleContent span.techno { font-family: monospace; font-size: 0.9rem; }
#xonomyBubble.nerd #xonomyBubbleContent span.techno span.punc {color: #669acc; }
#xonomyBubble.nerd #xonomyBubbleContent span.techno span.atName { color: #ff4455; }
#xonomyBubble.nerd #xonomyBubbleContent span.techno span.atValue { color: #666666; }
#xonomyBubble.nerd #xonomyBubbleContent span.techno span.elName { color: #cc3333; }
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem.techno { padding-top: 6px; padding-bottom: 6px; font-family: monospace; font-size: 0.9rem; }
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem.techno span.explainer { font-family: Verdana, sans-serif; font-size: 0.8rem; color: #999999; font-weight: normal; margin-left: 3px; }
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem.current { x-background-color: #ffffdd; }
#xonomyBubble.nerd #xonomyBubbleContent div.menuItem:hover { background-color: #ffffcc; }
/*When the pop-up box takes input from the user*/
#xonomyBubble.nerd #xonomyBubbleContent form { margin: -5px; padding: 5px; background-color: #eeeeee; }
#xonomyBubble.nerd #xonomyBubbleContent form.overmenu { margin-bottom: 5px; }
#xonomyBubble.nerd #xonomyBubbleContent form.undermenu { margin-top: 5px; }
#xonomyBubble.nerd #xonomyBubbleContent div.submitline { text-align: right; margin-top: 5px; }
#xonomyBubble.nerd #xonomyBubbleContent input { border-width: 1px; padding: 3px; color: #333333; font: inherit; }
#xonomyBubble.nerd #xonomyBubbleContent textarea { border-width: 1px; padding: 3px; color: #333333; font: inherit; }
#xonomyBubble.nerd #xonomyBubbleContent input.textbox { font-family: monospace; font-size: 1rem; width: 250px; border: 1px solid #dddddd; }
#xonomyBubble.nerd #xonomyBubbleContent textarea.textbox { font-family: monospace; font-size: 1rem; width: 400px; height: 100px; border: 1px solid #dddddd; }
/*When the pop-up is a list of warnings*/
#xonomyBubble.nerd #xonomyBubbleContent .warning { padding: 5px 10px; }
#xonomyBubble.nerd button.buttonSearch { background-image: url(magnifier.png); background-position: center center; background-repeat: no-repeat; padding: 2px 15px; border-width: 1px; border-radius: 2px; }
#xonomyBubble.nerd button.buttonCreate { background-image: url(add.png); background-position: center center; background-repeat: no-repeat; padding: 2px 15px; border-width: 1px; border-radius: 2px; }
/*LAIC MODE*/
.xonomy.laic { font-family: Verdana, sans-serif; font-size: 0.85rem; cursor: default; background-color: #ffffff;
-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;
line-height: 1.5em; padding-left: 5px; }
.xonomy.laic * { position: relative; }
.xonomy.laic .element .punc { display: none; }
.xonomy.laic .element { display: block; margin: 5px 0px; padding: 5px 0px 0px 0px; }
.xonomy.laic .element > .children { padding-left: 40px; }
.xonomy.laic .element > .children > .textnode { display: block; margin: 10px 0px 0px 0px; }
.xonomy.laic .element.oneliner > .children > .textnode { margin-top: 0px; }
.xonomy.laic .element > .children > .textnode > .value { display: inline-block; font-family: monospace; background-color: #ffffff; padding: 4px 0px; border-bottom: 1px solid #999999; cursor: pointer; min-width: 2em; }
.xonomy.laic .element.oneliner > .children > .textnode > .value { text-align: center; }
.xonomy.laic .element > .tag.closing { display: none; }
.xonomy.laic .element > .tag { display: block; padding: 5px 10px; background-color: #eeeeee; box-shadow: 0px 0px 2px #999999; z-index: 9;}
.xonomy.laic .element > .tag > .name {font-weight: bold; color: #315696; cursor: pointer;}
.xonomy.laic .element > .tag.opening > .attributes > .attribute { margin-left: 0.75em; border-left: 1px solid #cccccc; padding-left: 0.75em; display: inline-block; }
.xonomy.laic .element > .tag.opening > .attributes > .attribute > .name { font-weight: bold; color: #6385bf; cursor: pointer; }
.xonomy.laic .element > .tag.opening > .attributes > .attribute > .valueContainer { display: inline; padding: 2px 5px; border-bottom: 1px solid #999999; margin-left: 10px; font-family: monospace; font-size: 0.85rem; cursor: pointer; }
.xonomy.laic .element > .children > .textnode > .value > .insertionPoint { display: none; }
.xonomy.laic .element > .children > .textnode > .value > .dots { display: none; }
/*oneliner*/
.xonomy.laic .element.oneliner {padding: 5px 0px 0px 0px; }
.xonomy.laic .element.oneliner > .tag.opening { display: inline-block; min-width: 25%; margin-right: 1em; padding: 2px 10px; line-height: 2em;}
.xonomy.laic .element.oneliner > .children { display: inline-block; padding: 0px; margin: 0px; }
.xonomy.laic .element.oneliner > .children > .textnode { display: inline-block; }
.xonomy.laic .element.oneliner > .children > .textnode > .value { display: inline-block; }
.xonomy.laic .element.oneliner.hasInlineMenu { }
.xonomy.laic .element.oneliner.hasInlineMenu > .children { padding: 0px 0px; line-height: inherit;}
.xonomy.laic .element.oneliner.hasInlineMenu > .children > .textnode { }
.xonomy.laic .element.oneliner.hasInlineMenu > .children > .textnode > .value { }
/*Plus-minus collapsor*/
.xonomy.laic .element > .connector > .plusminus { background-image: url(minus.gif); background-position: center center; background-repeat: no-repeat; width: 1rem; height: 1rem; background-color: #dddddd; position: absolute; top: 20px; left: -30px; cursor: pointer; }
.xonomy.laic .element.oneliner > .connector > .plusminus { top: 1px; }
.xonomy.laic .element.hasInlineMenu .element .connector > .plusminus { position: relative; top: auto; left: auto; display: inline-block; margin-right: 3px; }
/*Collapsed elements*/
.xonomy.laic .element.collapsed > .connector > .plusminus { background-image: url(plus.gif); }
.xonomy.laic .element.collapsed > .children { display: none !important; }
.xonomy.laic .element.hasText .element.oneliner.collapsed > .tag { display: none; }
/*The "collapsoid" (= rectangle that hides collapsed stuff)*/
.xonomy.laic .element > .childrenCollapsed { display: none; border: 1px solid #cccccc; color: #999999; padding: 1px 5px; cursor: pointer; font-family: monospace; background-color: #ffffff; font-size: 0.85rem; z-index: 9; }
.xonomy.laic .element.collapsed > .childrenCollapsed { display: block; position: absolute; top: 8px; right: 3px; }
.xonomy.laic .element.collapsed > .childrenCollapsed:hover { background-color: #f4f4f4; }
/*Caption beside attribute values and elements*/
.xonomy.laic .inlinecaption {-webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; cursor: text !important;}
.xonomy.laic .attribute > .inlinecaption { font-family: Verdana, sans-serif; font-size: 0.75rem; color: #999999; font-weight: normal; margin-left: 5px; margin-right: 4px; }
.xonomy.laic .element > .inlinecaption { font-family: Verdana, sans-serif; font-size: 0.75rem; color: #999999; font-weight: normal; margin-left: 50px; margin-right: 0px; margin-top: 5px; display: block; }
.xonomy.laic .element.oneliner > .inlinecaption { display: inline; margin-left: 5px; margin-right: 4px; }
.xonomy.laic .element.collapsed > .inlinecaption { display: none; }
/*Elements with no children*/
.xonomy.laic .element.noChildren > .connector > .plusminus { display: none; }
.xonomy.laic .element.noChildren > .children { display: none; }
.xonomy.laic .element.noChildren > .childrenCollapsed { display: none; }
/*Elements that cannot be collapsed*/
.xonomy.laic .element.uncollapsible {padding-left: 0px !important; }
.xonomy.laic .element.uncollapsible > .connector > .plusminus { display: none !important; }
.xonomy.laic .element.uncollapsible > .childrenCollapsed { display: none !important; }
.xonomy.laic .element.hasText .element {border: 0px; }
.xonomy.laic .element.hasInlineMenu > .children {background-color: #ffffff; padding: 7px 10px 0px 40px; line-height: 2.5em; }
.xonomy.laic .element.hasInlineMenu .element {display: inline; margin-top: 0px;}
.xonomy.laic .element.hasInlineMenu .element > .tag.opening {display: inline; background-color: #eeeeee; border-radius: 20px 0px 0px 20px; margin: 0px 2px 0px 2px; padding: 2px 0px 2px 5px; }
.xonomy.laic .element.hasInlineMenu .element > .tag.closing {display: inline; background-color: #eeeeee; border-radius: 0px 20px 20px 0px; margin: 0px 2px 0px 2px; padding: 2px 5px 2px 0px;}
.xonomy.laic .element.hasInlineMenu .element > .tag.opening > .name {margin-right: 5px;}
.xonomy.laic .element.hasInlineMenu .element > .tag.closing > .name {margin-left: 5px;}
.xonomy.laic .element.hasInlineMenu .element > .tag.opening > .attributes > .attribute { margin-left: 0.25em; padding-left: 0.25em; padding-right: 0.5em !important; }
.xonomy.laic .element.hasInlineMenu .element > .children {display: inline; }
.xonomy.laic .element.hasInlineMenu .textnode {display: inline; border: 0px; margin: 0px; padding: 0px; }
.xonomy.laic .element.hasInlineMenu .textnode .value {display: inline; xborder: 0px; padding: 4px 0px; }
.xonomy.laic .element.hasInlineMenu .element .textnode .value {display: inline; xborder: 0px; padding: 6px 0px; }
.xonomy