├── .Rbuildignore ├── .gitattributes ├── .github ├── .gitignore └── workflows │ ├── R-CMD-check.yaml │ ├── pkgdown.yaml │ └── test-coverage.yaml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── DESCRIPTION ├── LICENSE ├── LICENSE.md ├── NAMESPACE ├── NEWS.md ├── R ├── DataTable.R ├── Image.R ├── LinearModel.R ├── Plot.R ├── Print.R ├── Table.R ├── Text.R ├── datasets.R ├── dygraphs.R ├── example.R ├── globals.R ├── shinipsum-package.R ├── utils-pipe.R └── utils.R ├── README.Rmd ├── README.md ├── _pkgdown.yml ├── codecov.yml ├── data-raw ├── devstuffs.R ├── lorem └── lorem_ipsum.R ├── data ├── datalist ├── lorem.rda └── lorem_words.rda ├── dev_history.R ├── img ├── shinipsum.png └── thinkr-hex-shinipsum.png ├── inst ├── examples │ └── 01_navbar.R └── img │ ├── 10922273715_cfd864963f_z.jpg │ ├── 14776372143_1c0c37e0b7_b.jpg │ ├── 16570899141_42a117420b_k.jpg │ ├── 5018415361_61eb195750_o.jpg │ ├── 5019024318_d3cdd1958d_o.jpg │ ├── 9467782090_fa4120cd4c_z.jpg │ └── duck_170690246_250.jpg ├── man ├── ipsum_examples.Rd ├── lorem.Rd ├── lorem_words.Rd ├── pipe.Rd ├── random_DT.Rd ├── random_dygraph.Rd ├── random_ggplot.Rd ├── random_ggplotly.Rd ├── random_image.Rd ├── random_lm.Rd ├── random_print.Rd ├── random_table.Rd ├── random_text.Rd └── shinipsum-package.Rd ├── shinipsum.Rproj └── tests ├── testthat.R └── testthat ├── test-dt.R ├── test-dygraph.R ├── test-examples.R ├── test-ggplot.R ├── test-image.R ├── test-lm.R ├── test-print.R ├── test-random.R └── test-text.R /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^.*\.Rproj$ 2 | ^\.Rproj\.user$ 3 | ^dev_history\.R$ 4 | ^\.travis\.yml$ 5 | ^appveyor\.yml$ 6 | ^codecov\.yml$ 7 | ^_pkgdown\.yml$ 8 | ^docs$ 9 | ^pkgdown$ 10 | ^img$ 11 | ^CODE_OF_CONDUCT\.md$ 12 | ^LICENSE\.md$ 13 | ^README\.Rmd$ 14 | ^data-raw$ 15 | ^\.github$ 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | 4 | # Declare files that will always have CRLF line endings on checkout. 5 | *.Rd text eol=lf 6 | *.R text eol=lf 7 | *.Rmd text eol=lf 8 | *.md text eol=lf 9 | NAMESPACE text eol=lf 10 | DESCRIPTION text eol=lf 11 | 12 | # Denote all files that are truly binary and should not be modified. 13 | *.png binary 14 | *.jpg binary 15 | -------------------------------------------------------------------------------- /.github/.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | -------------------------------------------------------------------------------- /.github/workflows/R-CMD-check.yaml: -------------------------------------------------------------------------------- 1 | # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples 2 | # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help 3 | on: 4 | push: 5 | branches: [main, master] 6 | pull_request: 7 | branches: [main, master] 8 | 9 | name: R-CMD-check 10 | 11 | jobs: 12 | R-CMD-check: 13 | runs-on: ${{ matrix.config.os }} 14 | 15 | name: ${{ matrix.config.os }} (${{ matrix.config.r }}) 16 | 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | config: 21 | - {os: macos-latest, r: 'release'} 22 | - {os: windows-latest, r: 'release'} 23 | - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} 24 | - {os: ubuntu-latest, r: 'release'} 25 | - {os: ubuntu-latest, r: 'oldrel-1'} 26 | 27 | env: 28 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 29 | R_KEEP_PKG_SOURCE: yes 30 | 31 | steps: 32 | - uses: actions/checkout@v3 33 | 34 | - uses: r-lib/actions/setup-pandoc@v2 35 | 36 | - uses: r-lib/actions/setup-r@v2 37 | with: 38 | r-version: ${{ matrix.config.r }} 39 | http-user-agent: ${{ matrix.config.http-user-agent }} 40 | use-public-rspm: true 41 | 42 | - uses: r-lib/actions/setup-r-dependencies@v2 43 | with: 44 | extra-packages: any::rcmdcheck 45 | needs: check 46 | 47 | - uses: r-lib/actions/check-r-package@v2 48 | with: 49 | upload-snapshots: true 50 | -------------------------------------------------------------------------------- /.github/workflows/pkgdown.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: [main, master] 4 | 5 | name: pkgdown 6 | 7 | jobs: 8 | pkgdown: 9 | runs-on: macOS-latest 10 | env: 11 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 12 | steps: 13 | - uses: actions/checkout@v2 14 | 15 | - uses: r-lib/actions/setup-r@v1 16 | 17 | - uses: r-lib/actions/setup-pandoc@v1 18 | 19 | - name: Query dependencies 20 | run: | 21 | install.packages('remotes') 22 | saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) 23 | writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") 24 | shell: Rscript {0} 25 | 26 | - name: Cache R packages 27 | uses: actions/cache@v2 28 | with: 29 | path: ${{ env.R_LIBS_USER }} 30 | key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} 31 | restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- 32 | 33 | - name: Install dependencies 34 | run: | 35 | remotes::install_deps(dependencies = TRUE) 36 | remotes::install_github("ThinkR-open/thinkrtemplate") 37 | install.packages("pkgdown", type = "binary") 38 | shell: Rscript {0} 39 | 40 | - name: Install package 41 | run: R CMD INSTALL . 42 | 43 | - name: Deploy package 44 | run: | 45 | git config --local user.email "actions@github.com" 46 | git config --local user.name "GitHub Actions" 47 | Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' 48 | -------------------------------------------------------------------------------- /.github/workflows/test-coverage.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | pull_request: 6 | branches: 7 | - master 8 | 9 | name: test-coverage 10 | 11 | jobs: 12 | test-coverage: 13 | runs-on: macOS-latest 14 | env: 15 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 16 | steps: 17 | - uses: actions/checkout@v2 18 | 19 | - uses: r-lib/actions/setup-r@v1 20 | 21 | - uses: r-lib/actions/setup-pandoc@v1 22 | 23 | - name: Query dependencies 24 | run: | 25 | install.packages('remotes') 26 | saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) 27 | writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") 28 | shell: Rscript {0} 29 | 30 | - name: Cache R packages 31 | uses: actions/cache@v2 32 | with: 33 | path: ${{ env.R_LIBS_USER }} 34 | key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} 35 | restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- 36 | 37 | - name: Install dependencies 38 | run: | 39 | install.packages(c("remotes")) 40 | remotes::install_deps(dependencies = TRUE) 41 | remotes::install_cran("covr") 42 | shell: Rscript {0} 43 | 44 | - name: Test coverage 45 | run: covr::codecov() 46 | shell: Rscript {0} 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .Ruserdata 5 | docs 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | As contributors and maintainers of this project, we pledge to respect all people who 4 | contribute through reporting issues, posting feature requests, updating documentation, 5 | submitting pull requests or patches, and other activities. 6 | 7 | We are committed to making participation in this project a harassment-free experience for 8 | everyone, regardless of level of experience, gender, gender identity and expression, 9 | sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion. 10 | 11 | Examples of unacceptable behavior by participants include the use of sexual language or 12 | imagery, derogatory comments or personal attacks, trolling, public or private harassment, 13 | insults, or other unprofessional conduct. 14 | 15 | Project maintainers have the right and responsibility to remove, edit, or reject comments, 16 | commits, code, wiki edits, issues, and other contributions that are not aligned to this 17 | Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed 18 | from the project team. 19 | 20 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by 21 | opening an issue or contacting one or more of the project maintainers. 22 | 23 | This Code of Conduct is adapted from the Contributor Covenant 24 | (http://contributor-covenant.org), version 1.0.0, available at 25 | http://contributor-covenant.org/version/1/0/0/ 26 | -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Package: shinipsum 2 | Title: Lorem-Ipsum-like Helpers for fast Shiny Prototyping 3 | Version: 0.0.0.9000 4 | Authors@R: 5 | c(person(given = "Colin", 6 | family = "Fay", 7 | role = c("cre", "aut"), 8 | email = "contact@colinfay.me", 9 | comment = c(ORCID = "0000-0001-7343-1846")), 10 | person(given = "Sebastien", 11 | family = "Rochette", 12 | role = "aut", 13 | email = "sebastien@thinkr.fr", 14 | comment = c(ORCID = "0000-0002-1565-9313")), 15 | person(given = "ThinkR", 16 | role = c("cph", "fnd"))) 17 | Description: Prototype your shiny apps quickly with these 18 | Lorem-Ipsum-like Helpers. 19 | License: MIT + file LICENSE 20 | URL: https://github.com/Thinkr-open/shinipsum 21 | BugReports: https://github.com/Thinkr-open/shinipsum/issues 22 | Depends: 23 | R (>= 2.10) 24 | Imports: 25 | attempt, 26 | datasets, 27 | DT, 28 | dygraphs, 29 | ggplot2 (>= 3.0.0), 30 | magrittr, 31 | plotly, 32 | stats, 33 | utils 34 | Suggests: 35 | testthat 36 | Encoding: UTF-8 37 | LazyData: true 38 | Roxygen: list(markdown = TRUE) 39 | RoxygenNote: 7.1.1 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2018 2 | COPYRIGHT HOLDER: Colin FAY 3 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2018 Colin FAY 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /NAMESPACE: -------------------------------------------------------------------------------- 1 | # Generated by roxygen2: do not edit by hand 2 | 3 | export("%>%") 4 | export(ipsum_examples) 5 | export(random_DT) 6 | export(random_dygraph) 7 | export(random_ggplot) 8 | export(random_ggplotly) 9 | export(random_image) 10 | export(random_lm) 11 | export(random_print) 12 | export(random_table) 13 | export(random_text) 14 | importFrom(DT,datatable) 15 | importFrom(attempt,stop_if_all) 16 | importFrom(dygraphs,dygraph) 17 | importFrom(ggplot2,aes) 18 | importFrom(ggplot2,coord_flip) 19 | importFrom(ggplot2,facet_grid) 20 | importFrom(ggplot2,geom_bar) 21 | importFrom(ggplot2,geom_bin2d) 22 | importFrom(ggplot2,geom_boxplot) 23 | importFrom(ggplot2,geom_col) 24 | importFrom(ggplot2,geom_contour) 25 | importFrom(ggplot2,geom_density) 26 | importFrom(ggplot2,geom_density_2d) 27 | importFrom(ggplot2,geom_dotplot) 28 | importFrom(ggplot2,geom_freqpoly) 29 | importFrom(ggplot2,geom_hex) 30 | importFrom(ggplot2,geom_histogram) 31 | importFrom(ggplot2,geom_line) 32 | importFrom(ggplot2,geom_point) 33 | importFrom(ggplot2,geom_raster) 34 | importFrom(ggplot2,geom_ribbon) 35 | importFrom(ggplot2,geom_tile) 36 | importFrom(ggplot2,geom_violin) 37 | importFrom(ggplot2,ggplot) 38 | importFrom(ggplot2,labs) 39 | importFrom(ggplot2,scale_color_viridis_d) 40 | importFrom(ggplot2,scale_fill_viridis_c) 41 | importFrom(ggplot2,stat) 42 | importFrom(ggplot2,theme_minimal) 43 | importFrom(ggplot2,xlim) 44 | importFrom(ggplot2,ylim) 45 | importFrom(magrittr,"%>%") 46 | importFrom(plotly,ggplotly) 47 | importFrom(stats,HoltWinters) 48 | importFrom(stats,cor.test) 49 | importFrom(stats,lm) 50 | importFrom(stats,predict) 51 | importFrom(stats,rnorm) 52 | importFrom(stats,shapiro.test) 53 | -------------------------------------------------------------------------------- /NEWS.md: -------------------------------------------------------------------------------- 1 | # shinipsum 0.0.0.9000 2 | 3 | * Added a `NEWS.md` file to track changes to the package. 4 | -------------------------------------------------------------------------------- /R/DataTable.R: -------------------------------------------------------------------------------- 1 | #' A Random DT 2 | #' 3 | #' This function creates a random DT::datatable, and can be passed into `renderDT` & `DTOutput`. 4 | #' 5 | #' @param nrow number of row of the output 6 | #' @param ncol number of cols of the output 7 | #' @param type type of the columns, can be "random", "numeric", "character", "numchar". Default is random. 8 | #' @param ... arguments to be passed to DT::datatable 9 | #' 10 | #' @return a DT 11 | #' 12 | #' @importFrom DT datatable 13 | #' @export 14 | #' 15 | 16 | 17 | random_DT <- function(nrow, ncol, 18 | type = c("random", "numeric", 19 | "character", "numchar"), 20 | ...){ 21 | type <- match.arg(type) 22 | random_table(nrow, ncol, type) %>% 23 | datatable(...) 24 | } 25 | -------------------------------------------------------------------------------- /R/Image.R: -------------------------------------------------------------------------------- 1 | #' A Random Image 2 | #' 3 | #' This function returns a random image that can be passed into `renderImage` and `plotOutput`. 4 | #' 5 | #' @return an image 6 | #' 7 | #' @export 8 | 9 | random_image <- function(){ 10 | l <- list.files(system.file("img", package = "shinipsum"), full.names = TRUE) 11 | img <- normalizePath(sample(l, 1)) 12 | tmpimg <- paste(tempfile(), basename(img), sep = "-") 13 | file.copy(img, tmpimg) 14 | list(src = tmpimg) 15 | } 16 | -------------------------------------------------------------------------------- /R/LinearModel.R: -------------------------------------------------------------------------------- 1 | #' A Random Linear Model 2 | #' 3 | #' This function returns a model which can be passed to renderText or renderTable if pre-processed appropriately 4 | #' 5 | #' @param nobs Numeric. number of observation 6 | #' @param nx Numeric. number of variables. Should be lower that nobs 7 | #' @return a model output 8 | #' 9 | #' @export 10 | #' 11 | random_lm <- function(nobs = 100, nx = 2){ 12 | 13 | try(if(nobs < nx) stop("Less observations than variables")) 14 | 15 | x <- rnorm(nobs*(nx - 1)) 16 | 17 | x <- cbind(1, matrix(x, nobs, (nx-1))) 18 | 19 | coefficients <- sample(1:nobs, nx) 20 | 21 | y <- c(coefficients%*%t(x)) + rnorm(nobs) 22 | 23 | lm(y ~ x - 1) 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /R/Plot.R: -------------------------------------------------------------------------------- 1 | #' A Random ggplot 2 | #' 3 | #' This function returns a ggplot object, which can be passed to `renderPlot` and `plotOutput` 4 | #' 5 | #' @param type type of the geom. Can be any of "random", "point", "bar", "boxplot","col", "tile", "line", "bin2d", "contour", "density", "density_2d", "dotplot", "hex", "freqpoly", "histogram", "ribbon", "raster", "tile", "violin" and defines the geom of the ggplot. Default is "random", and chooses a random geom for you. 6 | #' 7 | #' @importFrom ggplot2 ggplot aes geom_point geom_bar scale_color_viridis_d theme_minimal geom_boxplot labs coord_flip geom_tile geom_line facet_grid geom_col scale_fill_viridis_c 8 | #' @importFrom ggplot2 xlim ylim geom_bin2d geom_contour geom_density geom_density_2d geom_dotplot 9 | #' @importFrom ggplot2 geom_hex geom_freqpoly stat geom_histogram geom_ribbon geom_raster geom_violin 10 | #' 11 | #' @return a ggplot 12 | #' 13 | #' @export 14 | 15 | random_ggplot <- function(type = c("random", "point", "bar", 16 | "boxplot","col", "tile", 17 | "line", "bin2d", "contour", 18 | "density", "density_2d", "dotplot", 19 | "hex", "freqpoly", "histogram", 20 | "ribbon", "raster", "tile", 21 | "violin")) { 22 | type_matched <- match.arg(type) 23 | 24 | if (type_matched == "random") { 25 | form <- eval(formals()$type) 26 | # Removed random from the formals match 27 | form <- form[ - which(form == "random") ] 28 | type_matched <- sample( form, 1 ) 29 | } 30 | 31 | r <- switch(as.character(type_matched), 32 | "point" = sample(0:5, 1), 33 | "bar" = sample(10:11, 1), 34 | "boxplot" = sample(20:21, 1), 35 | "col" = sample(30:31, 1), 36 | "tile" = sample(40:41, 1), 37 | "line" = sample(50:51, 1), 38 | "bin2d" = sample(60:61, 1), 39 | "contour" = sample(70:71, 1), 40 | "density" = sample(80:82, 1), 41 | "density_2d" = sample(90:91, 1), 42 | "dotplot" = sample(100:101, 1), 43 | "hex" = sample(110:111, 1), 44 | "freqpoly" = sample(120:121, 1), 45 | "histogram" = sample(130:131, 1), 46 | "ribbon" = sample(140:141, 1), 47 | "raster" = sample(150:151, 1), 48 | "tile" = sample(160:161, 1), 49 | "violin" = sample(170:171, 1) 50 | ) 51 | 52 | res <- switch(as.character(r), 53 | "0" = list( 54 | ggplot(datasets::iris) + 55 | aes(Sepal.Length, Sepal.Width, color = Species) + 56 | geom_point() + 57 | scale_color_viridis_d() + 58 | theme_minimal() 59 | ), 60 | "1" = list( 61 | ggplot(datasets::iris) + 62 | aes(Sepal.Length, Petal.Width, color = Species) + 63 | geom_point() + 64 | scale_color_viridis_d() + 65 | facet_grid(. ~ Species) + 66 | theme_minimal() 67 | ), 68 | "2" = list( 69 | ggplot(datasets::mtcars) + 70 | aes(mpg, disp, color = vs) + 71 | geom_point() + 72 | theme_minimal() 73 | ), 74 | "3" = list( 75 | ggplot(datasets::mtcars) + 76 | aes(wt, qsec, color = as.factor(cyl)) + 77 | geom_point() + 78 | scale_color_viridis_d() + 79 | theme_minimal() 80 | ), 81 | "4" = list( 82 | ggplot(datasets::airquality) + 83 | aes(Solar.R, Wind, color = as.factor(Month)) + 84 | geom_point() + 85 | theme_minimal() 86 | ), 87 | "5" = list( 88 | ggplot(datasets::airquality) + 89 | aes(Wind, Temp, color = as.factor(Month)) + 90 | geom_point() + 91 | theme_minimal() 92 | ), 93 | "10" = list( 94 | ggplot(datasets::airquality) + 95 | aes(Temp) + 96 | geom_bar() + 97 | scale_color_viridis_d() + 98 | labs(color = "Month") + 99 | theme_minimal() 100 | ), 101 | "11" = list( 102 | ggplot(datasets::mtcars) + 103 | aes(cyl) + 104 | geom_bar(fill = "#440154FF") + 105 | theme_minimal() 106 | ), 107 | "20" = list( 108 | ggplot(datasets::airquality) + 109 | aes(Month, Ozone, group = Month) + 110 | geom_boxplot() + 111 | theme_minimal() 112 | ), 113 | "21" = list( 114 | ggplot(datasets::iris) + 115 | aes(Species, Sepal.Length, group = Species) + 116 | geom_boxplot() + 117 | coord_flip() + 118 | theme_minimal() 119 | ), 120 | "30" = list( 121 | as.data.frame(table(ggplot2::diamonds$cut)) %>% 122 | ggplot() + 123 | aes(Var1, Freq) + 124 | geom_col() 125 | ), 126 | "31" = list( 127 | ggplot2::economics %>% 128 | ggplot() + 129 | aes(date, unemploy) + 130 | geom_col() 131 | ), 132 | "40" = list( 133 | ggplot(ggplot2::faithfuld) + 134 | aes(waiting, eruptions, fill = density) + 135 | geom_tile() + 136 | scale_fill_viridis_c() 137 | ), 138 | "41" = list( 139 | ggplot(ggplot2::txhousing) + 140 | aes(year, month, fill = median) + 141 | geom_tile() + 142 | scale_fill_viridis_c() 143 | ), 144 | "50" = list( 145 | ggplot(datasets::women) + 146 | aes(height, weight) + 147 | geom_line(size = 2) + 148 | theme_minimal() 149 | ), 150 | "51" = list( 151 | ggplot(datasets::cars) + 152 | aes(speed, dist) + 153 | geom_line() + 154 | theme_minimal() 155 | ), 156 | "60" = list( 157 | ggplot(ggplot2::diamonds) + 158 | aes(x, y) + 159 | xlim(4, 10) + 160 | ylim(4, 10) + 161 | geom_bin2d() + 162 | theme_minimal() 163 | ), 164 | "61" = list( 165 | ggplot(datasets::mtcars) + 166 | aes(mpg, disp) + 167 | geom_bin2d() + 168 | theme_minimal() 169 | ), 170 | "70" = list( 171 | ggplot(ggplot2::faithfuld, aes(waiting, eruptions, z = density)) + 172 | geom_contour() + 173 | theme_minimal() 174 | ), 175 | "71" = list( 176 | ggplot(ggplot2::faithfuld, aes(waiting, eruptions, z = density)) + 177 | geom_contour(binwidth = 0.001) + 178 | theme_minimal() 179 | ), 180 | "80" = list( 181 | ggplot(datasets::iris, aes(Sepal.Length)) + 182 | geom_density() + 183 | theme_minimal() 184 | ), 185 | "81" = list( 186 | ggplot(ggplot2::diamonds, aes(depth, fill = cut, colour = cut)) + 187 | geom_density(alpha = 0.1) + 188 | xlim(55, 70) + 189 | theme_minimal() 190 | ), 191 | "82" = list( 192 | ggplot(ggplot2::diamonds, aes(carat, fill = cut)) + 193 | geom_density(position = "stack") + 194 | theme_minimal() 195 | ), 196 | "90" = list( 197 | ggplot(datasets::faithful, aes(x = eruptions, y = waiting)) + 198 | geom_point() + 199 | xlim(0.5, 6) + 200 | ylim(40, 110) + 201 | geom_density_2d() + 202 | theme_minimal() 203 | ), 204 | "91" = list( 205 | ggplot(ggplot2::diamonds[sample(nrow(ggplot2::diamonds), 1000), ], 206 | aes(x, y)) + 207 | geom_density_2d(aes(colour = cut)) + 208 | theme_minimal() 209 | ), 210 | "100" = list( 211 | ggplot(datasets::airquality, aes(x = Temp)) + 212 | geom_dotplot() + 213 | theme_minimal() 214 | ), 215 | "101" = list( 216 | ggplot(datasets::iris, aes(x = Sepal.Length, fill = Species)) + 217 | geom_dotplot() + 218 | theme_minimal() 219 | ), 220 | "110" = list( 221 | ggplot(ggplot2::diamonds, aes(carat, price)) + 222 | geom_hex() + 223 | theme_minimal() 224 | ), 225 | "111" = list( 226 | ggplot(datasets::iris, aes(Sepal.Length, Sepal.Width)) + 227 | geom_hex() + 228 | theme_minimal() 229 | ), 230 | "120" = list( 231 | ggplot(ggplot2::diamonds, aes(price, colour = cut)) + 232 | geom_freqpoly(binwidth = 500) + 233 | theme_minimal() 234 | ), 235 | "121" = list( 236 | ggplot(ggplot2::diamonds, 237 | aes(price, stat(density), colour = cut)) + 238 | geom_freqpoly(binwidth = 500) + 239 | theme_minimal() 240 | ), 241 | "130" = list( 242 | ggplot(datasets::iris, aes(Sepal.Length, fill = Species)) + 243 | geom_histogram(binwidth = 0.5) + 244 | theme_minimal() 245 | ), 246 | "131" = list( 247 | ggplot(ggplot2::diamonds, aes(price, fill = color)) + 248 | geom_histogram() + 249 | theme_minimal() 250 | ), 251 | "140" = list( 252 | ggplot(data.frame(year = 1875:1972, 253 | level = as.vector(datasets::LakeHuron)), aes(year)) + 254 | geom_ribbon(aes(ymin=0, ymax=level)) + 255 | theme_minimal() 256 | ), 257 | "141" = list( 258 | ggplot(data.frame(year = 1875:1972, 259 | level = as.vector(datasets::LakeHuron)), aes(year)) + 260 | geom_ribbon(aes(ymin = level - 1, ymax = level + 1), fill = "grey70") + 261 | theme_minimal() 262 | ), 263 | "150" = list( 264 | ggplot(ggplot2::faithfuld, aes(waiting, eruptions)) + 265 | geom_raster(aes(fill = density)) + 266 | theme_minimal() 267 | ), 268 | "151" = list( 269 | ggplot(ggplot2::faithfuld, aes(waiting, eruptions)) + 270 | geom_raster(aes(fill = density), interpolate = TRUE) + 271 | theme_minimal() 272 | ), 273 | "160" = list( 274 | ggplot(data.frame( 275 | x = rep(c(2, 5, 7, 9, 12), 2), 276 | y = rep(c(1, 2), each = 5), 277 | z = factor(rep(1:5, each = 2)), 278 | w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2) 279 | ), aes(x, y)) + 280 | geom_tile(aes(fill = z), colour = "grey50") + 281 | theme_minimal() 282 | ), 283 | "161" = list( 284 | ggplot(data.frame( 285 | x = rep(c(2, 5, 7, 9, 12), 2), 286 | y = rep(c(1, 2), each = 5), 287 | z = factor(rep(1:5, each = 2)), 288 | w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2) 289 | ), aes(x, y, width = w)) + 290 | geom_tile(aes(fill = z), colour = "grey50") + 291 | theme_minimal() 292 | ), 293 | "170" = list( 294 | ggplot(datasets::mtcars, aes(factor(cyl), mpg)) + 295 | geom_violin() + 296 | theme_minimal() 297 | ), 298 | "171" = list( 299 | ggplot(datasets::iris, aes(Species, Sepal.Length)) + 300 | geom_violin() + 301 | theme_minimal() 302 | ) 303 | ) 304 | res[[1]] 305 | } 306 | 307 | 308 | 309 | #' A Random ggplotly 310 | #' 311 | #' This function returns a ggplotly object, which can be passed to `renderPlotly` and `plotlyOutput` 312 | #' 313 | #' @param ... arg to pass to `random_ggplot`. 314 | #' @importFrom plotly ggplotly 315 | #' 316 | #' @return a ggplotly 317 | #' @export 318 | #' 319 | 320 | random_ggplotly <- function(...){ 321 | res <- random_ggplot(...) 322 | ggplotly(res) 323 | } 324 | -------------------------------------------------------------------------------- /R/Print.R: -------------------------------------------------------------------------------- 1 | #' A Random print output 2 | #' 3 | #' This function returns a random print output that can be passed to `renderPrint` and `verbatimTextOutput`. 4 | #' 5 | #' @param type type of the output ("character", "numeric", "model", "table") 6 | #' 7 | #' @importFrom stats lm cor.test shapiro.test rnorm 8 | #' 9 | #' @return a random print 10 | #' @export 11 | #' 12 | 13 | random_print <- function(type = c("character", "numeric", "integer", "model", "table")) { 14 | type <- match.arg(type) 15 | res <- switch (type, 16 | "character" = list("foo", "bar", random_text(nwords = sample(1:60, 1))), 17 | "integer" = list(1:10, 1:100, 1:50), 18 | "numeric" = list(as.numeric(1:10), as.numeric(1:100), rnorm(10), pi), 19 | "model" = list( 20 | lm(Sepal.Length ~ Sepal.Width, data = datasets::iris), 21 | cor.test(datasets::mtcars$mpg, datasets::mtcars$cyl), 22 | shapiro.test(datasets::airquality$Ozone)), 23 | "table" = list(datasets::iris, datasets::mtcars, datasets::airquality) 24 | ) 25 | sample(res, 1)[[1]] 26 | } 27 | -------------------------------------------------------------------------------- /R/Table.R: -------------------------------------------------------------------------------- 1 | #' A Random Table 2 | #' 3 | #' This function returns a table that can be passed to `renderTable` and `tableOutput`. 4 | #' 5 | #' @inheritParams random_DT 6 | #' 7 | #' 8 | #' @return a table 9 | #' 10 | #' @export 11 | #' 12 | random_table <- function(nrow, ncol, 13 | type = c("random", "numeric", 14 | "character", "numchar")){ 15 | type <- match.arg(type) 16 | l <- switch (type, 17 | "random" = list( 18 | datasets::iris, datasets::ability.cov$cov, datasets::anscombe, 19 | datasets::attitude, datasets::beaver1, datasets::CO2, datasets::esoph, 20 | datasets::longley, datasets::mtcars, 21 | datasets::Puromycin 22 | ), 23 | "numchar" = list( 24 | datasets::iris, datasets::CO2, datasets::esoph, 25 | datasets::InsectSprays, datasets::OrchardSprays, 26 | datasets::Puromycin, datasets::ToothGrowth 27 | ), 28 | "numeric" = list( 29 | datasets::iris, datasets::ability.cov$cov, datasets::anscombe, 30 | datasets::attitude, datasets::beaver1, datasets::longley, datasets::mtcars 31 | ), 32 | "character" = list( 33 | random_ipsum(nrow, ncol) 34 | ) 35 | ) 36 | df <- sample(l, 1)[[1]] 37 | ncol(df) 38 | while (ncol(df) < 1){ 39 | df <- sample(l, 1)[[1]] 40 | } 41 | while(ncol(df) < ncol){ 42 | df <- cbind(df, df) 43 | } 44 | while(nrow(df) < nrow){ 45 | df <- rbind(df, df) 46 | } 47 | df[1:nrow, 1:ncol] 48 | } 49 | -------------------------------------------------------------------------------- /R/Text.R: -------------------------------------------------------------------------------- 1 | #' A Random Lorem Ipsum 2 | #' 3 | #' @param nchars number of characters. One of the two params should be left NULL. 4 | #' @param nwords number of words to return. One of the two params should be left NULL. 5 | #' @param offset number of characters or words to offset the result by. Defaults to 0. 6 | #' 7 | #' @importFrom attempt stop_if_all 8 | #' 9 | #' @return a text 10 | #' 11 | #' @export 12 | 13 | random_text <- function(nchars = NULL, nwords = NULL, offset=0){ 14 | stop_if_all( 15 | c(nchars, nwords), 16 | is.null, 17 | "Please enter a nchars or nwords" 18 | ) 19 | stop_if_all( 20 | list(nchars, nwords), 21 | ~ !is.null(.x), 22 | "You can't chose both nchars and nwords" 23 | ) 24 | 25 | if (!is.null(nchars)){ 26 | res <- substr( 27 | shinipsum::lorem, 28 | 1+offset, 29 | nchars+offset 30 | ) 31 | } else { 32 | res <- paste(shinipsum::lorem_words[1+offset:nwords+offset], collapse = " ") 33 | } 34 | 35 | substr(res, 1, 1) <- toupper(substr(res, 1, 1)) 36 | res 37 | } 38 | 39 | -------------------------------------------------------------------------------- /R/datasets.R: -------------------------------------------------------------------------------- 1 | #' Lorem text 2 | #' 3 | #' A long lorem ipsum text 4 | "lorem" 5 | 6 | #' Lorem test as vector 7 | #' 8 | #' A long vector of words 9 | "lorem_words" 10 | -------------------------------------------------------------------------------- /R/dygraphs.R: -------------------------------------------------------------------------------- 1 | #' A Random Dygraph 2 | #' 3 | #' This function returns a dygraph object, which can be passed to `renderDygraph` and `dygraphOutput` 4 | #' 5 | #' @param ... args passed to `dygraph` 6 | #' @importFrom dygraphs dygraph 7 | #' @importFrom stats HoltWinters predict 8 | #' @return a dygraph 9 | #' @export 10 | 11 | random_dygraph <- function(...){ 12 | 13 | switch (as.character(sample(1:7, 1)), 14 | "1" = dygraph(cbind(datasets::mdeaths, datasets::fdeaths), ...), 15 | "2" = dygraph( 16 | predict(HoltWinters(datasets::ldeaths), n.ahead = 72, prediction.interval = TRUE), 17 | ... 18 | ), 19 | "3" = dygraph(datasets::nhtemp, ...), 20 | "4" = dygraph(datasets::AirPassengers, ...), 21 | "5" = dygraph(datasets::discoveries, ...), 22 | "6" = dygraph(datasets::presidents, ...), 23 | "7" = dygraph(datasets::austres, ...) 24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /R/example.R: -------------------------------------------------------------------------------- 1 | #' Get a shinipsum example 2 | #' 3 | #' @param which The example to run. If empty, all the available examples are listed. 4 | #' 5 | #' @return A path to the example. 6 | #' @export 7 | #' 8 | #' @examples 9 | #' ipsum_examples() 10 | 11 | ipsum_examples <- function(which = NULL){ 12 | if (is.null(which)){ 13 | list.files( 14 | system.file("examples", package = "shinipsum") 15 | ) 16 | } else { 17 | normalizePath( 18 | file.path( 19 | system.file("examples", which, package = "shinipsum") 20 | ) 21 | ) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /R/globals.R: -------------------------------------------------------------------------------- 1 | utils::globalVariables(unique(c( 2 | ".", 3 | # random_ggplot 4 | "Sepal.Length", "Sepal.Width", "Species", "Petal.Width", 5 | "mpg", "disp", "vs", "wt", "qsec", "cyl", 6 | "Solar.R", "Wind", "Month", "Temp", "Ozone", 7 | "Var1", "Freq", 8 | "date", "unemploy", 9 | "waiting", "eruptions", "density", 10 | "year", "month", "median", 11 | "height", "weight", 12 | "speed", "dist", 13 | "x", "y", 14 | "depth", "cut", "carat", "price", "color", 15 | "year", "level", 16 | "z", "w" 17 | 18 | # random dygraphs 19 | # @importFrom datasets mdeaths fdeaths ldeaths nhtemp AirPassengers discoveries presidents austres 20 | # random_ggplot 21 | # @importFrom datasets iris mtcars airquality women cars LakeHuron faithful 22 | # random_print 23 | # @importFrom datasets iris mtcars airquality 24 | # random_table 25 | # @importFrom datasets iris ability.cov anscombe attitude beaver1 CO2 esoph longley 26 | # @importFrom datasets mtcars Puromycin ToothGrowth OrchardSprays InsectSprays 27 | 28 | ))) 29 | -------------------------------------------------------------------------------- /R/shinipsum-package.R: -------------------------------------------------------------------------------- 1 | #' @keywords internal 2 | "_PACKAGE" 3 | 4 | # The following block is used by usethis to automatically manage 5 | # roxygen namespace tags. Modify with care! 6 | ## usethis namespace: start 7 | ## usethis namespace: end 8 | NULL 9 | -------------------------------------------------------------------------------- /R/utils-pipe.R: -------------------------------------------------------------------------------- 1 | #' Pipe operator 2 | #' 3 | #' See \code{magrittr::\link[magrittr]{\%>\%}} for details. 4 | #' 5 | #' @name %>% 6 | #' @rdname pipe 7 | #' @keywords internal 8 | #' @export 9 | #' @importFrom magrittr %>% 10 | #' @usage lhs \%>\% rhs 11 | NULL 12 | -------------------------------------------------------------------------------- /R/utils.R: -------------------------------------------------------------------------------- 1 | vec_ipsum <- function(x){ 2 | sample(shinipsum::lorem_words, x) 3 | } 4 | 5 | random_ipsum <- function(nrow, ncol){ 6 | lapply(1:ncol, function(x) vec_ipsum(nrow)) %>% 7 | do.call(cbind, .) %>% 8 | as.data.frame() 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /README.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | output: github_document 3 | --- 4 | 5 | 6 | 7 | ```{r setup, include = FALSE} 8 | knitr::opts_chunk$set( 9 | collapse = TRUE, 10 | comment = "#>", 11 | fig.path = "man/figures/README-", 12 | out.width = "100%" 13 | ) 14 | ``` 15 | 16 | 17 | [![R build status](https://github.com/ThinkR-open/shinipsum/workflows/R-CMD-check/badge.svg)](https://github.com/ThinkR-open/shinipsum/actions) 18 | [![Codecov test coverage](https://codecov.io/gh/ThinkR-open/shinipsum/branch/master/graph/badge.svg)](https://codecov.io/gh/ThinkR-open/shinipsum?branch=master) 19 | [![R-CMD-check](https://github.com/ThinkR-open/shinipsum/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/ThinkR-open/shinipsum/actions/workflows/R-CMD-check.yaml) 20 | 21 | 22 | # shinipsum 23 | 24 | The goal of `{shinipsum} `is to provide random shiny elements for easiest shiny app prototyping, so that you can focus on building the frontend before building the backend. 25 | 26 | 27 | The full documentation can be found on the `{pkgdown} `site: 28 | 29 | ## Installation 30 | 31 | You can install the dev version of shinipsum from GitHub with: 32 | 33 | ``` r 34 | install.packages("shinipsum") 35 | ``` 36 | 37 | ## About 38 | 39 | You're reading the doc about version : `r pkgload::pkg_version()` 40 | 41 | This README has been compiled on the 42 | 43 | ```{r} 44 | Sys.time() 45 | ``` 46 | 47 | Here are the test & coverage results : 48 | 49 | ```{r} 50 | devtools::check(quiet = TRUE) 51 | ``` 52 | 53 | ```{r echo = FALSE} 54 | unloadNamespace("shinipsum") 55 | ``` 56 | 57 | ```{r} 58 | covr::package_coverage() 59 | ``` 60 | 61 | 62 | ## Demo 63 | 64 | Available examples: 65 | 66 | ```{r} 67 | library(shinipsum) 68 | ipsum_examples() 69 | ``` 70 | 71 | 72 | You can run `{shinipsum}` demos with: 73 | 74 | ```{r eval = FALSE} 75 | shiny::runApp( 76 | ipsum_examples("01_navbar.R") 77 | ) 78 | ``` 79 | 80 | ## Available ipsums : 81 | 82 | > Note: {shinipsum} only load functions which are necessary to its internal job. If you want to customise an output or to use a renderXX / XXOutput, you'll need to **explicitely** load the packages needed (for example, if you want to customise a dygraph, a ggplot, or use ggplotly). 83 | 84 | ### DataTable 85 | 86 | `random_DT` takes 4 args : 87 | 88 | + `nrow` & `ncol`: number of row and columns of the table 89 | + `type` : random, numeric, character, numchar - the type of the columns 90 | + `...` : args to be passed to `DT::datatable` 91 | 92 | ### Image 93 | 94 | `random_image` returns a random image. 95 | 96 | ### Plot 97 | 98 | `random_ggplot` takes one arg : 99 | 100 | + `type` : Can be any of "random", "point", "bar", "boxplot","col", "tile", "line", "bin2d", "contour", "density", "density_2d", "dotplot", "hex", "freqpoly", "histogram", "ribbon", "raster", "tile", "violin" and defines the geom of the ggplot. Default is "random", and chooses a random geom for you. 101 | 102 | Default theme is minimal. 103 | 104 | As the return object is a `ggplot`, it can be enhanced like any other ggplot with `+`. 105 | 106 | ```{r eval = FALSE} 107 | library(ggplot2) 108 | random_ggplot(type = "col") + 109 | labs(title = "Random plot") + 110 | theme_bw() 111 | ``` 112 | 113 | `random_ggplotly` calls the `ggplotly` function on a `random_ggplot`. 114 | 115 | ### Dygraph 116 | 117 | `random_dygraph` returns a random dygprah. It takes one arg: 118 | 119 | + `...`: arguments which are passed to the `dygraph()` function. 120 | 121 | As the return object is a `dygraph`, it can be enhanced like any other dygraph. 122 | 123 | ```{r eval = FALSE} 124 | library(dygraphs) 125 | random_dygraph() %>% 126 | dyRangeSelector() 127 | ``` 128 | 129 | 130 | ### Print 131 | 132 | `random_print` takes one arg: 133 | 134 | + `type`: can be any of `"character", "numeric", "model", "table"`, and defines the type of print. Default is `"character"`. 135 | 136 | 137 | ### Table 138 | 139 | `random_table` takes three args : `nrow`, `ncols` and `type`. See `random_DT`. 140 | 141 | ### Text 142 | 143 | `random_text` takes one of these two args: 144 | 145 | + `nchar`: lorem ipsum of `nchar` characters 146 | + `nwords`: lorem ipsum of `nwords` characters 147 | + `offset`: number of characters or words to offset the result by 148 | 149 | ### Lm 150 | 151 | `random_lm` returns a random `lm` model output: 152 | 153 | + `nobs`: Number of observations 154 | + `nx`: Number of variables (should be lower than `nobs`) 155 | 156 | 157 | ## Example 158 | 159 | Here is an example of using `{shinipsum}` to generate a random app: 160 | 161 | ```{r eval = FALSE} 162 | library(shiny) 163 | library(shinipsum) 164 | library(DT) 165 | ui <- fluidPage( 166 | h2("A Random DT"), 167 | DTOutput("data_table"), 168 | h2("A Random Image"), 169 | plotOutput("image", height = "300px"), 170 | h2("A Random Plot"), 171 | plotOutput("plot"), 172 | h2("A Random Print"), 173 | verbatimTextOutput("print"), 174 | h2("A Random Table"), 175 | tableOutput("table"), 176 | h2("A Random Text"), 177 | tableOutput("text") 178 | ) 179 | 180 | server <- function(input, output, session) { 181 | output$data_table <- DT::renderDT({ 182 | random_DT(10, 5) 183 | }) 184 | output$image <- renderImage({ 185 | random_image() 186 | }) 187 | output$plot <- renderPlot({ 188 | random_ggplot() 189 | }) 190 | output$print <- renderPrint({ 191 | random_print("model") 192 | }) 193 | output$table <- renderTable({ 194 | random_table(10, 5) 195 | }) 196 | output$text <- renderText({ 197 | random_text(nwords = 50) 198 | }) 199 | } 200 | shinyApp(ui, server) 201 | 202 | ``` 203 | 204 | 205 | 206 | Please note that the 'shinipsum' project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By contributing to this project, you agree to abide by its terms. 207 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | [![R build 6 | status](https://github.com/ThinkR-open/shinipsum/workflows/R-CMD-check/badge.svg)](https://github.com/ThinkR-open/shinipsum/actions) 7 | [![Codecov test 8 | coverage](https://codecov.io/gh/ThinkR-open/shinipsum/branch/master/graph/badge.svg)](https://codecov.io/gh/ThinkR-open/shinipsum?branch=master) 9 | [![R-CMD-check](https://github.com/ThinkR-open/shinipsum/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/ThinkR-open/shinipsum/actions/workflows/R-CMD-check.yaml) 10 | 11 | 12 | # shinipsum 13 | 14 | The goal of `{shinipsum}`is to provide random shiny elements for easiest 15 | shiny app prototyping, so that you can focus on building the frontend 16 | before building the backend. 17 | 18 | The full documentation can be found on the `{pkgdown}`site: 19 | 20 | 21 | ## Installation 22 | 23 | You can install the dev version of shinipsum from GitHub with: 24 | 25 | ``` r 26 | install.packages("shinipsum") 27 | ``` 28 | 29 | ## About 30 | 31 | You’re reading the doc about version : 0.0.0.9000 32 | 33 | This README has been compiled on the 34 | 35 | ``` r 36 | Sys.time() 37 | #> [1] "2023-03-27 11:19:38 CEST" 38 | ``` 39 | 40 | Here are the test & coverage results : 41 | 42 | ``` r 43 | devtools::check(quiet = TRUE) 44 | #> ══ Documenting ═════════════════════════════════════════════════════════════════ 45 | #> ℹ Installed roxygen2 version (7.2.3) doesn't match required (7.1.1) 46 | #> ✖ `check()` will not re-document this package 47 | #> ── R CMD check results ─────────────────────────────── shinipsum 0.0.0.9000 ──── 48 | #> Duration: 18.4s 49 | #> 50 | #> ❯ checking top-level files ... NOTE 51 | #> Non-standard file/directory found at top level: 52 | #> ‘README.html’ 53 | #> 54 | #> ❯ checking dependencies in R code ... NOTE 55 | #> Namespace in Imports field not imported from: ‘utils’ 56 | #> All declared Imports should be used. 57 | #> 58 | #> 0 errors ✔ | 0 warnings ✔ | 2 notes ✖ 59 | ``` 60 | 61 | ``` r 62 | covr::package_coverage() 63 | #> shinipsum Coverage: 97.91% 64 | #> R/example.R: 44.44% 65 | #> R/Table.R: 96.97% 66 | #> R/Plot.R: 99.29% 67 | #> R/DataTable.R: 100.00% 68 | #> R/dygraphs.R: 100.00% 69 | #> R/Image.R: 100.00% 70 | #> R/LinearModel.R: 100.00% 71 | #> R/Print.R: 100.00% 72 | #> R/Text.R: 100.00% 73 | #> R/utils.R: 100.00% 74 | ``` 75 | 76 | ## Demo 77 | 78 | Available examples: 79 | 80 | ``` r 81 | library(shinipsum) 82 | ipsum_examples() 83 | #> [1] "01_navbar.R" 84 | ``` 85 | 86 | You can run `{shinipsum}` demos with: 87 | 88 | ``` r 89 | shiny::runApp( 90 | ipsum_examples("01_navbar.R") 91 | ) 92 | ``` 93 | 94 | ## Available ipsums : 95 | 96 | > Note: {shinipsum} only load functions which are necessary to its 97 | > internal job. If you want to customise an output or to use a renderXX 98 | > / XXOutput, you’ll need to **explicitely** load the packages needed 99 | > (for example, if you want to customise a dygraph, a ggplot, or use 100 | > ggplotly). 101 | 102 | ### DataTable 103 | 104 | `random_DT` takes 4 args : 105 | 106 | - `nrow` & `ncol`: number of row and columns of the table 107 | - `type` : random, numeric, character, numchar - the type of the columns 108 | - `...` : args to be passed to `DT::datatable` 109 | 110 | ### Image 111 | 112 | `random_image` returns a random image. 113 | 114 | ### Plot 115 | 116 | `random_ggplot` takes one arg : 117 | 118 | - `type` : Can be any of “random”, “point”, “bar”, “boxplot”,“col”, 119 | “tile”, “line”, “bin2d”, “contour”, “density”, “density_2d”, 120 | “dotplot”, “hex”, “freqpoly”, “histogram”, “ribbon”, “raster”, “tile”, 121 | “violin” and defines the geom of the ggplot. Default is “random”, and 122 | chooses a random geom for you. 123 | 124 | Default theme is minimal. 125 | 126 | As the return object is a `ggplot`, it can be enhanced like any other 127 | ggplot with `+`. 128 | 129 | ``` r 130 | library(ggplot2) 131 | random_ggplot(type = "col") + 132 | labs(title = "Random plot") + 133 | theme_bw() 134 | ``` 135 | 136 | `random_ggplotly` calls the `ggplotly` function on a `random_ggplot`. 137 | 138 | ### Dygraph 139 | 140 | `random_dygraph` returns a random dygprah. It takes one arg: 141 | 142 | - `...`: arguments which are passed to the `dygraph()` function. 143 | 144 | As the return object is a `dygraph`, it can be enhanced like any other 145 | dygraph. 146 | 147 | ``` r 148 | library(dygraphs) 149 | random_dygraph() %>% 150 | dyRangeSelector() 151 | ``` 152 | 153 | ### Print 154 | 155 | `random_print` takes one arg: 156 | 157 | - `type`: can be any of `"character", "numeric", "model", "table"`, and 158 | defines the type of print. Default is `"character"`. 159 | 160 | ### Table 161 | 162 | `random_table` takes three args : `nrow`, `ncols` and `type`. See 163 | `random_DT`. 164 | 165 | ### Text 166 | 167 | `random_text` takes one of these two args: 168 | 169 | - `nchar`: lorem ipsum of `nchar` characters 170 | - `nwords`: lorem ipsum of `nwords` characters 171 | - `offset`: number of characters or words to offset the result by 172 | 173 | ### Lm 174 | 175 | `random_lm` returns a random `lm` model output: 176 | 177 | - `nobs`: Number of observations 178 | - `nx`: Number of variables (should be lower than `nobs`) 179 | 180 | ## Example 181 | 182 | Here is an example of using `{shinipsum}` to generate a random app: 183 | 184 | ``` r 185 | library(shiny) 186 | library(shinipsum) 187 | library(DT) 188 | ui <- fluidPage( 189 | h2("A Random DT"), 190 | DTOutput("data_table"), 191 | h2("A Random Image"), 192 | plotOutput("image", height = "300px"), 193 | h2("A Random Plot"), 194 | plotOutput("plot"), 195 | h2("A Random Print"), 196 | verbatimTextOutput("print"), 197 | h2("A Random Table"), 198 | tableOutput("table"), 199 | h2("A Random Text"), 200 | tableOutput("text") 201 | ) 202 | 203 | server <- function(input, output, session) { 204 | output$data_table <- DT::renderDT({ 205 | random_DT(10, 5) 206 | }) 207 | output$image <- renderImage({ 208 | random_image() 209 | }) 210 | output$plot <- renderPlot({ 211 | random_ggplot() 212 | }) 213 | output$print <- renderPrint({ 214 | random_print("model") 215 | }) 216 | output$table <- renderTable({ 217 | random_table(10, 5) 218 | }) 219 | output$text <- renderText({ 220 | random_text(nwords = 50) 221 | }) 222 | } 223 | shinyApp(ui, server) 224 | ``` 225 | 226 | 227 | 228 | Please note that the ‘shinipsum’ project is released with a [Contributor 229 | Code of Conduct](CODE_OF_CONDUCT.md). By contributing to this project, 230 | you agree to abide by its terms. 231 | -------------------------------------------------------------------------------- /_pkgdown.yml: -------------------------------------------------------------------------------- 1 | template: 2 | package: thinkrtemplate 3 | 4 | url: https://thinkr-open.github.io/shinipsum/ 5 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | 3 | coverage: 4 | status: 5 | project: 6 | default: 7 | target: auto 8 | threshold: 1% 9 | patch: 10 | default: 11 | target: auto 12 | threshold: 1% 13 | -------------------------------------------------------------------------------- /data-raw/devstuffs.R: -------------------------------------------------------------------------------- 1 | colin::fill_desc( 2 | "shinipsum", 3 | "Lorem-Ipsum-like Helpers for fast Shiny prototyping", 4 | "Prototype your shiny apps quickly with these Lorem-Ipsum-like Helpers.", 5 | "shinipsum" 6 | ) 7 | d <- desc::description$new() 8 | d$set("URL", "https://github.com/Thinkr-open/shinipsum") 9 | d$set("BugReports", "https://github.com/Thinkr-open/shinipsum/issues") 10 | d$write() 11 | 12 | colin::new_r_file("DataTable") 13 | colin::new_r_file("Image") 14 | colin::new_r_file("Plot") 15 | colin::new_r_file("Image") 16 | colin::new_r_file("Print") 17 | colin::new_r_file("Table") 18 | colin::new_r_file("Text") 19 | colin::new_r_file("utils") 20 | 21 | usethis::use_package("ggplot2") 22 | usethis::use_package("attempt") 23 | usethis::use_package("DT") 24 | usethis::use_package("plotly") 25 | usethis::use_package("dygraphs") 26 | usethis::use_tidy_versions() 27 | usethis::use_roxygen_md() 28 | usethis::use_pipe() 29 | 30 | usethis::use_testthat() 31 | usethis::use_test("ggplot") 32 | usethis::use_test("text") 33 | usethis::use_test("random") 34 | usethis::use_test("DT") 35 | usethis::use_test("print") 36 | usethis::use_test("dygraph") 37 | 38 | usethis::use_code_of_conduct() 39 | -------------------------------------------------------------------------------- /data-raw/lorem: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque tellus urna, placerat in tortor ac, imperdiet sollicitudin mi. Integer vel dolor mollis, feugiat sem eu, porttitor elit. Sed aliquam urna sed placerat euismod. In risus sem, ornare nec malesuada eu, ornare quis dui. Nunc finibus fermentum sollicitudin. Fusce vel imperdiet mi, ac faucibus leo. Cras massa massa, ultricies et justo vitae, molestie auctor turpis. Vestibulum euismod porta risus euismod dapibus. Nullam facilisis ipsum sed est tempor, et aliquam sapien auctor. Aliquam velit ligula, convallis a dui id, varius bibendum quam. Cras malesuada nec justo sed aliquet. Fusce urna magna, malesuada tempus pharetra in, fringilla iaculis mi. Morbi rutrum iaculis convallis. Cras et elit velit. 2 | 3 | Suspendisse eget elit blandit, egestas odio at, ullamcorper lectus. Nulla metus diam, elementum ac arcu vitae, pharetra dignissim neque. Etiam at elit dignissim, suscipit nulla ac, gravida eros. Donec feugiat mi sed purus egestas convallis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In quis scelerisque elit. Mauris viverra sem ac turpis eleifend sodales. Nullam at turpis a ex euismod consectetur ac a lectus. Curabitur imperdiet faucibus accumsan. Vestibulum venenatis ac nisi sed aliquam. Nulla lacinia imperdiet urna, quis tincidunt tellus feugiat ut. Phasellus congue ante lacus, vel consectetur velit convallis mollis. Morbi volutpat fermentum sem eu sodales. Sed venenatis blandit massa, sed rhoncus dui. Etiam augue nisl, luctus sit amet interdum at, ullamcorper nec lectus. Donec tincidunt mattis nunc et tincidunt. 4 | 5 | Quisque eu sem lacus. Vivamus quis venenatis mi. Mauris auctor rhoncus erat non luctus. Cras bibendum neque lobortis sem congue commodo. Vestibulum aliquam orci vitae lobortis auctor. Sed eget eros malesuada mauris eleifend fermentum quis feugiat est. Nulla sed consequat diam. Duis commodo magna ac nulla feugiat ullamcorper. Aliquam ornare consequat dapibus. Nullam volutpat purus a odio auctor, sed malesuada sapien luctus. Curabitur facilisis ultricies dignissim. 6 | 7 | Fusce blandit ante a aliquam consequat. Nam mollis ornare varius. Mauris commodo quam quis iaculis placerat. Vestibulum non facilisis velit. Morbi eu bibendum libero. Etiam in risus at odio scelerisque pellentesque et sit amet magna. Nunc sapien magna, pretium tempor suscipit id, eleifend sit amet diam. Duis et congue ante. In sed leo elit. Sed pulvinar nec nibh eget tempus. Mauris semper aliquet mauris in fermentum. 8 | 9 | Sed at ullamcorper elit. Etiam in tincidunt urna, et condimentum justo. Praesent vulputate vehicula nibh sed mattis. Ut commodo nunc iaculis velit ullamcorper, in sollicitudin leo ultricies. Praesent eu maximus arcu. Phasellus eu neque at mi porttitor volutpat. Fusce vehicula tortor eu ligula rhoncus viverra. Nam in sapien sed justo eleifend venenatis. Fusce cursus diam id enim egestas, ut convallis risus facilisis. Nulla metus ligula, facilisis id egestas ut, porttitor quis mauris. Donec eget velit at elit maximus tempus. In suscipit iaculis diam sed posuere. Cras congue, velit sed aliquam porttitor, nunc purus auctor libero, nec facilisis neque mauris nec lectus. Nunc vitae urna hendrerit, facilisis leo et, finibus urna. Donec sollicitudin mi mollis ex venenatis, faucibus tempor nunc gravida. Sed iaculis, est vel molestie placerat, velit urna condimentum mauris, ac fermentum est urna ac erat. 10 | 11 | Ut eget dictum tortor, et malesuada metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris in lorem a tellus pharetra viverra. Duis viverra pulvinar erat vitae feugiat. Etiam nec porta diam, ac porta dui. Aliquam sollicitudin, nulla nec rutrum ullamcorper, tortor odio pretium massa, ac bibendum lorem magna nec velit. Nunc eget nisi at dolor volutpat tincidunt non quis nibh. Praesent eleifend faucibus tortor ultrices placerat. Aliquam pulvinar tortor ut diam efficitur tempor. 12 | 13 | Praesent interdum luctus consectetur. Duis mattis est sed magna tempus, in egestas risus aliquet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean consectetur risus at orci blandit ultricies. Duis sodales consequat mi, a rutrum orci varius vitae. Mauris in porttitor erat, sed ultricies est. Pellentesque laoreet eros non leo ultrices auctor eu ut nisl. Vestibulum nec risus vitae mi rutrum vestibulum. Etiam scelerisque, nulla non placerat sollicitudin, nisl quam porta sapien, at vehicula leo libero ac ligula. 14 | 15 | Quisque ut tincidunt sem. Curabitur mattis, augue pulvinar fermentum condimentum, metus lectus laoreet nisl, nec ultrices neque elit at ligula. Etiam vitae pulvinar eros. Pellentesque sit amet odio metus. Praesent iaculis justo nec nunc semper, sit amet vehicula tellus faucibus. Sed pellentesque velit et arcu sollicitudin, quis iaculis tortor fermentum. Aenean tempor lacus urna, et scelerisque urna blandit in. Donec dapibus elit nisi, sit amet venenatis tellus ultrices non. Fusce et vulputate quam, ac aliquam nulla. Sed dolor odio, consectetur in feugiat in, sollicitudin sit amet enim. Ut dictum fringilla arcu, porttitor sagittis lacus volutpat eu. Nulla pellentesque tellus ac semper pulvinar. 16 | 17 | Quisque mollis justo sem, eu fringilla dolor imperdiet sed. Fusce dignissim tempor neque sed vestibulum. Quisque congue dolor nunc, nec elementum sem malesuada nec. Vivamus ultricies finibus odio, et vestibulum dui euismod vel. Curabitur porttitor eros diam, sed rutrum nulla ornare sed. Nullam finibus eu ex ut vehicula. Fusce in malesuada ligula. Praesent in elit ante. Nulla ornare arcu in mollis dapibus. Morbi blandit turpis quis neque ullamcorper tempor. In tincidunt porta arcu, ac consectetur leo convallis sit amet. Pellentesque fermentum nisi at sodales euismod. Vivamus ante felis, dignissim faucibus tempus ut, fermentum in purus. Pellentesque aliquet est et sem finibus, et dictum turpis congue. 18 | 19 | Etiam nisl orci, porttitor ut lorem ac, bibendum luctus quam. Nam vitae sapien erat. Pellentesque hendrerit, lacus a porta commodo, ligula purus ornare leo, sed porta dolor sapien in diam. Suspendisse gravida dignissim odio a gravida. Maecenas lorem felis, rhoncus ut ante et, finibus pretium dui. Nulla quis enim scelerisque, tempor nibh vel, condimentum nibh. Curabitur sit amet nisi vel dolor sodales iaculis. Praesent eget viverra est, et mattis arcu. Fusce convallis, magna nec consequat luctus, lectus lectus fermentum justo, eu dignissim sapien nunc non massa. Nunc in urna consectetur, feugiat lacus sit amet, hendrerit nibh. Donec eget tempor nibh, id lacinia orci. 20 | 21 | Phasellus sed metus vitae lacus pellentesque vestibulum. Duis finibus, libero in imperdiet iaculis, ipsum ex pharetra diam, non blandit ante urna at purus. Donec mi ex, eleifend in dictum non, egestas a odio. Aliquam erat volutpat. In in quam in elit tempus semper. Proin imperdiet rhoncus tortor, sit amet faucibus ipsum facilisis nec. Nulla hendrerit in dolor vitae sollicitudin. Proin finibus leo ac posuere fringilla. Nunc gravida condimentum neque, at vestibulum nulla venenatis quis. Morbi condimentum vitae nisl in lacinia. Pellentesque vestibulum, elit vitae viverra rutrum, turpis mauris sollicitudin nibh, ut sollicitudin eros tortor in nulla. Maecenas condimentum venenatis quam ut volutpat. Duis venenatis arcu a augue volutpat dictum. Quisque vestibulum semper odio, sit amet varius ligula ullamcorper elementum. Mauris nibh sapien, consectetur quis elementum ac, euismod vitae eros. 22 | 23 | Maecenas ut sapien quis mauris tincidunt scelerisque. Donec at orci orci. Aliquam hendrerit accumsan nisl non aliquet. Aliquam aliquam mollis ex, quis finibus nibh maximus lacinia. Curabitur a accumsan ligula. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed id turpis ut felis eleifend iaculis nec quis neque. Aenean sapien velit, vulputate laoreet dignissim et, ultricies in nisl. Nulla facilisis ultricies ante, efficitur finibus sem. Mauris sed dolor at velit varius malesuada vitae at lorem. 24 | 25 | Nam mollis sed risus tincidunt suscipit. Cras fringilla auctor auctor. Aenean nec venenatis lorem. Vivamus sollicitudin odio sapien. Nam id placerat lorem, ac facilisis diam. Nam pharetra libero magna, id molestie eros bibendum pellentesque. Maecenas vitae euismod mauris, eu semper sem. Nam vel ex malesuada, pulvinar metus sed, hendrerit ante. Donec id sodales quam. Maecenas cursus blandit sem vel faucibus. Praesent ornare arcu eros, et consectetur tortor facilisis sed. Sed non velit sagittis, sagittis nibh vitae, faucibus neque. Nunc viverra, sem scelerisque tristique efficitur, ante lacus eleifend quam, non auctor nisl libero in dolor. Vestibulum tincidunt tristique nunc vitae mollis. Pellentesque finibus ex ac urna ultricies, sollicitudin condimentum nisi fermentum. 26 | 27 | Integer tincidunt diam eget ipsum dapibus, nec mollis purus malesuada. Proin at lorem a dolor malesuada pulvinar nec eget nisi. Pellentesque tortor tortor, porta at tortor eget, fermentum ultrices leo. Nullam semper dapibus ornare. Phasellus tortor ligula, cursus sed molestie sed, lobortis vitae justo. In quis felis sit amet ipsum egestas viverra id eu neque. Vivamus iaculis, massa in accumsan hendrerit, metus odio ultrices libero, vel volutpat quam ante vitae mauris. Praesent lobortis tincidunt nisi, non iaculis nulla ultrices eget. Integer nec arcu eu dolor laoreet dapibus. Curabitur pretium ultricies purus nec imperdiet. Aliquam in congue justo. Nulla nisi libero, vehicula vitae consequat sed, sagittis a leo. 28 | 29 | Vivamus tempus ullamcorper nisi, ac feugiat lectus tristique sed. Etiam sapien velit, ullamcorper sit amet consectetur vitae, vehicula at turpis. Curabitur vestibulum id sapien et placerat. Pellentesque consequat, nisi ut semper cursus, nunc mauris porttitor quam, ac dapibus eros turpis eget ex. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi elementum libero enim, at bibendum nunc pellentesque nec. Nulla ex tortor, consequat at porttitor in, sollicitudin a leo. Nulla orci urna, dictum a leo venenatis, lacinia dapibus metus. Mauris mauris felis, dignissim at ante ac, egestas malesuada mi. Vivamus vitae blandit arcu. Nunc gravida erat sed turpis interdum, id sodales mauris gravida. Nullam non gravida odio. Nam mauris est, porta ac tempor eget, egestas eu diam. Sed odio urna, lacinia eu erat non, scelerisque rutrum nisi. Ut placerat tellus sit amet nibh molestie pellentesque. Praesent quam enim, fringilla non odio et, pharetra dictum lectus. 30 | 31 | Duis ultrices vulputate blandit. Suspendisse luctus varius nisl et consectetur. Nullam bibendum, magna et ornare porta, lacus lorem ullamcorper mauris, sed facilisis ante justo sed orci. Vivamus nec porta ipsum, a euismod purus. Fusce vel eleifend eros. Suspendisse gravida faucibus velit, in ultrices nulla feugiat et. Pellentesque in turpis vehicula, fermentum leo vitae, blandit odio. Duis libero eros, molestie eget rutrum et, condimentum ac leo. 32 | 33 | Nunc massa diam, blandit ac imperdiet ut, convallis eu orci. Mauris libero turpis, rutrum nec ante a, viverra mollis magna. Mauris eleifend sit amet nisl aliquet luctus. Donec non mi non odio porttitor congue. Nulla sollicitudin sem dolor. Maecenas consequat ligula et sagittis ultrices. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 34 | 35 | Curabitur ullamcorper sem quis nisi pulvinar, mollis vulputate sem finibus. Pellentesque turpis nulla, maximus at dolor vitae, placerat dapibus nulla. Etiam consequat enim a risus congue tempor. Cras vulputate, velit quis sodales porttitor, velit sapien commodo ex, sollicitudin fringilla augue leo ac lectus. Proin pharetra auctor risus viverra volutpat. Maecenas sodales laoreet massa, in malesuada ex ultricies eu. Pellentesque condimentum leo ac dolor efficitur volutpat. Mauris sollicitudin, dui et elementum rutrum, elit ante maximus ante, nec dictum magna quam quis dolor. Donec eget neque eu justo finibus tempus. 36 | 37 | Donec vel tortor sollicitudin, gravida mauris quis, semper nisl. Nam velit velit, imperdiet vitae sollicitudin nec, iaculis quis risus. Nullam consectetur urna ac felis malesuada, eu varius magna elementum. Praesent maximus sapien vitae lorem egestas, et facilisis nunc condimentum. Quisque dolor nisl, consequat at mattis ac, bibendum eget velit. Phasellus id vehicula ipsum. Integer lorem sapien, scelerisque ut ipsum quis, rhoncus lacinia velit. 38 | 39 | In facilisis magna tellus, in posuere erat sollicitudin quis. Suspendisse faucibus ultrices fermentum. Quisque varius at nisl eget mollis. Morbi vulputate sodales tempus. Quisque a porttitor neque. Aenean ac justo tincidunt, tincidunt est ac, tristique ante. Pellentesque porttitor, sem et pharetra sodales, sem erat maximus mauris, vel malesuada eros ante ac erat. 40 | 41 | Cras quis pellentesque turpis. Nunc posuere vehicula ultrices. Morbi sit amet tristique ante, eu euismod eros. Mauris efficitur rutrum sapien in ultricies. Quisque sit amet molestie ante. Aenean tincidunt imperdiet mauris, eget elementum dui mattis nec. Fusce nec risus efficitur est maximus iaculis eget et tellus. Sed vulputate sem ut ipsum rhoncus blandit. In vulputate, dui ac accumsan scelerisque, augue orci porttitor nibh, eu condimentum velit velit in quam. 42 | 43 | Mauris eu faucibus felis, et mollis justo. Mauris tempor risus felis, dictum laoreet urna condimentum in. Cras purus nunc, bibendum id cursus et, suscipit quis lectus. Nam vel imperdiet metus. Morbi dolor erat, faucibus vel urna eget, aliquet ornare felis. Pellentesque luctus mi eu dolor aliquam, in elementum urna volutpat. Vestibulum turpis magna, cursus eu tortor et, venenatis elementum mi. Praesent quis nunc nec diam lobortis mollis. Vivamus vel vehicula leo. Etiam lacinia pulvinar lacinia. Proin blandit lectus ut sapien pharetra rhoncus in quis lorem. Integer a commodo lectus, ac vehicula ante. Praesent mattis dui viverra felis porttitor ultricies. Morbi elit risus, feugiat non finibus quis, pulvinar quis nisl. 44 | 45 | Mauris ornare interdum odio, id sagittis urna congue sed. Duis sed mattis enim, vitae consequat dolor. Curabitur ullamcorper ornare enim mollis euismod. Sed orci felis, pulvinar vitae posuere convallis, dignissim quis justo. Ut vel sapien ante. Maecenas mauris massa, ullamcorper vitae feugiat vitae, aliquam quis est. Pellentesque ante leo, tristique eget rutrum et, mattis eu ante. Ut vestibulum, turpis vel sollicitudin semper, nibh est sollicitudin eros, quis dictum nisi eros ut urna. Ut sit amet nisi vitae dolor sollicitudin euismod at quis dui. Duis molestie convallis justo vel elementum. 46 | 47 | Phasellus id elit eu mauris vulputate ullamcorper at a dolor. Fusce dapibus ligula nec lectus tincidunt, in eleifend nisi ultrices. Sed a euismod leo. Maecenas vestibulum eros velit. Integer non nisi erat. In arcu lacus, finibus vel lobortis nec, porttitor fermentum ligula. Curabitur nisi nisi, suscipit eget sapien id, sodales condimentum ligula. Curabitur felis velit, posuere id cursus non, dignissim in nisl. Fusce in tortor leo. 48 | 49 | Aliquam dictum lacus sit amet lorem tincidunt accumsan. Vivamus convallis tincidunt arcu ut efficitur. Etiam congue dolor a nisi feugiat elementum. Donec ac augue facilisis, vehicula purus at, ultricies ex. Nulla finibus ipsum vitae ante rhoncus finibus. Mauris dolor eros, venenatis hendrerit sapien eu, suscipit ultrices lacus. Ut eu sagittis sem. Cras urna nisi, euismod vitae tincidunt vitae, vulputate sit amet purus. Cras mauris sapien, feugiat sed orci at, rhoncus mollis orci. Morbi malesuada efficitur erat id rhoncus. Donec porttitor pretium justo eu accumsan. 50 | 51 | Nunc volutpat mauris ac urna blandit ullamcorper. In vitae nisl blandit, eleifend risus in, egestas massa. Proin pulvinar tempor elementum. Vestibulum non faucibus nisl. In hac habitasse platea dictumst. Pellentesque viverra tortor sit amet hendrerit rutrum. Sed consectetur turpis id pulvinar pulvinar. Nunc rutrum dolor quis elit finibus ullamcorper. Maecenas mi tellus, dictum sed erat at, suscipit efficitur tellus. In sed mauris vitae mauris egestas auctor et eget ligula. Pellentesque iaculis eleifend tortor quis dictum. Nulla mattis lacus sed pulvinar condimentum. Donec sit amet mollis erat. Integer mollis mollis dui, ut egestas nulla consequat at. 52 | 53 | Nunc ac sem lacinia, dapibus ligula sed, pellentesque mauris. Nam tincidunt sapien a dapibus sodales. Nam iaculis erat at quam semper, quis vestibulum sem ultrices. Aenean vitae ipsum mollis, dictum sem ut, vehicula turpis. Cras pharetra, libero aliquet luctus mollis, risus nunc porta lectus, malesuada ullamcorper nisl nibh ut nunc. Nunc at libero felis. Aliquam eu elit fringilla, viverra nisl sodales, luctus sem. Phasellus nec nisl volutpat, dignissim orci id, iaculis erat. Curabitur mattis justo et mi semper dapibus. Curabitur non est eu orci imperdiet venenatis. Cras vel elit massa. Curabitur sagittis feugiat fermentum. Etiam pulvinar egestas libero quis maximus. 54 | 55 | Fusce a felis diam. Duis eget lacus eget eros bibendum vestibulum et at justo. Maecenas a arcu a risus ultrices lobortis. Nam ultricies orci eget sapien imperdiet, sed semper odio laoreet. Nulla cursus non arcu eu viverra. Curabitur id accumsan dui. Duis et felis velit. Aliquam accumsan maximus est, et commodo ligula aliquet et. Integer dapibus justo vel odio viverra bibendum. 56 | 57 | Maecenas et lacus id leo facilisis euismod. Etiam accumsan velit non bibendum elementum. Integer id magna molestie, mattis justo in, accumsan odio. Mauris porta ultricies odio, vel gravida ipsum dapibus eget. Aenean pellentesque justo eu venenatis dignissim. Nulla eros nibh, dictum in velit nec, malesuada efficitur urna. Aenean imperdiet tincidunt tempor. Nulla vel pellentesque enim. 58 | 59 | Mauris sem leo, elementum feugiat nisl vel, tincidunt consectetur elit. Curabitur vel ante non purus finibus viverra eget eget tellus. Suspendisse commodo semper massa, ut fringilla metus tristique et. Maecenas lacus elit, posuere quis urna id, eleifend semper ex. Donec lacinia justo at velit finibus, sed consequat velit accumsan. Maecenas laoreet sollicitudin justo, vel consequat nulla dapibus a. Suspendisse iaculis cursus justo, sit amet tincidunt erat sollicitudin mollis. Vivamus et quam et leo aliquam scelerisque. Maecenas nisi justo, sagittis ut tortor a, imperdiet ultricies libero. In nisl est, volutpat vitae ligula eget, commodo suscipit ligula. Sed ut eros tortor. Nulla sodales porta ligula, non sodales dui elementum nec. 60 | 61 | Sed nec porttitor orci. Nam posuere laoreet leo sit amet fermentum. Praesent varius leo ac laoreet cursus. Morbi congue condimentum felis, a condimentum mauris luctus vitae. Nulla id turpis non lectus accumsan euismod in in lectus. Ut auctor, tortor et vehicula tincidunt, nisi quam consequat mi, at ultricies mauris ex in ex. Suspendisse sed mi ligula. Donec tristique aliquam eleifend. Integer interdum nibh ante, aliquam semper nisi sollicitudin aliquam. 62 | 63 | Pellentesque blandit ex nec risus euismod, eget egestas purus auctor. Cras ullamcorper vel quam eget fringilla. Sed ut mattis metus. Donec ac ultrices est. Aliquam orci mi, tempor nec tortor sed, mollis suscipit augue. Vivamus lacinia augue et semper sollicitudin. Aenean elementum, mauris ut suscipit euismod, risus risus pharetra risus, ac vestibulum turpis mauris vulputate justo. Aenean volutpat maximus leo, a sagittis ex volutpat vel. Nulla tincidunt ante at dui scelerisque rhoncus. Cras posuere odio ac nibh auctor, in commodo nisi posuere. In auctor pharetra justo, at rhoncus massa interdum id. Nulla sagittis ullamcorper nunc, ut dapibus nunc dictum vel. Vivamus quis mi pellentesque, feugiat massa nec, gravida mi. 64 | 65 | Phasellus in congue leo. Morbi rhoncus nunc felis, in consectetur odio tristique id. Ut consequat, neque id condimentum placerat, dolor odio luctus augue, sit amet vehicula lorem turpis ac lacus. Duis fermentum, libero eu sagittis laoreet, lectus metus eleifend dui, non accumsan ipsum sapien sit amet lacus. Aenean auctor lobortis eros a bibendum. Sed convallis malesuada purus vel facilisis. Aliquam nec urna nec augue molestie vestibulum et ac metus. Morbi at blandit sapien. Praesent vitae pulvinar dui, in iaculis nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vel odio tincidunt, convallis nisl eget, mattis elit. Vivamus egestas dui nisl, sed rutrum lorem rhoncus id. Maecenas sit amet malesuada turpis, sed congue massa. Aliquam sollicitudin nec dolor ut placerat. Proin semper cursus tellus, vel blandit ante consequat non. 66 | 67 | Cras consequat consectetur rhoncus. Nullam sit amet augue neque. Quisque mauris arcu, malesuada id diam ac, lobortis pretium dolor. Aenean quis lectus in ipsum malesuada ultricies. Fusce in tortor lacus. Duis suscipit justo vitae nulla eleifend, a ullamcorper ante ullamcorper. Donec pulvinar dignissim libero ac tempor. Nam nec blandit tortor. Donec diam dui, viverra sit amet maximus sed, tempor quis sapien. Quisque suscipit libero blandit, pharetra ligula ac, ultricies erat. Quisque semper est sapien, sed bibendum mauris luctus id. Maecenas vel sollicitudin justo. 68 | 69 | Praesent hendrerit maximus nisl vel sodales. Nam tortor diam, tincidunt sed mauris eget, hendrerit posuere mi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam vulputate sodales ex eu commodo. Cras malesuada, neque vel cursus scelerisque, arcu mi imperdiet turpis, eu pulvinar nunc sem et magna. Vestibulum porta est eget ullamcorper aliquet. Pellentesque tincidunt elit dolor, ac luctus augue lobortis in. Nulla tincidunt lacus ut lectus fermentum, eget convallis augue porta. 70 | 71 | Proin tortor neque, convallis pellentesque sollicitudin in, laoreet quis quam. Nullam quis lacinia ante. Nulla nunc ligula, eleifend sed mollis et, commodo ut arcu. Aliquam tempus leo ut purus blandit, eget efficitur ante condimentum. Donec nec justo volutpat, sagittis nunc sit amet, ornare risus. Etiam ut tortor sed eros viverra vestibulum ac id ex. Cras sem ipsum, mattis in nulla ac, imperdiet accumsan sapien. Curabitur sit amet sagittis urna. Sed nec feugiat tellus. Mauris tempus urna nec purus ultrices finibus. Vivamus a dui sollicitudin, faucibus justo eget, fringilla lacus. Nunc nibh dui, convallis dignissim lacinia eu, pretium eget magna. Nulla dignissim scelerisque enim vitae rhoncus. 72 | 73 | Cras id nulla libero. Phasellus eget mollis erat. Sed sagittis enim sit amet consectetur euismod. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer feugiat fringilla nibh, nec auctor sapien maximus at. Nullam non libero quis mauris vehicula tristique egestas vitae turpis. Proin malesuada sit amet ligula vel ultricies. Aliquam facilisis neque tortor, vitae laoreet elit faucibus sed. Proin sollicitudin ut elit id maximus. Maecenas cursus imperdiet lectus ac interdum. Sed aliquet enim nec elit fringilla, ut pulvinar nisi dignissim. Mauris et nisi malesuada, lobortis mauris et, ultricies justo. 74 | 75 | Maecenas nibh sem, iaculis id dignissim vitae, euismod non risus. Vestibulum imperdiet augue ex, ac consectetur diam tempus sed. Suspendisse lobortis magna ante, et lobortis diam efficitur eget. Mauris consectetur ex massa, id dignissim nulla dignissim ac. Ut id vehicula odio. Integer quam nulla, posuere sit amet viverra vestibulum, volutpat ut ipsum. Morbi rutrum lacus tincidunt, convallis nibh in, dapibus ligula. Curabitur malesuada ut libero tempor rutrum. Duis arcu lectus, consequat at sagittis eu, interdum id sem. Quisque non dapibus sem, ac eleifend arcu. Ut in nisl vitae orci aliquet hendrerit quis at dolor. Proin auctor, augue lacinia volutpat vehicula, ipsum est pellentesque ipsum, sit amet rutrum risus elit ut leo. Donec vulputate pellentesque dui non venenatis. Donec eleifend feugiat diam eu pellentesque. Etiam et tincidunt sem, ut lobortis magna. 76 | 77 | Praesent at lectus suscipit, scelerisque metus vel, consectetur velit. Sed ac congue dolor. Vestibulum a augue dignissim, hendrerit sapien eu, pharetra sapien. Aliquam varius lacus interdum odio scelerisque porttitor. Aliquam erat volutpat. Quisque in elit eu diam lacinia pharetra. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse quis diam dapibus, tristique erat et, faucibus tortor. Maecenas id viverra metus. Fusce velit elit, laoreet eget urna eget, posuere ultricies sapien. 78 | 79 | Phasellus pellentesque urna sed malesuada imperdiet. Suspendisse potenti. Quisque eget rhoncus arcu. Suspendisse sit amet aliquet nunc, elementum condimentum arcu. Nunc lobortis, diam ut porta placerat, odio libero ultricies felis, ut ullamcorper ante neque et diam. Maecenas interdum blandit rhoncus. Nunc congue dolor lacus, ut facilisis arcu fermentum in. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ipsum odio, fermentum eget vulputate a, lacinia in ex. Sed varius magna sed sem ultrices, vel scelerisque lacus gravida. Cras a ullamcorper dolor, a pellentesque felis. Phasellus vitae ultrices magna, a mattis tortor. Aenean tortor sapien, suscipit nec fringilla id, elementum et urna. Fusce sit amet eros non odio commodo elementum sed vel nulla. 80 | 81 | In hac habitasse platea dictumst. Sed varius tortor eros, vel finibus urna bibendum eu. Proin ornare dictum aliquet. Aliquam erat volutpat. Aliquam maximus facilisis ante, sed suscipit felis interdum ut. Fusce tristique ac elit eu vestibulum. Proin finibus tincidunt diam finibus suscipit. Sed ut rhoncus ipsum. Ut tristique leo tortor, id ultrices dolor suscipit at. Donec sit amet volutpat eros, at consequat neque. Donec eu lacus non sapien varius convallis non blandit eros. Aenean quis fringilla risus. Vivamus vehicula pulvinar quam, sed rhoncus diam lobortis ac. Ut scelerisque dapibus bibendum. 82 | 83 | Praesent ultrices nisl libero. Curabitur urna nisi, consequat quis tellus nec, vestibulum ornare arcu. Nam sit amet porta tortor. Cras vel mauris non eros consequat suscipit nec eu dui. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer ligula metus, sagittis vitae augue sit amet, blandit elementum augue. Nulla fermentum porttitor enim, ut dignissim turpis fringilla sed. Nam nec metus viverra, vestibulum urna sit amet, varius elit. Vivamus arcu ligula, aliquam quis metus non, elementum consequat nulla. Aliquam a congue metus, sit amet aliquam urna. Fusce in arcu imperdiet, rhoncus nisl in, tempus erat. Proin non fringilla erat. Nunc a mi viverra, fringilla augue quis, efficitur sapien. Integer sit amet dapibus purus, in blandit enim. Cras eleifend lacus eros, et faucibus massa efficitur quis. 84 | 85 | Curabitur turpis nisi, vestibulum ac aliquet vitae, volutpat ut ipsum. Maecenas maximus sapien in feugiat pharetra. Fusce sit amet dui et elit finibus pretium. Proin ullamcorper auctor sapien id lobortis. Vestibulum blandit quam sit amet nisi fringilla porta. Suspendisse ac feugiat massa, sit amet aliquam ex. Maecenas sollicitudin sit amet libero id sollicitudin. Pellentesque dictum faucibus cursus. Suspendisse potenti. Etiam ut lacus commodo, facilisis lorem et, sodales est. Integer vitae ipsum leo. Ut sit amet lectus enim. Vivamus sagittis tristique tortor vel aliquam. Duis interdum placerat nibh. Nunc tristique pharetra mi, sed mattis enim hendrerit in. Nunc molestie convallis ligula, eu semper turpis euismod eget. 86 | 87 | Cras sodales luctus mauris. In dapibus accumsan suscipit. In lectus est, gravida vitae commodo at, euismod sodales leo. Cras vitae sem dolor. Morbi elit arcu, vestibulum eu velit quis, vulputate consequat elit. Sed nisl purus, scelerisque sed mauris sit amet, interdum efficitur sapien. Sed sed lectus metus. Sed mattis dictum neque, ac egestas enim ullamcorper id. 88 | 89 | Fusce vel justo aliquam erat imperdiet pellentesque egestas non nunc. Duis felis justo, ultrices ac nunc vel, convallis cursus eros. Aliquam est orci, aliquam non magna sit amet, consectetur volutpat elit. Curabitur tempus ex eu sapien volutpat mattis. Duis venenatis eros diam, vitae commodo odio placerat at. Donec pulvinar quam vel nunc venenatis, sit amet pharetra erat sollicitudin. Morbi vel purus varius, ornare tellus condimentum, feugiat risus. Sed efficitur consequat lacinia. In elementum risus vel libero placerat, vitae aliquam tellus condimentum. 90 | 91 | Proin vitae viverra nunc. Duis vehicula tortor eleifend felis dapibus, vitae tempus lorem condimentum. In nunc nibh, lacinia at sapien ac, aliquam iaculis orci. Vestibulum eu enim non ipsum luctus aliquet. Morbi dui nulla, scelerisque ut sem in, congue efficitur justo. Pellentesque vel tellus magna. Etiam laoreet velit nisi, sit amet faucibus elit auctor vitae. In dignissim purus quis eros ullamcorper dictum. Maecenas rhoncus lectus vel rhoncus imperdiet. Quisque dictum fermentum lorem. Aenean fringilla placerat augue vitae aliquam. Sed rutrum justo at ligula pharetra, id auctor nulla tristique. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur sed tempus magna, tempor blandit nisl. 92 | 93 | Pellentesque ipsum velit, sagittis vel porttitor sed, fermentum in diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed vel lorem luctus, rutrum magna vel, congue augue. Maecenas sit amet ultrices felis, at pretium enim. Vestibulum et vehicula eros, non consectetur ligula. Donec et vehicula dui. Sed semper justo non viverra vehicula. Donec id dui orci. Nullam a metus diam. Sed id consequat mi. Maecenas pharetra id metus sed tincidunt. Phasellus porta, erat id iaculis tincidunt, dolor libero posuere nisi, in scelerisque elit nisi eu sapien. 94 | 95 | Mauris eget justo enim. Proin facilisis at tortor quis ullamcorper. Nulla gravida vitae quam ac dapibus. Donec diam leo, convallis quis lectus sit amet, rhoncus lacinia velit. In suscipit fringilla tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ligula erat, efficitur a erat eget, porta feugiat velit. Praesent gravida purus a eleifend consectetur. Integer euismod ac nisl ac venenatis. Donec tristique at tellus quis condimentum. Donec arcu neque, hendrerit ut vestibulum eu, egestas et eros. Mauris interdum purus at diam maximus, quis mollis libero pretium. Vivamus sollicitudin mollis sem a tristique. Suspendisse tempor nisi orci, quis feugiat ipsum ultrices sit amet. 96 | 97 | Proin elementum sodales lectus in tempus. Duis fermentum egestas sem ut consectetur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam eu scelerisque lectus, sed tincidunt nunc. Aliquam vel lorem nec elit congue facilisis nec non odio. Aliquam id ligula ligula. Donec nec porttitor leo. Phasellus scelerisque feugiat mauris at venenatis. Cras interdum elementum fermentum. 98 | 99 | Fusce ac consequat eros, in mollis nunc. Proin vestibulum nibh ut odio venenatis, molestie pretium sapien posuere. Aliquam pulvinar cursus ex, a tempus mi elementum ac. Nunc porttitor sapien porttitor lectus sollicitudin suscipit. Mauris in quam eu ipsum commodo consectetur ut eu arcu. Sed ac metus pharetra, posuere tellus non, elementum nisl. Nam venenatis ut lacus ut pharetra. 100 | 101 | Sed pellentesque eget ante vitae ultrices. Nullam ipsum augue, tincidunt ut lorem in, porta vestibulum ligula. Duis sodales sem nec est sollicitudin aliquam. Proin nec vehicula leo. Cras ac cursus mauris. Quisque tincidunt erat quis libero convallis, sit amet fermentum libero semper. Nulla mattis, risus vel consectetur faucibus, leo augue dapibus libero, eget scelerisque nisl augue at nisl. Mauris iaculis porttitor massa, eget sagittis lacus fringilla nec. Praesent commodo sit amet purus sit amet fringilla. Nam mi justo, sollicitudin sed metus non, cursus sollicitudin nulla. Praesent tempor commodo aliquet. Aenean sem nibh, sagittis vitae sapien quis, porttitor interdum purus. Proin nisi ex, pulvinar a faucibus ac, aliquam sit amet erat. Vivamus et sapien ornare, iaculis ligula id, blandit diam. In et erat dapibus nisi hendrerit convallis. Fusce sollicitudin est non eros elementum, id interdum enim tincidunt. 102 | 103 | Pellentesque auctor, nisl a suscipit accumsan, dolor nulla luctus magna, id condimentum ligula diam eget enim. Nulla aliquam quis orci sed euismod. Nunc at enim id nulla efficitur dapibus. Maecenas nulla augue, finibus et rhoncus non, dapibus ut dolor. Aenean urna mi, ornare et cursus ut, ultricies a urna. Sed placerat sollicitudin elit quis gravida. Etiam sit amet lacus orci. Ut iaculis quis metus ac congue. Donec quis risus eu urna pretium accumsan in eget velit. Suspendisse porta elit ut molestie luctus. Fusce ultricies vestibulum erat vel cursus. Praesent tortor erat, tincidunt eu dui non, lacinia fringilla turpis. Nunc et nulla quis lacus tempus interdum. 104 | 105 | Aliquam erat volutpat. In volutpat nunc massa, ac dignissim neque suscipit quis. Donec nec augue vel eros sollicitudin pulvinar in eu lacus. Maecenas ut urna sit amet mi maximus fermentum. Maecenas pretium felis nec mauris condimentum porta. Aliquam tempus laoreet interdum. Curabitur id erat non erat vehicula laoreet id condimentum ante. Etiam aliquam tortor id fermentum fermentum. Sed urna quam, blandit in lacinia ac, gravida sed massa. Quisque sit amet viverra magna. Vivamus erat leo, ultrices et iaculis vitae, ultrices vel lacus. 106 | 107 | Pellentesque in ipsum eu leo consectetur ultricies. Vivamus tincidunt ornare tellus. Nulla neque erat, porta quis tempor a, sagittis ac orci. Aenean congue feugiat velit sed pharetra. Donec iaculis pulvinar nunc ac ultricies. Etiam vel turpis elementum, vehicula massa et, aliquam ligula. Quisque vitae ante justo. Mauris aliquet volutpat augue, id pulvinar velit. Vivamus ut ultricies lectus. Nam et dolor pharetra, pellentesque neque vel, ullamcorper est. Nullam semper tincidunt lectus. Nunc felis diam, volutpat et enim et, auctor tristique leo. Morbi consectetur sem at tortor condimentum, sed molestie lorem vestibulum. Sed ac iaculis ligula, sit amet ultrices erat. 108 | 109 | Duis et enim nunc. In nec nisl quam. Duis ac euismod lectus, at vulputate purus. Vivamus et libero placerat, fermentum erat ut, faucibus urna. Curabitur tincidunt libero in quam imperdiet, quis viverra mi condimentum. Sed pellentesque a massa et tincidunt. Etiam volutpat velit nec nunc pretium, at pharetra magna vestibulum. Vestibulum ac consectetur dui. Vivamus ullamcorper ex bibendum nibh finibus dictum. Donec at condimentum elit. Suspendisse a rhoncus magna. 110 | 111 | Mauris nisl odio, mollis eu ante pharetra, varius auctor enim. Donec mollis efficitur tellus vel eleifend. Etiam venenatis nisi non ultrices malesuada. Integer imperdiet rutrum justo a fringilla. Cras venenatis augue justo, at lobortis ipsum lacinia eget. Integer fringilla consequat nisi non aliquam. Aliquam ullamcorper pulvinar tortor iaculis rutrum. Pellentesque eleifend magna quis magna pellentesque laoreet. In venenatis felis turpis, vitae finibus ipsum blandit a. 112 | 113 | Aliquam eleifend lorem ligula, sit amet iaculis erat gravida ut. Mauris sodales aliquet felis et elementum. Nunc non tincidunt massa. Quisque dictum vitae mauris eu imperdiet. Donec lobortis augue nec elit tincidunt, non volutpat mauris fringilla. Vestibulum nec vestibulum mi, et pharetra dui. Suspendisse vehicula eleifend malesuada. Proin sit amet dictum ligula. Nullam laoreet volutpat lacus sed lobortis. Pellentesque a diam accumsan, sagittis ligula eget, convallis ante. Nullam placerat semper felis et mollis. Suspendisse aliquet tellus sed neque imperdiet, non tristique magna luctus. Etiam volutpat augue at enim mollis iaculis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 114 | 115 | Mauris venenatis metus elit, quis fermentum quam hendrerit a. Nulla porttitor urna in vehicula mattis. Donec eu maximus justo. In a mauris at nunc venenatis feugiat in vel leo. Cras pellentesque lorem vitae enim rhoncus gravida et id odio. Suspendisse leo orci, aliquet in euismod ut, eleifend ac urna. Donec aliquet fringilla vehicula. Nulla posuere eleifend mi at pharetra. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus mattis suscipit eleifend. Morbi eget nibh at ante faucibus fringilla ut vitae nisi. Morbi vel neque velit. Donec aliquet aliquam nisi a tincidunt. Pellentesque id vestibulum dui, eget malesuada erat. Maecenas fermentum, tortor nec facilisis lacinia, sem tortor blandit nibh, in vulputate est elit in ex. Nunc non ullamcorper risus. 116 | 117 | Nulla vitae erat odio. Proin laoreet sagittis nisi eu auctor. Donec eros tortor, porttitor vel porttitor quis, condimentum et nisl. Cras maximus est sit amet pretium eleifend. Etiam vitae sem pretium, fringilla dolor at, feugiat lacus. Morbi vitae leo et odio maximus congue ut in justo. Duis vestibulum eros nec mi congue auctor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sodales nulla a dui tincidunt varius. Aliquam dignissim sed velit non maximus. Ut aliquet volutpat bibendum. Curabitur rutrum sapien nunc, ut vulputate erat lacinia et. Curabitur tempus vestibulum libero, in viverra sem elementum quis. Etiam sodales interdum enim ut maximus. Vivamus non laoreet lacus. 118 | 119 | Morbi posuere lacus et imperdiet maximus. Praesent rutrum lobortis turpis, at luctus magna condimentum at. Sed sed rutrum quam, ultricies dignissim lectus. Donec venenatis leo at justo congue, et consequat enim eleifend. Nam sed finibus augue, id vulputate nibh. Nullam eleifend, velit vel faucibus vulputate, magna lacus ullamcorper neque, et auctor elit nunc eu magna. Ut tincidunt magna lectus, at convallis turpis gravida at. Curabitur pulvinar, ex eu posuere aliquam, nulla libero tincidunt sapien, quis semper sem dui quis sem. Sed sagittis nibh id tortor efficitur condimentum. Fusce congue sit amet nisi sed sodales. Pellentesque sit amet laoreet dui. Donec vitae mi sollicitudin, mattis ipsum at, varius risus. Sed elementum nulla quis lacus dictum, et ornare velit lacinia. Nam augue massa, euismod id mi hendrerit, pellentesque auctor dolor. Vestibulum id rhoncus eros, vestibulum elementum tortor. 120 | 121 | Cras at eros porta, mattis neque et, viverra ligula. Pellentesque risus tortor, laoreet sed purus nec, condimentum rutrum mauris. Pellentesque posuere neque urna, nec laoreet sapien placerat sed. Vivamus eget erat nec eros iaculis placerat. Nullam dolor purus, luctus et mollis nec, volutpat a diam. Quisque risus sem, faucibus ac nisl ut, congue elementum lacus. Nulla facilisi. Nullam sem augue, commodo id vulputate non, dapibus et urna. Donec sed risus elementum felis egestas convallis. Vestibulum eget porta dui, et elementum risus. 122 | 123 | Nulla viverra euismod magna in accumsan. Nullam cursus bibendum lectus a consequat. Etiam vitae vehicula tortor, vitae convallis nulla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin iaculis gravida sapien non porta. Suspendisse cursus turpis purus, ut placerat arcu cursus et. Vestibulum vitae arcu dolor. Phasellus elementum urna ut lorem pulvinar, sit amet condimentum odio aliquam. Donec placerat magna et mollis dignissim. Quisque sit amet quam in orci porttitor interdum. Duis a tempor enim. Curabitur lacinia metus auctor dui posuere accumsan. Duis sit amet ipsum ac nibh egestas faucibus id non odio. In hac habitasse platea dictumst. Cras pulvinar feugiat fermentum. 124 | 125 | Curabitur in lacinia est, congue tempor justo. Donec consectetur diam in leo euismod semper. Donec vitae ligula vel quam sagittis lobortis vitae in eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris ullamcorper, ipsum lobortis ultrices volutpat, leo justo eleifend enim, consectetur efficitur urna dui at massa. Sed eu turpis ut ex interdum pretium. Phasellus faucibus pharetra lorem, sed dignissim dui blandit commodo. Aenean tempor sem sit amet imperdiet molestie. Donec scelerisque dictum lorem, et dapibus sapien feugiat at. Aenean commodo mattis sem eu iaculis. Cras a ligula vitae mauris consectetur tempus. Ut eleifend, urna eu suscipit posuere, libero metus aliquet sapien, nec mattis odio nibh nec nunc. Quisque vel enim eu leo euismod maximus. Suspendisse felis velit, rutrum a euismod aliquet, commodo id mauris. 126 | 127 | Suspendisse non consectetur est. Suspendisse tristique faucibus ligula a pretium. Proin nec laoreet lectus. In hac habitasse platea dictumst. Fusce non velit dolor. Suspendisse mattis sem nec lectus suscipit, molestie placerat velit accumsan. Curabitur vel pellentesque tortor. Cras eget auctor nulla, malesuada faucibus erat. Suspendisse consectetur, nunc pellentesque eleifend vestibulum, ex ex dignissim magna, eu sagittis sem felis quis velit. Fusce vel lacinia elit. Fusce a nulla blandit, tristique massa sed, rhoncus libero. Nulla aliquet tellus id vehicula varius. Vivamus hendrerit nisi tincidunt tellus efficitur, nec vestibulum massa aliquet. 128 | 129 | Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas porttitor est tellus, in ultricies tellus pulvinar aliquet. Pellentesque id auctor erat. Duis id volutpat justo. Donec blandit, enim eu porta finibus, dolor mauris blandit lacus, sed porta purus dui vel nisl. Suspendisse pretium consectetur hendrerit. Vivamus sit amet tempor mi, quis porta augue. Nam suscipit mi neque, quis sodales lorem mollis nec. 130 | 131 | Sed maximus pharetra leo vitae scelerisque. Ut nec feugiat purus, in consequat felis. Pellentesque posuere tempor consectetur. Duis nibh purus, commodo at velit eget, faucibus pharetra diam. Mauris mattis tellus ac euismod porttitor. Pellentesque scelerisque sit amet elit at pellentesque. Vivamus et mattis augue, et volutpat neque. Praesent dictum nunc purus, vitae dignissim quam porta non. Maecenas eleifend tortor nunc, vel tincidunt magna mattis ac. Sed pellentesque cursus enim, nec tincidunt libero fringilla in. In hac habitasse platea dictumst. Vivamus eget sapien lorem. 132 | 133 | In consectetur eget orci eu consectetur. Integer malesuada tincidunt magna feugiat convallis. Sed lacinia feugiat efficitur. Praesent libero erat, sodales ac volutpat vel, ornare nec risus. Maecenas dapibus dolor eget iaculis consectetur. Fusce lobortis pulvinar ligula sit amet cursus. Nunc sem felis, vulputate quis facilisis quis, semper at nulla. Morbi non massa vel augue sagittis varius. In hac habitasse platea dictumst. Cras feugiat pulvinar dui eu pulvinar. Quisque elementum ante nec est porta, at dictum ipsum posuere. Interdum et malesuada fames ac ante ipsum primis in faucibus. 134 | 135 | In est dolor, tincidunt vitae enim ut, facilisis volutpat libero. Nulla lacinia diam id sapien tristique maximus. Curabitur at sapien odio. Quisque mattis elit non euismod hendrerit. Proin ultricies elit dapibus congue posuere. Mauris hendrerit euismod metus, at accumsan libero condimentum in. Aenean eu dui ligula. Phasellus consequat erat id ante commodo, id consequat lectus auctor. Nunc ultrices, odio eget ultrices molestie, ipsum urna accumsan augue, ut faucibus dui purus nec nisi. Nullam iaculis mollis suscipit. Ut dictum porttitor erat, blandit commodo erat vulputate interdum. Vestibulum sed mauris blandit, tincidunt augue quis, varius turpis. Nunc eleifend, turpis id lacinia aliquam, libero est suscipit nulla, vel aliquam diam diam id magna. Nullam ut metus elementum, rhoncus nibh a, vestibulum ligula. 136 | 137 | Donec vulputate tellus risus, vitae luctus lorem pharetra non. Donec ac tortor luctus, pharetra erat aliquet, luctus diam. Proin tincidunt vestibulum iaculis. Donec molestie diam nec pellentesque euismod. Nam et convallis ante. Maecenas erat felis, tristique in suscipit in, consequat ac ipsum. Nulla facilisi. Quisque ante sem, condimentum nec tincidunt id, gravida quis odio. Nam at purus sit amet sapien pharetra malesuada a nec turpis. Nulla et ipsum fermentum, molestie libero id, aliquam tortor. Morbi sem nisl, aliquet sed venenatis a, cursus venenatis diam. 138 | 139 | Vivamus vel cursus ante. Integer gravida elit sit amet dignissim mattis. Donec pretium ipsum leo, id facilisis mi placerat sed. Sed sagittis ultricies ligula non eleifend. Duis sit amet imperdiet justo. Mauris vitae finibus sem. Quisque turpis erat, tempor eu turpis quis, suscipit pulvinar felis. Morbi eleifend dolor ac elementum ultricies. Aliquam pretium at sapien nec consequat. Nullam sed elementum magna. Nulla vitae turpis nec nunc tempor maximus sed sit amet neque. Nullam congue tempor sem, sed blandit massa dignissim sed. Mauris fringilla sed diam ut varius. Duis facilisis tempor libero, vitae tincidunt velit commodo quis. Etiam dictum purus at molestie elementum. Donec accumsan risus metus, elementum ultricies nisl gravida at. 140 | 141 | Nulla imperdiet, massa sed vehicula luctus, urna neque fermentum nisl, vel tincidunt nisl eros id elit. Etiam vel magna ac mi scelerisque auctor. Aenean tincidunt, lectus sit amet vulputate dignissim, nisi libero consectetur dui, in egestas odio diam sed ante. Curabitur sem ex, gravida in eros et, cursus tristique arcu. Integer sed nisl vitae turpis volutpat gravida. Etiam non interdum nunc. Vestibulum ut faucibus felis. Aliquam vitae bibendum est. Phasellus et magna risus. Phasellus elit eros, faucibus in vehicula vitae, aliquet in lacus. 142 | 143 | Sed facilisis lectus egestas nisi rhoncus, sed iaculis odio placerat. Pellentesque vitae nulla quis quam pharetra sagittis. Pellentesque scelerisque consectetur vulputate. Suspendisse ac pretium diam, sed convallis nibh. In quam tellus, finibus nec ex hendrerit, porta vulputate justo. Integer commodo tempor fringilla. Donec id tellus porta nulla convallis blandit. Nunc id leo a nisi sodales pharetra. Praesent sit amet arcu est. 144 | 145 | Sed gravida risus eu nulla cursus tincidunt. Donec ipsum ex, condimentum sed leo id, vulputate feugiat nisl. Pellentesque luctus elit id vulputate tincidunt. Duis non congue justo, quis vestibulum velit. Mauris in imperdiet tellus, quis posuere quam. In eu massa quis nibh tempor laoreet id vel leo. Phasellus magna quam, lacinia sed mattis vel, dictum nec lorem. Morbi gravida, urna nec aliquam malesuada, nunc leo varius sapien, ac sollicitudin ante risus id libero. Cras tempor quis diam in mattis. Donec malesuada luctus dui non tempus. Proin ac urna risus. Maecenas commodo, ligula at finibus bibendum, arcu dui tincidunt quam, in aliquam ipsum elit ac massa. 146 | 147 | Aenean et ipsum nulla. Donec non lacinia leo. Ut id erat urna. Pellentesque erat felis, semper quis nisl vitae, aliquam convallis diam. Integer in consectetur arcu. Nullam vitae sem nisl. Nulla ac varius sapien. Vivamus id enim lobortis, ullamcorper ligula et, consequat sem. In et tortor vitae ipsum sollicitudin porttitor. Quisque tincidunt sed quam a porttitor. Etiam nulla ligula, pulvinar vel condimentum a, efficitur gravida felis. In sollicitudin, purus eget elementum scelerisque, orci libero laoreet enim, quis ultrices felis lectus et massa. Vivamus vitae fringilla enim, et aliquet erat. Proin ut feugiat nisi, ut consectetur arcu. Phasellus ligula elit, auctor in lacus et, accumsan convallis eros. Aenean tincidunt lorem odio, ac blandit tellus bibendum id. 148 | 149 | Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc commodo metus eget sem tristique semper. Aenean et viverra quam. Phasellus pulvinar, lorem vel tincidunt sollicitudin, lacus metus rutrum augue, aliquet consectetur tortor diam non turpis. Nunc efficitur mattis magna eu molestie. Suspendisse mattis magna nec turpis auctor cursus mollis sit amet augue. Suspendisse suscipit nunc nec tincidunt sollicitudin. Aenean egestas rhoncus neque. Donec gravida sapien sit amet ligula porta dictum non non sapien. Phasellus porta mollis commodo. Sed at ex a massa volutpat molestie eu id tellus. Proin a eros sit amet dui porttitor dictum. Nulla et mollis neque. Sed imperdiet turpis eu auctor pulvinar. Donec id purus quis eros molestie condimentum. Nunc sit amet risus ligula. 150 | 151 | Nullam efficitur velit non fringilla porta. Proin et porttitor purus. Etiam imperdiet porta orci. Maecenas finibus ut magna eu tempus. In hac habitasse platea dictumst. Aliquam interdum purus vitae venenatis imperdiet. Fusce leo lorem, aliquet mollis purus sed, pretium tincidunt leo. Sed ac metus in ex varius consectetur. Vivamus malesuada eget tortor eget tincidunt. 152 | 153 | Morbi egestas lacus libero, at condimentum neque venenatis sit amet. Sed eu ante id eros volutpat condimentum id sed orci. Sed rhoncus, nunc a iaculis malesuada, sem eros tincidunt dui, in posuere sapien massa in arcu. Maecenas auctor est quam, non semper lectus ullamcorper a. Sed vel congue metus, ornare tempor tellus. Pellentesque odio turpis, aliquet eu euismod ullamcorper, sagittis in risus. Praesent ultrices mattis blandit. Etiam elementum arcu in congue egestas. Aenean vel massa quam. Duis convallis porttitor risus, sed maximus dolor sollicitudin vel. Nunc id libero nisi. Fusce rutrum quam ac risus ultricies consectetur. Ut quis pretium libero. Pellentesque mollis tincidunt lacus, vitae laoreet dui interdum sed. 154 | 155 | Nulla eros mauris, mollis ut fermentum ac, condimentum sit amet mauris. Ut dui lacus, lacinia ut lacinia id, consequat sed lorem. Nunc at dictum velit, ac ultrices diam. Pellentesque commodo blandit leo eleifend vestibulum. Quisque convallis, urna ut viverra blandit, neque quam pellentesque velit, quis mollis neque massa vehicula arcu. Vivamus quis hendrerit tellus. Phasellus vestibulum aliquet est, et rhoncus nisl gravida sed. Nunc vitae tortor dignissim, fringilla erat ac, cursus elit. 156 | 157 | Pellentesque convallis venenatis orci, id aliquet sapien auctor eget. Nunc enim sapien, posuere eget venenatis sed, volutpat vitae diam. Nam ut ex sit amet urna pretium rhoncus. Suspendisse ante elit, finibus convallis risus eget, semper congue purus. Nam egestas blandit turpis at tempor. Cras egestas hendrerit augue nec euismod. Quisque ornare, elit suscipit dapibus rutrum, felis sem congue elit, ut vestibulum purus quam et libero. Suspendisse potenti. In sit amet aliquam leo. 158 | 159 | Integer ullamcorper neque et consectetur luctus. Nunc viverra volutpat nibh, quis bibendum diam ultricies eget. Vivamus auctor nisl et nibh porttitor, a pulvinar turpis aliquam. Donec facilisis viverra eleifend. Pellentesque lobortis tortor at elementum consectetur. Phasellus nunc turpis, faucibus sed urna non, blandit dictum justo. Aenean ac purus laoreet, faucibus turpis non, vestibulum ante. Curabitur quam est, faucibus a dui a, sodales sagittis sapien. 160 | 161 | Sed vitae elit ipsum. Nullam eget ultricies dui, ut placerat nulla. Pellentesque sollicitudin molestie egestas. Etiam quis pulvinar mauris, ac volutpat leo. Nam metus erat, molestie nec pharetra eleifend, ultrices vitae ipsum. Vestibulum dapibus lacinia faucibus. Donec sollicitudin sem nec risus ornare, sed venenatis quam faucibus. Suspendisse eget mi sed risus scelerisque egestas. Morbi laoreet dictum lacus at vestibulum. Donec non nunc arcu. Sed dolor arcu, sagittis nec gravida non, placerat vitae metus. 162 | 163 | Fusce aliquet fermentum consectetur. Nullam finibus consequat arcu vitae feugiat. Aliquam malesuada ultrices odio ut aliquam. Vestibulum sodales diam quis libero ullamcorper, in faucibus justo consequat. Suspendisse potenti. Phasellus ac risus ut enim vehicula condimentum vel vel nunc. Donec sagittis faucibus lacus, et vulputate ex. Morbi ex tellus, viverra in rhoncus nec, suscipit in massa. Nullam id tortor at diam posuere commodo. Vivamus at purus neque. Cras sed pulvinar magna, a semper neque. Maecenas et diam iaculis sapien tempor dapibus ac ac metus. Fusce bibendum ligula aliquet tortor venenatis, semper tempus justo iaculis. Donec rhoncus est ipsum, at placerat nibh efficitur sit amet. Suspendisse feugiat mi vitae nisi maximus, pretium accumsan metus gravida. Suspendisse dignissim, lorem in laoreet vehicula, sapien neque luctus sem, in pulvinar elit justo eu magna. 164 | 165 | In hac habitasse platea dictumst. Morbi neque urna, lacinia ut vulputate eu, posuere vel eros. Ut eget pellentesque purus. In vitae ullamcorper lorem. Pellentesque non posuere leo, a accumsan tellus. Etiam vestibulum dignissim quam, quis placerat leo tincidunt sit amet. Nunc metus eros, iaculis a porta et, bibendum id nulla. Nullam elementum scelerisque felis. Nunc eget massa eros. Proin id diam varius orci sagittis consequat. Donec vulputate posuere pulvinar. In ultricies lobortis dictum. Duis facilisis tortor et risus sagittis, vitae semper orci pellentesque. Nullam luctus cursus ultricies. Etiam rhoncus dolor tortor, vitae iaculis odio congue in. 166 | 167 | Praesent laoreet ac turpis sed pharetra. Praesent interdum pellentesque lacus, id pretium ipsum vehicula viverra. Vivamus nulla arcu, scelerisque id erat eget, laoreet tincidunt ex. Donec maximus mattis elit sed auctor. Sed bibendum est vitae turpis fringilla posuere. Sed at euismod massa. Ut egestas viverra orci, non rhoncus massa egestas at. In et urna justo. Fusce non mauris turpis. Aliquam sed risus vel urna aliquam luctus. 168 | 169 | Praesent egestas mi sit amet egestas aliquet. Quisque commodo felis dolor, et suscipit risus efficitur volutpat. Nullam ultrices ornare arcu, eget maximus est rhoncus ac. Cras at eleifend purus. Sed vitae bibendum nisl, quis ultricies ante. Suspendisse aliquet elit sed mauris auctor laoreet. Vivamus fringilla lobortis massa eget accumsan. Duis sit amet gravida risus. Praesent finibus ex nec tellus pharetra pulvinar. 170 | 171 | Integer sollicitudin nisl vitae nisl bibendum, ac vestibulum dolor lacinia. Nunc iaculis tempor nibh sit amet faucibus. Mauris elit justo, imperdiet vitae scelerisque ut, sagittis non sem. Suspendisse facilisis, velit at suscipit cursus, urna sem varius lectus, ac mattis ligula urna id ante. Curabitur a imperdiet nisi. Vestibulum imperdiet luctus lacus in malesuada. Sed sem nibh, pellentesque eget faucibus eu, finibus ac lorem. Praesent hendrerit magna odio, eget fermentum est volutpat nec. Praesent euismod ornare fermentum. Aliquam tristique tortor mattis rhoncus pharetra. 172 | 173 | Quisque placerat vel tellus id faucibus. Aliquam eget pharetra orci. Cras vitae aliquet arcu. Cras interdum, nulla in porta sagittis, odio urna lobortis libero, ac venenatis eros sem aliquam est. Curabitur dictum blandit odio, sit amet elementum nunc fermentum et. Nullam id risus in mauris fermentum vestibulum. Sed venenatis pretium nulla, id ornare arcu ultrices non. Nam felis orci, euismod quis eleifend ac, egestas eu dolor. Proin suscipit nisl hendrerit justo pretium imperdiet. Pellentesque quis libero lacus. Sed porttitor gravida vehicula. Maecenas euismod justo non metus fermentum, sit amet lacinia nulla accumsan. Morbi a ipsum et dui faucibus posuere. Integer consectetur dui in lorem porta, eget ullamcorper risus cursus. Donec cursus lorem ligula, ac aliquam turpis tempor et. 174 | 175 | Vestibulum consectetur elit sit amet aliquet tincidunt. In hendrerit mi sed leo vestibulum facilisis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc quis tempus elit. Sed vel eros sit amet velit semper commodo. Vestibulum arcu risus, egestas id turpis ut, commodo malesuada sem. Nunc cursus, nisi nec suscipit finibus, risus mauris mattis augue, id venenatis mi mauris at massa. Duis aliquet, magna vel dignissim hendrerit, velit odio sagittis turpis, vitae eleifend urna erat non mi. Aenean id maximus elit. Nunc eget laoreet magna. Curabitur ultrices augue eros, ac euismod sem efficitur quis. Quisque tristique purus enim, ut sagittis sem tempus a. Duis iaculis eros sed sapien blandit, in laoreet urna lobortis. 176 | 177 | Fusce et aliquet justo, id dignissim lorem. Fusce lectus ipsum, pulvinar eu sapien at, efficitur tincidunt quam. Mauris lobortis mi eget velit lacinia, ut tempus odio imperdiet. Integer dapibus, metus ac facilisis malesuada, sapien nisi mattis metus, quis lacinia lectus leo id tellus. Nulla vulputate, erat eu rutrum interdum, neque dolor facilisis risus, vitae faucibus massa odio eu lectus. Donec quis leo ac enim sagittis dictum eget nec dolor. Vivamus quam ex, fringilla quis suscipit quis, aliquet a odio. Donec commodo lacus lacus, sed pulvinar enim volutpat at. Donec at quam ac felis placerat vulputate et eu risus. Proin nulla odio, dapibus et dolor non, congue auctor magna. Sed aliquam, velit a finibus malesuada, mi ipsum vestibulum eros, ut condimentum dui tellus nec risus. 178 | 179 | Vivamus vel pulvinar orci. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer placerat elit eu nisi pharetra porttitor. Praesent a elit ex. Nam egestas leo ut nisl venenatis interdum. Ut in justo libero. Curabitur auctor auctor dolor, commodo vehicula ex finibus sed. Donec tellus erat, posuere sed venenatis ut, rhoncus sed sem. Sed rutrum luctus felis, efficitur tempor nunc aliquam at. Etiam vulputate sodales dolor, quis facilisis risus lobortis sit amet. Praesent eu elit pharetra, vestibulum turpis in, luctus erat. Phasellus vel ullamcorper odio. Nullam finibus erat convallis augue venenatis, sed suscipit magna tristique. Donec sed tellus nisl. 180 | 181 | Phasellus tincidunt nulla tincidunt efficitur sodales. Fusce blandit risus vel dignissim fringilla. Maecenas vel turpis mattis, convallis mi non, consectetur nulla. Nam ac metus arcu. Duis auctor sodales nunc. Phasellus hendrerit dolor vel odio ornare maximus. Vestibulum lacinia molestie urna. Nulla porta euismod diam vitae aliquam. 182 | 183 | Maecenas condimentum diam vitae nulla molestie, eu pulvinar enim mollis. Fusce finibus ligula volutpat cursus dignissim. Nulla ultrices sagittis sem. Quisque eget diam a mauris semper finibus ut sit amet mi. Fusce rutrum ornare mauris, in maximus lorem. Nam convallis nibh vel vulputate elementum. Nullam in ex consequat risus gravida dictum. 184 | 185 | Curabitur luctus eget ligula in sollicitudin. Sed euismod nibh a nibh porta, vitae gravida nunc porttitor. Ut in luctus lectus, sed lobortis sapien. Nunc vitae laoreet lectus, eu molestie nisi. Phasellus id neque pellentesque, consectetur massa a, consectetur magna. Nulla ut nisl augue. Duis porttitor elementum mi vitae consectetur. Morbi tempor tempus magna ut feugiat. 186 | 187 | Mauris non aliquet tellus, at egestas magna. Nunc sagittis nisl lectus, eget varius sapien rutrum nec. Suspendisse vel nisl purus. Nulla quis blandit est. Vestibulum eu nunc nisl. Proin id feugiat enim. Donec blandit nibh in posuere porta. Sed tellus est, interdum quis porta ac, tincidunt quis dui. Vivamus sed sem vitae enim maximus iaculis. Nullam volutpat erat eget ipsum facilisis, id venenatis dolor suscipit. Morbi bibendum egestas ligula placerat condimentum. Etiam eget suscipit mauris. Ut et laoreet mi, quis ullamcorper magna. Integer elementum vulputate est eget porta. 188 | 189 | Integer mollis felis imperdiet lacus faucibus finibus. In hac habitasse platea dictumst. Cras fringilla vestibulum eros, sed egestas urna ullamcorper non. Mauris fermentum sem nec turpis venenatis blandit. Curabitur vitae porta massa. Donec a neque urna. Pellentesque vitae eros venenatis, egestas tellus id, aliquam quam. Maecenas varius efficitur sodales. Morbi at magna dapibus, tempor neque hendrerit, auctor nibh. Fusce efficitur ante dui, fringilla convallis ante faucibus ut. 190 | 191 | Aenean egestas tincidunt ante vitae commodo. Aenean et elit tempus, auctor lorem at, ornare ligula. Nunc porta odio lacinia ex viverra finibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras finibus lectus turpis, at accumsan tellus pharetra nec. Mauris lobortis lorem eget tincidunt mollis. Cras porttitor mattis enim. Morbi diam est, faucibus ut leo consequat, fermentum rhoncus massa. Vestibulum sed massa dictum, efficitur dui at, dictum mi. Proin consequat, odio ac tincidunt rutrum, justo massa egestas nibh, vitae venenatis arcu tortor ut arcu. Cras sed efficitur mi. Aenean ullamcorper, arcu id semper elementum, nibh eros elementum lectus, ut ornare massa risus sed ex. Fusce dictum libero magna, ut commodo erat rhoncus ac. In tortor justo, tempus vitae vehicula quis, viverra a erat. Donec hendrerit ac risus eu aliquet. Nunc rutrum eleifend nisl ac sagittis. 192 | 193 | Praesent eu turpis lectus. Proin in eleifend libero. Pellentesque efficitur neque mi, at mollis augue bibendum in. Nullam ac pharetra nisi, id efficitur nulla. Suspendisse sit amet blandit enim. Donec faucibus, augue et porttitor commodo, quam ipsum dapibus orci, quis ornare erat lorem vitae nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam volutpat viverra nibh, non tristique erat ultrices nec. Nullam at sem vel mi varius consectetur ut vel sapien. Sed luctus nibh ligula, in blandit risus fermentum ut. Sed mollis tellus ante, mattis mollis nibh pretium in. Aliquam erat volutpat. 194 | 195 | Praesent a sapien vitae velit tempus interdum vitae vitae lectus. In arcu tellus, fringilla in tincidunt vel, aliquet eu risus. Mauris nec ultrices tortor. Donec venenatis nec est eu consequat. Sed vitae est nec velit posuere lacinia. Praesent tellus odio, dictum in ex eu, feugiat imperdiet lacus. Nulla facilisi. 196 | 197 | Mauris ultricies orci vel ipsum sodales, at facilisis ex cursus. Vestibulum rhoncus imperdiet augue vitae laoreet. Aenean posuere varius orci, non viverra ante interdum sed. Duis non quam id lectus cursus facilisis eget eu purus. Nunc eget blandit mi, eget condimentum nunc. Phasellus vitae eros vitae urna ultricies gravida vitae eget dolor. Donec semper bibendum pulvinar. Phasellus euismod iaculis arcu, a sagittis ipsum. Morbi id laoreet justo, ac hendrerit mi. Duis placerat felis eget ipsum efficitur molestie. Suspendisse lacinia nisi ac neque condimentum bibendum. Mauris sit amet laoreet metus. 198 | 199 | Suspendisse convallis ultricies magna ut sollicitudin. Quisque quis ipsum quis neque imperdiet mattis. Donec laoreet felis id est consequat fringilla. Aenean leo tortor, egestas at venenatis nec, pretium et elit. Nullam eu ultrices leo. In feugiat erat ut faucibus iaculis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam id dolor a ante laoreet rutrum. Phasellus et cursus turpis. Suspendisse sit amet tellus dapibus, lobortis purus sit amet, consectetur arcu. Etiam scelerisque, massa et malesuada mattis, tellus metus dapibus lorem, sed accumsan purus dolor id tortor. Sed volutpat placerat orci vitae tempor. Nullam libero nisl, consequat non sapien ac, vulputate scelerisque eros. Nullam bibendum ante nec est egestas, ut semper metus gravida. Aenean iaculis molestie hendrerit. 200 | 201 | Vivamus dapibus odio ac egestas ullamcorper. Sed tincidunt, purus vitae lacinia maximus, arcu felis interdum nibh, ornare laoreet velit mi quis leo. Sed sed convallis erat. Suspendisse sit amet augue malesuada, finibus lorem ut, molestie mauris. Praesent at est erat. Phasellus tristique sit amet purus a elementum. Vivamus hendrerit vel tortor quis suscipit. Quisque consequat augue vel ullamcorper ullamcorper. Nunc ut neque sit amet orci porttitor ultrices. Suspendisse potenti. Donec nec interdum diam, et imperdiet neque. 202 | 203 | Nulla tincidunt malesuada ligula id convallis. Donec at tellus in felis euismod vehicula rutrum vulputate diam. Aenean fringilla pharetra elit, at cursus ex posuere nec. Fusce sit amet faucibus elit, nec ullamcorper justo. Aenean risus diam, laoreet vitae enim nec, blandit egestas ligula. Sed finibus tellus vel dui facilisis laoreet. Suspendisse iaculis ex at quam pellentesque, vel varius ipsum pellentesque. Ut sollicitudin, sem quis gravida rhoncus, lectus ligula tempor magna, eget volutpat urna enim quis ipsum. 204 | 205 | Aliquam nibh massa, porta et est non, pellentesque ornare odio. Aenean et velit id leo blandit molestie. Aliquam ullamcorper magna sed mollis viverra. Morbi in pellentesque ligula. Maecenas sollicitudin feugiat nunc eget aliquam. Suspendisse feugiat massa sit amet justo interdum, tempus faucibus dui placerat. Ut arcu urna, dignissim eu lacus in, maximus gravida lacus. Curabitur et tristique dolor, a hendrerit turpis. Ut sit amet leo justo. Nulla molestie ornare facilisis. Sed fermentum id enim ut fringilla. 206 | 207 | Mauris feugiat gravida justo ut dictum. Maecenas venenatis imperdiet tortor eu aliquet. Aenean interdum orci tortor, a porta massa facilisis viverra. Maecenas consequat hendrerit tortor, sit amet aliquet dui blandit eget. Nullam lobortis et sem at dignissim. Curabitur lectus metus, suscipit quis faucibus at, bibendum id velit. Maecenas eget orci lacus. Quisque augue metus, condimentum quis efficitur eu, eleifend in nisl. Cras non cursus purus. Vivamus nec nulla eget eros varius efficitur nec et ligula. Suspendisse sit amet eleifend est. Ut vel dolor ut diam tincidunt semper. Donec sed lectus tincidunt tellus ultricies tincidunt. 208 | 209 | Sed hendrerit non neque non venenatis. Morbi faucibus, mauris vulputate venenatis ultricies, lorem sem rhoncus dui, at eleifend orci odio at enim. Cras purus velit, dictum ut elementum eget, tristique at purus. Nullam accumsan elit quis turpis convallis pharetra. Aenean ullamcorper ipsum vitae nisi volutpat pretium. Phasellus in nunc quis arcu suscipit ultricies. Vivamus a maximus turpis, quis consectetur odio. Vestibulum blandit consectetur libero id tempus. Vestibulum posuere diam libero, ut sagittis metus elementum ac. Suspendisse maximus orci eget velit fringilla, et scelerisque libero feugiat. Phasellus sollicitudin justo vitae metus suscipit, ut accumsan eros ultrices. In lobortis feugiat dapibus. Maecenas ornare mollis massa. Proin dapibus leo et augue volutpat laoreet. 210 | 211 | Duis nec porttitor neque. Ut viverra et sapien et vestibulum. Nulla varius lacinia condimentum. Maecenas tincidunt leo vel tristique semper. Duis pretium lobortis justo vel finibus. Ut eget venenatis est. Nulla facilisi. 212 | 213 | Quisque orci tellus, semper quis aliquet et, auctor id dui. Aenean imperdiet urna at vulputate rutrum. Morbi rhoncus congue posuere. Proin porta justo diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur mauris quam, pharetra vel leo sit amet, semper venenatis orci. In tristique sit amet enim vel maximus. Fusce erat arcu, malesuada id urna eu, pretium elementum orci. Quisque id luctus augue, nec efficitur leo. Nunc mattis ac magna ac consequat. Aenean nibh leo, venenatis a tincidunt at, lobortis eu libero. Pellentesque sollicitudin velit sem. Vivamus eget nisl gravida, accumsan purus nec, pharetra dolor. Fusce in est convallis nisi varius pellentesque. Vivamus dapibus est non velit maximus, eget ornare risus suscipit. 214 | 215 | Vivamus maximus quam sit amet ligula egestas accumsan. Morbi bibendum magna eu sagittis fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet enim magna. Aenean vulputate turpis eu porttitor pharetra. Nunc eu risus tellus. Pellentesque enim ex, tincidunt sit amet ex sit amet, dictum auctor magna. Nulla efficitur mollis magna, et mollis mauris mattis consequat. Quisque rhoncus justo a nunc tincidunt pharetra. Curabitur at congue erat. Fusce nec velit turpis. Phasellus justo sem, elementum eget leo id, fermentum tincidunt dolor. 216 | 217 | Maecenas eu lacus nec velit ultricies euismod. Suspendisse et felis ex. Aenean ultrices, felis nec condimentum lobortis, orci lorem ultricies elit, ut feugiat quam sem a purus. Etiam et ultricies libero, eu scelerisque nunc. Sed tellus ante, tristique id placerat sit amet, posuere a sapien. Nullam eu ornare enim. Donec sit amet ullamcorper ante. Morbi laoreet diam magna, eget posuere purus convallis eget. Etiam tortor lorem, sollicitudin sit amet auctor nec, venenatis ut purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer porttitor ultricies lorem, eget cursus ligula euismod at. Nulla nisi mauris, suscipit tempus vulputate id, dignissim et urna. Aenean vulputate leo vel sapien placerat, volutpat auctor arcu ultrices. Mauris molestie semper dolor, id tincidunt sem interdum et. Phasellus eu dolor quis dui convallis commodo ut eget justo. 218 | 219 | Phasellus vel faucibus erat. Sed finibus volutpat eros, eu dignissim odio rutrum ut. Sed maximus ante ut consectetur iaculis. Morbi sapien neque, eleifend non metus in, rutrum ullamcorper felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus molestie luctus arcu, vitae blandit est. Aliquam a turpis ut neque dictum lobortis. Vestibulum id magna tellus. 220 | 221 | Maecenas bibendum scelerisque metus ac consectetur. Maecenas ut tincidunt turpis, vitae consectetur elit. Aliquam sed nibh quis ex fringilla sagittis at nec nibh. In interdum ipsum risus, non ornare mauris interdum a. Nunc quis libero commodo, dictum ante non, aliquam sem. Donec aliquet leo id mi maximus, eu sodales lorem finibus. Nulla id interdum odio. Maecenas iaculis tellus ut massa tincidunt placerat. Morbi rutrum lacus eu ante volutpat, sed semper tortor pellentesque. Donec lacinia tellus non dapibus dapibus. 222 | 223 | Proin nisi felis, eleifend vitae ante et, fermentum volutpat velit. Cras et volutpat lectus. Vivamus in erat eget mauris placerat suscipit sit amet id arcu. Vestibulum mi lectus, molestie sodales ex eu, accumsan congue dolor. Duis pellentesque ultrices tortor in consectetur. Quisque eu neque quis nulla venenatis vestibulum. Maecenas odio ante, rutrum ut sodales at, commodo id lectus. Cras risus dui, interdum in nibh ut, egestas tristique mauris. Nullam volutpat, arcu ut imperdiet cursus, ex est sodales risus, eget suscipit risus arcu ac nisl. Vivamus bibendum placerat sapien ut congue. Donec nec odio nunc. Nulla porta purus augue, eu ultricies leo cursus id. Phasellus interdum, elit et pulvinar iaculis, tellus metus sagittis massa, id euismod ipsum eros non justo. Aenean eget tristique tortor. 224 | 225 | Sed vitae nibh eu turpis dapibus mollis. Maecenas blandit efficitur ornare. Cras laoreet, diam et aliquam scelerisque, ex sem consequat ipsum, nec pulvinar velit ligula ac nunc. Sed pretium, turpis pharetra pulvinar viverra, felis mi pellentesque nisl, mattis volutpat sem erat vitae lectus. Pellentesque sit amet placerat leo. Phasellus eleifend tincidunt nisi, eget facilisis erat hendrerit quis. Pellentesque congue mauris ut est feugiat accumsan. Sed lectus mi, maximus vel sem vitae, posuere euismod neque. Cras rutrum lacus sed lacus luctus, eu laoreet enim lacinia. Nunc quis felis vulputate, mollis odio nec, sodales nibh. 226 | 227 | Vivamus lobortis dui elit, eget tempus ex rhoncus in. Aenean egestas finibus bibendum. Vivamus elit lacus, pretium nec arcu id, placerat ultrices nibh. Sed lorem sem, consectetur nec turpis placerat, facilisis efficitur enim. Vestibulum at tortor sed sapien porttitor congue non ut tellus. Nullam bibendum orci fringilla commodo ultrices. Quisque sed semper quam, eget dignissim velit. Suspendisse potenti. Vestibulum sit amet felis sem. Mauris ac augue cursus, mattis nisi eu, dignissim lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus ullamcorper convallis dui ut venenatis. 228 | 229 | Donec tincidunt ipsum nec sodales dapibus. Sed cursus mauris vel erat dignissim dapibus. Ut non accumsan nulla. Nulla elementum id purus a lobortis. Proin tristique augue et nisl lobortis feugiat. Morbi tincidunt risus sit amet massa tincidunt, non imperdiet erat mollis. Interdum et malesuada fames ac ante ipsum primis in faucibus. In interdum dictum turpis a commodo. Quisque dignissim, est eget commodo vehicula, nibh lectus sollicitudin risus, ac accumsan ligula ante ac felis. Curabitur gravida quam enim, in viverra justo laoreet vel. Etiam a neque et magna congue cursus ac vitae nulla. 230 | 231 | Phasellus sollicitudin dapibus lorem a egestas. Fusce vel tincidunt odio. Phasellus id massa et erat convallis blandit eu id magna. Nullam eget rhoncus nisi, quis sodales nisl. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque ultricies sollicitudin odio, in elementum turpis sagittis in. Curabitur nec sagittis odio. Fusce dignissim mattis velit, eget pharetra felis blandit sit amet. Pellentesque ullamcorper eget enim vel convallis. Curabitur consectetur sed neque id malesuada. Etiam justo dui, imperdiet vitae neque et, luctus cursus augue. 232 | 233 | Quisque mollis libero quis dui vestibulum interdum. Duis mattis tristique blandit. Pellentesque quis posuere nisl. Sed in dolor ut turpis scelerisque sodales in pellentesque nibh. Sed eu sapien sit amet diam sollicitudin congue. Aliquam tempor ligula lacus, a tristique risus gravida sit amet. Praesent felis sapien, condimentum nec sapien eget, consequat sollicitudin justo. Nam eu urna id nulla suscipit commodo id ac tortor. Cras semper ipsum dolor, eget hendrerit quam fringilla non. Maecenas vehicula dictum ornare. Curabitur facilisis metus sit amet dui consequat eleifend. Nullam et tellus lectus. Sed cursus facilisis consectetur. Donec faucibus sollicitudin velit, eu dapibus ante efficitur vel. 234 | 235 | In a magna iaculis, tincidunt lectus quis, laoreet purus. Suspendisse cursus pellentesque erat. Nunc quam nulla, efficitur in maximus eget, blandit nec lectus. Nullam convallis in nibh ut luctus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla luctus laoreet porttitor. Ut vel nunc libero. Vestibulum ex velit, cursus quis lectus vitae, malesuada dictum justo. Fusce sed elementum dui. Mauris gravida odio ligula, non ullamcorper urna imperdiet nec. Duis in sollicitudin nisl. 236 | 237 | Suspendisse nibh mauris, vulputate id pretium nec, blandit eu lacus. Phasellus fermentum hendrerit luctus. Fusce justo libero, mattis nec sem vel, vulputate condimentum tortor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec aliquam sapien nunc, sed lacinia lacus rutrum ut. Praesent suscipit turpis nec nisi aliquam vulputate. Integer nunc libero, aliquet a consectetur nec, tristique a neque. Aliquam eget mattis elit, vitae egestas lorem. Morbi dignissim sollicitudin erat, in tempus orci egestas vitae. Aenean porttitor venenatis risus, id volutpat turpis euismod nec. Curabitur tincidunt lorem nec orci congue, sed facilisis ex eleifend. Etiam fermentum dolor quis augue tincidunt, in luctus mauris tristique. In congue purus nec neque efficitur, id scelerisque sem laoreet. Nunc rhoncus lectus condimentum dolor ultricies lacinia. Cras vitae ullamcorper risus, eget mollis neque. 238 | 239 | Donec rutrum turpis at leo mollis aliquam. Integer quis aliquam enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam quis ullamcorper risus. Aenean in dolor consequat, eleifend arcu eu, malesuada libero. Integer auctor, leo iaculis fermentum blandit, est mi faucibus est, ac sollicitudin sem magna ac lacus. Donec aliquet urna libero, non consequat sem auctor sit amet. Cras rhoncus leo vitae turpis aliquet, in dapibus lectus pellentesque. Cras id varius diam. Phasellus tempor, tellus et scelerisque venenatis, justo velit imperdiet mauris, in varius mauris metus non elit. Pellentesque imperdiet quam ut metus blandit congue. Praesent et turpis vitae metus finibus cursus non quis nisi. Suspendisse potenti. 240 | 241 | Duis porttitor lectus in nunc tristique imperdiet. Etiam ut facilisis erat. Aliquam porttitor porta molestie. Nulla quis molestie dolor. Phasellus lacinia tortor non neque aliquet, eget sollicitudin ipsum scelerisque. Nulla pellentesque vehicula libero non rhoncus. Vivamus mollis turpis at justo sodales, ac elementum sem molestie. Maecenas ut eros orci. Suspendisse dictum sem ac justo eleifend, vitae maximus massa rutrum. Quisque malesuada viverra dui, sit amet efficitur felis imperdiet a. Nulla lobortis ultrices diam. Etiam laoreet nibh nisl, vel lacinia lacus suscipit vitae. Integer pellentesque aliquet fermentum. Nullam sem enim, euismod non nisl in, sagittis consequat arcu. Phasellus vel lorem sagittis, tristique sapien malesuada, viverra elit. 242 | 243 | Ut erat leo, placerat id enim vitae, viverra imperdiet mauris. Duis nec eleifend velit. Nam ut dui ac leo tincidunt tempor. Morbi vel tempor nisi. Mauris rhoncus justo sed mauris consequat, luctus iaculis justo condimentum. Donec interdum semper nisi id fermentum. Integer id diam porta, iaculis nibh a, suscipit urna. Aenean condimentum at orci nec consectetur. Integer velit felis, consectetur eu dapibus eu, congue ut elit. Pellentesque in augue purus. 244 | 245 | In efficitur leo eu nisl accumsan vulputate. Praesent ut neque eu magna congue varius. Sed mattis viverra arcu non scelerisque. Nulla sem arcu, dapibus sed mollis ut, tincidunt malesuada metus. Donec porta elementum nisi, quis scelerisque sapien fermentum malesuada. Pellentesque malesuada ex mauris, non eleifend nibh gravida ut. Donec eget ligula vel urna iaculis faucibus. Morbi accumsan convallis lacus, nec sodales enim interdum et. Duis nec tellus et ipsum consectetur posuere. Nunc ac scelerisque felis. 246 | 247 | Integer eu pellentesque urna. Curabitur lobortis eget dui vel aliquet. Ut varius eros turpis. Integer rutrum fringilla turpis id mollis. Vestibulum lobortis id arcu a pulvinar. Aenean vestibulum vel nisl nec vulputate. Duis accumsan quis libero in iaculis. Donec elit ex, aliquam ac tincidunt nec, tincidunt eu augue. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla varius metus eget augue dictum vulputate ut id nibh. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla eget gravida ex, id ultrices turpis. 248 | 249 | Proin vel turpis maximus, vehicula mi vitae, hendrerit sem. Proin et semper risus. Sed ut urna nunc. Maecenas quis tellus tincidunt, mattis magna ut, blandit magna. Pellentesque imperdiet varius nisl, a aliquam risus vulputate quis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur pretium vestibulum dolor tincidunt dapibus. Mauris a pellentesque nunc, et suscipit neque. Vivamus ac quam non tortor euismod ornare. Vivamus id mi ut dolor hendrerit mollis eget vel leo. Fusce sollicitudin velit id metus convallis imperdiet. Proin tempus lacus sed augue feugiat, at suscipit sem blandit. Mauris pharetra volutpat est sit amet vulputate. Pellentesque faucibus magna urna, sed dignissim libero porttitor ac. 250 | 251 | Fusce luctus massa vitae nibh fringilla, non sollicitudin risus pellentesque. Etiam ut tempor lorem, vel imperdiet purus. Vestibulum sit amet tristique nulla. Etiam et erat in justo sodales auctor. Nunc ligula felis, placerat quis consectetur et, maximus sed nibh. Integer egestas a mi ac congue. Aenean consectetur ullamcorper sem sed feugiat. Aenean semper dapibus auctor. In pretium tincidunt mattis. Ut ultrices sed magna id facilisis. Suspendisse et turpis varius, congue odio vel, fringilla lacus. Mauris lacinia odio sit amet risus ultricies malesuada. Aliquam ligula lorem, lacinia eget justo eget, fermentum scelerisque magna. Mauris ut ligula dictum, vehicula enim a, vulputate lectus. Suspendisse dapibus lacus elit. 252 | 253 | Nam convallis lorem ac volutpat molestie. Mauris ac nulla pretium, vehicula sem quis, consequat diam. Nulla pretium nunc a sodales placerat. Vestibulum nec vestibulum orci. Donec laoreet faucibus erat, interdum efficitur velit semper sed. Donec ac eleifend massa. Sed vel orci eget nisi pretium suscipit. 254 | 255 | Praesent ante orci, luctus ut nibh tincidunt, viverra fermentum dolor. Etiam rutrum odio tincidunt lectus malesuada, cursus lacinia diam cursus. Sed sem ex, lobortis eget lacus vitae, sodales lacinia dolor. Morbi ultricies nunc justo, in pharetra turpis facilisis et. Donec vitae orci vitae nisi bibendum bibendum. Nunc quis tortor non ante tempus interdum. Vestibulum blandit, dolor et convallis facilisis, felis libero tincidunt orci, in ultricies felis massa et velit. Curabitur lectus purus, ornare ac lobortis quis, dignissim pharetra elit. Quisque ac interdum felis, a fringilla velit. Ut vitae lorem ex. Integer maximus vulputate diam. Proin quis mollis massa. Sed tempus urna eu facilisis lacinia. Nunc in dui viverra, semper lectus in, condimentum magna. 256 | 257 | Proin semper arcu vitae leo molestie, vitae condimentum arcu interdum. Fusce massa arcu, imperdiet ut orci finibus, imperdiet pretium ante. Duis tempor semper elementum. Mauris tempor metus vel pretium vehicula. Curabitur varius lacus non est porttitor, ornare viverra ipsum suscipit. Morbi id porttitor lectus. Proin efficitur, nulla eu elementum rhoncus, tortor sem sollicitudin nisi, vitae semper justo turpis non augue. 258 | 259 | Nullam porttitor convallis pulvinar. In porttitor ligula sed lectus sagittis ultricies. Vestibulum iaculis, est at consectetur vehicula, nunc nisl imperdiet sapien, eget consectetur augue leo et enim. Morbi consectetur lacus magna. Morbi nec erat eu mi tempor dictum vel id elit. Donec hendrerit efficitur diam, eu euismod quam condimentum pulvinar. Sed porttitor eros nunc, eu blandit lectus maximus interdum. Sed ac condimentum augue, a auctor turpis. Etiam placerat est eleifend nisl pharetra, et vestibulum est vulputate. Cras at massa nec mi commodo pretium vitae ut erat. Proin consequat eleifend dolor, sed mattis metus porta dignissim. 260 | 261 | Mauris pretium elit non auctor malesuada. Etiam sed arcu quis eros bibendum volutpat iaculis sed nisl. Donec quis quam at mauris lacinia ultrices. Nullam et consequat nulla. Vestibulum dolor ligula, molestie non sagittis ac, blandit in magna. Vivamus aliquet quis augue iaculis pharetra. Duis vel volutpat nisi, convallis tincidunt libero. 262 | 263 | Ut quam mi, facilisis eget vestibulum eu, semper vel leo. Etiam consectetur eros lectus, vitae fermentum elit molestie rutrum. Nulla varius pretium dui, sed lobortis nisi auctor id. Sed at rhoncus nunc, in fringilla metus. In egestas lobortis arcu et pharetra. In sem magna, laoreet et felis iaculis, fringilla egestas justo. Nulla tincidunt vel lorem non ultrices. Aliquam commodo tempor sem, in porta justo. Nulla facilisi. Morbi convallis, velit sit amet eleifend tincidunt, dui massa iaculis felis, sed condimentum ex nibh ut felis. Praesent blandit dictum odio sit amet consequat. Morbi tellus nibh, porttitor id fermentum sollicitudin, bibendum eu felis. 264 | 265 | Sed non sem tellus. Donec hendrerit nibh et purus volutpat, at posuere ligula interdum. Fusce tincidunt pretium odio, viverra pulvinar elit porttitor in. Nam sed nisl ac ante suscipit laoreet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas a pellentesque nisl. Quisque vulputate sagittis dignissim. Praesent nisi lacus, ornare quis dolor at, sagittis suscipit diam. Nam lectus enim, elementum in leo vel, ornare pharetra ante. 266 | 267 | Curabitur non maximus lorem. Ut ultricies, nulla quis condimentum feugiat, justo orci sagittis risus, quis fringilla mi arcu ut mi. Mauris a elit vitae metus lobortis eleifend et ut elit. In eu mollis sapien. Donec id enim ut turpis luctus volutpat. Sed eget sem mattis, placerat lacus sit amet, rhoncus tortor. Pellentesque vulputate elit ac lectus faucibus, et posuere nisl vestibulum. Morbi pellentesque mauris justo, at convallis enim posuere ac. Phasellus vel lorem elementum, hendrerit purus consequat, ornare ipsum. Maecenas lectus eros, porta sed ullamcorper in, feugiat in justo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. 268 | 269 | Mauris suscipit ligula non congue lobortis. Mauris tincidunt eu augue suscipit viverra. Duis quam massa, placerat quis nibh vel, semper scelerisque neque. Integer ac enim neque. Sed consequat volutpat convallis. Maecenas facilisis felis ut tempus lobortis. Duis ornare nec urna vel ultricies. In maximus sodales ligula vitae ultrices. Vestibulum sed turpis tempus, sodales tellus eget, tristique ipsum. In fermentum, tellus ac sagittis congue, neque tellus tempus elit, sed elementum ex lectus id dolor. 270 | 271 | Aliquam erat volutpat. Phasellus placerat viverra sapien eu scelerisque. Aliquam volutpat at ligula sed rhoncus. Vestibulum id commodo ipsum. Integer tortor nunc, tempor ut ex eu, consequat blandit felis. Sed sed tellus mauris. Curabitur hendrerit, dolor elementum placerat ornare, odio enim volutpat felis, eget viverra purus metus eget dolor. Morbi eget neque risus. Phasellus turpis lorem, dictum et facilisis in, varius fermentum felis. Praesent eleifend orci at sapien dictum sodales. Ut at lorem fermentum, ultrices dui quis, feugiat velit. 272 | 273 | Sed convallis quam orci. Duis efficitur sapien nulla, nec egestas neque ultricies sed. Morbi sed tempor ante. Pellentesque sed ligula eu dui interdum elementum. Suspendisse eleifend a quam at fringilla. Integer ac ultricies erat, ac mollis enim. Morbi quis ullamcorper augue. Donec sagittis diam hendrerit ligula ornare, vitae imperdiet eros malesuada. Aenean auctor diam facilisis est convallis, nec rutrum nisi varius. Aenean ultricies ligula at urna ultrices, at ultrices purus aliquet. 274 | 275 | In eros ligula, scelerisque in quam in, ullamcorper finibus velit. Pellentesque egestas libero eu vestibulum scelerisque. Pellentesque mollis magna at elit elementum, sit amet hendrerit tellus congue. Donec et turpis quis sapien elementum ornare. Morbi ut ipsum at mi feugiat volutpat. Suspendisse potenti. Etiam vitae varius arcu. Curabitur cursus suscipit dolor, ut rutrum tellus luctus eget. Maecenas in luctus nisl. Ut eget magna in turpis ultricies luctus id vel turpis. 276 | 277 | Aliquam dictum varius turpis, sit amet molestie orci congue nec. Ut non euismod metus, eget viverra massa. Sed vel facilisis purus, et sodales nibh. Nunc cursus feugiat finibus. Maecenas lorem nunc, molestie in sem sed, condimentum convallis lorem. Nulla turpis mi, consequat ornare est sit amet, finibus molestie mauris. Pellentesque et enim maximus, gravida elit vitae, rhoncus tellus. Ut auctor elit ligula, et feugiat dolor interdum nec. Quisque molestie sit amet elit eu condimentum. In vulputate eget odio sit amet gravida. Ut vitae mi feugiat, finibus ipsum vel, iaculis neque. Morbi sed tortor mattis, fermentum felis eu, hendrerit lacus. 278 | 279 | Vestibulum nec arcu ante. Cras cursus tincidunt nulla vitae tincidunt. Ut vel aliquam mi, scelerisque gravida mi. Duis at arcu id felis consequat pretium quis sit amet magna. Aliquam in bibendum neque. Integer sit amet arcu in ipsum aliquet finibus sed sit amet mauris. Suspendisse pulvinar orci vel condimentum tincidunt. Etiam condimentum et turpis eget hendrerit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque posuere felis a mollis pretium. Aenean in tortor molestie, consequat nisi a, tempor felis. Duis pulvinar ipsum eget risus venenatis laoreet. Quisque gravida semper purus, vel tempor odio scelerisque feugiat. 280 | 281 | Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc ut tincidunt purus. In ornare eros vitae dui hendrerit fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque elementum condimentum neque, at gravida nisi maximus eget. Nulla tincidunt, tellus in fringilla varius, libero neque laoreet odio, at maximus justo massa eget enim. Aliquam placerat sapien quam, et tempor augue pretium ut. Nam cursus, neque condimentum dignissim volutpat, odio metus ullamcorper enim, et facilisis augue mauris in magna. Ut in egestas odio. Suspendisse mattis, lectus nec interdum placerat, dolor ex congue nisi, at vulputate dolor enim eu ipsum. Ut cursus tincidunt molestie. Duis sed lacus ut erat vestibulum laoreet a et mi. Donec vehicula magna ante, ac venenatis mauris laoreet ac. Fusce scelerisque nibh in tellus mollis iaculis. Curabitur non fermentum elit, a faucibus nisl. Vivamus non libero tellus. 282 | 283 | In at augue fermentum, consectetur massa nec, fermentum nisi. Aliquam sit amet iaculis nisi. Quisque sit amet ex sit amet orci viverra aliquet a ut mauris. Nullam efficitur mauris non dignissim ullamcorper. Suspendisse potenti. In non imperdiet ipsum, sed malesuada arcu. Nam quis diam velit. Praesent vitae arcu sem. Pellentesque non velit id diam molestie porttitor nec nec augue. Quisque sed lectus ultricies, ultricies augue sed, gravida eros. Curabitur et bibendum sapien, ut commodo ipsum. Morbi malesuada urna et tristique auctor. 284 | 285 | Nunc non semper dui. Quisque facilisis, diam eget gravida vestibulum, odio quam efficitur ipsum, at bibendum justo dui id turpis. Praesent venenatis porta cursus. Quisque pretium faucibus ullamcorper. Morbi ac vestibulum dolor, ut elementum nisl. Praesent vel nunc et magna mollis aliquam. Maecenas non velit nisi. Sed orci urna, gravida et erat sit amet, pellentesque semper orci. Sed ac diam dui. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam molestie urna libero, a pulvinar velit auctor nec. Nulla facilisi. Aenean at congue odio, at facilisis elit. Vivamus mi sapien, pulvinar quis nunc ac, tempor sodales justo. 286 | 287 | Vivamus non commodo velit, id fringilla eros. Suspendisse tempor mauris nec mattis dictum. Donec rutrum sem in risus scelerisque, et lobortis erat posuere. Nullam lacinia tincidunt ligula eget viverra. Donec ac ante in orci luctus pharetra. Nullam rutrum posuere accumsan. Proin dapibus tellus vel nisl pulvinar eleifend. 288 | 289 | Etiam ac iaculis lectus, ut imperdiet ante. Nullam ac sapien congue, aliquet ligula ac, luctus velit. Nunc maximus laoreet purus sed congue. Sed aliquam tortor ac massa malesuada imperdiet. Morbi sit amet aliquet dui. Praesent sit amet nulla sit amet nisi tincidunt elementum. Proin molestie quam at lacus sodales, ut laoreet justo vehicula. Interdum et malesuada fames ac ante ipsum primis in faucibus. 290 | 291 | Integer nec tempor ipsum. Nunc condimentum nulla eu urna aliquet, ut lobortis metus iaculis. Curabitur rhoncus volutpat ultricies. Aenean fermentum nibh placerat cursus dapibus. Morbi maximus felis sed semper consequat. Donec dictum orci at orci porttitor convallis. Fusce ullamcorper lacus blandit, fermentum libero sed, convallis mauris. Etiam in sapien tempor, dapibus enim a, fringilla ante. Morbi facilisis, diam sit amet aliquam tincidunt, lacus dui varius nibh, vitae dignissim tellus eros sed purus. Vivamus erat lectus, aliquam vitae lorem id, vulputate fermentum nibh. Duis elementum dignissim vulputate. Proin eget interdum mauris. Fusce consectetur vehicula enim quis ultrices. 292 | 293 | Aenean nec semper diam. Curabitur vestibulum risus ac efficitur consequat. Cras quis enim vulputate, cursus lorem vel, tristique orci. Nunc condimentum auctor nisi non dapibus. Maecenas scelerisque, odio vitae viverra tempor, eros est tempus justo, et laoreet leo dui nec nisl. Quisque tempus interdum nisl, in bibendum arcu facilisis eu. Integer rhoncus egestas blandit. Aenean ornare lectus ut eleifend imperdiet. Morbi consectetur, odio non imperdiet placerat, sapien leo pretium justo, ut molestie nisi sem ac lectus. Fusce porttitor metus ex, ut interdum neque placerat ut. Proin sed nisl erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque vehicula risus sed luctus bibendum. Etiam vestibulum arcu id lectus sodales, a sollicitudin diam pulvinar. Mauris gravida malesuada nunc quis suscipit. 294 | 295 | Proin sodales ac sem nec congue. Vestibulum maximus est eu consectetur cursus. Quisque in rhoncus nunc. Donec sit amet augue erat. Etiam scelerisque interdum massa molestie convallis. Nulla malesuada ac ex at laoreet. Nulla facilisi. Vivamus mi ante, auctor convallis imperdiet sit amet, eleifend ut erat. In auctor justo lorem, id semper lacus cursus ut. In dictum rutrum magna, non rhoncus augue congue vitae. Sed vehicula eros eu metus porta cursus. Aenean nibh odio, sodales ac leo ullamcorper, feugiat luctus leo. 296 | 297 | In quis lacus quis mauris vulputate fermentum. Fusce convallis urna eget tellus rhoncus cursus. In posuere eu metus id elementum. Suspendisse elementum imperdiet facilisis. Ut lacinia scelerisque lacus, et pellentesque mi posuere id. In ex massa, viverra eu rhoncus ac, commodo ac ex. Vivamus lobortis nisl ac nunc iaculis iaculis. Proin facilisis eget sapien eget venenatis. Ut semper fringilla cursus. Etiam non posuere quam. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur pulvinar ultricies felis viverra blandit. Vestibulum mattis nisl quis justo pellentesque, vitae auctor justo dapibus. 298 | 299 | Donec sit amet egestas mauris. Cras ullamcorper, felis in auctor mattis, turpis nisl condimentum leo, non blandit est magna non felis. Aliquam ultrices, nisl tristique blandit feugiat, sem ipsum pharetra elit, at tempor nulla leo vel sapien. Curabitur accumsan, enim ut volutpat condimentum, enim eros varius magna, feugiat porta lectus sapien vel velit. Morbi iaculis at urna at ornare. Mauris in euismod dui. Duis lacinia tortor sit amet felis pulvinar, in pellentesque nisl aliquam. Praesent placerat dolor sit amet urna fermentum blandit. Proin eu elit a ex suscipit scelerisque. Aliquam vestibulum tristique purus vitae egestas. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec dictum vitae lacus ac eleifend. Morbi quam quam, iaculis nec quam euismod, egestas hendrerit nulla. Donec ultrices leo est, at placerat nulla hendrerit sit amet. 300 | -------------------------------------------------------------------------------- /data-raw/lorem_ipsum.R: -------------------------------------------------------------------------------- 1 | lorem <- readLines("data-raw/lorem") %>% 2 | paste(collapse = " ") 3 | usethis::use_data(lorem, overwrite = TRUE) 4 | 5 | library(tokenizers) 6 | 7 | lorem_words <- lorem %>% 8 | tokenize_words(lowercase = FALSE) %>% 9 | c(recursive = TRUE) 10 | usethis::use_data(lorem_words, overwrite = TRUE) 11 | -------------------------------------------------------------------------------- /data/datalist: -------------------------------------------------------------------------------- 1 | lorem 2 | lorem_words 3 | -------------------------------------------------------------------------------- /data/lorem.rda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/data/lorem.rda -------------------------------------------------------------------------------- /data/lorem_words.rda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/data/lorem_words.rda -------------------------------------------------------------------------------- /dev_history.R: -------------------------------------------------------------------------------- 1 | usethis::use_build_ignore("dev_history.R") 2 | usethis::use_build_ignore("img") 3 | usethis::use_build_ignore("CODE_OF_CONDUCT.md") 4 | usethis::use_build_ignore("LICENSE.md") 5 | usethis::use_build_ignore("README.Rmd") 6 | usethis::use_build_ignore("data-raw") 7 | 8 | usethis::use_git_ignore("docs") 9 | 10 | # doc 11 | usethis::use_readme_rmd() 12 | usethis::use_news_md() 13 | usethis::use_package_doc() 14 | 15 | # CI 16 | use_testthat() 17 | usethis::use_travis() 18 | usethis::use_appveyor() 19 | usethis::use_coverage() 20 | usethis::use_pkgdown() 21 | usethis::use_github_action_check_standard() 22 | usethis::use_github_action("pkgdown") 23 | usethis::use_github_action("test-coverage") 24 | # PR 25 | usethis::pr_fetch(7) 26 | usethis::pr_push() 27 | 28 | # dev 29 | attachment::att_to_description() 30 | devtools::check() 31 | -------------------------------------------------------------------------------- /img/shinipsum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/img/shinipsum.png -------------------------------------------------------------------------------- /img/thinkr-hex-shinipsum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/img/thinkr-hex-shinipsum.png -------------------------------------------------------------------------------- /inst/examples/01_navbar.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(shinipsum) 3 | library(ggplot2) 4 | library(plotly) 5 | ui <- navbarPage( 6 | "A random App", 7 | tabPanel( 8 | "DT", 9 | h2("A Random DT"), 10 | dataTableOutput("data_table")), 11 | tabPanel("Image", 12 | h2("A Random Image"), 13 | plotOutput("image")), 14 | tabPanel("Plot", 15 | h2("A Random Plot"), 16 | plotlyOutput("plot")), 17 | tabPanel("Print", 18 | h2("A Random Print"), 19 | verbatimTextOutput("print")), 20 | tabPanel("Table", 21 | h2("A Random Table"), 22 | tableOutput("table")), 23 | tabPanel("Text", 24 | h2("A Random Text"), 25 | tableOutput("text")) 26 | ) 27 | 28 | server <- function(input, output, session) { 29 | output$data_table <- renderDataTable({ 30 | random_table(10, 5) 31 | }) 32 | output$image <- renderImage({ 33 | random_image() 34 | }) 35 | output$plot <- renderPlotly({ 36 | random_ggplotly() 37 | }) 38 | output$print <- renderPrint({ 39 | random_print("model") 40 | }) 41 | output$table <- renderTable({ 42 | random_table(10, 5) 43 | }) 44 | output$text <- renderText({ 45 | random_text(nwords = 50) 46 | }) 47 | } 48 | shinyApp(ui, server) 49 | -------------------------------------------------------------------------------- /inst/img/10922273715_cfd864963f_z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/10922273715_cfd864963f_z.jpg -------------------------------------------------------------------------------- /inst/img/14776372143_1c0c37e0b7_b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/14776372143_1c0c37e0b7_b.jpg -------------------------------------------------------------------------------- /inst/img/16570899141_42a117420b_k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/16570899141_42a117420b_k.jpg -------------------------------------------------------------------------------- /inst/img/5018415361_61eb195750_o.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/5018415361_61eb195750_o.jpg -------------------------------------------------------------------------------- /inst/img/5019024318_d3cdd1958d_o.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/5019024318_d3cdd1958d_o.jpg -------------------------------------------------------------------------------- /inst/img/9467782090_fa4120cd4c_z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/9467782090_fa4120cd4c_z.jpg -------------------------------------------------------------------------------- /inst/img/duck_170690246_250.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThinkR-open/shinipsum/27aabb21beabd1a02965228634299920122bd9ca/inst/img/duck_170690246_250.jpg -------------------------------------------------------------------------------- /man/ipsum_examples.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/example.R 3 | \name{ipsum_examples} 4 | \alias{ipsum_examples} 5 | \title{Get a shinipsum example} 6 | \usage{ 7 | ipsum_examples(which = NULL) 8 | } 9 | \arguments{ 10 | \item{which}{The example to run. If empty, all the available examples are listed.} 11 | } 12 | \value{ 13 | A path to the example. 14 | } 15 | \description{ 16 | Get a shinipsum example 17 | } 18 | \examples{ 19 | ipsum_examples() 20 | } 21 | -------------------------------------------------------------------------------- /man/lorem.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/datasets.R 3 | \docType{data} 4 | \name{lorem} 5 | \alias{lorem} 6 | \title{Lorem text} 7 | \format{ 8 | An object of class \code{character} of length 1. 9 | } 10 | \usage{ 11 | lorem 12 | } 13 | \description{ 14 | A long lorem ipsum text 15 | } 16 | \keyword{datasets} 17 | -------------------------------------------------------------------------------- /man/lorem_words.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/datasets.R 3 | \docType{data} 4 | \name{lorem_words} 5 | \alias{lorem_words} 6 | \title{Lorem test as vector} 7 | \format{ 8 | An object of class \code{character} of length 13657. 9 | } 10 | \usage{ 11 | lorem_words 12 | } 13 | \description{ 14 | A long vector of words 15 | } 16 | \keyword{datasets} 17 | -------------------------------------------------------------------------------- /man/pipe.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/utils-pipe.R 3 | \name{\%>\%} 4 | \alias{\%>\%} 5 | \title{Pipe operator} 6 | \usage{ 7 | lhs \%>\% rhs 8 | } 9 | \description{ 10 | See \code{magrittr::\link[magrittr]{\%>\%}} for details. 11 | } 12 | \keyword{internal} 13 | -------------------------------------------------------------------------------- /man/random_DT.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/DataTable.R 3 | \name{random_DT} 4 | \alias{random_DT} 5 | \title{A Random DT} 6 | \usage{ 7 | random_DT( 8 | nrow, 9 | ncol, 10 | type = c("random", "numeric", "character", "numchar"), 11 | ... 12 | ) 13 | } 14 | \arguments{ 15 | \item{nrow}{number of row of the output} 16 | 17 | \item{ncol}{number of cols of the output} 18 | 19 | \item{type}{type of the columns, can be "random", "numeric", "character", "numchar". Default is random.} 20 | 21 | \item{...}{arguments to be passed to DT::datatable} 22 | } 23 | \value{ 24 | a DT 25 | } 26 | \description{ 27 | This function creates a random DT::datatable, and can be passed into \code{renderDT} & \code{DTOutput}. 28 | } 29 | -------------------------------------------------------------------------------- /man/random_dygraph.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/dygraphs.R 3 | \name{random_dygraph} 4 | \alias{random_dygraph} 5 | \title{A Random Dygraph} 6 | \usage{ 7 | random_dygraph(...) 8 | } 9 | \arguments{ 10 | \item{...}{args passed to \code{dygraph}} 11 | } 12 | \value{ 13 | a dygraph 14 | } 15 | \description{ 16 | This function returns a dygraph object, which can be passed to \code{renderDygraph} and \code{dygraphOutput} 17 | } 18 | -------------------------------------------------------------------------------- /man/random_ggplot.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/Plot.R 3 | \name{random_ggplot} 4 | \alias{random_ggplot} 5 | \title{A Random ggplot} 6 | \usage{ 7 | random_ggplot( 8 | type = c("random", "point", "bar", "boxplot", "col", "tile", "line", "bin2d", 9 | "contour", "density", "density_2d", "dotplot", "hex", "freqpoly", "histogram", 10 | "ribbon", "raster", "tile", "violin") 11 | ) 12 | } 13 | \arguments{ 14 | \item{type}{type of the geom. Can be any of "random", "point", "bar", "boxplot","col", "tile", "line", "bin2d", "contour", "density", "density_2d", "dotplot", "hex", "freqpoly", "histogram", "ribbon", "raster", "tile", "violin" and defines the geom of the ggplot. Default is "random", and chooses a random geom for you.} 15 | } 16 | \value{ 17 | a ggplot 18 | } 19 | \description{ 20 | This function returns a ggplot object, which can be passed to \code{renderPlot} and \code{plotOutput} 21 | } 22 | -------------------------------------------------------------------------------- /man/random_ggplotly.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/Plot.R 3 | \name{random_ggplotly} 4 | \alias{random_ggplotly} 5 | \title{A Random ggplotly} 6 | \usage{ 7 | random_ggplotly(...) 8 | } 9 | \arguments{ 10 | \item{...}{arg to pass to \code{random_ggplot}.} 11 | } 12 | \value{ 13 | a ggplotly 14 | } 15 | \description{ 16 | This function returns a ggplotly object, which can be passed to \code{renderPlotly} and \code{plotlyOutput} 17 | } 18 | -------------------------------------------------------------------------------- /man/random_image.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/Image.R 3 | \name{random_image} 4 | \alias{random_image} 5 | \title{A Random Image} 6 | \usage{ 7 | random_image() 8 | } 9 | \value{ 10 | an image 11 | } 12 | \description{ 13 | This function returns a random image that can be passed into \code{renderImage} and \code{plotOutput}. 14 | } 15 | -------------------------------------------------------------------------------- /man/random_lm.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/LinearModel.R 3 | \name{random_lm} 4 | \alias{random_lm} 5 | \title{A Random Linear Model} 6 | \usage{ 7 | random_lm(nobs = 100, nx = 2) 8 | } 9 | \arguments{ 10 | \item{nobs}{Numeric. number of observation} 11 | 12 | \item{nx}{Numeric. number of variables. Should be lower that nobs} 13 | } 14 | \value{ 15 | a model output 16 | } 17 | \description{ 18 | This function returns a model which can be passed to renderText or renderTable if pre-processed appropriately 19 | } 20 | -------------------------------------------------------------------------------- /man/random_print.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/Print.R 3 | \name{random_print} 4 | \alias{random_print} 5 | \title{A Random print output} 6 | \usage{ 7 | random_print(type = c("character", "numeric", "integer", "model", "table")) 8 | } 9 | \arguments{ 10 | \item{type}{type of the output ("character", "numeric", "model", "table")} 11 | } 12 | \value{ 13 | a random print 14 | } 15 | \description{ 16 | This function returns a random print output that can be passed to \code{renderPrint} and \code{verbatimTextOutput}. 17 | } 18 | -------------------------------------------------------------------------------- /man/random_table.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/Table.R 3 | \name{random_table} 4 | \alias{random_table} 5 | \title{A Random Table} 6 | \usage{ 7 | random_table(nrow, ncol, type = c("random", "numeric", "character", "numchar")) 8 | } 9 | \arguments{ 10 | \item{nrow}{number of row of the output} 11 | 12 | \item{ncol}{number of cols of the output} 13 | 14 | \item{type}{type of the columns, can be "random", "numeric", "character", "numchar". Default is random.} 15 | } 16 | \value{ 17 | a table 18 | } 19 | \description{ 20 | This function returns a table that can be passed to \code{renderTable} and \code{tableOutput}. 21 | } 22 | -------------------------------------------------------------------------------- /man/random_text.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/Text.R 3 | \name{random_text} 4 | \alias{random_text} 5 | \title{A Random Lorem Ipsum} 6 | \usage{ 7 | random_text(nchars = NULL, nwords = NULL, offset = 0) 8 | } 9 | \arguments{ 10 | \item{nchars}{number of characters. One of the two params should be left NULL.} 11 | 12 | \item{nwords}{number of words to return. One of the two params should be left NULL.} 13 | 14 | \item{offset}{number of characters or words to offset the result by. Defaults to 0.} 15 | } 16 | \value{ 17 | a text 18 | } 19 | \description{ 20 | A Random Lorem Ipsum 21 | } 22 | -------------------------------------------------------------------------------- /man/shinipsum-package.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shinipsum-package.R 3 | \docType{package} 4 | \name{shinipsum-package} 5 | \alias{shinipsum} 6 | \alias{shinipsum-package} 7 | \title{shinipsum: Lorem-Ipsum-like Helpers for fast Shiny Prototyping} 8 | \description{ 9 | Prototype your shiny apps quickly with these 10 | Lorem-Ipsum-like Helpers. 11 | } 12 | \seealso{ 13 | Useful links: 14 | \itemize{ 15 | \item \url{https://github.com/Thinkr-open/shinipsum} 16 | \item Report bugs at \url{https://github.com/Thinkr-open/shinipsum/issues} 17 | } 18 | 19 | } 20 | \author{ 21 | \strong{Maintainer}: Colin Fay \email{contact@colinfay.me} (\href{https://orcid.org/0000-0001-7343-1846}{ORCID}) 22 | 23 | Authors: 24 | \itemize{ 25 | \item Sebastien Rochette \email{sebastien@thinkr.fr} (\href{https://orcid.org/0000-0002-1565-9313}{ORCID}) 26 | } 27 | 28 | Other contributors: 29 | \itemize{ 30 | \item ThinkR [copyright holder, funder] 31 | } 32 | 33 | } 34 | \keyword{internal} 35 | -------------------------------------------------------------------------------- /shinipsum.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: No 4 | SaveWorkspace: No 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | StripTrailingWhitespace: Yes 17 | 18 | BuildType: Package 19 | PackageUseDevtools: Yes 20 | PackageInstallArgs: --no-multiarch --with-keep.source 21 | PackageRoxygenize: rd,collate,namespace 22 | -------------------------------------------------------------------------------- /tests/testthat.R: -------------------------------------------------------------------------------- 1 | library(testthat) 2 | library(shinipsum) 3 | 4 | test_check("shinipsum") 5 | -------------------------------------------------------------------------------- /tests/testthat/test-dt.R: -------------------------------------------------------------------------------- 1 | context("test-dt.R") 2 | 3 | expect_ncol <- function(a, b){ 4 | expect_equal( 5 | ncol(a) - 1, 6 | b 7 | ) 8 | } 9 | expect_nrow <- function(a, b){ 10 | expect_equal( 11 | nrow(a), 12 | b 13 | ) 14 | } 15 | 16 | test_that("DT works", { 17 | lapply( 18 | 1:100, function(x){ 19 | a <- random_DT(10, 15) 20 | expect_nrow(a$x$data, 10) 21 | expect_ncol(a$x$data, 15) 22 | } 23 | ) 24 | }) 25 | -------------------------------------------------------------------------------- /tests/testthat/test-dygraph.R: -------------------------------------------------------------------------------- 1 | context("test-dygraph") 2 | 3 | test_that("dygraph creation works", { 4 | lapply( 5 | 1:100, function(x){ 6 | a <- random_dygraph() 7 | expect_is(a, "dygraphs") 8 | expect_is(a, "htmlwidget") 9 | expect_length(a, 8) 10 | } 11 | ) 12 | }) 13 | 14 | -------------------------------------------------------------------------------- /tests/testthat/test-examples.R: -------------------------------------------------------------------------------- 1 | examples_shinipsum <- list.files( 2 | system.file("examples", package = "shinipsum") 3 | ) 4 | 5 | test_that("ggplot creation works", { 6 | expect_equal(ipsum_examples(), examples_shinipsum) 7 | }) 8 | -------------------------------------------------------------------------------- /tests/testthat/test-ggplot.R: -------------------------------------------------------------------------------- 1 | test_that("ggplot creation works", { 2 | expected_length <- length(ggplot2::ggplot()) 3 | lapply( 4 | 1:100, function(x){ 5 | a <- random_ggplot() 6 | expect_is(a, "gg") 7 | expect_is(a, "ggplot") 8 | expect_length(a, expected_length) 9 | } 10 | ) 11 | 12 | }) 13 | -------------------------------------------------------------------------------- /tests/testthat/test-image.R: -------------------------------------------------------------------------------- 1 | test_that("ggplot creation works", { 2 | lapply( 3 | 1:100, function(x){ 4 | a <- random_image() 5 | expect_true(file.exists(a$src)) 6 | } 7 | ) 8 | }) 9 | -------------------------------------------------------------------------------- /tests/testthat/test-lm.R: -------------------------------------------------------------------------------- 1 | context("test-lm.R") 2 | 3 | test_that("lm creation works", { 4 | lapply( 5 | 50:100, function(x){ 6 | a <- random_lm(x, 18) 7 | expect_is(a, "lm") 8 | } 9 | ) 10 | 11 | }) 12 | -------------------------------------------------------------------------------- /tests/testthat/test-print.R: -------------------------------------------------------------------------------- 1 | context("test-print.R") 2 | 3 | test_that("print works", { 4 | lapply( 5 | 1:100, function(x){ 6 | expect_is(random_print(), "character") 7 | expect_is(random_print("numeric"), "numeric") 8 | expect_is(random_print("integer"), "integer") 9 | expect_is(random_print("table"), "data.frame") 10 | } 11 | ) 12 | }) 13 | -------------------------------------------------------------------------------- /tests/testthat/test-random.R: -------------------------------------------------------------------------------- 1 | context("test-random.R") 2 | 3 | expect_ncol <- function(a, b){ 4 | expect_equal( 5 | ncol(a), 6 | b 7 | ) 8 | } 9 | expect_nrow <- function(a, b){ 10 | expect_equal( 11 | nrow(a), 12 | b 13 | ) 14 | } 15 | 16 | test_that("random works", { 17 | lapply( 18 | 1:100, function(x){ 19 | expect_length(vec_ipsum(10), 10) 20 | expect_length(vec_ipsum(100), 100) 21 | expect_nrow(random_ipsum(10, 10), 10) 22 | expect_nrow(random_ipsum(100, 10), 100) 23 | expect_ncol(random_ipsum(10, 10), 10) 24 | expect_ncol(random_ipsum(10, 100), 100) 25 | }) 26 | }) 27 | -------------------------------------------------------------------------------- /tests/testthat/test-text.R: -------------------------------------------------------------------------------- 1 | context("test-text.R") 2 | 3 | expect_nchar <- function(a, b){ 4 | expect_equal( 5 | nchar(a), 6 | b 7 | ) 8 | } 9 | 10 | test_that("nchar works", { 11 | lapply( 12 | 1:100, function(x){ 13 | expect_nchar( 14 | random_text(nchars = 10), 15 | 10 16 | ) 17 | expect_nchar( 18 | random_text(nchars = 100), 19 | 100 20 | ) 21 | expect_nchar( 22 | random_text(nchars = 42), 23 | 42 24 | ) 25 | 26 | expect_nchar( 27 | random_text(nwords = 12), 28 | 86 29 | ) 30 | expect_nchar( 31 | random_text(nwords = 100), 32 | 650 33 | ) 34 | expect_nchar( 35 | random_text(nwords = 800), 36 | 5244 37 | ) 38 | }) 39 | }) 40 | 41 | test_that("offset works", { 42 | lapply( 43 | 1:100, function(x){ 44 | expect_nchar( 45 | random_text(nchars = 10, offset = 10), 46 | 10 47 | ) 48 | expect_nchar( 49 | random_text(nchars = 100, offset = 20), 50 | 100 51 | ) 52 | expect_nchar( 53 | random_text(nchars = 42, offset = 20), 54 | 42 55 | ) 56 | 57 | expect_nchar( 58 | random_text(nwords = 12, offset = 20), 59 | 51 60 | ) 61 | expect_nchar( 62 | random_text(nwords = 100, offset = 20), 63 | 526 64 | ) 65 | expect_nchar( 66 | random_text(nwords = 800, offset = 20), 67 | 5105 68 | ) 69 | }) 70 | }) 71 | --------------------------------------------------------------------------------