---
title: "IDS theme for revealjs"
subtitle: "a demo"
author: Marc Kupietz
institute: "IDS Mannheim"
date: "Mannheim, 2023-10-08"
output: 
  revealjs::revealjs_presentation:
    reveal_plugins: 
      - search
      - zoom
      - notes
      - chalkboard
      - menu
    reveal_options:
      chalkboard:
        theme: chalkboard
        toggleNotesButton: true
      menu:
        numbers: true
lang: en
bibliography: references.bib
csl: "https://raw.githubusercontent.com/ICLC-10/Zotero/master/styles/ICLC-10.csl"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
library(idsThemeR)
library(RKorAPClient)
library(highcharter)
library(tidyverse)
source("https://gitlab.ids-mannheim.de/ICC/2023-07-20-ICC-ICLC10/-/raw/master/R/common.R")
```

## R Markdown

This is an R Markdown presentation. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown [@R-rmarkdown] see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document.

## Slide with Bullets
### Subheading

- Bullet 1
- Bullet 2
- Bullet 3

<aside class="notes">
Here are some notes.
</aside>

## Slide with R Output

```{r cars, echo = TRUE}
summary(cars)
```

## Slide with Plot

```{r pressure}
plot(pressure)
```

## Registered Users
### (for COSMAS II and KorAP)

```{r registrations, message=F, warning=F}
registrierungen <-
  read_tsv("http://www.ids-mannheim.de/cosmas2/projekt/intstats/registrierungen.csv") %>%
  add_column(group = "registered users")

  hc <- registrierungen %>%
    hchart("line", hcaes(x=date, y=registered, group=group)) %>%
    hc_add_theme(hc_theme_ids_light()) %>%
    hc_yAxis(title=list(text="")) %>%
    hc_xAxis(title=list(text="")) %>%
     hc_legend(element_blank()) %>%
    hc_size(height=500, width=900)
  hc

```

## Light Verb Constructions
### with *take* (from ICC-ENG)

```{r take-icc, fig.cap="Results of a co-occurrence analysis of *take* + NOUN in [ICC-ENG](https://korap.ids-mannheim.de/instance/icc), using the RKorAPClient  [@kupietz_rkorapclient_2020] package."}
take_ca_icc <-
  collocationAnalysis(
    icc_con("eng"),
    "focus({[ud/l=take]} [ud/p=NOUN])",
    leftContextSize = 0,
    rightContextSize = 1,
    minOccur = 2,
    addExamples = T
  ) %>% head(7)

take_ca_icc %>% show_table()
```

## Source Code
### Collocation Analysis

```R
  df <- collocationAnalysis(
    icc_con("eng"),
    "focus({[ud/l=take]} [ud/p=NOUN])",
    leftContextSize = 0,
    rightContextSize = 1,
    minOccur = 2,
    addExamples = T
  )
```
  
## Source Code
### Print Collocation Analysis as DataTable

```R
df %>%
 mutate(Collocate=sprintf('<a href="%s">%s</a>', 
  webUIRequestUrl, collocate)) %>%
 mutate(example=str_replace(example, 
  ".*(\\W+\\w+\\W+\\w+\\W+<mark.*/mark>.*)", "\\1")) %>%
 mutate(example=str_replace(example, 
  "(.*<mark.*/mark>\\W+\\w+\\W+\\w+).*", "\\1")) %>%
 rowwise() %>%
 select(Collocate, Example, logDice, pmi, ll) %>%
 datatable(escape = F) %>%
 formatRound(columns=~logDice + pmi + ll, digits=2)
```

# References

