dphelper
Version:
dphelper devtools for developers
204 lines (156 loc) • 5.9 kB
Markdown
# browser
Complete browser navigation and state management utilities with connection monitoring and HTTP status handling.
## Functions
| Function | Description | Example |
|----------|-------------|---------|
| `state` | Pushes a new state to browser history without reload | `dphelper.browser.state(state, title, url)` |
| `forw` | Moves forward in browser history by n steps | `dphelper.browser.forw(1)` |
| `back` | Moves backward in browser history by n steps | `dphelper.browser.back(1)` |
| `reload` | Reloads the current page | `dphelper.browser.reload()` |
| `href` | Navigates to a specific URL | `dphelper.browser.href('https://example.com')` |
| `offLine` | Displays an offline message overlay when connection is lost | `dphelper.browser.offLine('Custom offline message')` |
| `zoom` | Returns the current browser zoom level as percentage | `dphelper.browser.zoom()` |
| `status` | Returns human-readable description of HTTP status codes | `dphelper.browser.status(404)` |
| `interlock` | Detects and monitors other active tabs of the same app | `dphelper.browser.interlock((count) => console.log(count))` |
## Description
Comprehensive browser management tool that provides:
- **History Navigation** - Push state, go forward/back, reload
- **URL Management** - Navigate to specific URLs
- **Connection Monitoring** - Detect online/offline status
- **Display Information** - Get zoom level, HTTP status descriptions
- **Multi-tab Detection** - Monitor concurrent tab usage
## Usage Examples
### Changing URL Without Reload (SPA Routing)
```javascript
// Add a new history entry without page reload
dphelper.browser.state({ page: 'dashboard', userId: 123 }, 'Dashboard', '/dashboard');
// The browser's back button will now work
window.addEventListener('popstate', (event) => {
console.log('Navigated to:', event.state);
});
```
### Programmatic Navigation
```javascript
// Navigate to a specific URL
dphelper.browser.href('/search?q=javascript');
// Navigate to external site
dphelper.browser.href('https://google.com');
// Go forward 2 pages in history
dphelper.browser.forw(2);
// Go back 1 page in history
dphelper.browser.back(1);
// Reload the page
dphelper.browser.reload();
```
### Offline Detection Overlay
```javascript
// Show default offline message
dphelper.browser.offLine();
// Show custom offline message (text is sanitized for security)
dphelper.browser.offLine('⚠️ Connection Lost. Please check your internet.');
// The overlay appears automatically when offline
// and disappears when connection is restored
```
### Get Browser Zoom Level
```javascript
const zoom = dphelper.browser.zoom();
console.log(zoom); // 100 (or 150, 200, etc. depending on zoom)
// Responsive design based on zoom
if (zoom > 100) {
document.body.classList.add('zoomed-in');
}
```
### HTTP Status Code Descriptions
```javascript
// Get description for common status codes
console.log(dphelper.browser.status(200)); // "200 OK"
console.log(dphelper.browser.status(201)); // "201 Created"
console.log(dphelper.browser.status(301)); // "301 Moved Permanently"
console.log(dphelper.browser.status(400)); // "400 Bad Request"
console.log(dphelper.browser.status(401)); // "401 Unauthorized"
console.log(dphelper.browser.status(403)); // "403 Forbidden"
console.log(dphelper.browser.status(404)); // "404 Not Found"
console.log(dphelper.browser.status(500)); // "500 Internal Server Error"
// Display user-friendly error messages
function handleApiError(statusCode) {
const message = dphelper.browser.status(statusCode);
alert(`Error: ${message}`);
}
```
### Multi-Tab Synchronization
```javascript
// Monitor active tabs of your application
dphelper.browser.interlock((tabCount) => {
console.log(`Active tabs: ${tabCount}`);
if (tabCount > 1) {
// Warn user about multiple tabs
showNotification('This app is open in multiple tabs. Changes may conflict.');
}
});
// Use BroadcastChannel for real-time sync between tabs
const channel = new BroadcastChannel('app_sync');
channel.postMessage({ type: 'UPDATE', data: 'new value' });
```
## Advanced Usage
### Complete SPA Navigation Handler
```javascript
class Router {
constructor() {
this.routes = {};
// Handle browser back/forward
window.addEventListener('popstate', (e) => {
this.navigate(window.location.pathname, false);
});
}
addRoute(path, handler) {
this.routes[path] = handler;
}
navigate(path, addToHistory = true) {
const handler = this.routes[path];
if (handler) {
if (addToHistory) {
dphelper.browser.state({ path }, 'App', path);
}
handler();
}
}
}
// Usage
const router = new Router();
router.addRoute('/', () => renderHome());
router.addRoute('/about', () => renderAbout());
router.addRoute('/dashboard', () => renderDashboard());
```
### Connection Status Manager
```javascript
class ConnectionManager {
constructor() {
this.isOnline = navigator.onLine;
this.listeners = [];
window.addEventListener('online', () => {
this.isOnline = true;
this.notifyListeners();
});
window.addEventListener('offline', () => {
this.isOnline = false;
this.notifyListeners();
});
// Show offline overlay
dphelper.browser.offLine('🔌 You are offline. Some features are disabled.');
}
onStatusChange(callback) {
this.listeners.push(callback);
}
notifyListeners() {
this.listeners.forEach(cb => cb(this.isOnline));
}
}
```
## Details
- **Author:** Dario Passariello
- **Version:** 0.0.2
- **Creation Date:** 20210101
- **Last Modified:** 20260220
- **Environment:** Client-side only (browser)
---
*Automatically generated document*