diff --git a/.Rbuildignore b/.Rbuildignore index ec00288..fcc12f4 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,8 +1,11 @@ ^docs$ ^_pkgdown\.yml$ ^README\.md$ -^LICENSE.md -^\.appveyor\.yml$ -^vignettes/releases$ +^LICENSE\.md$ ^\.github$ -^CITATION\.cff +^vignettes/releases$ +^ui$ +^CITATION\.cff$ +^cran-comments\.md$ +^\.lycheeignore$ +^man/figures/favicon\.png$ diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index c6c1438..0000000 --- a/.appveyor.yml +++ /dev/null @@ -1,45 +0,0 @@ -# DO NOT CHANGE the "init" and "install" sections below - -# Download script file from GitHub -init: - ps: | - $ErrorActionPreference = "Stop" - Invoke-WebRequest http://raw.github.com/krlmlr/r-appveyor/master/scripts/appveyor-tool.ps1 -OutFile "..\appveyor-tool.ps1" - Import-Module '..\appveyor-tool.ps1' - -install: - ps: Bootstrap - -cache: - - C:\RLibrary - -# Adapt as necessary starting from here - -build_script: - - travis-tool.sh install_deps - -test_script: - - travis-tool.sh run_tests - -on_failure: - - 7z a failure.zip *.Rcheck\* - - appveyor PushArtifact failure.zip - -artifacts: - - path: '*.Rcheck\**\*.log' - name: Logs - - - path: '*.Rcheck\**\*.out' - name: Logs - - - path: '*.Rcheck\**\*.fail' - name: Logs - - - path: '*.Rcheck\**\*.Rout' - name: Logs - - - path: '\*_*.tar.gz' - name: Bits - - - path: '\*_*.zip' - name: Bits diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 6fa6710..cd72754 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -6,60 +6,37 @@ on: name: R-CMD-check +permissions: read-all + 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'} - - {os: ubuntu-latest, r: 'release'} - - {os: ubuntu-latest, r: 'oldrel-1'} - + - {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: - - name: Install Homebrew - if: runner.os == 'macOS' - run: | - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" - - - name: Install XQUARTZ dependencies on MacOS - if: runner.os == 'macOS' - run: | - brew install --cask xquartz - - - uses: actions/checkout@v3 - + - uses: actions/checkout@v7 - 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 - - # Cache R packages to speed up builds - - name: Cache R packages - uses: actions/cache@v3 - with: - path: ~/.cache/R - key: ${{ runner.os }}-r-${{ matrix.config.r }}-${{ hashFiles('**/DESCRIPTION') }} - restore-keys: ${{ runner.os }}-r-${{ matrix.config.r }} - - 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 \ No newline at end of file + upload-snapshots: true + build_args: 'c("--no-manual", "--compact-vignettes=gs+qpdf")' diff --git a/.github/workflows/quarto-publish.yml b/.github/workflows/quarto-publish.yml new file mode 100644 index 0000000..2e8cdcd --- /dev/null +++ b/.github/workflows/quarto-publish.yml @@ -0,0 +1,66 @@ +name: Publish site + +on: + push: + branches: [master] + paths: + - "ui/www/**" + - "man/**" + - "vignettes/**" + - "NEWS.md" + - "DESCRIPTION" + - ".github/workflows/quarto-publish.yml" + pull_request: + paths: + - "ui/www/**" + - "man/**" + - "vignettes/**" + - "NEWS.md" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: quarto-dev/quarto-actions/setup@v2 + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::yaml, any::knitr, any::rmarkdown, local::. + needs: website + - name: Check _quarto.yml + run: Rscript ui/www/tools/check-quarto-yml.R + - name: Render + run: quarto render ui/www + - name: Link check (internal) + uses: lycheeverse/lychee-action@v2 + with: + args: --offline --no-progress --root-dir ${{ github.workspace }}/ui/www/_site 'ui/www/_site/**/*.html' + fail: true + - uses: actions/upload-pages-artifact@v5 + with: + path: ui/www/_site + + deploy: + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/master' + needs: build + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment + uses: actions/deploy-pages@v5 diff --git a/CITATION.cff b/CITATION.cff index e18dea6..8e24310 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,10 +1,13 @@ -cff-version: 1.0.0 -message: "If you use the randomNames Package, please cite it using these metadata." -authors: -- family-names: "Damian" - given-names: "Betebenner" - orcid: "https://orcid.org/0000-0003-0476-5599" +cff-version: 1.2.0 +message: "If you use the randomNames package, please cite it using these metadata." +type: software title: "randomNames: Generate Random Given and Surnames" -version: 1.6-1.0 -date-released: 2024-12-3 +version: 1.7-0.0 +date-released: 2026-10-31 +license: GPL-3.0-only url: "https://centerforassessment.github.io/randomNames/" +repository-code: "https://github.com/CenterForAssessment/randomNames" +authors: + - family-names: "Betebenner" + given-names: "Damian W." + orcid: "https://orcid.org/0000-0003-0476-5599" diff --git a/DESCRIPTION b/DESCRIPTION index 9c0dcca..078986f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,19 +1,23 @@ Package: randomNames -Version: 1.6-1.0 -Date: 2024-12-3 +Version: 1.7-0.0 +Date: 2026-10-31 Title: Generate Random Given and Surnames -Depends: R (>= 4.0) -Suggests: knitr, rmarkdown -Imports: crayon, data.table (>= 1.14.0), pkgsearch, toOrdinal (>= 1.1) -Authors@R: c(person(given=c("Damian", "W."), family="Betebenner", email="dbetebenner@nciea.org", role=c("aut", "cre"), comment=c(ORCID = "0000-0003-0476-5599")), - person(given="Lambert", family="Joshua", role="ctb")) -Maintainer: Damian W. Betebenner -Description: Function for generating random gender and ethnicity correct first and/or last names. Names are chosen proportionally based upon their probability of appearing in a large scale data base of real names. +Depends: R (>= 4.1) +Imports: cli, data.table (>= 1.14.0), stats, toOrdinal (>= 1.4-0.0), utils +Suggests: knitr, rmarkdown, testthat (>= 3.0.0), withr +Authors@R: c( + person("Damian W.", "Betebenner", email = "dbetebenner@nciea.org", role = c("aut", "cre"), + comment = c(ORCID = "0000-0003-0476-5599")), + person("Lambert", "Joshua", role = "ctb"), + person("Center for Assessment", role = "cph")) +Description: Generates gender and ethnicity correct first and/or last names. Names are chosen proportionally based upon their probability of appearing in a large scale data base of real names, so a roster of random names looks like a roster of real ones. Useful for anonymising results that would otherwise identify people. URL: https://centerforassessment.github.io/randomNames/, https://github.com/CenterForAssessment/randomNames/, https://cran.r-project.org/package=randomNames BugReports: https://github.com/CenterForAssessment/randomNames/issues/ VignetteBuilder: knitr -LazyLoad: Yes -LazyData: Yes +Encoding: UTF-8 +Config/testthat/edition: 3 +Roxygen: list(markdown = TRUE) +LazyData: true LazyDataCompression: xz -ByteCompile: TRUE License: GPL-3 +Config/roxygen2/version: 8.1.0 diff --git a/NAMESPACE b/NAMESPACE index 97fb006..7da3631 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,5 @@ -import(data.table) +# Generated by roxygen2: do not edit by hand + export(randomNames) -importFrom(crayon,bold,cyan,green,magenta,red,yellow) -importFrom(toOrdinal,toOrdinalDate) +import(data.table) importFrom(stats,runif) -importFrom(utils,packageVersion) diff --git a/NEWS.md b/NEWS.md index f14b80a..7342918 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,69 +1,87 @@ -# randomNames 1.6-0.0 - -* Added in Joshua Lambert's improvements. - -# randomNames 1.5-0.0 - -* Fixed names with embedded spaces as the first character. - -# randomNames 1.4-0.0 - -* Fixed issue with NAs embedded in ethnicity and gender returning wrong data later. - -# randomNames 1.0-0.0 - -* Shortened and improved the title of the package. - -# randomNames 1.0-0.0 - -* Changed numbering of releases from 3 to 4 digits. -* Created real vignette and fixed everything up for a nice 1.0-0.0 release. - -# randomNames 0.6-0 - -* Converted NEWS to NEWS.md and added that to repo. - -# randomNames 0.5-0 - -* Adding vignette and building website. - -# randomNames 0.4-0 - -* Added Middle-Eastern names (ethnicity=6) to data base. - -# randomNames 0.3-0 - -* Fixed bug leading to incorrect re-ordering of results so that they didn't match input. - -# randomNames 0.2-0 - -* Cleaned up documentation. -* Fixed GitHub pull requests. - -# randomNames 0.0-7 - -* Changed randomNamesData to environment. - -# randomNames 0.0-6 - -* Changed DESCRIPTION to Import data.table. - -# randomNames 0.0-5 - -* Fixed key to accomodate changes in data.table 1.7.8. - -# randomNames 0.0-4 - -* Added NAMESPACE. - -# randomNames 0.0-3 - -* Modified function to adapt to improvements in data.table. - -# randomNames 0.0-2 - -* Refined function to recode supplied gender and ethnicity argument/variables if not in function appropriate form. - -# randomNames 0.0-1 - -* Package Released. +# randomNames 1.7-0.0 + +## Bug fixes + +* Valid numeric gender and ethnicity codes are no longer lost when they are mixed with text or with an invalid value in the same vector. `ethnicity = c(1, 7, 3)` used to draw all three at random; now only `7` is. +* The documentation matches the code: `return.complete.data` (not `which.names = "complete.data"`) returns the `data.table`, ethnicity code 6 is documented for `randomNamesData`, and the duplicated description is gone. + +## Changes + +* An invalid `n` (zero, negative, fractional, missing, non-numeric or longer than one) is now an error. It printed a note and returned `NULL`. +* An unknown `which.names` or `name.order` is now an error. It silently returned `NULL`. +* A gender or ethnicity value that matches nothing is still drawn at random, now with a warning. +* Seeded output is unchanged: the same `set.seed()` gives the same names as 1.6-0.0. Tests pin this. An unspecified ethnicity is drawn uniformly from all six categories, as documented. +* The startup banner appears only in interactive sessions, waits at most two seconds for each web request and can be switched off with `options(randomNames.startup_message = FALSE)` or `RANDOMNAMES_QUIET=true`. It no longer needs **pkgsearch**, and **cli** replaces **crayon**. +* Documentation is generated with roxygen2, and the package now has a testthat 3rd edition test suite. +* A new website built with Quarto at . +* Requires R 4.1 or later. + +# randomNames 1.6-0.0 + +* Added in Joshua Lambert's improvements. + +# randomNames 1.5-0.0 + +* Fixed names with embedded spaces as the first character. + +# randomNames 1.4-0.0 + +* Fixed issue with NAs embedded in ethnicity and gender returning wrong data later. + +# randomNames 1.0-0.0 + +* Shortened and improved the title of the package. + +# randomNames 1.0-0.0 + +* Changed numbering of releases from 3 to 4 digits. +* Created real vignette and fixed everything up for a nice 1.0-0.0 release. + +# randomNames 0.6-0 + +* Converted NEWS to NEWS.md and added that to repo. + +# randomNames 0.5-0 + +* Adding vignette and building website. + +# randomNames 0.4-0 + +* Added Middle-Eastern names (ethnicity=6) to data base. + +# randomNames 0.3-0 + +* Fixed bug leading to incorrect re-ordering of results so that they didn't match input. + +# randomNames 0.2-0 + +* Cleaned up documentation. +* Fixed GitHub pull requests. + +# randomNames 0.0-7 + +* Changed randomNamesData to environment. + +# randomNames 0.0-6 + +* Changed DESCRIPTION to Import data.table. + +# randomNames 0.0-5 + +* Fixed key to accomodate changes in data.table 1.7.8. + +# randomNames 0.0-4 + +* Added NAMESPACE. + +# randomNames 0.0-3 + +* Modified function to adapt to improvements in data.table. + +# randomNames 0.0-2 + +* Refined function to recode supplied gender and ethnicity argument/variables if not in function appropriate form. + +# randomNames 0.0-1 + +* Package Released. diff --git a/R/data.R b/R/data.R new file mode 100644 index 0000000..d6c88a4 --- /dev/null +++ b/R/data.R @@ -0,0 +1,25 @@ +#' First and last names by gender and ethnicity +#' +#' Names with their frequencies, compiled from a large-scale data set of names in +#' which each person's gender and ethnicity were recorded. The frequencies are the +#' sampling probabilities [randomNames()] uses, so sampling gives a realistic +#' roster. First names are held by gender and ethnicity, last names by ethnicity. +#' +#' @format An environment holding 18 one-column arrays whose row names are the +#' names and whose values are their frequency probabilities: +#' * `first_names_e_g`: first names for ethnicity `E` (1 to 6) and gender +#' `G` (0 male, 1 female), twelve arrays; +#' * `last_names_e`: last names for ethnicity `E` (1 to 6), six arrays. +#' +#' Ethnicity is coded 1 American Indian or Native Alaskan, 2 Asian or Pacific +#' Islander, 3 Black (not Hispanic), 4 Hispanic, 5 White (not Hispanic) and +#' 6 Middle-Eastern or Arabic. For example `first_names_e1_g0` holds first names +#' and frequency probabilities for male American Indians or Native Alaskans. +#' `ls(randomNamesData)` lists all arrays. +#' +#' @source Large scale state data. +#' @seealso [randomNames()] +#' @examples +#' head(ls(randomNamesData)) +#' head(randomNamesData$last_names_e4) +"randomNamesData" diff --git a/R/internal.R b/R/internal.R new file mode 100644 index 0000000..2da6e02 --- /dev/null +++ b/R/internal.R @@ -0,0 +1,57 @@ +.check_choice <- function(x, arg, choices) { + if (!is.character(x) || length(x) != 1L || is.na(x) || !x %in% choices) { + stop("'", arg, "' must be one of ", paste0("\"", choices, "\"", collapse = ", "), ".", call. = FALSE) + } + x +} + +.check_flag <- function(x, arg) { + if (!is.logical(x) || length(x) != 1L || is.na(x)) { + stop("'", arg, "' must be TRUE or FALSE.", call. = FALSE) + } + invisible(x) +} + +# Valid numeric codes (also as text, "1") are kept as they are. +.keep_codes <- function(x, valid) { + num <- suppressWarnings(as.numeric(as.character(x))) + ifelse(num %in% valid, num, NA_real_) +} + +# Gender as 0 (male), 1 (female) or NA. Text that matches neither is NA, with a warning. +.code_gender <- function(gender) { + if (all(gender %in% c(NA, 0, 1))) return(gender) + supplied <- !is.na(gender) + out <- .keep_codes(gender, 0:1) + text <- is.na(out) + out[text & seq_along(out) %in% grep("Male|M", gender, ignore.case = TRUE)] <- 0 + out[text & seq_along(out) %in% grep("Female|F", gender, ignore.case = TRUE)] <- 1 + .warn_unmatched(supplied & is.na(out), "gender") + out +} + +# Ethnicity as 1-6 or NA. Text or numbers that match nothing are NA, with a warning. +.code_ethnicity <- function(ethnicity) { + if (all(ethnicity %in% c(NA, 1:6))) return(ethnicity) + supplied <- !is.na(ethnicity) + out <- .keep_codes(ethnicity, 1:6) + text <- is.na(out) + patterns <- c( + "Indian|Alaska|Native American", "Hawaii|Pacific|Asian", "Black|African", + "Latino|Hispanic", "White|Caucasian", "Middle|Arabic" + ) + for (code in 1:6) { + hit <- grep(patterns[code], ethnicity, ignore.case = TRUE) + out[text & seq_along(out) %in% hit] <- code + } + .warn_unmatched(supplied & is.na(out), "ethnicity") + out +} + +.warn_unmatched <- function(unmatched, what) { + k <- sum(unmatched) + if (k > 0) { + warning(k, " ", what, " value", if (k > 1) "s were" else " was", + " not recognised and ", if (k > 1) "were" else "was", " drawn at random.", call. = FALSE) + } +} diff --git a/R/randomNames-package.R b/R/randomNames-package.R new file mode 100644 index 0000000..4af5c8f --- /dev/null +++ b/R/randomNames-package.R @@ -0,0 +1,8 @@ +#' @keywords internal +"_PACKAGE" + +## usethis namespace: start +#' @import data.table +#' @importFrom stats runif +## usethis namespace: end +NULL diff --git a/R/randomNames.R b/R/randomNames.R index 3364162..6d6e2bd 100644 --- a/R/randomNames.R +++ b/R/randomNames.R @@ -1,85 +1,143 @@ -#* @get /randomNames -`randomNames` <- -function( - n, - gender, - ethnicity, - which.names="both", - name.order="last.first", - name.sep=", ", - sample.with.replacement=TRUE, - return.complete.data=FALSE) { +#' Generate random first and last names +#' +#' Generates random first and/or last names that are consistent with a given gender +#' and ethnicity. Names are sampled in proportion to how often they occur in the +#' embedded [randomNamesData] data set, so the result looks like a realistic roster. +#' Random names are useful to anonymise results that would otherwise identify people. +#' +#' The number of names returned is the largest of `n`, `length(gender)` and +#' `length(ethnicity)`; shorter vectors are recycled. Gender is used only for first +#' names; ethnicity is used for both first and last names. A missing gender or +#' ethnicity (`NA`, or not supplied) is drawn at random: gender with equal +#' probability, ethnicity with equal probability across the six codes. +#' +#' Gender and ethnicity may be given as codes or as text. Text is matched +#' case-insensitively: `"Male"`/`"M"`, `"Female"`/`"F"`; and for ethnicity +#' `"American Indian"`, `"Alaska"` or `"Native American"` (1); `"Asian"`, `"Hawaii"` +#' or `"Pacific"` (2); `"Black"` or `"African"` (3); `"Hispanic"` or `"Latino"` (4); +#' `"White"` or `"Caucasian"` (5); `"Middle Eastern"` or `"Arabic"` (6). A value that +#' matches nothing is drawn at random, with a warning. +#' +#' @param n Optional. A single positive whole number: how many names to produce. +#' Defaults to 1. Most useful when no gender or ethnicity is supplied. +#' @param gender Optional. A vector of genders, either codes (`0` male, `1` female) +#' or text as described in Details. +#' @param ethnicity Optional. A vector of ethnicities, either codes or text as +#' described in Details. The codes are: +#' \describe{ +#' \item{1}{American Indian or Native Alaskan} +#' \item{2}{Asian or Pacific Islander} +#' \item{3}{Black (not Hispanic)} +#' \item{4}{Hispanic} +#' \item{5}{White (not Hispanic)} +#' \item{6}{Middle-Eastern, Arabic} +#' } +#' @param which.names One of `"both"` (the default), `"first"` or `"last"`. +#' @param name.order When `which.names` is `"both"`, either `"last.first"` (the +#' default) or `"first.last"`. +#' @param name.sep When `which.names` is `"both"`, the string placed between the +#' two names. Defaults to `", "`. +#' @param sample.with.replacement Sample names with replacement? Defaults to +#' `TRUE`. Without replacement the number of names asked for in one gender and +#' ethnicity group cannot exceed the names available for it. +#' @param return.complete.data Return a `data.table` with the `ethnicity` and +#' `gender` codes used alongside the names, instead of a character vector. +#' Defaults to `FALSE`. +#' +#' @return A character vector of names, or, when `return.complete.data = TRUE`, a +#' `data.table` with columns `gender`, `ethnicity` and the requested names. +#' +#' @seealso [randomNamesData] +#' +#' @examples +#' randomNames() # one name in "last, first" form +#' +#' randomNames(5, which.names = "first") +#' +#' randomNames(5, return.complete.data = TRUE) +#' +#' test.df <- data.frame( +#' GENDER = sample(0:1, 100, replace = TRUE), +#' ETHNICITY = sample(1:6, 100, replace = TRUE) +#' ) +#' head(randomNames(gender = test.df$GENDER, ethnicity = test.df$ETHNICITY)) +#' +#' ethnicities <- c("African American", "Hispanic", "Asian", "White", "Native American") +#' genders <- c("Female", "Male") +#' test.df <- data.frame( +#' GENDER = sample(genders, 100, replace = TRUE), +#' ETHNICITY = sample(ethnicities, 100, replace = TRUE) +#' ) +#' head(randomNames(gender = test.df$GENDER, ethnicity = test.df$ETHNICITY)) +#' @export +randomNames <- function(n, + gender, + ethnicity, + which.names = "both", + name.order = "last.first", + name.sep = ", ", + sample.with.replacement = TRUE, + return.complete.data = FALSE) { + .N <- V1 <- first_name <- last_name <- NULL ## To prevent R CMD check warnings - .N <- V1 <- first_name <- last_name <- NULL ## To prevent R CMD check warnings + ### Argument checks + if (missing(n)) { + n <- 1 + } else if (!is.numeric(n) || length(n) != 1L || !is.finite(n) || n < 1 || n != floor(n)) { + stop("'n' must be a single positive whole number.", call. = FALSE) + } + which.names <- .check_choice(which.names, "which.names", c("both", "first", "last")) + name.order <- .check_choice(name.order, "name.order", c("last.first", "first.last")) + if (!is.character(name.sep) || length(name.sep) != 1L || is.na(name.sep)) { + stop("'name.sep' must be a single character string.", call. = FALSE) + } + .check_flag(sample.with.replacement, "sample.with.replacement") + .check_flag(return.complete.data, "return.complete.data") - first_names <- function(tmp.gender, tmp.ethnicity, tmp.number) { - tmp <- randomNames::randomNamesData[[paste("first_names_e", tmp.ethnicity, "_g", tmp.gender, sep="")]] - suppressWarnings(sample(rownames(tmp), tmp.number, replace=sample.with.replacement, prob=tmp)) - } + if (missing(gender)) gender <- NA + if (missing(ethnicity)) ethnicity <- NA - last_names <- function(tmp.ethnicity, tmp.number) { - tmp <- randomNames::randomNamesData[[paste("last_names_e", tmp.ethnicity, sep="")]] - suppressWarnings(sample(rownames(tmp), tmp.number, replace=sample.with.replacement, prob=tmp)) - } + tmp.length <- max(n, length(gender), length(ethnicity), na.rm = TRUE) + gender <- rep(gender, length.out = tmp.length) + ethnicity <- rep(ethnicity, length.out = tmp.length) - if (missing(n) & missing(gender) & missing(ethnicity)) n <- 1 - if (missing(n)) n <- 1 - if (n < 1) { - message("\tNOTE: Please supply a positive integer for the argument n.") - return(NULL) - } - if (missing(gender)) gender <- NA - if (missing(ethnicity)) ethnicity <- NA + gender <- .code_gender(gender) + ethnicity <- .code_ethnicity(ethnicity) - tmp.length <- max(n, length(gender), length(ethnicity), na.rm=TRUE) - if (is.na(tmp.length)) tmp.length <- 1 + # The order of these two draws fixes the stream of random numbers: keep it. + gender[is.na(gender)] <- sample(0:1, length(gender[is.na(gender)]), replace = TRUE) + ethnicity[is.na(ethnicity)] <- sample(1:6, length(ethnicity[is.na(ethnicity)]), replace = TRUE) - if (missing(gender)) gender <- round(runif(tmp.length)) - if (missing(ethnicity)) ethnicity <- round(runif(tmp.length,min=1,max=5)) + first_names <- function(tmp.gender, tmp.ethnicity, tmp.number) { + tmp <- randomNames::randomNamesData[[paste("first_names_e", tmp.ethnicity, "_g", tmp.gender, sep = "")]] + suppressWarnings(sample(rownames(tmp), tmp.number, replace = sample.with.replacement, prob = tmp)) + } - gender <- rep(gender, length.out=tmp.length) - ethnicity <- rep(ethnicity, length.out=tmp.length) + last_names <- function(tmp.ethnicity, tmp.number) { + tmp <- randomNames::randomNamesData[[paste("last_names_e", tmp.ethnicity, sep = "")]] + suppressWarnings(sample(rownames(tmp), tmp.number, replace = sample.with.replacement, prob = tmp)) + } - if (!all(gender %in% c(NA,0,1))) { - tmp <- rep(NA, length(gender)) - tmp[grep("Male|M", gender, ignore.case=TRUE)] <- 0 - tmp[grep("Female|F", gender, ignore.case=TRUE)] <- 1 - gender <- tmp - } + tmp.dt <- data.table(seq.int(tmp.length), gender, ethnicity) + setkeyv(tmp.dt, c("gender", "ethnicity")) - if (!all(ethnicity %in% c(NA,1:6))) { - tmp <- rep(NA, length(ethnicity)) - tmp[grep("Indian|Alaska|Native American", ethnicity, ignore.case=TRUE)] <- 1 - tmp[grep("Hawaii|Pacific|Asian", ethnicity, ignore.case=TRUE)] <- 2 - tmp[grep("Black|African", ethnicity, ignore.case=TRUE)] <- 3 - tmp[grep("Latino|Hispanic", ethnicity, ignore.case=TRUE)] <- 4 - tmp[grep("White|Caucasian", ethnicity, ignore.case=TRUE)] <- 5 - tmp[grep("Middle|Arabic", ethnicity, ignore.case=TRUE)] <- 6 - ethnicity <- tmp - } + if (which.names == "first" || which.names == "both") { + tmp.dt[, first_name := first_names(gender, ethnicity, .N), by = list(gender, ethnicity)] + } - gender[is.na(gender)] <- sample(0:1, length(gender[is.na(gender)]), replace=TRUE) - ethnicity[is.na(ethnicity)] <- sample(1:6, length(ethnicity[is.na(ethnicity)]), replace=TRUE) + if (which.names == "last" || which.names == "both") { + tmp.dt[, last_name := last_names(ethnicity, .N), by = list(ethnicity)] + } - tmp.dt <- data.table(seq.int(tmp.length), gender, ethnicity) - setkeyv(tmp.dt, c("gender", "ethnicity")) - - if (which.names=="first" | which.names=="both") { - tmp.dt[,first_name:=first_names(gender, ethnicity, .N), by=list(gender, ethnicity)] - } - - if (which.names=="last" | which.names=="both") { - tmp.dt[,last_name:=last_names(ethnicity, .N), by=list(ethnicity)] - } - - setkey(tmp.dt, V1) - if (!return.complete.data) { - if (which.names=="first") return(tmp.dt$first_name) - if (which.names=="last") return(tmp.dt$last_name) - if (which.names=="both" & name.order=="last.first") return(paste(tmp.dt$last_name, tmp.dt$first_name, sep=name.sep)) - if (which.names=="both" & name.order=="first.last") return(paste(tmp.dt$first_name, tmp.dt$last_name, sep=name.sep)) - } else { - tmp.dt[,intersect(names(tmp.dt), c("ethnicity", "gender", "last_name", "first_name")), with=FALSE] - } - -} ## END randomNames Function \ No newline at end of file + setkey(tmp.dt, V1) + if (return.complete.data) { + return(tmp.dt[, intersect(names(tmp.dt), c("ethnicity", "gender", "last_name", "first_name")), with = FALSE]) + } + if (which.names == "first") return(tmp.dt$first_name) + if (which.names == "last") return(tmp.dt$last_name) + if (name.order == "last.first") { + paste(tmp.dt$last_name, tmp.dt$first_name, sep = name.sep) + } else { + paste(tmp.dt$first_name, tmp.dt$last_name, sep = name.sep) + } +} ## END randomNames diff --git a/R/zzz.R b/R/zzz.R index 5a9b76b..a404f87 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,48 +1,50 @@ -`.onLoad` <- -function(libname, pkgname) { -} +# Startup banner. It runs only in an interactive session, makes at most two web +# requests with a two-second timeout, and can be switched off with +# options(randomNames.startup_message = FALSE) +# or the environment variable RANDOMNAMES_QUIET=true. -`.onAttach` <- function(libname, pkgname) { - if (interactive()) { - # Utility function - get_dev_version <- function(package) { - url <- paste0("https://raw.githubusercontent.com/CenterForAssessment/", package, "/refs/heads/master/DESCRIPTION") - tryCatch({ - lines <- readLines(url, warn = FALSE) - version_line <- grep("^Version:", lines, value = TRUE) - if (length(version_line) > 0) { - return(cyan("v", strsplit(version_line, ": ")[[1]][2], sep="")) - } else { - return(red("Not Available")) - } - }, error = function(e) { - return(red("Not Available")) - }, warning = function(w) { - return(red("Not Available")) - }) - } +.startup_wanted <- function(is_interactive = interactive()) { + is_interactive && + isTRUE(getOption("randomNames.startup_message", TRUE)) && + !tolower(Sys.getenv("RANDOMNAMES_QUIET", "false")) %in% c("1", "true", "yes") +} - # Extract version information - installed.version <- utils::packageDescription("randomNames")[['Version']] - cran.version <- tryCatch( - green("v", pkgsearch::cran_package("randomNames")[['Version']], sep=""), - error = function(e) red("Not Available"), - warning = function(w) red("Not Available")) - dev.version <- get_dev_version("randomNames") +# First regular-expression capture from a web page, or NA on any failure. +.fetch_capture <- function(address, pattern, timeout = 2) { + old <- options(timeout = timeout) + on.exit(options(old), add = TRUE) + tryCatch({ + con <- url(address, open = "r") + on.exit(close(con), add = TRUE) + lines <- suppressWarnings(readLines(con, n = 200L, warn = FALSE)) + hit <- regmatches(lines, regexec(pattern, lines)) + hit <- hit[lengths(hit) > 1L] + if (length(hit)) hit[[1L]][2L] else NA_character_ + }, error = function(e) NA_character_, warning = function(w) NA_character_) +} - # Define a friendly startup message - message_text <- paste0( - magenta(bold("\uD83C\uDF89 randomNames v", installed.version, sep="")), " - ", toOrdinal::toOrdinalDate("2024-12-4"), "\n", - strrep("\u2501", 40), "\n", - bold("\U1F4E6 CRAN: "), cran.version, "\n", - bold("\U1F527 Dev: "), dev.version, "\n", - strrep("\u2501", 40), "\n", - "\U1F4A1 Tip: ", magenta(bold("> help(package=\"randomNames\")")), "\n", - "\U1F310 Docs: ", magenta(bold("https://centerforassessment.github.io/randomNames")), "\n", - strrep("\u2501", 40), "\n", - "\u2728 Happy randomNaming!") +.version_label <- function(v, ok) { + if (is.na(v)) cli::col_red("Not Available") else ok(paste0("v", v)) +} - # Display the startup message - packageStartupMessage(message_text) - } -} \ No newline at end of file +.onAttach <- function(libname, pkgname) { + if (!.startup_wanted()) return(invisible()) + installed <- as.character(utils::packageVersion(pkgname)) + cran <- .fetch_capture( + "https://crandb.r-pkg.org/randomNames", "\"Version\"\\s*:\\s*\"([^\"]+)\"" + ) + dev <- .fetch_capture( + "https://raw.githubusercontent.com/CenterForAssessment/randomNames/refs/heads/master/DESCRIPTION", + "^Version:\\s*(\\S+)" + ) + rule <- strrep("\u2501", 40) + packageStartupMessage(paste0( + cli::col_magenta(cli::style_bold(paste0("\U1F389 randomNames v", installed))), + " - ", toOrdinal::toOrdinalDate(as.character(Sys.Date())), "\n", rule, "\n", + cli::style_bold("\U1F4E6 CRAN: "), .version_label(cran, cli::col_green), "\n", + cli::style_bold("\U1F527 Dev: "), .version_label(dev, cli::col_cyan), "\n", rule, "\n", + "\U1F4A1 Tip: ", cli::col_magenta(cli::style_bold("> help(package=\"randomNames\")")), "\n", + "\U1F310 Docs: ", cli::col_magenta(cli::style_bold("https://centerforassessment.github.io/randomNames")), "\n", + rule, "\n", "\u2728 Happy randomNaming!" + )) +} diff --git a/README.md b/README.md index 57e4340..ec4de68 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,67 @@ -randomNames -=========== +# randomNames randomNames hex logo + +[![R-CMD-check](https://github.com/CenterForAssessment/randomNames/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/CenterForAssessment/randomNames/actions/workflows/R-CMD-check.yaml) +[![CRAN status](https://www.r-pkg.org/badges/version/randomNames)](https://CRAN.R-project.org/package=randomNames) +[![License: GPL v3](https://img.shields.io/badge/license-GPL%203-blue.svg)](https://github.com/CenterForAssessment/randomNames/blob/master/LICENSE.md) + -[![R-CMD-check](https://github.com/CenterForAssessment/randomNames/workflows/R-CMD-check/badge.svg)](https://github.com/CenterForAssessment/randomNames/actions) -[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/centerforassessment/randomNames?branch=master&svg=true)](https://ci.appveyor.com/project/centerforassessment/randomNames) -[![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/randomNames)](http://cran.r-project.org/package=randomNames) -[![Development Version](https://img.shields.io/badge/devel-1.5--0.1-brightgreen.svg)](https://github.com/CenterForAssessment/randomNames) -[![Rstudio mirror downloads](http://cranlogs.r-pkg.org/badges/grand-total/randomNames)](https://github.com/metacran/cranlogs.app) -[![License](http://img.shields.io/badge/license-GPL%203-brightgreen.svg?style=flat)](https://github.com/CenterForAssessment/randomNames/blob/master/LICENSE.md) -[![https://gitter.im/CenterForAssessment/randomNames](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/CenterForAssessment/randomNames?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +## Overview +**randomNames** has one function, `randomNames()`, that creates random first and/or last names that fit a gender and an ethnicity. Names are sampled in proportion to how often they occur in a large database of real names, so a roster of random names looks like a roster of real ones. That makes it useful for anonymising results that would otherwise identify people. -# Overview +## Installation -The **randomNames** package contains a single function `randomNames` which creates random gender/ethnicity correct first and/or last names where names are proportionally sampled based upon their frequency in a large scale database. +From [CRAN](https://CRAN.R-project.org/package=randomNames): - -# Installation - -## From [CRAN](https://CRAN.R-project.org/package=randomNames) - -To install the latest stable release of **randomNames** from [CRAN](https://CRAN.R-project.org/package=randomNames) - -```R -> install.packages("randomNames") +``` r +install.packages("randomNames") ``` -## From [Github](https://github.com/CenterForAssessment/randomNames/) +The development version from [GitHub](https://github.com/CenterForAssessment/randomNames/): -To install the development release of **randomNames** from [GitHub](https://github.com/CenterForAssessment/randomNames/): - -```R -> devtools::install_github("CenterForAssessment/randomNames") +``` r +# install.packages("pak") +pak::pak("CenterForAssessment/randomNames") ``` -# Usage +## Usage -``` -> randomNames(5) ## 5 last, first names -[1] "Mossberg, Cassie" "Mendiaz, Victoria" "Miner, Cassidy" "Austin, Brook" "Babcock, Lloyd" +``` r +library(randomNames) -> randomNames(5, gender=1) ## 5 female last, first names -[1] "Bruckner, Birva" "Caringer, Madelyn" "Mendoza, Rebecca" "el-Haque, Jaleela" "Williams, Miranda" +randomNames(5) # last, first +randomNames(5, gender = 1) # female +randomNames(5, gender = 0, ethnicity = 3) # male, Black +randomNames(5, gender = 1, ethnicity = 6, which.names = "first") -> randomNames(5, gender=0) ## 5 male last, first names -[1] "al-Salam, Rida" "Debus, Kai" "al-Aly, Jaabir" "Garces, Markus" "Robertson, Trevor" +# Text works as well as codes +randomNames(3, gender = c("Female", "Male"), ethnicity = c("Hispanic", "White", "Asian")) -> randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first names -[1] "Bashir, Shaquille" "Ursery, Keilan" "Marlow, Marvin" "Bell, Daishavon" "Hammond, Kyle" +# The codes used, next to the names +randomNames(3, return.complete.data = TRUE) -> randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern, female first names -[1] "Jawhara" "Raaniya" "Ghaada" "Ghazaala" "Raabia" +# The same names again +set.seed(42); randomNames(3) +set.seed(42); randomNames(3) ``` +Ethnicity codes are 1 American Indian or Native Alaskan, 2 Asian or Pacific Islander, 3 Black (not Hispanic), 4 Hispanic, 5 White (not Hispanic) and 6 Middle-Eastern or Arabic. Gender codes are 0 male and 1 female. When you give neither, each is drawn at random. -# Resources +## The startup message -* [randomNames GitHub Pages](https://CenterForAssessment.github.io/randomNames) -* [CRAN Repo](https://CRAN.R-project.org/package=randomNames) +In an interactive session the package prints a short banner that compares the installed version with CRAN and GitHub. It waits at most two seconds for each request. Switch it off with +``` r +options(randomNames.startup_message = FALSE) +``` -# Contributors +or set the environment variable `RANDOMNAMES_QUIET=true`. It never runs in scripts, `R CMD check` or on a server. -The **randomNames** Package is crafted with :heart: by: +## Resources -* [Damian Betebenner](https://github.com/dbetebenner) +- [Website](https://centerforassessment.github.io/randomNames/) +- [CRAN](https://CRAN.R-project.org/package=randomNames) +- [Issues](https://github.com/CenterForAssessment/randomNames/issues) -I love feedback and am happy to answer questions. +Maintained by [Damian Betebenner](https://github.com/dbetebenner) at the [Center for Assessment](https://www.nciea.org/). diff --git a/_pkgdown.yml b/_pkgdown.yml deleted file mode 100644 index 00933df..0000000 --- a/_pkgdown.yml +++ /dev/null @@ -1,50 +0,0 @@ -template: - package: centerPackageTemplate - default_assets: false - - -home: - strip_header: true - links: - - text: Other Center stuff - href: https://centerforassessment.github.io/ - - -navbar: - title: ~ - type: default - left: - - text: Getting Started - href: articles/randomNames.html - - text: Reference - href: reference/index.html - - text: News - menu: - - text: "Release notes" - - text: "randomNames 1.5-0.0" - href: articles/releases/randomNames-1.5-0.0.html - - text: "randomNames 1.4-0.0" - href: articles/releases/randomNames-1.4-0.0.html - - text: "randomNames 1.0-0.0" - href: articles/releases/randomNames-1.0-0.0.html - - text: "randomNames 0.0-1" - href: articles/releases/randomNames-0.0-1.html - - text: "------------------" - - text: "Change log" - href: news/index.html - right: - - icon: fab fa-github - href: https://github.com/centerforassessment/randomNames - - icon: fab fa-twitter - href: https://twitter.com/intent/tweet?url=https%3A%2F%2Fcenterforassessment.github.io%2FrandomNames%2Findex.html&via=dbetebenner&text=randomNames%3A%20R%20package%20to%20generate%20random%20given%20and%20surnames&hashtags=rstats%2CrandomNames - - -reference: - - title: Random name generation - desc: Function to generate random names. - contents: - - randomNames - - title: Random name data set - desc: Internal data set used to create random names. - contents: - - randomNamesData diff --git a/cran-comments.md b/cran-comments.md new file mode 100644 index 0000000..d336f98 --- /dev/null +++ b/cran-comments.md @@ -0,0 +1,17 @@ +## Release summary + +This is an update from 1.6-0.0 to 1.7-0.0. It stops losing valid gender and ethnicity codes that are mixed with text or invalid values, turns silent `NULL` returns for invalid arguments into errors, corrects the documentation, removes the `pkgsearch` and `crayon` dependencies (the startup message now uses `cli`, is interactive-only, waits at most two seconds and can be switched off), adds a testthat 3e suite and requires R >= 4.1. Seeded output is unchanged; tests pin it. + +## Test environments + +* local macOS (aarch64), R release: `R CMD check --as-cran` +* GitHub Actions: ubuntu-latest (release, oldrel-1, devel), macos-latest (release), windows-latest (release) +* win-builder (release, devel): to be run before submission + +## R CMD check results + +0 errors | 0 warnings | 0 notes + +## Reverse dependencies + +Checked the CRAN reverse dependencies ahpsurvey, diffpriv, NHSRwaitinglist, raw, simulist and SGP against this version with `R CMD check`: no new problems. (diffpriv has one Rd NOTE about lost braces that does not involve randomNames.) diff --git a/docs/articles/index.html b/docs/articles/index.html deleted file mode 100644 index ac9ad9e..0000000 --- a/docs/articles/index.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Articles - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- - - - - -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/docs/articles/randomNames.html b/docs/articles/randomNames.html deleted file mode 100644 index 0b26838..0000000 --- a/docs/articles/randomNames.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Getting started with randomNames - - - - - - - - -
-
- - - -
- -
-
- - - - -
-
-

