# Home

Hi there 👋&#x20;

First of all, thank you for your interest in our products!

Here you will find description, screenshots and documentation for all our Bubble plugins and templates. We are working hard to always keep this place up to date.&#x20;

> Here is our [Contributor Profile page](https://bubble.io/contributor/digital-eye-1608928570771x248653587334472640) on Bubble

If you have any questions, don't hesitate to contact us: <bubble@digital-bird.com>


# How to add a custom class or an ID to a Bubble element

Classify plugin allows you to add a CSS class name, ID, attribute etc to your Bubble elements.

1. In your project settings, under General, make sure "Expose the option to add an ID attribute to HTML elements" is enabled.&#x20;

![](/files/-MXg-2OYxjSrjULXUAa8)

2\. Install Plugin Classify

![](/files/-MXg-Ao-dMtUzF0M2-Qx)

3\. Use it

Now you have access to the "ID Attribute" field. Use a special format to add a class name, ID or attribute to your Bubble element.

On the screenshot below we are adding id "section1" and a class name "spy-item":

![](/files/-MXg-DqsbOffPHucNqB9)

> Plugin page: <https://bubble.io/plugin/classify-1568299250417x684448291308175400>

> Forum: <https://forum.bubble.io/t/classify-a-tiny-plugin-that-brings-css-power-to-bubble/67741>


# Advanced Dynamic Tables 🚀

Advanced Dynamic Tables for Bubble using DataTables.js

## 🔗 Links

> [Demo 1(Default theme)](https://digitaleyedemo.bubbleapps.io/datatable) | [Editor](https://bubble.io/page?type=page\&name=datatable\&id=digitaleyedemo\&tab=tabs-1)

> [Demo 2 (Semantic UI theme)](https://digitaleyedemo.bubbleapps.io/datatable-semanticui) | [Editor](https://bubble.io/page?type=page\&name=datatable-semanticui\&id=digitaleyedemo\&tab=tabs-1)

> [Demo 3 (5000 records)](https://digitaleyedemo.bubbleapps.io/version-test/datatable-large) | [Editor](https://bubble.io/page?type=page\&name=datatable-large\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin Page](https://bubble.io/plugin/excel-like-data-table-and-grid-1617804294068x151014387640434700)

> [Forum](https://forum.bubble.io/t/plugin-release-advanced-dynamic-tables-for-bubble-excel-like/145600)

## ℹ️ Introduction

Populate your table with data and update data dynamically at any time. Update any table's option dynamically without page reloads. Includes sorting, search and pagination out of the box.

## 🔥 Main Features

* Two styling themes
* Conditional formatting 🎨
* Large data support
* Row selection
* Columns reordering
* Populate your table with data dynamically at any time without page reloads
* Responsive table automatically adapts to any screen size
* Multiple styling options: hoverable rows, compact mode, striped rows, borders etc
* 84 languages included
* Row click event returns row id so you can edit / remove your data
* Advanced settings (enable/disable search for some columns, enable/disable sorting for some columns, ...)

Please check our demos and documentation for more features!

## 📚 Documentation

### ➡️ Plugin actions, events and states

Actions:

* Populate: provide data to the table
* Export: export table data to CSV
* Set Language: Change table language
* Refresh table
* Destroy: remove the table
* Order column: choose a column to sort
* Add Conditional Formatting
* Clear Conditional Formatting

Events:

* Row clicked
* Row selected
* Row deselected
* Column reordered
* Table drawn: table fully rendered on the page

States:

* Clicked row (text): row unique id
* Search term (text): current value in the search box
* Selected rows: list of selected rows

### ➡️ Add table on the page

Install the plugin and add a *DataTable* element on the page.

![](/files/-MZ9lMLl9iBdzVdnO-y1)

You have a bunch of options to customize your table. Most of them are dynamic which means you can change them at any time in your app (just like in our demo).

|                                | Option                    | Type         | Description                                                                                                                                                                                                                                                                                                           |
| ------------------------------ | ------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **General**                    | Theme                     | Dropdown     | Plugin supports 2 styling themes: Default and Semantic UI                                                                                                                                                                                                                                                             |
|                                | Language                  | Dropdown     | Table captions language                                                                                                                                                                                                                                                                                               |
| **Search**                     | Enable search             | Yes/No       | Enable or disable table searching                                                                                                                                                                                                                                                                                     |
|                                | Limit searchable cols     | String       | Disable search on the data in certain columns. Comma-separated column indexes: "1,2,4"                                                                                                                                                                                                                                |
| **Ordering**                   | Enable ordering           | Yes/No       | Enable or disable column sorting                                                                                                                                                                                                                                                                                      |
|                                | Limit orderable cols      | String       | Disable ordering for certain columns. Comma-separated column indexes: "1,2,4"                                                                                                                                                                                                                                         |
|                                | Default ordering (column) | Number       | Column index (1,2 etc) that will be ordered by default. Can be empty                                                                                                                                                                                                                                                  |
|                                | Ascending order           | Yes/No       | 'Yes' for Ascending order; 'No' for Descending order (used for default ordering)                                                                                                                                                                                                                                      |
| **Pagination**                 | Enable pagination         | Yes/No       | Enable or disable table pagination                                                                                                                                                                                                                                                                                    |
|                                | Length change             | Yes/No       | Feature control the end user's ability to change the paging display length of the table                                                                                                                                                                                                                               |
|                                | Nb of records per page    | String       | Possible options to choose for the number of records per page. Comma-separated values: "25,50,100". "Show All" option is inserted automatically.                                                                                                                                                                      |
|                                | "Show all" localization   | String       | If the custom number of results per page is defined above, this field allows to translate the "Show All" option if need.                                                                                                                                                                                              |
| **Row selection**              | Selectable rows           | Dropdown     | Possible values are : Disabled, Single, Multi, OS. Multi and OS allows to select multiple rows in a slightly different way                                                                                                                                                                                            |
|                                | Blur selection            | Checkbox     | Deselect the selected items automatically when the user moves focus outside of the table                                                                                                                                                                                                                              |
| **Other**                      | Show info                 | Yes/No       | Show/hide table information display field (number of entries)                                                                                                                                                                                                                                                         |
|                                | Reorderable columns       | Yes/No       | Enable/Disable column sorting                                                                                                                                                                                                                                                                                         |
|                                | Hidden columns            | String       | Columns to hide. Format: "1,2,4" (comma-separated column indexes)                                                                                                                                                                                                                                                     |
|                                | Horizontal scrolling      | Yes/No       | Enable horizontal scrolling. When a table is too wide to fit into a certain layout, or you have a large number of columns in the table, you can enable horizontal (x) scrolling to show the table in a viewport, which can be scrolled. This is particularly useful when you want to show the table on mobile devices |
|                                | Large data                | Checkbox     | You may want to use this mode to render thousands of rows                                                                                                                                                                                                                                                             |
| **Styles (all themes)**        | Striped rows              | Yes/No       | Changes background color of all the odd rows in the table. More info: <https://datatables.net/examples/styling/stripe.html>                                                                                                                                                                                           |
|                                | Cell border               | Yes/No       | Strong delineation between individual cells. More info: <https://datatables.net/examples/styling/cell-border.html>                                                                                                                                                                                                    |
|                                | Compact mode              | Yes/No       | Reduces the amount of white-space in the default styling, increasing the information density on screen. More info: <https://datatables.net/examples/styling/compact.html>                                                                                                                                             |
|                                | Row selected              | Color picker | Row selected color                                                                                                                                                                                                                                                                                                    |
|                                | Control text              | Color picker | Control text color                                                                                                                                                                                                                                                                                                    |
| **Styles (Default theme)**     | Scroll collapse           | Yes/No       | Allow the table to reduce in height when a limited number of rows are shown. More info: <https://datatables.net/reference/option/scrollCollapse>                                                                                                                                                                      |
|                                | Hoverable rows            | Yes/No       | Highlight a row when the mouse is hovered over it. More info: <https://datatables.net/examples/styling/hover.html>                                                                                                                                                                                                    |
|                                | Order column              | Yes/No       | Highligth the columns to indicate the sorting. More info: <https://datatables.net/examples/styling/order-column.html>                                                                                                                                                                                                 |
|                                | Row borders               | Yes/No       | Strong delineation between rows. More info: <https://datatables.net/examples/styling/row-border.html>                                                                                                                                                                                                                 |
| **Styles (Semantic UI theme)** | Inverted                  | Yes/No       | Invert table colors                                                                                                                                                                                                                                                                                                   |
|                                | Table color               | String       | A table can be given a color to distinguish it from other tables. Possible values are: red \| orange \| yellow \| olive \| green \| teal \| blue \| violet \| purple \| pink \| brown \| grey \| black                                                                                                                |

### ➡️ Populate table with data

You should populate your table in the workflow. Call the "Populate" action (for example, from the "Page is loaded" event):

![](/files/-MXmbQTXONBl7w_zzrRk)

Define all the **column** names and data. Please note that the column data must be a string separated by the **","** sequence (comma between double quotes).

**Row IDs** field is optional but if you are planning to use the "Row clicked" event (see below) you must provide it. It defines a unique ID for each row. Clicking on a row will trigger the "Row clicked" event which will provide a row id value.

### ➡️ Update table data

Simply call the "Populate" action anytime when your source data is changed.

### ➡️ Themes and Styling

Plugin supports 2 themes: Default and Semantic UI. It also supports many styling options defined above.

Check our [Demo1(Default theme)](https://digitaleyedemo.bubbleapps.io/datatable) and [Demo2 (Semantic UI theme)](https://digitaleyedemo.bubbleapps.io/datatable-semanticui)  to check how both themes look like.

### ➡️ Export table data to a file

Call the "Export" action from your Workflow:&#x20;

![](/files/-MXmamGkMRoIP7cKcQ4S)

Choose a filename and export format. Only CSV format is available at this moment. We have planned to add exporting to PDF very soon!

### ➡️ Row click event

To use this event, you need to provide the "Row IDs" field when populating your table with data. Therefore each of your rows will have a unique ID.

Clicking on a row will produce an event "**Row clicked**" so you can catch it in the workflow:

![](/files/-MXm_XyYMIhlDjvBPwhT)

Now you can access the "**Clicked row**" state with the row id:

![](/files/-MXm_pjuGDxUJNEJFoZE)

### ➡️ Search Term state

You can access the current search term ("new york" on the image below) by reading the "Search Term" state.

![](/files/-MY14erl9bGjFvg6s0Ua)

### ➡️ Conditional Formatting

Conditional formatting allows you to automatically apply formatting: font colors, background colors, font weight to one or more cells based on the cell value. To do this, you’ll need to create a conditional formatting rule.

Supported operations: =, <, >, !=, <=, >=, contains, doesn’t contain, startsWith, endsWith

Supported styles: font color, background color, bold font

1\. Call the “Add Conditional Formatting” action, provide a column index, condition (operation + value to compare) and styles

![](/files/-MZP9hhJ4WlV8ZLdWfi6)

2\. Add one or several conditions to one or several columns

3\. Call the “Refresh” action

![](/files/-MZP9k_P5vxRFOaIWZIT)

Result:

![](/files/-MZP9pKZsaa2zMpD-VXp)

Check out our [DEMO 1](https://digitaleyedemo.bubbleapps.io/datatable) to see it in action.

**Related action**: Clear conditional formatting

## 🙋‍♀️ FAQ ⁉️

### **Q: Why my data is not showing?**

**A:** If your data source is Bubble Database, first of all check your privacy rules. Also you can try to render the same set of the data (or just a number of found items) in another widget (text box / repeating group etc) to verify that you actually have access to the data.

![](/files/-MZP6ddCdU9Da5pQmlK7)

If it doesn't help, most likely you should check the format of the provided data for every column (refer to the [Populate table with data](https://bubble.digital-bird.com/plugins/tables-grids-excel#populate-table-with-data) section)

### **Q: Can I add formatting for the cells data?**

**A:** The plugin supports HTML code as the cells value. As long as you can generate HTML data, you are able to customize your cells:

![](/files/-MZP8_J6Q4abB3IKJgSL)


# Advanced Editable Tables  ✏️

Spreadsheet / Excel like tables for Bubble supporting formulas and different data types

## 🔗 Links

> **Demo 1** (Data Types): [Demo](https://editable.bubbleapps.io/version-test) | [Editor](https://bubble.io/page?type=page\&name=index\&id=editable\&tab=tabs-1)

> **Demo 2** (Spreadsheet like Google Sheets / Excel): [Demo](https://editable.bubbleapps.io/version-test/spreadsheet) | [Editor](https://bubble.io/page?type=page\&name=spreadsheet\&id=editable\&tab=tabs-1)

> [Plugin Page](https://bubble.io/plugin/editable-table-pro--excel-like-1619298395010x967154588765126700)

> [Forum](https://forum.bubble.io/t/editabe-tables-with-formulas-online-spreadsheet/150132)

## 🔥 Main Features

* Can be used like a static read-only or editable table
* Create professional Excel-like and Google Sheets-like spreadsheets
* Formulas support
* Powerful cells. It can contain text, html, number, image, checkbox, radio button, dropdown, calendar...
* Cells HTML code support
* Export data to CSV
* Context menu support
* Dynamically add / remove column and rows
* Columns reordering
* Responsive table automatically adapts to any screen size
* Sorting, Searching, Pagination and more

## 📚 Documentation

### ➡️ Quick Start

Adding a table is simple and straightforward.

1. Install the plugin and add an Editable Table element on your page:

![](/files/-M_57y8Uv_COd2eghAjw)

2\. In your Workflow (for example, when the Page is loaded event is triggered) insert your data column by column respecting the data type. For example, for a *text data* column:&#x20;

![](/files/-M_58gdvf9IM_caP9XhA)

The most important field here is the "Data Source". Just provide a list of text values to be shown in the column.

The process of adding any other data type is very similar and straghtforward. Below you will find detailed fields description and full list of plugin events, actions and states.

### ➡️ Editable Table Element Fields

![](/files/-M_5JcKaOYGZRJlHE5_1)

| Field                       | Type   | Description                                                                                                |
| --------------------------- | ------ | ---------------------------------------------------------------------------------------------------------- |
| Sorting                     | Yes/No | Enable / Disable column sorting                                                                            |
| Pagination                  | Number | Default number of rows per page. Put "0" to disable pagination                                             |
| Pagination options          | String | List of comma-separated values: "10,30,50". Pagination options not shown if this value is empty            |
| Search                      | Yes/No | Enable / Disable table search                                                                              |
| Default column width        | Number | This value can be changed in the insert column action                                                      |
| Column dragging             | Yes/No | Movable columns (change order of columns)                                                                  |
| Column resize               | Yes/No | User can change the column width                                                                           |
| Row resize                  | Yes/No | User can change the row height                                                                             |
| Editable                    | Yes/No | Enable / Disable cells editing. It's also possible to make some columns read-only                          |
| Fullscreen                  | Yes/No | Table fullscreen mode                                                                                      |
| Context menu                | Yes/No | Enable / Disable context menu (right mouse click)                                                          |
| Enable paste                | Yes/No | Pasting data in cells                                                                                      |
| CSV Filename                | String | This filename will be used when table data will be exported to a CSV. Do not include the ".csv" extension. |
| Include headers on download | Yes/No | Include (or not) column headers when exporting to a CSV                                                    |

### ➡️ Plugin Events and States

| Event            | Related States                                                                                                                                                             |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cell edited      | <p></p><ul><li>edited\_value</li><li>edited\_col\_id</li><li>edited\_col\_title</li><li>edited\_row\_index</li><li>edited\_record\_id</li><li>edited\_col\_index</li></ul> |
| Rows inserted    | <p></p><ul><li>row\_inserted\_after\_ind</li><li>row\_inserted\_count</li></ul>                                                                                            |
| Columns inserted | <p></p><ul><li>col\_inserted\_after\_ind</li><li>col\_inserted\_count</li></ul>                                                                                            |
| Rows deleted     | <p></p><ul><li>row\_deleted\_from</li><li>row\_deleted\_count</li></ul>                                                                                                    |
| Columns deleted  | <p></p><ul><li>col\_deleted\_from</li><li>col\_deleted\_count</li></ul>                                                                                                    |
| Table updated    | This event triggers after any update: cell edit, row added/removed, undo/redo/paste etc                                                                                    |

**Other States (accessible at any time):**

* *rows\_nb*: current number of rows in the table
* *columns\_nb*: current number of columns in the table
* *data*: Table's data array (row by row)

### ➡️ Plugin Actions

**Add column actions:**

* Add column: Text
* Add column: Numeric
* Add column: Image
* Add column: Checkbox
* Add column: Color
* Add column: Dropdown
* Add column: Calendar
* Add column: Radio

**Data management actions:**

* Clear all: Removes all the data, rows and columns
* Show index column / Hide index column
* Show column / Hide column
* Add empty rows / Add empty columns
* Set dat&#x61;**:** Destroy the table and rebuild with the provided data

**Other actions:**

* Export CSV

### ➡️ Special Formulas

Plugin uses spreadsheet-like formulas (=A1\*A2, =A1+A2 etc) and a few special formulas described in this section.

| Formula                | Description                                                  | Params                                                                                                 |
| ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| =PROGRESS(int, string) | Create a progressbar                                         | <p>@Param int percent - Value from 0-100</p><p>@Param string color - Hex color for the progressbar</p> |
| =RATING(int)           | Create a stars rating                                        | @Param int value - Rate value from 0-5                                                                 |
| =COLUMN()              | Return the column number where the formula has been executed |                                                                                                        |
| =ROW()                 | Return the row number where the formula has been executed    |                                                                                                        |
| =CELL()                | Return the cell string identification                        |                                                                                                        |
| =VALUE(int, int)       | Return the cell value based on the colNumber and rowNumber   | @Param int colNumber @Param int rowNumber                                                              |
| =TABLE()               | Return the table instance                                    |                                                                                                        |


# Export Page to PDF 🔥

Export Bubble page, single element or a list of elements to a high-quality PDF file 📄

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/pdf) | [Editor](https://bubble.io/page?type=page\&name=pdf\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/-advanced-export-to-pdf--1618325851181x183358745676087300)

> [Forum](https://forum.bubble.io/t/plugin-release-advanced-export-to-pdf-whole-page-single-element/146552)

## 🔥 Features

Very easy to use plugin with advanced settings:

* Export one page element, a list of elements or the whole page to a PDF file&#x20;
* Export to a multipage or a single-page PDF
* Flexible page layout settings: Predefined (A0-A10, letter, etc) and custom page formats; Page orientation; Margins
* Plugin generates lightweight and excellent quality PDF files ready to print or to keep as a digital file
* Fine control over PDF compression quality
* Use any valid CSS selector to select elements to export
* Download generated PDF file
* Upload generated PDF file to Bubble (generate a URL)

## 📚 Documentation

### ➡️ PDF generation. Plugin fields

**Pre-requirement:** Install and configure Classify plugin

{% content-ref url="/pages/-MXfykQSfukoAWO5UBlp" %}
[How to add a custom class or an ID to a Bubble element](/classify)
{% endcontent-ref %}

1.Install the plugin and add the "PDF Converter" element on your page

2.Set an ID for the element you want to export. To export the whole page, use this special selector: `.main-page`.

3.From your Workflow, Call the "Convert" action:

![](/files/-MYigsOR4NJzkb7B1QXF)

|                  | Option                             | Type     | Description                                                                                                                                                                                                                                                                                     |
| ---------------- | ---------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| General          | Element(s) to capture              | String   | <p>One or more comma-separated selectors. Each element will be exported to a separate page in the PDF document.</p><p>You can use any valid CSS selector (<code>#eltID, .eltClassname, img</code> etc). Use this special selector to export the entire Bubble page: <code>.main-page</code></p> |
|                  | Save to file                       | Yes/No   | Whether the generated file will be saved into a file and downloaded automatically                                                                                                                                                                                                               |
|                  | Generate URL                       | Yes/No   | If "yes", the PDF file will be uploaded to Bubble filestorage                                                                                                                                                                                                                                   |
|                  | Filename                           | String   | Output filename. Do not add ".pdf" at the end                                                                                                                                                                                                                                                   |
|                  | Compress quality                   | Integer  | Compress quality is a number in range `[0..100]`. It defines the output file size and quality                                                                                                                                                                                                   |
| Page Layout      | Page format                        | Dropdown | Predefined commonly used page formats                                                                                                                                                                                                                                                           |
|                  | Orientation                        | Dropdown | Page orientation (Portrait, Landscape)                                                                                                                                                                                                                                                          |
|                  | Page fit mode                      | Dropdown | How the captured element will be rendered into the PDF page. Possible values are: fill, contain, scale-down, cover, none. Check the [detailed description below](/plugins/export-page-to-pdf#page-fit-options)                                                                                  |
|                  | No page breaks mode                | Yes/No   | Applies to "full-width" mode only                                                                                                                                                                                                                                                               |
|                  | Margins (left, right, top, bottom) | Float    | Page margins                                                                                                                                                                                                                                                                                    |
|                  | Margin unit                        | Dropdown | Inches, Centimetres, Pixels, Points etc                                                                                                                                                                                                                                                         |
| Custom Page Size | Custom page size                   | Yes/No   | Set to "yes" if you want to define custom page format                                                                                                                                                                                                                                           |
|                  | Page size(,)                       | String   | Custom page size. Format: `width,height`. "Custom page size" field must be set to "yes".                                                                                                                                                                                                        |
|                  | Unit                               | Dropdown | Units for the custom page size: Inches, Centimetres, Pixels, Points etc                                                                                                                                                                                                                         |
| Other            | Autoprint                          | Yes/No   | Automatically show the print dialog when file opened                                                                                                                                                                                                                                            |
|                  | Draw margin borders                | Yes/No   | Draw red borders to indicate the margins. For debug purposes                                                                                                                                                                                                                                    |
|                  | Use Proxy                          | Yes/No   | Setting this field to Yes is particularly useful when your page contains images from external resources. Hint: set this field to Yes when the output PDF misses some images.                                                                                                                    |
| Archive          | Create archive                     | Yes/No   | Helps to decrease the output filesize. Useful to do before generating a URL                                                                                                                                                                                                                     |
|                  | Archive filename                   | String   | Filename without ".zip". Example: "output"                                                                                                                                                                                                                                                      |

**Related events:**

* PDF Generated

**Related states:**

* PDF Generating (Yes/No)
* PDF Generation Percentage (Number)

### ➡️ Page fit options

Page fit defines how the captured element will be rendered on the PDF page. Plugin supports 6 options: `full-width`, `fill`, `contain`, `scale-down`, `cover`, `none`. It works in the same way as the [object-fit CSS attribute](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) (check the *CSS Demo section* for a better undertanding).

If you are unsure about which option you have to choose, start from `full-width` or `ontain`.

### ➡️ How to upload PDF and generate a URL

1.Set the "Generate URL" field to "Yes"

![](/files/-MYVCa3ijVRVGq-QCi6v)

2\. Once the "URL generated" event triggers:

![](/files/-MYVChS3g1e-WMXb8k7p)

3\. Access the "URL" shared state:

![](/files/-MYVCoPedJsvFPGp1CV6)

Now you can save the generated URL to database etc

{% hint style="info" %}
Sometimes it's useful to archive the PDF before generating an URL to highly reduce the filesize. Set the "Create archive" to "YES" and optionally the "Archive filename" fields.
{% endhint %}

**Related events:**

* URL Generated

**Related states:**

* URL Generating (Yes/No)
* URL (String)


# Advanced Algolia Search 🕵️

Easy to use plugin to implement blazing fast search through thousands of data records.

## 🔗 Links

> [Demo](https://algoliasearch.bubbleapps.io/version-test) | [Editor](https://bubble.io/page?name=index\&id=algoliasearch\&tab=tabs-1)

> [Plugin Page](https://bubble.io/plugin/advanced-algolia-search-1620829006228x939199669208350700)

> [Forum](https://forum.bubble.io/t/plugin-advanced-algolia-search/151196)

## ℹ️ Introduction

This plugin is the easiest way to bring blazing fast search using [Algolia](https://www.algolia.com) into your Bubble app.

### **What Is Algolia?**

Your users almost certainly use at least one of YouTube, Amazon, and Facebook. An essential feature that these big websites share is great search. The reason they have great search is because they have hundreds (if not thousands) of people working on it full-time.

Because your users are constantly exposed to great search on these platforms, they expect to find it on every site and application that they use. But your company isn’t a search company: **it doesn’t make sense for you to hire a dedicated team of developers to reinvent search.**

Algolia provides software and tools to help you implement **efficient, flexible, and insightful search on your sites and applications.**

### What can Algolia do for my users?

Algolia provides your users with a fast and rich search experience. Your Algolia search interface can contain a search bar, filters, infinite scrolling, query suggestions, sorting, refinements, etc. These help your users **find what they’re looking for** and **discover new products**.

Find more info about Algolia [here](https://www.algolia.com/doc/guides/getting-started/what-is-algolia/).

## 📚 Documentation

### Pre-requirements (5 minutes)

1. Go to <https://www.algolia.com> and create an account
2. Navigate to your Algolia Dashboard and create a new index here:

![](/files/-M_fJEFyT8aIHt4vaq-P)

3\. Now you need to populate the newly created index with data. You can import your database data directly or use a sample dataset:

![](/files/-M_fJgNw-gcDvNfQguQg)

4\. Go to API keys page and copy your **Application ID** and **Search-Only API key**.

*Please **do not** use the **Admin API Key** and keep it secret.*

### Plugin Configuration (2 minutes)

Install the **Advanced Algolia Search** plugin. Paste your keys directly on the plugin page:

![](/files/-M_fLT3ra_-xMlevayCI)

Now add the **Algolia Search** element into your app. Insert your **Index name**. For the **Data type** please choose **Algolia (Search Result)**. This field is used internally by the plugin.

![](/files/-M_fKwhH7eGijRjGE22n)

You are ready to make your first search!

### Searching the data

Plugin provides you a very straightforward way to search the data. Just call the **Search** action (for example, when user clicked a search button or search input value changed):

![](/files/-M_fMeas9mdjwkoT1Pe5)

| Field                  | Type   | Description                                                                                                         |
| ---------------------- | ------ | ------------------------------------------------------------------------------------------------------------------- |
| Query                  | String | String to search                                                                                                    |
| Attributes to retrieve | String | Comma-separated values. Example: "name, description, price". Attributes are the field names in your data structure. |
| Page                   | Number | Page to retrieve (starting from 0)                                                                                  |
| Results per page       | Number | Number of records per page                                                                                          |

Once Algolia returns the search results, you can access the **Result** shared state:

![](/files/-M_fNyHz57ZRxZJJ7_8H)

It provides you a set of fields:

| Field             | Type             | Description                                                                         |
| ----------------- | ---------------- | ----------------------------------------------------------------------------------- |
| processingTimeMs  | Number           | Query processing time (ms)                                                          |
| page              | Number           | Current page index (starting from 0)                                                |
| nbPages           | Number           | Total pages number in the final result                                              |
| nbHits            | Number           | Total number of found results                                                       |
| hitsPerPage       | Number           | Number of results on the current page                                               |
| field1 .. field20 | Array of Strings | Requested data attributes (in the order defined by *Attributes to retrieve* field). |

FieldN is an array of strings. For example:

* field1 (id): \["123", "542", "941"]
* field2 (name): \["iPhone", "Android", "Samsung"]
* ...

Therefore you can iterate over arrays to display your data in tables, Repeating Groups etc.

### Sending the data to Algolia

There are several ways to push your data to an Algolia index:

* Using the Algolia dashboard by sending a JSON file.
* Using a Plugin action "Send Data" as explained below.

![](/files/-M_z4aPdSHxt8p7WLmB7)

1. From your workflow call the "Send Data" action
2. Provide the index name, your APP ID and Admin API Key
3. Provide the object fields (name, age and country in the example above)
4. The returned object has 2 fields: *error* (Yes/No) and *message* (text)


# Rich Text Editor like Medium 📝

The dead simple inline editor toolbar

## 🔗 Links

> [Demo](https://de-demo2.bubbleapps.io/version-test/medium) | [Editor](https://de-demo2.bubbleapps.io/version-test/medium)

> [Plugin page](https://bubble.io/plugin/rich-text-editor--medium-1621422273210x663707797524316200)

> [Forum](https://forum.bubble.io/t/plugin-rich-text-editor-like-medium/152496)

## ℹ️ Introduction

This is a clone of [medium.com](https://medium.com) inline editor toolbar.

## 🔥 Features

* 7 different themes
* 25+ toolbar buttons
* Extremely simple setup

## 📚 Documentation

### ➡️ Quick Start

1. Add the **Medium Text Editor** on the page:

![](/files/-MaEiJTRjmessnRdT8_Y)

2\. Set the **Content** field (can be static or dynamic value) and the **Buttons** list (comma-separated values). See below for the available buttons.

### ➡️ Available Toolbar Buttons

* bold
* italic
* underline
* anchor
* quote
* strikethrough
* h1, h2, h3, h4, h5, h6
* justifyLeft, justifyCenter, justifyRight, justifyFull
* orderedlist, unorderedlist
* indent, outdent
* image
* pre
* removeFormat
* html
* subscript
* superscript

### ➡️ Change the Toolbar Theme

To change the toolbar theme, simply call the **Set Theme** action and choose one of the available themes.

You can also create your own theme by writing custom CSS.

![](/files/-MaEk4lNLgEIkYa3ptd6)

![](/files/-MaEkB1jVIQbto8fRCne)

![](/files/-MaEkHf5FmcmC4nvkuhr)

![](/files/-MaEkLbcp2bs7cA3cBHL)

![](/files/-MaEkQDOy6pbmXyXddZq)

![](/files/-MaEkUgb1By5VqX7a3mH)

![](/files/-MaEk_8i_FUSnAn0nmBx)

### ➡️ States and Events

You can always access the **Content** state with current editor content.

Every time the content changes, a **Content changed** event is triggered. You can use it in your Workflow


# Scrollspy 👁

Plugin returns an element currently visible on the screen.

## 🔗 Links

> **Demo 1** (without a RepeatingGroup): [Demo](https://scrollspy.bubbleapps.io/ids) | [Editor](https://bubble.io/page?name=ids\&id=scrollspy\&tab=tabs-1)

> **Demo 2** (vertical RepeatingGroup): [Demo](https://scrollspy.bubbleapps.io/) | [Editor](https://bubble.io/page?name=index\&id=scrollspy\&tab=tabs-1)

> **Demo 3** (horizontal RepeatingGroup): [Demo](https://scrollspy.bubbleapps.io/horizontal) | [Editor](https://bubble.io/page?name=horizontal\&id=scrollspy\&tab=tabs-1)

> [Plugin Page](https://bubble.io/plugin/scrollspy-1610326820506x757120895346278400)

> [Forum](https://forum.bubble.io/t/plugin-announcement-scrollspy/136050)

## ℹ️ Introduction

In a nutshell, when you scroll the page (or a Repeating Group), plugin will provide you current element visible on the screen.

Some common use cases:

* Animate an element when it becomes visible on the screen
* Dynamically highlight a nav element in the nav bar (check the demo for an example).&#x20;
* Dynamically change selected element in a dropdown on scroll
* Dynamically highlight an item in TOC (Table of Content) on scroll
* Calculate the scrolling percentage progress
* ...and more

![Scrollspy](/files/-MXg0ci69Zs2GYfMgdw2)

## 🔥 Features

* Can be used to implement the scrollspy feature in Bubble or animate elements
* It works with any Bubble element (returns an element ID)
* It works for Repeating Groups as well (returns visible item / index)&#x20;
* Works for both, Vertical and Horizontal Repeating Groups&#x20;
* Get "Current Item", "Current ID", "Current Index" visible on the screen&#x20;
* Plugin fires an event "Item changed" that you can use in your Workflows&#x20;
* Setup rules, in which part of the screen an element considered as "visible"

Plugin supports 3 modes:

1. Add Groups, Texts or any other element type on the page and define a unique ID for each element. When you scroll, plugin will provide you current element's ID visible on the screen.
2. RepeatingGroup (Vertical). Add a RepeatingGroup element on the page. When you scroll, plugin will provide you current element visible on the screen and its index.
3. RepeatingGroup (Horizontal). Same as 2 but for a horizontal RepeatingGroup.

## 📚 Documentation

### **➡️ Mode 1 : Without RepeatingGroup**

**Pre-requirement:** Install and configure Classify plugin

{% content-ref url="/pages/-MXfykQSfukoAWO5UBlp" %}
[How to add a custom class or an ID to a Bubble element](/classify)
{% endcontent-ref %}

1. Add any elements on the page (blocks, texts, images etc). For each element, define a class name and an id (check our demo for an example)

![](/files/-MXg-np5_ZF3xn7QnyW_)

2\. In the Scrollspy plugin settings copy paste the same class name.

![](/files/-MXg-u89CVpT-08ELpcw)

3\. Now you have access to **current\_id** state:

![](/files/-MXg-zGXt7T9CnhrbsPK)

### **➡️ Mode 2 :** **Using a Vertical RepeatingGroup**

**Pre-requirement**: Go to Settings -> General and enable the "Expose the option to add an ID attribute to HTML elements" option.

1. Add a RepeatingGroup in your app.
2. Go to your Repeating Group's properties, at the bottom you will see "ID attribute". Add a name here.

![](/files/-MXg02tuqhFXsDFl_SQk)

3\. In the Scrollspy properties define: "RepeatingGroup ID", "Type of content" and "Data source" attributes (exactly the same values as in your RepeatingGroup)

![](/files/-MXg08Vu5hs60_pRpNQ8)

4\. Now anywhere in your app you can use the "Scrollspy's Current Index", "Scrollspy's Current Item" or "Scrollspy's Current ID"

### **➡️ Mode 3: Using a Horizontal RepeatingGroup**

The settings are very similar to the Mode 2.


# Move, Rotate & Resize element 🔄

Move, offset, rotate, spin and resize Bubble elements by its id in a very simple way

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/version-test) | [Editor](https://bubble.io/page?name=index\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/move-rotate--resize-element-1613310378435x672329527629709300)

> [Forum](https://forum.bubble.io/t/new-plugin-move-rotate-resize-bubble-elements/137469)

## ℹ️ Introduction

![](/files/-MXg7QvL_L6prnvwsvl9)

## 🔥 Features

* Move an element
* Offset an element: add horizontal and vertical offset to initial coordinates
* Reset an element to initial state
* Rotate an element by a specific angle
* Spin an element (constant rotation)
* Resize an element (width, height)

## 📚 Documentation

Plugin contains 7 actions which can be used from the Bubble Workflow and 1 element.

**Pre-requirements:**

1. Install and configure Classify plugin

{% content-ref url="/pages/-MXfykQSfukoAWO5UBlp" %}
[How to add a custom class or an ID to a Bubble element](/classify)
{% endcontent-ref %}

2\. Add any elements on the page. For each element you want to rotate, move etc, define an id:<br>

![](/files/-MXg8-ZNTGTJ8MSDs7CI)

### **Element Move (Action)**

Input parameters:

* ID: Element ID to move
* Offset X (px): Offset by X coordinate (positive, zero, or negative value)
* Offset Y (px): Offset by Y coordinate (positive, zero, or negative value)
* Time to move (ms): Time to animate the movement in milliseconds

### **Element Offset (Action)**

Input parameters:

* ID: Element ID to offset
* Coordinate X: Offset by X coordinate (positive, zero, or negative value)
* Coordinate Y: Offset by Y coordinate (positive, zero, or negative value)
* Time to move (ms): Time to move the element in milliseconds

### Element Reset (Action)

Input parameters:

* ID: Element ID to reset

### **Element Rotate (Action)**

Input parameters:

* ID: Element ID to rotate
* Angle: Rotation angle (positive or negative value)

### **Element Spin (Action)**

Input parameters:

* ID: Element ID to spin
* Angle Step: Defines the rotation smoothness
* Update frequency: Time in milliseconds between two frames (defines the rotation speed)

### **Element Stop Spin (Action)**

Input parameters:

* ID: Element ID to stop spinning

### **Element Resize (Action)**

Input parameters:

* ID: Element ID to resize
* Width (px): New width (px). Leave it empty to keep the original width
* Height (px): New height (px). Leave it empty to keep the original height
* Animation time (width): Time in milliseconds to animate the width resize. Leave it empty or 0 to change the size instantly
* Animation time (height): Time in milliseconds to animate the height resize. Leave it empty or 0 to change the size instantly

### **Resize Element (Element)**

Works in the same way as the "Element resize" action but exposes Width and Height states with the current element's size.\
Actions:

* Resize Element

Exposed State:

* Width: Current element's width (updated after the resize action)
* Height: Current element's height (updated after the resize action)


# Inverted RepeatingGroup (for Chat app)

Revert the Repeating Group elements ordering upside down to create apps like chats and messages

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/inverted_rg) | [Editor](https://bubble.io/page?type=page\&name=inverted_rg\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/inverted-repeating-group-like-chat-1614516761794x182777501586030600)

> [Forum](https://forum.bubble.io/t/new-plugin-inverted-repeating-group-like-a-chat-app/138847)

## ℹ️ Introduction

Plugin allows to revert the Repeating Group elements ordering. So to see / load next items in the list you have to scroll to the top (instead of scrolling to the bottom).

![](/files/-MXgB7wmJ6x5TTnL2w33)

Use case: any chat / messaging app (e.g. Facebook, Telegram, WhatsApp...). The latest message showed on the bottom and you have to scroll to the top to load older ones.

## 🔥 Features

* Revert the Repeating group elements order and change the scroll behaviour
* Show scrollbar on the left (or right) side of the Repeating Group
* Hide/Show scrollbar

## 📚 Documentation

**Pre-requirements:**

1. Install and configure Classify plugin:

{% content-ref url="/pages/-MXfykQSfukoAWO5UBlp" %}
[How to add a custom class or an ID to a Bubble element](/classify)
{% endcontent-ref %}

2\. Add a Repeating Group and define an ID:

![](/files/-MXgBc1AdPvJmTiIvSWB)

Now when you have a Repeating Group on your page:

1. Add the "Inverted Repeating Group" element on your app page and copy paste the ID.
2. Define following parameters:

* **ID** (text): Same ID from the step 1
* **Invert Repeating group** (yes/no): Revert the Repeating group elements order and change the scroll behaviour
* **Scrollbar on the left** (yes/no): Show scrollbar on the left/right side of the Repeating Group
* **Hide scrollbar** (yes/no): Hide/Show scrollbar. Please note that this option may not work properly in some browsers

![](/files/-MXgBwoq4PqkRasQj95h)


# Live Chats (LiveChat.com, Intercom ...) 💬

Multiple plugins to integrate a live chat on your website

We developed a few plugins to help you integrate a live chat on your website. All plugins are extreamely easy to use and in most of the cases you will only need to insert your client\_id in the plugin to make it work.

> [LiveChat (livechat.com)](https://bubble.io/plugin/livechat-livechatcom-1613923364113x238006850088075260)

> [Intercom](https://bubble.io/plugin/intercom-live-chat-1613765689157x858545148000206800)

> [Chaport](https://bubble.io/plugin/chaport-live-chat-1613928323780x866888852584267800)

> [ChatBot (chatbot.com)](https://bubble.io/plugin/chatbot-live-chat-chatbotcom-1613924419124x536313498559840260)

> [Freshchat (Freshworks)](https://bubble.io/plugin/freshchat-freshworks-chat-1613928682777x564687615386452000)

> [tawk.to](https://bubble.io/plugin/tawkto-live-chat-1613927791723x595239171872784400)

> [Olark](https://bubble.io/plugin/olark-live-chat-1613922269941x133005022630772740)


# Advanced Screenshot Element 🖼

Capture a screenshot of a single element, visible part of the page or the entire page

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/screenshotelementpro) | [Editor](https://bubble.io/page?name=screenshotelementpro\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/screenshot-element-pro-1611438394170x673066697274163200)

> [Forum](https://forum.bubble.io/t/new-plugin-screenshot-element-pro/136632)

## ℹ️ Introduction

![](/files/-MXgDMNUKUpPgoM5r-Ci)

## 🔥 Features

* Capture a screenshot of a single element by its ID
* Capture the visible visible part of the page (as currently displayed in browser)
* Full Page capture
* Save screenshot in JPG or PNG&#x20;
* Generate URL (upload to Bubble filestorage)
* Download the screenshot
* Choose image compress quality

## 📚 Documentation

### ➡️ Screenshot of the the visible part of the screen:

1\. In Workflow choose "Generate Screenshot" action. Define the Filename, File Format, choose Screenshot Type "Screen" and Output

![](/files/-MXgEovJ_iQ3CExzwfbC)

### ➡️ **Screenshot of the entire page**

1\. In Workflow choose "Generate Screenshot" action. Define the Filename, File Format, choose Screenshot Type "Entire Page" and Output.

![](/files/-MXgExI0OvYPIGGHbgrz)

### ➡️ **Screenshot of an element by ID**

1\. Settings / General / Select "Expose the option to add an ID attribute to HTML elements"

![](/files/-MXgFBNYY48_Kf_jgC0Z)

2\. Define ID for an element you want to save

![](/files/-MXgFDUiuVnpotV8oxfN)

3\. In Workflow choose "Generate Screenshot" action. Define the Filename, File Format, choose Screenshot Type, Output and Element ID

![](/files/-MXgFGjs9x1RIVZbI7xY)


# Screenshot Element 🖼

Easy to use Plugin to save an Element to PNG by its ID. 📸

## 🔗 Links

> [Demo](https://screenshotdemo.bubbleapps.io/) | [Editor](https://bubble.io/page?name=index\&id=screenshotdemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/screenshot-element-1611427174263x940872047117205500)

## ℹ️ Introduction

![](/files/-MXgG7LUAyrlsTgTdn_r)

## 📚 Documentation

1\. Go to Application Settings / General / Select "Expose the option to add an ID attribute to HTML elements"

![](/files/-MXgGMcUY_mT1OpnX6e6)

\
2\. Define an ID for the element you want to save as Image (ID Attribute field)

![](/files/-MXgGQ5sBiZZ9vLDoiqv)

\
\
3\. Add event: "Download Element As PNG". Define filename and element\_id from the previous step

![](/files/-MXgGU3bvfaq5gt31zF0)


# Cookies 🍪

Easy Read, Write and Delete browser cookies

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/version-test/cookies) | [Editor](https://bubble.io/page?name=cookies\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/cookies-1611605211880x216983365361336300)

> [Forum](https://forum.bubble.io/t/plugin-announcement-cookies/136052)

## ℹ️ Introduction

Cookies allow you to store user's data without using Bubble's database. And this plugin makes the cookies management very simple.&#x20;

Use cases: Save user preferences for language, dark/light mode, currency, country, visit numbers, last visit date, any stats etc

## 🔥 Features

* Read a cookie by name
* Delete a cookie by name
* Add a cookie: name + value + expiration (in days)
* Read all cookies

## 📚 Documentation

Available actions:

* Read a Cookie by name
* Write a Cookie: define a name, value and expiration (in days)
* Delete a Cookie by name
* Read all Cookies

Available states:

* Cookie: available after "Read a Cookie" action
* All Cookies: available after "Read all Cookies" action

Plugin is very easy to use. Check our demo for a detailed example.


# Device by Screen Size 📱 🖥 📺

Plugin allows you to get the current screen size (xs, sm, md, lg) and/or receive an appropriate event every time user changes the screen size.

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/version-test/devicebyscreensize) | [Editor](https://bubble.io/page?name=devicebyscreensize\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/device-by-screen-size-width-1611618330713x668390098435833900)

> [Forum](https://forum.bubble.io/t/plugin-announcement-device-by-screen-size-width/136418)

## 🔥 Features

* Get current screen size: extra small (**xs**), small (**sm**), medium (**md**), large (**lg**)
* Triggers an appropriate event every time screen size changes
* Define your custom width for every screen size

\
Default values:

* XS screen: 0px - 768px
* SM screen: 768px - 992px
* MD screen: 992px - 1200px
* LG screen: > 1200px

## 📚 Documentation

Available events (events trigger workflows, such as a click):

* extra\_small\_screen
* small\_screen
* medium\_screen
* large\_screen

Available state (states let users access data from this element):

* Screen. Possible values: xs, sm, md, lg

Check our demo for a detailed usage example.


# Browser Language and Locale 📍

Plugin detects browser's language and locale

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/version-test/browserlanguage) | [Editor](https://bubble.io/page?name=browserlanguage\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/browser-language-and-locale-1611674652831x297972691674333200)

> [Forum](https://forum.bubble.io/t/new-free-plugin-browser-language-and-locale/136888)

## ℹ️ Introduction

Plugin detects browser's language and locale.

Language code has a 2-characters browser-independent format: en, es, fr etc

Locale format depends on browser. Here are some examples:

* fr, fr-fr, fr-FR
* en, en-us, en-US

## 📚 Documentation

1. Add the Browser Language element into your app.
2. Language code is stored in the state "Language".
3. Locale is stored in the state "Locale".


# Advanced \<iframe> element 🖥

Embed an external website in your Bubble app

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/iframe) | [Editor](https://bubble.io/page?type=page\&name=iframe\&id=digitaleyedemo\&tab=tabs-1)

> [Demo2 (Fullscreen mode)](https://digitaleyedemo.bubbleapps.io/iframe-fullscreen) | [Editor](https://bubble.io/page?type=page\&name=iframe-fullscreen\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/advanced-iframe--embed-website-1618182996826x149444463168323600)

> [Forum](https://forum.bubble.io/t/plugin-advanced-iframe-embed-website/146134)

## ℹ️ Introduction

Probably the most advanced but very simple to use `<iframe>` plugin for Bubble. An `<iframe>` element allows to "embed" an external website to the Bubble app. &#x20;

Please note that some websites disable the ability to be shown in an iframe on an external website. As a quick example, you can't render google.com in your iframe.

## 🔥 Features

* Change the url dynamically without page reloads
* YouTube mode to embed URL of a YouTube video
* Set iframe's width/height dynamically
* Scroll bar control (show / hide)
* iframe's "sandbox" attribute control to securelly embed external pages (`allow-downloads`, `allow-popups`, `allow-same-origin` etc). Recommended for advanced users
* Setting `title`, `id`, `class` attributes
* Plugin fires events (when URL is invalid) so you can add custom error handling

## 📚 Documentation

Install the plugin, add an "iframe" element on your page, provide a URL and you should be able to see the external page embedded into your app!

For an advanced usage see below.

![](/files/-MYjUD9fKs6CiZMyBEzW)

### Fields

**General settings**

| Option     | Type     | Description |
| ---------- | -------- | ----------- |
| URL        | String   |             |
| Scrolling  | Dropdown |             |
| Fullscreen | Checkbox |             |

**Sandbox options**

Sandbox attribute applies extra restrictions to the content in the frame.&#x20;

More info: <https://developer.mozilla.org/fr/docs/Web/HTML/Element/iframe>

| Option                         | Type   | Description                                                                                                                                                                                                              |
| ------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| allow-same-origin              | Yes/No | If this token is not used, the resource is treated as being from a special origin that always fails the same-origin policy (potentially preventing access to data storage/cookies and some JavaScript APIs).             |
| allow-downloads                | Yes/No | Allows for downloads to occur with a gesture from the user.                                                                                                                                                              |
| allow-forms                    | Yes/No | Allows the resource to submit forms. If this keyword is not used, form submission is blocked.                                                                                                                            |
| allow-modals                   | Yes/No | Lets the resource open modal windows.                                                                                                                                                                                    |
| allow-popups                   | Yes/No | Allows popups (such as window\.open(), target="\_blank", or showModalDialog()). If this keyword is not used, the popup will silently fail to open.                                                                       |
| allow-popups-to-escape-sandbox | Yes/No | Lets the sandboxed document open new windows without those windows inheriting the sandboxing. For example, this can safely sandbox an advertisement without forcing the same restrictions upon the page the ad links to. |
| allow-scripts                  | Yes/No | Lets the resource run scripts (but not create popup windows).                                                                                                                                                            |
| allow-top-navigation           | Yes/No | Lets the resource navigate the top-level browsing context (the one named \_top).                                                                                                                                         |

**Advanced settings**

| Option             | Type     | Description                                                                                                                                                                                   |
| ------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Title              | String   | People navigating with assistive technology such as a screen reader can use the title attribute on an  to label its content. The title's value should concisely describe the embedded content |
| ID                 | String   | Add an ID attribute to the iframe                                                                                                                                                             |
| Class              | String   | Space-separated iframe classes. Example: "myclass1 myclass2"                                                                                                                                  |
| Do not show alerts | Checkbox | Remove the default plugin alert popups (when the provided URL is not correct)                                                                                                                 |
| YouTube URL        | Checkbox | Choose this option if your URL is a YouTube video. This will automatically add some YouTube-specific attributes                                                                               |

### Events

* "**Incorrect URL**" event: fires when the provided URL is not correct. In combination with the "Do not show alerts" field it allows you to build a custom error handling (show an error message in a different language etc)!

### Actions

* **Update URL**

![](/files/-M_RBVjTm11M4Kd_rdql)

* **Set Scroll**

![](/files/-M_RBK0ETGDDC2tHVwbo)

* **Set Size**

![](/files/-M_RB8ZWsT_ertsiJStS)


# Conditional Redirect 🔀

Plugin redirects to an external URL when a certain event happens

## 🔗 Links

> [Demo](https://digitaleyedemo.bubbleapps.io/redirect) | [Editor](https://bubble.io/page?type=page\&name=redirect\&id=digitaleyedemo\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/conditional-redirect-1618602673883x571754493077880800)

> [Forum](https://forum.bubble.io/t/plugin-release-conditional-redirect/146695)

## ℹ️ Introduction

This is a small straightforward plugin having 2 modes to conditional redirect to an external URL.

## 🔥 Features & Documentation

### ➡️ Mode 1

Plugin action that can be used in Workflow when a certain event happens. Ex.: Redirect to an external URL if current URL contains a certain substring.

![](/files/-MYRTPwrO1q-t4JC9bl4)

### ➡️ Mode 2

Element "Redirect". Add it to your page and provide "Condition" and "URL" fields. Once "Condition" becomes true, you will be redirected to provided URL.

![](/files/-MYRTW33NQCjcoRLJ2uY)

Check the demo for a better understanding.


# Users Online 🙋‍♂️

Plugin provides rich information about the user: status (active/idle/browser tab not active), IP address, country, city, lat/lng, internet provider etc

## 🔗 Links

> [Demo](https://usersonline.bubbleapps.io/version-test/) | [Editor](https://bubble.io/page?type=page\&name=index\&id=usersonline\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/users-online-🙋%E2%80%8D♂%EF%B8%8F-1618682033565x545077038187544600)

> [Forum](https://forum.bubble.io/t/plugin-relese-users-online/147206)

## ℹ️ Introduction

![Plugin used to track online visitors](/files/-MYXOVIAZVRlXz6iwWrz)

🔥 Some use cases:

* store visit analytics and statistics
* number of visitors online / rich info about online visitors
* visitors and opened pages
* get rich visitor info
* automatically logout user after X min of inactivity

## 🔥 Features

Plugin provides rich information about the user.

Based on IP address:&#x20;

* IP address
* internet provider
* timezone
* Location: city, area\_code, region, country, country\_code (2 and 3 symbols), continent\_code
* lat/lng
* accuracy (in km)
* asn

Based on website interaction:

* status: active; idle (inactive); hidden (browser is hidden or user is on another tab)
* is Idle: whether user is active or not
* Idle for (ms): time in ms of user inactivity
* Time left (ms): time left before user will be considered inactive (idle)

## 📚 Documentation

1. Add the element to a page. Setup "Time to idle" (in seconds): time of inactivity before user becomes idle.

![](/files/-MYXLHPISAsACQV5ZfZu)

2\. In workflow, use events "**Status changed**" and "**IP info ready**". Access plugin's shared states.


# Page Close Event 🚪

Plugin triggers an event when user is about to close the page. This can be used to show a popup with a promo code etc. It works on desktop and mobile

## 🔗 Links

> [Demo](https://de-demo2.bubbleapps.io/version-test/quit-event) | [Editor](https://bubble.io/page?type=page\&name=quit-event\&id=de-demo2\&tab=tabs-1)

> [Plugin page](https://bubble.io/plugin/page-close-event--quit--exit-1621764699423x344379196288794600)

> [Forum](https://forum.bubble.io/t/free-plugin-page-close-event/152585)

## 🔥 Features

* Very easy configuration
* Work on mobile and desktop
* Event sensitivity configuration

## 📚 Documentation

### ➡️ Quick Start

1. Add the **Page Close Event** element on the page:

![](/files/-MaNv_0BZrQwxqjUu9Au)

2\. Use the "**Page Close**" event in your Workflow to show a popup or make any other action:

![](/files/-MaNven18OW5yRyrAZVi)

### ➡️ Element Fields

| Field       | Type     | Description                                                                                                                                                                                                                                                                                                                                                                       |
| ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Method      | Dropdown | <p></p><p>The bounce detection method. Default: auto.</p><ul><li>mouse: For desktop browsers. Detects bounces based on the mouse's direction, velocity and distance from the top of the page.</li><li>history: For mobile browsers. Triggers when the visitor clicks on the browser's back button.</li><li>auto: Automatically picks a method based on the device type.</li></ul> |
| Distance    | Integer  | The minimum distance in pixels from the top of the page to consider triggering for. Default: 100                                                                                                                                                                                                                                                                                  |
| Sensitivity | Integer  | The minimum distance the mouse has to have moved in the last 10 mouse events for onBounce to be triggered. Default: 10                                                                                                                                                                                                                                                            |


# Eatics: Food Delivery Platform like Uber Eats 🍔

Eatics is a no-code template to build a food delivery (and pickup) platform like Uber Eats, Deliveroo or Foodora.

## 🔗 Links

> [Preview](https://eatics.bubbleapps.io)

> [Template page](https://bubble.io/template/food-delivery---uber-eats-1622464831535x537922164613185540)

> [Forum](https://forum.bubble.io/t/template-eatics-food-delivery-platform-like-uber-eats/164484)

## ℹ️ Introduction

![](/files/-Mh3AQlT26uEgJsZr2nl)

**Eatics** is a Marketplace. Customers can find nearest restaurants, add dishes to the basket, pay online and track the order delivery in real time.

**What’s inside:**

* Frontend Website (restaurants list, order, …)
* Customer App (track orders, orders history, …)
* Courier App (assign orders, chat, …)
* Restaurant Owner App (edit menu, orders management, …)
* Platform Owner Backend (analytics, settings, chat, …)

## 🔥 Features

### Main Features

* Delivery and Pickup support
* Responsive design
* Search nearest restaurants in a given location
* Filter restaurants by cuisine type
* Payments via Stripe
* Platform commission (split order payments)
* Sign up as customer, restaurant owner, courier

### Customer App

* Add restaurants to favourites
* Track Orders
* Order History
* Update profile info

### Courier App

* Mobile first design
* Assign Orders
* Orders history
* Chat with office
* Update profile info

### Restaurant Owner Backend

* Orders management: accept, reject, track status
* Analytics
* Edit restaurant menu
* Customers list, export to CSV
* Edit restaurant settings, Opening hours, Payments…

### Platform owner Backend

* Restaurants management
* Couriers management
* Analytics
* Chat
* Customers management, export to CSV

## 🖼 Screenshots

![Customer: Search nearest restaurants](/files/-Mh3BENngYfFyYQ8DEJa)

![Customer: Ordering process](/files/-Mh3BevgAsGDAWZ1VDSf)

![Customer: Checkout and payment](/files/-Mh3CEq70MI_IypUPncN)

![Customer: Order tracking](/files/-Mh3GSrnI9drbnk6C6uZ)

![Restaurant: Order Management](/files/-Mh3Gnx1jJkJtAbFgddb)

![Courier: Order Management](/files/-Mh3H6l4f-Hbv5lNgtl_)

![Courier: Chat](/files/-Mh3HP8sVVp29-Kd1Nv7)

![Platform Owner: Dashboard](/files/-Mh3HakdLQe8O6pDfaRb)

## 📚 Documentation

With some basic Bubble knowledges, you should be able to use the template very easily. In this section we cover some most important topics only.

For any questions you can always contact us: **<bubble@digital-bird.com>**.

### **Testing payments**

Demo bank card to test the payments integration: 4242 4242 4242 4242, any year and any CVV

### Account types

The template has 4 account types: Restaurant owner, Courier, Admin and Customer.

Here is how it's reflected in the Database. Use this information anytime when you need to determine the user's role in your app:

* Restaurant owner: `owned_restaurant` field is not empty
* Courier: `is_courier` field is `True`
* Admin: `is_admin` field is `True`
* Else: Customer

### How to create an admin account

In order to create an admin (platform owner) account, Sign Up as a normal customer, then go to Database and set the `is_admin` field to `True`.

### How to connect your Stripe account

In order to connect your Stripe account, go to Plugins tab and select Stripe plugin there.

You'll need to insert here: Client ID, Secret key, Publishable key. You can simply copy-paste all these information from your Stripe account.

See [Official documentation](https://manual.bubble.io/core-resources/bubble-made-plugins/stripe#setup) for the detailed instruction.

### How to add Google API keys

In order to use Google maps, addresses and geolocation, you should add a Google API key under Settings > General > General services API Keys.

See [Official documentation](https://manual.bubble.io/help-guides/working-with-data/working-with-location-data) for the detailed instruction.

## Further support

Need support? Get in touch: <bubble@digital-bird.com>


# Coursus: Advanced Online Courses (Udemy-like) 🎓

Coursus is very flexible and advanced template to build any kind of e-Learning platform.

## 🔗 Links

> [Preview](https://coursus.bubbleapps.io)

> [Template page](https://bubble.io/template/online-learning-courses-udemy-1614540650379x761334529874722800)

> [Forum](https://forum.bubble.io/t/released-coursus-advanced-online-courses-and-e-learning/140380)

## ℹ️ Introduction

Coursus supports 4 types of courses:

* Free courses
* Paid courses: Pay once to get access
* Premium courses: students can subscribe to have an unlimited access to premium (paid) courses
* Paid or Premium: to access, students can pay once or have a subscription

You choose to use only one course type or mix different types on your platform! It makes possible to create any kind of platform: a SaaS platform (monthly subscriptions) or one-time payment courses (like Udemy) or even a free courses platform.

Don't hesitate to write us if you have any questions before or after purchase. Our Customer Success team is always ready to help!

## 🔥 Features

* Front-end (home page, courses, pricing, about, FAQ...), Admin (dashboard, course management, logs etc), User account (my courses, my account, billing etc)
* Mobile-ready design
* Support of big and small platforms: intuitive search and filters
* Integrated Stripe for payments: supports bank cards, Apple Pay, Google Pay...
* Support of 3 video hostings: Vimeo, YouTube and Wistia
* After a course is completed, the platform sends an email to encourage students to write a review&#x20;
* Collect emails: Subscribe to newsletter
* 2 admin roles: full access and read-only
* Easy to customize the main template color
* Includes Cookie Consent plugin
* Using slugs for user friendly urls and SEO
* ... and more!

Demo bank card to test payments integration: 4242 4242 4242 4242, any year and CVV

Coming Soon:

* Blog
* Wish list / Course bookmarks
* Multi currencies support
* Private messages between students
* Lesson comments
* Advanced admin settings to easily customize the platform

## 🖼 Screenshots

![Landing page](/files/-MXr0gmgCJsJ4nj-qeDW)

![Courses catalog](/files/-MXr2BmE9OWczfnix-66)

![Course overview](/files/-MXr2utEhjZMCKbUv4SM)

![Course lectures overview](/files/-MXr2z4kR0hggxDUnCMA)

![Course content](/files/-MXr3ECTf4QP_8vK2O5n)

![My courses](/files/-MXr3Pw_365EU18XR8sq)

![Admin Dashboard](/files/-MXr5yTfR766K7Y4MCF0)


# Sline: Premium Admin & Dashboard 📈

Admin & Dashboard template to create a backend for any app

## 🔗 Links

> [Preview](https://sline-dashboard.bubbleapps.io)

> [Template page](https://bubble.io/template/-admin-premium-dashboard-1615400769253x597052355313139700)

> [Forum](https://forum.bubble.io/t/template-sline-premium-admin-dashboard/145581)

## ℹ️ Introduction

Sline is a Premium Bubble admin template with professional and clean design concept. It's a fully responsive mobile-ready admin dashboard template built with Bubble.

Use it to build any type of admin app for your business:

* Admin dashboard / application backend
* Project management tool
* CMS
* CRM
* Business website,
* Marketplace
* E-commerce
* Blog
* ...

What's inside:

* Commonly used components (dashboard, blog, chat, messaging system, notifications, invoices etc) that you can reuse in your app
* Commonly used pages
* Generic reusable components and UI guideline (tables, colors, typography, buttons, icons etc)
* Reusable workflows: navigation between pages (sidebar, header), switching between tabs etc
* Admin app structure (sidebar, header)

Please contact us if you need a feature or a component that is not presented in our template. Our goal is to continuously improve Sline admin template making it better and better!

## 🔥 Features

A large number of mini apps, page templates, and UI elements are included to make your work easier:

* Dashboard
* Chat
* Email inbox
* E-commerce catalog
* Orders
* Customers
* Stats
* Blog
* Projects
* Invoices
* Notifications
* ...and more

Sline is very lightweight and easy customizable which is basically designed for the developers who want to customize it with just a finger snap.

We encourage you to have a good look at live preview and discover all the included features!

## 🖼 Screenshots

![Dashboard](/files/-MXrYKH6s7oxcLwh8lFt)

![Chat](/files/-MXrYVfW_b_SVyYC8cLt)

![E-commerce](/files/-MXrYd8il1R9c8QvtW4N)

![Orders](/files/-MXrYsMCXJnLGjGvkor0)

![Invoices](/files/-MXrZ-AiC6Bjmjgnhr1Y)

![Messages](/files/-MXrZ6iHz8euVDaTDPEs)

![Projects](/files/-MXrZF0tslOPYZUh01eF)

![Project details](/files/-MXrZSygDdN6Jkv6CjvQ)

![Blog](/files/-MXrZb650eUy9t2zDnFe)


# BubbleBook: a GitBook clone

BubbleBook is a GitBook clone

## 🔗 Links

> [Preview](https://gitbook.bubbleapps.io)

> [Template page](https://bubble.io/template/bubblebook-a-gitbook-clone-1614169914850x774341462386278400)

## ℹ️ Introduction

BubbleBook is a GitBook clone

How it works:

* Registered users can create "Spaces" (aka projects) and add/edit pages
* Spaces are highly customisable with logos, colors, sharable url...
* Spaces can be publicly viewed

Use cases:

* Creating project documentation
* Organizing Ideas, personal notes
* Creating knowledge bases

Demo Space: <https://gitbook.bubbleapps.io/s/demo-space>

## 🔥 Features

* Mobile Friendly design
* Includes Website: Home, About and Pricing pages
* Inner Pages: Spaces, Settings, Edit Space, View Space etc
* Sign In, Sign Up, Password Reset...

## 🖼 Screenshots

![Space example](/files/-MXrFzZNW6FCzqEm4K-v)

![Landing page](/files/-MXrGIZowGUc3dfYzch3)

![Spaces management](/files/-MXrGk2W0UVZOV9IckSF)

![Space editing](/files/-MXrH-fIrwSVS0RT8Pb9)


# BubbleBook Landing

## 🔗 Links

> [Preview](https://gitbook-landing.bubbleapps.io)

> [Template page](https://bubble.io/template/gitbook-landing-bubblebook-1613993777250x212190130358190080)

## ℹ️ Introduction

BubbleBook Landing is a beautiful professional multipage template inspired by GitBook's Landing page

## 🔥 Features

* Perfectly Responsive
* Landing page (home page)
* About page
* Pricing page
* Sign In
* Sign Up
* Password Reset

## 🖼 Screenshots

![Home page](/files/-MXrDvCvh9nIhc941rri)

![Pricing page](/files/-MXrEFFJZkdLzIssrEnB)

![About page](/files/-MXrEPshKGuhP9xcCAVX)

![Sign In](/files/-MXrEYn0DvO5HttizkuI)


