---
title: "Selectors"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Selectors}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

library(linne)
```

## Introduction

The [Get Started](get-started.html) guide present basic selectors which are plenty enough in most cases. However, linne comes with some more sophisticated ones if needed.

## Basics

Below are the basic selectors available in linne.

* `sel_id()` - Select an object by its id, e.g.: `sel_id('btn')` selects `shiny::actionButton('btn', 'Button')`.
* `sel_all()` - Selects everything, will apply a change to every element of the page.
* `sel_input()` - Selects an input by its id, e.g.: `sel_id('txt')` selects `shiny::textInput('txt', 'Text')`.
* `sel_class()` - Select all elements bearing a specific class, e.g.: `sel_class('cls')`, selects `shiny::h1('hello', class = 'cls')`.
* `sel_tag()` - Select all tags, e.g.: `sel_tag('p')` selects `p('hello')`.
* `sel_attr()` - Select all tags with a specific attribute.

__Examples__

```{r}
sel_id("btn")
sel_class("aClass")
```

## Operators

You can also use some special operators to broaden or narrow down the selection.

* `%child%` - Selects elements where right hand is child of left hand, e.g.: `sel_tag('div') %child% sel_class('aClass')` selects elements with `aClass` who are direct children of `div` tags.
* `%or%` - Select left hand or right hand, e.g.: `sel_id('myId') %or% sel_class('myClass')` will select both the element with the id and elements with the class. Ideal to select and apply changes multiple elements at once.
* `%with%` - Left hand selector with right hand selector, e.g.: `sel_tag('div') %with% sel_class('aClass')` selects a `div` with a class of `aClass`. Ideal to narrow down the selection.

__Examples__

```{r}
sel_id('myId') %or% sel_class('myClass')
sel_tag('div') %with% sel_class('aClass')
```

## When

You can also use the `when_*` family of functions to narrow the selection based on the state of the element.

* `when_active()` - Only select only active links.
* `when_hover()` - Only select when the element is hovered.
* `when_focus()` - Only select when the elements is focused.

__Examples__

```{r}
sel_tag("a") # select all a tag
sel_tag("a") %>% when_active() # selects a tags that are active
sel_id("myId") %>% when_hover()
```