-Introduction -

-

The randomNames package contains a single function -allowing users to generate proportionally correct, gender and ethnicity -specific first and last names. The package contains an embedded data set -of names that is based upon a large scale data set of names from the -United States where the ethnicity and gender of the person was -identified. The embedded data set includes information about ethnicity, -gender (first name), and the probability of the name occurring in the -data set. Random names are often useful in situations where one needs to -share personal information but needs to obscure the identity of the -person to whom the data belongs.

-
-
-

-Use -

-

After installing -the package from either CRAN or GitHub, it’s simple to generate random -names using the following simple instructions.

-

By default, the randomNames function supplies a single -random last and first name separated by a comma:

-
> randomNames()
-[1] "Gerhardus, Araceli"
-

To generate more random names, just supply a positive integer to the -randomNames function:

-
> randomNames(5)
-[1] "el-Rais, Haazim"     "Hamilton, Isaac"     "Trehal, Christopher" "Waite, Steven"       "Roybal, Daniela"    
-
-

-Additional output control -

-

The randomNames function accepts several arguments -including n, gender, ethnicity, -which.names, name.order, and -name.sep.

-
randomNames(n,
-            gender,
-            ethnicity,
-            which.names="both",
-            name.order="last.first",
-            name.sep=", ",
-            sample.with.replacement=TRUE,
-            return.complete.data=FALSE)
-

For complete documentation on values accepted for arguments, see the -function -documentation

-
-
-

-Examples -

-

The first argument, n, controls the number of names -returned by the randomNames function:

-
> randomNames(5) ## 5 last, first names
-[1] "al-Hamidi, Zaitoona" "Alemu, Deven"        "al-Rasheed, Manaara" "Duk, Ariana"         "Turner, Aikeem"     
-

The second argument, gender, controls the gender -(0=male, 1=female) of the first names returned. This argument can be a -vector up to the same length as the number of names requested.

-
> randomNames(5, gender=1) ## 5 female last, first names
-[1] "el-Zaidi, Tharwa"    "Lough, Jasmine"      "Hill, Krystal"       "el-Noorani, Ruqayya" "al-Kazmi, Rasheeda" 
-> 
-> randomNames(5, gender=c(0,0,1,1,1)) ## 2 male  and 3 female last, first names
-[1] "Lozano, Alfredo"   "Brewer, Vincenzo"  "Suh, Amanda"       "Armstrong, Olivia" "Sidwell, Naomi"   
-

The third argument, ethnicity, controls the ethnicity of -the names returned. The following integer codes/ethnicities are -accepted:

-
    -
  1. American Indian or Native Alaskan
  2. -
  3. Asian or Pacific Islander
  4. -
  5. Black (not Hispanic)
  6. -
  7. Hispanic
  8. -
  9. White (not Hispanic)
  10. -
  11. Middle-Eastern, Arabic
  12. -
-
> randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first names
-[1] "Howard Jr, Gavin"  "Martin, Charles"   "Davis, Ahmad"      "Shibre, Bobby"     "Parkinson, Ronald"
-

The fourth argument, which.names controls which names -are returned. The argument accepts the values: both (the -default), last, first, or -complete.data

-
> randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern/Arabic, female first names
-[1] "Raaniya" "Sabeeka" "Saara"   "Afeefa"  "Wadha"  
-

The fifth argument, name.order, controls the order in -which the names are returned. The argument is only relevant if -which.names=both. The argument accepts the values: -last.first (the default) and first.last.

-
> randomNames(5, gender=1, ethnicity=6, name.order="first.last") ## 5 first last names
-[1] "Nisma, al-Abraham"  "Safiyya, al-Elamin" "Muhjar, al-Parsa"   "Safaaa, el-Masih"   "Suhaa, al-Khalid"  
-

The sixth argument, name.sep, is a character string that -controls the separator used when both names are returned. The -default separator is ,.

-
> randomNames(5, gender=1, ethnicity=6, name.order="first.last", name.sep=" ") ## 5 first last names separated by a space
-[1] "Wajeeha al-Siddique" "Kulthum al-Basha"    "Azeema el-Assad"     "Iffat al-Bashara"    "Amal al-Jabbour"    
-
-
-
-

-Contributions & Requests -

-

If you have contribution or a feature request for the -randomNames package, don’t hesitate to write or set up -an issue -on GitHub.

