<a name="Locations"></a>

# Locations
Find Locations for a Book

**Kind**: global class  

* [Locations](#Locations)
    * [new Locations([sections], [request], [pause])](#new_Locations_new)
    * _instance_
        * [.generate([chars])](#Locations+generate) ⇒ [<code>Promise.&lt;Locations&gt;</code>](#Locations)
        * [.process(section)](#Locations+process) ⇒ [<code>Promise.&lt;Locations&gt;</code>](#Locations)
        * [.parse(contents, cfiBase, [chars])](#Locations+parse) ⇒ [<code>Promise.&lt;Locations&gt;</code>](#Locations)
        * [.locationFromCfi(value)](#Locations+locationFromCfi) ⇒ <code>number</code>
        * [.percentageFromCfi(cfi)](#Locations+percentageFromCfi) ⇒ <code>number</code>
        * [.percentageFromLocation(index)](#Locations+percentageFromLocation) ⇒ <code>number</code>
        * [.cfiFromLocation(index)](#Locations+cfiFromLocation) ⇒ <code>string</code> \| <code>null</code>
        * [.cfiFromPercentage(value)](#Locations+cfiFromPercentage) ⇒ <code>string</code> \| <code>null</code>
        * [.load(locations)](#Locations+load) ⇒ [<code>Locations</code>](#Locations)
        * [.save()](#Locations+save) ⇒ <code>string</code>
        * [.set([options])](#Locations+set) ⇒ [<code>Locations</code>](#Locations)
        * [.clear()](#Locations+clear)
        * [.destroy()](#Locations+destroy)
    * _static_
        * [.current](#Locations.current) : <code>Location</code>
        * [.generated](#Locations.generated) : [<code>Promise.&lt;Locations&gt;</code>](#Locations)
        * ["changed" (current, changed)](#Locations.event_changed)

<a name="new_Locations_new"></a>

## new Locations([sections], [request], [pause])
Constructor


| Param | Type | Default |
| --- | --- | --- |
| [sections] | <code>Sections</code> |  | 
| [request] | <code>function</code> |  | 
| [pause] | <code>number</code> | <code>100</code> | 

<a name="Locations+generate"></a>

## locations.generate([chars]) ⇒ [<code>Promise.&lt;Locations&gt;</code>](#Locations)
Load all of sections in the book to generate locations

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: [<code>Promise.&lt;Locations&gt;</code>](#Locations) - Locations  

| Param | Type | Description |
| --- | --- | --- |
| [chars] | <code>number</code> | how many chars to split on (default:150) |

<a name="Locations+process"></a>

## locations.process(section) ⇒ [<code>Promise.&lt;Locations&gt;</code>](#Locations)
process

**Kind**: instance method of [<code>Locations</code>](#Locations)  

| Param | Type |
| --- | --- |
| section | <code>Section</code> | 

<a name="Locations+parse"></a>

## locations.parse(contents, cfiBase, [chars]) ⇒ [<code>Promise.&lt;Locations&gt;</code>](#Locations)
parse

**Kind**: instance method of [<code>Locations</code>](#Locations)  

| Param | Type |
| --- | --- |
| contents | <code>Element</code> | 
| cfiBase | <code>string</code> | 
| [chars] | <code>number</code> | 

<a name="Locations+locationFromCfi"></a>

## locations.locationFromCfi(value) ⇒ <code>number</code>
Get a location from an EpubCFI

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: <code>number</code> - Location index or -1 otherwise  

| Param | Type | Description |
| --- | --- | --- |
| value | <code>string</code> \| <code>EpubCFI</code> | EpubCFI |

<a name="Locations+percentageFromCfi"></a>

## locations.percentageFromCfi(cfi) ⇒ <code>number</code>
Get a percentage position in locations from an EpubCFI

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: <code>number</code> - Percentage  

| Param | Type | Description |
| --- | --- | --- |
| cfi | <code>string</code> \| <code>EpubCFI</code> | EpubCFI |

<a name="Locations+percentageFromLocation"></a>

## locations.percentageFromLocation(index) ⇒ <code>number</code>
Get a percentage position from a location index

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: <code>number</code> - Percentage  

| Param | Type | Description |
| --- | --- | --- |
| index | <code>number</code> | Location index |

<a name="Locations+cfiFromLocation"></a>

## locations.cfiFromLocation(index) ⇒ <code>string</code> \| <code>null</code>
Get an EpubCFI from location index

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: <code>string</code> \| <code>null</code> - EpubCFI string format  

| Param | Type | Description |
| --- | --- | --- |
| index | <code>number</code> | Location index |

<a name="Locations+cfiFromPercentage"></a>

## locations.cfiFromPercentage(value) ⇒ <code>string</code> \| <code>null</code>
Get an EpubCFI from location percentage

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: <code>string</code> \| <code>null</code> - EpubCFI string format  

| Param | Type | Description |
| --- | --- | --- |
| value | <code>number</code> | Percentage in ranging from 0 to 1 |

<a name="Locations+load"></a>

## locations.load(locations) ⇒ [<code>Locations</code>](#Locations)
Load locations from JSON

**Kind**: instance method of [<code>Locations</code>](#Locations)  

| Param | Type |
| --- | --- |
| locations | <code>string</code> | 

<a name="Locations+save"></a>

## locations.save() ⇒ <code>string</code>
Save locations to JSON

**Kind**: instance method of [<code>Locations</code>](#Locations)  
**Returns**: <code>string</code> - A JSON string  
<a name="Locations+set"></a>

## locations.set([options]) ⇒ [<code>Locations</code>](#Locations)
Set current location

**Kind**: instance method of [<code>Locations</code>](#Locations)  

| Param | Type | Description |
| --- | --- | --- |
| [options] | <code>object</code> |  |
| [options.cfi] | <code>string</code> | EpubCFI string format |
| [options.index] | <code>number</code> | Location index |
| [options.percentage] | <code>number</code> | Percentage |

<a name="Locations+clear"></a>

## locations.clear()
clear locations

**Kind**: instance method of [<code>Locations</code>](#Locations)  
<a name="Locations+destroy"></a>

## locations.destroy()
destroy

**Kind**: instance method of [<code>Locations</code>](#Locations)  
<a name="Locations.current"></a>

## Locations.current : <code>Location</code>
Current Location

**Kind**: static property of [<code>Locations</code>](#Locations)  
**Read only**: true  
<a name="Locations.generated"></a>

## Locations.generated : [<code>Promise.&lt;Locations&gt;</code>](#Locations)
**Kind**: static property of [<code>Locations</code>](#Locations)  
**Read only**: true  
<a name="Locations.event_changed"></a>

## "changed" (current, changed)
Current location changed

**Kind**: event emitted by [<code>Locations</code>](#Locations)  

| Param | Type | Description |
| --- | --- | --- |
| current | <code>object</code> | Current location |
| changed | <code>object</code> | Changed properties |

