mirror of
https://github.com/agdamsbo/REDCapCAST.git
synced 2024-11-21 13:00:23 +01:00
page, test and coverage
This commit is contained in:
parent
9f68e27f5a
commit
4f7af115f4
@ -3,3 +3,7 @@
|
||||
^data-raw$
|
||||
^test-data$
|
||||
^troubleshooting\.R$
|
||||
^setup\.R$
|
||||
^docs$
|
||||
^\.github$
|
||||
^codecov\.yml$
|
||||
|
1
.github/.gitignore
vendored
Normal file
1
.github/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.html
|
49
.github/workflows/R-CMD-check.yaml
vendored
Normal file
49
.github/workflows/R-CMD-check.yaml
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
|
||||
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
pull_request:
|
||||
branches: [main, master]
|
||||
|
||||
name: R-CMD-check
|
||||
|
||||
jobs:
|
||||
R-CMD-check:
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
|
||||
name: ${{ matrix.config.os }} (${{ matrix.config.r }})
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config:
|
||||
- {os: macos-latest, r: 'release'}
|
||||
- {os: windows-latest, r: 'release'}
|
||||
- {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'}
|
||||
- {os: ubuntu-latest, r: 'release'}
|
||||
- {os: ubuntu-latest, r: 'oldrel-1'}
|
||||
|
||||
env:
|
||||
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
||||
R_KEEP_PKG_SOURCE: yes
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: r-lib/actions/setup-pandoc@v2
|
||||
|
||||
- uses: r-lib/actions/setup-r@v2
|
||||
with:
|
||||
r-version: ${{ matrix.config.r }}
|
||||
http-user-agent: ${{ matrix.config.http-user-agent }}
|
||||
use-public-rspm: true
|
||||
|
||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||
with:
|
||||
extra-packages: any::rcmdcheck
|
||||
needs: check
|
||||
|
||||
- uses: r-lib/actions/check-r-package@v2
|
||||
with:
|
||||
upload-snapshots: true
|
50
.github/workflows/test-coverage.yaml
vendored
Normal file
50
.github/workflows/test-coverage.yaml
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
|
||||
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
pull_request:
|
||||
branches: [main, master]
|
||||
|
||||
name: test-coverage
|
||||
|
||||
jobs:
|
||||
test-coverage:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: r-lib/actions/setup-r@v2
|
||||
with:
|
||||
use-public-rspm: true
|
||||
|
||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||
with:
|
||||
extra-packages: any::covr
|
||||
needs: coverage
|
||||
|
||||
- name: Test coverage
|
||||
run: |
|
||||
covr::codecov(
|
||||
quiet = FALSE,
|
||||
clean = FALSE,
|
||||
install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package")
|
||||
)
|
||||
shell: Rscript {0}
|
||||
|
||||
- name: Show testthat output
|
||||
if: always()
|
||||
run: |
|
||||
## --------------------------------------------------------------------
|
||||
find ${{ runner.temp }}/package -name 'testthat.Rout*' -exec cat '{}' \; || true
|
||||
shell: bash
|
||||
|
||||
- name: Upload test results
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: coverage-test-failures
|
||||
path: ${{ runner.temp }}/package
|
11
DESCRIPTION
11
DESCRIPTION
@ -1,6 +1,6 @@
|
||||
Package: REDCapCAST
|
||||
Title: REDCap Castellated data handling
|
||||
Version: 23.3.1
|
||||
Version: 23.3.2
|
||||
Authors@R: c(
|
||||
person("Paul", "Egeler", email = "paul.egeler@spectrumhealth.org", role = c("aut")),
|
||||
person("Andreas Gammelgaard", "Damsbo", email = "agdamsbo@clin.au.dk", role = c("cre", "ctb","cph"),
|
||||
@ -19,13 +19,15 @@ Description: This package is based on REDCapRITS by Paul Egeler and Spectrum Hea
|
||||
4) procedures for data integration and interoperability with external sources
|
||||
(<doi:10.1016/j.jbi.2008.08.010>; <doi:10.1016/j.jbi.2019.103208>).
|
||||
Depends: R (>= 3.4.0)
|
||||
Suggests:
|
||||
RCurl,
|
||||
Suggests:
|
||||
spelling,
|
||||
RCurl,
|
||||
httr,
|
||||
jsonlite,
|
||||
testthat,
|
||||
Hmisc,
|
||||
readr
|
||||
readr,
|
||||
covr
|
||||
License: GPL-3
|
||||
Encoding: UTF-8
|
||||
LazyData: true
|
||||
@ -43,3 +45,4 @@ Collate:
|
||||
'REDCap_split.r'
|
||||
'read_redcap_tables.R'
|
||||
'redcap_wider.R'
|
||||
Language: en-US
|
||||
|
6
NEWS.md
6
NEWS.md
@ -1,3 +1,9 @@
|
||||
# REDCapCAST 23.3.2
|
||||
|
||||
### Documentation:
|
||||
|
||||
* Page added. Vignettes to follow.
|
||||
|
||||
# REDCapCAST 23.3.1
|
||||
|
||||
### New name: REDCapCAST
|
||||
|
@ -6,7 +6,6 @@
|
||||
#' @param vars_in_data Vector of variable names in the dataset
|
||||
#' @return A dataframe containing metadata for the variables in the dataset
|
||||
#' @export
|
||||
#' @examples
|
||||
#'
|
||||
focused_metadata <- function(metadata, vars_in_data) {
|
||||
|
||||
@ -99,7 +98,6 @@ focused_metadata <- function(metadata, vars_in_data) {
|
||||
#'
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#'
|
||||
sanitize_split <- function(l,
|
||||
generic.names = c(
|
||||
@ -128,8 +126,6 @@ sanitize_split <- function(l,
|
||||
#'
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#'
|
||||
#'
|
||||
match_fields_to_form <- function(metadata, vars_in_data) {
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
<!-- badges: start -->
|
||||
[![R-CMD-check](https://github.com/agdamsbo/REDCapCAST/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/agdamsbo/REDCapCAST/actions/workflows/R-CMD-check.yaml)
|
||||
[![Codecov test coverage](https://codecov.io/gh/agdamsbo/REDCapCAST/branch/master/graph/badge.svg)](https://app.codecov.io/gh/agdamsbo/REDCapCAST?branch=master)
|
||||
<!-- badges: end -->
|
||||
|
||||
# REDCapCAST
|
||||
REDCap Castellated data handling when using repeated instruments.
|
||||
|
||||
|
14
codecov.yml
Normal file
14
codecov.yml
Normal file
@ -0,0 +1,14 @@
|
||||
comment: false
|
||||
|
||||
coverage:
|
||||
status:
|
||||
project:
|
||||
default:
|
||||
target: auto
|
||||
threshold: 1%
|
||||
informational: true
|
||||
patch:
|
||||
default:
|
||||
target: auto
|
||||
threshold: 1%
|
||||
informational: true
|
60
docs/bootstrap-toc.css
vendored
Normal file
60
docs/bootstrap-toc.css
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
/*!
|
||||
* Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/)
|
||||
* Copyright 2015 Aidan Feldman
|
||||
* Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */
|
||||
|
||||
/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */
|
||||
|
||||
/* All levels of nav */
|
||||
nav[data-toggle='toc'] .nav > li > a {
|
||||
display: block;
|
||||
padding: 4px 20px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: #767676;
|
||||
}
|
||||
nav[data-toggle='toc'] .nav > li > a:hover,
|
||||
nav[data-toggle='toc'] .nav > li > a:focus {
|
||||
padding-left: 19px;
|
||||
color: #563d7c;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
border-left: 1px solid #563d7c;
|
||||
}
|
||||
nav[data-toggle='toc'] .nav > .active > a,
|
||||
nav[data-toggle='toc'] .nav > .active:hover > a,
|
||||
nav[data-toggle='toc'] .nav > .active:focus > a {
|
||||
padding-left: 18px;
|
||||
font-weight: bold;
|
||||
color: #563d7c;
|
||||
background-color: transparent;
|
||||
border-left: 2px solid #563d7c;
|
||||
}
|
||||
|
||||
/* Nav: second level (shown on .active) */
|
||||
nav[data-toggle='toc'] .nav .nav {
|
||||
display: none; /* Hide by default, but at >768px, show it */
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
nav[data-toggle='toc'] .nav .nav > li > a {
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
padding-left: 30px;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
}
|
||||
nav[data-toggle='toc'] .nav .nav > li > a:hover,
|
||||
nav[data-toggle='toc'] .nav .nav > li > a:focus {
|
||||
padding-left: 29px;
|
||||
}
|
||||
nav[data-toggle='toc'] .nav .nav > .active > a,
|
||||
nav[data-toggle='toc'] .nav .nav > .active:hover > a,
|
||||
nav[data-toggle='toc'] .nav .nav > .active:focus > a {
|
||||
padding-left: 28px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */
|
||||
nav[data-toggle='toc'] .nav > .active > ul {
|
||||
display: block;
|
||||
}
|
159
docs/bootstrap-toc.js
vendored
Normal file
159
docs/bootstrap-toc.js
vendored
Normal file
@ -0,0 +1,159 @@
|
||||
/*!
|
||||
* Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/)
|
||||
* Copyright 2015 Aidan Feldman
|
||||
* Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
window.Toc = {
|
||||
helpers: {
|
||||
// return all matching elements in the set, or their descendants
|
||||
findOrFilter: function($el, selector) {
|
||||
// http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/
|
||||
// http://stackoverflow.com/a/12731439/358804
|
||||
var $descendants = $el.find(selector);
|
||||
return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])');
|
||||
},
|
||||
|
||||
generateUniqueIdBase: function(el) {
|
||||
var text = $(el).text();
|
||||
var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-');
|
||||
return anchor || el.tagName.toLowerCase();
|
||||
},
|
||||
|
||||
generateUniqueId: function(el) {
|
||||
var anchorBase = this.generateUniqueIdBase(el);
|
||||
for (var i = 0; ; i++) {
|
||||
var anchor = anchorBase;
|
||||
if (i > 0) {
|
||||
// add suffix
|
||||
anchor += '-' + i;
|
||||
}
|
||||
// check if ID already exists
|
||||
if (!document.getElementById(anchor)) {
|
||||
return anchor;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
generateAnchor: function(el) {
|
||||
if (el.id) {
|
||||
return el.id;
|
||||
} else {
|
||||
var anchor = this.generateUniqueId(el);
|
||||
el.id = anchor;
|
||||
return anchor;
|
||||
}
|
||||
},
|
||||
|
||||
createNavList: function() {
|
||||
return $('<ul class="nav"></ul>');
|
||||
},
|
||||
|
||||
createChildNavList: function($parent) {
|
||||
var $childList = this.createNavList();
|
||||
$parent.append($childList);
|
||||
return $childList;
|
||||
},
|
||||
|
||||
generateNavEl: function(anchor, text) {
|
||||
var $a = $('<a></a>');
|
||||
$a.attr('href', '#' + anchor);
|
||||
$a.text(text);
|
||||
var $li = $('<li></li>');
|
||||
$li.append($a);
|
||||
return $li;
|
||||
},
|
||||
|
||||
generateNavItem: function(headingEl) {
|
||||
var anchor = this.generateAnchor(headingEl);
|
||||
var $heading = $(headingEl);
|
||||
var text = $heading.data('toc-text') || $heading.text();
|
||||
return this.generateNavEl(anchor, text);
|
||||
},
|
||||
|
||||
// Find the first heading level (`<h1>`, then `<h2>`, etc.) that has more than one element. Defaults to 1 (for `<h1>`).
|
||||
getTopLevel: function($scope) {
|
||||
for (var i = 1; i <= 6; i++) {
|
||||
var $headings = this.findOrFilter($scope, 'h' + i);
|
||||
if ($headings.length > 1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
},
|
||||
|
||||
// returns the elements for the top level, and the next below it
|
||||
getHeadings: function($scope, topLevel) {
|
||||
var topSelector = 'h' + topLevel;
|
||||
|
||||
var secondaryLevel = topLevel + 1;
|
||||
var secondarySelector = 'h' + secondaryLevel;
|
||||
|
||||
return this.findOrFilter($scope, topSelector + ',' + secondarySelector);
|
||||
},
|
||||
|
||||
getNavLevel: function(el) {
|
||||
return parseInt(el.tagName.charAt(1), 10);
|
||||
},
|
||||
|
||||
populateNav: function($topContext, topLevel, $headings) {
|
||||
var $context = $topContext;
|
||||
var $prevNav;
|
||||
|
||||
var helpers = this;
|
||||
$headings.each(function(i, el) {
|
||||
var $newNav = helpers.generateNavItem(el);
|
||||
var navLevel = helpers.getNavLevel(el);
|
||||
|
||||
// determine the proper $context
|
||||
if (navLevel === topLevel) {
|
||||
// use top level
|
||||
$context = $topContext;
|
||||
} else if ($prevNav && $context === $topContext) {
|
||||
// create a new level of the tree and switch to it
|
||||
$context = helpers.createChildNavList($prevNav);
|
||||
} // else use the current $context
|
||||
|
||||
$context.append($newNav);
|
||||
|
||||
$prevNav = $newNav;
|
||||
});
|
||||
},
|
||||
|
||||
parseOps: function(arg) {
|
||||
var opts;
|
||||
if (arg.jquery) {
|
||||
opts = {
|
||||
$nav: arg
|
||||
};
|
||||
} else {
|
||||
opts = arg;
|
||||
}
|
||||
opts.$scope = opts.$scope || $(document.body);
|
||||
return opts;
|
||||
}
|
||||
},
|
||||
|
||||
// accepts a jQuery object, or an options object
|
||||
init: function(opts) {
|
||||
opts = this.helpers.parseOps(opts);
|
||||
|
||||
// ensure that the data attribute is in place for styling
|
||||
opts.$nav.attr('data-toggle', 'toc');
|
||||
|
||||
var $topContext = this.helpers.createChildNavList(opts.$nav);
|
||||
var topLevel = this.helpers.getTopLevel(opts.$scope);
|
||||
var $headings = this.helpers.getHeadings(opts.$scope, topLevel);
|
||||
this.helpers.populateNav($topContext, topLevel, $headings);
|
||||
}
|
||||
};
|
||||
|
||||
$(function() {
|
||||
$('nav[data-toggle="toc"]').each(function(i, el) {
|
||||
var $nav = $(el);
|
||||
Toc.init($nav);
|
||||
});
|
||||
});
|
||||
})();
|
148
docs/docsearch.css
Normal file
148
docs/docsearch.css
Normal file
File diff suppressed because one or more lines are too long
85
docs/docsearch.js
Normal file
85
docs/docsearch.js
Normal file
@ -0,0 +1,85 @@
|
||||
$(function() {
|
||||
|
||||
// register a handler to move the focus to the search bar
|
||||
// upon pressing shift + "/" (i.e. "?")
|
||||
$(document).on('keydown', function(e) {
|
||||
if (e.shiftKey && e.keyCode == 191) {
|
||||
e.preventDefault();
|
||||
$("#search-input").focus();
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
// do keyword highlighting
|
||||
/* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */
|
||||
var mark = function() {
|
||||
|
||||
var referrer = document.URL ;
|
||||
var paramKey = "q" ;
|
||||
|
||||
if (referrer.indexOf("?") !== -1) {
|
||||
var qs = referrer.substr(referrer.indexOf('?') + 1);
|
||||
var qs_noanchor = qs.split('#')[0];
|
||||
var qsa = qs_noanchor.split('&');
|
||||
var keyword = "";
|
||||
|
||||
for (var i = 0; i < qsa.length; i++) {
|
||||
var currentParam = qsa[i].split('=');
|
||||
|
||||
if (currentParam.length !== 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (currentParam[0] == paramKey) {
|
||||
keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20"));
|
||||
}
|
||||
}
|
||||
|
||||
if (keyword !== "") {
|
||||
$(".contents").unmark({
|
||||
done: function() {
|
||||
$(".contents").mark(keyword);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
mark();
|
||||
});
|
||||
});
|
||||
|
||||
/* Search term highlighting ------------------------------*/
|
||||
|
||||
function matchedWords(hit) {
|
||||
var words = [];
|
||||
|
||||
var hierarchy = hit._highlightResult.hierarchy;
|
||||
// loop to fetch from lvl0, lvl1, etc.
|
||||
for (var idx in hierarchy) {
|
||||
words = words.concat(hierarchy[idx].matchedWords);
|
||||
}
|
||||
|
||||
var content = hit._highlightResult.content;
|
||||
if (content) {
|
||||
words = words.concat(content.matchedWords);
|
||||
}
|
||||
|
||||
// return unique words
|
||||
var words_uniq = [...new Set(words)];
|
||||
return words_uniq;
|
||||
}
|
||||
|
||||
function updateHitURL(hit) {
|
||||
|
||||
var words = matchedWords(hit);
|
||||
var url = "";
|
||||
|
||||
if (hit.anchor) {
|
||||
url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor;
|
||||
} else {
|
||||
url = hit.url + '?q=' + escape(words.join(" "));
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
12
docs/link.svg
Normal file
12
docs/link.svg
Normal file
@ -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 |
384
docs/pkgdown.css
Normal file
384
docs/pkgdown.css
Normal file
@ -0,0 +1,384 @@
|
||||
/* Sticky footer */
|
||||
|
||||
/**
|
||||
* Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/
|
||||
* Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css
|
||||
*
|
||||
* .Site -> body > .container
|
||||
* .Site-content -> body > .container .row
|
||||
* .footer -> footer
|
||||
*
|
||||
* Key idea seems to be to ensure that .container and __all its parents__
|
||||
* have height set to 100%
|
||||
*
|
||||
*/
|
||||
|
||||
html, body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
body > .container {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
body > .container .row {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 45px;
|
||||
padding: 35px 0 36px;
|
||||
border-top: 1px solid #e5e5e5;
|
||||
color: #666;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
footer p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
footer div {
|
||||
flex: 1;
|
||||
}
|
||||
footer .pkgdown {
|
||||
text-align: right;
|
||||
}
|
||||
footer p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
img.icon {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* Ensure in-page images don't run outside their container */
|
||||
.contents img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* Fix bug in bootstrap (only seen in firefox) */
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* Typographic tweaking ---------------------------------*/
|
||||
|
||||
.contents .page-header {
|
||||
margin-top: calc(-60px + 1em);
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: 3em;
|
||||
}
|
||||
|
||||
/* Section anchors ---------------------------------*/
|
||||
|
||||
a.anchor {
|
||||
display: none;
|
||||
margin-left: 5px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
|
||||
background-image: url(./link.svg);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 20px 20px;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
h1:hover .anchor,
|
||||
h2:hover .anchor,
|
||||
h3:hover .anchor,
|
||||
h4:hover .anchor,
|
||||
h5:hover .anchor,
|
||||
h6:hover .anchor {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/* Fixes for fixed navbar --------------------------*/
|
||||
|
||||
.contents h1, .contents h2, .contents h3, .contents h4 {
|
||||
padding-top: 60px;
|
||||
margin-top: -40px;
|
||||
}
|
||||
|
||||
/* Navbar submenu --------------------------*/
|
||||
|
||||
.dropdown-submenu {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dropdown-submenu>.dropdown-menu {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
|
||||
.dropdown-submenu:hover>.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.dropdown-submenu>a:after {
|
||||
display: block;
|
||||
content: " ";
|
||||
float: right;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-color: transparent;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 5px;
|
||||
border-left-color: #cccccc;
|
||||
margin-top: 5px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
|
||||
.dropdown-submenu:hover>a:after {
|
||||
border-left-color: #ffffff;
|
||||
}
|
||||
|
||||
.dropdown-submenu.pull-left {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.dropdown-submenu.pull-left>.dropdown-menu {
|
||||
left: -100%;
|
||||
margin-left: 10px;
|
||||
border-radius: 6px 0 6px 6px;
|
||||
}
|
||||
|
||||
/* Sidebar --------------------------*/
|
||||
|
||||
#pkgdown-sidebar {
|
||||
margin-top: 30px;
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 70px;
|
||||
}
|
||||
|
||||
#pkgdown-sidebar h2 {
|
||||
font-size: 1.5em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
#pkgdown-sidebar h2:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#pkgdown-sidebar .list-unstyled li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* bootstrap-toc tweaks ------------------------------------------------------*/
|
||||
|
||||
/* All levels of nav */
|
||||
|
||||
nav[data-toggle='toc'] .nav > li > a {
|
||||
padding: 4px 20px 4px 6px;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 400;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
nav[data-toggle='toc'] .nav > li > a:hover,
|
||||
nav[data-toggle='toc'] .nav > li > a:focus {
|
||||
padding-left: 5px;
|
||||
color: inherit;
|
||||
border-left: 1px solid #878787;
|
||||
}
|
||||
|
||||
nav[data-toggle='toc'] .nav > .active > a,
|
||||
nav[data-toggle='toc'] .nav > .active:hover > a,
|
||||
nav[data-toggle='toc'] .nav > .active:focus > a {
|
||||
padding-left: 5px;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 400;
|
||||
color: inherit;
|
||||
border-left: 2px solid #878787;
|
||||
}
|
||||
|
||||
/* Nav: second level (shown on .active) */
|
||||
|
||||
nav[data-toggle='toc'] .nav .nav {
|
||||
display: none; /* Hide by default, but at >768px, show it */
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
nav[data-toggle='toc'] .nav .nav > li > a {
|
||||
padding-left: 16px;
|
||||
font-size: 1.35rem;
|
||||
}
|
||||
|
||||
nav[data-toggle='toc'] .nav .nav > li > a:hover,
|
||||
nav[data-toggle='toc'] .nav .nav > li > a:focus {
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
nav[data-toggle='toc'] .nav .nav > .active > a,
|
||||
nav[data-toggle='toc'] .nav .nav > .active:hover > a,
|
||||
nav[data-toggle='toc'] .nav .nav > .active:focus > a {
|
||||
padding-left: 15px;
|
||||
font-weight: 500;
|
||||
font-size: 1.35rem;
|
||||
}
|
||||
|
||||
/* orcid ------------------------------------------------------------------- */
|
||||
|
||||
.orcid {
|
||||
font-size: 16px;
|
||||
color: #A6CE39;
|
||||
/* margins are required by official ORCID trademark and display guidelines */
|
||||
margin-left:4px;
|
||||
margin-right:4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* Reference index & topics ----------------------------------------------- */
|
||||
|
||||
.ref-index th {font-weight: normal;}
|
||||
|
||||
.ref-index td {vertical-align: top; min-width: 100px}
|
||||
.ref-index .icon {width: 40px;}
|
||||
.ref-index .alias {width: 40%;}
|
||||
.ref-index-icons .alias {width: calc(40% - 40px);}
|
||||
.ref-index .title {width: 60%;}
|
||||
|
||||
.ref-arguments th {text-align: right; padding-right: 10px;}
|
||||
.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px}
|
||||
.ref-arguments .name {width: 20%;}
|
||||
.ref-arguments .desc {width: 80%;}
|
||||
|
||||
/* Nice scrolling for wide elements --------------------------------------- */
|
||||
|
||||
table {
|
||||
display: block;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* Syntax highlighting ---------------------------------------------------- */
|
||||
|
||||
pre, code, pre code {
|
||||
background-color: #f8f8f8;
|
||||
color: #333;
|
||||
}
|
||||
pre, pre code {
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
|
||||
pre .img, pre .r-plt {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
pre .img img, pre .r-plt img {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
code a, pre a {
|
||||
color: #375f84;
|
||||
}
|
||||
|
||||
a.sourceLine:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.fl {color: #1514b5;}
|
||||
.fu {color: #000000;} /* function */
|
||||
.ch,.st {color: #036a07;} /* string */
|
||||
.kw {color: #264D66;} /* keyword */
|
||||
.co {color: #888888;} /* comment */
|
||||
|
||||
.error {font-weight: bolder;}
|
||||
.warning {font-weight: bolder;}
|
||||
|
||||
/* Clipboard --------------------------*/
|
||||
|
||||
.hasCopyButton {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.btn-copy-ex {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.hasCopyButton:hover button.btn-copy-ex {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* headroom.js ------------------------ */
|
||||
|
||||
.headroom {
|
||||
will-change: transform;
|
||||
transition: transform 200ms linear;
|
||||
}
|
||||
.headroom--pinned {
|
||||
transform: translateY(0%);
|
||||
}
|
||||
.headroom--unpinned {
|
||||
transform: translateY(-100%);
|
||||
}
|
||||
|
||||
/* mark.js ----------------------------*/
|
||||
|
||||
mark {
|
||||
background-color: rgba(255, 255, 51, 0.5);
|
||||
border-bottom: 2px solid rgba(255, 153, 51, 0.3);
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
/* vertical spacing after htmlwidgets */
|
||||
.html-widget {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* fontawesome ------------------------ */
|
||||
|
||||
.fab {
|
||||
font-family: "Font Awesome 5 Brands" !important;
|
||||
}
|
||||
|
||||
/* don't display links in code chunks when printing */
|
||||
/* source: https://stackoverflow.com/a/10781533 */
|
||||
@media print {
|
||||
code a:link:after, code a:visited:after {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
|
||||
/* Section anchors ---------------------------------
|
||||
Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71
|
||||
*/
|
||||
|
||||
div.csl-bib-body { }
|
||||
div.csl-entry {
|
||||
clear: both;
|
||||
}
|
||||
.hanging-indent div.csl-entry {
|
||||
margin-left:2em;
|
||||
text-indent:-2em;
|
||||
}
|
||||
div.csl-left-margin {
|
||||
min-width:2em;
|
||||
float:left;
|
||||
}
|
||||
div.csl-right-inline {
|
||||
margin-left:2em;
|
||||
padding-left:1em;
|
||||
}
|
||||
div.csl-indent {
|
||||
margin-left: 2em;
|
||||
}
|
108
docs/pkgdown.js
Normal file
108
docs/pkgdown.js
Normal file
@ -0,0 +1,108 @@
|
||||
/* http://gregfranko.com/blog/jquery-best-practices/ */
|
||||
(function($) {
|
||||
$(function() {
|
||||
|
||||
$('.navbar-fixed-top').headroom();
|
||||
|
||||
$('body').css('padding-top', $('.navbar').height() + 10);
|
||||
$(window).resize(function(){
|
||||
$('body').css('padding-top', $('.navbar').height() + 10);
|
||||
});
|
||||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
|
||||
var cur_path = paths(location.pathname);
|
||||
var links = $("#navbar ul li a");
|
||||
var max_length = -1;
|
||||
var pos = -1;
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
if (links[i].getAttribute("href") === "#")
|
||||
continue;
|
||||
// Ignore external links
|
||||
if (links[i].host !== location.host)
|
||||
continue;
|
||||
|
||||
var nav_path = paths(links[i].pathname);
|
||||
|
||||
var length = prefix_length(nav_path, cur_path);
|
||||
if (length > max_length) {
|
||||
max_length = length;
|
||||
pos = i;
|
||||
}
|
||||
}
|
||||
|
||||
// Add class to parent <li>, and enclosing <li> if in dropdown
|
||||
if (pos >= 0) {
|
||||
var menu_anchor = $(links[pos]);
|
||||
menu_anchor.parent().addClass("active");
|
||||
menu_anchor.closest("li.dropdown").addClass("active");
|
||||
}
|
||||
});
|
||||
|
||||
function paths(pathname) {
|
||||
var pieces = pathname.split("/");
|
||||
pieces.shift(); // always starts with /
|
||||
|
||||
var end = pieces[pieces.length - 1];
|
||||
if (end === "index.html" || end === "")
|
||||
pieces.pop();
|
||||
return(pieces);
|
||||
}
|
||||
|
||||
// Returns -1 if not found
|
||||
function prefix_length(needle, haystack) {
|
||||
if (needle.length > haystack.length)
|
||||
return(-1);
|
||||
|
||||
// Special case for length-0 haystack, since for loop won't run
|
||||
if (haystack.length === 0) {
|
||||
return(needle.length === 0 ? 0 : -1);
|
||||
}
|
||||
|
||||
for (var i = 0; i < haystack.length; i++) {
|
||||
if (needle[i] != haystack[i])
|
||||
return(i);
|
||||
}
|
||||
|
||||
return(haystack.length);
|
||||
}
|
||||
|
||||
/* Clipboard --------------------------*/
|
||||
|
||||
function changeTooltipMessage(element, msg) {
|
||||
var tooltipOriginalTitle=element.getAttribute('data-original-title');
|
||||
element.setAttribute('data-original-title', msg);
|
||||
$(element).tooltip('show');
|
||||
element.setAttribute('data-original-title', tooltipOriginalTitle);
|
||||
}
|
||||
|
||||
if(ClipboardJS.isSupported()) {
|
||||
$(document).ready(function() {
|
||||
var copyButton = "<button type='button' class='btn btn-primary btn-copy-ex' type = 'submit' title='Copy to clipboard' aria-label='Copy to clipboard' data-toggle='tooltip' data-placement='left auto' data-trigger='hover' data-clipboard-copy><i class='fa fa-copy'></i></button>";
|
||||
|
||||
$("div.sourceCode").addClass("hasCopyButton");
|
||||
|
||||
// Insert copy buttons:
|
||||
$(copyButton).prependTo(".hasCopyButton");
|
||||
|
||||
// Initialize tooltips:
|
||||
$('.btn-copy-ex').tooltip({container: 'body'});
|
||||
|
||||
// Initialize clipboard:
|
||||
var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', {
|
||||
text: function(trigger) {
|
||||
return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, "");
|
||||
}
|
||||
});
|
||||
|
||||
clipboardBtnCopies.on('success', function(e) {
|
||||
changeTooltipMessage(e.trigger, 'Copied!');
|
||||
e.clearSelection();
|
||||
});
|
||||
|
||||
clipboardBtnCopies.on('error', function() {
|
||||
changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy');
|
||||
});
|
||||
});
|
||||
}
|
||||
})(window.jQuery || window.$)
|
6
docs/pkgdown.yml
Normal file
6
docs/pkgdown.yml
Normal file
@ -0,0 +1,6 @@
|
||||
pandoc: 2.19.2
|
||||
pkgdown: 2.0.7
|
||||
pkgdown_sha: ~
|
||||
articles: {}
|
||||
last_built: 2023-03-07T20:04Z
|
||||
|
BIN
docs/reference/Rplot001.png
Normal file
BIN
docs/reference/Rplot001.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1011 B |
39
docs/sitemap.xml
Normal file
39
docs/sitemap.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>/404.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/authors.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/index.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/news/index.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/REDCap_split.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/focused_metadata.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/index.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/match_fields_to_form.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/read_redcap_tables.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/redcap_wider.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/sanitize_split.html</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>/reference/split_non_repeating_forms.html</loc>
|
||||
</url>
|
||||
</urlset>
|
21
inst/WORDLIST
Normal file
21
inst/WORDLIST
Normal file
@ -0,0 +1,21 @@
|
||||
DataDictionary
|
||||
GStat
|
||||
JSON
|
||||
README
|
||||
REDCap
|
||||
REDCapR
|
||||
REDCapRITS
|
||||
SpectrumHealthResearch
|
||||
Splitter
|
||||
api
|
||||
doi
|
||||
dplyr
|
||||
github
|
||||
https
|
||||
jbi
|
||||
matadata
|
||||
md
|
||||
nad
|
||||
og
|
||||
thorugh
|
||||
uri
|
3
tests/spelling.R
Normal file
3
tests/spelling.R
Normal file
@ -0,0 +1,3 @@
|
||||
if(requireNamespace('spelling', quietly = TRUE))
|
||||
spelling::spell_check_test(vignettes = TRUE, error = FALSE,
|
||||
skip_on_cran = TRUE)
|
Loading…
Reference in New Issue
Block a user