Log and search user actions in the database
Key Features
- Log actions with timestamps and types
- Search action history by type, term, and date range
- SQL database backed storage
- Web UI for viewing action logs
Log and search user actions in the database
Key Features
- Log actions with timestamps and types
- Search action history by type, term, and date range
- SQL database backed storage
- Web UI for viewing action logs
Server-Side Usage:
// Get the ActionLog API
var ActionLog = js.getObject("/OpenForum/AddOn/ActionLog","ActionLog.sjs");
// Log an action
ActionLog.logAction("USER_LOGIN", "User john.doe logged in");
// Search actions
var results = ActionLog.search("USER_LOGIN", "john", fromTimestamp, toTimestamp);
Configuration
- Requires SQL database configured
- Uses `action_log` table
Action Log - Quick Reference
/OpenForum/AddOn/ActionLog Sevice API Version 0.0.7
Get Actions
Action search
Parameters
| Name | Description |
| actionType (required=false) | {{parameter.description}} |
| term (required=false) | {{parameter.description}} |
| fromTs (required=false) | {{parameter.description}} |
| toTs (required=false) | {{parameter.description}} |
Example Get Request
/OpenForum/AddOn/ActionLog?action=search
Example Response
Example Error Response
Post Actions
Action logAction
{{action.description}}
Parameters
| Name | Description |
| actionType (required=true) | {{parameter.description}} |
| action (required=true) | {{parameter.description}} |
Example Post Request
/OpenForum/AddOn/ActionLog?action=logAction
Example Response
Example Error Response
×
Quick Reference Open in a new tab
Monitor and alert on triggers, heartbeats, and alarms
Key Features
- Three alert types: Triggers, Heart Beat monitors, and Alarms
- Configurable alert and escalation times
- Tag-based alert organization
- State tracking (OK, Triggered, Escalated)
- Web UI for alert management
Monitor and alert on triggers, heartbeats, and alarms
Key Features
- Three alert types: Triggers, Heart Beat monitors, and Alarms
- Configurable alert and escalation times
- Tag-based alert organization
- State tracking (OK, Triggered, Escalated)
- Web UI for alert management
Alert Types:
- Trigger** - Fires when specific condition occurs
- Heart Monitor** - Monitors periodic heartbeat signals
- Alarm** - Time-based alarm notifications
Server-Side Usage:
// Get the Alert API
var Alert = js.getObject("/OpenForum/AddOn/Alert","Alert.sjs");
// Add an alert
Alert.addAlert("ServerHealth", "heartMonitor", 60000, 300000);
// Trigger an alert
Alert.trigger("ServerHealth");
// Send heartbeat
Alert.beat("ServerHealth");
// Get alerts by tag
var alerts = Alert.getAlerts("production");
/OpenForum/AddOn/Alert Sevice API Version 1.0.7
Get Actions
Action triggerAlert
Parameters
| Name | Description |
| name (required=true) | {{parameter.description}} |
| reason (required=true) | {{parameter.description}} |
Example Get Request
/OpenForum/AddOn/Alert?action=triggerAlert
Example Response
Example Error Response
Action getTags
Parameters
| Name | Description |
| alertName (required=true) | {{parameter.description}} |
Example Get Request
/OpenForum/AddOn/Alert?action=getTags
Example Response
Example Error Response
Post Actions
×
Quick Reference Open in a new tab
Create and manage temporary anonymous user sessions
Key Features
- Generate unique session keys for anonymous users
- Optional password protection
- Session prefix customization
- Database-backed session storage
- Web UI for session creation
Create and manage temporary anonymous user sessions
Key Features
- Generate unique session keys for anonymous users
- Optional password protection
- Session prefix customization
- Database-backed session storage
- Web UI for session creation
Server-Side Usage:
// Get the AnonymousSession API
var AnonymousSession = js.getObject("/OpenForum/AddOn/AnonymousSession","AnonymousSession.sjs");
// Generate a session
var session = AnonymousSession.generateSession("GuestUser", "password123");
// Returns: {sessionId: "abc12345", name: "GuestUser", password: "..."}
// Generate session without password
var session = AnonymousSession.generateSession("GuestUser", null);
Use Cases
- Temporary user access
- Guest accounts
- Time-limited sessions
//OpenForum/AddOn/AnonymousSession/get.sjs
var action = transaction.getParameter("action");
if(action===null) {
transaction.setResult(transaction.SHOW_PAGE);
return;
}
try{
action = ""+action;
result = {result: "error", message: "Action "+action+" not recognised."};
var AnonymousSession = js.getObject("/OpenForum/AddOn/AnonymousSession","AnonymousSession.sjs");
if(action==="generateSession") {
var name = transaction.getParameter("name");
if(name===null) {
delete name;
} else {
name = "" + name;
}
var password = transaction.getParameter("password");
if(password===null) {
delete password;
} else {
password = "" + password;
}
var fob = transaction.getParameter("fob");
if(fob===null) {
delete fob;
} else {
fob = "" + fob;
}
var fobPassword = transaction.getParameter("fobPassword");
if(fobPassword===null) {
delete fobPassword;
} else {
fobPassword = "" + fobPassword;
}
var returned = AnonymousSession.generateSession( name,password, fob, fobPassword );
if(returned) result = {result: "ok", message: "Performed action "+action, data: returned};
}
if(action==="validateSession") {
var key = transaction.getParameter("key");
if(key===null) {
delete key;
} else {
key = "" + key;
}
var password = transaction.getParameter("password");
if(password===null) {
delete password;
} else {
password = "" + password;
}
var returned = AnonymousSession.validateSession( key, password );
if(returned) result = {result: "ok", message: "Performed action "+action, data: returned};
}
if(action==="getFobSessions") {
var fob = transaction.getParameter("fob");
if(fob===null) {
delete fob;
} else {
fob = "" + fob;
}
var fobPassword = transaction.getParameter("fobPassword");
if(fobPassword===null) {
delete fobPassword;
} else {
fobPassword = "" + fobPassword;
}
var returned = AnonymousSession.getFobSessions( fob, fobPassword );
if(returned) result = {result: "ok", message: "Performed action "+action, data: returned};
}
} catch(e) {
transaction.sendJSON( JSON.stringify({result: "error",message: "Error:"+e+" on line "+e.lineNumber+" of "+e.sourceName}));
return;
}
transaction.sendJSON( JSON.stringify(result) );
×
Quick Reference Open in a new tab
Audio recording and playback functionality
Key Features
- Audio recording capabilities
- Audio playback support
- Integration with AudioMonitor, AudioNotePad, and AudioRecorder sub-addons
Sub-AddOns:
Audio recording and playback functionality
Key Features
- Audio recording capabilities
- Audio playback support
- Integration with AudioMonitor, AudioNotePad, and AudioRecorder sub-addons
Sub-AddOns:
Audio AddOn
×
Quick Reference Open in a new tab
Backup OpenForum pages to remote sites
Key Features
- Backup pages to remote OpenForum instances
- Potential Google Drive integration
- Scheduled backup support
Status
- In development - see main page for current status
Use Cases
- Disaster recovery
- Content synchronization
- Remote site mirroring
Backup OpenForum pages to remote sites
Key Features
- Backup pages to remote OpenForum instances
- Potential Google Drive integration
- Scheduled backup support
Status
- In development - see main page for current status
Use Cases
- Disaster recovery
- Content synchronization
- Remote site mirroring
Backup AddOn
An add on to back up a set of open-forum pages to a remote site. Maybe Google Drive or another Open Forum instance ?
×
Quick Reference Open in a new tab
Barcode scanning and generation functionality
Key Features
- Barcode scanning via camera
- Barcode generation
- Multiple barcode format support
Sub-Pages
Use Cases
- Inventory management
- Product identification
- Asset tracking
Barcode scanning and generation functionality
Key Features
- Barcode scanning via camera
- Barcode generation
- Multiple barcode format support
Sub-Pages
Use Cases
- Inventory management
- Product identification
- Asset tracking
×
Quick Reference Open in a new tab
Scan barcodes using device camera with Quagga.js library
Key Features
- EAN barcode scanning
- Real-time camera feed
- JavaScript library integration
- Capture and display scanned codes
Scan barcodes using device camera with Quagga.js library
Key Features
- EAN barcode scanning
- Real-time camera feed
- JavaScript library integration
- Capture and display scanned codes
Client-Side Usage:
// Include the scanner script
OpenForum.includeScript("/OpenForum/AddOn/BarcodeScanner/BarcodeScanner.js");
// Initialize in your OpenForum.init function
OpenForum.init = function() {
BarcodeScanner.getScanner(document.getElementById("yourElement"),
function(code) {
console.log('Scanned:', code);
},
function(scanner) {
// Optional: Keep reference to scanner
}
);
};
QuickReference
The barcode scanner makes use of the Quagga javascript library.
We have chosen to only capture EAN barcodes at present.
Quick Start Code
In your pages page.js file, include the barcode scanner script. If you want to keep a reference to your barcode scanner, add a variable to hold it.
OpenForum.includeScript("/OpenForum/AddOn/BarcodeScanner/BarcodeScanner.js");
var barcodeScanner;
Within your OpenForum init function, request a barcode scanner, passing it the element where you want the video feed to be displayed and the function you want called when a barcode has been detected.
If you want to keep a reference to your barcode scanner, add a callback function to recieve a reference to the created scanner.
The scanner will immediately start scanning for barcodes. When one is found, the callback function will be called passing in the code.
OpenForum.init = function() {
BarcodeScanner.getScanner( document.getElementById("yourElement"), lookup,
function(scanner) {
barcodeScanner = scanner;
});
×
Quick Reference Open in a new tab
Calendar display and event management
Key Features
- Interactive calendar view
- Event display and management
- Month/day/week views
- Client-side calendar rendering
Calendar display and event management
Key Features
- Interactive calendar view
- Event display and management
- Month/day/week views
- Client-side calendar rendering
Client-Side Usage:
// Calendar is rendered in #calendarView element
// See page.js for initialization details
Use Cases
- Event scheduling
- Date selection
- Availability display
//OpenForum/AddOn/Calendar/QuickReference/page.js
×
Quick Reference Open in a new tab
Create and manage task checklists with inline editing
Key Features
- Add, edit, remove tasks
- Reorder tasks (move up/down)
- Save task lists to JSON
- Data-bound table interface
Quick Reference Open in a new tab
Claude AI integration with Model Context Protocol (MCP) support
Key Features
- MCP server and client implementation
- Claude Desktop integration
- AI context management
- Message queue monitoring
- Tool creation and management
- Content generation support
- Giraffe.js graphics library integration
Claude AI integration with Model Context Protocol (MCP) support
Key Features
- MCP server and client implementation
- Claude Desktop integration
- AI context management
- Message queue monitoring
- Tool creation and management
- Content generation support
- Giraffe.js graphics library integration
Server-Side Usage:
// Get ClaudeMCP API
var ClaudeMCP = js.getObject("/OpenForum/AddOn/ClaudeMCP","ClaudeMCP.sjs");
// Work with MCP tools and contexts
Key Resources
Use Cases
- AI-powered automation
- Content generation
- Interactive AI tools
- Graphics creation
See main
ClaudeMCP Hub for full documentation
×
Quick Reference Open in a new tab
Send SMS messages via ClickSend API
Key Features
- SMS sending functionality
- ClickSend API integration
- Message delivery tracking
Send SMS messages via ClickSend API
Key Features
- SMS sending functionality
- ClickSend API integration
- Message delivery tracking
Server-Side Usage:
// Get ClickSendSMS API
var ClickSendSMS = js.getObject("/OpenForum/AddOn/ClickSendSMS","ClickSendSMS.sjs");
// Send SMS (implementation depends on ClickSendSMS API)
// ClickSendSMS.sendSMS(phoneNumber, message);
Configuration
- Requires ClickSend API credentials
- See ClickSend documentation for setup
Use Cases
- Notifications
- Alerts
- Two-factor authentication
×
Quick Reference Open in a new tab
Visual content editor for creating and editing page content
Key Features
- Block-based content editing
- Visual page builder
- Drag-and-drop interface
- Multiple content block types
Visual content editor for creating and editing page content
Key Features
- Block-based content editing
- Visual page builder
- Drag-and-drop interface
- Multiple content block types
Client-Side Usage:
// Content editor is initialized in #pageEditor element
// See page.js for initialization details
Use Cases
- Page creation
- Content layout design
- Visual editing
- Block-based content management
//OpenForum/AddOn/ContentEditor/QuickReference/page.js
OpenForum.init = function() {
};
×
Quick Reference Open in a new tab
Central data management and table-based data storage
Key Features
- Table-based data organization
- JSON data storage
- CRUD operations on datasets
- Web UI for data management
DataCentral Quick Reference
Central data management and table-based data storage
Key Features
- Table-based data organization
- JSON data storage
- CRUD operations on datasets
- Web UI for data management
Client-Side Usage:
// Uses OpenForum Table extension
// Data stored in table format
// See table-definition.txt for structure
Use Cases
- Central data repository
- Shared data storage
- Structured data management
//OpenForum/AddOn/DataCentral/QuickReference/page.js
×
Quick Reference Open in a new tab
Log and store data events and messages
Key Features
- Data logging to message queue
- Data storage functionality
- Log message viewing
- Test interface for debugging
DataLogger Quick Reference
Log and store data events and messages
Key Features
- Data logging to message queue
- Data storage functionality
- Log message viewing
- Test interface for debugging
Server-Side Usage:
// Get DataLogger API
var DataLogger = js.getObject("/OpenForum/AddOn/DataLogger","DataLogger.sjs");
// Log data
DataLogger.log("Event message", dataObject);
// Store data
DataLogger.store("dataKey", dataObject);
Use Cases
- Event logging
- Data persistence
- Debug logging
- Message tracking
×
Quick Reference Open in a new tab
Transform text and data using JavaScript with visual editor
Key Features
- Input/Output text editors
- JavaScript transformation scripts
- Helper functions for common operations
- Live transformation execution
- Example transformations included
- No server-side data sharing
Quick Reference Open in a new tab
Remote desktop interface for managing OpenForum instances
Key Features
- Tree-based navigation
- Tab-based multi-page interface
- Remote instance management
- Host selection
- Real-time updates with clock
Desktop Quick Reference
Remote desktop interface for managing OpenForum instances
Key Features
- Tree-based navigation
- Tab-based multi-page interface
- Remote instance management
- Host selection
- Real-time updates with clock
Client-Side Usage:
// Desktop loads with tree navigation and tab interface
// Select host via modal dialog
// Navigate pages via tree view
// Manage multiple tabs
Use Cases
- Remote administration
- Multi-instance management
- Centralized control interface
//OpenForum/AddOn/Desktop/QuickReference/page.js
×
Quick Reference Open in a new tab
Manage developer resource links and file references
Key Features
- Store and manage developer file references
- Link storage pages to target pages
- File name tracking
- Editable table interface
Developer Quick Reference
Manage developer resource links and file references
Key Features
- Store and manage developer file references
- Link storage pages to target pages
- File name tracking
- Editable table interface
Use Cases
- Developer resource management
- File reference tracking
- Quick access to development files
- Cross-page file linking
//OpenForum/AddOn/Developer/QuickReference/page.js
×
Quick Reference Open in a new tab
Visual file difference viewer with syntax highlighting
Key Features
- Side-by-side file comparison
- Syntax highlighting
- Line-by-line diff display
- Visual change indicators
DifferenceView Quick Reference
Visual file difference viewer with syntax highlighting
Key Features
- Side-by-side file comparison
- Syntax highlighting
- Line-by-line diff display
- Visual change indicators
Client-Side Usage:
// Diff viewer rendered in #fileDiff element
// See page.js for initialization details
Use Cases
- Code review
- Version comparison
- Change tracking
- Merge conflict resolution
//OpenForum/AddOn/DifferenceView/QuickReference/page.js
×
Quick Reference Open in a new tab
Generate PDF documents from HTML content
Key Features
- HTML to PDF conversion
- A4 page format support
- Header and footer templates
- Canvas-based preview
- Client-side PDF generation
DocumentGenerator Quick Reference
Generate PDF documents from HTML content
Key Features
- HTML to PDF conversion
- A4 page format support
- Header and footer templates
- Canvas-based preview
- Client-side PDF generation
Client-Side Usage:
// Generate PDF from element
PdfGenerator.generatePdf(document.getElementById('doc'), 'example.pdf');
// Structure your document
//
Use Cases
- Document generation
- Report creation
- Invoice generation
- Certificate creation
//OpenForum/AddOn/DocumentGenerator/QuickReference/page.js
×
Quick Reference Open in a new tab
Central hub for OpenForum editor tools
Key Features
- Links to all editor tools
- Content Editor access
- Menu Editor access
- Page Template Editor access
Available Editors:
Use Cases
- Quick access to editing tools
- Centralized editor navigation
Central hub for OpenForum editor tools
Key Features
- Links to all editor tools
- Content Editor access
- Menu Editor access
- Page Template Editor access
Available Editors:
Use Cases
- Quick access to editing tools
- Centralized editor navigation
×
Quick Reference Open in a new tab
Search and index OpenForum pages using ElasticSearch
Key Features
- Full-text search across all OpenForum pages
- Index page content and attachments
- Interactive query builder with tree navigation
- Advanced query capabilities (wildcards, boolean operators)
- Real-time indexing of page updates
ElasticSearch Quick Reference
Search and index OpenForum pages using ElasticSearch
Key Features
- Full-text search across all OpenForum pages
- Index page content and attachments
- Interactive query builder with tree navigation
- Advanced query capabilities (wildcards, boolean operators)
- Real-time indexing of page updates
Server-Side Usage:
// Get the ElasticSearch API
var ElasticSearch = js.getObject("/OpenForum/AddOn/ElasticSearch","ElasticSearch.sjs");
// Index a page
ElasticSearch.indexPage("/MyPage");
// Search for pages
var results = ElasticSearch.search("search query");
// Delete from index
ElasticSearch.deletePage("/MyPage");
Client-Side Usage:
// Search using the REST API
JSON.get('/OpenForum/AddOn/ElasticSearch/Search', null,
'query=search terms')
.onSuccess(function(results) {
console.log('Found:', results);
}).go();
Configuration
- Configure ElasticSearch server connection in AddOn settings
- Index location and update frequency configurable
- Supports multiple index types (pages, attachments, metadata)
×
Quick Reference Open in a new tab
Clean up and optimize image attachments in OpenForum
Key Features
- Remove unused image attachments
- Identify orphaned images not referenced in pages
- Batch cleanup operations
- Preview images before deletion
- Configurable cleanup rules
ImageCleaner Quick Reference
Clean up and optimize image attachments in OpenForum
Key Features
- Remove unused image attachments
- Identify orphaned images not referenced in pages
- Batch cleanup operations
- Preview images before deletion
- Configurable cleanup rules
Server-Side Usage:
// Get the ImageCleaner API
var ImageCleaner = js.getObject("/OpenForum/AddOn/ImageCleaner","ImageCleaner.sjs");
// Find orphaned images on a page
var orphans = ImageCleaner.findOrphanedImages("/MyPage");
// Clean orphaned images
ImageCleaner.cleanOrphanedImages("/MyPage");
// Get image usage report
var report = ImageCleaner.getImageReport("/MyPage");
Client-Side Usage:
// Scan for orphaned images
JSON.get('/OpenForum/AddOn/ImageCleaner/Scan', null,
'pageName=/MyPage')
.onSuccess(function(result) {
console.log('Orphaned images:', result);
}).go();
Configuration
- Runs as a background service
- Configurable scan schedule
- Safe mode prevents accidental deletion
×
Quick Reference Open in a new tab
Upload, process, and categorize images in OpenForum
Key Features
- Batch image upload and processing
- Automatic image categorization and tagging
- Thumbnail generation
- Image format conversion
- EXIF data extraction
- Organize images by category
ImageProcessor Quick Reference
Upload, process, and categorize images in OpenForum
Key Features
- Batch image upload and processing
- Automatic image categorization and tagging
- Thumbnail generation
- Image format conversion
- EXIF data extraction
- Organize images by category
Server-Side Usage:
// Get the ImageProcessor API
var ImageProcessor = js.getObject("/OpenForum/AddOn/ImageProcessor","ImageProcessor.sjs");
// Process uploaded image
ImageProcessor.processImage("/MyPage", "image.jpg", {
createThumbnail: true,
maxWidth: 1024,
category: "photos"
});
// Generate thumbnail
ImageProcessor.createThumbnail("/MyPage", "image.jpg", 200, 200);
// Extract EXIF data
var exif = ImageProcessor.getExifData("/MyPage", "image.jpg");
Client-Side Upload:
// Upload and process image
var formData = new FormData();
formData.append('image', fileInput.files0);
formData.append('category', 'photos');
JSON.post('/OpenForum/AddOn/ImageProcessor/Upload', null, formData)
.onSuccess(function(result) {
console.log('Image processed:', result);
}).go();
Configuration
- Configure thumbnail sizes and quality
- Set default image categories
- Define processing rules and filters
×
Quick Reference Open in a new tab
Send emails from server-side JavaScript using SMTP
Key Features
- Send emails to single or multiple recipients
- HTML and plain text email support
- Configurable SMTP settings
- Uses admin email configuration
Server-Side Usage:
// Get the Mailer API
var Mailer = js.getObject("/OpenForum/AddOn/Mailer","Mailer.sjs");
// Send email to single recipient
Mailer.sendEmail("user@example.com", "Subject", "Email content");
// Send email to multiple recipients
Mailer.sendEmail(["user1@example.com", "user2@example.com"],
"Subject", "Email content");
Configuration
- Admin email settings stored in `/OpenForum/Users/Admin/mailer.config`
- Requires SMTP server configuration
Send emails from server-side JavaScript using SMTP
Key Features
- Send emails to single or multiple recipients
- HTML and plain text email support
- Configurable SMTP settings
- Uses admin email configuration
Server-Side Usage:
// Get the Mailer API
var Mailer = js.getObject("/OpenForum/AddOn/Mailer","Mailer.sjs");
// Send email to single recipient
Mailer.sendEmail("user@example.com", "Subject", "Email content");
// Send email to multiple recipients
Mailer.sendEmail("user1@example.com", "user2@example.com",
"Subject", "Email content");
Configuration
- Admin email settings stored in `/OpenForum/Users/Admin/mailer.config`
- Requires SMTP server configuration
Mailer Quick Reference
Notes
×
Quick Reference Open in a new tab
User authentication, registration, and member management system
Key Features
- User registration and login
- Password management and reset
- Email verification
- Member profile management
- Role-based access control
- Session management
- Remember me functionality
MemberServices Quick Reference
User authentication, registration, and member management system
Key Features
- User registration and login
- Password management and reset
- Email verification
- Member profile management
- Role-based access control
- Session management
- Remember me functionality
Server-Side Usage:
// Get the MemberServices API
var MemberServices = js.getObject("/OpenForum/AddOn/MemberServices","MemberServices.sjs");
// Register new member
MemberServices.register("username", "email@example.com", "password");
// Authenticate user
var authenticated = MemberServices.authenticate("username", "password");
// Get member details
var member = MemberServices.getMember("username");
// Update member profile
MemberServices.updateProfile("username", {
email: "newemail@example.com",
displayName: "Display Name"
});
// Check if user has role
var hasRole = MemberServices.hasRole("username", "admin");
Client-Side Usage:
// Login
JSON.post('/OpenForum/AddOn/MemberServices/Login', null,
'username=myuser&password=mypass')
.onSuccess(function(result) {
console.log('Logged in:', result);
}).go();
// Register
JSON.post('/OpenForum/AddOn/MemberServices/Register', null,
'username=newuser&email=user@example.com&password=pass123')
.onSuccess(function(result) {
console.log('Registered:', result);
}).go();
// Get current user
JSON.get('/OpenForum/AddOn/MemberServices/CurrentUser')
.onSuccess(function(user) {
console.log('Current user:', user);
}).go();
Configuration
- Email verification settings
- Password strength requirements
- Session timeout configuration
- Default roles for new members
×
Quick Reference Open in a new tab
Visual editor for creating and managing hierarchical navigation menus
Key Features
- Drag-and-drop menu structure editing
- Tree-based menu visualization
- Create multi-level menu hierarchies
- Save menus as JSON definitions
- Load and edit existing menu definitions
- Live preview of menu structure
Quick Reference Open in a new tab
Voice-enabled text editor with speech recognition and commands
Key Features
- Voice input and dictation
- Voice commands for text editing
- Text-to-speech read back
- Rich text editing
- Undo/redo support
- Cursor navigation by voice
- Special character insertion by voice
NotePad Quick Reference
Voice-enabled text editor with speech recognition and commands
Key Features
- Voice input and dictation
- Voice commands for text editing
- Text-to-speech read back
- Rich text editing
- Undo/redo support
- Cursor navigation by voice
- Special character insertion by voice
Voice Commands
- System: start listening, stop listening, save, help, read back, stop reading
- Editing: undo, retype, delete line, backspace, delete word
- Cursor: left, right, up, down, word left/right, line start/end, select all
- Characters: next line, comma, full stop, question mark, quotes, brackets, tab, bullet point
Server-Side Usage:
// Get the NotePad API
var NotePad = js.getObject("/OpenForum/AddOn/NotePad","NotePad.sjs");
// Save note
NotePad.saveNote("/MyPage", "note.txt", "Note content");
// Load note
var content = NotePad.loadNote("/MyPage", "note.txt");
Client-Side Usage:
// Save note via API
JSON.post('/OpenForum/AddOn/NotePad/Save', null,
'pageName=/MyPage&fileName=note.txt&content=' encodeURIComponent(noteContent))
.onSuccess(function(result) {
console.log('Note saved');
}).go();
// Load note
JSON.get('/OpenForum/AddOn/NotePad/Load', null,
'pageName=/MyPage&fileName=note.txt')
.onSuccess(function(content) {
console.log('Note loaded:', content);
}).go();
Configuration
- Voice recognition uses browser Web Speech API
- Requires microphone permissions
- Customizable voice commands
×
Quick Reference Open in a new tab
Service for running large batch processing tasks in manageable chunks over multiple cycles
Key Features
- Process large lists in chunks to avoid timeouts
- Resume processing across server restarts
- Monitor progress in real-time
- Queue-based task processing
- Configurable chunk size and timing
- Server-side JavaScript processing
OddJob Quick Reference
Service for running large batch processing tasks in manageable chunks over multiple cycles
Key Features
- Process large lists in chunks to avoid timeouts
- Resume processing across server restarts
- Monitor progress in real-time
- Queue-based task processing
- Configurable chunk size and timing
- Server-side JavaScript processing
Server-Side Usage:
// Create an OddJob processor (TestOddJob.sjs example)
var processor = {
init: function(config) {
// Initialize processor
return true;
},
processItem: function(item, context) {
// Process single item from list
console.log("Processing: " item);
return {success: true, message: "Processed " item};
},
complete: function(context) {
// Called when all items processed
console.log("OddJob complete");
}
};
// Configuration file (odd-job.config.json)
{
"processor": "/OpenForum/AddOn/OddJob/TestOddJob.sjs",
"chunkSize": 10,
"delayBetweenChunks": 1000,
"list": {
"pageName": "/OpenForum/AddOn/OddJob",
"fileName": "my-list.json"
}
}
Client-Side Usage:
// Start OddJob
JSON.post('/OpenForum/AddOn/OddJob/Start', null,
'pageName=/MyPage&configFile=odd-job.config.json')
.onSuccess(function(result) {
console.log('OddJob started');
}).go();
// Stop OddJob
JSON.post('/OpenForum/AddOn/OddJob/Stop')
.onSuccess(function(result) {
console.log('OddJob stopped');
}).go();
// Get status
JSON.get('/OpenForum/AddOn/OddJob/Status')
.onSuccess(function(status) {
console.log('Progress:', status);
}).go();
Configuration
- Define processor script location
- Set chunk size (items per cycle)
- Configure delay between chunks (milliseconds)
- Specify list file location
- List format: JSON array of items to process
×
Quick Reference Open in a new tab
Package OpenForum pages and attachments for distribution and deployment
Key Features
- Create distributable page packages
- Bundle pages with all attachments
- Export page hierarchies
- Import packages to other OpenForum instances
- Version control for page packages
- Dependency tracking
Packager Quick Reference
Package OpenForum pages and attachments for distribution and deployment
Key Features
- Create distributable page packages
- Bundle pages with all attachments
- Export page hierarchies
- Import packages to other OpenForum instances
- Version control for page packages
- Dependency tracking
Server-Side Usage:
// Get the Packager API
var Packager = js.getObject("/OpenForum/AddOn/Packager","Packager.sjs");
// Create package from page
Packager.createPackage("/MyPage", "/Packages/my-package.zip");
// Create package with specific files
Packager.createPackage("/MyPage", "/Packages/my-package.zip", {
includeAttachments: true,
includeChildren: true
});
// Extract package
Packager.extractPackage("/Packages/my-package.zip", "/DestinationPage");
// List package contents
var contents = Packager.listPackageContents("/Packages/my-package.zip");
Client-Side Usage:
// Create package
JSON.post('/OpenForum/AddOn/Packager/Create', null,
'pageName=/MyPage&outputFile=my-package.zip')
.onSuccess(function(result) {
console.log('Package created:', result);
}).go();
// Extract package
JSON.post('/OpenForum/AddOn/Packager/Extract', null,
'packageFile=my-package.zip&destination=/MyPage')
.onSuccess(function(result) {
console.log('Package extracted');
}).go();
Package Format
- ZIP archive containing page.content, data.json, and attachments
- Preserves page structure and metadata
- Includes dependency information
Configuration
- Configure default package location
- Set inclusion/exclusion rules
- Define package metadata
×
Quick Reference Open in a new tab
Visual editor for creating and managing page templates with drag-and-drop components
Key Features
- Drag-and-drop template designer
- Tree-based template structure visualization
- Create reusable page templates
- Component library integration
- Save templates as JSON definitions
- Load and edit existing templates
- Live preview of template structure
PageTemplateEditor Quick Reference
Visual editor for creating and managing page templates with drag-and-drop components
Key Features
- Drag-and-drop template designer
- Tree-based template structure visualization
- Create reusable page templates
- Component library integration
- Save templates as JSON definitions
- Load and edit existing templates
- Live preview of template structure
Server-Side Usage:
// Get the PageTemplateEditor API
var PageTemplateEditor = js.getObject("/OpenForum/AddOn/PageTemplateEditor","PageTemplateEditor.sjs");
// Load template definition
var template = PageTemplateEditor.loadTemplate("/MyPage", "template.json");
// Save template definition
PageTemplateEditor.saveTemplate("/MyPage", "template.json", templateData);
// Apply template to page
PageTemplateEditor.applyTemplate("/TargetPage", templateData);
// Create template structure
var templateStructure = {
name: "My Template",
components:
{type: "header", content: "Welcome"},
{type: "content", layout: "two-column"}
};
PageTemplateEditor.saveTemplate("/MyPage", "template.json", templateStructure);
Client-Side Usage:
// Load template
JSON.get('/OpenForum/AddOn/PageTemplateEditor/Load', null,
'pageName=/MyPage&fileName=template.json')
.onSuccess(function(template) {
console.log('Template loaded:', template);
}).go();
// Save template
JSON.post('/OpenForum/AddOn/PageTemplateEditor/Save', null,
'pageName=/MyPage&fileName=template.json&data=' JSON.stringify(templateData))
.onSuccess(function(result) {
console.log('Template saved');
}).go();
Template Definition Format
{
"name": "Template Name",
"components": 
{"type": "component", "content": "Component content"}
"/>
}
]
}
×
Quick Reference Open in a new tab
Interactive HTML5 canvas-based visualization and drawing tool
Key Features
- HTML5 canvas drawing and rendering
- Interactive visual elements
- Custom visualization creation
- Event-driven interaction model
- Editable canvas objects
- Modal form integration for editing
- Real-time rendering
PaperScape Quick Reference
Interactive HTML5 canvas-based visualization and drawing tool
Key Features
- HTML5 canvas drawing and rendering
- Interactive visual elements
- Custom visualization creation
- Event-driven interaction model
- Editable canvas objects
- Modal form integration for editing
- Real-time rendering
Server-Side Usage:
// Get the PaperScape API
var PaperScape = js.getObject("/OpenForum/AddOn/PaperScape","PaperScape.sjs");
// Save canvas data
PaperScape.saveCanvas("/MyPage", "canvas.json", canvasData);
// Load canvas data
var canvas = PaperScape.loadCanvas("/MyPage", "canvas.json");
// Export canvas as image
PaperScape.exportImage("/MyPage", "canvas.json", "output.png");
Client-Side Usage:
// Initialize PaperScape canvas
var canvas = document.getElementById('paperScapeCanvas');
var context = canvas.getContext('2d');
// Save canvas state
JSON.post('/OpenForum/AddOn/PaperScape/Save', null,
'pageName=/MyPage&fileName=canvas.json&data=' JSON.stringify(canvasState))
.onSuccess(function(result) {
console.log('Canvas saved');
}).go();
// Load canvas state
JSON.get('/OpenForum/AddOn/PaperScape/Load', null,
'pageName=/MyPage&fileName=canvas.json')
.onSuccess(function(canvasData) {
// Render canvas from data
renderCanvas(canvasData);
}).go();
Canvas Data Format
{
"objects":
{
"type": "rectangle",
"x": 100, "y": 100,
"width": 200, "height": 150,
"color": "#ff0000"
},
{
"type": "circle",
"x": 300, "y": 300,
"radius": 50,
"color": "#00ff00"
}
}
Configuration
- Canvas size and background color
- Interactive editing enabled/disabled
- Object types and properties
- Event handlers for canvas interactions
×
Quick Reference Open in a new tab
(
Publisher promotes any /... page hierarchy to production by copying it without the /Development prefix so work-in-progress stays isolated.
Every text-based attachment is rewritten so `"/"` links become live paths, and optional rules in `development-translation.sjs` can further transform each file.
Practice publishes generate release notes plus a deletions script preview without touching the live site; the real publish copies files and appends removal commands into `process-deletions.sjs` for manual execution.
QuickReference
(
Publisher promotes any /... page hierarchy to production by copying it without the /Development prefix so work-in-progress stays isolated.
Every text-based attachment is rewritten so `"/"` links become live paths, and optional rules in `development-translation.sjs` can further transform each file.
Practice publishes generate release notes plus a deletions script preview without touching the live site; the real publish copies files and appends removal commands into `process-deletions.sjs` for manual execution.
Actions
- Check for Page Differences – Compares timestamps and hashes between the /Development tree and its published counterpart so you can see what will change.
- Reverse Publish – Copies the published page back into /Development to recover live edits or restart from a known-good state.
- Publish Page (practice) – Runs the full translation/diff pipeline, writes detailed release notes, but skips copying so you can verify the impact.
- Publish Page (for real) – Performs the same checks and then copies the files, applies path rewrites, generates release notes, and refreshes the published page.
Special files
- development-translation.sjs – Optional script invoked per text file; receives the file contents as `data` and must return the transformed string.
- publish-config.json – JSON blob for exclusions, e.g. `{"excludedFiles":"do-not-publish.me"}`; also expands the standard exclusion list.
- do-not-release.txt – Presence blocks publishing and should describe why the page is locked.
- process-deletions.sjs – Auto-generated script listing live files to delete after you verify them; run manually once you are satisfied.
- release-notes.html.fragment – Captures the accordion-style log of each publish run for auditing.
Usage tips
- Publish from the root /... page you want to release; sub pages are handled automatically.
- Always inspect the practice-mode release notes before running the real publish so you catch unexpected deletions or TODO markers.
- Keep the generated deletions script in source control (or review it) before executing so you have an audit trail of removed files.
×
Quick Reference Open in a new tab
Quick Reference Open in a new tab
Interactive quiz system with questions, answers, and photo support
Key Features
- Create interactive quizzes
- Multiple choice questions
- Photo/image integration
- Score tracking
- Timer support
- Question randomization
- Result summary and feedback
- Modal photo viewer
Quiz Quick Reference
Interactive quiz system with questions, answers, and photo support
Key Features
- Create interactive quizzes
- Multiple choice questions
- Photo/image integration
- Score tracking
- Timer support
- Question randomization
- Result summary and feedback
- Modal photo viewer
Server-Side Usage:
// Get the Quiz API
var Quiz = js.getObject("/OpenForum/AddOn/Quiz","Quiz.sjs");
// Create quiz
var quizData = {
title: "My Quiz",
questions: 
"3", "4", "5""/>,
correct: 1,
photo: "question1.jpg"
}
]
};
Quiz.saveQuiz("/MyPage", "quiz.json", quizData);
// Load quiz
var quiz = Quiz.loadQuiz("/MyPage", "quiz.json");
// Get quiz results
var results = Quiz.getResults("quizId", "userId");
Client-Side Usage:
// Load quiz
JSON.get('/OpenForum/AddOn/Quiz/Load', null,
'pageName=/MyPage&fileName=quiz.json')
.onSuccess(function(quiz) {
console.log('Quiz loaded:', quiz);
}).go();
// Submit quiz answers
JSON.post('/OpenForum/AddOn/Quiz/Submit', null,
'quizId=quiz123&answers=' JSON.stringify(userAnswers))
.onSuccess(function(result) {
console.log('Score:', result.score);
}).go();
Quiz Data Format
{
"title": "Quiz Title",
"timer": 300,
"questions": 
"Option 1", "Option 2", "Option 3""/>,
"correct": 1,
"photo": "photo.jpg",
"explanation": "Why this answer is correct"
}
]
}
Configuration
- Timer duration (seconds)
- Randomize questions
- Show correct answers after completion
- Photo modal display
×
Quick Reference Open in a new tab
Raspberry Pi integration tools and utilities for OpenForum
Key Features
- Raspberry Pi GPIO control
- Hardware interface integration
- Sensor data collection
- Remote Pi management
- System monitoring and control
- Pi-specific services and tools
RPi Quick Reference
Raspberry Pi integration tools and utilities for OpenForum
Key Features
- Raspberry Pi GPIO control
- Hardware interface integration
- Sensor data collection
- Remote Pi management
- System monitoring and control
- Pi-specific services and tools
Server-Side Usage:
// Get the RPi API
var RPi = js.getObject("/OpenForum/AddOn/RPi","RPi.sjs");
// Control GPIO pins
RPi.setGPIO(17, true); // Set pin 17 HIGH
var state = RPi.getGPIO(17); // Read pin 17
// Read sensor data
var temperature = RPi.readTemperature();
var humidity = RPi.readHumidity();
// System commands
var cpuTemp = RPi.getCPUTemperature();
var systemInfo = RPi.getSystemInfo();
Client-Side Usage:
// Control GPIO via API
JSON.post('/OpenForum/AddOn/RPi/GPIO', null,
'pin=17&state=HIGH')
.onSuccess(function(result) {
console.log('GPIO set');
}).go();
// Read sensor data
JSON.get('/OpenForum/AddOn/RPi/Sensor', null,
'type=temperature')
.onSuccess(function(data) {
console.log('Temperature:', data.value);
}).go();
// Get system status
JSON.get('/OpenForum/AddOn/RPi/Status')
.onSuccess(function(status) {
console.log('CPU Temp:', status.cpuTemp);
}).go();
Configuration
- GPIO pin mapping
- Sensor types and connections
- Update intervals
- Alert thresholds
×
Quick Reference Open in a new tab
Fetch, parse, and render RSS feeds as HTML content
Key Features
- Fetch and parse RSS feeds
- Convert RSS to HTML
- Cache feed content
- Automatic feed updates
- Customizable rendering templates
- Multiple feed support
- Force update capability
Quick Reference Open in a new tab
Package and release OpenForum pages for deployment to other sites
Key Features
- Create versioned release packages
- Track release history and versions
- Package pages with all dependencies
- Release notes management
- Pre-release and post-install scripts
- Exclude files from releases
- Remove old releases
- View release package information
ReleasedPackages Quick Reference
Package and release OpenForum pages for deployment to other sites
Key Features
- Create versioned release packages
- Track release history and versions
- Package pages with all dependencies
- Release notes management
- Pre-release and post-install scripts
- Exclude files from releases
- Remove old releases
- View release package information
Server-Side Usage:
// Get the ReleasedPackages API
var ReleasedPackages = js.getObject("/OpenForum/AddOn/ReleasedPackages","ReleasedPackages.sjs");
// Release a page
ReleasedPackages.releasePage("/MyPage", "1.0.0", "Release notes");
// Get release information
var releaseInfo = ReleasedPackages.getReleaseInfo("/MyPage", "1.0.0");
// List all releases
var releases = ReleasedPackages.listReleases();
// Remove a release
ReleasedPackages.removeRelease("/MyPage", "1.0.0");
// Get release package
var packageData = ReleasedPackages.getPackage("/MyPage", "1.0.0");
Client-Side Usage:
// Release a page
JSON.post('/OpenForum/AddOn/ReleasedPackages/Release', null,
'pageName=/MyPage&version=1.0.0¬es=' encodeURIComponent('Release notes'))
.onSuccess(function(result) {
console.log('Page released:', result);
}).go();
// List releases
JSON.get('/OpenForum/AddOn/ReleasedPackages/List')
.onSuccess(function(releases) {
console.log('Releases:', releases);
}).go();
// Remove release
JSON.post('/OpenForum/AddOn/ReleasedPackages/Remove', null,
'pageName=/MyPage&version=1.0.0')
.onSuccess(function(result) {
console.log('Release removed');
}).go();
Special Files
- pre-release.sjs - Script run on releasing server before the release package is built
- release-excludes-files.json - List of files to exclude from release (supports regex like `.*-test.js`)
- release-info.json - Contains release information (version, timestamp, notes)
- install.sjs - Run on target server after package installation
Release Process
1. Create release notes for the version
2. Optional: Add page-specific notes
3. Run pre-release.sjs (if present) for validation
4. Create ZIP package excluding specified files
5. Store release with version number and timestamp
6. Generate release-info.json metadata
Configuration
- Version numbering scheme
- Release storage location
- Excluded file patterns
- Notification settings
×
Quick Reference Open in a new tab
Remote administration and management of OpenForum servers
Key Features
- Remote server management
- Execute administrative tasks remotely
- Monitor server status
- Manage multiple OpenForum instances
- Remote configuration updates
- Server health checks
- User management across servers
RemoteAdministration Quick Reference
Remote administration and management of OpenForum servers
Key Features
- Remote server management
- Execute administrative tasks remotely
- Monitor server status
- Manage multiple OpenForum instances
- Remote configuration updates
- Server health checks
- User management across servers
Server-Side Usage:
// Get the RemoteAdministration API
var RemoteAdmin = js.getObject("/OpenForum/AddOn/RemoteAdministration","RemoteAdministration.sjs");
// Execute remote command
RemoteAdmin.executeCommand("serverUrl", "command", parameters);
// Get server status
var status = RemoteAdmin.getServerStatus("serverUrl");
// Update remote configuration
RemoteAdmin.updateConfig("serverUrl", configData);
// Manage remote users
RemoteAdmin.createUser("serverUrl", "username", "password");
RemoteAdmin.deleteUser("serverUrl", "username");
Client-Side Usage:
// Execute remote command
JSON.post('/OpenForum/AddOn/RemoteAdministration/Execute', null,
'server=' encodeURIComponent('https://remote-server.com')
'&command=restart')
.onSuccess(function(result) {
console.log('Command executed:', result);
}).go();
// Get server status
JSON.get('/OpenForum/AddOn/RemoteAdministration/Status', null,
'server=' encodeURIComponent('https://remote-server.com'))
.onSuccess(function(status) {
console.log('Server status:', status);
}).go();
Configuration
- Authorized server list
- Authentication credentials
- Command permissions
- Timeout settings
- SSL/TLS configuration
×
Quick Reference Open in a new tab
Centralized logging system for collecting logs from remote OpenForum servers
Key Features
- Collect logs from remote servers
- Centralized log aggregation
- Remote error tracking
- Log filtering and search
- Real-time log streaming
- Log level management
- Multi-server log consolidation
RemoteLogger Quick Reference
Centralized logging system for collecting logs from remote OpenForum servers
Key Features
- Collect logs from remote servers
- Centralized log aggregation
- Remote error tracking
- Log filtering and search
- Real-time log streaming
- Log level management
- Multi-server log consolidation
Server-Side Usage:
// Get the RemoteLogger API
var RemoteLogger = js.getObject("/OpenForum/AddOn/RemoteLogger","RemoteLogger.sjs");
// Send log to remote logger
RemoteLogger.log("INFO", "My log message");
RemoteLogger.error("Error message");
RemoteLogger.warn("Warning message");
RemoteLogger.debug("Debug message");
// Log with context
RemoteLogger.log("INFO", "User action", {
user: "username",
action: "login",
timestamp: new Date().getTime()
});
// Get logs
var logs = RemoteLogger.getLogs({
level: "ERROR",
startTime: startTimestamp,
endTime: endTimestamp
});
Client-Side Usage:
// Send log message
JSON.post('/OpenForum/AddOn/RemoteLogger/Log', null,
'level=INFO&message=' encodeURIComponent('Log message'))
.onSuccess(function(result) {
console.log('Log sent');
}).go();
// Get logs
JSON.get('/OpenForum/AddOn/RemoteLogger/Get', null,
'level=ERROR&limit=100')
.onSuccess(function(logs) {
console.log('Logs:', logs);
}).go();
Log Levels
- DEBUG - Detailed debugging information
- INFO - General informational messages
- WARN - Warning messages
- ERROR - Error messages
- FATAL - Critical error messages
Configuration
- Remote logger endpoint URL
- Log level filtering
- Log retention period
- Maximum log size
- Authentication credentials
×
Quick Reference Open in a new tab
Database access and SQL query builder for OpenForum
Key Features
- Execute SQL queries from server-side JavaScript
- Built-in SQL query builder
- Support for SELECT, INSERT, UPDATE, DELETE, UPSERT operations
- Parameterized queries to prevent SQL injection
- Multiple database connection support via aliases
- Interactive SQL editor with syntax highlighting
- Database inspector with table/column browser
- Query history tracking
- Code generator for SQL and JavaScript
SQL Quick Reference
Database access and SQL query builder for OpenForum
Key Features
- Execute SQL queries from server-side JavaScript
- Built-in SQL query builder
- Support for SELECT, INSERT, UPDATE, DELETE, UPSERT operations
- Parameterized queries to prevent SQL injection
- Multiple database connection support via aliases
- Interactive SQL editor with syntax highlighting
- Database inspector with table/column browser
- Query history tracking
- Code generator for SQL and JavaScript
Server-Side Usage:
// Include DB.sjs on your sjs file
var DB = js.getObject("/OpenForum/AddOn/SQL","DB.sjs");
DB.setAlias("your database name");
// Create a new DB object for each database you need access to
Simple DB Select
var sql = {
action: "select",
table: "my_table",
columns: "column_a", "column_b"
};
var rows = DB.execute(sql);
DB Select - All Columns
var sql = {
action: "select",
table: "my_table"
};
var rows = DB.execute(sql);
Simple DB Insert
var sql = {
action: "insert",
table: "my_table",
data: {
column_a: "value a",
column_b: "value b"
}
};
DB.execute(sql);
DB Insert with Return Column
var sql = {
action: "insert",
table: "my_table",
data: {
column_a: "value a",
column_b: "value b"
},
returnColumn: "column_c"
};
var returnedColumn = DB.execute(sql);
Simple DB Delete
var sql = {
action: "delete",
table: "my_table",
where: {
column_a: "value a",
column_b: "value b"
}
};
DB.execute(sql);
Simple DB Upsert
var sql = {
action: "upsert",
table: "my_table",
data: {
column_a: "value a",
column_b: "value b",
column_c: "value c",
column_d: "value d"
},
where: {
column_a: "value a",
column_b: "value b"
}
};
DB.execute(sql);
Simple DB Query with Parameters
var sql = {
query: "select column_c, column_d from my_table where a = {{valueA}} and b = {{valueB}}",
data: {
valueA: "value a",
valueB: "value b"
}
};
var rows = DB.execute(sql);
Configuration
- Database aliases configured in AddOn settings
- Connection pooling
- Query timeout settings
- Transaction support
×
Quick Reference Open in a new tab
Check SSL certificate validity and expiration for websites
Key Features
- Verify SSL certificate validity
- Check certificate expiration dates
- Monitor multiple domains
- Alert on expiring certificates
- Certificate chain validation
- Get certificate details (issuer, subject, dates)
- Automated certificate monitoring
SSLCertificateChecker Quick Reference
Check SSL certificate validity and expiration for websites
Key Features
- Verify SSL certificate validity
- Check certificate expiration dates
- Monitor multiple domains
- Alert on expiring certificates
- Certificate chain validation
- Get certificate details (issuer, subject, dates)
- Automated certificate monitoring
Server-Side Usage:
// Get the SSLCertificateChecker API
var SSLChecker = js.getObject("/OpenForum/AddOn/SSLCertificateChecker","SSLCertificateChecker.sjs");
// Check certificate for a domain
var certInfo = SSLChecker.checkCertificate("example.com");
// Get certificate expiration date
var expiryDate = SSLChecker.getExpirationDate("example.com");
// Check if certificate is expiring soon
var isExpiring = SSLChecker.isExpiringSoon("example.com", 30); // 30 days threshold
// Get full certificate details
var details = SSLChecker.getCertificateDetails("example.com");
Client-Side Usage:
// Check certificate
JSON.get('/OpenForum/AddOn/SSLCertificateChecker/Check', null,
'domain=example.com')
.onSuccess(function(certInfo) {
console.log('Certificate info:', certInfo);
console.log('Valid until:', certInfo.expirationDate);
}).go();
// Check multiple domains
JSON.post('/OpenForum/AddOn/SSLCertificateChecker/CheckMultiple', null,
'domains=' JSON.stringify('example.com', 'example.org'))
.onSuccess(function(results) {
console.log('Certificate checks:', results);
}).go();
Certificate Information Returned
- Issuer - Certificate authority
- Subject - Domain information
- Valid from - Start date
- Valid until - Expiration date
- Days remaining - Time until expiration
- Certificate chain - Full chain validation
Configuration
- Domain list to monitor
- Expiration warning threshold (days)
- Check frequency
- Email notification settings
×
Quick Reference Open in a new tab
Search OpenForum pages, JavaScript files, and raw file content
Key Features
- Content search across all pages
- JavaScript-specific search
- Raw file search
- Full-text search capabilities
- Search result ranking
- Link to search results
- Multiple search modes
Search Quick Reference
Search OpenForum pages, JavaScript files, and raw file content
Key Features
- Content search across all pages
- JavaScript-specific search
- Raw file search
- Full-text search capabilities
- Search result ranking
- Link to search results
- Multiple search modes
Server-Side Usage:
// Get the Search API
var Search = js.getObject("/OpenForum/AddOn/Search","Search.sjs");
// Content search
var results = Search.contentSearch("search query");
// JavaScript search
var jsResults = Search.jsSearch("function name");
// Raw file search
var fileResults = Search.rawSearch("text in files");
// Search with options
var results = Search.search("query", {
searchType: "content",
maxResults: 50,
pageName: "/StartPage"
});
Client-Side Usage:
// Content search
JSON.get('/OpenForum/AddOn/Search/Content', null,
'query=' encodeURIComponent('search terms'))
.onSuccess(function(results) {
console.log('Search results:', results);
}).go();
// JavaScript search
JSON.get('/OpenForum/AddOn/Search/JS', null,
'query=' encodeURIComponent('function name'))
.onSuccess(function(results) {
console.log('JS search results:', results);
}).go();
// File search
JSON.get('/OpenForum/AddOn/Search/Raw', null,
'query=' encodeURIComponent('file content'))
.onSuccess(function(results) {
console.log('File results:', results);
}).go();
Search Types
- Content Search - Searches page content and rendered text
- JS Search - Searches JavaScript files (.js, .sjs)
- File Search - Searches raw file content across all attachments
Result Format
{
title: "Page Title",
link: "/PageName",
snippet: "...matching text...",
score: 0.95
}
Configuration
- Search index settings
- Maximum results per query
- Search scope (specific pages or entire wiki)
- File type filters
×
Quick Reference Open in a new tab
HTTP client for server-side requests to external APIs and services
Key Features
- Make HTTP requests from server-side JavaScript
- Support for GET, POST, PUT, DELETE methods
- Custom headers and authentication
- Handle JSON, XML, and plain text responses
- Connection timeout configuration
- SSL/TLS support
- Response streaming
ServerClient Quick Reference
HTTP client for server-side requests to external APIs and services
Key Features
- Make HTTP requests from server-side JavaScript
- Support for GET, POST, PUT, DELETE methods
- Custom headers and authentication
- Handle JSON, XML, and plain text responses
- Connection timeout configuration
- SSL/TLS support
- Response streaming
Server-Side Usage:
// Get the ServerClient API
var ServerClient = js.getObject("/OpenForum/AddOn/ServerClient","ServerClient.sjs");
// Simple GET request
var response = ServerClient.get("https://api.example.com/data");
// GET with headers
var response = ServerClient.get("https://api.example.com/data", {
"Authorization": "Bearer token123",
"Accept": "application/json"
});
// POST request with JSON data
var response = ServerClient.post(
"https://api.example.com/data",
JSON.stringify({key: "value"}),
{"Content-Type": "application/json"}
);
// PUT request
var response = ServerClient.put(
"https://api.example.com/data/123",
JSON.stringify({key: "updated value"}),
{"Content-Type": "application/json"}
);
// DELETE request
var response = ServerClient.delete("https://api.example.com/data/123");
// Parse JSON response
var jsonData = JSON.parse(response);
Response Object
{
statusCode: 200,
body: "response content",
headers: {
"content-type": "application/json"
}
}
Configuration
- Connection timeout (milliseconds)
- Read timeout (milliseconds)
- SSL certificate validation
- Proxy settings
- Default headers
×
Quick Reference Open in a new tab
Build and deploy OpenForum services, JavaScript libraries, Extensions, Plugins, and Progressive Web Apps
Key Features
- Service Builder - Create OpenForum services with API endpoints
- Javascript Builder - Build and minify JavaScript libraries
- Extension Builder - Create OpenForum markup extensions
- Plugin Builder - Build server-side plugins
- Progressive Web App Builder - Generate PWA manifests and service workers
- Code generation and scaffolding
- Automated build processes
ServiceBuilder Quick Reference
Build and deploy OpenForum services, JavaScript libraries, Extensions, Plugins, and Progressive Web Apps
Key Features
- Service Builder - Create OpenForum services with API endpoints
- Javascript Builder - Build and minify JavaScript libraries
- Extension Builder - Create OpenForum markup extensions
- Plugin Builder - Build server-side plugins
- Progressive Web App Builder - Generate PWA manifests and service workers
- Code generation and scaffolding
- Automated build processes
Server-Side Usage:
// Get the ServiceBuilder API
var ServiceBuilder = js.getObject("/OpenForum/AddOn/ServiceBuilder","ServiceBuilder.sjs");
// Build a service
ServiceBuilder.buildService("/MyPage", {
serviceName: "MyService",
endpoints: "getData", "postData"
});
// Build JavaScript library
ServiceBuilder.buildJavascript("/MyPage", {
sourceFiles: "file1.js", "file2.js",
outputFile: "library.min.js",
minify: true
});
// Generate Extension
ServiceBuilder.buildExtension("/MyPage", {
extensionName: "MyExtension",
parameters: "param1", "param2"
});
// Build Progressive Web App
ServiceBuilder.buildPWA("/MyPage", {
appName: "My App",
description: "App description",
icons:
});
Client-Side Usage:
// Build service via API
JSON.post('/OpenForum/AddOn/ServiceBuilder/Build', null,
'pageName=/MyPage&type=service&config=' JSON.stringify(config))
.onSuccess(function(result) {
console.log('Service built:', result);
}).go();
// Generate PWA manifest
JSON.post('/OpenForum/AddOn/ServiceBuilder/PWA', null,
'pageName=/MyPage&appName=MyApp')
.onSuccess(function(result) {
console.log('PWA created:', result);
}).go();
Builder Types
- Service Builder - API endpoints and server-side services
- Javascript Builder - Bundled and minified JavaScript
- Extension Builder - OpenForum markup extensions
- Plugin Builder - Server-side Java plugins
- PWA Builder - Progressive Web App configuration
Configuration
- Build output locations
- Minification settings
- Dependency management
- Service definitions
×
Quick Reference Open in a new tab
Generate XML sitemaps for search engine optimization
Key Features
- Generate sitemap.xml files
- Automatic page discovery
- Configurable page priorities
- Change frequency settings
- Last modified timestamps
- Support for multiple sitemaps
- Search engine submission
SiteMapBuilder Quick Reference
Generate XML sitemaps for search engine optimization
Key Features
- Generate sitemap.xml files
- Automatic page discovery
- Configurable page priorities
- Change frequency settings
- Last modified timestamps
- Support for multiple sitemaps
- Search engine submission
Server-Side Usage:
// Get the SiteMapBuilder API
var SiteMapBuilder = js.getObject("/OpenForum/AddOn/SiteMapBuilder","SiteMapBuilder.sjs");
// Generate sitemap for entire wiki
SiteMapBuilder.generateSitemap("/");
// Generate sitemap for specific page tree
SiteMapBuilder.generateSitemap("/MySection");
// Generate with options
SiteMapBuilder.generateSitemap("/", {
outputFile: "sitemap.xml",
baseUrl: "https://example.com",
defaultPriority: 0.5,
defaultChangeFreq: "weekly"
});
// Add page to sitemap
SiteMapBuilder.addPage("/MyPage", {
priority: 0.8,
changefreq: "daily"
});
Client-Side Usage:
// Generate sitemap
JSON.post('/OpenForum/AddOn/SiteMapBuilder/Generate', null,
'pageName=/&baseUrl=' encodeURIComponent('https://example.com'))
.onSuccess(function(result) {
console.log('Sitemap generated:', result);
}).go();
// Get sitemap URL
var sitemapUrl = '/sitemap.xml';
Sitemap Format
https://example.com/PageName
2025-01-15
weekly
0.5
Change Frequency Options
- always
- hourly
- daily
- weekly
- monthly
- yearly
- never
Configuration
- Base URL for absolute links
- Default priority (0.0 to 1.0)
- Default change frequency
- Pages to exclude from sitemap
- Output file location
×
Quick Reference Open in a new tab
Web crawler for discovering and indexing pages and links
Key Features
- Crawl websites and discover links
- Index page content
- Follow links automatically
- Configurable crawl depth
- URL filtering and exclusions
- Crawl rate limiting
- Queue-based crawling
- Real-time crawl monitoring
Spider Quick Reference
Web crawler for discovering and indexing pages and links
Key Features
- Crawl websites and discover links
- Index page content
- Follow links automatically
- Configurable crawl depth
- URL filtering and exclusions
- Crawl rate limiting
- Queue-based crawling
- Real-time crawl monitoring
Server-Side Usage:
// Get the Spider API
var Spider = js.getObject("/OpenForum/AddOn/Spider","Spider.sjs");
// Start spider crawl
Spider.crawl("https://example.com", {
maxDepth: 3,
maxPages: 100,
followExternal: false
});
// Stop spider
Spider.stop();
// Get crawl status
var status = Spider.getStatus();
// Get discovered URLs
var urls = Spider.getDiscoveredURLs();
// Configure spider
Spider.configure({
maxDepth: 5,
maxPages: 500,
delay: 1000, // milliseconds between requests
userAgent: "OpenForum Spider"
});
Client-Side Usage:
// Start spider
JSON.post('/OpenForum/AddOn/Spider/Start', null,
'url=' encodeURIComponent('https://example.com')
'&maxDepth=3&maxPages=100')
.onSuccess(function(result) {
console.log('Spider started:', result);
}).go();
// Stop spider
JSON.post('/OpenForum/AddOn/Spider/Stop')
.onSuccess(function(result) {
console.log('Spider stopped');
}).go();
// Get status
JSON.get('/OpenForum/AddOn/Spider/Status')
.onSuccess(function(status) {
console.log('Crawl progress:', status);
}).go();
Configuration Options
- maxDepth - Maximum link depth to follow
- maxPages - Maximum number of pages to crawl
- delay - Delay between requests (milliseconds)
- followExternal - Follow external links (true/false)
- userAgent - User agent string
- excludePatterns - URL patterns to exclude
- includePatterns - URL patterns to include only
Status Information
- Pages crawled
- Queue size
- Current URL
- Discovered links
- Errors encountered
Configuration
- Starting URL
- Crawl depth limits
- Rate limiting
- URL filters and exclusions
×
Quick Reference Open in a new tab
Tag and categorize OpenForum pages for better organization and discovery
Key Features
- Add tags to pages
- List all tags
- Find pages by tag
- Tag cloud generation
- Remove tags from pages
- Tag management interface
- Search by multiple tags
Tagging Quick Reference
Tag and categorize OpenForum pages for better organization and discovery
Key Features
- Add tags to pages
- List all tags
- Find pages by tag
- Tag cloud generation
- Remove tags from pages
- Tag management interface
- Search by multiple tags
Server-Side Usage:
// Get the Tagging API
var Tagging = js.getObject("/OpenForum/AddOn/Tagging","Tagging.sjs");
// Add tag to page
Tagging.addTag("/MyPage", "tutorial");
// Add multiple tags
Tagging.addTags("/MyPage", "tutorial", "beginner", "javascript");
// Remove tag from page
Tagging.removeTag("/MyPage", "tutorial");
// Get all tags for a page
var tags = Tagging.getTags("/MyPage");
// Find pages with tag
var pages = Tagging.findPagesWithTag("tutorial");
// Get all tags in system
var allTags = Tagging.getAllTags();
// Get tag cloud (tags with counts)
var tagCloud = Tagging.getTagCloud();
Client-Side Usage:
// Add tag to page
JSON.post('/OpenForum/AddOn/Tagging/Add', null,
'pageName=/MyPage&tag=tutorial')
.onSuccess(function(result) {
console.log('Tag added');
}).go();
// Get tags for page
JSON.get('/OpenForum/AddOn/Tagging/Get', null,
'pageName=/MyPage')
.onSuccess(function(tags) {
console.log('Tags:', tags);
}).go();
// Find pages by tag
JSON.get('/OpenForum/AddOn/Tagging/Find', null,
'tag=tutorial')
.onSuccess(function(pages) {
console.log('Pages with tag:', pages);
}).go();
// Get tag cloud
JSON.get('/OpenForum/AddOn/Tagging/Cloud')
.onSuccess(function(tagCloud) {
console.log('Tag cloud:', tagCloud);
}).go();
Tag Cloud Format
{tag: "tutorial", count: 15},
{tag: "javascript", count: 12},
{tag: "beginner", count: 8}
Configuration
- Tag storage location
- Maximum tags per page
- Tag naming conventions
- Tag search options
×
Quick Reference Open in a new tab
Remote web interaction and demonstration tool with cursor tracking
Key Features
- Remote web page interaction
- Cursor position tracking and sharing
- Live demonstration capability
- Multi-user cursor display
- Real-time collaboration
- Screen sharing functionality
- Remote presentation tool
TeleWebOmatic Quick Reference
Remote web interaction and demonstration tool with cursor tracking
Key Features
- Remote web page interaction
- Cursor position tracking and sharing
- Live demonstration capability
- Multi-user cursor display
- Real-time collaboration
- Screen sharing functionality
- Remote presentation tool
Server-Side Usage:
// Get the TeleWebOmatic API
var TeleWebOmatic = js.getObject("/OpenForum/AddOn/TeleWebOmatic","TeleWebOmatic.sjs");
// Start session
TeleWebOmatic.startSession("sessionId");
// Track cursor position
TeleWebOmatic.updateCursor("sessionId", {x: 100, y: 200});
// Get active cursors
var cursors = TeleWebOmatic.getCursors("sessionId");
// Stop session
TeleWebOmatic.stopSession("sessionId");
Client-Side Usage:
// Join session
JSON.post('/OpenForum/AddOn/TeleWebOmatic/Join', null,
'sessionId=session123')
.onSuccess(function(result) {
console.log('Session joined:', result);
}).go();
// Send cursor position
JSON.post('/OpenForum/AddOn/TeleWebOmatic/Cursor', null,
'sessionId=session123&x=100&y=200')
.onSuccess(function(result) {
console.log('Cursor updated');
}).go();
// Get cursor positions
JSON.get('/OpenForum/AddOn/TeleWebOmatic/Cursors', null,
'sessionId=session123')
.onSuccess(function(cursors) {
console.log('Active cursors:', cursors);
}).go();
Configuration
- Session timeout
- Maximum participants
- Cursor update frequency
- Display settings
×
Quick Reference Open in a new tab
Unit testing framework for OpenForum with fluent-style interface
Key Features
- Fluent-style test API (given/when/then pattern)
- Server-side JavaScript unit testing
- Test result tracking and reporting
- Interactive test runner client
- Test assertions and expectations
- Detailed failure messages
- Test suite organization
- Command-line and web-based test execution
Tester Quick Reference
Unit testing framework for OpenForum with fluent-style interface
Key Features
- Fluent-style test API (given/when/then pattern)
- Server-side JavaScript unit testing
- Test result tracking and reporting
- Interactive test runner client
- Test assertions and expectations
- Detailed failure messages
- Test suite organization
- Command-line and web-based test execution
Test Pattern
Tests follow a three-stage pattern:
- given - Set up test data
- when - Execute the action/method under test
- then - Assert expected output
Server-Side Usage:
// Import the test framework
var tester = js.getObject("/OpenForum/AddOn/Tester","Test.sjs");
// Create a class to test
var MyTestClass = function() {
this.increment = function(value) {
return value 1;
};
this.decrement = function(value) {
return value-1;
};
};
// Wrap the function under test
function testMyClass(fn) {
return function (input) {
return MyTestClassfn(input);
};
}
// Log message about the test
tester.log("Running tests for MyTestClass");
// Create test instance
tester.unitTest("Can add one to a number").
given(122).
when( testMyClass("increment") ).
thenOutputEquals(123).
run();
// Another test
tester.unitTest("Can subtract one from a number").
given(123).
when( testMyClass("decrement") ).
thenOutputEquals(122).
run();
// Get results
var results = tester.getResults();
tester.log("Tests:" results.tests " Passed:" results.passed " Failed:" results.failed);
Test Methods
- unitTest(name) - Create new test with description
- given(data) - Provide input data
- when(function) - Specify function to test
- thenOutputEquals(expected) - Assert expected output
- run() - Execute the test
- log(message) - Log a message
- getResults() - Get test results summary
Running Tests
Via Tester Client:
/OpenForum/AddOn/Tester?pageName=/MyPage&testFileName=test.sjs
Via URL Action:
/OpenForum/AddOn/Tester?action=runTest&pageName=/MyPage&testScript=test.sjs
Test Results Format
{
tests: 2,
passed: 1,
failed: 1
}
Example Test Output
Test Results
Starting
MESSAGE: Started Tester v0.002 The Jester
MESSAGE: Running tests for MyTestClass
PASSED: Can add one to a number
FAILED: Can subtract one from a number.
Input (123) Expected (122) but found (124)
MESSAGE: Tests:2 Passed:1 Failed:1
Full Reference ×
Quick Reference Open in a new tab
Canvas-based tile map viewer and renderer
Key Features
- Display tile-based maps
- Canvas rendering
- Tile set management
- Zoom and pan controls
- Layer support
- Custom tile rendering
- Map data loading
TileViewer Quick Reference
Canvas-based tile map viewer and renderer
Key Features
- Display tile-based maps
- Canvas rendering
- Tile set management
- Zoom and pan controls
- Layer support
- Custom tile rendering
- Map data loading
Server-Side Usage:
// Get the TileViewer API
var TileViewer = js.getObject("/OpenForum/AddOn/TileViewer","TileViewer.sjs");
// Save tile map data
TileViewer.saveTileMap("/MyPage", "map.json", mapData);
// Load tile map
var map = TileViewer.loadTileMap("/MyPage", "map.json");
// Save tile set
TileViewer.saveTileSet("/MyPage", "tileset.json", tileSetData);
Client-Side Usage:
// Load tile map
JSON.get('/OpenForum/AddOn/TileViewer/LoadMap', null,
'pageName=/MyPage&fileName=map.json')
.onSuccess(function(mapData) {
console.log('Map loaded:', mapData);
renderMap(mapData);
}).go();
// Save tile map
JSON.post('/OpenForum/AddOn/TileViewer/SaveMap', null,
'pageName=/MyPage&fileName=map.json&data=' JSON.stringify(mapData))
.onSuccess(function(result) {
console.log('Map saved');
}).go();
Map Data Format
{
width: 20,
height: 15,
tileSize: 32,
layers: ,1,2,3..." target="external_page">
{
name: "ground",
tiles:
,1,2,3...,
1,2,3,4..., ...]
}
],
tileset: "tileset.png"
}
Configuration
- Canvas size
- Tile dimensions
- Default tile set
- Rendering options
×