# navigation

AJAX-based Single Page Application (SPA) navigation engine for seamless page transitions.

## Functions

| Function | Description | Example |
|----------|-------------|---------|
| `ajax` | Initialize SPA navigation engine | `dphelper.navigation.ajax()` |
| `load` | Load page via AJAX | `dphelper.navigation.load('/about')` |

## Description

Complete SPA navigation solution:
- **AJAX Loading** - Load pages without refresh
- **History Management** - Browser back/forward support
- **Hash Support** - Scroll to hash elements
- **XSS Protection** - HTML sanitization

## Usage Examples

### Initialize SPA Navigation

```javascript
// Initialize on page load
document.addEventListener('DOMContentLoaded', () => {
  dphelper.navigation.ajax();
});

// Now all anchor links will use AJAX navigation
// <a href="/about">About</a> will load without refresh
```

### Manual Page Load

```javascript
// Load a page programmatically
dphelper.navigation.load('/dashboard');

// Loads /dashboard content into current page
// Updates browser history
// Scrolls to top

// With slug normalization
dphelper.navigation.load('about');     // Loads 'about/'
dphelper.navigation.load('/contact');  // Loads 'contact/'
dphelper.navigation.load('home');      // Loads 'home/'
```

### How It Works

1. **Initialization** - `ajax()` binds all anchor tags
2. **Click Interception** - Links are converted to AJAX handlers
3. **Content Loading** - Page content fetched via fetch API
4. **Content Injection** - Body content replaced (sanitized)
5. **History Update** - Browser history updated with pushState

### HTML Structure

```html
<!-- Standard links - automatically handled -->
<nav>
  <a href="/">Home</a>
  <a href="/about">About</a>
  <a href="/contact">Contact</a>
</nav>

<!-- Main content area -->
<main id="app">
  <!-- Content loaded here -->
</main>
```

### Hash Navigation

```html
<!-- Scroll to element on page -->
<a href="#section1">Section 1</a>

<!-- Smooth scroll to section -->
<div id="section1">Content</div>
```

### Security Features

- **XSS Prevention** - HTML content is sanitized
- **Same-origin** - Only same-origin URLs allowed
- **Open Redirect Prevention** - Validates URL origins

## Advanced Usage

### Conditional Navigation

```javascript
class SPANavigator {
  constructor() {
    this.init();
  }

  init() {
    dphelper.navigation.ajax();
  }

  navigate(path) {
    dphelper.navigation.load(path);
  }

  // Programmatic navigation
  goHome() {
    this.navigate('/');
  }

  goTo(path) {
    this.navigate(path);
  }
}

const navigator = new SPANavigator();
```

### Loading State

```javascript
// The loader is automatically added
// Customize with CSS:
/*
.loader {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(255,255,255,0.9);
  z-index: 9999;
  display: flex;
  justify-content: center;
  align-items: center;
}
*/
```

## Details

- **Author:** Dario Passariello
- **Version:** 0.0.2
- **Creation Date:** 20260223
- **Last Modified:** 20260223
- **Environment:** Client-side only (browser)

---

*Automatically generated document*