-
-
-
- - - -
- - -
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- -
-
- - - diff --git a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-hash.css b/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-hash.css deleted file mode 100644 index b563ec9..0000000 --- a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-hash.css +++ /dev/null @@ -1,2 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section::before {content: '#';font-size: 80%;} diff --git a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-icon.css b/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-icon.css deleted file mode 100644 index a24ab75..0000000 --- a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-icon.css +++ /dev/null @@ -1,8 +0,0 @@ -/* Styles for section anchors content */ -/* From https://icons.getbootstrap.com/icons/link-45deg/ - Licence: https://github.com/twbs/icons/blob/main/LICENSE.md */ - -a.anchor-section:before { - display: inline-block; - content: url("data:image/svg+xml,"); -} diff --git a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-symbol.css b/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-symbol.css deleted file mode 100644 index 952f956..0000000 --- a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections-symbol.css +++ /dev/null @@ -1,6 +0,0 @@ -/* Styles for section anchors content */ -/* Link symbol : https://codepoints.net/U+1F517 - with variation selector https://graphemica.com/FE0E */ -a.anchor-section::before{content: '\01F517\00FE0E';font-size: 20px;} -/* deactivate underline for link symbol */ -a.anchor-section:hover {text-decoration: none;} diff --git a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections.css b/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections.css deleted file mode 100644 index 041905f..0000000 --- a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections.css +++ /dev/null @@ -1,4 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section {margin-left: 10px; visibility: hidden; color: inherit;} -.hasAnchor:hover a.anchor-section {visibility: visible;} -ul > li > .anchor-section {display: none;} diff --git a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections.js b/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections.js deleted file mode 100644 index fee005d..0000000 --- a/docs/articles/randomNames_files/anchor-sections-1.1.0/anchor-sections.js +++ /dev/null @@ -1,11 +0,0 @@ -document.addEventListener('DOMContentLoaded', function () { - // If section divs is used, we need to put the anchor in the child header - const headers = document.querySelectorAll("div.hasAnchor.section[class*='level'] > :first-child") - - headers.forEach(function (x) { - // Add to the header node - if (!x.classList.contains('hasAnchor')) x.classList.add('hasAnchor') - // Remove from the section or div created by Pandoc - x.parentElement.classList.remove('hasAnchor') - }) -}) diff --git a/docs/articles/randomNames_files/header-attrs-2.13/header-attrs.js b/docs/articles/randomNames_files/header-attrs-2.13/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/randomNames_files/header-attrs-2.13/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/randomNames_files/header-attrs-2.14/header-attrs.js b/docs/articles/randomNames_files/header-attrs-2.14/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/randomNames_files/header-attrs-2.14/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/randomNames_files/header-attrs-2.22/header-attrs.js b/docs/articles/randomNames_files/header-attrs-2.22/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/randomNames_files/header-attrs-2.22/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/randomNames_files/header-attrs-2.7/header-attrs.js b/docs/articles/randomNames_files/header-attrs-2.7/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/randomNames_files/header-attrs-2.7/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-0.0-1.html b/docs/articles/releases/randomNames-0.0-1.html deleted file mode 100644 index 8b424f9..0000000 --- a/docs/articles/releases/randomNames-0.0-1.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • randomNames 0.0-1 - - - - - - - - -
-
- - - -
- -
-
- - - - -
-

This is the initial release of the randomNames -package. The randomNames package was developed to avoid -always naming anonymous persons John Doe or Jane Doe. -Random names generated from the randomNames function are -derived from a large data base of personal names with gender and -ethnicity identifiers. The names are also probabilistically selected -based upon their frequency in the original data from which they were -derived.

-
> library(randomNames)
-> randomNames(5)
-[1] "Sommerville, Marcela" "al-Zaidi, Maisara"    "Boese, Salvador"      "Hardy, Stephen"       "Sepulona, Madeleine" 
-

For complete randomNames documentation, see the documentation

-
-
- - - -
- - -
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- -
-
- - - diff --git a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-hash.css b/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-hash.css deleted file mode 100644 index b563ec9..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-hash.css +++ /dev/null @@ -1,2 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section::before {content: '#';font-size: 80%;} diff --git a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-icon.css b/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-icon.css deleted file mode 100644 index a24ab75..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-icon.css +++ /dev/null @@ -1,8 +0,0 @@ -/* Styles for section anchors content */ -/* From https://icons.getbootstrap.com/icons/link-45deg/ - Licence: https://github.com/twbs/icons/blob/main/LICENSE.md */ - -a.anchor-section:before { - display: inline-block; - content: url("data:image/svg+xml,"); -} diff --git a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-symbol.css b/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-symbol.css deleted file mode 100644 index 952f956..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections-symbol.css +++ /dev/null @@ -1,6 +0,0 @@ -/* Styles for section anchors content */ -/* Link symbol : https://codepoints.net/U+1F517 - with variation selector https://graphemica.com/FE0E */ -a.anchor-section::before{content: '\01F517\00FE0E';font-size: 20px;} -/* deactivate underline for link symbol */ -a.anchor-section:hover {text-decoration: none;} diff --git a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections.css b/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections.css deleted file mode 100644 index 041905f..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections.css +++ /dev/null @@ -1,4 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section {margin-left: 10px; visibility: hidden; color: inherit;} -.hasAnchor:hover a.anchor-section {visibility: visible;} -ul > li > .anchor-section {display: none;} diff --git a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections.js b/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections.js deleted file mode 100644 index fee005d..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/anchor-sections-1.1.0/anchor-sections.js +++ /dev/null @@ -1,11 +0,0 @@ -document.addEventListener('DOMContentLoaded', function () { - // If section divs is used, we need to put the anchor in the child header - const headers = document.querySelectorAll("div.hasAnchor.section[class*='level'] > :first-child") - - headers.forEach(function (x) { - // Add to the header node - if (!x.classList.contains('hasAnchor')) x.classList.add('hasAnchor') - // Remove from the section or div created by Pandoc - x.parentElement.classList.remove('hasAnchor') - }) -}) diff --git a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.13/header-attrs.js b/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.13/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.13/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.14/header-attrs.js b/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.14/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.14/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.22/header-attrs.js b/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.22/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.22/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.7/header-attrs.js b/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.7/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-0.0-1_files/header-attrs-2.7/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.0-0.0.html b/docs/articles/releases/randomNames-1.0-0.0.html deleted file mode 100644 index de13e29..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • randomNames 1.0-0.0 - - - - - - - - -
-
- - - -
- -
-
- - - - -
-

This is 1.0 release of the randomNames package. This -release is mostly about the creation of vignettes and web-documentation -for the package. However, the package now also support Middle -Eastern/Arabic names. See the new Getting -Started Vignette for more information.

-

Feel free to drop me a line with any comments, feature requests, or -ideas. And give us a shout-out Tweet using the Twitter button in the -upper right!

-
-
- - - -
- - -
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- -
-
- - - diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css b/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css deleted file mode 100644 index b563ec9..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css +++ /dev/null @@ -1,2 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section::before {content: '#';font-size: 80%;} diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css b/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css deleted file mode 100644 index a24ab75..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css +++ /dev/null @@ -1,8 +0,0 @@ -/* Styles for section anchors content */ -/* From https://icons.getbootstrap.com/icons/link-45deg/ - Licence: https://github.com/twbs/icons/blob/main/LICENSE.md */ - -a.anchor-section:before { - display: inline-block; - content: url("data:image/svg+xml,"); -} diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css b/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css deleted file mode 100644 index 952f956..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css +++ /dev/null @@ -1,6 +0,0 @@ -/* Styles for section anchors content */ -/* Link symbol : https://codepoints.net/U+1F517 - with variation selector https://graphemica.com/FE0E */ -a.anchor-section::before{content: '\01F517\00FE0E';font-size: 20px;} -/* deactivate underline for link symbol */ -a.anchor-section:hover {text-decoration: none;} diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections.css b/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections.css deleted file mode 100644 index 041905f..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections.css +++ /dev/null @@ -1,4 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section {margin-left: 10px; visibility: hidden; color: inherit;} -.hasAnchor:hover a.anchor-section {visibility: visible;} -ul > li > .anchor-section {display: none;} diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections.js b/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections.js deleted file mode 100644 index fee005d..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/anchor-sections-1.1.0/anchor-sections.js +++ /dev/null @@ -1,11 +0,0 @@ -document.addEventListener('DOMContentLoaded', function () { - // If section divs is used, we need to put the anchor in the child header - const headers = document.querySelectorAll("div.hasAnchor.section[class*='level'] > :first-child") - - headers.forEach(function (x) { - // Add to the header node - if (!x.classList.contains('hasAnchor')) x.classList.add('hasAnchor') - // Remove from the section or div created by Pandoc - x.parentElement.classList.remove('hasAnchor') - }) -}) diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.13/header-attrs.js b/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.13/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.13/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.14/header-attrs.js b/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.14/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.14/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.22/header-attrs.js b/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.22/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.22/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.7/header-attrs.js b/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.7/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.0-0.0_files/header-attrs-2.7/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.4-0.0.html b/docs/articles/releases/randomNames-1.4-0.0.html deleted file mode 100644 index 684911e..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • randomNames 1.4-0.0 - - - - - - - - -
-
- - - -
- -
-
- - - - -
-

This is 1.4 release of the randomNames package. This -release fixes some bugs found by users (thanks!) and updates the web-documentationwebsite -associated with the package.

-

Feel free to drop me a line with any comments, feature requests, or -ideas. And give us a shout-out Tweet using the Twitter button in the -upper right!

-
-
- - - -
- - -
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- -
-
- - - diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css b/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css deleted file mode 100644 index b563ec9..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css +++ /dev/null @@ -1,2 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section::before {content: '#';font-size: 80%;} diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css b/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css deleted file mode 100644 index a24ab75..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css +++ /dev/null @@ -1,8 +0,0 @@ -/* Styles for section anchors content */ -/* From https://icons.getbootstrap.com/icons/link-45deg/ - Licence: https://github.com/twbs/icons/blob/main/LICENSE.md */ - -a.anchor-section:before { - display: inline-block; - content: url("data:image/svg+xml,"); -} diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css b/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css deleted file mode 100644 index 952f956..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css +++ /dev/null @@ -1,6 +0,0 @@ -/* Styles for section anchors content */ -/* Link symbol : https://codepoints.net/U+1F517 - with variation selector https://graphemica.com/FE0E */ -a.anchor-section::before{content: '\01F517\00FE0E';font-size: 20px;} -/* deactivate underline for link symbol */ -a.anchor-section:hover {text-decoration: none;} diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections.css b/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections.css deleted file mode 100644 index 041905f..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections.css +++ /dev/null @@ -1,4 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section {margin-left: 10px; visibility: hidden; color: inherit;} -.hasAnchor:hover a.anchor-section {visibility: visible;} -ul > li > .anchor-section {display: none;} diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections.js b/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections.js deleted file mode 100644 index fee005d..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/anchor-sections-1.1.0/anchor-sections.js +++ /dev/null @@ -1,11 +0,0 @@ -document.addEventListener('DOMContentLoaded', function () { - // If section divs is used, we need to put the anchor in the child header - const headers = document.querySelectorAll("div.hasAnchor.section[class*='level'] > :first-child") - - headers.forEach(function (x) { - // Add to the header node - if (!x.classList.contains('hasAnchor')) x.classList.add('hasAnchor') - // Remove from the section or div created by Pandoc - x.parentElement.classList.remove('hasAnchor') - }) -}) diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.13/header-attrs.js b/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.13/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.13/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.14/header-attrs.js b/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.14/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.14/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.22/header-attrs.js b/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.22/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.22/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.7/header-attrs.js b/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.7/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.4-0.0_files/header-attrs-2.7/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.5-0.0.html b/docs/articles/releases/randomNames-1.5-0.0.html deleted file mode 100644 index c92ff3d..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • randomNames 1.5-0.0 - - - - - - - - -
-
- - - -
- -
-
- - - - -
-

This is 1.5 release of the randomNames package. This -release fixes some white space that appeared at the front of a few of -the first names found by users (thanks!). It also updates the web-documentationwebsite -associated with the package.

-

Feel free to drop me a line with any comments, feature requests, or -ideas. And give us a shout-out Tweet using the Twitter button in the -upper right!

-
-
- - - -
- - -
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- -
-
- - - diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css b/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css deleted file mode 100644 index b563ec9..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-hash.css +++ /dev/null @@ -1,2 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section::before {content: '#';font-size: 80%;} diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css b/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css deleted file mode 100644 index a24ab75..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-icon.css +++ /dev/null @@ -1,8 +0,0 @@ -/* Styles for section anchors content */ -/* From https://icons.getbootstrap.com/icons/link-45deg/ - Licence: https://github.com/twbs/icons/blob/main/LICENSE.md */ - -a.anchor-section:before { - display: inline-block; - content: url("data:image/svg+xml,"); -} diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css b/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css deleted file mode 100644 index 952f956..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections-symbol.css +++ /dev/null @@ -1,6 +0,0 @@ -/* Styles for section anchors content */ -/* Link symbol : https://codepoints.net/U+1F517 - with variation selector https://graphemica.com/FE0E */ -a.anchor-section::before{content: '\01F517\00FE0E';font-size: 20px;} -/* deactivate underline for link symbol */ -a.anchor-section:hover {text-decoration: none;} diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections.css b/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections.css deleted file mode 100644 index 041905f..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections.css +++ /dev/null @@ -1,4 +0,0 @@ -/* Styles for section anchors */ -a.anchor-section {margin-left: 10px; visibility: hidden; color: inherit;} -.hasAnchor:hover a.anchor-section {visibility: visible;} -ul > li > .anchor-section {display: none;} diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections.js b/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections.js deleted file mode 100644 index fee005d..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/anchor-sections-1.1.0/anchor-sections.js +++ /dev/null @@ -1,11 +0,0 @@ -document.addEventListener('DOMContentLoaded', function () { - // If section divs is used, we need to put the anchor in the child header - const headers = document.querySelectorAll("div.hasAnchor.section[class*='level'] > :first-child") - - headers.forEach(function (x) { - // Add to the header node - if (!x.classList.contains('hasAnchor')) x.classList.add('hasAnchor') - // Remove from the section or div created by Pandoc - x.parentElement.classList.remove('hasAnchor') - }) -}) diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.13/header-attrs.js b/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.13/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.13/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.14/header-attrs.js b/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.14/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.14/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.22/header-attrs.js b/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.22/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.22/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.7/header-attrs.js b/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.7/header-attrs.js deleted file mode 100644 index dd57d92..0000000 --- a/docs/articles/releases/randomNames-1.5-0.0_files/header-attrs-2.7/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/authors.html b/docs/authors.html deleted file mode 100644 index a5234a1..0000000 --- a/docs/authors.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Authors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - - - -
- -
- - -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/docs/img/REPO_CARD_image.png b/docs/img/REPO_CARD_image.png deleted file mode 100644 index 7360f3e..0000000 Binary files a/docs/img/REPO_CARD_image.png and /dev/null differ diff --git a/docs/img/favicon.png b/docs/img/favicon.png deleted file mode 100644 index 5291903..0000000 Binary files a/docs/img/favicon.png and /dev/null differ diff --git a/docs/img/link.svg b/docs/img/link.svg deleted file mode 100644 index 88ad827..0000000 --- a/docs/img/link.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/docs/img/logo.png b/docs/img/logo.png deleted file mode 100644 index 5291903..0000000 Binary files a/docs/img/logo.png and /dev/null differ diff --git a/docs/img/logo.svg b/docs/img/logo.svg deleted file mode 100644 index 0eeae51..0000000 --- a/docs/img/logo.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - CFA_Logo_WHITE_BACKGROUND - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/img/logo_grey.png b/docs/img/logo_grey.png deleted file mode 100644 index 705f093..0000000 Binary files a/docs/img/logo_grey.png and /dev/null differ diff --git a/docs/img/tocBullet.svg b/docs/img/tocBullet.svg deleted file mode 100644 index 59c34fa..0000000 --- a/docs/img/tocBullet.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index f984373..0000000 --- a/docs/index.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Generate Random Given and Surnames - - - - - - - - -
-
- - - -
-
- -
- - -
-
-

-Overview

-

The randomNames package contains a single function -randomNames which creates random gender/ethnicity correct -first and/or last names where names are proportionally sampled based -upon their frequency in a large scale database.

-
-
-

-Installation

-
-

-From CRAN -

-

To install the latest stable release of randomNames -from CRAN

-
> install.packages("randomNames")
-
-
-

-From Github -

-

To install the development release of randomNames -from GitHub:

-
> devtools::install_github("CenterForAssessment/randomNames")
-
-
-
-

-Usage

-
> randomNames(5) ## 5 last, first names
-[1] "Mossberg, Cassie"  "Mendiaz, Victoria" "Miner, Cassidy"    "Austin, Brook"     "Babcock, Lloyd"
-
-> randomNames(5, gender=1) ## 5 female last, first names
-[1] "Bruckner, Birva"   "Caringer, Madelyn" "Mendoza, Rebecca"  "el-Haque, Jaleela" "Williams, Miranda"
-
-> randomNames(5, gender=0) ## 5 male last, first names
-[1] "al-Salam, Rida"    "Debus, Kai"        "al-Aly, Jaabir"    "Garces, Markus"    "Robertson, Trevor"
-
-> randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first names
-[1] "Bashir, Shaquille" "Ursery, Keilan"    "Marlow, Marvin"    "Bell, Daishavon"   "Hammond, Kyle"
-
-> randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern, female first names
-[1] "Jawhara"  "Raaniya"  "Ghaada"   "Ghazaala" "Raabia"
-
- -
-

-Contributors

-

The randomNames Package is crafted with ❤️ by:

- -

I love feedback and am happy to answer questions.

-
- -
- - -
- - -
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- -
-
- - - diff --git a/docs/jquery.sticky-kit.min.js b/docs/jquery.sticky-kit.min.js deleted file mode 100644 index e2a3c6d..0000000 --- a/docs/jquery.sticky-kit.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - 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("
"))&&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"))),eb&&!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 - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Change log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
- -
- - -
-
-

-randomNames 1.5-0.0

-
    -
  • Fixed names with embedded spaces as the first character.
  • -
-
-
-

-randomNames 1.4-0.0

-
    -
  • Fixed issue with NAs embedded in ethnicity and gender returning -wrong data later.
  • -
-
-
-

-randomNames 1.0-0.0

-
    -
  • Shortened and improved the title of the package.
  • -
-
-
-

-randomNames 1.0-0.0

-
    -
  • Changed numbering of releases from 3 to 4 digits.
  • -
  • Created real vignette and fixed everything up for a nice 1.0-0.0 -release.
  • -
-
-
-

-randomNames 0.6-0

-
    -
  • Converted NEWS to NEWS.md and added that to repo.
  • -
-
-
-

-randomNames 0.5-0

-
    -
  • Adding vignette and building website.
  • -
-
-
-

-randomNames 0.4-0

-
    -
  • Added Middle-Eastern names (ethnicity=6) to data base.
  • -
-
-
-

-randomNames 0.3-0

-
    -
  • Fixed bug leading to incorrect re-ordering of results so that they -didn't match input.
  • -
-
-
-

-randomNames 0.2-0

-
    -
  • Cleaned up documentation.
  • -
  • Fixed GitHub pull requests.
  • -
-
-
-

-randomNames 0.0-7

-
    -
  • Changed randomNamesData to environment.
  • -
-
-
-

-randomNames 0.0-6

-
    -
  • Changed DESCRIPTION to Import data.table.
  • -
-
-
-

-randomNames 0.0-5

-
    -
  • Fixed key to accomodate changes in data.table 1.7.8.
  • -
-
-
-

-randomNames 0.0-4

-
    -
  • Added NAMESPACE.
  • -
-
-
-

-randomNames 0.0-3

-
    -
  • Modified function to adapt to improvements in data.table.
  • -
-
-
-

-randomNames 0.0-2

-
    -
  • Refined function to recode supplied gender and ethnicity -argument/variables if not in function appropriate form.
  • -
-
-
-

-randomNames 0.0-1

-
    -
  • Package Released.
  • -
-
-
-
- - - -
- -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/docs/packagePages.css b/docs/packagePages.css deleted file mode 100644 index 667651c..0000000 --- a/docs/packagePages.css +++ /dev/null @@ -1,6527 +0,0 @@ -@charset "UTF-8"; -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -@import url("https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400,700|Source+Sans+Pro:300,400,700"); -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; } - -body { - margin: 0; } - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; } - -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; } - -audio:not([controls]) { - display: none; - height: 0; } - -[hidden], -template { - display: none; } - -a { - background-color: transparent; } - -a:active, -a:hover { - outline: 0; } - -abbr[title] { - border-bottom: 1px dotted; } - -b, -strong { - font-weight: bold; } - -dfn { - font-style: italic; } - -h1 { - font-size: 2em; - margin: 0.67em 0; } - -mark { - background: #ff0; - color: #000; } - -small { - font-size: 80%; } - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -img { - border: 0; } - -svg:not(:root) { - overflow: hidden; } - -figure { - margin: 1em 40px; } - -hr { - box-sizing: content-box; - height: 0; } - -pre { - overflow: auto; } - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; } - -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; } - -button { - overflow: visible; } - -button, -select { - text-transform: none; } - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; } - -button[disabled], -html input[disabled] { - cursor: default; } - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; } - -input { - line-height: normal; } - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; } - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; } - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; } - -legend { - border: 0; - padding: 0; } - -textarea { - overflow: auto; } - -optgroup { - font-weight: bold; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -td, -th { - padding: 0; } - -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; } - - a, - a:visited { - text-decoration: underline; } - - a[href]:after { - content: " (" attr(href) ")"; } - - abbr[title]:after { - content: " (" attr(title) ")"; } - - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; } - - thead { - display: table-header-group; } - - tr, - img { - page-break-inside: avoid; } - - img { - max-width: 100% !important; } - - p, - h2, - h3 { - orphans: 3; - widows: 3; } - - h2, - h3 { - page-break-after: avoid; } - - .navbar { - display: none; } - - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; } - - .label { - border: 1px solid #000; } - - .table { - border-collapse: collapse !important; } - .table td, - .table th { - background-color: #fff !important; } - - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; } } -@font-face { - font-family: 'Glyphicons Halflings'; - src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot"); - src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); } -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -.glyphicon-asterisk:before { - content: "\002a"; } - -.glyphicon-plus:before { - content: "\002b"; } - -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; } - -.glyphicon-minus:before { - content: "\2212"; } - -.glyphicon-cloud:before { - content: "\2601"; } - -.glyphicon-envelope:before { - content: "\2709"; } - -.glyphicon-pencil:before { - content: "\270f"; } - -.glyphicon-glass:before { - content: "\e001"; } - -.glyphicon-music:before { - content: "\e002"; } - -.glyphicon-search:before { - content: "\e003"; } - -.glyphicon-heart:before { - content: "\e005"; } - -.glyphicon-star:before { - content: "\e006"; } - -.glyphicon-star-empty:before { - content: "\e007"; } - -.glyphicon-user:before { - content: "\e008"; } - -.glyphicon-film:before { - content: "\e009"; } - -.glyphicon-th-large:before { - content: "\e010"; } - -.glyphicon-th:before { - content: "\e011"; } - -.glyphicon-th-list:before { - content: "\e012"; } - -.glyphicon-ok:before { - content: "\e013"; } - -.glyphicon-remove:before { - content: "\e014"; } - -.glyphicon-zoom-in:before { - content: "\e015"; } - -.glyphicon-zoom-out:before { - content: "\e016"; } - -.glyphicon-off:before { - content: "\e017"; } - -.glyphicon-signal:before { - content: "\e018"; } - -.glyphicon-cog:before { - content: "\e019"; } - -.glyphicon-trash:before { - content: "\e020"; } - -.glyphicon-home:before { - content: "\e021"; } - -.glyphicon-file:before { - content: "\e022"; } - -.glyphicon-time:before { - content: "\e023"; } - -.glyphicon-road:before { - content: "\e024"; } - -.glyphicon-download-alt:before { - content: "\e025"; } - -.glyphicon-download:before { - content: "\e026"; } - -.glyphicon-upload:before { - content: "\e027"; } - -.glyphicon-inbox:before { - content: "\e028"; } - -.glyphicon-play-circle:before { - content: "\e029"; } - -.glyphicon-repeat:before { - content: "\e030"; } - -.glyphicon-refresh:before { - content: "\e031"; } - -.glyphicon-list-alt:before { - content: "\e032"; } - -.glyphicon-lock:before { - content: "\e033"; } - -.glyphicon-flag:before { - content: "\e034"; } - -.glyphicon-headphones:before { - content: "\e035"; } - -.glyphicon-volume-off:before { - content: "\e036"; } - -.glyphicon-volume-down:before { - content: "\e037"; } - -.glyphicon-volume-up:before { - content: "\e038"; } - -.glyphicon-qrcode:before { - content: "\e039"; } - -.glyphicon-barcode:before { - content: "\e040"; } - -.glyphicon-tag:before { - content: "\e041"; } - -.glyphicon-tags:before { - content: "\e042"; } - -.glyphicon-book:before { - content: "\e043"; } - -.glyphicon-bookmark:before { - content: "\e044"; } - -.glyphicon-print:before { - content: "\e045"; } - -.glyphicon-camera:before { - content: "\e046"; } - -.glyphicon-font:before { - content: "\e047"; } - -.glyphicon-bold:before { - content: "\e048"; } - -.glyphicon-italic:before { - content: "\e049"; } - -.glyphicon-text-height:before { - content: "\e050"; } - -.glyphicon-text-width:before { - content: "\e051"; } - -.glyphicon-align-left:before { - content: "\e052"; } - -.glyphicon-align-center:before { - content: "\e053"; } - -.glyphicon-align-right:before { - content: "\e054"; } - -.glyphicon-align-justify:before { - content: "\e055"; } - -.glyphicon-list:before { - content: "\e056"; } - -.glyphicon-indent-left:before { - content: "\e057"; } - -.glyphicon-indent-right:before { - content: "\e058"; } - -.glyphicon-facetime-video:before { - content: "\e059"; } - -.glyphicon-picture:before { - content: "\e060"; } - -.glyphicon-map-marker:before { - content: "\e062"; } - -.glyphicon-adjust:before { - content: "\e063"; } - -.glyphicon-tint:before { - content: "\e064"; } - -.glyphicon-edit:before { - content: "\e065"; } - -.glyphicon-share:before { - content: "\e066"; } - -.glyphicon-check:before { - content: "\e067"; } - -.glyphicon-move:before { - content: "\e068"; } - -.glyphicon-step-backward:before { - content: "\e069"; } - -.glyphicon-fast-backward:before { - content: "\e070"; } - -.glyphicon-backward:before { - content: "\e071"; } - -.glyphicon-play:before { - content: "\e072"; } - -.glyphicon-pause:before { - content: "\e073"; } - -.glyphicon-stop:before { - content: "\e074"; } - -.glyphicon-forward:before { - content: "\e075"; } - -.glyphicon-fast-forward:before { - content: "\e076"; } - -.glyphicon-step-forward:before { - content: "\e077"; } - -.glyphicon-eject:before { - content: "\e078"; } - -.glyphicon-chevron-left:before { - content: "\e079"; } - -.glyphicon-chevron-right:before { - content: "\e080"; } - -.glyphicon-plus-sign:before { - content: "\e081"; } - -.glyphicon-minus-sign:before { - content: "\e082"; } - -.glyphicon-remove-sign:before { - content: "\e083"; } - -.glyphicon-ok-sign:before { - content: "\e084"; } - -.glyphicon-question-sign:before { - content: "\e085"; } - -.glyphicon-info-sign:before { - content: "\e086"; } - -.glyphicon-screenshot:before { - content: "\e087"; } - -.glyphicon-remove-circle:before { - content: "\e088"; } - -.glyphicon-ok-circle:before { - content: "\e089"; } - -.glyphicon-ban-circle:before { - content: "\e090"; } - -.glyphicon-arrow-left:before { - content: "\e091"; } - -.glyphicon-arrow-right:before { - content: "\e092"; } - -.glyphicon-arrow-up:before { - content: "\e093"; } - -.glyphicon-arrow-down:before { - content: "\e094"; } - -.glyphicon-share-alt:before { - content: "\e095"; } - -.glyphicon-resize-full:before { - content: "\e096"; } - -.glyphicon-resize-small:before { - content: "\e097"; } - -.glyphicon-exclamation-sign:before { - content: "\e101"; } - -.glyphicon-gift:before { - content: "\e102"; } - -.glyphicon-leaf:before { - content: "\e103"; } - -.glyphicon-fire:before { - content: "\e104"; } - -.glyphicon-eye-open:before { - content: "\e105"; } - -.glyphicon-eye-close:before { - content: "\e106"; } - -.glyphicon-warning-sign:before { - content: "\e107"; } - -.glyphicon-plane:before { - content: "\e108"; } - -.glyphicon-calendar:before { - content: "\e109"; } - -.glyphicon-random:before { - content: "\e110"; } - -.glyphicon-comment:before { - content: "\e111"; } - -.glyphicon-magnet:before { - content: "\e112"; } - -.glyphicon-chevron-up:before { - content: "\e113"; } - -.glyphicon-chevron-down:before { - content: "\e114"; } - -.glyphicon-retweet:before { - content: "\e115"; } - -.glyphicon-shopping-cart:before { - content: "\e116"; } - -.glyphicon-folder-close:before { - content: "\e117"; } - -.glyphicon-folder-open:before { - content: "\e118"; } - -.glyphicon-resize-vertical:before { - content: "\e119"; } - -.glyphicon-resize-horizontal:before { - content: "\e120"; } - -.glyphicon-hdd:before { - content: "\e121"; } - -.glyphicon-bullhorn:before { - content: "\e122"; } - -.glyphicon-bell:before { - content: "\e123"; } - -.glyphicon-certificate:before { - content: "\e124"; } - -.glyphicon-thumbs-up:before { - content: "\e125"; } - -.glyphicon-thumbs-down:before { - content: "\e126"; } - -.glyphicon-hand-right:before { - content: "\e127"; } - -.glyphicon-hand-left:before { - content: "\e128"; } - -.glyphicon-hand-up:before { - content: "\e129"; } - -.glyphicon-hand-down:before { - content: "\e130"; } - -.glyphicon-circle-arrow-right:before { - content: "\e131"; } - -.glyphicon-circle-arrow-left:before { - content: "\e132"; } - -.glyphicon-circle-arrow-up:before { - content: "\e133"; } - -.glyphicon-circle-arrow-down:before { - content: "\e134"; } - -.glyphicon-globe:before { - content: "\e135"; } - -.glyphicon-wrench:before { - content: "\e136"; } - -.glyphicon-tasks:before { - content: "\e137"; } - -.glyphicon-filter:before { - content: "\e138"; } - -.glyphicon-briefcase:before { - content: "\e139"; } - -.glyphicon-fullscreen:before { - content: "\e140"; } - -.glyphicon-dashboard:before { - content: "\e141"; } - -.glyphicon-paperclip:before { - content: "\e142"; } - -.glyphicon-heart-empty:before { - content: "\e143"; } - -.glyphicon-link:before { - content: "\e144"; } - -.glyphicon-phone:before { - content: "\e145"; } - -.glyphicon-pushpin:before { - content: "\e146"; } - -.glyphicon-usd:before { - content: "\e148"; } - -.glyphicon-gbp:before { - content: "\e149"; } - -.glyphicon-sort:before { - content: "\e150"; } - -.glyphicon-sort-by-alphabet:before { - content: "\e151"; } - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; } - -.glyphicon-sort-by-order:before { - content: "\e153"; } - -.glyphicon-sort-by-order-alt:before { - content: "\e154"; } - -.glyphicon-sort-by-attributes:before { - content: "\e155"; } - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; } - -.glyphicon-unchecked:before { - content: "\e157"; } - -.glyphicon-expand:before { - content: "\e158"; } - -.glyphicon-collapse-down:before { - content: "\e159"; } - -.glyphicon-collapse-up:before { - content: "\e160"; } - -.glyphicon-log-in:before { - content: "\e161"; } - -.glyphicon-flash:before { - content: "\e162"; } - -.glyphicon-log-out:before { - content: "\e163"; } - -.glyphicon-new-window:before { - content: "\e164"; } - -.glyphicon-record:before { - content: "\e165"; } - -.glyphicon-save:before { - content: "\e166"; } - -.glyphicon-open:before { - content: "\e167"; } - -.glyphicon-saved:before { - content: "\e168"; } - -.glyphicon-import:before { - content: "\e169"; } - -.glyphicon-export:before { - content: "\e170"; } - -.glyphicon-send:before { - content: "\e171"; } - -.glyphicon-floppy-disk:before { - content: "\e172"; } - -.glyphicon-floppy-saved:before { - content: "\e173"; } - -.glyphicon-floppy-remove:before { - content: "\e174"; } - -.glyphicon-floppy-save:before { - content: "\e175"; } - -.glyphicon-floppy-open:before { - content: "\e176"; } - -.glyphicon-credit-card:before { - content: "\e177"; } - -.glyphicon-transfer:before { - content: "\e178"; } - -.glyphicon-cutlery:before { - content: "\e179"; } - -.glyphicon-header:before { - content: "\e180"; } - -.glyphicon-compressed:before { - content: "\e181"; } - -.glyphicon-earphone:before { - content: "\e182"; } - -.glyphicon-phone-alt:before { - content: "\e183"; } - -.glyphicon-tower:before { - content: "\e184"; } - -.glyphicon-stats:before { - content: "\e185"; } - -.glyphicon-sd-video:before { - content: "\e186"; } - -.glyphicon-hd-video:before { - content: "\e187"; } - -.glyphicon-subtitles:before { - content: "\e188"; } - -.glyphicon-sound-stereo:before { - content: "\e189"; } - -.glyphicon-sound-dolby:before { - content: "\e190"; } - -.glyphicon-sound-5-1:before { - content: "\e191"; } - -.glyphicon-sound-6-1:before { - content: "\e192"; } - -.glyphicon-sound-7-1:before { - content: "\e193"; } - -.glyphicon-copyright-mark:before { - content: "\e194"; } - -.glyphicon-registration-mark:before { - content: "\e195"; } - -.glyphicon-cloud-download:before { - content: "\e197"; } - -.glyphicon-cloud-upload:before { - content: "\e198"; } - -.glyphicon-tree-conifer:before { - content: "\e199"; } - -.glyphicon-tree-deciduous:before { - content: "\e200"; } - -.glyphicon-cd:before { - content: "\e201"; } - -.glyphicon-save-file:before { - content: "\e202"; } - -.glyphicon-open-file:before { - content: "\e203"; } - -.glyphicon-level-up:before { - content: "\e204"; } - -.glyphicon-copy:before { - content: "\e205"; } - -.glyphicon-paste:before { - content: "\e206"; } - -.glyphicon-alert:before { - content: "\e209"; } - -.glyphicon-equalizer:before { - content: "\e210"; } - -.glyphicon-king:before { - content: "\e211"; } - -.glyphicon-queen:before { - content: "\e212"; } - -.glyphicon-pawn:before { - content: "\e213"; } - -.glyphicon-bishop:before { - content: "\e214"; } - -.glyphicon-knight:before { - content: "\e215"; } - -.glyphicon-baby-formula:before { - content: "\e216"; } - -.glyphicon-tent:before { - content: "\26fa"; } - -.glyphicon-blackboard:before { - content: "\e218"; } - -.glyphicon-bed:before { - content: "\e219"; } - -.glyphicon-apple:before { - content: "\f8ff"; } - -.glyphicon-erase:before { - content: "\e221"; } - -.glyphicon-hourglass:before { - content: "\231b"; } - -.glyphicon-lamp:before { - content: "\e223"; } - -.glyphicon-duplicate:before { - content: "\e224"; } - -.glyphicon-piggy-bank:before { - content: "\e225"; } - -.glyphicon-scissors:before { - content: "\e226"; } - -.glyphicon-bitcoin:before { - content: "\e227"; } - -.glyphicon-btc:before { - content: "\e227"; } - -.glyphicon-xbt:before { - content: "\e227"; } - -.glyphicon-yen:before { - content: "\00a5"; } - -.glyphicon-jpy:before { - content: "\00a5"; } - -.glyphicon-ruble:before { - content: "\20bd"; } - -.glyphicon-rub:before { - content: "\20bd"; } - -.glyphicon-scale:before { - content: "\e230"; } - -.glyphicon-ice-lolly:before { - content: "\e231"; } - -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; } - -.glyphicon-education:before { - content: "\e233"; } - -.glyphicon-option-horizontal:before { - content: "\e234"; } - -.glyphicon-option-vertical:before { - content: "\e235"; } - -.glyphicon-menu-hamburger:before { - content: "\e236"; } - -.glyphicon-modal-window:before { - content: "\e237"; } - -.glyphicon-oil:before { - content: "\e238"; } - -.glyphicon-grain:before { - content: "\e239"; } - -.glyphicon-sunglasses:before { - content: "\e240"; } - -.glyphicon-text-size:before { - content: "\e241"; } - -.glyphicon-text-color:before { - content: "\e242"; } - -.glyphicon-text-background:before { - content: "\e243"; } - -.glyphicon-object-align-top:before { - content: "\e244"; } - -.glyphicon-object-align-bottom:before { - content: "\e245"; } - -.glyphicon-object-align-horizontal:before { - content: "\e246"; } - -.glyphicon-object-align-left:before { - content: "\e247"; } - -.glyphicon-object-align-vertical:before { - content: "\e248"; } - -.glyphicon-object-align-right:before { - content: "\e249"; } - -.glyphicon-triangle-right:before { - content: "\e250"; } - -.glyphicon-triangle-left:before { - content: "\e251"; } - -.glyphicon-triangle-bottom:before { - content: "\e252"; } - -.glyphicon-triangle-top:before { - content: "\e253"; } - -.glyphicon-console:before { - content: "\e254"; } - -.glyphicon-superscript:before { - content: "\e255"; } - -.glyphicon-subscript:before { - content: "\e256"; } - -.glyphicon-menu-left:before { - content: "\e257"; } - -.glyphicon-menu-right:before { - content: "\e258"; } - -.glyphicon-menu-down:before { - content: "\e259"; } - -.glyphicon-menu-up:before { - content: "\e260"; } - -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -html { - font-size: 10px; - -webkit-tap-highlight-color: transparent; } - -body { - font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 15px; - line-height: 1.846; - color: #444; - background-color: #fff; } - -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; } - -a { - color: #7c7c7c; - text-decoration: none; - transition: all 0.2s ease-in-out; } - -a:hover, a:focus { - color: black; - text-decoration: none; } - a:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; } - -figure { - margin: 0; } - -img { - vertical-align: middle; } - -.img-responsive { - display: block; - max-width: 100%; - height: auto; } - -.img-rounded { - border-radius: 3px; } - -.img-author { - clip-path: circle(10px at center); } - -.img-thumbnail { - padding: 4px; - line-height: 1.846; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 3px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; } - -.img-circle { - border-radius: 50%; } - -hr { - margin-top: 27px; - margin-bottom: 27px; - border: 0; - border-top: 1px solid #eeeeee; } - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; } - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; } - -[role="button"] { - cursor: pointer; } - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - font-family: inherit; - font-weight: 300; - line-height: 1.1; - color: #444; } - h1 small, - h1 .small, h2 small, - h2 .small, h3 small, - h3 .small, h4 small, - h4 .small, h5 small, - h5 .small, h6 small, - h6 .small, - .h1 small, - .h1 .small, .h2 small, - .h2 .small, .h3 small, - .h3 .small, .h4 small, - .h4 .small, .h5 small, - .h5 .small, .h6 small, - .h6 .small { - font-weight: normal; - line-height: 1; - color: #bbb; } - -h1, .h1, -h2, .h2, -h3, .h3 { - margin-top: 27px; - margin-bottom: 13.5px; } - h1 small, - h1 .small, .h1 small, - .h1 .small, - h2 small, - h2 .small, .h2 small, - .h2 .small, - h3 small, - h3 .small, .h3 small, - .h3 .small { - font-size: 65%; } - -h4, .h4, -h5, .h5, -h6, .h6 { - margin-top: 13.5px; - margin-bottom: 13.5px; } - h4 small, - h4 .small, .h4 small, - .h4 .small, - h5 small, - h5 .small, .h5 small, - .h5 .small, - h6 small, - h6 .small, .h6 small, - .h6 .small { - font-size: 75%; } - -h1, .h1 { - font-size: 32px; } - -h2, .h2 { - font-size: 24px; } - -h3, .h3 { - font-size: 20px; } - -h4, .h4 { - font-size: 16px; } - -h5, .h5 { - font-size: 16px; } - -h6, .h6 { - font-size: 16px; } - -p { - margin: 0 0 13.5px; } - -.lead { - margin-bottom: 27px; - font-size: 17px; - font-weight: 300; - line-height: 1.4; } - @media (min-width: 768px) { - .lead { - font-size: 22.5px; } } - -small, -.small { - font-size: 86%; } - -mark, -.mark { - background-color: #ffe0b2; - padding: .2em; } - -.text-left { - text-align: left; } - -.text-right { - text-align: right; } - -.text-center { - text-align: center; } - -.text-justify { - text-align: justify; } - -.text-nowrap { - white-space: nowrap; } - -.text-lowercase { - text-transform: lowercase; } - -.text-uppercase, .initialism { - text-transform: uppercase; } - -.text-capitalize { - text-transform: capitalize; } - -.text-muted { - color: #bbb; } - -.text-primary { - color: #778; } - -a.text-primary:hover, -a.text-primary:focus { - color: #114; } - -.text-success { - color: #4CAF50; } - -a.text-success:hover, -a.text-success:focus { - color: #3d8b40; } - -.text-info { - color: #9C27B0; } - -a.text-info:hover, -a.text-info:focus { - color: #771e86; } - -.text-warning { - color: #ff9800; } - -a.text-warning:hover, -a.text-warning:focus { - color: #cc7a00; } - -.text-danger { - color: #e51c23; } - -a.text-danger:hover, -a.text-danger:focus { - color: #b9151b; } - -.bg-primary { - color: #fff; } - -.bg-primary { - background-color: #778; } - -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #3084d2; } - -.bg-success { - background-color: #dff0d8; } - -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; } - -.bg-info { - background-color: #e1bee7; } - -a.bg-info:hover, -a.bg-info:focus { - background-color: #d099d9; } - -.bg-warning { - background-color: #ffe0b2; } - -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #ffcb7f; } - -.bg-danger { - background-color: #f9bdbb; } - -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #f5908c; } - -.page-header { - padding-bottom: 12.5px; - margin: 54px 0 27px; - border-bottom: 1px solid #eeeeee; } - -ul, -ol { - margin-top: 0; - margin-bottom: 13.5px; } - ul ul, - ul ol, - ol ul, - ol ol { - margin-bottom: 0; } - -.list-unstyled { - padding-left: 0; - list-style: none; } - -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; } - .list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; } - -dl { - margin-top: 0; - margin-bottom: 27px; } - -dt, -dd { - line-height: 1.846; } - -dt { - font-weight: bold; } - -dd { - margin-left: 0; } - -.dl-horizontal dd:before, .dl-horizontal dd:after { - content: " "; - display: table; } -.dl-horizontal dd:after { - clear: both; } -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } - .dl-horizontal dd { - margin-left: 180px; } } - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #bbb; } - -.initialism { - font-size: 90%; } - -blockquote { - padding: 13.5px 27px; - margin: 0 0 27px; - font-size: 18.75px; - border-left: 5px solid #eeeeee; } - blockquote p:last-child, - blockquote ul:last-child, - blockquote ol:last-child { - margin-bottom: 0; } - blockquote footer, - blockquote small, - blockquote .small { - display: block; - font-size: 80%; - line-height: 1.846; - color: #bbb; } - blockquote footer:before, - blockquote small:before, - blockquote .small:before { - content: '\2014 \00A0'; } - -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; } - .blockquote-reverse footer:before, - .blockquote-reverse small:before, - .blockquote-reverse .small:before, - blockquote.pull-right footer:before, - blockquote.pull-right small:before, - blockquote.pull-right .small:before { - content: ''; } - .blockquote-reverse footer:after, - .blockquote-reverse small:after, - .blockquote-reverse .small:after, - blockquote.pull-right footer:after, - blockquote.pull-right small:after, - blockquote.pull-right .small:after { - content: '\00A0 \2014'; } - -address { - margin-bottom: 27px; - font-style: normal; - line-height: 1.846; } - -code, -kbd, -pre, -samp { - font-family: "Source Code Pro", Menlo, Monaco, Consolas, "Courier New", monospace; } - -code { - padding: 1px 4px; - font-size: 90%; - color: black; - background-color: #f5f5f5; - border-radius: 2px; } - -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } - kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; } - -pre { - display: block; - padding: 10px; - margin: 0 5px 13.5px 5px; - font-size: 13px; - line-height: 1.4; - word-break: break-all; - word-wrap: break-word; - color: #212121; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 3px; } - pre code { - padding: 0; - font-size: 13px; - color: inherit; - background-color: transparent; - border-radius: 0; - overflow-x: auto; } - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; } - -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; } - .container:before, .container:after { - content: " "; - display: table; } - .container:after { - clear: both; } - @media (min-width: 768px) { - .container { - width: 750px; } } - @media (min-width: 992px) { - .container { - width: 970px; } } - @media (min-width: 1200px) { - .container { - width: 1170px; } } - -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; } - .container-fluid:before, .container-fluid:after { - content: " "; - display: table; } - .container-fluid:after { - clear: both; } - -.row { - margin-left: -15px; - margin-right: -15px; - margin-top: 20px; } - .row:before, .row:after { - content: " "; - display: table; } - .row:after { - clear: both; } - -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; } - -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; } - -.col-xs-1 { - width: 8.33333%; } - -.col-xs-2 { - width: 16.66667%; } - -.col-xs-3 { - width: 25%; } - -.col-xs-4 { - width: 33.33333%; } - -.col-xs-5 { - width: 41.66667%; } - -.col-xs-6 { - width: 50%; } - -.col-xs-7 { - width: 58.33333%; } - -.col-xs-8 { - width: 66.66667%; } - -.col-xs-9 { - width: 75%; } - -.col-xs-10 { - width: 83.33333%; } - -.col-xs-11 { - width: 91.66667%; } - -.col-xs-12 { - width: 100%; } - -.col-xs-pull-0 { - right: auto; } - -.col-xs-pull-1 { - right: 8.33333%; } - -.col-xs-pull-2 { - right: 16.66667%; } - -.col-xs-pull-3 { - right: 25%; } - -.col-xs-pull-4 { - right: 33.33333%; } - -.col-xs-pull-5 { - right: 41.66667%; } - -.col-xs-pull-6 { - right: 50%; } - -.col-xs-pull-7 { - right: 58.33333%; } - -.col-xs-pull-8 { - right: 66.66667%; } - -.col-xs-pull-9 { - right: 75%; } - -.col-xs-pull-10 { - right: 83.33333%; } - -.col-xs-pull-11 { - right: 91.66667%; } - -.col-xs-pull-12 { - right: 100%; } - -.col-xs-push-0 { - left: auto; } - -.col-xs-push-1 { - left: 8.33333%; } - -.col-xs-push-2 { - left: 16.66667%; } - -.col-xs-push-3 { - left: 25%; } - -.col-xs-push-4 { - left: 33.33333%; } - -.col-xs-push-5 { - left: 41.66667%; } - -.col-xs-push-6 { - left: 50%; } - -.col-xs-push-7 { - left: 58.33333%; } - -.col-xs-push-8 { - left: 66.66667%; } - -.col-xs-push-9 { - left: 75%; } - -.col-xs-push-10 { - left: 83.33333%; } - -.col-xs-push-11 { - left: 91.66667%; } - -.col-xs-push-12 { - left: 100%; } - -.col-xs-offset-0 { - margin-left: 0%; } - -.col-xs-offset-1 { - margin-left: 8.33333%; } - -.col-xs-offset-2 { - margin-left: 16.66667%; } - -.col-xs-offset-3 { - margin-left: 25%; } - -.col-xs-offset-4 { - margin-left: 33.33333%; } - -.col-xs-offset-5 { - margin-left: 41.66667%; } - -.col-xs-offset-6 { - margin-left: 50%; } - -.col-xs-offset-7 { - margin-left: 58.33333%; } - -.col-xs-offset-8 { - margin-left: 66.66667%; } - -.col-xs-offset-9 { - margin-left: 75%; } - -.col-xs-offset-10 { - margin-left: 83.33333%; } - -.col-xs-offset-11 { - margin-left: 91.66667%; } - -.col-xs-offset-12 { - margin-left: 100%; } - -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; } - - .col-sm-1 { - width: 8.33333%; } - - .col-sm-2 { - width: 16.66667%; } - - .col-sm-3 { - width: 25%; } - - .col-sm-4 { - width: 33.33333%; } - - .col-sm-5 { - width: 41.66667%; } - - .col-sm-6 { - width: 50%; } - - .col-sm-7 { - width: 58.33333%; } - - .col-sm-8 { - width: 66.66667%; } - - .col-sm-9 { - width: 75%; } - - .col-sm-10 { - width: 83.33333%; } - - .col-sm-11 { - width: 91.66667%; } - - .col-sm-12 { - width: 100%; } - - .col-sm-pull-0 { - right: auto; } - - .col-sm-pull-1 { - right: 8.33333%; } - - .col-sm-pull-2 { - right: 16.66667%; } - - .col-sm-pull-3 { - right: 25%; } - - .col-sm-pull-4 { - right: 33.33333%; } - - .col-sm-pull-5 { - right: 41.66667%; } - - .col-sm-pull-6 { - right: 50%; } - - .col-sm-pull-7 { - right: 58.33333%; } - - .col-sm-pull-8 { - right: 66.66667%; } - - .col-sm-pull-9 { - right: 75%; } - - .col-sm-pull-10 { - right: 83.33333%; } - - .col-sm-pull-11 { - right: 91.66667%; } - - .col-sm-pull-12 { - right: 100%; } - - .col-sm-push-0 { - left: auto; } - - .col-sm-push-1 { - left: 8.33333%; } - - .col-sm-push-2 { - left: 16.66667%; } - - .col-sm-push-3 { - left: 25%; } - - .col-sm-push-4 { - left: 33.33333%; } - - .col-sm-push-5 { - left: 41.66667%; } - - .col-sm-push-6 { - left: 50%; } - - .col-sm-push-7 { - left: 58.33333%; } - - .col-sm-push-8 { - left: 66.66667%; } - - .col-sm-push-9 { - left: 75%; } - - .col-sm-push-10 { - left: 83.33333%; } - - .col-sm-push-11 { - left: 91.66667%; } - - .col-sm-push-12 { - left: 100%; } - - .col-sm-offset-0 { - margin-left: 0%; } - - .col-sm-offset-1 { - margin-left: 8.33333%; } - - .col-sm-offset-2 { - margin-left: 16.66667%; } - - .col-sm-offset-3 { - margin-left: 25%; } - - .col-sm-offset-4 { - margin-left: 33.33333%; } - - .col-sm-offset-5 { - margin-left: 41.66667%; } - - .col-sm-offset-6 { - margin-left: 50%; } - - .col-sm-offset-7 { - margin-left: 58.33333%; } - - .col-sm-offset-8 { - margin-left: 66.66667%; } - - .col-sm-offset-9 { - margin-left: 75%; } - - .col-sm-offset-10 { - margin-left: 83.33333%; } - - .col-sm-offset-11 { - margin-left: 91.66667%; } - - .col-sm-offset-12 { - margin-left: 100%; } } -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; } - - .col-md-1 { - width: 8.33333%; } - - .col-md-2 { - width: 16.66667%; } - - .col-md-3 { - width: 25%; } - - .col-md-4 { - width: 33.33333%; } - - .col-md-5 { - width: 41.66667%; } - - .col-md-6 { - width: 50%; } - - .col-md-7 { - width: 58.33333%; } - - .col-md-8 { - width: 66.66667%; } - - .col-md-9 { - width: 75%; } - - .col-md-10 { - width: 83.33333%; } - - .col-md-11 { - width: 91.66667%; } - - .col-md-12 { - width: 100%; } - - .col-md-pull-0 { - right: auto; } - - .col-md-pull-1 { - right: 8.33333%; } - - .col-md-pull-2 { - right: 16.66667%; } - - .col-md-pull-3 { - right: 25%; } - - .col-md-pull-4 { - right: 33.33333%; } - - .col-md-pull-5 { - right: 41.66667%; } - - .col-md-pull-6 { - right: 50%; } - - .col-md-pull-7 { - right: 58.33333%; } - - .col-md-pull-8 { - right: 66.66667%; } - - .col-md-pull-9 { - right: 75%; } - - .col-md-pull-10 { - right: 83.33333%; } - - .col-md-pull-11 { - right: 91.66667%; } - - .col-md-pull-12 { - right: 100%; } - - .col-md-push-0 { - left: auto; } - - .col-md-push-1 { - left: 8.33333%; } - - .col-md-push-2 { - left: 16.66667%; } - - .col-md-push-3 { - left: 25%; } - - .col-md-push-4 { - left: 33.33333%; } - - .col-md-push-5 { - left: 41.66667%; } - - .col-md-push-6 { - left: 50%; } - - .col-md-push-7 { - left: 58.33333%; } - - .col-md-push-8 { - left: 66.66667%; } - - .col-md-push-9 { - left: 75%; } - - .col-md-push-10 { - left: 83.33333%; } - - .col-md-push-11 { - left: 91.66667%; } - - .col-md-push-12 { - left: 100%; } - - .col-md-offset-0 { - margin-left: 0%; } - - .col-md-offset-1 { - margin-left: 8.33333%; } - - .col-md-offset-2 { - margin-left: 16.66667%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-offset-4 { - margin-left: 33.33333%; } - - .col-md-offset-5 { - margin-left: 41.66667%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-offset-7 { - margin-left: 58.33333%; } - - .col-md-offset-8 { - margin-left: 66.66667%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-offset-10 { - margin-left: 83.33333%; } - - .col-md-offset-11 { - margin-left: 91.66667%; } - - .col-md-offset-12 { - margin-left: 100%; } } -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; } - - .col-lg-1 { - width: 8.33333%; } - - .col-lg-2 { - width: 16.66667%; } - - .col-lg-3 { - width: 25%; } - - .col-lg-4 { - width: 33.33333%; } - - .col-lg-5 { - width: 41.66667%; } - - .col-lg-6 { - width: 50%; } - - .col-lg-7 { - width: 58.33333%; } - - .col-lg-8 { - width: 66.66667%; } - - .col-lg-9 { - width: 75%; } - - .col-lg-10 { - width: 83.33333%; } - - .col-lg-11 { - width: 91.66667%; } - - .col-lg-12 { - width: 100%; } - - .col-lg-pull-0 { - right: auto; } - - .col-lg-pull-1 { - right: 8.33333%; } - - .col-lg-pull-2 { - right: 16.66667%; } - - .col-lg-pull-3 { - right: 25%; } - - .col-lg-pull-4 { - right: 33.33333%; } - - .col-lg-pull-5 { - right: 41.66667%; } - - .col-lg-pull-6 { - right: 50%; } - - .col-lg-pull-7 { - right: 58.33333%; } - - .col-lg-pull-8 { - right: 66.66667%; } - - .col-lg-pull-9 { - right: 75%; } - - .col-lg-pull-10 { - right: 83.33333%; } - - .col-lg-pull-11 { - right: 91.66667%; } - - .col-lg-pull-12 { - right: 100%; } - - .col-lg-push-0 { - left: auto; } - - .col-lg-push-1 { - left: 8.33333%; } - - .col-lg-push-2 { - left: 16.66667%; } - - .col-lg-push-3 { - left: 25%; } - - .col-lg-push-4 { - left: 33.33333%; } - - .col-lg-push-5 { - left: 41.66667%; } - - .col-lg-push-6 { - left: 50%; } - - .col-lg-push-7 { - left: 58.33333%; } - - .col-lg-push-8 { - left: 66.66667%; } - - .col-lg-push-9 { - left: 75%; } - - .col-lg-push-10 { - left: 83.33333%; } - - .col-lg-push-11 { - left: 91.66667%; } - - .col-lg-push-12 { - left: 100%; } - - .col-lg-offset-0 { - margin-left: 0%; } - - .col-lg-offset-1 { - margin-left: 8.33333%; } - - .col-lg-offset-2 { - margin-left: 16.66667%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-offset-4 { - margin-left: 33.33333%; } - - .col-lg-offset-5 { - margin-left: 41.66667%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-offset-7 { - margin-left: 58.33333%; } - - .col-lg-offset-8 { - margin-left: 66.66667%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-offset-10 { - margin-left: 83.33333%; } - - .col-lg-offset-11 { - margin-left: 91.66667%; } - - .col-lg-offset-12 { - margin-left: 100%; } } -table { - background-color: transparent; } - -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #bbb; - text-align: left; } - -th { - text-align: left; } - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 27px; } - .table > thead > tr > th, - .table > thead > tr > td, - .table > tbody > tr > th, - .table > tbody > tr > td, - .table > tfoot > tr > th, - .table > tfoot > tr > td { - padding: 8px; - line-height: 1.846; - vertical-align: top; - border-top: 1px solid #ddd; } - .table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; } - .table > caption + thead > tr:first-child > th, - .table > caption + thead > tr:first-child > td, - .table > colgroup + thead > tr:first-child > th, - .table > colgroup + thead > tr:first-child > td, - .table > thead:first-child > tr:first-child > th, - .table > thead:first-child > tr:first-child > td { - border-top: 0; } - .table > tbody + tbody { - border-top: 2px solid #ddd; } - .table .table { - background-color: #fff; } - -.table-condensed > thead > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > th, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > th, -.table-condensed > tfoot > tr > td { - padding: 5px; } - -.table-bordered { - border: 1px solid #ddd; } - .table-bordered > thead > tr > th, - .table-bordered > thead > tr > td, - .table-bordered > tbody > tr > th, - .table-bordered > tbody > tr > td, - .table-bordered > tfoot > tr > th, - .table-bordered > tfoot > tr > td { - border: 1px solid #ddd; } - .table-bordered > thead > tr > th, - .table-bordered > thead > tr > td { - border-bottom-width: 2px; } - -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; } - -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; } - -table col[class*="col-"] { - position: static; - float: none; - display: table-column; } - -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; } - -.table > thead > tr > td.active, -.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th, -.table > tbody > tr > td.active, -.table > tbody > tr > th.active, -.table > tbody > tr.active > td, -.table > tbody > tr.active > th, -.table > tfoot > tr > td.active, -.table > tfoot > tr > th.active, -.table > tfoot > tr.active > td, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; } - -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; } - -.table > thead > tr > td.success, -.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th, -.table > tbody > tr > td.success, -.table > tbody > tr > th.success, -.table > tbody > tr.success > td, -.table > tbody > tr.success > th, -.table > tfoot > tr > td.success, -.table > tfoot > tr > th.success, -.table > tfoot > tr.success > td, -.table > tfoot > tr.success > th { - background-color: #dff0d8; } - -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; } - -.table > thead > tr > td.info, -.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th, -.table > tbody > tr > td.info, -.table > tbody > tr > th.info, -.table > tbody > tr.info > td, -.table > tbody > tr.info > th, -.table > tfoot > tr > td.info, -.table > tfoot > tr > th.info, -.table > tfoot > tr.info > td, -.table > tfoot > tr.info > th { - background-color: #e1bee7; } - -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { - background-color: #d8abe0; } - -.table > thead > tr > td.warning, -.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th, -.table > tbody > tr > td.warning, -.table > tbody > tr > th.warning, -.table > tbody > tr.warning > td, -.table > tbody > tr.warning > th, -.table > tfoot > tr > td.warning, -.table > tfoot > tr > th.warning, -.table > tfoot > tr.warning > td, -.table > tfoot > tr.warning > th { - background-color: #ffe0b2; } - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { - background-color: #ffd699; } - -.table > thead > tr > td.danger, -.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th, -.table > tbody > tr > td.danger, -.table > tbody > tr > th.danger, -.table > tbody > tr.danger > td, -.table > tbody > tr.danger > th, -.table > tfoot > tr > td.danger, -.table > tfoot > tr > th.danger, -.table > tfoot > tr.danger > td, -.table > tfoot > tr.danger > th { - background-color: #f9bdbb; } - -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { - background-color: #f7a6a4; } - -.table-responsive { - overflow-x: auto; - min-height: 0.01%; } - @media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 20.25px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; } - .table-responsive > .table { - margin-bottom: 0; } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; } - .table-responsive > .table-bordered { - border: 0; } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; } } - -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; } - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 27px; - font-size: 22.5px; - line-height: inherit; - color: #212121; - border: 0; - border-bottom: 1px solid #f0f0f0; } - -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; } - -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; } - -input[type="file"] { - display: block; } - -input[type="range"] { - display: block; - width: 100%; } - -select[multiple], -select[size] { - height: auto; } - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; } - -output { - display: block; - padding-top: 7px; - font-size: 15px; - line-height: 1.846; - color: #666; } - -.form-control { - display: block; - width: 100%; - height: 41px; - padding: 6px 16px; - font-size: 15px; - line-height: 1.846; - color: #666; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } - .form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } - .form-control::-moz-placeholder { - color: #bbb; - opacity: 1; } - .form-control:-ms-input-placeholder { - color: #bbb; } - .form-control::-webkit-input-placeholder { - color: #bbb; } - .form-control::-ms-expand { - border: 0; - background-color: transparent; } - .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { - background-color: transparent; - opacity: 1; } - .form-control[disabled], fieldset[disabled] .form-control { - cursor: not-allowed; } - -textarea.form-control { - height: auto; } - -input[type="search"] { - -webkit-appearance: none; } - -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 41px; } - input[type="date"].input-sm, .input-group-sm > input[type="date"].form-control, - .input-group-sm > input[type="date"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="date"].btn, .input-group-sm input[type="date"], - input[type="time"].input-sm, - .input-group-sm > input[type="time"].form-control, - .input-group-sm > input[type="time"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="time"].btn, .input-group-sm - input[type="time"], - input[type="datetime-local"].input-sm, - .input-group-sm > input[type="datetime-local"].form-control, - .input-group-sm > input[type="datetime-local"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="datetime-local"].btn, .input-group-sm - input[type="datetime-local"], - input[type="month"].input-sm, - .input-group-sm > input[type="month"].form-control, - .input-group-sm > input[type="month"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="month"].btn, .input-group-sm - input[type="month"] { - line-height: 31px; } - input[type="date"].input-lg, .input-group-lg > input[type="date"].form-control, - .input-group-lg > input[type="date"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="date"].btn, .input-group-lg input[type="date"], - input[type="time"].input-lg, - .input-group-lg > input[type="time"].form-control, - .input-group-lg > input[type="time"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="time"].btn, .input-group-lg - input[type="time"], - input[type="datetime-local"].input-lg, - .input-group-lg > input[type="datetime-local"].form-control, - .input-group-lg > input[type="datetime-local"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="datetime-local"].btn, .input-group-lg - input[type="datetime-local"], - input[type="month"].input-lg, - .input-group-lg > input[type="month"].form-control, - .input-group-lg > input[type="month"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="month"].btn, .input-group-lg - input[type="month"] { - line-height: 48px; } } -.form-group { - margin-bottom: 15px; } - -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; } - .radio label, - .checkbox label { - min-height: 27px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; } - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; } - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; } - -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; } - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; } - -input[type="radio"][disabled], input[type="radio"].disabled, fieldset[disabled] input[type="radio"], -input[type="checkbox"][disabled], -input[type="checkbox"].disabled, fieldset[disabled] -input[type="checkbox"] { - cursor: not-allowed; } - -.radio-inline.disabled, fieldset[disabled] .radio-inline, -.checkbox-inline.disabled, fieldset[disabled] -.checkbox-inline { - cursor: not-allowed; } - -.radio.disabled label, fieldset[disabled] .radio label, -.checkbox.disabled label, fieldset[disabled] -.checkbox label { - cursor: not-allowed; } - -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 42px; } - .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control, - .input-group-lg > .form-control-static.input-group-addon, - .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control, - .input-group-sm > .form-control-static.input-group-addon, - .input-group-sm > .input-group-btn > .form-control-static.btn { - padding-left: 0; - padding-right: 0; } - -.input-sm, .input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 31px; - padding: 5px 10px; - font-size: 13px; - line-height: 1.5; - border-radius: 3px; } - -select.input-sm, .input-group-sm > select.form-control, -.input-group-sm > select.input-group-addon, -.input-group-sm > .input-group-btn > select.btn { - height: 31px; - line-height: 31px; } - -textarea.input-sm, .input-group-sm > textarea.form-control, -.input-group-sm > textarea.input-group-addon, -.input-group-sm > .input-group-btn > textarea.btn, -select[multiple].input-sm, -.input-group-sm > select[multiple].form-control, -.input-group-sm > select[multiple].input-group-addon, -.input-group-sm > .input-group-btn > select[multiple].btn { - height: auto; } - -.form-group-sm .form-control { - height: 31px; - padding: 5px 10px; - font-size: 13px; - line-height: 1.5; - border-radius: 3px; } -.form-group-sm select.form-control { - height: 31px; - line-height: 31px; } -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; } -.form-group-sm .form-control-static { - height: 31px; - min-height: 40px; - padding: 6px 10px; - font-size: 13px; - line-height: 1.5; } - -.input-lg, .input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 48px; - padding: 10px 16px; - font-size: 19px; - line-height: 1.33333; - border-radius: 3px; } - -select.input-lg, .input-group-lg > select.form-control, -.input-group-lg > select.input-group-addon, -.input-group-lg > .input-group-btn > select.btn { - height: 48px; - line-height: 48px; } - -textarea.input-lg, .input-group-lg > textarea.form-control, -.input-group-lg > textarea.input-group-addon, -.input-group-lg > .input-group-btn > textarea.btn, -select[multiple].input-lg, -.input-group-lg > select[multiple].form-control, -.input-group-lg > select[multiple].input-group-addon, -.input-group-lg > .input-group-btn > select[multiple].btn { - height: auto; } - -.form-group-lg .form-control { - height: 48px; - padding: 10px 16px; - font-size: 19px; - line-height: 1.33333; - border-radius: 3px; } -.form-group-lg select.form-control { - height: 48px; - line-height: 48px; } -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; } -.form-group-lg .form-control-static { - height: 48px; - min-height: 46px; - padding: 11px 16px; - font-size: 19px; - line-height: 1.33333; } - -.has-feedback { - position: relative; } - .has-feedback .form-control { - padding-right: 51.25px; } - -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 41px; - height: 41px; - line-height: 41px; - text-align: center; - pointer-events: none; } - -.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, -.input-group-lg > .input-group-addon + .form-control-feedback, -.input-group-lg > .input-group-btn > .btn + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 48px; - height: 48px; - line-height: 48px; } - -.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, -.input-group-sm > .input-group-addon + .form-control-feedback, -.input-group-sm > .input-group-btn > .btn + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 31px; - height: 31px; - line-height: 31px; } - -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { - color: #4CAF50; } -.has-success .form-control { - border-color: #4CAF50; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - .has-success .form-control:focus { - border-color: #3d8b40; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #92cf94; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #92cf94; } -.has-success .input-group-addon { - color: #4CAF50; - border-color: #4CAF50; - background-color: #dff0d8; } -.has-success .form-control-feedback { - color: #4CAF50; } - -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { - color: #ff9800; } -.has-warning .form-control { - border-color: #ff9800; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - .has-warning .form-control:focus { - border-color: #cc7a00; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffc166; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffc166; } -.has-warning .input-group-addon { - color: #ff9800; - border-color: #ff9800; - background-color: #ffe0b2; } -.has-warning .form-control-feedback { - color: #ff9800; } - -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { - color: #e51c23; } -.has-error .form-control { - border-color: #e51c23; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - .has-error .form-control:focus { - border-color: #b9151b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ef787c; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ef787c; } -.has-error .input-group-addon { - color: #e51c23; - border-color: #e51c23; - background-color: #f9bdbb; } -.has-error .form-control-feedback { - color: #e51c23; } - -.has-feedback label ~ .form-control-feedback { - top: 32px; } -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; } - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #848484; } - -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; } - .form-inline .form-control-static { - display: inline-block; } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; } - .form-inline .input-group > .form-control { - width: 100%; } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; } - .form-inline .has-feedback .form-control-feedback { - top: 0; } } - -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; } -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 34px; } -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; } - .form-horizontal .form-group:before, .form-horizontal .form-group:after { - content: " "; - display: table; } - .form-horizontal .form-group:after { - clear: both; } -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; } } -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; } -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 19px; } } -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 13px; } } - -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 16px; - font-size: 15px; - line-height: 1.846; - border-radius: 3px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; } - .btn:hover, .btn:focus, .btn.focus { - color: #444; - text-decoration: none; } - .btn:active, .btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } - .btn.disabled, .btn[disabled], fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; } - -a.btn.disabled, fieldset[disabled] a.btn { - pointer-events: none; } - -.btn-default { - color: #444; - background-color: #fff; - border-color: transparent; } - .btn-default:focus, .btn-default.focus { - color: #444; - background-color: #e6e6e6; - border-color: transparent; } - .btn-default:hover { - color: #444; - background-color: #e6e6e6; - border-color: transparent; } - .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { - color: #444; - background-color: #e6e6e6; - border-color: transparent; } - .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, .open > .btn-default.dropdown-toggle:hover, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle.focus { - color: #444; - background-color: #d4d4d4; - border-color: transparent; } - .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { - background-image: none; } - .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: transparent; } - .btn-default .badge { - color: #fff; - background-color: #444; } - -.btn-primary { - color: #fff; - background-color: #778; - border-color: transparent; } - .btn-primary:focus, .btn-primary.focus { - color: #fff; - background-color: #3084d2; - border-color: transparent; } - .btn-primary:hover { - color: #fff; - background-color: #3084d2; - border-color: transparent; } - .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #3084d2; - border-color: transparent; } - .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, .open > .btn-primary.dropdown-toggle:hover, .open > .btn-primary.dropdown-toggle:focus, .open > .btn-primary.dropdown-toggle.focus { - color: #fff; - background-color: #2872b6; - border-color: transparent; } - .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { - background-image: none; } - .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary.focus { - background-color: #778; - border-color: transparent; } - .btn-primary .badge { - color: #778; - background-color: #fff; } - -.btn-success { - color: #fff; - background-color: #4CAF50; - border-color: transparent; } - .btn-success:focus, .btn-success.focus { - color: #fff; - background-color: #3d8b40; - border-color: transparent; } - .btn-success:hover { - color: #fff; - background-color: #3d8b40; - border-color: transparent; } - .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { - color: #fff; - background-color: #3d8b40; - border-color: transparent; } - .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, .open > .btn-success.dropdown-toggle:hover, .open > .btn-success.dropdown-toggle:focus, .open > .btn-success.dropdown-toggle.focus { - color: #fff; - background-color: #327334; - border-color: transparent; } - .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { - background-image: none; } - .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success.focus { - background-color: #4CAF50; - border-color: transparent; } - .btn-success .badge { - color: #4CAF50; - background-color: #fff; } - -.btn-info { - color: #fff; - background-color: #9C27B0; - border-color: transparent; } - .btn-info:focus, .btn-info.focus { - color: #fff; - background-color: #771e86; - border-color: transparent; } - .btn-info:hover { - color: #fff; - background-color: #771e86; - border-color: transparent; } - .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { - color: #fff; - background-color: #771e86; - border-color: transparent; } - .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, .open > .btn-info.dropdown-toggle:hover, .open > .btn-info.dropdown-toggle:focus, .open > .btn-info.dropdown-toggle.focus { - color: #fff; - background-color: #5d1769; - border-color: transparent; } - .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { - background-image: none; } - .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info.focus { - background-color: #9C27B0; - border-color: transparent; } - .btn-info .badge { - color: #9C27B0; - background-color: #fff; } - -.btn-warning { - color: #fff; - background-color: #ff9800; - border-color: transparent; } - .btn-warning:focus, .btn-warning.focus { - color: #fff; - background-color: #cc7a00; - border-color: transparent; } - .btn-warning:hover { - color: #fff; - background-color: #cc7a00; - border-color: transparent; } - .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { - color: #fff; - background-color: #cc7a00; - border-color: transparent; } - .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, .open > .btn-warning.dropdown-toggle:hover, .open > .btn-warning.dropdown-toggle:focus, .open > .btn-warning.dropdown-toggle.focus { - color: #fff; - background-color: #a86400; - border-color: transparent; } - .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { - background-image: none; } - .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning.focus { - background-color: #ff9800; - border-color: transparent; } - .btn-warning .badge { - color: #ff9800; - background-color: #fff; } - -.btn-danger { - color: #fff; - background-color: #e51c23; - border-color: transparent; } - .btn-danger:focus, .btn-danger.focus { - color: #fff; - background-color: #b9151b; - border-color: transparent; } - .btn-danger:hover { - color: #fff; - background-color: #b9151b; - border-color: transparent; } - .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #b9151b; - border-color: transparent; } - .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, .open > .btn-danger.dropdown-toggle:hover, .open > .btn-danger.dropdown-toggle:focus, .open > .btn-danger.dropdown-toggle.focus { - color: #fff; - background-color: #991216; - border-color: transparent; } - .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { - background-image: none; } - .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger.focus { - background-color: #e51c23; - border-color: transparent; } - .btn-danger .badge { - color: #e51c23; - background-color: #fff; } - -.btn-link { - color: #778; - font-weight: normal; - border-radius: 0; } - .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; } - .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { - border-color: transparent; } - .btn-link:hover, .btn-link:focus { - color: #2a77bf; - text-decoration: underline; - background-color: transparent; } - .btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus { - color: #bbb; - text-decoration: none; } - -.btn-lg, .btn-group-lg > .btn { - padding: 10px 16px; - font-size: 19px; - line-height: 1.33333; - border-radius: 3px; } - -.btn-sm, .btn-group-sm > .btn { - padding: 5px 10px; - font-size: 13px; - line-height: 1.5; - border-radius: 3px; } - -.btn-xs, .btn-group-xs > .btn { - padding: 1px 5px; - font-size: 13px; - line-height: 1.5; - border-radius: 3px; } - -.btn-block { - display: block; - width: 100%; } - -.btn-block + .btn-block { - margin-top: 5px; } - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; } - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; } - .fade.in { - opacity: 1; } - -.collapse { - display: none; } - .collapse.in { - display: block; } - -tr.collapse.in { - display: table-row; } - -tbody.collapse.in { - display: table-row-group; } - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; } - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; } - -.dropup, -.dropdown { - position: relative; } - -.dropdown-toggle:focus { - outline: 0; } - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 10px 0; - margin: 2px 0 0; - list-style: none; - font-size: 15px; - text-align: left; - background-color: rgba(235, 251, 251, 0.92); - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 3px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; } - .dropdown-menu.pull-right { - right: 0; - left: auto; } - .dropdown-menu .divider { - height: 1px; - margin: 12.5px 0; - overflow: hidden; - background-color: #f5f5f5; } - .dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.846; - color: #778; - white-space: nowrap; } - -.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - text-decoration: none; - color: black; } - -.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - outline: 0; - background-color: #778; } - -.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #bbb; } -.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; } - -.open > .dropdown-menu { - display: block; } -.open > a { - outline: 0; } - -.dropdown-menu-right { - left: auto; - right: 0; } - -.dropdown-menu-left { - left: 0; - right: auto; } - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 13px; - line-height: 1.846; - color: #111; - white-space: nowrap; } - -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; } - -.pull-right > .dropdown-menu { - right: 0; - left: auto; } - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; } -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; } - -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; } } -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; } - .btn-group > .btn, - .btn-group-vertical > .btn { - position: relative; - float: left; } - .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, - .btn-group-vertical > .btn:hover, - .btn-group-vertical > .btn:focus, - .btn-group-vertical > .btn:active, - .btn-group-vertical > .btn.active { - z-index: 2; } - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; } - -.btn-toolbar { - margin-left: -5px; } - .btn-toolbar:before, .btn-toolbar:after { - content: " "; - display: table; } - .btn-toolbar:after { - clear: both; } - .btn-toolbar .btn, - .btn-toolbar .btn-group, - .btn-toolbar .input-group { - float: left; } - .btn-toolbar > .btn, - .btn-toolbar > .btn-group, - .btn-toolbar > .input-group { - margin-left: 5px; } - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; } - -.btn-group > .btn:first-child { - margin-left: 0; } - .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - -.btn-group > .btn-group { - float: left; } - -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; } - -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; } - -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; } - -.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; } - -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } - .btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; } - -.btn .caret { - margin-left: 0; } - -.btn-lg .caret, .btn-group-lg > .btn .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; } - -.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { - border-width: 0 5px 5px; } - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; } -.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { - content: " "; - display: table; } -.btn-group-vertical > .btn-group:after { - clear: both; } -.btn-group-vertical > .btn-group > .btn { - float: none; } -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; } - -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; } -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 3px; - border-top-left-radius: 3px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; } - -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; } - -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; } - .btn-group-justified > .btn, - .btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; } - .btn-group-justified > .btn-group .btn { - width: 100%; } - .btn-group-justified > .btn-group .dropdown-menu { - left: auto; } - -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; } - -.input-group { - position: relative; - display: table; - border-collapse: separate; } - .input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; } - .input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; } - .input-group .form-control:focus { - z-index: 3; } - -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; } - .input-group-addon:not(:first-child):not(:last-child), - .input-group-btn:not(:first-child):not(:last-child), - .input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; } - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; } - -.input-group-addon { - padding: 6px 16px; - font-size: 15px; - font-weight: normal; - line-height: 1; - color: #666; - text-align: center; - background-color: transparent; - border: 1px solid transparent; - border-radius: 3px; } - .input-group-addon.input-sm, - .input-group-sm > .input-group-addon, - .input-group-sm > .input-group-btn > .input-group-addon.btn { - padding: 5px 10px; - font-size: 13px; - border-radius: 3px; } - .input-group-addon.input-lg, - .input-group-lg > .input-group-addon, - .input-group-lg > .input-group-btn > .input-group-addon.btn { - padding: 10px 16px; - font-size: 19px; - border-radius: 3px; } - .input-group-addon input[type="radio"], - .input-group-addon input[type="checkbox"] { - margin-top: 0; } - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.input-group-addon:first-child { - border-right: 0; } - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - -.input-group-addon:last-child { - border-left: 0; } - -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; } - .input-group-btn > .btn { - position: relative; } - .input-group-btn > .btn + .btn { - margin-left: -1px; } - .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { - z-index: 2; } - .input-group-btn:first-child > .btn, - .input-group-btn:first-child > .btn-group { - margin-right: -1px; } - .input-group-btn:last-child > .btn, - .input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; } - -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; } - .nav:before, .nav:after { - content: " "; - display: table; } - .nav:after { - clear: both; } - .nav > li { - position: relative; - display: block; } - .nav > li > a { - position: relative; - display: block; - padding: 10px 15px; - border-color: #9dd; } - .nav > li > a:hover, .nav > li > a:focus { - text-decoration: none; } - .nav > li.disabled > a { - color: #bbb; } - .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { - color: #bbb; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; } - .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { - background-color: #eeeeee; - border-color: #778; } - .nav .nav-divider { - height: 1px; - margin: 12.5px 0; - overflow: hidden; - background-color: #f5f5f5; } - .nav > li > a > img { - max-width: none; } - -.nav-tabs { - border-bottom: 1px solid transparent; } - .nav-tabs > li { - float: left; - margin-bottom: -1px; } - .nav-tabs > li > a { - margin-right: 2px; - line-height: 1.846; - border: 1px solid transparent; - border-radius: 3px 3px 0 0; } - .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee transparent; } - .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - color: #666; - background-color: transparent; - border: 1px solid transparent; - border-bottom-color: transparent; - cursor: default; } - -.nav-pills > li { - float: left; } - .nav-pills > li > a { - border-radius: 3px; } - .nav-pills > li + li { - margin-left: 2px; } - .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { - color: #fff; - background-color: #778; } - -.nav-stacked > li { - float: none; } - .nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; } - -.nav-justified, .nav-tabs.nav-justified { - width: 100%; } - .nav-justified > li, .nav-tabs.nav-justified > li { - float: none; } - .nav-justified > li > a, .nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; } - .nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; } - @media (min-width: 768px) { - .nav-justified > li, .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; } - .nav-justified > li > a, .nav-tabs.nav-justified > li > a { - margin-bottom: 0; } } - -.nav-tabs-justified, .nav-tabs.nav-justified { - border-bottom: 0; } - .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 3px; } - .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus, - .nav-tabs.nav-justified > .active > a:focus { - border: 1px solid transparent; } - @media (min-width: 768px) { - .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid transparent; - border-radius: 3px 3px 0 0; } - .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; } } - -.tab-content > .tab-pane { - display: none; } -.tab-content > .active { - display: block; } - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.navbar { - position: relative; - min-height: 110px; - margin-bottom: 20px; - border: 1px solid transparent; } - .navbar:before, .navbar:after { - content: " "; - display: table; } - .navbar:after { - clear: both; } - @media (min-width: 768px) { - .navbar { - border-radius: 3px; } } - -.navbar-header:before, .navbar-header:after { - content: " "; - display: table; } -.navbar-header:after { - clear: both; } -@media (min-width: 768px) { - .navbar-header { - float: left; } } - -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; } - .navbar-collapse:before, .navbar-collapse:after { - content: " "; - display: table; } - .navbar-collapse:after { - clear: both; } - .navbar-collapse.in { - overflow-y: auto; } - @media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; } - .navbar-collapse.in { - overflow-y: visible; } - .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; } } - -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; } - @media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; } } - -.container > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-header, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; } - @media (min-width: 768px) { - .container > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-header, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; } } - -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; } - @media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; } } - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; } - @media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; } } - -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; } - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; } - -.navbar-brand { - float: left; - padding: 41.5px 15px; - font-size: 19px; - line-height: 27px; - height: 110px; } - -.navbar-brand:hover, .navbar-brand:focus { - background-image: url(./img/logo.png); - text-decoration: none; } - -.navbar-brand > img { - display: block; } - @media (min-width: 768px) { - .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { - margin-left: -15px; } } - -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 38px; - margin-bottom: 38px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 3px; } - .navbar-toggle:focus { - outline: 0; } - .navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; } - .navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; } - @media (min-width: 768px) { - .navbar-toggle { - display: none; } } - -.navbar-nav { - margin: 20.75px -15px; } - .navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 27px; } - @media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 27px; } - .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; } } - @media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; } - .navbar-nav > li { - float: left; } - .navbar-nav > li > a { - padding-top: 41.5px; - padding-bottom: 41.5px; } } - -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 34.5px; - margin-bottom: 34.5px; } - @media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; } - .navbar-form .form-control-static { - display: inline-block; } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; } - .navbar-form .input-group > .form-control { - width: 100%; } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; } - .navbar-form .has-feedback .form-control-feedback { - top: 0; } } - @media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; } - .navbar-form .form-group:last-child { - margin-bottom: 0; } } - @media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; } } - -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.navbar-btn { - margin-top: 34.5px; - margin-bottom: 34.5px; } - .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn { - margin-top: 39.5px; - margin-bottom: 39.5px; } - .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn { - margin-top: 44px; - margin-bottom: 44px; } - -.navbar-text { - margin-top: 41.5px; - margin-bottom: 41.5px; } - @media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; } } - -@media (min-width: 768px) { - .navbar-left { - float: left !important; } - - .navbar-right { - float: right !important; - margin-right: -15px; } - .navbar-right ~ .navbar-right { - margin-right: 0; } } -.navbar-default { - background-image: linear-gradient(to bottom, #e4f4f4 0%, #80e4e4 100%); - border-color: transparent; } - .navbar-default .navbar-brand { - color: #444; } - .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { - color: #222; - background-color: transparent; } - .navbar-default .navbar-text { - color: #bbb; } - .navbar-default .navbar-nav > li > a { - color: #7c7c7c; - font-weight: 400; - padding-top: 5px; - margin-top: 5px; - border-left: 1px solid transparent; - border-right: 1px solid transparent; - border-top: 1px solid transparent; } - .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { - color: #222; - font-weight: 500; - background-color: transparent; } - .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { - color: #212121; - background-color: #fcfcfc; } - .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; } - .navbar-default .navbar-toggle { - border-color: transparent; } - .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { - background-color: transparent; } - .navbar-default .navbar-toggle .icon-bar { - background-color: rgba(0, 0, 0, 0.5); } - .navbar-default .navbar-collapse, - .navbar-default .navbar-form { - border-color: transparent; } - .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { - background-color: #ebfbfb; - color: #111; - border-left: 1px solid #bdd; - border-right: 1px solid #bdd; - border-top: 1px solid #bdd; - border-radius: 5px 5px 0px 0px; - padding-bottom: 0px; - padding-top: 5px; - margin-top: 5px; } - @media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #444; } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #222; - background-color: transparent; } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #212121; - background-color: #fcfcfc; } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; } } - .navbar-default .navbar-link { - color: #444; } - .navbar-default .navbar-link:hover { - color: #222; } - .navbar-default .btn-link { - color: #444; } - .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { - color: #222; } - .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:hover, fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; } - -.navbar-inverse { - background-color: #778; - border-color: transparent; } - .navbar-inverse .navbar-brand { - color: #d8e8f6; } - .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; } - .navbar-inverse .navbar-text { - color: #bbb; } - .navbar-inverse .navbar-nav > li > a { - color: #d8e8f6; } - .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; } - .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #3084d2; } - .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; } - .navbar-inverse .navbar-toggle { - border-color: transparent; } - .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { - background-color: transparent; } - .navbar-inverse .navbar-toggle .icon-bar { - background-color: rgba(0, 0, 0, 0.5); } - .navbar-inverse .navbar-collapse, - .navbar-inverse .navbar-form { - border-color: #3d8cd5; } - .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - background-color: #3084d2; - color: #fff; } - @media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: transparent; } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: transparent; } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #d8e8f6; } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #3084d2; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; } } - .navbar-inverse .navbar-link { - color: #d8e8f6; } - .navbar-inverse .navbar-link:hover { - color: #fff; } - .navbar-inverse .btn-link { - color: #d8e8f6; } - .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { - color: #fff; } - .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:hover, fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; } - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 27px; - list-style: none; - background-color: #f5f5f5; - border-radius: 3px; } - .breadcrumb > li { - display: inline-block; } - .breadcrumb > li + li:before { - content: "/ "; - padding: 0 5px; - color: #ccc; } - .breadcrumb > .active { - color: #bbb; } - -.pagination { - display: inline-block; - padding-left: 0; - margin: 27px 0; - border-radius: 3px; } - .pagination > li { - display: inline; } - .pagination > li > a, - .pagination > li > span { - position: relative; - float: left; - padding: 6px 16px; - line-height: 1.846; - text-decoration: none; - color: #778; - background-color: #fff; - border: 1px solid #ddd; - margin-left: -1px; } - .pagination > li:first-child > a, - .pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; } - .pagination > li:last-child > a, - .pagination > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; } - .pagination > li > a:hover, .pagination > li > a:focus, - .pagination > li > span:hover, - .pagination > li > span:focus { - z-index: 2; - color: #2a77bf; - background-color: #eeeeee; - border-color: #ddd; } - .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, - .pagination > .active > span, - .pagination > .active > span:hover, - .pagination > .active > span:focus { - z-index: 3; - color: #fff; - background-color: #778; - border-color: #778; - cursor: default; } - .pagination > .disabled > span, - .pagination > .disabled > span:hover, - .pagination > .disabled > span:focus, - .pagination > .disabled > a, - .pagination > .disabled > a:hover, - .pagination > .disabled > a:focus { - color: #bbb; - background-color: #fff; - border-color: #ddd; - cursor: not-allowed; } - -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 19px; - line-height: 1.33333; } -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; } -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; } - -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 13px; - line-height: 1.5; } -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; } -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; } - -.pager { - padding-left: 0; - margin: 27px 0; - list-style: none; - text-align: center; } - .pager:before, .pager:after { - content: " "; - display: table; } - .pager:after { - clear: both; } - .pager li { - display: inline; } - .pager li > a, - .pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; } - .pager li > a:hover, - .pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; } - .pager .next > a, - .pager .next > span { - float: right; } - .pager .previous > a, - .pager .previous > span { - float: left; } - .pager .disabled > a, - .pager .disabled > a:hover, - .pager .disabled > a:focus, - .pager .disabled > span { - color: #bbb; - background-color: #fff; - cursor: not-allowed; } - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; } - .label:empty { - display: none; } - .btn .label { - position: relative; - top: -1px; } - -a.label:hover, a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; } - -.label-default { - background-color: #bbb; } - .label-default[href]:hover, .label-default[href]:focus { - background-color: #a2a2a2; } - -.label-primary { - background-color: #778; } - .label-primary[href]:hover, .label-primary[href]:focus { - background-color: #3084d2; } - -.label-success { - background-color: #4CAF50; } - .label-success[href]:hover, .label-success[href]:focus { - background-color: #3d8b40; } - -.label-info { - background-color: #9C27B0; } - .label-info[href]:hover, .label-info[href]:focus { - background-color: #771e86; } - -.label-warning { - background-color: #ff9800; } - .label-warning[href]:hover, .label-warning[href]:focus { - background-color: #cc7a00; } - -.label-danger { - background-color: #e51c23; } - .label-danger[href]:hover, .label-danger[href]:focus { - background-color: #b9151b; } - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 13px; - font-weight: normal; - color: #fff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #bbb; - border-radius: 10px; } - .badge:empty { - display: none; } - .btn .badge { - position: relative; - top: -1px; } - .btn-xs .badge, .btn-group-xs > .btn .badge, .btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; } - .list-group-item.active > .badge, .nav-pills > .active > a > .badge { - color: #778; - background-color: #fff; } - .list-group-item > .badge { - float: right; } - .list-group-item > .badge + .badge { - margin-right: 5px; } - .nav-pills > li > a > .badge { - margin-left: 3px; } - -a.badge:hover, a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; } - -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #f5f5f5; } - .jumbotron h1, - .jumbotron .h1 { - color: #444; } - .jumbotron p { - margin-bottom: 15px; - font-size: 23px; - font-weight: 200; } - .jumbotron > hr { - border-top-color: gainsboro; } - .container .jumbotron, .container-fluid .jumbotron { - border-radius: 3px; - padding-left: 15px; - padding-right: 15px; } - .jumbotron .container { - max-width: 100%; } - @media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; } - .container .jumbotron, .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; } - .jumbotron h1, - .jumbotron .h1 { - font-size: 68px; } } - -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 27px; - line-height: 1.846; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 3px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; } - .thumbnail > img, - .thumbnail a > img { - display: block; - max-width: 100%; - height: auto; - margin-left: auto; - margin-right: auto; } - .thumbnail .caption { - padding: 9px; - color: #444; } - -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #778; } - -.alert { - padding: 15px; - margin-bottom: 27px; - border: 1px solid transparent; - border-radius: 3px; } - .alert h4 { - margin-top: 0; - color: inherit; } - .alert .alert-link { - font-weight: bold; } - .alert > p, - .alert > ul { - margin-bottom: 0; } - .alert > p + p { - margin-top: 5px; } - -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; } - .alert-dismissable .close, - .alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; } - -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #4CAF50; } - .alert-success hr { - border-top-color: #c9e2b3; } - .alert-success .alert-link { - color: #3d8b40; } - -.alert-info { - background-color: #e1bee7; - border-color: #cba4dd; - color: #9C27B0; } - .alert-info hr { - border-top-color: #c191d6; } - .alert-info .alert-link { - color: #771e86; } - -.alert-warning { - background-color: #ffe0b2; - border-color: #ffc599; - color: #ff9800; } - .alert-warning hr { - border-top-color: #ffb67f; } - .alert-warning .alert-link { - color: #cc7a00; } - -.alert-danger { - background-color: #f9bdbb; - border-color: #f7a4af; - color: #e51c23; } - .alert-danger hr { - border-top-color: #f58c9a; } - .alert-danger .alert-link { - color: #b9151b; } - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; } - to { - background-position: 0 0; } } -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; } - to { - background-position: 0 0; } } -.progress { - overflow: hidden; - height: 27px; - margin-bottom: 27px; - background-color: #f5f5f5; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } - -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 13px; - line-height: 27px; - color: #fff; - text-align: center; - background-color: #778; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; } - -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; } - -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; } - -.progress-bar-success { - background-color: #4CAF50; } - .progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.progress-bar-info { - background-color: #9C27B0; } - .progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.progress-bar-warning { - background-color: #ff9800; } - .progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.progress-bar-danger { - background-color: #e51c23; } - .progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.media { - margin-top: 15px; } - .media:first-child { - margin-top: 0; } - -.media, -.media-body { - zoom: 1; - overflow: hidden; } - -.media-body { - width: 10000px; } - -.media-object { - display: block; } - .media-object.img-thumbnail { - max-width: none; } - -.media-right, -.media > .pull-right { - padding-left: 10px; } - -.media-left, -.media > .pull-left { - padding-right: 10px; } - -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; } - -.media-middle { - vertical-align: middle; } - -.media-bottom { - vertical-align: bottom; } - -.media-heading { - margin-top: 0; - margin-bottom: 5px; } - -.media-list { - padding-left: 0; - list-style: none; } - -.list-group { - margin-bottom: 20px; - padding-left: 0; } - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; } - .list-group-item:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; } - .list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; } - -a.list-group-item, -button.list-group-item { - color: #555; } - a.list-group-item .list-group-item-heading, - button.list-group-item .list-group-item-heading { - color: #333; } - a.list-group-item:hover, a.list-group-item:focus, - button.list-group-item:hover, - button.list-group-item:focus { - text-decoration: none; - color: #555; - background-color: #f5f5f5; } - -button.list-group-item { - width: 100%; - text-align: left; } - -.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { - background-color: #eeeeee; - color: #bbb; - cursor: not-allowed; } - .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { - color: inherit; } - .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { - color: #bbb; } -.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #778; - border-color: #778; } - .list-group-item.active .list-group-item-heading, - .list-group-item.active .list-group-item-heading > small, - .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, - .list-group-item.active:hover .list-group-item-heading > small, - .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, - .list-group-item.active:focus .list-group-item-heading > small, - .list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; } - .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { - color: white; } - -.list-group-item-success { - color: #4CAF50; - background-color: #dff0d8; } - -a.list-group-item-success, -button.list-group-item-success { - color: #4CAF50; } - a.list-group-item-success .list-group-item-heading, - button.list-group-item-success .list-group-item-heading { - color: inherit; } - a.list-group-item-success:hover, a.list-group-item-success:focus, - button.list-group-item-success:hover, - button.list-group-item-success:focus { - color: #4CAF50; - background-color: #d0e9c6; } - a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus, - button.list-group-item-success.active, - button.list-group-item-success.active:hover, - button.list-group-item-success.active:focus { - color: #fff; - background-color: #4CAF50; - border-color: #4CAF50; } - -.list-group-item-info { - color: #9C27B0; - background-color: #e1bee7; } - -a.list-group-item-info, -button.list-group-item-info { - color: #9C27B0; } - a.list-group-item-info .list-group-item-heading, - button.list-group-item-info .list-group-item-heading { - color: inherit; } - a.list-group-item-info:hover, a.list-group-item-info:focus, - button.list-group-item-info:hover, - button.list-group-item-info:focus { - color: #9C27B0; - background-color: #d8abe0; } - a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus, - button.list-group-item-info.active, - button.list-group-item-info.active:hover, - button.list-group-item-info.active:focus { - color: #fff; - background-color: #9C27B0; - border-color: #9C27B0; } - -.list-group-item-warning { - color: #ff9800; - background-color: #ffe0b2; } - -a.list-group-item-warning, -button.list-group-item-warning { - color: #ff9800; } - a.list-group-item-warning .list-group-item-heading, - button.list-group-item-warning .list-group-item-heading { - color: inherit; } - a.list-group-item-warning:hover, a.list-group-item-warning:focus, - button.list-group-item-warning:hover, - button.list-group-item-warning:focus { - color: #ff9800; - background-color: #ffd699; } - a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, - button.list-group-item-warning.active, - button.list-group-item-warning.active:hover, - button.list-group-item-warning.active:focus { - color: #fff; - background-color: #ff9800; - border-color: #ff9800; } - -.list-group-item-danger { - color: #e51c23; - background-color: #f9bdbb; } - -a.list-group-item-danger, -button.list-group-item-danger { - color: #e51c23; } - a.list-group-item-danger .list-group-item-heading, - button.list-group-item-danger .list-group-item-heading { - color: inherit; } - a.list-group-item-danger:hover, a.list-group-item-danger:focus, - button.list-group-item-danger:hover, - button.list-group-item-danger:focus { - color: #e51c23; - background-color: #f7a6a4; } - a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, - button.list-group-item-danger.active, - button.list-group-item-danger.active:hover, - button.list-group-item-danger.active:focus { - color: #fff; - background-color: #e51c23; - border-color: #e51c23; } - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; } - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; } - -.panel { - margin-bottom: 27px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 3px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } - -.panel-body { - padding: 15px; } - .panel-body:before, .panel-body:after { - content: " "; - display: table; } - .panel-body:after { - clear: both; } - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 2px; - border-top-left-radius: 2px; } - .panel-heading > .dropdown .dropdown-toggle { - color: inherit; } - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 17px; - color: inherit; } - .panel-title > a, - .panel-title > small, - .panel-title > .small, - .panel-title > small > a, - .panel-title > .small > a { - color: inherit; } - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 2px; - border-bottom-left-radius: 2px; } - -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; } - .panel > .list-group .list-group-item, - .panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; } - .panel > .list-group:first-child .list-group-item:first-child, - .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 2px; - border-top-left-radius: 2px; } - .panel > .list-group:last-child .list-group-item:last-child, - .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 2px; - border-bottom-left-radius: 2px; } -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; } - -.list-group + .panel-footer { - border-top-width: 0; } - -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; } - .panel > .table caption, - .panel > .table-responsive > .table caption, - .panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; } -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 2px; - border-top-left-radius: 2px; } - .panel > .table:first-child > thead:first-child > tr:first-child, - .panel > .table:first-child > tbody:first-child > tr:first-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; } - .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, - .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, - .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, - .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 2px; } - .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, - .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, - .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, - .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 2px; } -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 2px; - border-bottom-left-radius: 2px; } - .panel > .table:last-child > tbody:last-child > tr:last-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; } - .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, - .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 2px; } - .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, - .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 2px; } -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; } -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; } -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; } - .panel > .table-bordered > thead > tr > th:first-child, - .panel > .table-bordered > thead > tr > td:first-child, - .panel > .table-bordered > tbody > tr > th:first-child, - .panel > .table-bordered > tbody > tr > td:first-child, - .panel > .table-bordered > tfoot > tr > th:first-child, - .panel > .table-bordered > tfoot > tr > td:first-child, - .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, - .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, - .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, - .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; } - .panel > .table-bordered > thead > tr > th:last-child, - .panel > .table-bordered > thead > tr > td:last-child, - .panel > .table-bordered > tbody > tr > th:last-child, - .panel > .table-bordered > tbody > tr > td:last-child, - .panel > .table-bordered > tfoot > tr > th:last-child, - .panel > .table-bordered > tfoot > tr > td:last-child, - .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, - .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, - .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, - .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; } - .panel > .table-bordered > thead > tr:first-child > td, - .panel > .table-bordered > thead > tr:first-child > th, - .panel > .table-bordered > tbody > tr:first-child > td, - .panel > .table-bordered > tbody > tr:first-child > th, - .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, - .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, - .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, - .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; } - .panel > .table-bordered > tbody > tr:last-child > td, - .panel > .table-bordered > tbody > tr:last-child > th, - .panel > .table-bordered > tfoot > tr:last-child > td, - .panel > .table-bordered > tfoot > tr:last-child > th, - .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, - .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, - .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, - .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; } -.panel > .table-responsive { - border: 0; - margin-bottom: 0; } - -.panel-group { - margin-bottom: 27px; } - .panel-group .panel { - margin-bottom: 0; - border-radius: 3px; } - .panel-group .panel + .panel { - margin-top: 5px; } - .panel-group .panel-heading { - border-bottom: 0; } - .panel-group .panel-heading + .panel-collapse > .panel-body, - .panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; } - .panel-group .panel-footer { - border-top: 0; } - .panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; } - -.panel-default { - border-color: #ddd; } - .panel-default > .panel-heading { - color: #212121; - background-color: #f5f5f5; - border-color: #ddd; } - .panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; } - .panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #212121; } - .panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; } - -.panel-primary { - border-color: #778; } - .panel-primary > .panel-heading { - color: #fff; - background-color: #778; - border-color: #778; } - .panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #778; } - .panel-primary > .panel-heading .badge { - color: #778; - background-color: #fff; } - .panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #778; } - -.panel-success { - border-color: #d6e9c6; } - .panel-success > .panel-heading { - color: #fff; - background-color: #4CAF50; - border-color: #d6e9c6; } - .panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; } - .panel-success > .panel-heading .badge { - color: #4CAF50; - background-color: #fff; } - .panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; } - -.panel-info { - border-color: #cba4dd; } - .panel-info > .panel-heading { - color: #fff; - background-color: #9C27B0; - border-color: #cba4dd; } - .panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #cba4dd; } - .panel-info > .panel-heading .badge { - color: #9C27B0; - background-color: #fff; } - .panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #cba4dd; } - -.panel-warning { - border-color: #ffc599; } - .panel-warning > .panel-heading { - color: #fff; - background-color: #ff9800; - border-color: #ffc599; } - .panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ffc599; } - .panel-warning > .panel-heading .badge { - color: #ff9800; - background-color: #fff; } - .panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ffc599; } - -.panel-danger { - border-color: #f7a4af; } - .panel-danger > .panel-heading { - color: #fff; - background-color: #e51c23; - border-color: #f7a4af; } - .panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #f7a4af; } - .panel-danger > .panel-heading .badge { - color: #e51c23; - background-color: #fff; } - .panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #f7a4af; } - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; } - .embed-responsive .embed-responsive-item, - .embed-responsive iframe, - .embed-responsive embed, - .embed-responsive object, - .embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; } - -.embed-responsive-16by9 { - padding-bottom: 56.25%; } - -.embed-responsive-4by3 { - padding-bottom: 75%; } - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid transparent; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } - .well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); } - -.well-lg { - padding: 24px; - border-radius: 3px; } - -.well-sm { - padding: 9px; - border-radius: 3px; } - -.close { - float: right; - font-size: 22.5px; - font-weight: normal; - line-height: 1; - color: #000; - text-shadow: none; - opacity: 0.2; - filter: alpha(opacity=20); } - .close:hover, .close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); } - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; } - -.modal-open { - overflow: hidden; } - -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; } - .modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; } - .modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); } - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; } - -.modal-dialog { - position: relative; - width: auto; - margin: 10px; } - -.modal-content { - position: relative; - background-color: #fff; - border: 1px solid #999; - border: 1px solid transparent; - border-radius: 3px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; } - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; } - .modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); } - .modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); } - -.modal-header { - padding: 15px; - border-bottom: 1px solid transparent; } - .modal-header:before, .modal-header:after { - content: " "; - display: table; } - .modal-header:after { - clear: both; } - -.modal-header .close { - margin-top: -2px; } - -.modal-title { - margin: 0; - line-height: 1.846; } - -.modal-body { - position: relative; - padding: 15px; } - -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid transparent; } - .modal-footer:before, .modal-footer:after { - content: " "; - display: table; } - .modal-footer:after { - clear: both; } - .modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; } - .modal-footer .btn-group .btn + .btn { - margin-left: -1px; } - .modal-footer .btn-block + .btn-block { - margin-left: 0; } - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; } - -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; } - - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } - - .modal-sm { - width: 300px; } } -@media (min-width: 992px) { - .modal-lg { - width: 900px; } } -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.846; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 13px; - opacity: 0; - filter: alpha(opacity=0); } - .tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); } - .tooltip.top { - margin-top: -3px; - padding: 5px 0; } - .tooltip.right { - margin-left: 3px; - padding: 0 5px; } - .tooltip.bottom { - margin-top: 3px; - padding: 5px 0; } - .tooltip.left { - margin-left: -3px; - padding: 0 5px; } - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #727272; - border-radius: 3px; } - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; } - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #727272; } -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #727272; } -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #727272; } -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #727272; } -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #727272; } -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #727272; } -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #727272; } -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #727272; } - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.846; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 15px; - background-color: #fff; - background-clip: padding-box; - border: 1px solid transparent; - border: 1px solid transparent; - border-radius: 3px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } - .popover.top { - margin-top: -10px; } - .popover.right { - margin-left: 10px; } - .popover.bottom { - margin-top: 10px; } - .popover.left { - margin-left: -10px; } - -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 15px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 2px 2px 0 0; } - -.popover-content { - padding: 9px 14px; } - -.popover > .arrow, .popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; } - -.popover > .arrow { - border-width: 11px; } - -.popover > .arrow:after { - border-width: 10px; - content: ""; } - -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: transparent; - border-top-color: fadein(transparent, 12%); - bottom: -11px; } - .popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #fff; } -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: transparent; - border-right-color: fadein(transparent, 12%); } - .popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #fff; } -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: transparent; - border-bottom-color: fadein(transparent, 12%); - top: -11px; } - .popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #fff; } -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: transparent; - border-left-color: fadein(transparent, 12%); } - .popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #fff; - bottom: -10px; } - -.carousel { - position: relative; } - -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; } - .carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; } - .carousel-inner > .item > img, - .carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; - line-height: 1; } - @media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -moz-transition: -moz-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - -moz-perspective: 1000px; - perspective: 1000px; } - .carousel-inner > .item.next, .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; } - .carousel-inner > .item.prev, .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; } - .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; } } - .carousel-inner > .active, - .carousel-inner > .next, - .carousel-inner > .prev { - display: block; } - .carousel-inner > .active { - left: 0; } - .carousel-inner > .next, - .carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; } - .carousel-inner > .next { - left: 100%; } - .carousel-inner > .prev { - left: -100%; } - .carousel-inner > .next.left, - .carousel-inner > .prev.right { - left: 0; } - .carousel-inner > .active.left { - left: -100%; } - .carousel-inner > .active.right { - left: 100%; } - -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: transparent; } - .carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } - .carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } - .carousel-control:hover, .carousel-control:focus { - outline: 0; - color: #fff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); } - .carousel-control .icon-prev, - .carousel-control .icon-next, - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; } - .carousel-control .icon-prev, - .carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; } - .carousel-control .icon-next, - .carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; } - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; } - .carousel-control .icon-prev:before { - content: '\2039'; } - .carousel-control .icon-next:before { - content: '\203a'; } - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; } - .carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #fff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: transparent; } - .carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #fff; } - -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } - .carousel-caption .btn { - text-shadow: none; } - -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; } - - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; } - - .carousel-indicators { - bottom: 20px; } } -.clearfix:before, .clearfix:after { - content: " "; - display: table; } -.clearfix:after { - clear: both; } - -.center-block { - display: block; - margin-left: auto; - margin-right: auto; } - -.pull-right { - float: right !important; } - -.pull-left { - float: left !important; } - -.hide { - display: none !important; } - -.show { - display: block !important; } - -.invisible { - visibility: hidden; } - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; } - -.hidden { - display: none !important; } - -.affix { - position: fixed; } - -@-ms-viewport { - width: device-width; } -.visible-xs { - display: none !important; } - -.visible-sm { - display: none !important; } - -.visible-md { - display: none !important; } - -.visible-lg { - display: none !important; } - -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; } - -@media (max-width: 767px) { - .visible-xs { - display: block !important; } - - table.visible-xs { - display: table !important; } - - tr.visible-xs { - display: table-row !important; } - - th.visible-xs, - td.visible-xs { - display: table-cell !important; } } -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; } } - -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; } } - -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; } - - table.visible-sm { - display: table !important; } - - tr.visible-sm { - display: table-row !important; } - - th.visible-sm, - td.visible-sm { - display: table-cell !important; } } -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; } - - table.visible-md { - display: table !important; } - - tr.visible-md { - display: table-row !important; } - - th.visible-md, - td.visible-md { - display: table-cell !important; } } -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; } } - -@media (min-width: 1200px) { - .visible-lg { - display: block !important; } - - table.visible-lg { - display: table !important; } - - tr.visible-lg { - display: table-row !important; } - - th.visible-lg, - td.visible-lg { - display: table-cell !important; } } -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; } } - -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; } } - -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; } } - -@media (max-width: 767px) { - .hidden-xs { - display: none !important; } } -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; } } -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; } } -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; } } -.visible-print { - display: none !important; } - -@media print { - .visible-print { - display: block !important; } - - table.visible-print { - display: table !important; } - - tr.visible-print { - display: table-row !important; } - - th.visible-print, - td.visible-print { - display: table-cell !important; } } -.visible-print-block { - display: none !important; } - @media print { - .visible-print-block { - display: block !important; } } - -.visible-print-inline { - display: none !important; } - @media print { - .visible-print-inline { - display: inline !important; } } - -.visible-print-inline-block { - display: none !important; } - @media print { - .visible-print-inline-block { - display: inline-block !important; } } - -@media print { - .hidden-print { - display: none !important; } } - -.navbar { - border-bottom: 1px solid #444; - -webkit-box-shadow: 0 3px 12px 0px rgba(0, 0, 0, 0.1); - box-shadow: 0 3px 12px 0px rgba(0, 0, 0, 0.1); - min-height: 50px; - transition: all 0.35s ease; } - -.navbar-brand { - font-family: "Josefin Sans", sans-serif; - font-weight: 400; - padding: 0 0 0 60px; - height: 48px; - line-height: 55px; - background-image: url(./img/logo_grey.png); - background-size: 38px auto; - background-repeat: no-repeat; - background-position: 15px center; - transition: all 0.25s; } - -.navbar-label { - font-family: "Josefin Sans", sans-serif; - font-weight: 400; - font-size: 38px; - padding: 0 0 0 0px; - height: 48px; - line-height: 55px; - background-repeat: no-repeat; - background-position: 15px center; } - .navbar-label a:hover, a:visited, a:link, a:active { - text-decoration: none!important; - -webkit-box-shadow: none!important; - box-shadow: none!important; } - .navbar-nav li a { - padding-top: 10px; - padding-bottom: 0; - line-height: inherit; } - .navbar-inverse .navbar-form input[type=text], - .navbar-inverse .navbar-form input[type=password] { - color: #fff; - -webkit-box-shadow: inset 0 -1px 0 #d8e8f6; - box-shadow: inset 0 -1px 0 #d8e8f6; } - .navbar-inverse .navbar-form input[type=text]::-moz-placeholder, - .navbar-inverse .navbar-form input[type=password]::-moz-placeholder { - color: #d8e8f6; - opacity: 1; } - .navbar-inverse .navbar-form input[type=text]:-ms-input-placeholder, - .navbar-inverse .navbar-form input[type=password]:-ms-input-placeholder { - color: #d8e8f6; } - .navbar-inverse .navbar-form input[type=text]::-webkit-input-placeholder, - .navbar-inverse .navbar-form input[type=password]::-webkit-input-placeholder { - color: #d8e8f6; } - .navbar-inverse .navbar-form input[type=text]:focus, - .navbar-inverse .navbar-form input[type=password]:focus { - -webkit-box-shadow: inset 0 -2px 0 #fff; - box-shadow: inset 0 -2px 0 #fff; } - -.btn-default:focus { - background-color: #fff; } -.btn-default:hover, .btn-default:active:hover { - background-color: #f0f0f0; } -.btn-default:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn-primary:focus { - background-color: #778; } -.btn-primary:hover, .btn-primary:active:hover { - background-color: #418ed6; } -.btn-primary:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn-success:focus { - background-color: #4CAF50; } -.btn-success:hover, .btn-success:active:hover { - background-color: #439a46; } -.btn-success:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn-info:focus { - background-color: #9C27B0; } -.btn-info:hover, .btn-info:active:hover { - background-color: #862197; } -.btn-info:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn-warning:focus { - background-color: #ff9800; } -.btn-warning:hover, .btn-warning:active:hover { - background-color: #e08600; } -.btn-warning:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn-danger:focus { - background-color: #e51c23; } -.btn-danger:hover, .btn-danger:active:hover { - background-color: #cb171e; } -.btn-danger:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn-link:focus { - background-color: #fff; } -.btn-link:hover, .btn-link:active:hover { - background-color: #f0f0f0; } -.btn-link:active { - -webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); } - -.btn { - text-transform: uppercase; - border: none; - -webkit-box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.4); - box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.4); - -webkit-transition: all 0.4s; - -o-transition: all 0.4s; - transition: all 0.4s; - position: relative; } - .btn:after { - content: ""; - display: block; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - background-image: -webkit-radial-gradient(circle, #000 10%, transparent 10.01%); - background-image: radial-gradient(circle, #000 10%, transparent 10.01%); - background-repeat: no-repeat; - background-size: 1000% 1000%; - background-position: 50%; - opacity: 0; - pointer-events: none; - transition: background .5s, opacity 1s; } - .btn:active:after { - background-size: 0% 0%; - opacity: .2; - transition: 0s; } - .btn-link { - border-radius: 3px; - -webkit-box-shadow: none; - box-shadow: none; - color: #444; } - .btn-link:hover, .btn-link:focus { - -webkit-box-shadow: none; - box-shadow: none; - color: #444; - text-decoration: none; } - .btn-default.disabled { - background-color: rgba(0, 0, 0, 0.1); - color: rgba(0, 0, 0, 0.4); - opacity: 1; } - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: 0; } -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: 0; } - -body { - -webkit-font-smoothing: antialiased; - letter-spacing: .1px; } - -p { - margin: 0 0 1em; } - -input, -button { - -webkit-font-smoothing: antialiased; - letter-spacing: .1px; } - -a { - -o-transition: all 0.25s; } - -.table-hover > tbody > tr, -.table-hover > tbody > tr > th, -.table-hover > tbody > tr > td { - -webkit-transition: all 0.2s; - -o-transition: all 0.2s; - transition: all 0.2s; } - -label { - font-weight: normal; } - -textarea, -textarea.form-control, -input.form-control, -input[type=text], -input[type=password], -input[type=email], -input[type=number], -[type=text].form-control, -[type=password].form-control, -[type=email].form-control, -[type=tel].form-control, -[contenteditable].form-control { - padding: 0; - border: none; - border-radius: 0; - -webkit-appearance: none; - -webkit-box-shadow: inset 0 -1px 0 #ddd; - box-shadow: inset 0 -1px 0 #ddd; - font-size: 16px; } - textarea:focus, - textarea.form-control:focus, - input.form-control:focus, - input[type=text]:focus, - input[type=password]:focus, - input[type=email]:focus, - input[type=number]:focus, - [type=text].form-control:focus, - [type=password].form-control:focus, - [type=email].form-control:focus, - [type=tel].form-control:focus, - [contenteditable].form-control:focus { - -webkit-box-shadow: inset 0 -2px 0 #778; - box-shadow: inset 0 -2px 0 #778; } - textarea[disabled], textarea[readonly], - textarea.form-control[disabled], - textarea.form-control[readonly], - input.form-control[disabled], - input.form-control[readonly], - input[type=text][disabled], - input[type=text][readonly], - input[type=password][disabled], - input[type=password][readonly], - input[type=email][disabled], - input[type=email][readonly], - input[type=number][disabled], - input[type=number][readonly], - [type=text].form-control[disabled], - [type=text].form-control[readonly], - [type=password].form-control[disabled], - [type=password].form-control[readonly], - [type=email].form-control[disabled], - [type=email].form-control[readonly], - [type=tel].form-control[disabled], - [type=tel].form-control[readonly], - [contenteditable].form-control[disabled], - [contenteditable].form-control[readonly] { - -webkit-box-shadow: none; - box-shadow: none; - border-bottom: 1px dotted #ddd; } - textarea.input-sm, .input-group-sm > textarea.form-control, - .input-group-sm > textarea.input-group-addon, - .input-group-sm > .input-group-btn > textarea.btn, - textarea.form-control.input-sm, - .input-group-sm > textarea.form-control, - .input-group-sm > .input-group-btn > textarea.form-control.btn, - input.form-control.input-sm, - .input-group-sm > input.form-control, - .input-group-sm > .input-group-btn > input.form-control.btn, - input[type=text].input-sm, - .input-group-sm > input[type=text].form-control, - .input-group-sm > input[type=text].input-group-addon, - .input-group-sm > .input-group-btn > input[type=text].btn, - input[type=password].input-sm, - .input-group-sm > input[type=password].form-control, - .input-group-sm > input[type=password].input-group-addon, - .input-group-sm > .input-group-btn > input[type=password].btn, - input[type=email].input-sm, - .input-group-sm > input[type=email].form-control, - .input-group-sm > input[type=email].input-group-addon, - .input-group-sm > .input-group-btn > input[type=email].btn, - input[type=number].input-sm, - .input-group-sm > input[type=number].form-control, - .input-group-sm > input[type=number].input-group-addon, - .input-group-sm > .input-group-btn > input[type=number].btn, - [type=text].form-control.input-sm, - .input-group-sm > [type=text].form-control, - .input-group-sm > .input-group-btn > [type=text].form-control.btn, - [type=password].form-control.input-sm, - .input-group-sm > [type=password].form-control, - .input-group-sm > .input-group-btn > [type=password].form-control.btn, - [type=email].form-control.input-sm, - .input-group-sm > [type=email].form-control, - .input-group-sm > .input-group-btn > [type=email].form-control.btn, - [type=tel].form-control.input-sm, - .input-group-sm > [type=tel].form-control, - .input-group-sm > .input-group-btn > [type=tel].form-control.btn, - [contenteditable].form-control.input-sm, - .input-group-sm > [contenteditable].form-control, - .input-group-sm > .input-group-btn > [contenteditable].form-control.btn { - font-size: 13px; } - textarea.input-lg, .input-group-lg > textarea.form-control, - .input-group-lg > textarea.input-group-addon, - .input-group-lg > .input-group-btn > textarea.btn, - textarea.form-control.input-lg, - .input-group-lg > textarea.form-control, - .input-group-lg > .input-group-btn > textarea.form-control.btn, - input.form-control.input-lg, - .input-group-lg > input.form-control, - .input-group-lg > .input-group-btn > input.form-control.btn, - input[type=text].input-lg, - .input-group-lg > input[type=text].form-control, - .input-group-lg > input[type=text].input-group-addon, - .input-group-lg > .input-group-btn > input[type=text].btn, - input[type=password].input-lg, - .input-group-lg > input[type=password].form-control, - .input-group-lg > input[type=password].input-group-addon, - .input-group-lg > .input-group-btn > input[type=password].btn, - input[type=email].input-lg, - .input-group-lg > input[type=email].form-control, - .input-group-lg > input[type=email].input-group-addon, - .input-group-lg > .input-group-btn > input[type=email].btn, - input[type=number].input-lg, - .input-group-lg > input[type=number].form-control, - .input-group-lg > input[type=number].input-group-addon, - .input-group-lg > .input-group-btn > input[type=number].btn, - [type=text].form-control.input-lg, - .input-group-lg > [type=text].form-control, - .input-group-lg > .input-group-btn > [type=text].form-control.btn, - [type=password].form-control.input-lg, - .input-group-lg > [type=password].form-control, - .input-group-lg > .input-group-btn > [type=password].form-control.btn, - [type=email].form-control.input-lg, - .input-group-lg > [type=email].form-control, - .input-group-lg > .input-group-btn > [type=email].form-control.btn, - [type=tel].form-control.input-lg, - .input-group-lg > [type=tel].form-control, - .input-group-lg > .input-group-btn > [type=tel].form-control.btn, - [contenteditable].form-control.input-lg, - .input-group-lg > [contenteditable].form-control, - .input-group-lg > .input-group-btn > [contenteditable].form-control.btn { - font-size: 19px; } - -select, -select.form-control { - border: 0; - border-radius: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - padding-left: 0; - padding-right: 0; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=); - background-size: 13px; - background-repeat: no-repeat; - background-position: right center; - -webkit-box-shadow: inset 0 -1px 0 #ddd; - box-shadow: inset 0 -1px 0 #ddd; - font-size: 16px; - line-height: 1.5; } - select::-ms-expand, - select.form-control::-ms-expand { - display: none; } - select.input-sm, .input-group-sm > select.form-control, - .input-group-sm > select.input-group-addon, - .input-group-sm > .input-group-btn > select.btn, - select.form-control.input-sm, - .input-group-sm > select.form-control, - .input-group-sm > .input-group-btn > select.form-control.btn { - font-size: 13px; } - select.input-lg, .input-group-lg > select.form-control, - .input-group-lg > select.input-group-addon, - .input-group-lg > .input-group-btn > select.btn, - select.form-control.input-lg, - .input-group-lg > select.form-control, - .input-group-lg > .input-group-btn > select.form-control.btn { - font-size: 19px; } - select:focus, - select.form-control:focus { - -webkit-box-shadow: inset 0 -2px 0 #778; - box-shadow: inset 0 -2px 0 #778; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=); } - select[multiple], - select.form-control[multiple] { - background: none; } - -.radio label, -.radio-inline label, -.checkbox label, -.checkbox-inline label { - padding-left: 25px; } -.radio input[type="radio"], -.radio input[type="checkbox"], -.radio-inline input[type="radio"], -.radio-inline input[type="checkbox"], -.checkbox input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="radio"], -.checkbox-inline input[type="checkbox"] { - margin-left: -25px; } - -input[type="radio"], -.radio input[type="radio"], -.radio-inline input[type="radio"] { - position: relative; - margin-top: 6px; - margin-right: 4px; - vertical-align: top; - border: none; - background-color: transparent; - -webkit-appearance: none; - appearance: none; - cursor: pointer; } - input[type="radio"]:focus, - .radio input[type="radio"]:focus, - .radio-inline input[type="radio"]:focus { - outline: none; } - input[type="radio"]:before, input[type="radio"]:after, - .radio input[type="radio"]:before, - .radio input[type="radio"]:after, - .radio-inline input[type="radio"]:before, - .radio-inline input[type="radio"]:after { - content: ""; - display: block; - width: 18px; - height: 18px; - border-radius: 50%; - -webkit-transition: 240ms; - -o-transition: 240ms; - transition: 240ms; } - input[type="radio"]:before, - .radio input[type="radio"]:before, - .radio-inline input[type="radio"]:before { - position: absolute; - left: 0; - top: -3px; - background-color: #778; - -webkit-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); } - input[type="radio"]:after, - .radio input[type="radio"]:after, - .radio-inline input[type="radio"]:after { - position: relative; - top: -3px; - border: 2px solid #666; } - input[type="radio"]:checked:before, - .radio input[type="radio"]:checked:before, - .radio-inline input[type="radio"]:checked:before { - -webkit-transform: scale(0.5); - -ms-transform: scale(0.5); - -o-transform: scale(0.5); - transform: scale(0.5); } - input[type="radio"]:disabled:checked:before, - .radio input[type="radio"]:disabled:checked:before, - .radio-inline input[type="radio"]:disabled:checked:before { - background-color: #bbb; } - input[type="radio"]:checked:after, - .radio input[type="radio"]:checked:after, - .radio-inline input[type="radio"]:checked:after { - border-color: #778; } - input[type="radio"]:disabled:after, input[type="radio"]:disabled:checked:after, - .radio input[type="radio"]:disabled:after, - .radio input[type="radio"]:disabled:checked:after, - .radio-inline input[type="radio"]:disabled:after, - .radio-inline input[type="radio"]:disabled:checked:after { - border-color: #bbb; } - -input[type="checkbox"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: relative; - border: none; - margin-bottom: -4px; - -webkit-appearance: none; - appearance: none; - cursor: pointer; } - input[type="checkbox"]:focus, - .checkbox input[type="checkbox"]:focus, - .checkbox-inline input[type="checkbox"]:focus { - outline: none; } - input[type="checkbox"]:focus:after, - .checkbox input[type="checkbox"]:focus:after, - .checkbox-inline input[type="checkbox"]:focus:after { - border-color: #778; } - input[type="checkbox"]:after, - .checkbox input[type="checkbox"]:after, - .checkbox-inline input[type="checkbox"]:after { - content: ""; - display: block; - width: 18px; - height: 18px; - margin-top: -2px; - margin-right: 5px; - border: 2px solid #666; - border-radius: 2px; - -webkit-transition: 240ms; - -o-transition: 240ms; - transition: 240ms; } - input[type="checkbox"]:checked:before, - .checkbox input[type="checkbox"]:checked:before, - .checkbox-inline input[type="checkbox"]:checked:before { - content: ""; - position: absolute; - top: 0; - left: 6px; - display: table; - width: 6px; - height: 12px; - border: 2px solid #fff; - border-top-width: 0; - border-left-width: 0; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); } - input[type="checkbox"]:checked:after, - .checkbox input[type="checkbox"]:checked:after, - .checkbox-inline input[type="checkbox"]:checked:after { - background-color: #778; - border-color: #778; } - input[type="checkbox"]:disabled:after, - .checkbox input[type="checkbox"]:disabled:after, - .checkbox-inline input[type="checkbox"]:disabled:after { - border-color: #bbb; } - input[type="checkbox"]:disabled:checked:after, - .checkbox input[type="checkbox"]:disabled:checked:after, - .checkbox-inline input[type="checkbox"]:disabled:checked:after { - background-color: #bbb; - border-color: transparent; } - -.has-warning input:not([type=checkbox]), -.has-warning .form-control, -.has-warning input.form-control[readonly], -.has-warning input[type=text][readonly], -.has-warning [type=text].form-control[readonly], -.has-warning input:not([type=checkbox]):focus, -.has-warning .form-control:focus { - border-bottom: none; - -webkit-box-shadow: inset 0 -2px 0 #ff9800; - box-shadow: inset 0 -2px 0 #ff9800; } - -.has-error input:not([type=checkbox]), -.has-error .form-control, -.has-error input.form-control[readonly], -.has-error input[type=text][readonly], -.has-error [type=text].form-control[readonly], -.has-error input:not([type=checkbox]):focus, -.has-error .form-control:focus { - border-bottom: none; - -webkit-box-shadow: inset 0 -2px 0 #e51c23; - box-shadow: inset 0 -2px 0 #e51c23; } - -.has-success input:not([type=checkbox]), -.has-success .form-control, -.has-success input.form-control[readonly], -.has-success input[type=text][readonly], -.has-success [type=text].form-control[readonly], -.has-success input:not([type=checkbox]):focus, -.has-success .form-control:focus { - border-bottom: none; - -webkit-box-shadow: inset 0 -2px 0 #4CAF50; - box-shadow: inset 0 -2px 0 #4CAF50; } - -.has-warning .input-group-addon, .has-error .input-group-addon, .has-success .input-group-addon { - color: #666; - border-color: transparent; - background-color: transparent; } - -.form-group-lg select, -.form-group-lg select.form-control { - line-height: 1.5; } - -.nav-tabs > li > a, -.nav-tabs > li > a:focus { - margin-right: 0; - background-color: transparent; - border: none; - color: #444; - -webkit-box-shadow: inset 0 -1px 0 #ddd; - box-shadow: inset 0 -1px 0 #ddd; - -webkit-transition: all 0.2s; - -o-transition: all 0.2s; - transition: all 0.2s; } - .nav-tabs > li > a:hover, - .nav-tabs > li > a:focus:hover { - background-color: transparent; - -webkit-box-shadow: inset 0 -2px 0 #778; - box-shadow: inset 0 -2px 0 #778; - color: #778; } -.nav-tabs > li.active > a, .nav-tabs > li.active > a:focus { - border: none; - -webkit-box-shadow: inset 0 -2px 0 #778; - box-shadow: inset 0 -2px 0 #778; - color: #778; } - .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus:hover { - border: none; - color: #778; } -.nav-tabs > li.disabled > a { - -webkit-box-shadow: inset 0 -1px 0 #ddd; - box-shadow: inset 0 -1px 0 #ddd; } -.nav-tabs.nav-justified > li > a, .nav-tabs.nav-justified > li > a:hover, .nav-tabs.nav-justified > li > a:focus, .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { - border: none; } -.nav-tabs .dropdown-menu { - margin-top: 0; } - -.dropdown-menu { - margin-top: 0; - border-right: 1px solid #bdd; - border-left: 1px solid #bdd; - border-bottom: 1px solid #bdd; - border-top: transparent; } - -.alert { - border: none; - color: #fff; } - .alert-success { - background-color: #4CAF50; } - .alert-info { - background-color: #9C27B0; } - .alert-warning { - background-color: #ff9800; } - .alert-danger { - background-color: #e51c23; } - .alert a:not(.close):not(.btn), - .alert .alert-link { - color: #fff; - font-weight: bold; } - .alert .close { - color: #fff; } - -.badge { - padding: 4px 6px 4px; } - -.progress { - position: relative; - z-index: 1; - height: 6px; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; } - .progress-bar { - -webkit-box-shadow: none; - box-shadow: none; } - .progress-bar:last-child { - border-radius: 0 3px 3px 0; } - .progress-bar:last-child:before { - display: block; - content: ""; - position: absolute; - width: 100%; - height: 100%; - left: 0; - right: 0; - z-index: -1; - background-color: #edf4fb; } - .progress-bar-success:last-child.progress-bar:before { - background-color: #c7e7c8; } - .progress-bar-info:last-child.progress-bar:before { - background-color: #edc9f3; } - .progress-bar-warning:last-child.progress-bar:before { - background-color: #ffe0b3; } - .progress-bar-danger:last-child.progress-bar:before { - background-color: #f28e92; } - -.close { - font-size: 34px; - font-weight: 300; - line-height: 24px; - opacity: 0.6; - -webkit-transition: all 0.2s; - -o-transition: all 0.2s; - transition: all 0.2s; } - .close:hover { - opacity: 1; } - -.list-group-item { - padding: 15px; } -.list-group-item-text { - color: #bbb; } - -.well { - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; } - -.panel { - border: none; - border-radius: 2px; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } - .panel-heading { - border-bottom: none; } - .panel-footer { - border-top: none; } - -.popover { - border: none; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } - -.carousel-caption h1, .carousel-caption h2, .carousel-caption h3, .carousel-caption h4, .carousel-caption h5, .carousel-caption h6 { - color: inherit; } diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index 670aa87..0000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,358 +0,0 @@ -img.icon { - float: left; - margin-left: -35px; - width: 30px; - height: 30px; -} - -/* Fixes for fixed navbar --------------------------*/ - -body { - position: relative; - padding-top: 90px; - font-size: 16px; -} - -.contents h1, .contents h2 { - padding-top: 55px; - margin-top: -45px; -} - -.contents h3, .contents h4 { - padding-top: 35px; - margin-top: -45px; -} - -.page-header { - margin-top: 0; - margin-bottom: 10px; - padding-bottom: 0; -} - -/* Static header placement on mobile devices */ -@media (max-width: 767px) { - .navbar-fixed-top { - position: absolute; - } - .navbar-brand { - background-size: 30px auto; - } - .navbar-label { - font-size: 2.0rem; - } -} - -.navbar-toggle { - margin-top: 8px; - margin-bottom: 5px; -} - -/* Table of contents --------------------------*/ - -#sidebar { - /* - Needed to avoid bug in sticky-kit: - https://github.com/leafo/sticky-kit/issues/169 - */ - position:static; -} - -#sidebar h2 { - font-size: 1.6em; - margin-top: 1em; - margin-bottom: 0.25em; -} - -#sidebar .list-unstyled li { - margin-bottom: 0.5em; - line-height: 1.4; -} - -#sidebar small { - color: #777; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre { - display: block; - padding: 10px; - margin: 0 5px 13.5px 5px; - font-size: 13px; - line-height: 1.846; - word-break: break-all; - word-wrap: break-word; - color: #212121; - background-color: #fafafa; - border: 0.1px solid #f5f5f5; - border-radius: 3px; -} - -pre code { - padding: 0; - font-size: 13px; - color: inherit; - background-color: transparent; - border-radius: 0; - overflow-x: auto; -} - -/* -pre { - word-wrap: normal; - word-break: normal; - border: none; -} - -pre code { - background-color: #ftf5f5; - color: inherit; - padding: 0; - font-size: 13px; - background-color: transparent; - border-radius: 0; - overflow-x: auto; - -webkit-font-smoothing: subpixel-antialiased; -} - -.sourceCode { - background-color: #f5f5f5; - color: inherit; - padding: 0; - font-size: 13px; - background-color: transparent; - border-radius: 0; - overflow-x: auto; - -webkit-font-smoothing: subpixel-antialiased; -} -*/ - -pre .img { - margin: 5px 0; -} - -pre .img img { - background-color: #fff; - display: block; -} - -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: #777777;} /* comment */ - -.message { color: black; font-weight: bolder;} -.error { color: orange; font-weight: bolder;} -.warning { color: orange; font-weight: normal;} - - -/* Status --------------------------- */ - -.status-container { - padding-top:32px; -} - -.status-container a { - display: block; - margin-bottom: 5px; -} - -/* For shrinking navbar ------------------ */ - -.navbar.shrink { - min-height: 0; - padding: 0 0; - background-size: 32px auto; -} - -.navbar-brand.shrink { - padding: 0 0 0 54px; - background-size: 32px auto; - transition-duration: 0.25s; -} - -.navbar-label.shrink { - font-size: 32px; - transition-duration: 0.25s; -} - -/* 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: 10%;} -.ref-arguments .desc {width: 90%;} - - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 3px solid #ccc; - - display: flex; - color: black; -} -footer p { - margin-bottom: 0; -} -footer .packagePages { - flex: 1; -} -footer .author { - flex: 1; - text-align: right; -} - -.row a { - padding: 0; - color: #3480c1; - background-color: transparent; -} - -.row a:hover { - background-color: transparent; - text-decoration: none; - color: black; -} - -.packagePages a { - padding: 0; - color: #3480c1; - background-color: transparent; -} - -.author a { - padding: 0; - color: #3480c1; - background-color: transparent; -} - -.packagePages a:hover { - background-color: transparent; - text-decoration: none; - color: black; -} - -.author a:hover { - background-color: transparent; - text-decoration: none; - color: black; -} - -/* ---------------------- hover anchor tags */ - -a.anchor { - display:inline-block; - width: 30px; - height: 30px; - margin-left: -30px; - visibility: hidden; - background-image: url(./img/link.svg); - background-repeat: no-repeat; - background-size: 19px 19px; - background-position: center bottom; - transition: visibility 0.3s linear,opacity 0.3s linear,background-position-x 0.3s linear; - opacity: 0; -} - -.hasAnchor:hover a.anchor { - visibility: visible; - opacity: 1; - background-position-x: 0px; -} - -/* Tweak appearance of navigation in sidebar ---------------------- */ - -#sidebar .nav { - padding-left: 0; - list-style-type: none; - color: #5a9ddb; -} - -#sidebar .nav > li { - padding: 10px 0 0 20px; - display: list-item; - line-height: 20px; - background-image: url(./img/tocBullet.svg); - background-repeat: no-repeat; - background-size: 16px 280px; - background-position: left 0; -} - -#sidebar .nav > li.active { - background-position: left -240px; -} - -#sidebar a { - padding: 0; - color: #3480c1; - background-color: transparent; -} - -#sidebar a:hover { - background-color: transparent; - text-decoration: none; - color: black; -} - -.fa-github { - font-size: 28px; - color: #7c7c7c; - -webkit-text-stroke-width: 0px; - -webkit-text-stroke-color: black; - transition: all 0.35s ease-in-out; -} - -.fa-github:hover { - color: black; - transition: all 0.35s ease-in-out; -} - -.fa-twitter { - font-size: 28px; - color: #7c7c7c; - transition: all 0.35s ease-in-out; -} - -.fa-twitter:hover { - color: #00ACED; - -webkit-text-stroke-width: 0.5px; - -webkit-text-stroke-color: black; - transition: all 0.35s ease-in-out; -} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} diff --git a/docs/pkgdown.js b/docs/pkgdown.js deleted file mode 100644 index 183dad7..0000000 --- a/docs/pkgdown.js +++ /dev/null @@ -1,60 +0,0 @@ -$(function() { - $("#sidebar").stick_in_parent({ - offset_top: $("#sidebar").offset().top - }); - $('body').scrollspy({ - target: '#sidebar' - }); - $('[data-toggle="tooltip"]').tooltip(); - - /* 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 = ""; - - $(".examples, 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; - } - }); - - 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).scroll(function(){ - if($(window).scrollTop() > 35) { - $('.navbar').addClass("shrink"); - $('.navbar-brand').addClass("shrink"); - $('.navbar-label').addClass("shrink"); - } else { - $('.navbar').removeClass("shrink"); - $('.navbar-brand').removeClass("shrink"); - $('.navbar-label').removeClass("shrink"); - } -}); diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index 1002c3c..0000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Reference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Random name generation

-

Function to generate random names.

-
-

randomNames

-

Random Names Function

-

Random name data set

-

Internal data set used to create random names.

-
-

randomNamesData

-

First names (by gender and ethnicity) and last names (by ethnicity) for randomNames function

-
-
- - -
- -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/docs/reference/randomNames-package.html b/docs/reference/randomNames-package.html deleted file mode 100644 index fedac22..0000000 --- a/docs/reference/randomNames-package.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Generate Random Given and Surnames — randomNames-package - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - - - - -

Details

- - - - - - - - - - - - - -
-Package:
randomNames
-Type:
Package
-Version:
1.5-0.0
-Date:
2021-4-21
-License:
GPL-3
-LazyLoad:
yes
- -
- -
- -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/docs/reference/randomNames.html b/docs/reference/randomNames.html deleted file mode 100644 index f3e9e24..0000000 --- a/docs/reference/randomNames.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • Random Names Function — randomNames - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - - -
randomNames(n,
-            gender,
-            ethnicity,
-            which.names="both",
-            name.order="last.first",
-            name.sep=", ",
-            sample.with.replacement=TRUE,
-            return.complete.data=FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
n

OPTIONAL. Positive integer indicating how many name to produce. Best to use when no gender or ethnicity data is provided and one simply wants n random first and/or - last names.

gender

OPTIONAL. A vector indicating the genders for the names to be calculated. The maximum of n, the length of gender and the length of - ethnicity is the number of random names returned. Note that the gender vector is only employed for deriving first names. - If no gender vector is provided, the function randomly samples from both genders to produce a sample of names. Current gender codes are 0: Male - and 1: Female. See examples for various use cases.

ethnicity

OPTIONAL. A vector indicating the ethnicities for the names to be calculated. The maximum of n, the length of gender and the length of - ethnicity is the number of random names returned. Note that the ethnicity vector is employed for both deriving first and last names. If no ethnicity vector - is provided the function samples from all ethnicity to produce a sample of names. Current ethnicity codes are:

-
1

American Indian or Native Alaskan

-
2

Asian or Pacific Islander

-
3

Black (not Hispanic)

-
4

Hispanic

-
5

White (not Hispanic)

-
6

Middle-Eastern, Arabic

-

which.names

OPTIONAL. One of "both" (the default), "first", or "last", "complete.data" indicating what names to produce. "complete.data" - provides a data.table with ethnicity and gender codes.

name.order

OPTIONAL. If which.names is "both", then names can be returned as either "last.first" (the default) or "first.last".

name.sep

OPTIONAL. If which.names is "both", then names are separated by the name.sep string provided. Defaults to comma-space separated.

sample.with.replacement

Boolean argument (defaults to TRUE) indicating whether sampling is done with replacement.

return.complete.data

Boolean argument (defaults to FALSE) indicating whether to return data including gender and ethnicity codes used for name construct. If set to TRUE, - data is returned as a data.frame/data.table.

- -

Details

- -

Typical use of the function is to submit a vector of genders and ethnicities to derived a gender and ethnicity representative vector of first and/or last names.

-

Value

- -

Function returns a character vector containing first and/or last names.

-

See also

- -

randomNamesData

- -

Examples

-
randomNames() ## Returns a single name in "last, first" format
#> [1] "Caudillo, Jerel"
-randomNames(5, which.names="first") ## Returns 5 first names
#> [1] "Patrick" "Randall" "San" "Caitlin" "Zaidaan"
-randomNames(5, return.complete.data=TRUE) ## Returns entire data.table
#> gender ethnicity first_name last_name -#> 1: 0 1 Mahpiya Rockwell -#> 2: 1 6 Mastoora el-Mohamed -#> 3: 1 3 Myoni Hale -#> 4: 1 5 Shayla Dunn -#> 5: 0 6 Muaaid al-Hamid
-test.df <- data.frame(GENDER=sample(0:1, 100, replace=TRUE), - ETHNICITY=sample(1:6, 100, replace=TRUE)) - -test.names <- randomNames(gender=test.df$GENDER, - ethnicity=test.df$ETHNICITY) - -head(test.names)
#> [1] "Palmier, Mackenzie" "el-Abraham, Mardiyya" "Hysaw, Dante" -#> [4] "Ayala, Karla" "Coleman, Abeni" "Sahai, Yer"
- -ethnicities <- c("African American", "Hispanic", "Asian", "White", "Native American") -genders <- c("Female", "Male") - -test.df <- data.frame(GENDER=sample(genders, 100, replace=TRUE), - ETHNICITY=sample(ethnicities, 100, replace=TRUE)) - -test.names <- randomNames(gender=test.df$GENDER, - ethnicity=test.df$ETHNICITY) - -head(test.names)
#> [1] "Landin, Anthony" "Gutierrez, Alexandria" "Lobato, Andrew" -#> [4] "Mccallum, Hannah" "Nelson, Lolita" "Prinzi, Cali"
-
- -
- -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/docs/reference/randomNamesData.html b/docs/reference/randomNamesData.html deleted file mode 100644 index a3c17f1..0000000 --- a/docs/reference/randomNamesData.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -randomNames • First names (by gender and ethnicity) and last names (by ethnicity) for randomNames function — randomNamesData - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - - - - -

Format

- -

An environment of first and last names by gender and ethnicity (first names) and ethnicity (last names) - Gender is coded 0 for male and 1 for female, ethnicity is coded 1 for American Indian or Native Alaskan, - 2 for Asian or Pacific Islander, 3 for Black (not Hispanic), 4 for Hispanic, and 5 for White (not - Hispanic). For example, the array first_names_e1_g0 in randomNamesData provides first - and associated frequency probabilities for male, American Indians or Native Alaskans. To view names of - all environment arrays type ls(randomNamesData) after loading the package.

-

See also

- -

randomNames

-

Source

- -

Large scale state data

- -
- -
- -
-
-

randomNames is a Center for Assessment thing.

-
- -
-

Developed & Maintained by Damian W. Betebenner.

-
- - - -
-
- - - diff --git a/inst/CITATION b/inst/CITATION index 6e02403..2869e9d 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -1,14 +1,14 @@ -bibentry( - bibtype = "Manual", - header = "To cite the randomNames package in publications use:", - title = "{randomNames}: Function for Generating Random Names and a Dataset", - author = "Damian W. Betebenner", - year = "2024", - note = "R package version 1.6-1.0", - url = "https://cran.r-project.org/package=randomNames", - - textVersion = paste("Damian W. Betebenner (2024).", - "randomNames: Function for Generating Random Names and a Dataset.", - "(R package version 1.6-1.0", - "URL https://cran.r-project.org/package=randomNames") -) +bibentry( + bibtype = "Manual", + header = "To cite the randomNames package in publications use:", + title = "{randomNames}: Function for Generating Random Names and a Dataset", + author = "Damian W. Betebenner", + year = "2026", + note = "R package version 1.7-0.0", + url = "https://cran.r-project.org/package=randomNames", + + textVersion = paste("Damian W. Betebenner (2026).", + "randomNames: Function for Generating Random Names and a Dataset.", + "(R package version 1.7-0.0", + "URL https://cran.r-project.org/package=randomNames") +) diff --git a/inst/NEWS b/inst/NEWS deleted file mode 100644 index f14b80a..0000000 --- a/inst/NEWS +++ /dev/null @@ -1,69 +0,0 @@ -# randomNames 1.6-0.0 - -* Added in Joshua Lambert's improvements. - -# randomNames 1.5-0.0 - -* Fixed names with embedded spaces as the first character. - -# randomNames 1.4-0.0 - -* Fixed issue with NAs embedded in ethnicity and gender returning wrong data later. - -# randomNames 1.0-0.0 - -* Shortened and improved the title of the package. - -# randomNames 1.0-0.0 - -* Changed numbering of releases from 3 to 4 digits. -* Created real vignette and fixed everything up for a nice 1.0-0.0 release. - -# randomNames 0.6-0 - -* Converted NEWS to NEWS.md and added that to repo. - -# randomNames 0.5-0 - -* Adding vignette and building website. - -# randomNames 0.4-0 - -* Added Middle-Eastern names (ethnicity=6) to data base. - -# randomNames 0.3-0 - -* Fixed bug leading to incorrect re-ordering of results so that they didn't match input. - -# randomNames 0.2-0 - -* Cleaned up documentation. -* Fixed GitHub pull requests. - -# randomNames 0.0-7 - -* Changed randomNamesData to environment. - -# randomNames 0.0-6 - -* Changed DESCRIPTION to Import data.table. - -# randomNames 0.0-5 - -* Fixed key to accomodate changes in data.table 1.7.8. - -# randomNames 0.0-4 - -* Added NAMESPACE. - -# randomNames 0.0-3 - -* Modified function to adapt to improvements in data.table. - -# randomNames 0.0-2 - -* Refined function to recode supplied gender and ethnicity argument/variables if not in function appropriate form. - -# randomNames 0.0-1 - -* Package Released. diff --git a/inst/doc/randomNames.R b/inst/doc/randomNames.R deleted file mode 100644 index b9f7d14..0000000 --- a/inst/doc/randomNames.R +++ /dev/null @@ -1,41 +0,0 @@ -## ----include = FALSE------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -library(randomNames) -is_html_output = function() { - knitr::opts_knit$get("rmarkdown.pandoc.to")=="html" -} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "", - prompt=TRUE, - fig.dpi = 96 - ) -if (is_html_output()) { - options(width=1000) -} - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames() - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5) - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5) ## 5 last, first names - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5, gender=1) ## 5 female last, first names - -randomNames(5, gender=c(0,0,1,1,1)) ## 2 male and 3 female last, first names - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first names - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern/Arabic, female first names - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5, gender=1, ethnicity=6, name.order="first.last") ## 5 first last names - -## ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -randomNames(5, gender=1, ethnicity=6, name.order="first.last", name.sep=" ") ## 5 first last names separated by a space - diff --git a/inst/doc/randomNames.html b/inst/doc/randomNames.html deleted file mode 100644 index 4f0ad9c..0000000 --- a/inst/doc/randomNames.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - -Getting started with randomNames - - - - - - - - - - - - - - - - - -

Getting started with randomNames

-

Damian W Betebenner

-

September 27th, 2017

- - - -
-

Introduction

-

The randomNames package contains a single function allowing users to generate proportionally correct, gender and ethnicity specific first and last names. The package contains an embedded data set of names that is based upon a large scale data set of names from the United States where the ethnicity and gender of the person was identified. The embedded data set includes information about ethnicity, gender (first name), and the probability of the name occurring in the data set. Random names are often useful in situations where one needs to share personal information but needs to obscure the identity of the person to whom the data belongs.

-
-
-

Use

-

After installing the package from either CRAN or GitHub, it’s simple to generate random names using the following simple instructions.

-

By default, the randomNames function supplies a single random last and first name separated by a comma:

-
> randomNames()
-[1] "Maestas, Hector"
-

To generate more random names, just supply a positive integer to the randomNames function:

-
> randomNames(5)
-[1] "al-Soltani, Mufliha" "Chang, Paul"         "Mills, Charlene"     "Bravo, Joshua"       "el-Ammar, Mamdooh"  
-
-

Additional output control

-

The randomNames function accepts several arguments including n, gender, ethnicity, which.names, name.order, and name.sep.

-
randomNames(n,
-            gender,
-            ethnicity,
-            which.names="both",
-            name.order="last.first",
-            name.sep=", ",
-            sample.with.replacement=TRUE,
-            return.complete.data=FALSE)
-

For complete documentation on values accepted for arguments, see the function documentation

-
-
-

Examples

-

The first argument, n, controls the number of names returned by the randomNames function:

-
> randomNames(5) ## 5 last, first names
-[1] "Manley, Jeremy"         "Martinez, Adrian"       "Willis, Katherine"      "Cereceres, Christopher" "Cheema, Divyanka"      
-

The second argument, gender, controls the gender (0=male, 1=female) of the first names returned. This argument can be a vector up to the same length as the number of names requested.

-
> randomNames(5, gender=1) ## 5 female last, first names
-[1] "Bear, Tasina"         "Cleveland, Adesuwa"   "el-Ibrahim, Mardiyya" "Bradley, Hope"        "el-Sarwar, Nabeeha"  
-> 
-> randomNames(5, gender=c(0,0,1,1,1)) ## 2 male  and 3 female last, first names
-[1] "Nava, Ian"      "Medina, Khiry"  "Evans, Aliea"   "Vue, Tove"      "al-Ally, Reema"
-

The third argument, ethnicity, controls the ethnicity of the names returned. The following integer codes/ethnicities are accepted:

-
    -
  1. American Indian or Native Alaskan
  2. -
  3. Asian or Pacific Islander
  4. -
  5. Black (not Hispanic)
  6. -
  7. Hispanic
  8. -
  9. White (not Hispanic)
  10. -
  11. Middle-Eastern, Arabic
  12. -
-
> randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first names
-[1] "Abdul-Amin, Jesse"  "Buckman, D'Morea"   "Adam, Dontae"       "Thomas Jr, Nicolas" "Ausler, Aaron"     
-

The fourth argument, which.names controls which names are returned. The argument accepts the values: both (the default), last, first, or complete.data

-
> randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern/Arabic, female first names
-[1] "Sundus"   "Sundus"   "Hissa"    "Najeema"  "Mawzoona"
-

The fifth argument, name.order, controls the order in which the names are returned. The argument is only relevant if which.names=both. The argument accepts the values: last.first (the default) and first.last.

-
> randomNames(5, gender=1, ethnicity=6, name.order="first.last") ## 5 first last names
-[1] "Ramziyya, el-Jalali" "Najeeba, al-Arif"    "Maariya, el-Shehata" "Shakeela, el-Munir"  "Zuhaira, el-Agha"   
-

The sixth argument, name.sep, is a character string that controls the separator used when both names are returned. The default separator is ,.

-
> randomNames(5, gender=1, ethnicity=6, name.order="first.last", name.sep=" ") ## 5 first last names separated by a space
-[1] "Amaani al-Saleh"     "Amaani el-Islam"     "Adhraaa al-Greiss"   "Najma el-Ghaffari"   "Tahleela el-Beshara"
-
-
-
-

Contributions & Requests

-

If you have contribution or a feature request for the randomNames package, don’t hesitate to write or set up an issue on GitHub.

-
- - - - - - - - diff --git a/man/figures/favicon.png b/man/figures/favicon.png new file mode 100644 index 0000000..cd20446 Binary files /dev/null and b/man/figures/favicon.png differ diff --git a/man/figures/logo.png b/man/figures/logo.png new file mode 100644 index 0000000..e4e0390 Binary files /dev/null and b/man/figures/logo.png differ diff --git a/man/figures/logo.svg b/man/figures/logo.svg new file mode 100644 index 0000000..b17405c --- /dev/null +++ b/man/figures/logo.svg @@ -0,0 +1,8 @@ + +randomNames hex logo + + + + + + diff --git a/man/randomNames-package.Rd b/man/randomNames-package.Rd index 0898671..255cf8b 100644 --- a/man/randomNames-package.Rd +++ b/man/randomNames-package.Rd @@ -1,24 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/randomNames-package.R +\docType{package} \name{randomNames-package} \alias{randomNames-package} -\docType{package} -\title{Generate Random Given and Surnames -} +\title{randomNames: Generate Random Given and Surnames} \description{ -Functions for generating random gender and ethnicity correct first and/or last names where names are proportionally sampled based upon their frequency in -a large scale database. +\if{html}{\figure{logo.svg}{options: style='float: right' alt='logo' width='120'}} + +Generates gender and ethnicity correct first and/or last names. Names are chosen proportionally based upon their probability of appearing in a large scale data base of real names, so a roster of random names looks like a roster of real ones. Useful for anonymising results that would otherwise identify people. +} +\seealso{ +Useful links: +\itemize{ + \item \url{https://centerforassessment.github.io/randomNames/} + \item \url{https://github.com/CenterForAssessment/randomNames/} + \item \url{https://cran.r-project.org/package=randomNames} + \item Report bugs at \url{https://github.com/CenterForAssessment/randomNames/issues/} } -\details{ -\tabular{ll}{ -Package: \tab randomNames\cr -Type: \tab Package\cr -Version: \tab 1.6-1.0\cr -Date: \tab 2024-12-3\cr -License: \tab GPL-3\cr -LazyLoad: \tab yes\cr } +\author{ +\strong{Maintainer}: Damian W. Betebenner \email{dbetebenner@nciea.org} (\href{https://orcid.org/0000-0003-0476-5599}{ORCID}) + +Authors: +\itemize{ + \item Damian W. Betebenner \email{dbetebenner@nciea.org} (\href{https://orcid.org/0000-0003-0476-5599}{ORCID}) } -\author{Damian W. Betebenner \email{DBetebenner@nciea.org}} +Other contributors: +\itemize{ + \item Lambert Joshua [contributor] + \item Center for Assessment [copyright holder] +} -\keyword{package} +} +\keyword{internal} diff --git a/man/randomNames.Rd b/man/randomNames.Rd index 4b00a10..3643e6a 100644 --- a/man/randomNames.Rd +++ b/man/randomNames.Rd @@ -1,94 +1,99 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/randomNames.R \name{randomNames} \alias{randomNames} -\title{Random Names Function} -\description{ -Function to generate random gender and ethnicity correct first and/or last names. Names are chosen proportionally based upon their probability of appearing in a large scale database of real names. -Function to generate random gender and ethnicity correct first and/or/last names. The function probabilistically samples from the embedded randomNamesData dataset to provide a realistic list of -first and/or last names. -} +\title{Generate random first and last names} \usage{ -randomNames(n, - gender, - ethnicity, - which.names="both", - name.order="last.first", - name.sep=", ", - sample.with.replacement=TRUE, - return.complete.data=FALSE) +randomNames( + n, + gender, + ethnicity, + which.names = "both", + name.order = "last.first", + name.sep = ", ", + sample.with.replacement = TRUE, + return.complete.data = FALSE +) } - \arguments{ - \item{n}{OPTIONAL. Positive integer indicating how many name to produce. Best to use when no gender or ethnicity data is provided and one simply wants \code{n} random first and/or - last names. - } - \item{gender}{OPTIONAL. A vector indicating the genders for the names to be calculated. The maximum of \code{n}, the length of \code{gender} and the length of - \code{ethnicity} is the number of random names returned. Note that the gender vector is only employed for deriving first names. - If no gender vector is provided, the function randomly samples from both genders to produce a sample of names. Current gender codes are \code{0: Male} - and \code{1: Female}. See examples for various use cases. - } - \item{ethnicity}{OPTIONAL. A vector indicating the ethnicities for the names to be calculated. The maximum of \code{n}, the length of \code{gender} and the length of - \code{ethnicity} is the number of random names returned. Note that the ethnicity vector is employed for both deriving first and last names. If no ethnicity vector - is provided the function samples from all ethnicity to produce a sample of names. Current ethnicity codes are: - \describe{ - \item{1}{American Indian or Native Alaskan} - \item{2}{Asian or Pacific Islander} - \item{3}{Black (not Hispanic)} - \item{4}{Hispanic} - \item{5}{White (not Hispanic)} - \item{6}{Middle-Eastern, Arabic} - } - } - \item{which.names}{OPTIONAL. One of \code{"both"} (the default), \code{"first"}, or \code{"last"}, \code{"complete.data"} indicating what names to produce. \code{"complete.data"} - provides a data.table with \code{ethnicity} and \code{gender} codes. - } - \item{name.order}{OPTIONAL. If \code{which.names} is \code{"both"}, then names can be returned as either \code{"last.first"} (the default) or \code{"first.last"}. - } - \item{name.sep}{OPTIONAL. If \code{which.names} is \code{"both"}, then names are separated by the \code{name.sep} string provided. Defaults to comma-space separated. - } - \item{sample.with.replacement}{Boolean argument (defaults to TRUE) indicating whether sampling is done with replacement. - } - \item{return.complete.data}{Boolean argument (defaults to FALSE) indicating whether to return data including gender and ethnicity codes used for name construct. If set to TRUE, - data is returned as a data.frame/data.table.} +\item{n}{Optional. A single positive whole number: how many names to produce. +Defaults to 1. Most useful when no gender or ethnicity is supplied.} + +\item{gender}{Optional. A vector of genders, either codes (\code{0} male, \code{1} female) +or text as described in Details.} + +\item{ethnicity}{Optional. A vector of ethnicities, either codes or text as +described in Details. The codes are: +\describe{ +\item{1}{American Indian or Native Alaskan} +\item{2}{Asian or Pacific Islander} +\item{3}{Black (not Hispanic)} +\item{4}{Hispanic} +\item{5}{White (not Hispanic)} +\item{6}{Middle-Eastern, Arabic} +}} + +\item{which.names}{One of \code{"both"} (the default), \code{"first"} or \code{"last"}.} + +\item{name.order}{When \code{which.names} is \code{"both"}, either \code{"last.first"} (the +default) or \code{"first.last"}.} + +\item{name.sep}{When \code{which.names} is \code{"both"}, the string placed between the +two names. Defaults to \code{", "}.} + +\item{sample.with.replacement}{Sample names with replacement? Defaults to +\code{TRUE}. Without replacement the number of names asked for in one gender and +ethnicity group cannot exceed the names available for it.} + +\item{return.complete.data}{Return a \code{data.table} with the \code{ethnicity} and +\code{gender} codes used alongside the names, instead of a character vector. +Defaults to \code{FALSE}.} } - - -\details{Typical use of the function is to submit a vector of genders and ethnicities to derived a gender and ethnicity representative vector of first and/or last names. +\value{ +A character vector of names, or, when \code{return.complete.data = TRUE}, a +\code{data.table} with columns \code{gender}, \code{ethnicity} and the requested names. } - -\value{Function returns a character vector containing first and/or last names. +\description{ +Generates random first and/or last names that are consistent with a given gender +and ethnicity. Names are sampled in proportion to how often they occur in the +embedded \link{randomNamesData} data set, so the result looks like a realistic roster. +Random names are useful to anonymise results that would otherwise identify people. +} +\details{ +The number of names returned is the largest of \code{n}, \code{length(gender)} and +\code{length(ethnicity)}; shorter vectors are recycled. Gender is used only for first +names; ethnicity is used for both first and last names. A missing gender or +ethnicity (\code{NA}, or not supplied) is drawn at random: gender with equal +probability, ethnicity with equal probability across the six codes. + +Gender and ethnicity may be given as codes or as text. Text is matched +case-insensitively: \code{"Male"}/\code{"M"}, \code{"Female"}/\code{"F"}; and for ethnicity +\code{"American Indian"}, \code{"Alaska"} or \code{"Native American"} (1); \code{"Asian"}, \code{"Hawaii"} +or \code{"Pacific"} (2); \code{"Black"} or \code{"African"} (3); \code{"Hispanic"} or \code{"Latino"} (4); +\code{"White"} or \code{"Caucasian"} (5); \code{"Middle Eastern"} or \code{"Arabic"} (6). A value that +matches nothing is drawn at random, with a warning. } - -\author{Damian W. Betebenner \email{dbetebenner@nciea.org} } - -\seealso{\code{\link{randomNamesData}}} - \examples{ -randomNames() ## Returns a single name in "last, first" format - -randomNames(5, which.names="first") ## Returns 5 first names - -randomNames(5, return.complete.data=TRUE) ## Returns entire data.table +randomNames() # one name in "last, first" form -test.df <- data.frame(GENDER=sample(0:1, 100, replace=TRUE), - ETHNICITY=sample(1:6, 100, replace=TRUE)) +randomNames(5, which.names = "first") -test.names <- randomNames(gender=test.df$GENDER, - ethnicity=test.df$ETHNICITY) - -head(test.names) +randomNames(5, return.complete.data = TRUE) +test.df <- data.frame( + GENDER = sample(0:1, 100, replace = TRUE), + ETHNICITY = sample(1:6, 100, replace = TRUE) +) +head(randomNames(gender = test.df$GENDER, ethnicity = test.df$ETHNICITY)) ethnicities <- c("African American", "Hispanic", "Asian", "White", "Native American") genders <- c("Female", "Male") - -test.df <- data.frame(GENDER=sample(genders, 100, replace=TRUE), - ETHNICITY=sample(ethnicities, 100, replace=TRUE)) - -test.names <- randomNames(gender=test.df$GENDER, - ethnicity=test.df$ETHNICITY) - -head(test.names) +test.df <- data.frame( + GENDER = sample(genders, 100, replace = TRUE), + ETHNICITY = sample(ethnicities, 100, replace = TRUE) +) +head(randomNames(gender = test.df$GENDER, ethnicity = test.df$ETHNICITY)) +} +\seealso{ +\link{randomNamesData} } - -\keyword{ misc } -\keyword{ models } diff --git a/man/randomNamesData.Rd b/man/randomNamesData.Rd index bb1f03b..32b0505 100644 --- a/man/randomNamesData.Rd +++ b/man/randomNamesData.Rd @@ -1,22 +1,41 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} \name{randomNamesData} \alias{randomNamesData} -\docType{data} -\title{First names (by gender and ethnicity) and last names (by ethnicity) for randomNames function} -\description{ -A dataset compiled from a large scale data set of names providing first names by gender and ethnicity and last names by ethnicity. The dataset provides -frequency probabilities from the original data set so that sampling provides a reasonable set of random names. The dataset is for use with the -\code{randomNames} function to quickly generate random names that can be used, for example, to anonymize results. -} +\title{First and last names by gender and ethnicity} \format{ - An environment of first and last names by gender and ethnicity (first names) and ethnicity (last names) - Gender is coded 0 for male and 1 for female, ethnicity is coded 1 for American Indian or Native Alaskan, - 2 for Asian or Pacific Islander, 3 for Black (not Hispanic), 4 for Hispanic, and 5 for White (not - Hispanic). For example, the array \code{first_names_e1_g0} in \code{randomNamesData} provides first - and associated frequency probabilities for male, American Indians or Native Alaskans. To view names of - all environment arrays type \code{ls(randomNamesData)} after loading the package. - } - -\seealso{\code{\link{randomNames}}} +An environment holding 18 one-column arrays whose row names are the +names and whose values are their frequency probabilities: +\itemize{ +\item \verb{first_names_e_g}: first names for ethnicity \code{E} (1 to 6) and gender +\code{G} (0 male, 1 female), twelve arrays; +\item \verb{last_names_e}: last names for ethnicity \code{E} (1 to 6), six arrays. +} -\source{Large scale state data} +Ethnicity is coded 1 American Indian or Native Alaskan, 2 Asian or Pacific +Islander, 3 Black (not Hispanic), 4 Hispanic, 5 White (not Hispanic) and +6 Middle-Eastern or Arabic. For example \code{first_names_e1_g0} holds first names +and frequency probabilities for male American Indians or Native Alaskans. +\code{ls(randomNamesData)} lists all arrays. +} +\source{ +Large scale state data. +} +\usage{ +randomNamesData +} +\description{ +Names with their frequencies, compiled from a large-scale data set of names in +which each person's gender and ethnicity were recorded. The frequencies are the +sampling probabilities \code{\link[=randomNames]{randomNames()}} uses, so sampling gives a realistic +roster. First names are held by gender and ethnicity, last names by ethnicity. +} +\examples{ +head(ls(randomNamesData)) +head(randomNamesData$last_names_e4) +} +\seealso{ +\code{\link[=randomNames]{randomNames()}} +} \keyword{datasets} diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..10c45b6 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,4 @@ +library(testthat) +library(randomNames) + +test_check("randomNames") diff --git a/tests/testthat/test-codes.R b/tests/testthat/test-codes.R new file mode 100644 index 0000000..a474457 --- /dev/null +++ b/tests/testthat/test-codes.R @@ -0,0 +1,43 @@ +codes <- function(...) randomNames(..., return.complete.data = TRUE, which.names = "first") + +test_that("gender text is matched case-insensitively", { + x <- codes(gender = c("Male", "female", "M", "f", "FEMALE")) + expect_equal(x$gender, c(0, 1, 0, 1, 1)) +}) + +test_that("ethnicity text maps to the six codes", { + x <- codes(ethnicity = c("American Indian", "Alaska Native", "Asian", "Pacific Islander", + "African American", "Black", "Hispanic", "Latino", "White", "Caucasian", "Middle Eastern", "Arabic")) + expect_equal(x$ethnicity, c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6)) +}) + +test_that("a missing code is filled in at random without a warning", { + expect_no_warning(x <- codes(gender = c(0, NA, 1), ethnicity = c(NA, 2, 3))) + expect_true(all(x$gender %in% 0:1)) + expect_true(all(x$ethnicity %in% 1:6)) + expect_equal(x$gender[c(1, 3)], c(0, 1)) + expect_equal(x$ethnicity[2:3], c(2, 3)) +}) + +test_that("values that match nothing are drawn at random, with a warning", { + expect_warning(x <- codes(gender = c("Male", "robot")), "1 gender value was not recognised") + expect_equal(x$gender[1], 0) + expect_true(x$gender[2] %in% 0:1) + expect_warning(codes(ethnicity = c("White", "Martian", "Venusian")), "2 ethnicity values were not recognised") + expect_warning(codes(ethnicity = c(1, 7)), "1 ethnicity value was not recognised") +}) + +test_that("codes and names agree with the data set", { + set.seed(1) + x <- randomNames(200, gender = 1, ethnicity = 2, return.complete.data = TRUE) + expect_true(all(x$first_name %in% rownames(randomNamesData$first_names_e2_g1))) + expect_true(all(x$last_name %in% rownames(randomNamesData$last_names_e2))) +}) + +test_that("valid numeric codes survive next to text and invalid values", { + expect_warning(x <- codes(ethnicity = c(1, 7, 3)), "1 ethnicity value was not recognised") + expect_equal(x$ethnicity[c(1, 3)], c(1, 3)) + x <- codes(gender = c("1", "Male", 0), ethnicity = c("2", "white", 6)) + expect_equal(x$gender, c(1, 0, 0)) + expect_equal(x$ethnicity, c(2, 5, 6)) +}) diff --git a/tests/testthat/test-data.R b/tests/testthat/test-data.R new file mode 100644 index 0000000..3ccbc93 --- /dev/null +++ b/tests/testthat/test-data.R @@ -0,0 +1,16 @@ +test_that("the data set has the documented arrays", { + expect_true(is.environment(randomNamesData)) + expect_setequal(ls(randomNamesData), c( + paste0("first_names_e", rep(1:6, each = 2), "_g", 0:1), paste0("last_names_e", 1:6) + )) +}) + +test_that("each array has names and frequency probabilities", { + for (nm in ls(randomNamesData)) { + a <- randomNamesData[[nm]] + expect_true(!is.null(rownames(a)), info = nm) + expect_gt(nrow(a), 100, label = paste("rows in", nm)) + expect_false(anyNA(a), info = nm) + expect_true(all(a >= 0), info = nm) + } +}) diff --git a/tests/testthat/test-input-checks.R b/tests/testthat/test-input-checks.R new file mode 100644 index 0000000..b32cb28 --- /dev/null +++ b/tests/testthat/test-input-checks.R @@ -0,0 +1,18 @@ +test_that("an invalid n is an error", { + for (bad in list(0, -3, 2.5, NA_real_, "a", c(1, 2), NULL, Inf)) { + expect_error(randomNames(bad), "'n' must be a single positive whole number.", fixed = TRUE) + } +}) + +test_that("unknown choices are errors, not silent NULLs", { + expect_error(randomNames(2, which.names = "middle"), "'which.names' must be one of") + expect_error(randomNames(2, name.order = "alphabetical"), "'name.order' must be one of") + expect_error(randomNames(2, which.names = c("first", "last")), "'which.names' must be one of") +}) + +test_that("other arguments are validated", { + expect_error(randomNames(2, name.sep = NA), "'name.sep'") + expect_error(randomNames(2, name.sep = c("a", "b")), "'name.sep'") + expect_error(randomNames(2, sample.with.replacement = "yes"), "'sample.with.replacement'") + expect_error(randomNames(2, return.complete.data = NA), "'return.complete.data'") +}) diff --git a/tests/testthat/test-output.R b/tests/testthat/test-output.R new file mode 100644 index 0000000..a6c3632 --- /dev/null +++ b/tests/testthat/test-output.R @@ -0,0 +1,57 @@ +test_that("the default is one 'last, first' name", { + x <- randomNames() + expect_type(x, "character") + expect_length(x, 1L) + expect_match(x, ", ") +}) + +test_that("n sets the number of names", { + expect_length(randomNames(7), 7L) + expect_length(randomNames(1), 1L) +}) + +test_that("the longest of n, gender and ethnicity sets the length, and the rest recycle", { + expect_length(randomNames(gender = c(0, 1, 0, 1)), 4L) + expect_length(randomNames(2, gender = c(0, 1, 0)), 3L) + expect_length(randomNames(gender = 0, ethnicity = 1:5), 5L) +}) + +test_that("which.names, name.order and name.sep shape the output", { + set.seed(1) + first <- randomNames(5, which.names = "first") + last <- randomNames(5, which.names = "last") + expect_false(any(grepl(", ", c(first, last)))) + + both <- randomNames(5, name.order = "first.last", name.sep = " ") + expect_true(all(lengths(strsplit(both, " ")) >= 2L)) + expect_false(any(grepl(",", both))) + + expect_match(randomNames(3, name.sep = " | "), " \\| ") +}) + +test_that("return.complete.data gives a table of codes and names", { + x <- randomNames(6, gender = 1, ethnicity = 3, return.complete.data = TRUE) + expect_s3_class(x, "data.table") + expect_named(x, c("gender", "ethnicity", "last_name", "first_name"), ignore.order = TRUE) + expect_equal(nrow(x), 6L) + expect_true(all(x$gender == 1)) + expect_true(all(x$ethnicity == 3)) +}) + +test_that("return.complete.data keeps only the requested names", { + x <- randomNames(3, which.names = "first", return.complete.data = TRUE) + expect_named(x, c("gender", "ethnicity", "first_name"), ignore.order = TRUE) +}) + +test_that("names come back in the order of the inputs", { + set.seed(2) + x <- randomNames(gender = c(0, 1, 0, 1, 1, 0), ethnicity = c(1, 2, 3, 4, 5, 6), return.complete.data = TRUE) + expect_equal(x$gender, c(0, 1, 0, 1, 1, 0)) + expect_equal(x$ethnicity, c(1, 2, 3, 4, 5, 6)) +}) + +test_that("sampling without replacement gives distinct names", { + set.seed(3) + x <- randomNames(50, gender = 1, ethnicity = 5, which.names = "first", sample.with.replacement = FALSE) + expect_equal(anyDuplicated(x), 0L) +}) diff --git a/tests/testthat/test-reproducible.R b/tests/testthat/test-reproducible.R new file mode 100644 index 0000000..6d843cb --- /dev/null +++ b/tests/testthat/test-reproducible.R @@ -0,0 +1,33 @@ +# Golden values from randomNames 1.6-0.0. Refactoring must not change what a +# seed produces: people rely on it to reproduce anonymised data. +test_that("a seed reproduces the same names", { + set.seed(1) + expect_equal(randomNames(5), c("Salazar, Austin", "Mcknight, Samaria", "el-Omer, Saalim", + "Shrestha, Haseeb", "Moss, Essence")) + set.seed(2) + expect_equal(randomNames(4, which.names = "first", gender = c(0, 1), ethnicity = c(3, 4)), + c("Devin", "Michael", "Antonio", "Hayley")) + set.seed(3) + expect_equal(randomNames(4, which.names = "last", ethnicity = 1:4), + c("Jumpe", "Xiong", "Thomas", "Avila")) + set.seed(5) + expect_equal(randomNames(3, name.order = "first.last", name.sep = " "), + c("Alexis Steward", "Judah Owens", "Xavier Robinson")) +}) + +test_that("a seed reproduces the same codes", { + set.seed(4) + x <- randomNames(3, return.complete.data = TRUE) + expect_equal(x$gender, c(1, 0, 0)) + expect_equal(x$ethnicity, c(3, 4, 3)) + expect_equal(x$first_name, c("Quanishia", "Alejandro", "Dallas")) + expect_equal(x$last_name, c("Davis", "Martinez", "Riley")) +}) + +test_that("an unspecified ethnicity is drawn from all six categories", { + set.seed(10) + x <- randomNames(3000, return.complete.data = TRUE) + expect_setequal(unique(x$ethnicity), 1:6) + expect_true(all(table(x$ethnicity) > 3000 / 6 * 0.8)) + expect_setequal(unique(x$gender), 0:1) +}) diff --git a/tests/testthat/test-startup.R b/tests/testthat/test-startup.R new file mode 100644 index 0000000..eb2bc62 --- /dev/null +++ b/tests/testthat/test-startup.R @@ -0,0 +1,15 @@ +test_that("the startup banner is silent when not interactive", { + expect_false(.startup_wanted()) +}) + +test_that("the banner has two off switches", { + expect_true(.startup_wanted(is_interactive = TRUE)) + withr::with_options(list(randomNames.startup_message = FALSE), + expect_false(.startup_wanted(is_interactive = TRUE))) + withr::with_envvar(c(RANDOMNAMES_QUIET = "true"), + expect_false(.startup_wanted(is_interactive = TRUE))) +}) + +test_that("a failed web request returns NA rather than an error", { + expect_true(is.na(.fetch_capture("http://127.0.0.1:9/none", "(x)", timeout = 1))) +}) diff --git a/ui/www/.gitignore b/ui/www/.gitignore new file mode 100644 index 0000000..9edf21d --- /dev/null +++ b/ui/www/.gitignore @@ -0,0 +1,5 @@ +_site/ +/.quarto/ +_freeze/ + +**/*.quarto_ipynb diff --git a/ui/www/_extensions/dataimago/pkgsite/_extension.yml b/ui/www/_extensions/dataimago/pkgsite/_extension.yml new file mode 100644 index 0000000..a328941 --- /dev/null +++ b/ui/www/_extensions/dataimago/pkgsite/_extension.yml @@ -0,0 +1,23 @@ +title: dataimago package-site theme +author: dataimago +version: 1.0.0 +quarto-required: ">=1.8.0" +# dataimago-{light,dark}.scss and components.scss are copies of the dataimago-sync output of +# @dataimago/css@0.1.0-alpha.18; pkgsite.scss is the package-site layer. +generated-from: "@dataimago/css@0.1.0-alpha.18" +contributes: + formats: + html: + theme: + light: [dataimago-light.scss, components.scss, pkgsite.scss] + dark: [dataimago-dark.scss, components.scss, pkgsite.scss] + respect-user-color-scheme: true + highlight-style: a11y + anchor-sections: true + smooth-scroll: false + link-external-icon: false + link-external-newwindow: false + toc: true + toc-depth: 3 + code-copy: true + code-overflow: wrap diff --git a/ui/www/_extensions/dataimago/pkgsite/components.scss b/ui/www/_extensions/dataimago/pkgsite/components.scss new file mode 100644 index 0000000..54f2e10 --- /dev/null +++ b/ui/www/_extensions/dataimago/pkgsite/components.scss @@ -0,0 +1,230 @@ +// @dataimago/css@0.1.0-alpha.18 dist/quarto/components.scss · sha256:7449c84f769ce0f0ec574328144abb42b5c7087706f3ae2c6d36977977c94d50 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync +/*-- scss:rules --*/ +// dataimago components (.di-*) — generated from src/styles/components/. +.di-figure-box { + border: 1px solid var(--color-border-moderate); + padding: 4px; + background-color: var(--color-surface-sunken); + display: inline-block; + cursor: pointer; + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} +.di-figure-box:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-prominent, 0 4px 12px rgba(0, 0, 0, 0.15)); + border-color: var(--color-interactive-primary); +} +.di-figure-box:active { + transform: translateY(-1px); + box-shadow: var(--shadow-moderate, 0 2px 8px rgba(0, 0, 0, 0.12)); +} +.di-figure-box:focus-visible { + outline: 2px solid var(--color-interactive-focus); + outline-offset: 2px; +} + +.di-figure-modal { + display: none; + position: fixed; + inset: 0; + z-index: 9999; + background-color: color-mix(in srgb, var(--color-content-primary) 92%, transparent); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); +} +.di-figure-modal.is-open { + display: flex; + align-items: center; + justify-content: center; + animation: di-figure-modal-fade-in 0.25s ease; +} +.di-figure-modal .di-figure-modal-content { + position: relative; + max-width: 95vw; + max-height: 95vh; + animation: di-figure-modal-zoom-in 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} +.di-figure-modal .di-figure-modal-content img { + width: auto; + height: auto; + max-width: 95vw; + max-height: 95vh; + object-fit: contain; + border: 2px solid var(--color-interactive-primary); + background-color: var(--color-surface-elevated); + padding: 8px; + box-shadow: 0 20px 60px color-mix(in srgb, var(--color-content-primary) 40%, transparent); +} +.di-figure-modal .di-figure-modal-close { + position: absolute; + top: -40px; + right: 0; + font-size: 2rem; + color: var(--color-content-inverse); + background: none; + border: none; + cursor: pointer; + padding: 0.5rem; + line-height: 1; + transition: transform 0.2s ease, color 0.2s ease; + font-family: inherit; +} +.di-figure-modal .di-figure-modal-close:hover { + transform: scale(1.2); + color: var(--color-interactive-primary); +} +.di-figure-modal .di-figure-modal-close:focus-visible { + outline: 2px solid var(--color-interactive-primary); + outline-offset: 4px; + border-radius: var(--radius-sm, 0.25rem); +} +.di-figure-modal .di-figure-modal-caption { + position: absolute; + bottom: -60px; + left: 0; + right: 0; + text-align: center; + color: var(--color-content-inverse); + font-size: var(--font-size-small, 0.9rem); + font-style: italic; + padding: 0 2rem; + line-height: var(--line-height-normal, 1.4); +} + +@keyframes di-figure-modal-fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes di-figure-modal-zoom-in { + from { + opacity: 0; + transform: scale(0.9); + } + to { + opacity: 1; + transform: scale(1); + } +} +@media (prefers-reduced-motion: reduce) { + .di-figure-box { + transition: none !important; + } + .di-figure-box:hover, .di-figure-box:active { + transform: none !important; + } + .di-figure-modal, + .di-figure-modal .di-figure-modal-content, + .di-figure-modal .di-figure-modal-close { + animation: none !important; + transition: none !important; + } + .di-figure-modal .di-figure-modal-close:hover { + transform: none !important; + } +} + +@charset "UTF-8"; +.di-callout, .proof, .theorem, .definition, .proposition { + padding: var(--spacing-md, 1rem) var(--spacing-md, 1rem) var(--spacing-md, 1rem) var(--spacing-lg, 1.5rem); + margin: var(--spacing-lg, 1.5rem) 0; + border-radius: var(--radius-sm, 4px); + background-color: var(--color-surface-sunken); + border-left: 4px solid var(--color-interactive-primary); +} +.di-callout .di-callout-title, .di-callout .proof-title, .proof .di-callout-title, .proof .proof-title, .di-callout .theorem-title, .proof .theorem-title, .di-callout .definition-title, .proof .definition-title, .di-callout .proposition-title, .proof .proposition-title, .theorem .di-callout-title, .theorem .proof-title, .theorem .theorem-title, .theorem .definition-title, .theorem .proposition-title, .definition .di-callout-title, .definition .proof-title, .definition .theorem-title, .definition .definition-title, .definition .proposition-title, .proposition .di-callout-title, .proposition .proof-title, .proposition .theorem-title, .proposition .definition-title, .proposition .proposition-title { + font-family: var(--font-family-display); + font-weight: var(--font-weight-semibold); + margin-bottom: 0.5rem; + color: var(--color-content-primary); +} +.di-callout > :last-child, .proof > :last-child, .theorem > :last-child, .definition > :last-child, .proposition > :last-child { + margin-bottom: 0; +} + +.di-callout-insight { + border-left-color: var(--color-interactive-accent); +} +.di-callout-insight .di-callout-title, .di-callout-insight .proof-title, .di-callout-insight .theorem-title, .di-callout-insight .definition-title, .di-callout-insight .proposition-title { + color: var(--color-interactive-accent); +} + +.di-callout-tip { + border-left-color: var(--color-presentation-accent); +} +.di-callout-tip .di-callout-title, .di-callout-tip .proof-title, .di-callout-tip .theorem-title, .di-callout-tip .definition-title, .di-callout-tip .proposition-title { + color: var(--color-presentation-accent); +} + +.di-callout-proof, .proof { + margin: var(--spacing-md, 1rem) 0; +} +.di-callout-proof .di-callout-title, .di-callout-proof .proof-title, .proof .di-callout-title, .proof .proof-title, .di-callout-proof .theorem-title, .proof .theorem-title, .di-callout-proof .definition-title, .proof .definition-title, .di-callout-proof .proposition-title, .proof .proposition-title { + font-style: italic; + font-weight: var(--font-weight-medium); + color: var(--color-content-primary); +} +.di-callout-proof::after, .proof::after { + content: "□"; + float: right; + color: var(--color-content-secondary); +} + +.di-callout-rich { + padding: 0; + margin: 0.6em 0 0.8em 0; + border-radius: 6px; + border-left-width: 4px; + border-style: solid; + overflow: hidden; +} +.di-callout-rich .di-callout-title, .di-callout-rich .proof-title, .di-callout-rich .theorem-title, .di-callout-rich .definition-title, .di-callout-rich .proposition-title { + margin: 0; + padding: 0.35em 0.75em; + font-family: var(--font-family-display); + font-weight: var(--font-weight-semibold); + border-bottom: 1px solid currentColor; +} +.di-callout-rich > :not(.di-callout-title):not(.proof-title):not(.theorem-title):not(.definition-title):not(.proposition-title) { + padding-left: 0.9em; + padding-right: 0.9em; +} +.di-callout-rich > :last-child { + padding-bottom: 0.55em; +} + +.di-callout-rich.di-callout-theorem, .di-callout-rich.theorem, .di-callout-rich.definition, .di-callout-rich.proposition { + background: linear-gradient(135deg, color-mix(in srgb, var(--color-interactive-primary) 10%, transparent), color-mix(in srgb, var(--color-interactive-primary) 3%, transparent)); + border-color: color-mix(in srgb, var(--color-interactive-primary) 30%, transparent); + border-left-color: var(--color-interactive-primary); +} +.di-callout-rich.di-callout-theorem .di-callout-title, .di-callout-rich.di-callout-theorem .proof-title, .di-callout-rich.di-callout-theorem .theorem-title, .di-callout-rich.di-callout-theorem .definition-title, .di-callout-rich.di-callout-theorem .proposition-title, .di-callout-rich.theorem .di-callout-title, .di-callout-rich.theorem .proof-title, .di-callout-rich.theorem .theorem-title, .di-callout-rich.theorem .definition-title, .di-callout-rich.theorem .proposition-title, .di-callout-rich.definition .di-callout-title, .di-callout-rich.definition .proof-title, .di-callout-rich.definition .theorem-title, .di-callout-rich.definition .definition-title, .di-callout-rich.definition .proposition-title, .di-callout-rich.proposition .di-callout-title, .di-callout-rich.proposition .proof-title, .di-callout-rich.proposition .theorem-title, .di-callout-rich.proposition .definition-title, .di-callout-rich.proposition .proposition-title { + background: color-mix(in srgb, var(--color-interactive-primary) 18%, transparent); + color: color-mix(in srgb, var(--color-interactive-primary) 80%, var(--color-content-primary)); + border-bottom-color: color-mix(in srgb, var(--color-interactive-primary) 28%, transparent); +} + +.di-callout-rich.di-callout-insight { + background: linear-gradient(135deg, color-mix(in srgb, var(--color-interactive-accent) 10%, transparent), color-mix(in srgb, var(--color-interactive-accent) 3%, transparent)); + border-color: color-mix(in srgb, var(--color-interactive-accent) 30%, transparent); + border-left-color: var(--color-interactive-accent); +} +.di-callout-rich.di-callout-insight .di-callout-title, .di-callout-rich.di-callout-insight .proof-title, .di-callout-rich.di-callout-insight .theorem-title, .di-callout-rich.di-callout-insight .definition-title, .di-callout-rich.di-callout-insight .proposition-title { + background: color-mix(in srgb, var(--color-interactive-accent) 18%, transparent); + color: color-mix(in srgb, var(--color-interactive-accent) 80%, var(--color-content-primary)); + border-bottom-color: color-mix(in srgb, var(--color-interactive-accent) 28%, transparent); +} + +.di-callout-rich.di-callout-tip { + background: linear-gradient(135deg, color-mix(in srgb, var(--color-presentation-accent) 8%, transparent), color-mix(in srgb, var(--color-presentation-accent) 3%, transparent)); + border-color: color-mix(in srgb, var(--color-presentation-accent) 20%, transparent); + border-left-color: var(--color-presentation-accent); +} +.di-callout-rich.di-callout-tip .di-callout-title, .di-callout-rich.di-callout-tip .proof-title, .di-callout-rich.di-callout-tip .theorem-title, .di-callout-rich.di-callout-tip .definition-title, .di-callout-rich.di-callout-tip .proposition-title { + background: color-mix(in srgb, var(--color-presentation-accent) 15%, transparent); + color: var(--color-presentation-accent-hover); + border-bottom-color: color-mix(in srgb, var(--color-presentation-accent) 25%, transparent); +} diff --git a/ui/www/_extensions/dataimago/pkgsite/dataimago-dark.scss b/ui/www/_extensions/dataimago/pkgsite/dataimago-dark.scss new file mode 100644 index 0000000..91b66c9 --- /dev/null +++ b/ui/www/_extensions/dataimago/pkgsite/dataimago-dark.scss @@ -0,0 +1,321 @@ +// @dataimago/css@0.1.0-alpha.18 dist/quarto/dataimago-dark.scss · sha256:5d85054f4316c2ad6c65d29f1b26f939e0052b6ba716ea50545a21eef69d24d7 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync +// dataimago dark theme for Quarto 1.8 — generated from the design tokens (tools/formats/quarto.mjs). +// Bootstrap Sass variables are compile-time sRGB; runtime colours come from the custom properties below. + +/*-- scss:defaults --*/ +$body-bg: #141410 !default; +$body-color: #fdf9f2 !default; +$headings-color: #fdf9f2 !default; +$navbar-bg: #141410 !default; +$link-color: #98a384 !default; +$link-hover-color: #7e8a6b !default; +$code-color: #3498db !default; +$code-bg: #1c1917 !default; +$border-color: #7d7b76 !default; +$font-family-sans-serif: Noto Sans, Fira Sans, system-ui, sans-serif !default; +$font-family-monospace: JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace !default; +$headings-font-family: Josefin Sans, system-ui, sans-serif !default; +$headings-font-weight: 500 !default; +$h2-font-size: 1.875rem !default; + +/*-- scss:rules --*/ +// ── Design tokens (contract custom properties) ─────────────────────── +:root { + --color-palette-ink-50: #f5f5f4; + --color-palette-ink-100: #e7e5e4; + --color-palette-ink-200: #d6d3d1; + --color-palette-ink-300: #a8a29e; + --color-palette-ink-400: #78716c; + --color-palette-ink-500: #57534e; + --color-palette-ink-600: #44403c; + --color-palette-ink-700: #292524; + --color-palette-ink-800: #1c1917; + --color-palette-ink-900: #0c0a09; + --color-palette-stone-50: #f7f7f6; + --color-palette-stone-100: #ededeb; + --color-palette-stone-200: #dcdcda; + --color-palette-stone-300: #c1c1bf; + --color-palette-stone-400: #a0a0a0; + --color-palette-stone-500: #7c7c7c; + --color-palette-stone-600: #5e5e5c; + --color-palette-stone-700: #424240; + --color-palette-stone-800: #292927; + --color-palette-stone-900: #14140f; + --color-palette-forest-50: #f0f1ed; + --color-palette-forest-100: #dde0d4; + --color-palette-forest-200: #bdc4ad; + --color-palette-forest-300: #98a384; + --color-palette-forest-400: #7e8a6b; + --color-palette-forest-500: #5e6749; + --color-palette-forest-600: #4d5640; + --color-palette-forest-700: #434739; + --color-palette-forest-800: #363a2e; + --color-palette-forest-900: #1f2218; + --color-palette-paper-50: #fefdfb; + --color-palette-paper-100: #fdf9f2; + --color-palette-paper-200: #faf2e3; + --color-palette-paper-300: #f5e8cf; + --color-palette-paper-400: #edd9b3; + --color-palette-paper-500: #e0c088; + --color-palette-copper-50: #fdf4ee; + --color-palette-copper-100: #fbe5d1; + --color-palette-copper-200: #f6c79c; + --color-palette-copper-300: #f0a467; + --color-palette-copper-400: #ea8441; + --color-palette-copper-500: #d46820; + --color-palette-copper-600: #b55017; + --color-palette-copper-700: #913d15; + --color-palette-copper-800: #753318; + --color-palette-copper-900: #612b16; + --color-palette-accent-50: #f0f8fc; + --color-palette-accent-300: #3498DB; + --color-palette-accent-400: #2980B9; + --color-palette-accent-500: #1f618d; + --color-palette-accent-600: #154d6f; + --color-palette-accent-700: #0f3a52; + --color-palette-presentation-blue-50: #f0f8fc; + --color-palette-presentation-blue-500: #3498DB; + --color-palette-presentation-blue-600: #2980B9; + --color-palette-presentation-blue-700: #1f618d; + --color-functional-success: #27AE60; + --color-functional-warning: #F39C12; + --color-functional-error: #E74C3C; + --color-functional-info: #3498DB; + --transition-quick: 0.15s ease; + --transition-standard: 0.25s ease-in-out; + --transition-smooth: 0.35s ease; + --transition-logo: 0.3s; + --font-family-sans: Noto Sans, Fira Sans, system-ui, sans-serif; + --font-family-mono: JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace; + --font-family-display: var(--font-family-display-editorial); + --font-family-display-editorial: Josefin Sans, system-ui, sans-serif; + --font-family-display-documentation: Noto Sans, system-ui, sans-serif; + --font-family-brand: Futura, system-ui, sans-serif; + --font-family-math: Noto Sans Math, Noto Sans, system-ui, sans-serif; + --font-size-micro: 0.75rem; + --font-size-small: 0.875rem; + --font-size-base: 1rem; + --font-size-readable: 1.125rem; + --font-size-emphasis: 1.25rem; + --font-size-heading-small: 1.5rem; + --font-size-heading-medium: 1.875rem; + --font-size-heading-large: 2.25rem; + --font-size-heading-xl: 3rem; + --font-weight-extralight: 200; + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-heading-h1: var(--font-weight-medium); + --font-weight-heading-h2: var(--font-weight-medium); + --font-weight-heading-h3: var(--font-weight-normal); + --font-weight-heading-h4: var(--font-weight-light); + --font-weight-heading-h5: var(--font-weight-light); + --font-weight-heading-h6: var(--font-weight-light); + --font-weight-heading-subtitle: var(--font-weight-semibold); + --font-style-normal: normal; + --font-style-italic: italic; + --font-style-oblique: oblique; + --font-lineHeight-tight: 1.25; + --font-lineHeight-normal: 1.5; + --font-lineHeight-relaxed: 1.625; + --font-feature-settings-display: "lnum"; + --font-feature-settings-body: "normal"; + --spacing-xs: 0.25rem; + --spacing-sm: 0.5rem; + --spacing-md: 1rem; + --spacing-lg: 1.5rem; + --spacing-xl: 2rem; + --spacing-2xl: 3rem; + --spacing-3xl: 4rem; + --radius-sm: 0.25rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; + --radius-full: 9999px; + --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1); + --color-dataviz-okabe-ito-orange: #E69F00; + --color-dataviz-okabe-ito-sky-blue: #56B4E9; + --color-dataviz-okabe-ito-bluish-green: #009E73; + --color-dataviz-okabe-ito-yellow: #F0E442; + --color-dataviz-okabe-ito-blue: #0072B2; + --color-dataviz-okabe-ito-vermillion: #D55E00; + --color-dataviz-okabe-ito-reddish-purple: #CC79A7; + --color-dataviz-categorical-1: #E69F00; + --color-dataviz-categorical-2: #56B4E9; + --color-dataviz-categorical-3: #009E73; + --color-dataviz-categorical-4: #F0E442; + --color-dataviz-categorical-5: #0072B2; + --color-dataviz-categorical-6: #D55E00; + --color-dataviz-categorical-7: #CC79A7; +} + +:root, body.quarto-dark, [data-bs-theme="dark"] { + --color-surface-page: #141410; + --color-surface-page: color(display-p3 0.0784 0.0784 0.0643); + --color-surface-page-scrolled: #141410; + --color-surface-page-scrolled: color(display-p3 0.0784 0.0784 0.0643); + --color-surface-elevated: #1c1917; + --color-surface-elevated: color(display-p3 0.1078 0.0985 0.0911); + --color-surface-sunken: #0c0a09; + --color-surface-sunken: color(display-p3 0.0457 0.0395 0.0358); + --color-surface-navbar: #141410; + --color-surface-navbar: color(display-p3 0.0784 0.0784 0.0643); + --color-surface-navbar-scrolled: #141410; + --color-surface-navbar-scrolled: color(display-p3 0.0784 0.0784 0.0643); + --color-surface-code: #1c1917; + --color-surface-code: color(display-p3 0.1078 0.0985 0.0911); + --color-border-subtle: rgba(253, 249, 242, 0.45); + --color-border-subtle: color(display-p3 0.9894 0.977 0.9518 / 0.45); + --color-border-moderate: rgba(253, 249, 242, 0.60); + --color-border-moderate: color(display-p3 0.9894 0.977 0.9518 / 0.60); + --color-border-strong: rgba(253, 249, 242, 0.75); + --color-border-strong: color(display-p3 0.9894 0.977 0.9518 / 0.75); + --color-border-card: rgba(253, 249, 242, 0.60); + --color-border-card: color(display-p3 0.9894 0.977 0.9518 / 0.60); + --color-border-code: #292524; + --color-border-code: color(display-p3 0.1581 0.1456 0.1418); + --color-content-primary: #fdf9f2; + --color-content-primary: color(display-p3 0.9894 0.977 0.9518); + --color-content-secondary: #a8a29e; + --color-content-secondary: color(display-p3 0.6547 0.6361 0.6215); + --color-content-muted: #89827d; + --color-content-muted: color(display-p3 0.5325 0.5107 0.4925); + --color-content-inverse: #0c0a09; + --color-content-inverse: color(display-p3 0.0457 0.0395 0.0358); + --color-interactive-primary: #98a384; + --color-interactive-primary: color(display-p3 0.604 0.6378 0.5291); + --color-interactive-hover: #7e8a6b; + --color-interactive-hover: color(display-p3 0.5029 0.5397 0.4313); + --color-interactive-accent: #3498db; + --color-interactive-accent: color(display-p3 0.3208 0.588 0.8369); + --color-interactive-focus: #98a384; + --color-interactive-focus: color(display-p3 0.604 0.6378 0.5291); + --color-presentation-accent: #3498db; + --color-presentation-accent: color(display-p3 0.3208 0.588 0.8369); + --color-presentation-accent-hover: #2980b9; + --color-presentation-accent-hover: color(display-p3 0.2638 0.495 0.7068); + --color-vertical-accent-dissertation: #ce8e5c; + --color-vertical-accent-dissertation: color(display-p3 0.8089 0.5486 0.3177); + --color-vertical-accent-rpkg: #60a5fa; + --color-vertical-accent-rpkg: color(display-p3 0.4405 0.6403 0.9545); + --color-vertical-accent-SGPc: #b2bf22; + --color-vertical-accent-SGPc: color(display-p3 0.7074 0.7474 0.2714); + --color-brand-mark-red: #ff0000; + --color-brand-mark-red: color(display-p3 1 0 0); + --contrast-high: rgb(237, 237, 235); + --contrast-readable: rgb(237, 237, 235); + --contrast-medium: #83838f; + --contrast-subtle: #83838f; + --shadow-subtle: 0 1px 2px 0 rgb(237 237 235 / 0.03); + --shadow-moderate: 0 4px 6px -1px rgb(237 237 235 / 0.05); + --shadow-prominent: 0 10px 15px -3px rgb(237 237 235 / 0.4); + --border-subtle: rgba(237, 237, 235, 0.47); + --border-moderate: rgba(237, 237, 235, 0.63); + --border-focus: #4FC3F7; + --navigation-hover-background: rgba(237, 237, 235, 0.05); + --navigation-active-background: rgba(237, 237, 235, 0.1); + --color-dataviz-okabe-ito-black: #FDF9F2; + --color-dataviz-categorical-8: #FDF9F2; + --color-dataviz-uncertainty-outer: #333333; + --color-dataviz-uncertainty-union: #6B6B6B; + --color-dataviz-uncertainty-inner: #D6D6D6; +} + +// ── Quarto chrome → tokens ────────────────────────────────────────────── +body { + background-color: var(--color-surface-page); + color: var(--color-content-primary); +} + +h1, h2, h3, h4, h5, h6, .title { + color: var(--color-content-primary); +} + +// Links in running text are underlined: interactive.primary is about 1.9:1 +// against body text in light mode, so colour cannot be the only cue (WCAG 1.4.1). +main.content :is(p, li, dd, td, blockquote, figcaption, .callout-body) a { + color: var(--color-interactive-primary); + text-decoration: underline; + text-underline-offset: 0.15em; +} + +main.content :is(p, li, dd, td, blockquote, figcaption, .callout-body) a:hover { + color: var(--color-interactive-hover); +} + +// Navigation and the outline stay plain. +#TOC a, nav a, .sidebar a, .navbar a, a.footnote-ref, a.anchorjs-link { + text-decoration: none; +} + +:not(pre) > code { + color: var(--color-interactive-accent); + background-color: var(--color-surface-code); +} + +pre, div.sourceCode { + background-color: var(--color-surface-code); + border: 1px solid var(--color-border-code); +} + +// Quarto themes its popups as [data-theme~="quarto"] at compile time ($body-bg); +// match that specificity so the runtime token wins. +.tippy-box, .tippy-box[data-theme~="quarto"] { + background-color: var(--color-surface-elevated); + color: var(--color-content-primary); + border: 1px solid var(--color-border-subtle); +} + +.tippy-box[data-theme~="quarto"] > .tippy-backdrop { + background-color: var(--color-surface-elevated); +} + +.callout { + background-color: var(--color-surface-elevated); + border-color: var(--color-border-subtle); +} + +.column-margin, .margin-aside, figcaption { + color: var(--color-content-secondary); +} + +// Elevated cards carry an edge: in dark mode surface.elevated is about 1.06:1 +// against surface.page, so a card without one disappears. +.di-elevated, div.abstract { + background-color: var(--color-surface-elevated); + border: 1px solid var(--color-border-subtle); + border-radius: var(--radius-md); + padding: var(--spacing-md); +} + +// ===== THEME TOGGLE STYLING ===== +// Dark theme - show sun icon (switch to light) + +.quarto-color-scheme-toggle .bi::before { + display: inline-block !important; + height: 1rem !important; + width: 1rem !important; + content: "" !important; + vertical-align: -0.125em !important; + background-repeat: no-repeat !important; + background-size: 1rem 1rem !important; + background-color: transparent !important; + background-image: url('data:image/svg+xml,') !important; + transition: background-image 0.25s ease; +} + +.quarto-color-scheme-toggle:hover .bi::before { + background-image: url('data:image/svg+xml,') !important; + transition: background-image 0.25s ease; +} + +@media (prefers-reduced-motion: reduce) { + .quarto-color-scheme-toggle .bi::before { + transition: none !important; + } +} diff --git a/ui/www/_extensions/dataimago/pkgsite/dataimago-light.scss b/ui/www/_extensions/dataimago/pkgsite/dataimago-light.scss new file mode 100644 index 0000000..bcd1de5 --- /dev/null +++ b/ui/www/_extensions/dataimago/pkgsite/dataimago-light.scss @@ -0,0 +1,321 @@ +// @dataimago/css@0.1.0-alpha.18 dist/quarto/dataimago-light.scss · sha256:6e0e24eeabfc9524f0d4dfd70dcac22fb4b70b9c99d7a074d0354eca5c7d1603 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync +// dataimago light theme for Quarto 1.8 — generated from the design tokens (tools/formats/quarto.mjs). +// Bootstrap Sass variables are compile-time sRGB; runtime colours come from the custom properties below. + +/*-- scss:defaults --*/ +$body-bg: #ededeb !default; +$body-color: #14140f !default; +$headings-color: #14140f !default; +$navbar-bg: #ededeb !default; +$link-color: #434739 !default; +$link-hover-color: #363a2e !default; +$code-color: #1f618d !default; +$code-bg: #faf2e3 !default; +$border-color: #888785 !default; +$font-family-sans-serif: Noto Sans, Fira Sans, system-ui, sans-serif !default; +$font-family-monospace: JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace !default; +$headings-font-family: Josefin Sans, system-ui, sans-serif !default; +$headings-font-weight: 500 !default; +$h2-font-size: 1.875rem !default; + +/*-- scss:rules --*/ +// ── Design tokens (contract custom properties) ─────────────────────── +:root { + --color-palette-ink-50: #f5f5f4; + --color-palette-ink-100: #e7e5e4; + --color-palette-ink-200: #d6d3d1; + --color-palette-ink-300: #a8a29e; + --color-palette-ink-400: #78716c; + --color-palette-ink-500: #57534e; + --color-palette-ink-600: #44403c; + --color-palette-ink-700: #292524; + --color-palette-ink-800: #1c1917; + --color-palette-ink-900: #0c0a09; + --color-palette-stone-50: #f7f7f6; + --color-palette-stone-100: #ededeb; + --color-palette-stone-200: #dcdcda; + --color-palette-stone-300: #c1c1bf; + --color-palette-stone-400: #a0a0a0; + --color-palette-stone-500: #7c7c7c; + --color-palette-stone-600: #5e5e5c; + --color-palette-stone-700: #424240; + --color-palette-stone-800: #292927; + --color-palette-stone-900: #14140f; + --color-palette-forest-50: #f0f1ed; + --color-palette-forest-100: #dde0d4; + --color-palette-forest-200: #bdc4ad; + --color-palette-forest-300: #98a384; + --color-palette-forest-400: #7e8a6b; + --color-palette-forest-500: #5e6749; + --color-palette-forest-600: #4d5640; + --color-palette-forest-700: #434739; + --color-palette-forest-800: #363a2e; + --color-palette-forest-900: #1f2218; + --color-palette-paper-50: #fefdfb; + --color-palette-paper-100: #fdf9f2; + --color-palette-paper-200: #faf2e3; + --color-palette-paper-300: #f5e8cf; + --color-palette-paper-400: #edd9b3; + --color-palette-paper-500: #e0c088; + --color-palette-copper-50: #fdf4ee; + --color-palette-copper-100: #fbe5d1; + --color-palette-copper-200: #f6c79c; + --color-palette-copper-300: #f0a467; + --color-palette-copper-400: #ea8441; + --color-palette-copper-500: #d46820; + --color-palette-copper-600: #b55017; + --color-palette-copper-700: #913d15; + --color-palette-copper-800: #753318; + --color-palette-copper-900: #612b16; + --color-palette-accent-50: #f0f8fc; + --color-palette-accent-300: #3498DB; + --color-palette-accent-400: #2980B9; + --color-palette-accent-500: #1f618d; + --color-palette-accent-600: #154d6f; + --color-palette-accent-700: #0f3a52; + --color-palette-presentation-blue-50: #f0f8fc; + --color-palette-presentation-blue-500: #3498DB; + --color-palette-presentation-blue-600: #2980B9; + --color-palette-presentation-blue-700: #1f618d; + --color-functional-success: #27AE60; + --color-functional-warning: #F39C12; + --color-functional-error: #E74C3C; + --color-functional-info: #3498DB; + --transition-quick: 0.15s ease; + --transition-standard: 0.25s ease-in-out; + --transition-smooth: 0.35s ease; + --transition-logo: 0.3s; + --font-family-sans: Noto Sans, Fira Sans, system-ui, sans-serif; + --font-family-mono: JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace; + --font-family-display: var(--font-family-display-editorial); + --font-family-display-editorial: Josefin Sans, system-ui, sans-serif; + --font-family-display-documentation: Noto Sans, system-ui, sans-serif; + --font-family-brand: Futura, system-ui, sans-serif; + --font-family-math: Noto Sans Math, Noto Sans, system-ui, sans-serif; + --font-size-micro: 0.75rem; + --font-size-small: 0.875rem; + --font-size-base: 1rem; + --font-size-readable: 1.125rem; + --font-size-emphasis: 1.25rem; + --font-size-heading-small: 1.5rem; + --font-size-heading-medium: 1.875rem; + --font-size-heading-large: 2.25rem; + --font-size-heading-xl: 3rem; + --font-weight-extralight: 200; + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-heading-h1: var(--font-weight-medium); + --font-weight-heading-h2: var(--font-weight-medium); + --font-weight-heading-h3: var(--font-weight-normal); + --font-weight-heading-h4: var(--font-weight-light); + --font-weight-heading-h5: var(--font-weight-light); + --font-weight-heading-h6: var(--font-weight-light); + --font-weight-heading-subtitle: var(--font-weight-semibold); + --font-style-normal: normal; + --font-style-italic: italic; + --font-style-oblique: oblique; + --font-lineHeight-tight: 1.25; + --font-lineHeight-normal: 1.5; + --font-lineHeight-relaxed: 1.625; + --font-feature-settings-display: "lnum"; + --font-feature-settings-body: "normal"; + --spacing-xs: 0.25rem; + --spacing-sm: 0.5rem; + --spacing-md: 1rem; + --spacing-lg: 1.5rem; + --spacing-xl: 2rem; + --spacing-2xl: 3rem; + --spacing-3xl: 4rem; + --radius-sm: 0.25rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; + --radius-full: 9999px; + --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1); + --color-dataviz-okabe-ito-orange: #E69F00; + --color-dataviz-okabe-ito-sky-blue: #56B4E9; + --color-dataviz-okabe-ito-bluish-green: #009E73; + --color-dataviz-okabe-ito-yellow: #F0E442; + --color-dataviz-okabe-ito-blue: #0072B2; + --color-dataviz-okabe-ito-vermillion: #D55E00; + --color-dataviz-okabe-ito-reddish-purple: #CC79A7; + --color-dataviz-categorical-1: #E69F00; + --color-dataviz-categorical-2: #56B4E9; + --color-dataviz-categorical-3: #009E73; + --color-dataviz-categorical-4: #F0E442; + --color-dataviz-categorical-5: #0072B2; + --color-dataviz-categorical-6: #D55E00; + --color-dataviz-categorical-7: #CC79A7; +} + +:root, [data-bs-theme="light"] { + --color-surface-page: #ededeb; + --color-surface-page: color(display-p3 0.9294 0.9294 0.9223); + --color-surface-page-scrolled: #ededeb; + --color-surface-page-scrolled: color(display-p3 0.9294 0.9294 0.9223); + --color-surface-elevated: #f7f7f6; + --color-surface-elevated: color(display-p3 0.9686 0.9686 0.9651); + --color-surface-sunken: #faf2e3; + --color-surface-sunken: color(display-p3 0.9749 0.9501 0.8963); + --color-surface-navbar: #ededeb; + --color-surface-navbar: color(display-p3 0.9294 0.9294 0.9223); + --color-surface-navbar-scrolled: #ededeb; + --color-surface-navbar-scrolled: color(display-p3 0.9294 0.9294 0.9223); + --color-surface-code: #faf2e3; + --color-surface-code: color(display-p3 0.9749 0.9501 0.8963); + --color-border-subtle: rgba(12, 10, 9, 0.45); + --color-border-subtle: color(display-p3 0.0457 0.0395 0.0358 / 0.45); + --color-border-moderate: rgba(12, 10, 9, 0.60); + --color-border-moderate: color(display-p3 0.0457 0.0395 0.0358 / 0.60); + --color-border-strong: rgba(12, 10, 9, 0.75); + --color-border-strong: color(display-p3 0.0457 0.0395 0.0358 / 0.75); + --color-border-card: rgba(12, 10, 9, 0.60); + --color-border-card: color(display-p3 0.0457 0.0395 0.0358 / 0.60); + --color-border-code: #d6d3d1; + --color-border-code: color(display-p3 0.8371 0.8278 0.8205); + --color-content-primary: #14140f; + --color-content-primary: color(display-p3 0.0784 0.0784 0.0608); + --color-content-secondary: #6a6a6a; + --color-content-secondary: color(display-p3 0.4157 0.4157 0.4157); + --color-content-muted: #706964; + --color-content-muted: color(display-p3 0.4345 0.4127 0.3945); + --color-content-inverse: #fdf9f2; + --color-content-inverse: color(display-p3 0.9894 0.977 0.9518); + --color-interactive-primary: #434739; + --color-interactive-primary: color(display-p3 0.2656 0.2779 0.2287); + --color-interactive-hover: #363a2e; + --color-interactive-hover: color(display-p3 0.2146 0.2269 0.1848); + --color-interactive-accent: #1f618d; + --color-interactive-accent: color(display-p3 0.198 0.375 0.5385); + --color-interactive-focus: #434739; + --color-interactive-focus: color(display-p3 0.2656 0.2779 0.2287); + --color-presentation-accent: #3498db; + --color-presentation-accent: color(display-p3 0.3208 0.588 0.8369); + --color-presentation-accent-hover: #2980b9; + --color-presentation-accent-hover: color(display-p3 0.2638 0.495 0.7068); + --color-vertical-accent-dissertation: #b87333; + --color-vertical-accent-dissertation: color(display-p3 0.7242 0.4389 0.1259); + --color-vertical-accent-rpkg: #3b82f6; + --color-vertical-accent-rpkg: color(display-p3 0.3047 0.5035 0.9338); + --color-vertical-accent-SGPc: #5a6310; + --color-vertical-accent-SGPc: color(display-p3 0.3595 0.3871 0.1309); + --color-brand-mark-red: #cc0000; + --color-brand-mark-red: color(display-p3 0.7331 0.1519 0.1019); + --contrast-high: rgb(20, 20, 16); + --contrast-readable: rgb(20, 20, 16); + --contrast-medium: #7c7c7c; + --contrast-subtle: #7c7c7c; + --shadow-subtle: 0 1px 2px 0 rgb(20 20 16 / 0.05); + --shadow-moderate: 0 4px 6px -1px rgb(20 20 16 / 0.1); + --shadow-prominent: 0 10px 15px -3px rgb(20 20 16 / 0.1); + --border-subtle: rgba(20, 20, 16, 0.47); + --border-moderate: rgba(20, 20, 16, 0.63); + --border-focus: #3498DB; + --navigation-hover-background: rgba(20, 20, 16, 0.05); + --navigation-active-background: rgba(20, 20, 16, 0.1); + --color-dataviz-okabe-ito-black: #000000; + --color-dataviz-categorical-8: #000000; + --color-dataviz-uncertainty-outer: #D6D6D6; + --color-dataviz-uncertainty-union: #9E9E9E; + --color-dataviz-uncertainty-inner: #333333; +} + +// ── Quarto chrome → tokens ────────────────────────────────────────────── +body { + background-color: var(--color-surface-page); + color: var(--color-content-primary); +} + +h1, h2, h3, h4, h5, h6, .title { + color: var(--color-content-primary); +} + +// Links in running text are underlined: interactive.primary is about 1.9:1 +// against body text in light mode, so colour cannot be the only cue (WCAG 1.4.1). +main.content :is(p, li, dd, td, blockquote, figcaption, .callout-body) a { + color: var(--color-interactive-primary); + text-decoration: underline; + text-underline-offset: 0.15em; +} + +main.content :is(p, li, dd, td, blockquote, figcaption, .callout-body) a:hover { + color: var(--color-interactive-hover); +} + +// Navigation and the outline stay plain. +#TOC a, nav a, .sidebar a, .navbar a, a.footnote-ref, a.anchorjs-link { + text-decoration: none; +} + +:not(pre) > code { + color: var(--color-interactive-accent); + background-color: var(--color-surface-code); +} + +pre, div.sourceCode { + background-color: var(--color-surface-code); + border: 1px solid var(--color-border-code); +} + +// Quarto themes its popups as [data-theme~="quarto"] at compile time ($body-bg); +// match that specificity so the runtime token wins. +.tippy-box, .tippy-box[data-theme~="quarto"] { + background-color: var(--color-surface-elevated); + color: var(--color-content-primary); + border: 1px solid var(--color-border-subtle); +} + +.tippy-box[data-theme~="quarto"] > .tippy-backdrop { + background-color: var(--color-surface-elevated); +} + +.callout { + background-color: var(--color-surface-elevated); + border-color: var(--color-border-subtle); +} + +.column-margin, .margin-aside, figcaption { + color: var(--color-content-secondary); +} + +// Elevated cards carry an edge: in dark mode surface.elevated is about 1.06:1 +// against surface.page, so a card without one disappears. +.di-elevated, div.abstract { + background-color: var(--color-surface-elevated); + border: 1px solid var(--color-border-subtle); + border-radius: var(--radius-md); + padding: var(--spacing-md); +} + +// ===== THEME TOGGLE STYLING ===== +// Light theme - show moon icon (switch to dark) + +.quarto-color-scheme-toggle .bi::before { + display: inline-block !important; + height: 1rem !important; + width: 1rem !important; + content: "" !important; + vertical-align: -0.125em !important; + background-repeat: no-repeat !important; + background-size: 1rem 1rem !important; + background-color: transparent !important; + background-image: url('data:image/svg+xml,') !important; + transition: background-image 0.25s ease; +} + +.quarto-color-scheme-toggle:hover .bi::before { + background-image: url('data:image/svg+xml,') !important; + transition: background-image 0.25s ease; +} + +@media (prefers-reduced-motion: reduce) { + .quarto-color-scheme-toggle .bi::before { + transition: none !important; + } +} diff --git a/ui/www/_extensions/dataimago/pkgsite/pkgsite.scss b/ui/www/_extensions/dataimago/pkgsite/pkgsite.scss new file mode 100644 index 0000000..1be017c --- /dev/null +++ b/ui/www/_extensions/dataimago/pkgsite/pkgsite.scss @@ -0,0 +1,136 @@ +/*-- scss:rules --*/ +// Package-site layer on the dataimago tokens. Colours come only from the token custom +// properties, so the light/dark pair switches at runtime. Josefin Sans carries headings and +// labels; Noto Sans, Noto Sans Mono and Noto Sans Math carry everything else. + +:root { + --font-family-mono: "Noto Sans Mono", ui-monospace, SFMono-Regular, Menlo, monospace; +} + +code, kbd, pre, samp, .sourceCode { font-family: var(--font-family-mono); } +.math.inline, .math.display { font-family: var(--font-family-math); } + +// ── Navbar: Quarto's headroom hides it on scroll down and returns it on scroll up ── +.navbar { + border-bottom: 1px solid var(--color-border-subtle); + .navbar-title, .navbar-nav .nav-link { + font-family: var(--font-family-display); + letter-spacing: 0.02em; + } + .navbar-title { font-weight: var(--font-weight-normal); } + .navbar-brand-logo img { height: 2.4rem; width: auto; } + .pkg-version { + font-family: var(--font-family-sans); + font-size: 0.72rem; + color: var(--color-content-secondary); + margin-left: 0.4rem; + } +} + +h1, h2, h3, h4, .title { + font-family: var(--font-family-display); + font-feature-settings: var(--font-feature-settings-display); +} +h1.title, .quarto-title h1 { font-weight: var(--font-weight-light); letter-spacing: -0.01em; } + +// ── Kicker labels ── +.kicker { + font-family: var(--font-family-display); + font-size: 0.8rem; + font-weight: var(--font-weight-semibold); + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--color-content-secondary); + border-top: 2px solid var(--color-interactive-primary); + padding-top: var(--spacing-sm); + margin: var(--spacing-3xl) 0 var(--spacing-lg); +} + +// ── Package hero: hex, name, one-line purpose, badges, actions ── +.pkg-hero { + display: grid; + grid-template-columns: 10rem 1fr; + gap: var(--spacing-xl); + align-items: center; + margin: var(--spacing-2xl) 0 var(--spacing-xl); + + img.pkg-hex { width: 10rem; height: auto; } + .pkg-name { + font-family: var(--font-family-display); + font-weight: var(--font-weight-light); + font-size: clamp(2.4rem, 5vw, 3.6rem); + line-height: var(--font-lineHeight-tight); + margin: 0; + } + .pkg-tagline { + color: var(--color-content-secondary); + font-size: 1.1rem; + margin: var(--spacing-xs) 0 var(--spacing-md); + max-width: 42rem; + } +} +@media (max-width: 575.98px) { .pkg-hero { grid-template-columns: 1fr; } .pkg-hero img.pkg-hex { width: 7rem; } } + +.pkg-badges { + display: flex; + flex-wrap: wrap; + gap: var(--spacing-xs); + margin: var(--spacing-sm) 0; + padding: 0; + list-style: none; + img { height: 20px; width: auto; } +} + +// ── Pill links ── +.pill-links { + display: flex; + flex-wrap: wrap; + gap: var(--spacing-sm); + padding: 0; + margin: var(--spacing-md) 0; + list-style: none; +} +main.content .pill-links a { + display: inline-flex; + align-items: center; + padding: 0.35rem 0.9rem; + border: 1px solid var(--color-border-moderate); + border-radius: var(--radius-full); + color: var(--color-content-primary); + text-decoration: none !important; + font-size: 0.92rem; + transition: background-color var(--transition-quick), border-color var(--transition-quick); + &:hover { background-color: var(--navigation-hover-background); border-color: var(--color-interactive-primary); } + &:focus-visible { outline: 2px solid var(--color-interactive-focus); outline-offset: 2px; } +} + +// ── Reference index ── +.reference-index { + dl { display: grid; grid-template-columns: minmax(10rem, 18rem) 1fr; gap: var(--spacing-sm) var(--spacing-lg); } + dt { font-family: var(--font-family-mono); font-size: 0.92rem; } + dd { margin: 0; color: var(--color-content-secondary); } +} +@media (max-width: 575.98px) { .reference-index dl { grid-template-columns: 1fr; } } + +// ── Reference pages and articles ── +main.content { + pre { border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); padding: var(--spacing-md); } + table { width: 100%; } + h2 { font-size: 1.5rem; margin-top: var(--spacing-2xl); } +} + +// ── Footer: the Center is credited here ── +.nav-footer { + border-top: 1px solid var(--color-border-subtle); + font-size: 0.9rem; + color: var(--color-content-secondary); + a { color: inherit; text-decoration: underline; text-underline-offset: 0.15em; } +} + +main.content dl:not(.quarto-listing-category) { + dt { font-family: var(--font-family-mono); font-size: 0.92rem; margin-top: var(--spacing-md); } + dd { margin-left: var(--spacing-lg); } +} + +main.content .reference-index dl dt { margin-top: 0; } +main.content .reference-index dl dd { margin-left: 0; } diff --git a/ui/www/_quarto.yml b/ui/www/_quarto.yml new file mode 100644 index 0000000..8fb2581 --- /dev/null +++ b/ui/www/_quarto.yml @@ -0,0 +1,62 @@ +# Generated by dataimago::create_package_site(). Re-running with overwrite_config = FALSE keeps edits. +project: + type: website + output-dir: _site + render: + - "*.qmd" + - "reference/*.qmd" + - "articles/**/*.qmd" + resources: + - assets/fonts/*.woff2 + +execute: + freeze: auto + +website: + title: "randomNames" + description: "Generate Random Given and Surnames" + site-url: "https://centerforassessment.github.io/randomNames/" + repo-url: "https://github.com/CenterForAssessment/randomNames" + favicon: assets/brand/favicon.png + open-graph: true + page-navigation: false + search: + location: navbar + type: overlay + navbar: + title: "randomNames" + logo: assets/brand/logo.svg + logo-alt: "randomNames hex logo" + pinned: false + left: + - href: index.qmd + text: Home + - href: articles/randomNames.qmd + text: Get started + - href: reference/index.qmd + text: Reference + - href: articles/index.qmd + text: Articles + - href: news.qmd + text: News + - href: citation.qmd + text: Citation + right: + - icon: github + href: https://github.com/CenterForAssessment/randomNames + aria-label: "randomNames on GitHub" + page-footer: + left: "© 2026 Damian W. Betebenner · Center for Assessment" + right: + - text: "Center for Assessment" + href: https://www.nciea.org/ + - text: "Design system" + href: https://dataimago.ai + +format: + pkgsite-html: + css: assets/css/fonts.css + toc: true + toc-depth: 3 + page-layout: article + lang: en diff --git a/ui/www/articles/index.qmd b/ui/www/articles/index.qmd new file mode 100644 index 0000000..43c6a3f --- /dev/null +++ b/ui/www/articles/index.qmd @@ -0,0 +1,15 @@ +--- +title: "Articles" +listing: + contents: + - "*.qmd" + - "releases/*.qmd" + exclude: + filename: index.qmd + type: table + sort: "title desc" + fields: [title, subtitle] +page-layout: article +toc: false +--- + diff --git a/inst/doc/randomNames.Rmd b/ui/www/articles/randomNames.qmd similarity index 75% rename from inst/doc/randomNames.Rmd rename to ui/www/articles/randomNames.qmd index b1cc9fe..2b289f6 100644 --- a/inst/doc/randomNames.Rmd +++ b/ui/www/articles/randomNames.qmd @@ -1,14 +1,10 @@ --- title: "Getting started with randomNames" author: "Damian W Betebenner" -date: "`r paste0(format(Sys.Date(), format='%B '), toOrdinal::toOrdinal(as.numeric(format(Sys.Date(), format='%d'))), format(Sys.Date(), format=', %Y'))`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Getting started with randomNames} - %\VignetteEngine{knitr::rmarkdown} - %\usepackage[utf8]{inputenc} +toc: true --- + ```{r include = FALSE} library(randomNames) is_html_output = function() { @@ -36,7 +32,7 @@ but needs to obscure the identity of the person to whom the data belongs. # Use -After [installing](https://dbetebenner.github.io/randomNames/index.html#installation) the package from either CRAN +After [installing](https://centerforassessment.github.io/randomNames/#installation) the package from either CRAN or GitHub, it's simple to generate random names using the following simple instructions. By default, the `randomNames` function supplies a single random last and first name separated by a comma: @@ -101,7 +97,7 @@ randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first na ``` -The fourth argument, `which.names` controls which names are returned. The argument accepts the values: `both` (the default), `last`, `first`, or `complete.data` +The fourth argument, `which.names` controls which names are returned. The argument accepts the values: `both` (the default), `last` or `first`. ```{r} randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern/Arabic, female first names @@ -122,6 +118,45 @@ randomNames(5, gender=1, ethnicity=6, name.order="first.last", name.sep=" ") ## ``` +Text works as well as codes. Matching ignores case, and a value that matches nothing is drawn at random, with a warning: + +```{r} +randomNames(4, gender=c("Female", "male"), ethnicity=c("Hispanic", "White", "Asian", "Black")) +``` + +## Complete data + +Set `return.complete.data=TRUE` to get a `data.table` with the gender and ethnicity codes that were used next to the names: + +```{r} +randomNames(4, gender=1, ethnicity=c(3, 4), return.complete.data=TRUE) +``` + +## Reproducible names + +Names are random, so call `set.seed()` first when you need the same names again: + +```{r} +set.seed(42) +randomNames(3) +set.seed(42) +randomNames(3) +``` + +## Invalid input + +An invalid `n`, `which.names` or `name.order` stops with an error rather than returning nothing: + +```{r, error=TRUE} +randomNames(0) +randomNames(3, which.names="middle") +``` + +## The startup message + +In an interactive session, attaching the package prints a banner that compares the installed version with CRAN and GitHub. It waits at most two seconds for each request. Turn it off with `options(randomNames.startup_message = FALSE)` or by setting the environment variable `RANDOMNAMES_QUIET=true`. + + # Contributions & Requests If you have contribution or a feature request for the **randomNames** package, don't hesitate to write or set up an [issue on GitHub](https://github.com/CenterForAssessment/randomNames/issues). diff --git a/ui/www/articles/releases/randomNames-0.0-1.qmd b/ui/www/articles/releases/randomNames-0.0-1.qmd new file mode 100644 index 0000000..3516895 --- /dev/null +++ b/ui/www/articles/releases/randomNames-0.0-1.qmd @@ -0,0 +1,28 @@ +--- +title: "randomNames 0.0-1" +date: "2011-06-05" +toc: true +--- + + +```{r, echo = FALSE} +is_html_output = function() { + knitr::opts_knit$get("rmarkdown.pandoc.to")=="html" +} +knitr::opts_chunk$set(collapse = TRUE, comment = "", prompt=TRUE, fig.dpi = 96) +if (is_html_output()) { + options(width=1000) +} +``` + + +This is the initial release of the **randomNames** package. The **randomNames** package was developed to avoid always naming anonymous persons *John Doe* or *Jane Doe*. +Random names generated from the `randomNames` function are derived from a large data base of personal names with gender and ethnicity identifiers. The names are +also probabilistically selected based upon their frequency in the original data from which they were derived. + +```{r} +library(randomNames) +randomNames(5) +``` + +For complete `randomNames` documentation, see the [documentation](https://CenterForAssessment.github.io/randomNames/reference/randomNames.html) diff --git a/ui/www/articles/releases/randomNames-1.0-0.0.qmd b/ui/www/articles/releases/randomNames-1.0-0.0.qmd new file mode 100644 index 0000000..7b6bb8b --- /dev/null +++ b/ui/www/articles/releases/randomNames-1.0-0.0.qmd @@ -0,0 +1,24 @@ +--- +title: "randomNames 1.0-0.0" +date: "2017-06-06" +toc: true +--- + + +```{r, echo = FALSE} +is_html_output = function() { + knitr::opts_knit$get("rmarkdown.pandoc.to")=="html" +} +knitr::opts_chunk$set(collapse = TRUE, comment = "", prompt=TRUE, fig.dpi = 96) +if (is_html_output()) { + options(width=1000) +} +``` + + +This is 1.0 release of the **randomNames** package. This release is mostly about the creation of vignettes and +[web-documentation](https://CenterForAssessment.github.io/randomNames) for the package. However, the package now +also support Middle Eastern/Arabic names. See the new +[Getting Started Vignette](https://centerforassessment.github.io/randomNames/articles/randomNames.html) for more information. + +Feel free to drop me a line with any comments, feature requests, or ideas. And give us a shout-out Tweet using the Twitter button in the upper right! diff --git a/ui/www/articles/releases/randomNames-1.4-0.0.qmd b/ui/www/articles/releases/randomNames-1.4-0.0.qmd new file mode 100644 index 0000000..05e42c1 --- /dev/null +++ b/ui/www/articles/releases/randomNames-1.4-0.0.qmd @@ -0,0 +1,22 @@ +--- +title: "randomNames 1.4-0.0" +date: "2019-03-10" +toc: true +--- + + +```{r, echo = FALSE} +is_html_output = function() { + knitr::opts_knit$get("rmarkdown.pandoc.to")=="html" +} +knitr::opts_chunk$set(collapse = TRUE, comment = "", prompt=TRUE, fig.dpi = 96) +if (is_html_output()) { + options(width=1000) +} +``` + + +This is 1.4 release of the **randomNames** package. This release fixes some bugs found by users (thanks!) and updates the +[web-documentation](https://CenterForAssessment.github.io/randomNames)website associated with the package. + +Feel free to drop me a line with any comments, feature requests, or ideas. And give us a shout-out Tweet using the Twitter button in the upper right! diff --git a/ui/www/articles/releases/randomNames-1.5-0.0.qmd b/ui/www/articles/releases/randomNames-1.5-0.0.qmd new file mode 100644 index 0000000..5b24212 --- /dev/null +++ b/ui/www/articles/releases/randomNames-1.5-0.0.qmd @@ -0,0 +1,22 @@ +--- +title: "randomNames 1.5-0.0" +date: "2021-04-21" +toc: true +--- + + +```{r, echo = FALSE} +is_html_output = function() { + knitr::opts_knit$get("rmarkdown.pandoc.to")=="html" +} +knitr::opts_chunk$set(collapse = TRUE, comment = "", prompt=TRUE, fig.dpi = 96) +if (is_html_output()) { + options(width=1000) +} +``` + + +This is 1.5 release of the **randomNames** package. This release fixes some white space that appeared at the front of a few of the first names found by users (thanks!). It +also updates the [web-documentation](https://CenterForAssessment.github.io/randomNames)website associated with the package. + +Feel free to drop me a line with any comments, feature requests, or ideas. And give us a shout-out Tweet using the Twitter button in the upper right! diff --git a/ui/www/assets/brand/favicon.png b/ui/www/assets/brand/favicon.png new file mode 100644 index 0000000..cd20446 Binary files /dev/null and b/ui/www/assets/brand/favicon.png differ diff --git a/ui/www/assets/brand/logo.svg b/ui/www/assets/brand/logo.svg new file mode 100644 index 0000000..b17405c --- /dev/null +++ b/ui/www/assets/brand/logo.svg @@ -0,0 +1,8 @@ + +randomNames hex logo + + + + + + diff --git a/ui/www/assets/css/fonts.css b/ui/www/assets/css/fonts.css new file mode 100644 index 0000000..795cb5d --- /dev/null +++ b/ui/www/assets/css/fonts.css @@ -0,0 +1,10 @@ +/* Self-hosted OFL fonts. The design system forbids font CDNs. Paths are relative to this file. */ +@font-face { font-family: "Josefin Sans"; src: url("../fonts/JosefinSans-300.woff2") format("woff2"); font-weight: 300; font-style: normal; font-display: swap; } +@font-face { font-family: "Josefin Sans"; src: url("../fonts/JosefinSans-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } +@font-face { font-family: "Josefin Sans"; src: url("../fonts/JosefinSans-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; } +@font-face { font-family: "Josefin Sans"; src: url("../fonts/JosefinSans-600.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; } +@font-face { font-family: "Josefin Sans"; src: url("../fonts/JosefinSans-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } +@font-face { font-family: "Noto Sans"; src: url("../fonts/NotoSans-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } +@font-face { font-family: "Noto Sans"; src: url("../fonts/NotoSans-600.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; } +@font-face { font-family: "Noto Sans Mono"; src: url("../fonts/NotoSansMono-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } +@font-face { font-family: "Noto Sans Math"; src: url("../fonts/NotoSansMath-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } diff --git a/ui/www/assets/figures/favicon.png b/ui/www/assets/figures/favicon.png new file mode 100644 index 0000000..cd20446 Binary files /dev/null and b/ui/www/assets/figures/favicon.png differ diff --git a/ui/www/assets/figures/logo.png b/ui/www/assets/figures/logo.png new file mode 100644 index 0000000..e4e0390 Binary files /dev/null and b/ui/www/assets/figures/logo.png differ diff --git a/ui/www/assets/figures/logo.svg b/ui/www/assets/figures/logo.svg new file mode 100644 index 0000000..b17405c --- /dev/null +++ b/ui/www/assets/figures/logo.svg @@ -0,0 +1,8 @@ + +randomNames hex logo + + + + + + diff --git a/ui/www/assets/fonts/JosefinSans-300.woff2 b/ui/www/assets/fonts/JosefinSans-300.woff2 new file mode 100644 index 0000000..2c0820f Binary files /dev/null and b/ui/www/assets/fonts/JosefinSans-300.woff2 differ diff --git a/ui/www/assets/fonts/JosefinSans-400.woff2 b/ui/www/assets/fonts/JosefinSans-400.woff2 new file mode 100644 index 0000000..4ad5f67 Binary files /dev/null and b/ui/www/assets/fonts/JosefinSans-400.woff2 differ diff --git a/ui/www/assets/fonts/JosefinSans-500.woff2 b/ui/www/assets/fonts/JosefinSans-500.woff2 new file mode 100644 index 0000000..655d1af Binary files /dev/null and b/ui/www/assets/fonts/JosefinSans-500.woff2 differ diff --git a/ui/www/assets/fonts/JosefinSans-600.woff2 b/ui/www/assets/fonts/JosefinSans-600.woff2 new file mode 100644 index 0000000..95bec30 Binary files /dev/null and b/ui/www/assets/fonts/JosefinSans-600.woff2 differ diff --git a/ui/www/assets/fonts/JosefinSans-700.woff2 b/ui/www/assets/fonts/JosefinSans-700.woff2 new file mode 100644 index 0000000..3d9be7f Binary files /dev/null and b/ui/www/assets/fonts/JosefinSans-700.woff2 differ diff --git a/ui/www/assets/fonts/NotoSans-400.woff2 b/ui/www/assets/fonts/NotoSans-400.woff2 new file mode 100644 index 0000000..65c1c12 Binary files /dev/null and b/ui/www/assets/fonts/NotoSans-400.woff2 differ diff --git a/ui/www/assets/fonts/NotoSans-600.woff2 b/ui/www/assets/fonts/NotoSans-600.woff2 new file mode 100644 index 0000000..9fc8a20 Binary files /dev/null and b/ui/www/assets/fonts/NotoSans-600.woff2 differ diff --git a/ui/www/assets/fonts/NotoSansMath-400.woff2 b/ui/www/assets/fonts/NotoSansMath-400.woff2 new file mode 100644 index 0000000..471d7ad Binary files /dev/null and b/ui/www/assets/fonts/NotoSansMath-400.woff2 differ diff --git a/ui/www/assets/fonts/NotoSansMono-400.woff2 b/ui/www/assets/fonts/NotoSansMono-400.woff2 new file mode 100644 index 0000000..2eaf6bc Binary files /dev/null and b/ui/www/assets/fonts/NotoSansMono-400.woff2 differ diff --git a/ui/www/citation.qmd b/ui/www/citation.qmd new file mode 100644 index 0000000..3f5c2e0 --- /dev/null +++ b/ui/www/citation.qmd @@ -0,0 +1,42 @@ +--- +title: "Citation and authors" +toc: false +--- + +## Citation + +To cite this package in publications, please use: + +Betebenner DW (2026). _randomNames: Function for Generating Random Names and a Dataset_. R package version +1.7-0.0, . + +A BibTeX entry: + +```bibtex +@Manual{, + title = {{randomNames}: Function for Generating Random Names and a Dataset}, + author = {Damian W. Betebenner}, + year = {2026}, + note = {R package version 1.7-0.0}, + url = {https://cran.r-project.org/package=randomNames}, +} +``` + +## Authors + +- Damian W. (aut, cre) +- Betebenner (aut, cre) +- aut, cre (aut, cre) +- dbetebenner@nciea.org (aut, cre) +- 0000-0003-0476-5599 (aut, cre) +- Lambert (ctb) +- Joshua (ctb) +- ctb (ctb) +- NULL (ctb) +- NULL (ctb) +- Center for Assessment (cph) +- NULL (cph) +- cph (cph) +- NULL (cph) +- NULL (cph) + diff --git a/ui/www/index.qmd b/ui/www/index.qmd new file mode 100644 index 0000000..99d75cd --- /dev/null +++ b/ui/www/index.qmd @@ -0,0 +1,82 @@ +--- +pagetitle: "randomNames: Generate Random Given and Surnames" +page-layout: article +toc: false +--- + +```{=html} +
+ randomNames hex logo +
+

randomNames

+

Generate Random Given and Surnames

+ +
+
+``` + +## Overview + +**randomNames** has one function, `randomNames()`, that creates random first and/or last names that fit a gender and an ethnicity. Names are sampled in proportion to how often they occur in a large database of real names, so a roster of random names looks like a roster of real ones. That makes it useful for anonymising results that would otherwise identify people. + +## Installation + +From [CRAN](https://CRAN.R-project.org/package=randomNames): + +``` r +install.packages("randomNames") +``` + +The development version from [GitHub](https://github.com/CenterForAssessment/randomNames/): + +``` r +# install.packages("pak") +pak::pak("CenterForAssessment/randomNames") +``` + +## Usage + +``` r +library(randomNames) + +randomNames(5) # last, first +randomNames(5, gender = 1) # female +randomNames(5, gender = 0, ethnicity = 3) # male, Black +randomNames(5, gender = 1, ethnicity = 6, which.names = "first") + +# Text works as well as codes +randomNames(3, gender = c("Female", "Male"), ethnicity = c("Hispanic", "White", "Asian")) + +# The codes used, next to the names +randomNames(3, return.complete.data = TRUE) + +# The same names again +set.seed(42); randomNames(3) +set.seed(42); randomNames(3) +``` + +Ethnicity codes are 1 American Indian or Native Alaskan, 2 Asian or Pacific Islander, 3 Black (not Hispanic), 4 Hispanic, 5 White (not Hispanic) and 6 Middle-Eastern or Arabic. Gender codes are 0 male and 1 female. When you give neither, each is drawn at random. + +## The startup message + +In an interactive session the package prints a short banner that compares the installed version with CRAN and GitHub. It waits at most two seconds for each request. Switch it off with + +``` r +options(randomNames.startup_message = FALSE) +``` + +or set the environment variable `RANDOMNAMES_QUIET=true`. It never runs in scripts, `R CMD check` or on a server. + +## Resources + +- [Website](https://centerforassessment.github.io/randomNames/) +- [CRAN](https://CRAN.R-project.org/package=randomNames) +- [Issues](https://github.com/CenterForAssessment/randomNames/issues) + +Maintained by [Damian Betebenner](https://github.com/dbetebenner) at the [Center for Assessment](https://www.nciea.org/). + diff --git a/ui/www/news.qmd b/ui/www/news.qmd new file mode 100644 index 0000000..abcd269 --- /dev/null +++ b/ui/www/news.qmd @@ -0,0 +1,94 @@ +--- +title: "News" +toc: true +toc-depth: 2 +--- + +## randomNames 1.7-0.0 + +### Bug fixes + +* Valid numeric gender and ethnicity codes are no longer lost when they are mixed with text or with an invalid value in the same vector. `ethnicity = c(1, 7, 3)` used to draw all three at random; now only `7` is. +* The documentation matches the code: `return.complete.data` (not `which.names = "complete.data"`) returns the `data.table`, ethnicity code 6 is documented for `randomNamesData`, and the duplicated description is gone. + +### Changes + +* An invalid `n` (zero, negative, fractional, missing, non-numeric or longer than one) is now an error. It printed a note and returned `NULL`. +* An unknown `which.names` or `name.order` is now an error. It silently returned `NULL`. +* A gender or ethnicity value that matches nothing is still drawn at random, now with a warning. +* Seeded output is unchanged: the same `set.seed()` gives the same names as 1.6-0.0. Tests pin this. An unspecified ethnicity is drawn uniformly from all six categories, as documented. +* The startup banner appears only in interactive sessions, waits at most two seconds for each web request and can be switched off with `options(randomNames.startup_message = FALSE)` or `RANDOMNAMES_QUIET=true`. It no longer needs **pkgsearch**, and **cli** replaces **crayon**. +* Documentation is generated with roxygen2, and the package now has a testthat 3rd edition test suite. +* A new website built with Quarto at . +* Requires R 4.1 or later. + +## randomNames 1.6-0.0 + +* Added in Joshua Lambert's improvements. + +## randomNames 1.5-0.0 + +* Fixed names with embedded spaces as the first character. + +## randomNames 1.4-0.0 + +* Fixed issue with NAs embedded in ethnicity and gender returning wrong data later. + +## randomNames 1.0-0.0 + +* Shortened and improved the title of the package. + +## randomNames 1.0-0.0 + +* Changed numbering of releases from 3 to 4 digits. +* Created real vignette and fixed everything up for a nice 1.0-0.0 release. + +## randomNames 0.6-0 + +* Converted NEWS to NEWS.md and added that to repo. + +## randomNames 0.5-0 + +* Adding vignette and building website. + +## randomNames 0.4-0 + +* Added Middle-Eastern names (ethnicity=6) to data base. + +## randomNames 0.3-0 + +* Fixed bug leading to incorrect re-ordering of results so that they didn't match input. + +## randomNames 0.2-0 + +* Cleaned up documentation. +* Fixed GitHub pull requests. + +## randomNames 0.0-7 + +* Changed randomNamesData to environment. + +## randomNames 0.0-6 + +* Changed DESCRIPTION to Import data.table. + +## randomNames 0.0-5 + +* Fixed key to accomodate changes in data.table 1.7.8. + +## randomNames 0.0-4 + +* Added NAMESPACE. + +## randomNames 0.0-3 + +* Modified function to adapt to improvements in data.table. + +## randomNames 0.0-2 + +* Refined function to recode supplied gender and ethnicity argument/variables if not in function appropriate form. + +## randomNames 0.0-1 + +* Package Released. + diff --git a/ui/www/reference/index.qmd b/ui/www/reference/index.qmd new file mode 100644 index 0000000..34fc8a7 --- /dev/null +++ b/ui/www/reference/index.qmd @@ -0,0 +1,23 @@ +--- +title: "Reference" +toc: false +--- + +## Data sets + +::: {.reference-index} + +[`randomNamesData`](randomNamesData.html) +: First and last names by gender and ethnicity + +::: + +## Functions + +::: {.reference-index} + +[`randomNames()`](randomNames.html) +: Generate random first and last names + +::: + diff --git a/ui/www/reference/randomNames-package.qmd b/ui/www/reference/randomNames-package.qmd new file mode 100644 index 0000000..5cfd684 --- /dev/null +++ b/ui/www/reference/randomNames-package.qmd @@ -0,0 +1,38 @@ +--- +title: "randomNames-package" +subtitle: "randomNames: Generate Random Given and Surnames" +toc: true +--- + +## Description + +![logo](../assets/figures/logo.svg){style="float: right" width="120"} + +Generates gender and ethnicity correct first and/or last names. Names are chosen proportionally based upon their probability of appearing in a large scale data base of real names, so a roster of random names looks like a roster of real ones. Useful for anonymising results that would otherwise identify people. + +## See Also + +Useful links: + +- + +- + +- + +- Report bugs at + +## Author(s) + +**Maintainer**: Damian W. Betebenner ([ORCID](https://orcid.org/0000-0003-0476-5599)) + +Authors: + +- Damian W. Betebenner ([ORCID](https://orcid.org/0000-0003-0476-5599)) + +Other contributors: + +- Lambert Joshua \[contributor\] + +- Center for Assessment \[copyright holder\] + diff --git a/ui/www/reference/randomNames.qmd b/ui/www/reference/randomNames.qmd new file mode 100644 index 0000000..4d465b5 --- /dev/null +++ b/ui/www/reference/randomNames.qmd @@ -0,0 +1,121 @@ +--- +title: "randomNames()" +subtitle: "Generate random first and last names" +toc: true +--- + +## Usage + +``` R +randomNames( + n, + gender, + ethnicity, + which.names = "both", + name.order = "last.first", + name.sep = ", ", + sample.with.replacement = TRUE, + return.complete.data = FALSE +) +``` + +## Arguments + +`n`{#n} + +: Optional. A single positive whole number: how many names to produce. Defaults to 1. Most useful when no gender or ethnicity is supplied. + +`gender`{#gender} + +: Optional. A vector of genders, either codes (`0` male, `1` female) or text as described in Details. + +`ethnicity`{#ethnicity} + +: Optional. A vector of ethnicities, either codes or text as described in Details. The codes are: + + 1 + + : American Indian or Native Alaskan + + 2 + + : Asian or Pacific Islander + + 3 + + : Black (not Hispanic) + + 4 + + : Hispanic + + 5 + + : White (not Hispanic) + + 6 + + : Middle-Eastern, Arabic + +`which.names`{#which.names} + +: One of `"both"` (the default), `"first"` or `"last"`. + +`name.order`{#name.order} + +: When `which.names` is `"both"`, either `"last.first"` (the default) or `"first.last"`. + +`name.sep`{#name.sep} + +: When `which.names` is `"both"`, the string placed between the two names. Defaults to `", "`. + +`sample.with.replacement`{#sample.with.replacement} + +: Sample names with replacement? Defaults to `TRUE`. Without replacement the number of names asked for in one gender and ethnicity group cannot exceed the names available for it. + +`return.complete.data`{#return.complete.data} + +: Return a `data.table` with the `ethnicity` and `gender` codes used alongside the names, instead of a character vector. Defaults to `FALSE`. + +## Value + +A character vector of names, or, when `return.complete.data = TRUE`, a `data.table` with columns `gender`, `ethnicity` and the requested names. + +## Description + +Generates random first and/or last names that are consistent with a given gender and ethnicity. Names are sampled in proportion to how often they occur in the embedded [randomNamesData](randomNamesData.html) data set, so the result looks like a realistic roster. Random names are useful to anonymise results that would otherwise identify people. + +## Details + +The number of names returned is the largest of `n`, `length(gender)` and `length(ethnicity)`; shorter vectors are recycled. Gender is used only for first names; ethnicity is used for both first and last names. A missing gender or ethnicity (`NA`, or not supplied) is drawn at random: gender with equal probability, ethnicity with equal probability across the six codes. + +Gender and ethnicity may be given as codes or as text. Text is matched case-insensitively: `"Male"`/`"M"`, `"Female"`/`"F"`; and for ethnicity `"American Indian"`, `"Alaska"` or `"Native American"` (1); `"Asian"`, `"Hawaii"` or `"Pacific"` (2); `"Black"` or `"African"` (3); `"Hispanic"` or `"Latino"` (4); `"White"` or `"Caucasian"` (5); `"Middle Eastern"` or `"Arabic"` (6). A value that matches nothing is drawn at random, with a warning. + +## Examples + +``` R +randomNames() # one name in "last, first" form + +randomNames(5, which.names = "first") + +randomNames(5, return.complete.data = TRUE) + +test.df <- data.frame( + GENDER = sample(0:1, 100, replace = TRUE), + ETHNICITY = sample(1:6, 100, replace = TRUE) +) +head(randomNames(gender = test.df$GENDER, ethnicity = test.df$ETHNICITY)) + +ethnicities <- c("African American", "Hispanic", "Asian", "White", "Native American") +genders <- c("Female", "Male") +test.df <- data.frame( + GENDER = sample(genders, 100, replace = TRUE), + ETHNICITY = sample(ethnicities, 100, replace = TRUE) +) +head(randomNames(gender = test.df$GENDER, ethnicity = test.df$ETHNICITY)) +``` + +## See Also + +[randomNamesData](randomNamesData.html) + diff --git a/ui/www/reference/randomNamesData.qmd b/ui/www/reference/randomNamesData.qmd new file mode 100644 index 0000000..1aee9dd --- /dev/null +++ b/ui/www/reference/randomNamesData.qmd @@ -0,0 +1,41 @@ +--- +title: "randomNamesData" +subtitle: "First and last names by gender and ethnicity" +toc: true +--- + +## Format + +An environment holding 18 one-column arrays whose row names are the names and whose values are their frequency probabilities: + +- `⁠first_names_e_g⁠`{style="white-space: pre;"}: first names for ethnicity `E` (1 to 6) and gender `G` (0 male, 1 female), twelve arrays; + +- `⁠last_names_e⁠`{style="white-space: pre;"}: last names for ethnicity `E` (1 to 6), six arrays. + +Ethnicity is coded 1 American Indian or Native Alaskan, 2 Asian or Pacific Islander, 3 Black (not Hispanic), 4 Hispanic, 5 White (not Hispanic) and 6 Middle-Eastern or Arabic. For example `first_names_e1_g0` holds first names and frequency probabilities for male American Indians or Native Alaskans. `ls(randomNamesData)` lists all arrays. + +## Source + +Large scale state data. + +## Usage + +``` R +randomNamesData +``` + +## Description + +Names with their frequencies, compiled from a large-scale data set of names in which each person's gender and ethnicity were recorded. The frequencies are the sampling probabilities [`randomNames()`](randomNames.html) uses, so sampling gives a realistic roster. First names are held by gender and ethnicity, last names by ethnicity. + +## Examples + +``` R +head(ls(randomNamesData)) +head(randomNamesData$last_names_e4) +``` + +## See Also + +[`randomNames()`](randomNames.html) + diff --git a/ui/www/tools/check-quarto-yml.R b/ui/www/tools/check-quarto-yml.R new file mode 100644 index 0000000..e67fa27 --- /dev/null +++ b/ui/www/tools/check-quarto-yml.R @@ -0,0 +1,17 @@ +# Guards the package-site _quarto.yml against edits that break the Pages artifact flow. +# Run from the package root before `quarto render ui/www`. +args <- commandArgs(trailingOnly = TRUE) +path <- if (length(args)) args[1] else "ui/www/_quarto.yml" +cfg <- yaml::read_yaml(path) +problems <- character(0) +if (!identical(cfg$project$`output-dir`, "_site")) problems <- c(problems, "project.output-dir must be _site") +if (!any(grepl("fonts", unlist(cfg$project$resources)))) { + problems <- c(problems, "project.resources must include assets/fonts/*.woff2") +} +if (is.null(cfg$format$`pkgsite-html`)) problems <- c(problems, "format must be pkgsite-html") +if (!is.null(cfg$website$navbar$title) && is.null(cfg$website$`site-url`)) problems <- c(problems, "website.site-url is missing") +if (length(problems)) { + message(paste0("- ", problems, collapse = "\n")) + quit(status = 1) +} +message("_quarto.yml ok") diff --git a/vignettes/randomNames.Rmd b/vignettes/randomNames.Rmd index 44c51a8..945faca 100644 --- a/vignettes/randomNames.Rmd +++ b/vignettes/randomNames.Rmd @@ -36,7 +36,7 @@ but needs to obscure the identity of the person to whom the data belongs. # Use -After [installing](https://dbetebenner.github.io/randomNames/index.html#installation) the package from either CRAN +After [installing](https://centerforassessment.github.io/randomNames/#installation) the package from either CRAN or GitHub, it's simple to generate random names using the following simple instructions. By default, the `randomNames` function supplies a single random last and first name separated by a comma: @@ -101,7 +101,7 @@ randomNames(5, gender=0, ethnicity=3) ## 5 African American, male last, first na ``` -The fourth argument, `which.names` controls which names are returned. The argument accepts the values: `both` (the default), `last`, `first`, or `complete.data` +The fourth argument, `which.names` controls which names are returned. The argument accepts the values: `both` (the default), `last` or `first`. ```{r} randomNames(5, gender=1, ethnicity=6, which.names="first") ## 5 Middle Eastern/Arabic, female first names @@ -122,6 +122,45 @@ randomNames(5, gender=1, ethnicity=6, name.order="first.last", name.sep=" ") ## ``` +Text works as well as codes. Matching ignores case, and a value that matches nothing is drawn at random, with a warning: + +```{r} +randomNames(4, gender=c("Female", "male"), ethnicity=c("Hispanic", "White", "Asian", "Black")) +``` + +## Complete data + +Set `return.complete.data=TRUE` to get a `data.table` with the gender and ethnicity codes that were used next to the names: + +```{r} +randomNames(4, gender=1, ethnicity=c(3, 4), return.complete.data=TRUE) +``` + +## Reproducible names + +Names are random, so call `set.seed()` first when you need the same names again: + +```{r} +set.seed(42) +randomNames(3) +set.seed(42) +randomNames(3) +``` + +## Invalid input + +An invalid `n`, `which.names` or `name.order` stops with an error rather than returning nothing: + +```{r, error=TRUE} +randomNames(0) +randomNames(3, which.names="middle") +``` + +## The startup message + +In an interactive session, attaching the package prints a banner that compares the installed version with CRAN and GitHub. It waits at most two seconds for each request. Turn it off with `options(randomNames.startup_message = FALSE)` or by setting the environment variable `RANDOMNAMES_QUIET=true`. + + # Contributions & Requests If you have contribution or a feature request for the **randomNames** package, don't hesitate to write or set up an [issue on GitHub](https://github.com/CenterForAssessment/randomNames/issues).