TinyMCE Integration
WriteTrack includes a native TinyMCE plugin, compatible with TinyMCE v6+ (including Moodle 4.4+).
Installation
Section titled “Installation”Install WriteTrack alongside TinyMCE:
npm i writetrack tinymcepnpm add writetrack tinymceyarn add writetrack tinymcebun add writetrack tinymceBasic Usage
Section titled “Basic Usage”Import writetrack/tinymce to register the plugin, then add 'writetrack' to your plugins list:
import 'writetrack/tinymce';
tinymce.init({ selector: '#editor', plugins: ['writetrack'], writetrack_license: 'your-license-key',});The plugin works in both inline and iframe (default) editor modes. No extra configuration needed — iframe document context is detected automatically.
Configuration
Section titled “Configuration”Pass options as TinyMCE editor options, prefixed with writetrack_:
tinymce.init({ selector: '#editor', plugins: ['writetrack'], writetrack_license: 'your-license-key', writetrack_userId: 'user-123', writetrack_contentId: 'document-456', writetrack_metadata: { formName: 'signup' }, writetrack_autoStart: true,});| Option | Type | Default | Description |
|---|---|---|---|
writetrack_license | string | undefined | WriteTrack license key |
writetrack_userId | string | undefined | User identifier included in metadata |
writetrack_contentId | string | undefined | Content identifier included in metadata |
writetrack_metadata | Record<string, unknown> | undefined | Additional metadata |
writetrack_autoStart | boolean | true | Start tracking when editor initializes |
writetrack_wasmUrl | string | undefined | URL to WASM binary for analysis |
writetrack_persist | boolean | false | Enable IndexedDB session persistence (requires writetrack_contentId) |
writetrack_onTick | (data: { activeTime: number; totalTime: number; tracker: WriteTrack }) => void | undefined | Callback fired every ~1s with active session time and tracker instance |
writetrack_onReady | (tracker: WriteTrack) => void | undefined | Callback fired when tracker is ready |
Accessing Data
Section titled “Accessing Data”The plugin API is available at editor.plugins.writetrack after the editor’s init event:
tinymce.init({ selector: '#editor', plugins: ['writetrack'], writetrack_license: 'your-license-key', setup: (editor) => { editor.on('init', () => { const wt = editor.plugins.writetrack; const data = wt.tracker?.getData(); const isTracking = wt.isTracking; }); },});Or use the writetrack_onReady callback:
tinymce.init({ selector: '#editor', plugins: ['writetrack'], writetrack_license: 'your-license-key', writetrack_onReady: (tracker) => { console.log('WriteTrack ready', tracker.getData()); },});Plugin API
Section titled “Plugin API”| Property | Type | Description |
|---|---|---|
tracker | WriteTrack | null | The WriteTrack instance (null until init) |
isTracking | boolean | Whether capture is active |
destroy() | () => void | Stop tracking and clean up |
getMetadata() | () => { name: string; url: string } | Plugin metadata (for TinyMCE Help plugin) |
Cleanup
Section titled “Cleanup”The plugin automatically cleans up when TinyMCE’s remove event fires. You can also call destroy() manually:
editor.plugins.writetrack.destroy();TypeScript
Section titled “TypeScript”import type { WriteTrackTinyMCEPlugin } from 'writetrack/tinymce';