diff --git a/-scripts/README-llm-files.md b/-scripts/README-llm-files.md new file mode 100644 index 0000000000..9d1b1c3387 --- /dev/null +++ b/-scripts/README-llm-files.md @@ -0,0 +1,131 @@ +# Generating LLM Files + +This directory contains scripts to automatically generate `llms.txt` and `llms-full.txt` files for LLM consumption. + +## Overview + +The LLM files provide structured documentation references that help AI assistants: +- Find the correct documentation pages +- Understand the documentation structure +- Reduce hallucinations by providing accurate URLs +- Discover all available integration options + +## Files + +- `generate-llm-files.js` - Node.js script that generates the LLM files +- `generate-llm-files.sh` - Shell wrapper script for easier execution + +## Usage + +### Option 1: After Local Build + +1. Build the documentation site: + ```bash + yarn antora ./antora-playbook.yml + ``` + +2. Generate LLM files from local sitemap: + ```bash + yarn generate-llm-files + # or + ./-scripts/generate-llm-files.sh + ``` + +### Option 2: From Remote Sitemap + +Generate directly from the published sitemap (useful for syncing with production): + +```bash +yarn generate-llm-files-from-url +# or +node ./-scripts/generate-llm-files.js https://www.tiny.cloud/docs/antora-sitemap.xml +``` + +### Option 3: Custom Sitemap Source + +```bash +node ./-scripts/generate-llm-files.js /path/to/sitemap.xml +# or +node ./-scripts/generate-llm-files.js https://example.com/sitemap.xml +``` + +## Workflow + +### Manual Regeneration (Current Approach) + +**After major/minor/patch releases:** +1. Run the script to regenerate files from production sitemap: + ```bash + yarn generate-llm-files-from-url + ``` + This ensures the LLM files match what's actually published on the live site. + + Alternatively, if you need to generate from a local build: + ```bash + yarn generate-llm-files + ``` +2. Review the generated files in a PR +3. Commit and merge + +**Why not automated in CI/CD?** +- The script makes 400+ HTTP requests to fetch H1 titles (~4-5 minutes) +- Resource-intensive and slow for every build +- Manual review ensures quality before committing +- Validates no 404s are listed and titles match actual page content + +### File Locations + +The files are generated in `modules/ROOT/attachments/`: +- `llms.txt` - Simplified, curated documentation index (~105 lines) +- `llms-full.txt` - Complete documentation index with all pages (~700 lines) + +**Post-build:** Files are moved to the root directory (handled in separate PR) and accessible at: +- `https://www.tiny.cloud/docs/tinymce/latest/llms.txt` +- `https://www.tiny.cloud/docs/tinymce/latest/llms-full.txt` + +## How It Works + +1. **Reads sitemap.xml** - Extracts all documentation URLs from the sitemap (only `/latest/` URLs) +2. **Fetches H1 titles** - Makes HTTP requests to each page to get the actual H1 title (validates no 404s) +3. **Generates titles** - Uses fetched H1 titles, falls back to URL-based titles if fetch fails +4. **Categorizes pages** - Groups by topic (integrations, plugins, API, etc.) based on URL patterns +5. **Deduplicates** - Removes duplicate URLs and makes titles unique within categories +6. **Generates structured markdown** - Creates both simplified (`llms.txt`) and complete (`llms-full.txt`) indexes + +## Customization + +The script uses hardcoded categorization logic. To customize: + +1. Edit `generate-llm-files.js` +2. Modify the `categorizeUrl()` function to adjust categorization +3. Update `generateLLMsTxt()` and `generateLLMsFullTxt()` to change output format + +## Notes + +- The script requires Node.js and `sanitize-html` package (installed via `yarn install`) +- Generated files are written to `modules/ROOT/attachments/` +- Uses only the sitemap (no dependency on `nav.adoc`) +- Fetches actual H1 titles from pages (validates no 404s) +- Rate-limited fetching: 10 concurrent requests with 100ms delay between batches +- Request timeout: 10 seconds per page +- Security: Validates URLs to prevent SSRF attacks (only allows tiny.cloud domains) +- Handles HTML entity decoding (`’` → `'`) +- Filters out error pages and duplicate URLs +- Makes titles unique within categories (e.g., "ES6 and npm (Webpack)", "ES6 and npm (Rollup)") +- Falls back to URL-based title generation if H1 fetch fails + +## Troubleshooting + +**Error: "Source not found"** +- Make sure the sitemap path is correct +- For remote URLs, check your internet connection +- For local files, ensure Antora has generated the site first + +**Missing page titles** +- If H1 fetch fails, the script uses URL-based title generation as fallback +- Check that pages return valid HTML with H1 tags +- 404 pages are automatically filtered out + +**Incorrect categorization** +- Review the `categorizeUrl()` function (note: function name is singular, not plural) +- Add custom patterns for new page types diff --git a/-scripts/generate-llm-files.js b/-scripts/generate-llm-files.js new file mode 100755 index 0000000000..014b307f11 --- /dev/null +++ b/-scripts/generate-llm-files.js @@ -0,0 +1,1225 @@ +#!/usr/bin/env node + +/** + * Script to generate llms.txt and llms-full.txt files from sitemap.xml + * + * Usage: + * node -scripts/generate-llm-files.js [sitemap-path-or-url] + * + * Defaults to build/site/sitemap.xml (local) or can use remote URL + */ + +const fs = require('fs'); +const path = require('path'); +const https = require('https'); +const http = require('http'); +const sanitizeHtml = require('sanitize-html'); + +const BASE_URL = 'https://www.tiny.cloud/docs/tinymce/latest'; +const OUTPUT_DIR = path.join(__dirname, '../modules/ROOT/attachments'); + +// Fetch sitemap from URL or file +async function getSitemap(source) { + if (source.startsWith('http://') || source.startsWith('https://')) { + return new Promise((resolve, reject) => { + const client = source.startsWith('https') ? https : http; + client.get(source, (res) => { + let data = ''; + res.on('data', (chunk) => { data += chunk; }); + res.on('end', () => resolve(data)); + }).on('error', reject); + }); + } else { + // Validate file path to prevent path traversal + const resolvedPath = path.resolve(source); + const projectRoot = path.resolve(__dirname, '..'); + + // Ensure the resolved path is within the project directory + if (!resolvedPath.startsWith(projectRoot)) { + throw new Error(`Invalid sitemap path: ${source}. Path must be within the project directory.`); + } + + if (!fs.existsSync(resolvedPath)) { + throw new Error(`Sitemap not found: ${source}\nPlease run 'yarn antora ./antora-playbook.yml' first to generate the site, or provide a URL.`); + } + + // Only allow .xml files + if (!resolvedPath.endsWith('.xml')) { + throw new Error(`Invalid file type: ${source}. Only .xml files are allowed.`); + } + + return fs.readFileSync(resolvedPath, 'utf8'); + } +} + +// Parse sitemap.xml to extract all URLs +function parseSitemap(xmlContent) { + const urlSet = new Set(); + const urlRegex = /(.*?)<\/loc>/g; + let match; + + while ((match = urlRegex.exec(xmlContent)) !== null) { + let url = match[1].trim(); + // Normalize URLs (ensure trailing slash consistency) + if (url.includes('/latest/')) { + // Remove trailing slash for consistency + url = url.replace(/\/$/, '') + '/'; + urlSet.add(url); + } + } + + // Convert to sorted array + return Array.from(urlSet).sort(); +} + +// Extract URL path from full URL +function getUrlPath(url) { + const match = url.match(/\/latest\/(.+?)\/?$/); + return match ? match[1].replace(/\/$/, '') : ''; +} + +// Fetch H1 title from a page URL +async function fetchH1Title(url) { + return new Promise((resolve) => { + // Validate URL to prevent SSRF - only allow tiny.cloud domains + if (!url.startsWith('https://www.tiny.cloud/') && !url.startsWith('http://www.tiny.cloud/')) { + resolve(null); + return; + } + + const client = url.startsWith('https') ? https : http; + + // codeql[js/file-access-to-http]: URL is validated to only allow tiny.cloud domains, preventing SSRF attacks + const req = client.get(url, (res) => { + // Check for error status codes (404, 500, etc.) + if (res.statusCode >= 400) { + resolve(null); + return; + } + + let data = ''; + + res.on('data', (chunk) => { data += chunk; }); + + res.on('end', () => { + try { + // Extract H1 tag using regex - look for

or

+ const h1Match = data.match(/]*>(.*?)<\/h1>/i); + + if (h1Match && h1Match[1]) { + // Clean up the title using a well-tested HTML sanitization library + let title = h1Match[1]; + + // First, use sanitize-html to strip all HTML tags and attributes while preserving text. + // This avoids fragile hand-written tag parsing and multi-character sanitization pitfalls. + title = sanitizeHtml(title, { + allowedTags: [], + allowedAttributes: {}, + textFilter: (text) => text + }); + + // Then, defensively remove any remaining angle brackets and script/protocol keywords + // to ensure no HTML-like or script-related fragments remain. + title = title + .replace(/[<>]/g, '') + .replace(/(?:javascript|data|vbscript)\s*:?/gi, '') + .replace(/\bscript\b/gi, '') + .trim(); + + // At this point, title is plain text with no angle brackets or script/protocol keywords + // Additionally, defensively strip any residual script/protocol keywords that could + // be used for injection even after angle brackets and colons have been removed + title = title.replace(/\b(?:script|javascript|vbscript|data)\b/gi, ''); + + // Decode HTML entities safely - decode all entities to plain text + // Order matters: decode '&' last to avoid double-unescaping + // Decode all specific entities first, then & at the end + title = title + .replace(/ /g, ' ') + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/’/g, "'") // Right single quotation mark (apostrophe) + .replace(/‘/g, "'") // Left single quotation mark + .replace(/“/g, '"') // Left double quotation mark + .replace(/”/g, '"') // Right double quotation mark + .replace(/–/g, '–') // En dash + .replace(/—/g, '—') // Em dash + .replace(/ /g, ' ') // Non-breaking space + // Decode numeric entities ({ format) - safe as we've already removed HTML tags + .replace(/&#(\d+);/g, (match, dec) => { + const code = parseInt(dec, 10); + // Only decode safe character codes (printable ASCII and valid Unicode) + if ((code >= 32 && code <= 126) || (code >= 160 && code <= 1114111)) { + return String.fromCharCode(code); + } + return match; // Keep entity if unsafe + }) + // Decode hex entities ( format) + .replace(/&#x([0-9a-fA-F]+);/gi, (match, hex) => { + const code = parseInt(hex, 16); + // Only decode safe character codes + if ((code >= 32 && code <= 126) || (code >= 160 && code <= 1114111)) { + return String.fromCharCode(code); + } + return match; // Keep entity if unsafe + }) + // Decode remaining named entities (after numeric/hex to avoid conflicts) + .replace(/</g, '<') // Safe: HTML tags already removed + .replace(/>/g, '>') // Safe: HTML tags already removed + .replace(/&/g, '&') // Decode '&' last to prevent double-unescaping + .trim(); + + // Remove extra whitespace + title = title.replace(/\s+/g, ' '); + + // Filter out error page titles + const errorPatterns = [ + /couldn't find the page/i, + /page not found/i, + /404/i, + /error/i, + /not found/i + ]; + + if (errorPatterns.some(pattern => pattern.test(title))) { + resolve(null); + return; + } + + if (title) { + resolve(title); + } else { + resolve(null); + } + } else { + // Fallback to generated title if no H1 found + resolve(null); + } + } catch (error) { + // If parsing fails, fallback to generated title + resolve(null); + } + }); + }); + + req.on('error', (error) => { + // If fetch fails, fallback to generated title + resolve(null); + }); + + req.setTimeout(10000, () => { + req.destroy(); + resolve(null); + }); + }); +} + +// Batch fetch H1 titles with rate limiting +async function fetchH1TitlesBatch(urls, batchSize = 10, delay = 100) { + const results = new Map(); + + for (let i = 0; i < urls.length; i += batchSize) { + const batch = urls.slice(i, i + batchSize); + const promises = batch.map(async (url) => { + const title = await fetchH1Title(url); + return { url, title }; + }); + + const batchResults = await Promise.all(promises); + batchResults.forEach(({ url, title }) => { + results.set(url, title); + }); + + // Rate limiting - wait between batches + if (i + batchSize < urls.length) { + await new Promise(resolve => setTimeout(resolve, delay)); + } + } + + return results; +} + +// Generate a descriptive title from URL path +// NOTE: This script does A LOT of string matching against URL paths. If you encounter +// weirdness (e.g. wrong titles, wrong categories), search for the relevant path strings +// in this file to locate and fix the matching logic. +function generateTitleFromPath(urlPath) { + if (!urlPath) return 'Home'; + + const pathTitleMap = { + '': 'Home', + 'index': 'Home', + 'getting-started': 'Getting Started', + 'introduction-to-tinymce': 'Introduction to TinyMCE', + 'installation': 'Installation', + 'cloud-quick-start': 'Cloud Quick Start', + 'npm-projects': 'NPM Projects Quick Start', + 'zip-install': 'ZIP Installation Quick Start', + 'installation-cloud': 'Cloud', + 'installation-self-hosted': 'Self-hosted', + 'installation-zip': 'ZIP', + 'basic-setup': 'Basic Setup', + 'work-with-plugins': 'Using plugins to extend TinyMCE', + 'filter-content': 'Content Filtering', + 'content-filtering': 'Content filtering', + 'localize-your-language': 'Localization', + 'spell-checking': 'Spell Checking', + 'editor-content-css': 'CSS for rendering content', + 'url-handling': 'URL Handling', + 'plugins': 'Plugins', + 'table': 'Table', + 'table-options': 'Table options', + 'image': 'Image', + 'link': 'Link', + 'lists': 'Lists', + 'code': 'Code', + 'codesample': 'Code Sample', + 'advtable': 'Enhanced Tables', + 'advcode': 'Enhanced Code Editor', + 'editimage': 'Image Editing', + 'linkchecker': 'Link Checker', + 'a11ychecker': 'Accessibility Checker', + 'upgrading': 'Upgrading TinyMCE', + 'migration-guides': 'Migration Guides Overview', + 'migration-from-7x': 'Migration from 7.x', + 'migration-from-6x': 'Migration from 6.x', + 'migration-from-6x-to-8x': 'Migration from 6.x to 8.x', + 'migration-from-5x': 'Migration from 5.x', + 'migration-from-5x-to-8x': 'Migration from 5.x to 8.x', + 'migration-from-4x': 'Migration from 4.x', + 'migration-from-4x-to-8x': 'Migration from 4.x to 8.x', + 'migration-from-froala': 'Migrating from Froala', + 'examples': 'Examples', + 'how-to-guides': 'How To Guides', + 'release-notes': 'Release Notes', + 'changelog': 'Changelog', + 'accessibility': 'Accessibility', + 'security': 'Security guide', + 'support': 'Support', + 'react': 'React', + 'react-cloud': 'React Cloud', + 'react-pm-host': 'React Package Manager', + 'react-pm-bundle': 'React Package Manager (with bundling)', + 'react-zip-host': 'React ZIP', + 'react-zip-bundle': 'React ZIP (with bundling)', + 'react-ref': 'Technical reference (React)', + 'vue': 'Vue.js', + 'vue-cloud': 'Vue Cloud', + 'vue-pm': 'Vue Package Manager', + 'vue-pm-bundle': 'Vue Package Manager (with bundling)', + 'vue-zip': 'Vue ZIP', + 'vue-ref': 'Technical reference (Vue)', + 'angular': 'Angular', + 'angular-cloud': 'Angular Cloud', + 'angular-pm': 'Angular Package Manager', + 'angular-pm-bundle': 'Angular Package Manager (with bundling)', + 'angular-zip': 'Angular ZIP', + 'angular-zip-bundle': 'Angular ZIP (with bundling)', + 'angular-ref': 'Technical reference (Angular)', + 'blazor': 'Blazor', + 'blazor-cloud': 'Blazor Cloud', + 'blazor-pm': 'Blazor Package Manager', + 'blazor-zip': 'Blazor ZIP', + 'blazor-ref': 'Technical reference (Blazor)', + 'svelte': 'Svelte', + 'svelte-cloud': 'Svelte Cloud', + 'svelte-pm': 'Svelte Package Manager', + 'svelte-pm-bundle': 'Svelte Package Manager (with bundling)', + 'svelte-zip': 'Svelte ZIP', + 'svelte-ref': 'Technical reference (Svelte)', + 'webcomponent': 'Web Component', + 'webcomponent-cloud': 'Web Component Cloud', + 'webcomponent-pm': 'Web Component Package Manager', + 'webcomponent-zip': 'Web Component ZIP', + 'webcomponent-ref': 'Technical reference (Web Component)', + 'jquery': 'jQuery', + 'jquery-cloud': 'jQuery Cloud', + 'jquery-pm': 'jQuery Package Manager', + 'django': 'Django', + 'django-cloud': 'Django Cloud', + 'django-zip': 'Django ZIP', + 'laravel': 'Laravel', + 'laravel-tiny-cloud': 'Laravel Cloud', + 'laravel-composer-install': 'Laravel Composer', + 'laravel-zip-install': 'Laravel ZIP', + 'rails': 'Ruby on Rails', + 'rails-cloud': 'Rails Cloud', + 'rails-third-party': 'Rails Package Manager', + 'rails-zip': 'Rails ZIP', + 'expressjs-pm': 'Node.js + Express', + 'bootstrap': 'Bootstrap', + 'bootstrap-cloud': 'Bootstrap Cloud', + 'bootstrap-zip': 'Bootstrap ZIP', + 'php-projects': 'PHP Projects', + 'dotnet-projects': '.NET Projects', + 'wordpress': 'WordPress', + 'shadow-dom': 'Shadow DOM', + 'swing': 'Java Swing' + }; + + if (pathTitleMap[urlPath]) { + return pathTitleMap[urlPath]; + } + + // Handle release notes + if (urlPath.match(/^\d+\.\d+\.\d+-release-notes$/)) { + const version = urlPath.replace('-release-notes', ''); + return `TinyMCE ${version}`; + } + + // Handle bundling entries (order matters: more specific keys first) + const bundlingTitles = { + 'webpack-cjs-npm': 'CommonJS and NPM (Webpack)', + 'webpack-es6-npm': 'ES6 and NPM (Webpack)', + 'webpack-cjs-download': 'CommonJS and a .zip archive (Webpack)', + 'webpack-es6-download': 'ES6 and a .zip archive (Webpack)', + 'rollup-es6-npm': 'ES6 and npm (Rollup)', + 'rollup-es6-download': 'ES6 and a .zip archive (Rollup)', + 'vite-es6-npm': 'ES6 and NPM (Vite)', + 'browserify-cjs-npm': 'CommonJS and npm (Browserify)', + 'browserify-cjs-download': 'CommonJS and a .zip archive (Browserify)' + }; + const bundlingMatch = Object.keys(bundlingTitles).find((k) => urlPath.includes(k)); + if (bundlingMatch) { + return bundlingTitles[bundlingMatch]; + } + + // Handle API references + if (urlPath.startsWith('apis/')) { + const apiPath = urlPath.replace('apis/', ''); + return apiPath.split('/').pop().replace(/\.adoc$/, ''); + } + + // Convert kebab-case to Title Case + const words = urlPath + .replace(/-/g, ' ') + .split(' ') + .map(word => { + // Handle acronyms + if (word.toLowerCase() === 'npm' || word.toLowerCase() === 'cjs' || word.toLowerCase() === 'es6') { + return word.toUpperCase(); + } + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + }); + + return words.join(' '); +} + +// Categorize URL based on path +function categorizeUrl(urlPath) { + // Getting Started & Installation + if (urlPath.startsWith('getting-started') || + urlPath === 'introduction-to-tinymce' || + urlPath.startsWith('installation') || + urlPath === 'cloud-quick-start' || + urlPath === 'npm-projects' || + urlPath === 'zip-install' || + urlPath === 'invalid-api-key' || + urlPath === 'usage-based-billing') { + return { category: 'Getting Started & Installation', subcategory: null }; + } + + // Framework Integrations - Frontend + if (urlPath.match(/^(react|vue|angular|blazor|svelte|webcomponent|jquery)/) && + !urlPath.includes('-ref')) { + return { category: 'Framework Integrations', subcategory: 'Frontend Frameworks' }; + } + + // Framework Integrations - Backend + if (urlPath.match(/^(django|laravel|rails|express)/)) { + return { category: 'Framework Integrations', subcategory: 'Backend Frameworks' }; + } + + // Framework Integrations - Other + if (urlPath.startsWith('bootstrap') || urlPath.startsWith('php') || + urlPath.startsWith('dotnet') || urlPath.startsWith('wordpress') || + urlPath.startsWith('shadow-dom') || urlPath === 'swing') { + return { category: 'Framework Integrations', subcategory: 'Other Integrations' }; + } + + // Framework Integrations - Technical References + if (urlPath.includes('-ref')) { + return { category: 'Framework Integrations', subcategory: 'Technical References' }; + } + + // Configuration & Setup + const configPrefixes = [ + 'basic-setup', 'work-with-plugins', 'filter-content', 'content-filtering', + 'localize', 'content-localization', 'spell-checking', 'editor-', 'content-', + 'dialog-', 'menus-configuration', 'toolbar-configuration', 'statusbar', 'ui-mode', + 'initial-configuration', 'editor-important', 'editor-size', 'editor-save', + 'editor-model', 'editor-command', 'editor-context-menu', 'editor-icon-identifiers', + 'available-menu-items', 'available-toolbar-buttons', 'editor-icons', 'editor-skin', + 'editor-theme', 'editor-content-css', 'url-handling', 'tinymce-and-csp', + 'tinymce-and-cors', 'cloud-deployment-guide', 'editor-and-features', 'features-only', + 'editor-plugin-version', 'plugin-editor-version', 'cloud-troubleshooting', + 'multiple-editors', 'understanding-editor-loads' + ]; + if (configPrefixes.some((p) => urlPath.startsWith(p)) || urlPath === 'events') { + return { category: 'Configuration & Setup', subcategory: null }; + } + + // Plugins & Features - Core Plugins + const corePluginPaths = new Set([ + 'plugins', 'table', 'table-options', 'image', 'link', 'lists', 'code', 'codesample', + 'autolink', 'anchor', 'autosave', 'charmap', 'checklist', 'directionality', + 'emoticons', 'fullscreen', 'help', 'insertdatetime', 'nonbreaking', 'pagebreak', + 'preview', 'save', 'searchreplace', 'visualblocks', 'visualchars', 'wordcount', + 'advlist', 'contextmenu', 'contexttoolbar', 'quickbars', 'advanced-templates', + 'fullpagehtml', 'importcss', 'importword', 'media', 'pageembed', 'paste', + 'textcolor', 'colorpicker', 'textpattern', 'hr', 'print', 'spellchecker', + 'tabfocus', 'autoresize', 'markdown', 'math', 'mentions', 'permanentpen', + 'contextform', 'context', + 'advtable', 'advcode', 'editimage', 'linkchecker', 'a11ychecker', 'casechange', + 'footnotes', 'formatpainter', 'tableofcontents', 'advanced-typography', 'typography', + 'mergetags', 'accordion', 'introduction-to-mediaembed', 'file-image-upload' + ]); + if (corePluginPaths.has(urlPath) || urlPath.startsWith('upload-')) { + return { category: 'Plugins & Features', subcategory: 'Core Plugins' }; + } + + // Plugins & Features - Editor Modes + if (urlPath.startsWith('use-tinymce-') || urlPath === 'inline-editor-options') { + return { category: 'Plugins & Features', subcategory: 'Editor Modes' }; + } + + // Plugins & Features - Spell Checking + if (urlPath === 'introduction-to-tiny-spellchecker' || + urlPath.startsWith('autocorrect') || urlPath.startsWith('spelling') || + urlPath.startsWith('custom-dictionaries') || urlPath.startsWith('individual-spelling') || + urlPath.startsWith('configure-spelling') || urlPath.startsWith('self-hosting-hunspell')) { + return { category: 'Plugins & Features', subcategory: 'Spell Checking' }; + } + + // Premium Features - AI Features + if (urlPath === 'ai' || urlPath.startsWith('ai-')) { + return { category: 'Premium Features', subcategory: 'AI Features' }; + } + + // Premium Features - Comments & Collaboration + if (urlPath.startsWith('comments-') || urlPath === 'introduction-to-tiny-comments' || + urlPath === 'annotations' || urlPath === 'suggestededits' || urlPath === 'revisionhistory') { + return { category: 'Premium Features', subcategory: 'Comments & Collaboration' }; + } + + // Premium Features - Export & Import + if (urlPath === 'exportpdf' || urlPath === 'exportword' || urlPath === 'importword' || + urlPath.startsWith('html-to-') || urlPath.startsWith('docx-to-') || + urlPath.startsWith('export-to-') || urlPath.startsWith('import-from-')) { + return { category: 'Premium Features', subcategory: 'Export & Import' }; + } + + // Premium Features - PowerPaste + if (urlPath === 'introduction-to-powerpaste' || urlPath.startsWith('powerpaste')) { + return { category: 'Premium Features', subcategory: 'PowerPaste' }; + } + + // Premium Features - TinyDrive + if (urlPath.startsWith('tinydrive-') || urlPath === 'tinydrive-introduction' || + urlPath === 'introduction-to-tinydrive-apis') { + return { category: 'Premium Features', subcategory: 'TinyDrive' }; + } + + // Premium Features - Media Optimizer + if (urlPath.startsWith('uploadcare')) { + return { category: 'Premium Features', subcategory: 'Media Optimizer' }; + } + + // Premium Features - Services & Infrastructure + if (urlPath.startsWith('individual-') || urlPath.startsWith('configure-') || + urlPath.startsWith('mediaembed-server') || urlPath === 'license-key' || + urlPath === 'generate-rsa-key-pairs' || urlPath === 'troubleshoot-server') { + return { category: 'Premium Features', subcategory: 'Services & Infrastructure' }; + } + + // Customization & Development - Creating Custom Components + if (urlPath.startsWith('creating-') || urlPath.startsWith('custom-') || + urlPath === 'dialog' || urlPath === 'ui-components' || urlPath === 'customize-ui') { + return { category: 'Customization & Development', subcategory: 'Creating Custom Components' }; + } + + // Customization & Development - Bundling & Build Tools + if (urlPath.startsWith('bundle-') || urlPath.startsWith('bundling-') || + urlPath.startsWith('webpack-') || urlPath.startsWith('rollup-') || + urlPath.startsWith('browserify-') || urlPath.startsWith('vite-') || + urlPath === 'bundle-intro-setup' || urlPath === 'plugin-editor-version-compatibility' || + urlPath === 'introduction-to-bundling-tinymce') { + return { category: 'Customization & Development', subcategory: 'Bundling & Build Tools' }; + } + + // Customization & Development - Dialog & UI Components + if (urlPath.startsWith('dialog-') && !urlPath.startsWith('dialog-configuration')) { + return { category: 'Customization & Development', subcategory: 'Dialog & UI Components' }; + } + + // Customization & Development - Enhanced Skins & Icons + if (urlPath.startsWith('enhanced-skins') || urlPath.startsWith('using-the-icon-pack') || + urlPath.startsWith('custom-icon-pack')) { + return { category: 'Customization & Development', subcategory: 'Enhanced Skins & Icons' }; + } + + // API Reference (order matters: first match wins) + const apiSubcategoryPatterns = [ + ['tinymce.editor', 'Core APIs'], + ['tinymce.plugin', 'Core APIs'], + ['tinymce.theme', 'Core APIs'], + ['tinymce.root', 'Core APIs'], + ['tinymce.addonmanager', 'Core APIs'], + ['tinymce.editormanager', 'Core APIs'], + ['tinymce.editormode', 'Core APIs'], + ['tinymce.editoroptions', 'Core APIs'], + ['tinymce.editorupload', 'Core APIs'], + ['windowmanager', 'UI APIs'], + ['notificationmanager', 'UI APIs'], + ['shortcuts', 'UI APIs'], + ['editor.ui', 'UI APIs'], + ['dom.', 'DOM APIs'], + ['html.', 'HTML APIs'], + ['geom.', 'Geometry APIs'], + ['util.', 'Utility APIs'], + ['env', 'Utility APIs'], + ['event', 'Utility APIs'], + ['undomanager', 'Utility APIs'], + ['formatter', 'Utility APIs'], + ['annotator', 'Utility APIs'], + ['userlookup', 'Utility APIs'], + ['fakeclipboard', 'Utility APIs'] + ]; + if (urlPath.startsWith('apis/')) { + const match = apiSubcategoryPatterns.find(([pattern]) => urlPath.includes(pattern)); + return { + category: 'API Reference', + subcategory: match ? match[1] : 'Core APIs' + }; + } + + // Migration Guides + if (urlPath.includes('migration') || urlPath === 'upgrading') { + return { category: 'Migration Guides', subcategory: null }; + } + + // Examples & Demos + if (urlPath.startsWith('examples') || urlPath.startsWith('how-to-guides') || + urlPath.startsWith('basic-example') || urlPath.includes('-demo')) { + return { category: 'Examples & Demos', subcategory: null }; + } + + // Release Information + if (urlPath.includes('release-notes') || urlPath.includes('changelog') || + urlPath.match(/\d+\.\d+\.\d+-release-notes/)) { + return { category: 'Release Information', subcategory: null }; + } + + // Accessibility & Security + if (urlPath.startsWith('accessibility') || urlPath.startsWith('tinymce-and-screenreaders') || + urlPath.startsWith('security') || urlPath.startsWith('tinymce-for-mobile') || + urlPath.startsWith('shortcuts') || urlPath.startsWith('keyboard-shortcuts')) { + return { category: 'Accessibility & Security', subcategory: null }; + } + + // Support & Resources + if (urlPath === 'support' || urlPath === 'index' || urlPath.startsWith('promotions') || + urlPath.startsWith('tiny-docs-ai')) { + return { category: 'Support & Resources', subcategory: null }; + } + + // Legacy & Other + if (urlPath === 'moxiemanager' || urlPath === 'php-upload-handler' || + urlPath.startsWith('ie-template-creation')) { + return { category: 'Legacy & Other', subcategory: null }; + } + + // Everything else + return { category: 'Other', subcategory: null }; +} + +// Make titles unique within a category +function makeTitlesUnique(entries) { + const titleCounts = new Map(); + const titleToEntries = new Map(); + + // Count occurrences of each title + entries.forEach(entry => { + const count = titleCounts.get(entry.title) || 0; + titleCounts.set(entry.title, count + 1); + + if (!titleToEntries.has(entry.title)) { + titleToEntries.set(entry.title, []); + } + titleToEntries.get(entry.title).push(entry); + }); + + // For duplicate titles, make them unique + const quickStartTitles = { + 'cloud-quick-start': 'Quick start: Cloud', + 'npm-projects': 'Quick start: NPM/Yarn', + 'zip-install': 'Quick start: ZIP' + }; + titleToEntries.forEach((entriesWithTitle, title) => { + if (titleCounts.get(title) > 1) { + entriesWithTitle.forEach((entry, index) => { + const path = entry.urlPath; + if (path === 'swing' && index > 0) { + entry.title = null; // Mark for removal - swing should only appear once + } else if (quickStartTitles[path]) { + entry.title = quickStartTitles[path]; + } else { + const pathParts = path.split('-'); + if (pathParts.length > 1) { + entry.title = `${title} (${pathParts[pathParts.length - 1]})`; + } + } + }); + } + }); + + return entries; +} + +// Generate llms-full.txt +async function generateLLMsFullTxt(urls) { + console.log(`Fetching H1 titles from ${urls.length} pages...`); + console.log('This may take a few minutes...'); + + // Fetch H1 titles from all pages + const h1Titles = await fetchH1TitlesBatch(urls, 10, 100); + + let fetchedCount = 0; + let fallbackCount = 0; + + // Process all URLs + const entries = urls.map(url => { + const urlPath = getUrlPath(url); + const fetchedTitle = h1Titles.get(url); + const generatedTitle = generateTitleFromPath(urlPath); + + // Use fetched H1 if available, otherwise fallback to generated + const title = fetchedTitle || generatedTitle; + + if (fetchedTitle) { + fetchedCount++; + } else { + fallbackCount++; + } + + const catInfo = categorizeUrl(urlPath); + + return { + url, + urlPath, + title, + category: catInfo.category, + subcategory: catInfo.subcategory + }; + }); + + console.log(`✓ Fetched ${fetchedCount} H1 titles, ${fallbackCount} used fallback titles`); + + // Remove duplicate URLs (keep first occurrence) - should already be unique from parseSitemap, but double-check + const seenUrls = new Set(); + const uniqueEntries = entries.filter(entry => { + // Normalize URL for comparison + const normalizedUrl = entry.url.replace(/\/$/, '') + '/'; + if (seenUrls.has(normalizedUrl)) { + return false; + } + seenUrls.add(normalizedUrl); + return true; + }); + + // Group by category and subcategory, ensuring each URL appears only once + const categorized = new Map(); + const urlToCategory = new Map(); // Track which category each URL is in + + uniqueEntries.forEach(entry => { + // If URL already categorized, skip (prefer first category encountered) + if (urlToCategory.has(entry.url)) { + return; + } + + const key = entry.subcategory ? `${entry.category}::${entry.subcategory}` : entry.category; + + if (!categorized.has(key)) { + categorized.set(key, []); + } + categorized.get(key).push(entry); + urlToCategory.set(entry.url, key); + }); + + // Make titles unique within each category + categorized.forEach((entries, key) => { + const uniqueTitles = makeTitlesUnique(entries); + // Remove entries marked for removal (null title) + const filtered = uniqueTitles.filter(e => e.title !== null); + categorized.set(key, filtered); + + // Sort by title + filtered.sort((a, b) => a.title.localeCompare(b.title)); + }); + + // Build content + let content = `# TinyMCE Documentation - Complete Reference + +## Overview +TinyMCE is a rich text editor that provides a WYSIWYG editing experience. The latest stable version is TinyMCE 8, released in July 2025. + +## Current Version Information +- **Latest Stable Version**: TinyMCE 8 +- **Version in CDN URLs**: Use \`tinymce@8\` or \`tinymce/8\` +- **Package Installation**: Always install \`tinymce@8\` for new projects +- **Legacy Versions**: TinyMCE 7, 6, and 5 are maintained for existing projects but new projects should use TinyMCE 8 + +## Getting Started + +### Quick Start Guides +- **Getting Started Overview**: ${BASE_URL}/getting-started/ +- **Introduction to TinyMCE**: ${BASE_URL}/introduction-to-tinymce/ +- **Installation Options**: ${BASE_URL}/installation/ + +### Cloud Deployment (Recommended) +- **Cloud Quick Start**: ${BASE_URL}/cloud-quick-start/ +- **Cloud Deployment Guide**: ${BASE_URL}/cloud-deployment-guide/ +- **Editor and Features**: ${BASE_URL}/editor-and-features/ +- **Specify Editor Version**: ${BASE_URL}/editor-plugin-version/ +- **Cloud Troubleshooting**: ${BASE_URL}/cloud-troubleshooting/ + +### Self-Hosted Deployment +- **NPM Projects Quick Start**: ${BASE_URL}/npm-projects/ +- **ZIP Installation Quick Start**: ${BASE_URL}/zip-install/ +- **Self-Hosted Installation**: ${BASE_URL}/installation-self-hosted/ + +## Integration Guides + +### Frontend Frameworks +`; + + // Frontend integrations - use Cloud pages as main entry points (revert from landing pages) + const frontendIntegrations = [ + { name: 'React', paths: ['react-cloud', 'react-pm-host', 'react-zip-host'] }, + { name: 'Vue.js', paths: ['vue-cloud', 'vue-pm', 'vue-zip'] }, + { name: 'Angular', paths: ['angular-cloud', 'angular-pm', 'angular-zip'] }, + { name: 'Blazor', paths: ['blazor-cloud', 'blazor-pm', 'blazor-zip'] }, + { name: 'Svelte', paths: ['svelte-cloud', 'svelte-pm', 'svelte-zip'] }, + { name: 'Web Component', paths: ['webcomponent-cloud', 'webcomponent-pm', 'webcomponent-zip'] }, + { name: 'jQuery', paths: ['jquery-cloud', 'jquery-pm'] } + ]; + + frontendIntegrations.forEach(integration => { + const cloudPath = integration.paths.find(p => p.includes('cloud')); + const mainUrl = `${BASE_URL}/${cloudPath}/`; + content += `- **${integration.name}**: ${mainUrl}\n`; + + integration.paths.filter(p => p !== cloudPath).forEach(path => { + const url = `${BASE_URL}/${path}/`; + const label = path.includes('pm') ? 'Package Manager' : 'ZIP'; + content += ` - ${label}: ${url}\n`; + }); + }); + + content += `\n### Backend Frameworks\n`; + + const backendIntegrations = [ + { name: 'Django', paths: ['django-cloud', 'django-zip'] }, + { name: 'Laravel', paths: ['laravel-tiny-cloud', 'laravel-composer-install', 'laravel-zip-install'] }, + { name: 'Ruby on Rails', paths: ['rails-cloud', 'rails-third-party', 'rails-zip'] }, + { name: 'Node.js + Express', paths: ['expressjs-pm'] } + ]; + + backendIntegrations.forEach(integration => { + const cloudPath = integration.paths.find(p => p.includes('cloud')); + if (cloudPath) { + const mainUrl = `${BASE_URL}/${cloudPath}/`; + content += `- **${integration.name}**: ${mainUrl}\n`; + + integration.paths.filter(p => p !== cloudPath).forEach(path => { + const url = `${BASE_URL}/${path}/`; + let label = path.includes('composer') ? 'Composer' : path.includes('zip') ? 'ZIP' : 'Package Manager'; + content += ` - ${label}: ${url}\n`; + }); + } else { + // For integrations without cloud (like Express), use first path as main + const mainPath = integration.paths[0]; + const mainUrl = `${BASE_URL}/${mainPath}/`; + content += `- **${integration.name}**: ${mainUrl}\n`; + + if (integration.paths.length > 1) { + integration.paths.slice(1).forEach(path => { + const url = `${BASE_URL}/${path}/`; + content += ` - Package Manager: ${url}\n`; + }); + } + } + }); + + content += `\n### Other Integrations +- **Bootstrap**: + - Cloud: ${BASE_URL}/bootstrap-cloud/ + - ZIP: ${BASE_URL}/bootstrap-zip/ +- **PHP Projects**: ${BASE_URL}/php-projects/ +- **.NET Projects**: ${BASE_URL}/dotnet-projects/ +- **WordPress**: ${BASE_URL}/wordpress/ +- **Shadow DOM**: ${BASE_URL}/shadow-dom/ +- **Java Swing**: ${BASE_URL}/swing/ +`; + + content += ` +## Configuration + +### Basic Setup +- **Basic Setup**: ${BASE_URL}/basic-setup/ +- **Selector Configuration**: Required for all TinyMCE instances +- **Plugin Configuration**: ${BASE_URL}/work-with-plugins/ +- **Toolbar Configuration**: Part of basic setup +- **Menu and Menu Bar**: Part of basic setup + +### Common Configuration Options +- **Content Filtering**: ${BASE_URL}/filter-content/ +- **Localization**: ${BASE_URL}/localize-your-language/ +- **Spell Checking**: ${BASE_URL}/spell-checking/ +- **Content CSS**: ${BASE_URL}/editor-content-css/ +- **URL Handling**: ${BASE_URL}/url-handling/ + +## CDN and Package URLs + +### Cloud CDN (Recommended) +\`\`\` +https://cdn.tiny.cloud/1/[api-key]/tinymce/8/tinymce.min.js +\`\`\` +Replace \`[api-key]\` with your Tiny Cloud API key. + +### jsDelivr CDN +\`\`\` +https://cdn.jsdelivr.net/npm/tinymce@8/tinymce.min.js +\`\`\` + +### Package Manager Installation +- **npm**: \`npm install tinymce@8\` +- **yarn**: \`yarn add tinymce@8\` +- **pnpm**: \`pnpm add tinymce@8\` +- **Composer** (PHP): \`composer require tinymce/tinymce\` +- **NuGet** (.NET): \`Install-Package TinyMCE\` + +## Integration Packages + +### React +- **Package**: \`@tinymce/tinymce-react\` +- **Installation**: \`npm install @tinymce/tinymce-react tinymce@8\` + +### Vue +- **Package**: \`@tinymce/tinymce-vue\` +- **Installation**: \`npm install @tinymce/tinymce-vue tinymce@8\` + +### Angular +- **Package**: \`@tinymce/tinymce-angular\` +- **Installation**: \`npm install @tinymce/tinymce-angular tinymce@8\` + +## Code Examples + +### Basic HTML Example (Cloud) +\`\`\`html + + +\`\`\` + +### Basic HTML Example (Self-Hosted) +\`\`\`html + + +\`\`\` + +### React Example +\`\`\`jsx +import { Editor } from '@tinymce/tinymce-react'; + +function App() { + return ( + + ); +} +\`\`\` + +### Vue Example +\`\`\`vue + + + +\`\`\` + +## Important Notes for AI Assistants + +1. **Always use TinyMCE 8** for new projects and code examples +2. **CDN URLs must include version 8**: Use \`tinymce@8\` or \`tinymce/8\` in URLs +3. **Package installations**: Always specify \`tinymce@8\` when installing +4. **Integration packages**: Use the latest versions compatible with TinyMCE 8 +5. **Code examples default to TinyMCE 8** unless explicitly noted otherwise +6. **Legacy versions (5, 6, 7)**: Only reference when specifically asked about migration or legacy support +7. **Cloud vs Self-Hosted**: Cloud deployment is recommended for most use cases + +## API Reference +- **Editor API**: ${BASE_URL}/apis/tinymce.editor/ +- **Plugin API**: ${BASE_URL}/apis/tinymce.plugin/ + +## Migration Guides +- **Upgrading TinyMCE**: ${BASE_URL}/upgrading/ +- **Migration from 7.x**: ${BASE_URL}/migration-from-7x/ + +## Support and Resources +- **Documentation Home**: ${BASE_URL}/ +- **Release Notes**: ${BASE_URL}/release-notes/ +- **Examples**: ${BASE_URL}/examples/ +- **How-to Guides**: ${BASE_URL}/how-to-guides/ + + +`; + + // Complete Documentation Index + content += `## Complete Documentation Index\n\n`; + content += `This section provides a complete list of all ${uniqueEntries.length} documentation pages available in TinyMCE 8, organized by category. This comprehensive index ensures LLMs have access to every documentation page, reducing the risk of hallucinations or missing important details.\n\n`; + + // Output categories in specific order + const categoryStructure = [ + { category: 'Getting Started & Installation', subcategory: null }, + { category: 'Framework Integrations', subcategory: 'Frontend Frameworks' }, + { category: 'Framework Integrations', subcategory: 'Backend Frameworks' }, + { category: 'Framework Integrations', subcategory: 'Other Integrations' }, + { category: 'Framework Integrations', subcategory: 'Technical References' }, + { category: 'Configuration & Setup', subcategory: null }, + { category: 'Plugins & Features', subcategory: 'Core Plugins' }, + { category: 'Plugins & Features', subcategory: 'Editor Modes' }, + { category: 'Plugins & Features', subcategory: 'Spell Checking' }, + { category: 'Premium Features', subcategory: 'AI Features' }, + { category: 'Premium Features', subcategory: 'Comments & Collaboration' }, + { category: 'Premium Features', subcategory: 'Export & Import' }, + { category: 'Premium Features', subcategory: 'PowerPaste' }, + { category: 'Premium Features', subcategory: 'TinyDrive' }, + { category: 'Premium Features', subcategory: 'Media Optimizer' }, + { category: 'Premium Features', subcategory: 'Services & Infrastructure' }, + { category: 'Customization & Development', subcategory: 'Creating Custom Components' }, + { category: 'Customization & Development', subcategory: 'Bundling & Build Tools' }, + { category: 'Customization & Development', subcategory: 'Dialog & UI Components' }, + { category: 'Customization & Development', subcategory: 'Enhanced Skins & Icons' }, + { category: 'API Reference', subcategory: 'Core APIs' }, + { category: 'API Reference', subcategory: 'UI APIs' }, + { category: 'API Reference', subcategory: 'Utility APIs' }, + { category: 'API Reference', subcategory: 'DOM APIs' }, + { category: 'API Reference', subcategory: 'HTML APIs' }, + { category: 'API Reference', subcategory: 'Geometry APIs' }, + { category: 'Migration Guides', subcategory: null }, + { category: 'Examples & Demos', subcategory: null }, + { category: 'Release Information', subcategory: null }, + { category: 'Accessibility & Security', subcategory: null }, + { category: 'Support & Resources', subcategory: null }, + { category: 'Legacy & Other', subcategory: null } + ]; + + let currentMainCategory = null; + categoryStructure.forEach(({ category, subcategory }) => { + const key = subcategory ? `${category}::${subcategory}` : category; + + if (categorized.has(key)) { + const entries = categorized.get(key); + + // Output main category header if it changed + if (currentMainCategory !== category) { + if (currentMainCategory !== null) { + content += '\n'; + } + content += `### ${category}\n\n`; + currentMainCategory = category; + } + + // Output subcategory header if present + if (subcategory) { + content += `#### ${subcategory}\n`; + } + + // List entries + entries.forEach(entry => { + content += `- **${entry.title}**: ${entry.url}\n`; + }); + + content += '\n'; + } + }); + + return content; +} + +// Generate llms.txt (curated, simplified version) +function generateLLMsTxt(urls) { + return `# TinyMCE Documentation + +> Rich text editor for web applications. The latest stable version is TinyMCE 8. + +TinyMCE is a powerful, flexible WYSIWYG rich text editor that can be integrated into any web application. + +**IMPORTANT**: Always use TinyMCE 8 for new projects. Use \`tinymce@8\` or \`tinymce/8\` in CDN URLs and package installations. + +## Getting Started + +- [Getting Started](${BASE_URL}/getting-started/): Overview and introduction to TinyMCE +- [Introduction to TinyMCE](${BASE_URL}/introduction-to-tinymce/): What is TinyMCE and how to add it to your project +- [Installation](${BASE_URL}/installation/): Installation options and methods + +### Quick Start Guides + +- [Cloud Quick Start](${BASE_URL}/cloud-quick-start/): Get started with Tiny Cloud CDN (recommended) +- [NPM Quick Start](${BASE_URL}/npm-projects/): Install via npm, yarn, or pnpm +- [ZIP Quick Start](${BASE_URL}/zip-install/): Download and install from ZIP archive + +## Integration Guides + +See the complete documentation index in llms-full.txt for all available integration pages. + +## Basic Setup Examples + +### Cloud Deployment (Recommended) + +\`\`\`html + + +\`\`\` + +### Self-Hosted (NPM) + +\`\`\`bash +npm install tinymce@8 +\`\`\` + +\`\`\`html + + +\`\`\` + +### React Example + +\`\`\`jsx +import { Editor } from '@tinymce/tinymce-react'; + +function App() { + return ( + + ); +} +\`\`\` + +## Key Configuration + +- [Basic Setup](${BASE_URL}/basic-setup/): Essential configuration options +- [Content Filtering](${BASE_URL}/filter-content/): Control HTML output +- [Localization](${BASE_URL}/localize-your-language/): Multi-language support +- [Spell Checking](${BASE_URL}/spell-checking/): Enable spell checking +- [Cloud Deployment Guide](${BASE_URL}/cloud-deployment-guide/): Configure Tiny Cloud + +## Plugins & Features + +- [Plugins Overview](${BASE_URL}/plugins/): Available plugins and features +- [Table Plugin](${BASE_URL}/table/): Table editing capabilities +- [Image Plugin](${BASE_URL}/image/): Image handling and editing +- [Link Plugin](${BASE_URL}/link/): Link management + +## API Reference + +- [Editor API](${BASE_URL}/apis/tinymce.editor/): Core editor API +- [Plugin API](${BASE_URL}/apis/tinymce.plugin/): Plugin development API + +## Migration & Upgrading + +- [Upgrading TinyMCE](${BASE_URL}/upgrading/): Upgrade guide +- [Migration from 7.x](${BASE_URL}/migration-from-7x/): Migrate from TinyMCE 7 + +## Complete Documentation + +For a complete list of all ${urls.length} documentation pages, see [llms-full.txt](${BASE_URL}/llms-full.txt). + +`; +} + +// Main execution +async function main() { + const sitemapSource = process.argv[2] || path.join(__dirname, '../build/site/sitemap.xml'); + + console.log('Generating LLM files...'); + console.log(`Using sitemap: ${sitemapSource}`); + + try { + const sitemapContent = await getSitemap(sitemapSource); + const urls = parseSitemap(sitemapContent); + console.log(`Found ${urls.length} unique URLs in sitemap`); + + const llmsTxt = generateLLMsTxt(urls); + fs.writeFileSync(path.join(OUTPUT_DIR, 'llms.txt'), llmsTxt); + console.log('✓ Generated llms.txt'); + + const llmsFullTxt = await generateLLMsFullTxt(urls); + fs.writeFileSync(path.join(OUTPUT_DIR, 'llms-full.txt'), llmsFullTxt); + console.log('✓ Generated llms-full.txt'); + + } catch (error) { + console.error('Error:', error.message); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +module.exports = { generateLLMsTxt, generateLLMsFullTxt, parseSitemap, getSitemap, fetchH1Title, fetchH1TitlesBatch }; diff --git a/-scripts/generate-llm-files.sh b/-scripts/generate-llm-files.sh new file mode 100755 index 0000000000..57a59bab7c --- /dev/null +++ b/-scripts/generate-llm-files.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Script to generate LLM files after Antora build +# This should be run after the site is built and sitemap.xml is generated + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +echo "Generating LLM files..." + +# Use local sitemap (required) +SITEMAP_PATH="$PROJECT_ROOT/build/site/sitemap.xml" + +if [ ! -f "$SITEMAP_PATH" ]; then + echo "Error: Local sitemap not found at $SITEMAP_PATH" + echo "Please run 'yarn antora ./antora-playbook.yml' first to generate the site." + exit 1 +fi + +echo "Using local sitemap: $SITEMAP_PATH" +node "$SCRIPT_DIR/generate-llm-files.js" "$SITEMAP_PATH" + +echo "✓ LLM files generated successfully" diff --git a/.gitignore b/.gitignore index eb184d271d..69a17bc6b1 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,9 @@ vendor # Antora tmp files _site/ + +# Cursor setup (local only, do not push) +.cursor/ +AGENTS.md +.cursorignore +context7.json diff --git a/antora.yml b/antora.yml index 19b9629b75..bd5735dda8 100644 --- a/antora.yml +++ b/antora.yml @@ -26,7 +26,7 @@ asciidoc: # product variables productname: TinyMCE productmajorversion: 8 - productminorversion: '8.3' + productminorversion: '8.4' ##### product name in codeblock prodnamecode: tinymce #### more names diff --git a/modules/ROOT/attachments/llms-full.txt b/modules/ROOT/attachments/llms-full.txt new file mode 100644 index 0000000000..1f9345e6c9 --- /dev/null +++ b/modules/ROOT/attachments/llms-full.txt @@ -0,0 +1,699 @@ +# TinyMCE Documentation - Complete Reference + +## Overview +TinyMCE is a rich text editor that provides a WYSIWYG editing experience. The latest stable version is TinyMCE 8, released in July 2025. + +## Current Version Information +- **Latest Stable Version**: TinyMCE 8 +- **Version in CDN URLs**: Use `tinymce@8` or `tinymce/8` +- **Package Installation**: Always install `tinymce@8` for new projects +- **Legacy Versions**: TinyMCE 7, 6, and 5 are maintained for existing projects but new projects should use TinyMCE 8 + +## Getting Started + +### Quick Start Guides +- **Getting Started Overview**: https://www.tiny.cloud/docs/tinymce/latest/getting-started/ +- **Introduction to TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tinymce/ +- **Installation Options**: https://www.tiny.cloud/docs/tinymce/latest/installation/ + +### Cloud Deployment (Recommended) +- **Cloud Quick Start**: https://www.tiny.cloud/docs/tinymce/latest/cloud-quick-start/ +- **Cloud Deployment Guide**: https://www.tiny.cloud/docs/tinymce/latest/cloud-deployment-guide/ +- **Editor and Features**: https://www.tiny.cloud/docs/tinymce/latest/editor-and-features/ +- **Specify Editor Version**: https://www.tiny.cloud/docs/tinymce/latest/editor-plugin-version/ +- **Cloud Troubleshooting**: https://www.tiny.cloud/docs/tinymce/latest/cloud-troubleshooting/ + +### Self-Hosted Deployment +- **NPM Projects Quick Start**: https://www.tiny.cloud/docs/tinymce/latest/npm-projects/ +- **ZIP Installation Quick Start**: https://www.tiny.cloud/docs/tinymce/latest/zip-install/ +- **Self-Hosted Installation**: https://www.tiny.cloud/docs/tinymce/latest/installation-self-hosted/ + +## Integration Guides + +### Frontend Frameworks +- **React**: https://www.tiny.cloud/docs/tinymce/latest/react-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/react-pm-host/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/react-zip-host/ +- **Vue.js**: https://www.tiny.cloud/docs/tinymce/latest/vue-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/vue-pm/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/vue-zip/ +- **Angular**: https://www.tiny.cloud/docs/tinymce/latest/angular-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/angular-pm/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/angular-zip/ +- **Blazor**: https://www.tiny.cloud/docs/tinymce/latest/blazor-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/blazor-pm/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/blazor-zip/ +- **Svelte**: https://www.tiny.cloud/docs/tinymce/latest/svelte-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/svelte-pm/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/svelte-zip/ +- **Web Component**: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-pm/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-zip/ +- **jQuery**: https://www.tiny.cloud/docs/tinymce/latest/jquery-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/jquery-pm/ + +### Backend Frameworks +- **Django**: https://www.tiny.cloud/docs/tinymce/latest/django-cloud/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/django-zip/ +- **Laravel**: https://www.tiny.cloud/docs/tinymce/latest/laravel-tiny-cloud/ + - Composer: https://www.tiny.cloud/docs/tinymce/latest/laravel-composer-install/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/laravel-zip-install/ +- **Ruby on Rails**: https://www.tiny.cloud/docs/tinymce/latest/rails-cloud/ + - Package Manager: https://www.tiny.cloud/docs/tinymce/latest/rails-third-party/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/rails-zip/ +- **Node.js + Express**: https://www.tiny.cloud/docs/tinymce/latest/expressjs-pm/ + +### Other Integrations +- **Bootstrap**: + - Cloud: https://www.tiny.cloud/docs/tinymce/latest/bootstrap-cloud/ + - ZIP: https://www.tiny.cloud/docs/tinymce/latest/bootstrap-zip/ +- **PHP Projects**: https://www.tiny.cloud/docs/tinymce/latest/php-projects/ +- **.NET Projects**: https://www.tiny.cloud/docs/tinymce/latest/dotnet-projects/ +- **WordPress**: https://www.tiny.cloud/docs/tinymce/latest/wordpress/ +- **Shadow DOM**: https://www.tiny.cloud/docs/tinymce/latest/shadow-dom/ +- **Java Swing**: https://www.tiny.cloud/docs/tinymce/latest/swing/ + +## Configuration + +### Basic Setup +- **Basic Setup**: https://www.tiny.cloud/docs/tinymce/latest/basic-setup/ +- **Selector Configuration**: Required for all TinyMCE instances +- **Plugin Configuration**: https://www.tiny.cloud/docs/tinymce/latest/work-with-plugins/ +- **Toolbar Configuration**: Part of basic setup +- **Menu and Menu Bar**: Part of basic setup + +### Common Configuration Options +- **Content Filtering**: https://www.tiny.cloud/docs/tinymce/latest/filter-content/ +- **Localization**: https://www.tiny.cloud/docs/tinymce/latest/localize-your-language/ +- **Spell Checking**: https://www.tiny.cloud/docs/tinymce/latest/spell-checking/ +- **Content CSS**: https://www.tiny.cloud/docs/tinymce/latest/editor-content-css/ +- **URL Handling**: https://www.tiny.cloud/docs/tinymce/latest/url-handling/ + +## CDN and Package URLs + +### Cloud CDN (Recommended) +``` +https://cdn.tiny.cloud/1/[api-key]/tinymce/8/tinymce.min.js +``` +Replace `[api-key]` with your Tiny Cloud API key. + +### jsDelivr CDN +``` +https://cdn.jsdelivr.net/npm/tinymce@8/tinymce.min.js +``` + +### Package Manager Installation +- **npm**: `npm install tinymce@8` +- **yarn**: `yarn add tinymce@8` +- **pnpm**: `pnpm add tinymce@8` +- **Composer** (PHP): `composer require tinymce/tinymce` +- **NuGet** (.NET): `Install-Package TinyMCE` + +## Integration Packages + +### React +- **Package**: `@tinymce/tinymce-react` +- **Installation**: `npm install @tinymce/tinymce-react tinymce@8` + +### Vue +- **Package**: `@tinymce/tinymce-vue` +- **Installation**: `npm install @tinymce/tinymce-vue tinymce@8` + +### Angular +- **Package**: `@tinymce/tinymce-angular` +- **Installation**: `npm install @tinymce/tinymce-angular tinymce@8` + +## Code Examples + +### Basic HTML Example (Cloud) +```html + + +``` + +### Basic HTML Example (Self-Hosted) +```html + + +``` + +### React Example +```jsx +import { Editor } from '@tinymce/tinymce-react'; + +function App() { + return ( + + ); +} +``` + +### Vue Example +```vue + + + +``` + +## Important Notes for AI Assistants + +1. **Always use TinyMCE 8** for new projects and code examples +2. **CDN URLs must include version 8**: Use `tinymce@8` or `tinymce/8` in URLs +3. **Package installations**: Always specify `tinymce@8` when installing +4. **Integration packages**: Use the latest versions compatible with TinyMCE 8 +5. **Code examples default to TinyMCE 8** unless explicitly noted otherwise +6. **Legacy versions (5, 6, 7)**: Only reference when specifically asked about migration or legacy support +7. **Cloud vs Self-Hosted**: Cloud deployment is recommended for most use cases + +## API Reference +- **Editor API**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editor/ +- **Plugin API**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.plugin/ + +## Migration Guides +- **Upgrading TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/upgrading/ +- **Migration from 7.x**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-7x/ + +## Support and Resources +- **Documentation Home**: https://www.tiny.cloud/docs/tinymce/latest/ +- **Release Notes**: https://www.tiny.cloud/docs/tinymce/latest/release-notes/ +- **Examples**: https://www.tiny.cloud/docs/tinymce/latest/examples/ +- **How-to Guides**: https://www.tiny.cloud/docs/tinymce/latest/how-to-guides/ + + +## Complete Documentation Index + +This section provides a complete list of all 395 documentation pages available in TinyMCE 8, organized by category. This comprehensive index ensures LLMs have access to every documentation page, reducing the risk of hallucinations or missing important details. + +### Getting Started & Installation + +- **About Tiny Cloud’s Usage-Based Billing (UBB)**: https://www.tiny.cloud/docs/tinymce/latest/usage-based-billing/ +- **Getting Started**: https://www.tiny.cloud/docs/tinymce/latest/getting-started/ +- **Installing TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/installation/ +- **Installing TinyMCE using a .zip file**: https://www.tiny.cloud/docs/tinymce/latest/installation-zip/ +- **Installing TinyMCE using a package manager**: https://www.tiny.cloud/docs/tinymce/latest/installation-self-hosted/ +- **Installing TinyMCE using the Tiny Cloud**: https://www.tiny.cloud/docs/tinymce/latest/installation-cloud/ +- **Introduction to TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tinymce/ +- **Invalid API key**: https://www.tiny.cloud/docs/tinymce/latest/invalid-api-key/ +- **Quick start: TinyMCE from .zip**: https://www.tiny.cloud/docs/tinymce/latest/zip-install/ +- **Quick start: TinyMCE from NPM or Yarn**: https://www.tiny.cloud/docs/tinymce/latest/npm-projects/ +- **Quick start: TinyMCE from Tiny Cloud**: https://www.tiny.cloud/docs/tinymce/latest/cloud-quick-start/ + + +### Framework Integrations + +#### Frontend Frameworks +- **Bundling TinyMCE from a .zip package in Angular**: https://www.tiny.cloud/docs/tinymce/latest/angular-zip-bundle/ +- **Bundling TinyMCE from a .zip package in React**: https://www.tiny.cloud/docs/tinymce/latest/react-zip-bundle/ +- **Bundling TinyMCE in Angular**: https://www.tiny.cloud/docs/tinymce/latest/angular-pm-bundle/ +- **Bundling TinyMCE in React**: https://www.tiny.cloud/docs/tinymce/latest/react-pm-bundle/ +- **Bundling TinyMCE in Vue.js**: https://www.tiny.cloud/docs/tinymce/latest/vue-pm-bundle/ +- **Bundling TinyMCE with a Svelte application**: https://www.tiny.cloud/docs/tinymce/latest/svelte-pm-bundle/ +- **Lazy-loading TinyMCE from a .zip package in Angular**: https://www.tiny.cloud/docs/tinymce/latest/angular-zip/ +- **Lazy-loading TinyMCE from a .zip package in React**: https://www.tiny.cloud/docs/tinymce/latest/react-zip-host/ +- **Lazy-loading TinyMCE from a .zip package in Vue.js**: https://www.tiny.cloud/docs/tinymce/latest/vue-zip/ +- **Lazy-loading TinyMCE in Angular**: https://www.tiny.cloud/docs/tinymce/latest/angular-pm/ +- **Lazy-loading TinyMCE in Vue.js**: https://www.tiny.cloud/docs/tinymce/latest/vue-pm/ +- **Self-hosting TinyMCE in React**: https://www.tiny.cloud/docs/tinymce/latest/react-pm-host/ +- **TinyMCE jQuery integration quick start guide (cloud)**: https://www.tiny.cloud/docs/tinymce/latest/jquery-cloud/ +- **TinyMCE jQuery integration quick start guide (pm)**: https://www.tiny.cloud/docs/tinymce/latest/jquery-pm/ +- **Using the TinyMCE .zip package with the Blazor framework**: https://www.tiny.cloud/docs/tinymce/latest/blazor-zip/ +- **Using the TinyMCE .zip package with the Svelte framework**: https://www.tiny.cloud/docs/tinymce/latest/svelte-zip/ +- **Using the TinyMCE .zip package with the Web Component**: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-zip/ +- **Using the TinyMCE package with the Blazor framework**: https://www.tiny.cloud/docs/tinymce/latest/blazor-pm/ +- **Using the TinyMCE package with the Svelte framework**: https://www.tiny.cloud/docs/tinymce/latest/svelte-pm/ +- **Using the TinyMCE package with the Web Component**: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-pm/ +- **Using TinyMCE from the Tiny Cloud CDN with the Blazor framework**: https://www.tiny.cloud/docs/tinymce/latest/blazor-cloud/ +- **Using TinyMCE from the Tiny Cloud CDN with the Svelte framework**: https://www.tiny.cloud/docs/tinymce/latest/svelte-cloud/ +- **Using TinyMCE from the Tiny Cloud CDN with the Web Component**: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-cloud/ +- **Using TinyMCE from Tiny Cloud in Angular**: https://www.tiny.cloud/docs/tinymce/latest/angular-cloud/ +- **Using TinyMCE from Tiny Cloud in React**: https://www.tiny.cloud/docs/tinymce/latest/react-cloud/ +- **Using TinyMCE from Tiny Cloud in Vue.js**: https://www.tiny.cloud/docs/tinymce/latest/vue-cloud/ + +#### Backend Frameworks +- **Integrating TinyMCE into an Express JS App**: https://www.tiny.cloud/docs/tinymce/latest/expressjs-pm/ +- **Using the TinyMCE .zip package with the Django framework**: https://www.tiny.cloud/docs/tinymce/latest/django-zip/ +- **Using the TinyMCE .zip package with the Laravel framework**: https://www.tiny.cloud/docs/tinymce/latest/laravel-zip-install/ +- **Using the TinyMCE .zip package with the Ruby on Rails framework**: https://www.tiny.cloud/docs/tinymce/latest/rails-zip/ +- **Using the TinyMCE composer package with the Laravel framework**: https://www.tiny.cloud/docs/tinymce/latest/laravel-composer-install/ +- **Using the TinyMCE package with the Ruby on Rails framework**: https://www.tiny.cloud/docs/tinymce/latest/rails-third-party/ +- **Using TinyMCE from the Tiny Cloud CDN with Ruby on Rails**: https://www.tiny.cloud/docs/tinymce/latest/rails-cloud/ +- **Using TinyMCE from the Tiny Cloud CDN with the Django framework**: https://www.tiny.cloud/docs/tinymce/latest/django-cloud/ +- **Using TinyMCE from the Tiny Cloud CDN with the Laravel framework**: https://www.tiny.cloud/docs/tinymce/latest/laravel-tiny-cloud/ + +#### Other Integrations +- **Bootstrap skin demo**: https://www.tiny.cloud/docs/tinymce/latest/bootstrap-demo/ +- **Installing TinyMCE for .NET**: https://www.tiny.cloud/docs/tinymce/latest/dotnet-projects/ +- **Installing TinyMCE with Composer**: https://www.tiny.cloud/docs/tinymce/latest/php-projects/ +- **PHP image upload handler**: https://www.tiny.cloud/docs/tinymce/latest/php-upload-handler/ +- **Running TinyMCE in a Shadow DOM**: https://www.tiny.cloud/docs/tinymce/latest/shadow-dom/ +- **TinyMCE for Java Swing integration**: https://www.tiny.cloud/docs/tinymce/latest/swing/ +- **Using the TinyMCE .zip package with the Bootstrap framework**: https://www.tiny.cloud/docs/tinymce/latest/bootstrap-zip/ +- **Using TinyMCE from the Tiny Cloud CDN with the Bootstrap framework**: https://www.tiny.cloud/docs/tinymce/latest/bootstrap-cloud/ +- **WordPress integration**: https://www.tiny.cloud/docs/tinymce/latest/wordpress/ + +#### Technical References +- **TinyMCE Angular integration technical reference**: https://www.tiny.cloud/docs/tinymce/latest/angular-ref/ +- **TinyMCE Blazor integration technical reference**: https://www.tiny.cloud/docs/tinymce/latest/blazor-ref/ +- **TinyMCE React integration technical reference**: https://www.tiny.cloud/docs/tinymce/latest/react-ref/ +- **TinyMCE Svelte integration technical reference**: https://www.tiny.cloud/docs/tinymce/latest/svelte-ref/ +- **TinyMCE Vue.js integration technical reference**: https://www.tiny.cloud/docs/tinymce/latest/vue-ref/ +- **TinyMCE Web Component technical reference**: https://www.tiny.cloud/docs/tinymce/latest/webcomponent-ref/ + + +### Configuration & Setup + +- **APIs for custom dialogs**: https://www.tiny.cloud/docs/tinymce/latest/dialog-apis/ +- **Basic setup**: https://www.tiny.cloud/docs/tinymce/latest/basic-setup/ +- **Check spelling in TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/spell-checking/ +- **Cloud Deployment Guide**: https://www.tiny.cloud/docs/tinymce/latest/cloud-deployment-guide/ +- **Cloud deployment of editor & plugins**: https://www.tiny.cloud/docs/tinymce/latest/editor-and-features/ +- **Cloud deployment of plugins Only**: https://www.tiny.cloud/docs/tinymce/latest/features-only/ +- **Cloud Troubleshooting**: https://www.tiny.cloud/docs/tinymce/latest/cloud-troubleshooting/ +- **Commands Available for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/editor-command-identifiers/ +- **Configuring custom dialogs**: https://www.tiny.cloud/docs/tinymce/latest/dialog-configuration/ +- **Content appearance options**: https://www.tiny.cloud/docs/tinymce/latest/content-appearance/ +- **Content filtering options**: https://www.tiny.cloud/docs/tinymce/latest/content-filtering/ +- **Content formatting options**: https://www.tiny.cloud/docs/tinymce/latest/content-formatting/ +- **Content localization options**: https://www.tiny.cloud/docs/tinymce/latest/content-localization/ +- **Context Menu Items Available for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/editor-context-menu-identifiers/ +- **CSS for rendering TinyMCE content outside the editor**: https://www.tiny.cloud/docs/tinymce/latest/editor-content-css/ +- **Custom dialog body components**: https://www.tiny.cloud/docs/tinymce/latest/dialog-components/ +- **Custom dialog footer buttons**: https://www.tiny.cloud/docs/tinymce/latest/dialog-footer-buttons/ +- **Editor content behaviors**: https://www.tiny.cloud/docs/tinymce/latest/content-behavior-options/ +- **Editor save and submit options**: https://www.tiny.cloud/docs/tinymce/latest/editor-save-and-submit/ +- **Editor size and resize options**: https://www.tiny.cloud/docs/tinymce/latest/editor-size-options/ +- **Events Available for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/events/ +- **Filtering TinyMCE content**: https://www.tiny.cloud/docs/tinymce/latest/filter-content/ +- **Icons Available for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/editor-icon-identifiers/ +- **Initial Configuration**: https://www.tiny.cloud/docs/tinymce/latest/initial-configuration/ +- **Interactive examples of custom dialogs**: https://www.tiny.cloud/docs/tinymce/latest/dialog-examples/ +- **Key editor options for adding TinyMCE to an application**: https://www.tiny.cloud/docs/tinymce/latest/editor-important-options/ +- **Localize TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/localize-your-language/ +- **Menu Items Available for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/available-menu-items/ +- **Options for customizing the editor’s menus**: https://www.tiny.cloud/docs/tinymce/latest/menus-configuration-options/ +- **Options for customizing the editor’s statusbar**: https://www.tiny.cloud/docs/tinymce/latest/statusbar-configuration-options/ +- **Options for customizing the editor’s toolbars**: https://www.tiny.cloud/docs/tinymce/latest/toolbar-configuration-options/ +- **Options for customizing the editor’s UI mode**: https://www.tiny.cloud/docs/tinymce/latest/ui-mode-configuration-options/ +- **Specify Editor Version & Plugins**: https://www.tiny.cloud/docs/tinymce/latest/editor-plugin-version/ +- **The TinyMCE Content Security Policy guide**: https://www.tiny.cloud/docs/tinymce/latest/tinymce-and-csp/ +- **The TinyMCE Cross-Origin Resource Sharing guide**: https://www.tiny.cloud/docs/tinymce/latest/tinymce-and-cors/ +- **TinyMCE Icon options**: https://www.tiny.cloud/docs/tinymce/latest/editor-icons/ +- **TinyMCE Model options**: https://www.tiny.cloud/docs/tinymce/latest/editor-model/ +- **TinyMCE Skin options**: https://www.tiny.cloud/docs/tinymce/latest/editor-skin/ +- **TinyMCE Theme options**: https://www.tiny.cloud/docs/tinymce/latest/editor-theme/ +- **Toolbar Buttons Available for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/available-toolbar-buttons/ +- **Understanding editor loads**: https://www.tiny.cloud/docs/tinymce/latest/understanding-editor-loads/ +- **URL handling options**: https://www.tiny.cloud/docs/tinymce/latest/url-handling/ +- **Use multiple TinyMCE instances in a single page**: https://www.tiny.cloud/docs/tinymce/latest/multiple-editors/ +- **Version compatibility reference**: https://www.tiny.cloud/docs/tinymce/latest/plugin-editor-version-compatibility/ +- **Work with plugins to extend TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/work-with-plugins/ + + +### Plugins & Features + +#### Core Plugins +- **Accessibility Checker plugin**: https://www.tiny.cloud/docs/tinymce/latest/a11ychecker/ +- **Accordion plugin**: https://www.tiny.cloud/docs/tinymce/latest/accordion/ +- **Advanced Typography plugin**: https://www.tiny.cloud/docs/tinymce/latest/advanced-typography/ +- **Anchor plugin**: https://www.tiny.cloud/docs/tinymce/latest/anchor/ +- **Autolink plugin**: https://www.tiny.cloud/docs/tinymce/latest/autolink/ +- **Autoresize plugin**: https://www.tiny.cloud/docs/tinymce/latest/autoresize/ +- **Autosave plugin**: https://www.tiny.cloud/docs/tinymce/latest/autosave/ +- **Case Change**: https://www.tiny.cloud/docs/tinymce/latest/casechange/ +- **Character Map plugin**: https://www.tiny.cloud/docs/tinymce/latest/charmap/ +- **Checklist plugin**: https://www.tiny.cloud/docs/tinymce/latest/checklist/ +- **Code plugin**: https://www.tiny.cloud/docs/tinymce/latest/code/ +- **Code Sample plugin**: https://www.tiny.cloud/docs/tinymce/latest/codesample/ +- **Context**: https://www.tiny.cloud/docs/tinymce/latest/context/ +- **Context forms**: https://www.tiny.cloud/docs/tinymce/latest/contextform/ +- **Context menus**: https://www.tiny.cloud/docs/tinymce/latest/contextmenu/ +- **Context toolbar**: https://www.tiny.cloud/docs/tinymce/latest/contexttoolbar/ +- **Directionality plugin**: https://www.tiny.cloud/docs/tinymce/latest/directionality/ +- **Emoticons plugin**: https://www.tiny.cloud/docs/tinymce/latest/emoticons/ +- **Enhanced Code Editor plugin**: https://www.tiny.cloud/docs/tinymce/latest/advcode/ +- **Enhanced Media Embed plugin**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-mediaembed/ +- **Enhanced Tables plugin**: https://www.tiny.cloud/docs/tinymce/latest/advtable/ +- **Footnotes plugin**: https://www.tiny.cloud/docs/tinymce/latest/footnotes/ +- **Format Painter**: https://www.tiny.cloud/docs/tinymce/latest/formatpainter/ +- **Full Page HTML Plugin**: https://www.tiny.cloud/docs/tinymce/latest/fullpagehtml/ +- **Full Screen plugin**: https://www.tiny.cloud/docs/tinymce/latest/fullscreen/ +- **Handling image uploads**: https://www.tiny.cloud/docs/tinymce/latest/upload-images/ +- **Help plugin**: https://www.tiny.cloud/docs/tinymce/latest/help/ +- **Image and file options**: https://www.tiny.cloud/docs/tinymce/latest/file-image-upload/ +- **Image Editing**: https://www.tiny.cloud/docs/tinymce/latest/editimage/ +- **Image plugin**: https://www.tiny.cloud/docs/tinymce/latest/image/ +- **Import CSS plugin**: https://www.tiny.cloud/docs/tinymce/latest/importcss/ +- **Import from Word plugin**: https://www.tiny.cloud/docs/tinymce/latest/importword/ +- **Insert Date/Time plugin**: https://www.tiny.cloud/docs/tinymce/latest/insertdatetime/ +- **Link Checker plugin**: https://www.tiny.cloud/docs/tinymce/latest/linkchecker/ +- **Link plugin**: https://www.tiny.cloud/docs/tinymce/latest/link/ +- **List Styles plugin**: https://www.tiny.cloud/docs/tinymce/latest/advlist/ +- **Lists plugin**: https://www.tiny.cloud/docs/tinymce/latest/lists/ +- **Markdown plugin**: https://www.tiny.cloud/docs/tinymce/latest/markdown/ +- **Math plugin**: https://www.tiny.cloud/docs/tinymce/latest/math/ +- **Media plugin**: https://www.tiny.cloud/docs/tinymce/latest/media/ +- **Mentions plugin**: https://www.tiny.cloud/docs/tinymce/latest/mentions/ +- **Merge Tags plugin**: https://www.tiny.cloud/docs/tinymce/latest/mergetags/ +- **Nonbreaking Space plugin**: https://www.tiny.cloud/docs/tinymce/latest/nonbreaking/ +- **Page Break plugin**: https://www.tiny.cloud/docs/tinymce/latest/pagebreak/ +- **Page Embed plugin**: https://www.tiny.cloud/docs/tinymce/latest/pageembed/ +- **Permanent Pen Plugin**: https://www.tiny.cloud/docs/tinymce/latest/permanentpen/ +- **Plugins for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/plugins/ +- **Preview plugin**: https://www.tiny.cloud/docs/tinymce/latest/preview/ +- **Quick Toolbars plugin**: https://www.tiny.cloud/docs/tinymce/latest/quickbars/ +- **Save plugin**: https://www.tiny.cloud/docs/tinymce/latest/save/ +- **Search and Replace plugin**: https://www.tiny.cloud/docs/tinymce/latest/searchreplace/ +- **Table of Contents plugin**: https://www.tiny.cloud/docs/tinymce/latest/tableofcontents/ +- **Table options**: https://www.tiny.cloud/docs/tinymce/latest/table-options/ +- **Table plugin**: https://www.tiny.cloud/docs/tinymce/latest/table/ +- **Templates plugin**: https://www.tiny.cloud/docs/tinymce/latest/advanced-templates/ +- **Visual Blocks plugin**: https://www.tiny.cloud/docs/tinymce/latest/visualblocks/ +- **Visual Characters plugin**: https://www.tiny.cloud/docs/tinymce/latest/visualchars/ +- **Word Count plugin**: https://www.tiny.cloud/docs/tinymce/latest/wordcount/ + +#### Editor Modes +- **Inline editor options**: https://www.tiny.cloud/docs/tinymce/latest/inline-editor-options/ +- **Setup inline editing mode**: https://www.tiny.cloud/docs/tinymce/latest/use-tinymce-inline/ +- **TinyMCE classic editing mode**: https://www.tiny.cloud/docs/tinymce/latest/use-tinymce-classic/ +- **TinyMCE distraction-free editing mode**: https://www.tiny.cloud/docs/tinymce/latest/use-tinymce-distraction-free/ + +#### Spell Checking +- **Add Hunspell dictionaries to Spell Checker**: https://www.tiny.cloud/docs/tinymce/latest/self-hosting-hunspell/ +- **Adding custom dictionaries**: https://www.tiny.cloud/docs/tinymce/latest/custom-dictionaries-for-tiny-spellchecker/ +- **Deploy the TinyMCE Spelling server-side component using Docker**: https://www.tiny.cloud/docs/tinymce/latest/individual-spelling-container/ +- **Spell Checker plugin**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tiny-spellchecker/ +- **Spelling Autocorrect plugin**: https://www.tiny.cloud/docs/tinymce/latest/autocorrect/ +- **Spelling options**: https://www.tiny.cloud/docs/tinymce/latest/spelling/ +- **Spelling service settings**: https://www.tiny.cloud/docs/tinymce/latest/configure-spelling-service/ + + +### Premium Features + +#### AI Features +- **AI Assistant plugin**: https://www.tiny.cloud/docs/tinymce/latest/ai/ +- **AI proxy server reference guide**: https://www.tiny.cloud/docs/tinymce/latest/ai-proxy/ +- **Amazon Bedrock integration guide**: https://www.tiny.cloud/docs/tinymce/latest/ai-bedrock/ +- **Azure AI integration guide**: https://www.tiny.cloud/docs/tinymce/latest/ai-azure/ +- **Google Gemini integration guide**: https://www.tiny.cloud/docs/tinymce/latest/ai-gemini/ +- **OpenAI ChatGPT integration guide**: https://www.tiny.cloud/docs/tinymce/latest/ai-openai/ + +#### Comments & Collaboration +- **Commands, Events and APIs for the Comments plugin**: https://www.tiny.cloud/docs/tinymce/latest/comments-commands-events-apis/ +- **Configuring the Comments plugin access option**: https://www.tiny.cloud/docs/tinymce/latest/comments-access-options/ +- **Configuring the Comments plugin in callback mode**: https://www.tiny.cloud/docs/tinymce/latest/comments-callback-mode/ +- **Configuring the Comments plugin in embedded mode**: https://www.tiny.cloud/docs/tinymce/latest/comments-embedded-mode/ +- **Configuring the Comments plugin with the Mentions plugin**: https://www.tiny.cloud/docs/tinymce/latest/comments-with-mentions/ +- **Introduction to Tiny Comments**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tiny-comments/ +- **Revision History Plugin**: https://www.tiny.cloud/docs/tinymce/latest/revisionhistory/ +- **Suggested Edits Plugin**: https://www.tiny.cloud/docs/tinymce/latest/suggestededits/ +- **Toolbar buttons and menu items for the Comments plugin**: https://www.tiny.cloud/docs/tinymce/latest/comments-toolbars-menus/ +- **Using the Annotations API**: https://www.tiny.cloud/docs/tinymce/latest/annotations/ +- **Using TinyMCE Comments**: https://www.tiny.cloud/docs/tinymce/latest/comments-using-comments/ + +#### Export & Import +- **Docx to HTML Converter API**: https://www.tiny.cloud/docs/tinymce/latest/docx-to-html-converter-api/ +- **Export to PDF plugin**: https://www.tiny.cloud/docs/tinymce/latest/exportpdf/ +- **Export to PDF with JWT authentication (Node.js) Guide**: https://www.tiny.cloud/docs/tinymce/latest/export-to-pdf-with-jwt-authentication-nodejs/ +- **Export to PDF with JWT authentication (PHP) Guide**: https://www.tiny.cloud/docs/tinymce/latest/export-to-pdf-with-jwt-authentication-php/ +- **Export to Word plugin**: https://www.tiny.cloud/docs/tinymce/latest/exportword/ +- **Export to Word Standalone Service**: https://www.tiny.cloud/docs/tinymce/latest/export-to-word-standalone-service/ +- **Export to Word with JWT authentication (Node.js) Guide**: https://www.tiny.cloud/docs/tinymce/latest/export-to-word-with-jwt-authentication-nodejs/ +- **Export to Word with JWT authentication (PHP) Guide**: https://www.tiny.cloud/docs/tinymce/latest/export-to-word-with-jwt-authentication-php/ +- **HTML to Docx Converter API**: https://www.tiny.cloud/docs/tinymce/latest/html-to-docx-converter-api/ +- **HTML to PDF Converter API**: https://www.tiny.cloud/docs/tinymce/latest/html-to-pdf-converter-api/ +- **Import from Word Standalone Service**: https://www.tiny.cloud/docs/tinymce/latest/import-from-word-standalone-service/ +- **Import from Word with JWT authentication (Node.js) Guide**: https://www.tiny.cloud/docs/tinymce/latest/import-from-word-with-jwt-authentication-nodejs/ +- **Import from Word with JWT authentication (PHP) Guide**: https://www.tiny.cloud/docs/tinymce/latest/import-from-word-with-jwt-authentication-php/ + +#### PowerPaste +- **Commands and Events for the PowerPaste plugin**: https://www.tiny.cloud/docs/tinymce/latest/powerpaste-commands-events-apis/ +- **Introduction to PowerPaste**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-powerpaste/ +- **Options for the PowerPaste plugin**: https://www.tiny.cloud/docs/tinymce/latest/powerpaste-options/ +- **Supported functionality for the PowerPaste plugin**: https://www.tiny.cloud/docs/tinymce/latest/powerpaste-support/ +- **Troubleshooting the PowerPaste plugin**: https://www.tiny.cloud/docs/tinymce/latest/powerpaste-troubleshooting/ + +#### TinyDrive +- **.Net Core**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-dotnet/ +- **Configuring the Tiny Drive UI**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-ui-options/ +- **Dropbox and Google Drive integration options**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-dropbox-and-google-drive/ +- **Dropbox integration**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-dropbox-integration/ +- **Getting started**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-getting-started/ +- **Google Drive integration**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-googledrive-integration/ +- **Introduction to the Tiny Drive plugin APIs**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tinydrive-apis/ +- **Java Spring**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-java/ +- **Node.js**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-nodejs/ +- **PHP**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-php/ +- **Set up Tiny Drive JWT Authentication**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-jwt-authentication/ +- **Tiny Drive Browse API**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-browse/ +- **Tiny Drive Changelog**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-changelog/ +- **Tiny Drive Introduction**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-introduction/ +- **Tiny Drive Pick API**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-pick/ +- **Tiny Drive plugin setup options**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-setup-options/ +- **Tiny Drive TypeScript interfaces**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-type-interfaces/ +- **Tiny Drive Upload API**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-upload/ +- **Toolbar buttons and menu items for the Tiny Drive plugin**: https://www.tiny.cloud/docs/tinymce/latest/tinydrive-toolbars-menus/ + +#### Media Optimizer +- **Media Optimizer**: https://www.tiny.cloud/docs/tinymce/latest/uploadcare/ +- **Media Optimizer (Files and Documents)**: https://www.tiny.cloud/docs/tinymce/latest/uploadcare-documents/ +- **Media Optimizer (Image)**: https://www.tiny.cloud/docs/tinymce/latest/uploadcare-image/ +- **Media Optimizer (Video)**: https://www.tiny.cloud/docs/tinymce/latest/uploadcare-video/ + +#### Services & Infrastructure +- **Common server-side component settings**: https://www.tiny.cloud/docs/tinymce/latest/configure-common-settings-services/ +- **Configure Enhanced Media Embed Server**: https://www.tiny.cloud/docs/tinymce/latest/mediaembed-server-config/ +- **Creating a private/public key pair for Tiny Cloud**: https://www.tiny.cloud/docs/tinymce/latest/generate-rsa-key-pairs/ +- **Deploy the TinyMCE Export to PDF service server-side component using Docker (individually licensed)**: https://www.tiny.cloud/docs/tinymce/latest/individual-export-to-pdf-on-premises/ +- **Deploy the TinyMCE Hyperlinking server-side component using Docker**: https://www.tiny.cloud/docs/tinymce/latest/individual-hyperlinking-container/ +- **Deploy the TinyMCE Image Proxy service server-side component using Docker**: https://www.tiny.cloud/docs/tinymce/latest/individual-image-proxy-container/ +- **Deploy the TinyMCE Import from Word and Export to Word service server-side component using Docker (individually licensed)**: https://www.tiny.cloud/docs/tinymce/latest/individual-import-from-word-and-export-to-word-on-premises/ +- **Hyperlinking service settings**: https://www.tiny.cloud/docs/tinymce/latest/configure-hyperlink-service/ +- **Image Proxy service settings**: https://www.tiny.cloud/docs/tinymce/latest/configure-imageproxy-service/ +- **Integrate Enhanced Media Embed Server**: https://www.tiny.cloud/docs/tinymce/latest/mediaembed-server-integration/ +- **License key**: https://www.tiny.cloud/docs/tinymce/latest/license-key/ +- **Required configuration for the server-side components**: https://www.tiny.cloud/docs/tinymce/latest/configure-required-services/ +- **Troubleshoot server-side components**: https://www.tiny.cloud/docs/tinymce/latest/troubleshoot-server/ + + +### Customization & Development + +#### Creating Custom Components +- **Create a plugin for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/creating-a-plugin/ +- **Create a Skin for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/creating-a-skin/ +- **Create an icon pack for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/creating-an-icon-pack/ +- **Create custom notifications**: https://www.tiny.cloud/docs/tinymce/latest/creating-custom-notifications/ +- **Creating custom Basic toolbar buttons**: https://www.tiny.cloud/docs/tinymce/latest/custom-basic-toolbar-button/ +- **Creating custom dialogs**: https://www.tiny.cloud/docs/tinymce/latest/dialog/ +- **Creating custom Group toolbar buttons**: https://www.tiny.cloud/docs/tinymce/latest/custom-group-toolbar-button/ +- **Creating custom menu items**: https://www.tiny.cloud/docs/tinymce/latest/creating-custom-menu-items/ +- **Creating custom Menu toolbar buttons**: https://www.tiny.cloud/docs/tinymce/latest/custom-menu-toolbar-button/ +- **Creating custom Split toolbar buttons**: https://www.tiny.cloud/docs/tinymce/latest/custom-split-toolbar-button/ +- **Creating custom Toggle toolbar buttons**: https://www.tiny.cloud/docs/tinymce/latest/custom-toggle-toolbar-button/ +- **Custom Basic menu items**: https://www.tiny.cloud/docs/tinymce/latest/custom-basic-menu-items/ +- **Custom Icon Pack Demo**: https://www.tiny.cloud/docs/tinymce/latest/custom-icon-pack-demo/ +- **Custom Nested menu items**: https://www.tiny.cloud/docs/tinymce/latest/custom-nested-menu-items/ +- **Custom Toggle menu items**: https://www.tiny.cloud/docs/tinymce/latest/custom-toggle-menu-items/ +- **Custom view**: https://www.tiny.cloud/docs/tinymce/latest/custom-view/ +- **Customizing the editor UI**: https://www.tiny.cloud/docs/tinymce/latest/customize-ui/ +- **Toolbar buttons**: https://www.tiny.cloud/docs/tinymce/latest/custom-toolbarbuttons/ +- **User interface components**: https://www.tiny.cloud/docs/tinymce/latest/ui-components/ + +#### Bundling & Build Tools +- **Bundling a .zip version of TinyMCE with CommonJS and Browserify**: https://www.tiny.cloud/docs/tinymce/latest/browserify-cjs-download/ +- **Bundling a .zip version of TinyMCE with CommonJS and Webpack**: https://www.tiny.cloud/docs/tinymce/latest/webpack-cjs-download/ +- **Bundling a .zip version of TinyMCE with ES6 and Rollup.js**: https://www.tiny.cloud/docs/tinymce/latest/rollup-es6-download/ +- **Bundling a .zip version of TinyMCE with ES6 and Webpack**: https://www.tiny.cloud/docs/tinymce/latest/webpack-es6-download/ +- **Bundling an NPM version of TinyMCE with CommonJS and Browserify**: https://www.tiny.cloud/docs/tinymce/latest/browserify-cjs-npm/ +- **Bundling an NPM version of TinyMCE with ES6 and Rollup.js**: https://www.tiny.cloud/docs/tinymce/latest/rollup-es6-npm/ +- **Bundling the User Interface localizations for TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/bundling-localization/ +- **Bundling TinyMCE content CSS using module loading**: https://www.tiny.cloud/docs/tinymce/latest/bundling-content-css/ +- **Bundling TinyMCE from NPM using Webpack and CommonJS**: https://www.tiny.cloud/docs/tinymce/latest/webpack-cjs-npm/ +- **Bundling TinyMCE from NPM with ES6 and Vite**: https://www.tiny.cloud/docs/tinymce/latest/vite-es6-npm/ +- **Bundling TinyMCE from NPM with Webpack using ES6 modules**: https://www.tiny.cloud/docs/tinymce/latest/webpack-es6-npm/ +- **Bundling TinyMCE icon packs using module loading**: https://www.tiny.cloud/docs/tinymce/latest/bundling-icons/ +- **Bundling TinyMCE models using module loading**: https://www.tiny.cloud/docs/tinymce/latest/bundling-models/ +- **Bundling TinyMCE plugins using module loading**: https://www.tiny.cloud/docs/tinymce/latest/bundling-plugins/ +- **Bundling TinyMCE skins using module loading**: https://www.tiny.cloud/docs/tinymce/latest/bundling-skins/ +- **Bundling TinyMCE themes using module loading**: https://www.tiny.cloud/docs/tinymce/latest/bundling-themes/ +- **Introduction and initial setup for containerized server-side services from the premium self-hosted bundles**: https://www.tiny.cloud/docs/tinymce/latest/bundle-intro-setup/ +- **Introduction to bundling TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/introduction-to-bundling-tinymce/ + +#### Enhanced Skins & Icons +- **Enhanced Skins & Icon Packs**: https://www.tiny.cloud/docs/tinymce/latest/enhanced-skins-and-icon-packs/ +- **Using the icon pack template tool**: https://www.tiny.cloud/docs/tinymce/latest/using-the-icon-pack-template/ + + +### API Reference + +#### Core APIs +- **tinymce**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.root/ +- **tinymce.AddOnManager**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.addonmanager/ +- **tinymce.Editor**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editor/ +- **tinymce.editor.ui.Registry**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editor.ui.registry/ +- **tinymce.editor.ui.Ui**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editor.ui.ui/ +- **tinymce.EditorManager**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editormanager/ +- **tinymce.EditorMode**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editormode/ +- **tinymce.EditorOptions**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editoroptions/ +- **tinymce.EditorUpload**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editorupload/ +- **tinymce.Plugin**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.plugin/ +- **tinymce.Theme**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.theme/ + +#### UI APIs +- **tinymce.NotificationManager**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.notificationmanager/ +- **tinymce.Shortcuts**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.shortcuts/ +- **tinymce.WindowManager**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.windowmanager/ + +#### Utility APIs +- **tinymce.Annotator**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.annotator/ +- **tinymce.Env**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.env/ +- **tinymce.Event**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.event/ +- **tinymce.FakeClipboard**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.fakeclipboard/ +- **tinymce.Formatter**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.formatter/ +- **tinymce.UndoManager**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.undomanager/ +- **tinymce.UserLookup**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.userlookup/ +- **tinymce.util.Delay**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.delay/ +- **tinymce.util.EventDispatcher**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.eventdispatcher/ +- **tinymce.util.I18n**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.i18n/ +- **tinymce.util.ImageUploader**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.imageuploader/ +- **tinymce.util.Observable**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.observable/ +- **tinymce.util.Tools**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.tools/ +- **tinymce.util.URI**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.util.uri/ + +#### DOM APIs +- **tinymce.dom.BookmarkManager**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.bookmarkmanager/ +- **tinymce.dom.DOMUtils**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.domutils/ +- **tinymce.dom.EventUtils**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.eventutils/ +- **tinymce.dom.RangeUtils**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.rangeutils/ +- **tinymce.dom.ScriptLoader**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.scriptloader/ +- **tinymce.dom.Selection**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.selection/ +- **tinymce.dom.Serializer**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.serializer/ +- **tinymce.dom.StyleSheetLoader**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.stylesheetloader/ +- **tinymce.dom.TextSeeker**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.textseeker/ +- **tinymce.dom.TreeWalker**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.dom.treewalker/ + +#### HTML APIs +- **tinymce.html.DomParser**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.domparser/ +- **tinymce.html.Entities**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.entities/ +- **tinymce.html.Node**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.node/ +- **tinymce.html.Schema**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.schema/ +- **tinymce.html.Serializer**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.serializer/ +- **tinymce.html.Styles**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.styles/ +- **tinymce.html.Writer**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.html.writer/ + +#### Geometry APIs +- **tinymce.geom.Rect**: https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.geom.rect/ + + +### Migration Guides + +- **Migrating from Froala to TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-froala/ +- **Migrating from TinyMCE 4 to TinyMCE 7.0**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-4x/ +- **Migrating from TinyMCE 4 to TinyMCE 8**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-4x-to-8x/ +- **Migrating from TinyMCE 5 to TinyMCE 7.0**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-5x/ +- **Migrating from TinyMCE 5 to TinyMCE 8**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-5x-to-8x/ +- **Migrating from TinyMCE 6 to TinyMCE 7.0**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-6x/ +- **Migrating from TinyMCE 6 to TinyMCE 8**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-6x-to-8x/ +- **Migrating from TinyMCE 7 to TinyMCE 8**: https://www.tiny.cloud/docs/tinymce/latest/migration-from-7x/ +- **TinyMCE Migration Guides**: https://www.tiny.cloud/docs/tinymce/latest/migration-guides/ +- **Upgrading TinyMCE**: https://www.tiny.cloud/docs/tinymce/latest/upgrading/ + + +### Examples & Demos + +- **Basic example**: https://www.tiny.cloud/docs/tinymce/latest/basic-example/ +- **Borderless skin demo**: https://www.tiny.cloud/docs/tinymce/latest/borderless-demo/ +- **Classic editor example**: https://www.tiny.cloud/docs/tinymce/latest/classic-demo/ +- **Distraction-free editor example**: https://www.tiny.cloud/docs/tinymce/latest/distraction-free-demo/ +- **Fabric skin demo**: https://www.tiny.cloud/docs/tinymce/latest/fabric-demo/ +- **Fluent skin demo**: https://www.tiny.cloud/docs/tinymce/latest/fluent-demo/ +- **Full featured demo: Including Premium Plugins**: https://www.tiny.cloud/docs/tinymce/latest/full-featured-premium-demo/ +- **Full featured demo: Non-Premium Plugins only**: https://www.tiny.cloud/docs/tinymce/latest/full-featured-open-source-demo/ +- **How To Guides**: https://www.tiny.cloud/docs/tinymce/latest/how-to-guides/ +- **Inline editor example**: https://www.tiny.cloud/docs/tinymce/latest/inline-demo/ +- **Jam icons pack demo**: https://www.tiny.cloud/docs/tinymce/latest/jam-demo/ +- **Material Classic skin demo**: https://www.tiny.cloud/docs/tinymce/latest/material-classic-demo/ +- **Material Outline skin demo**: https://www.tiny.cloud/docs/tinymce/latest/material-outline-demo/ +- **Naked skin demo**: https://www.tiny.cloud/docs/tinymce/latest/naked-demo/ +- **Outside skin demo**: https://www.tiny.cloud/docs/tinymce/latest/outside-demo/ +- **Small icons pack demo**: https://www.tiny.cloud/docs/tinymce/latest/small-demo/ +- **Snow skin demo**: https://www.tiny.cloud/docs/tinymce/latest/snow-demo/ +- **TinyMCE 8 examples**: https://www.tiny.cloud/docs/tinymce/latest/examples/ + + +### Release Information + +- **Changelog**: https://www.tiny.cloud/docs/tinymce/latest/changelog/ +- **Release notes for TinyMCE 8**: https://www.tiny.cloud/docs/tinymce/latest/release-notes/ +- **TinyMCE 8.0.0**: https://www.tiny.cloud/docs/tinymce/latest/8.0-release-notes/ +- **TinyMCE 8.0.1**: https://www.tiny.cloud/docs/tinymce/latest/8.0.1-release-notes/ +- **TinyMCE 8.0.2**: https://www.tiny.cloud/docs/tinymce/latest/8.0.2-release-notes/ +- **TinyMCE 8.1**: https://www.tiny.cloud/docs/tinymce/latest/8.1.0-release-notes/ +- **TinyMCE 8.1.1**: https://www.tiny.cloud/docs/tinymce/latest/8.1.1-release-notes/ +- **TinyMCE 8.1.2**: https://www.tiny.cloud/docs/tinymce/latest/8.1.2-release-notes/ +- **TinyMCE 8.2.0**: https://www.tiny.cloud/docs/tinymce/latest/8.2.0-release-notes/ +- **TinyMCE 8.2.1**: https://www.tiny.cloud/docs/tinymce/latest/8.2.1-release-notes/ +- **TinyMCE 8.2.2**: https://www.tiny.cloud/docs/tinymce/latest/8.2.2-release-notes/ +- **TinyMCE 8.3.0**: https://www.tiny.cloud/docs/tinymce/latest/8.3.0-release-notes/ +- **TinyMCE 8.3.1**: https://www.tiny.cloud/docs/tinymce/latest/8.3.1-release-notes/ +- **TinyMCE 8.3.2**: https://www.tiny.cloud/docs/tinymce/latest/8.3.2-release-notes/ + + +### Accessibility & Security + +- **Accessibility options**: https://www.tiny.cloud/docs/tinymce/latest/accessibility/ +- **Accessible navigation guide**: https://www.tiny.cloud/docs/tinymce/latest/tinymce-and-screenreaders/ +- **Custom Keyboard Shortcuts**: https://www.tiny.cloud/docs/tinymce/latest/shortcuts/ +- **Security guide**: https://www.tiny.cloud/docs/tinymce/latest/security/ +- **TinyMCE for Touch-Enabled and Mobile Devices**: https://www.tiny.cloud/docs/tinymce/latest/tinymce-for-mobile/ +- **TinyMCE Keyboard shortcuts**: https://www.tiny.cloud/docs/tinymce/latest/keyboard-shortcuts/ + + +### Support & Resources + +- **Premium upgrade promotion**: https://www.tiny.cloud/docs/tinymce/latest/promotions/ +- **Support**: https://www.tiny.cloud/docs/tinymce/latest/support/ +- **Tiny Docs Ai**: https://www.tiny.cloud/docs/tinymce/latest/tiny-docs-ai/ + + +### Legacy & Other + +- **Interactive integration example**: https://www.tiny.cloud/docs/tinymce/latest/ie-template-creation/ +- **MoxieManager plugin**: https://www.tiny.cloud/docs/tinymce/latest/moxiemanager/ + diff --git a/modules/ROOT/attachments/llms.txt b/modules/ROOT/attachments/llms.txt new file mode 100644 index 0000000000..7b81de7981 --- /dev/null +++ b/modules/ROOT/attachments/llms.txt @@ -0,0 +1,105 @@ +# TinyMCE Documentation + +> Rich text editor for web applications. The latest stable version is TinyMCE 8. + +TinyMCE is a powerful, flexible WYSIWYG rich text editor that can be integrated into any web application. + +**IMPORTANT**: Always use TinyMCE 8 for new projects. Use `tinymce@8` or `tinymce/8` in CDN URLs and package installations. + +## Getting Started + +- [Getting Started](https://www.tiny.cloud/docs/tinymce/latest/getting-started/): Overview and introduction to TinyMCE +- [Introduction to TinyMCE](https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tinymce/): What is TinyMCE and how to add it to your project +- [Installation](https://www.tiny.cloud/docs/tinymce/latest/installation/): Installation options and methods + +### Quick Start Guides + +- [Cloud Quick Start](https://www.tiny.cloud/docs/tinymce/latest/cloud-quick-start/): Get started with Tiny Cloud CDN (recommended) +- [NPM Quick Start](https://www.tiny.cloud/docs/tinymce/latest/npm-projects/): Install via npm, yarn, or pnpm +- [ZIP Quick Start](https://www.tiny.cloud/docs/tinymce/latest/zip-install/): Download and install from ZIP archive + +## Integration Guides + +See the complete documentation index in llms-full.txt for all available integration pages. + +## Basic Setup Examples + +### Cloud Deployment (Recommended) + +```html + + +``` + +### Self-Hosted (NPM) + +```bash +npm install tinymce@8 +``` + +```html + + +``` + +### React Example + +```jsx +import { Editor } from '@tinymce/tinymce-react'; + +function App() { + return ( + + ); +} +``` + +## Key Configuration + +- [Basic Setup](https://www.tiny.cloud/docs/tinymce/latest/basic-setup/): Essential configuration options +- [Content Filtering](https://www.tiny.cloud/docs/tinymce/latest/filter-content/): Control HTML output +- [Localization](https://www.tiny.cloud/docs/tinymce/latest/localize-your-language/): Multi-language support +- [Spell Checking](https://www.tiny.cloud/docs/tinymce/latest/spell-checking/): Enable spell checking +- [Cloud Deployment Guide](https://www.tiny.cloud/docs/tinymce/latest/cloud-deployment-guide/): Configure Tiny Cloud + +## Plugins & Features + +- [Plugins Overview](https://www.tiny.cloud/docs/tinymce/latest/plugins/): Available plugins and features +- [Table Plugin](https://www.tiny.cloud/docs/tinymce/latest/table/): Table editing capabilities +- [Image Plugin](https://www.tiny.cloud/docs/tinymce/latest/image/): Image handling and editing +- [Link Plugin](https://www.tiny.cloud/docs/tinymce/latest/link/): Link management + +## API Reference + +- [Editor API](https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editor/): Core editor API +- [Plugin API](https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.plugin/): Plugin development API + +## Migration & Upgrading + +- [Upgrading TinyMCE](https://www.tiny.cloud/docs/tinymce/latest/upgrading/): Upgrade guide +- [Migration from 7.x](https://www.tiny.cloud/docs/tinymce/latest/migration-from-7x/): Migrate from TinyMCE 7 + +## Complete Documentation + +For a complete list of all 395 documentation pages, see [llms-full.txt](https://www.tiny.cloud/docs/tinymce/latest/llms-full.txt). + diff --git a/modules/ROOT/pages/8.4.0-release-notes.adoc b/modules/ROOT/pages/8.4.0-release-notes.adoc index 9d8d4ba772..45dc460ba9 100644 --- a/modules/ROOT/pages/8.4.0-release-notes.adoc +++ b/modules/ROOT/pages/8.4.0-release-notes.adoc @@ -2,7 +2,7 @@ :release-version: 8.4.0 :navtitle: {productname} {release-version} :description: Release notes for {productname} {release-version} -:keywords: releasenotes, new, changes, bugfixes +:keywords: releasenotes, new, changes, bugfixes, new features, improvements, changes, removals, deprecated, known issues :page-toclevels: 1 include::partial$misc/admon-releasenotes-for-stable.adoc[] @@ -13,8 +13,8 @@ include::partial$misc/admon-releasenotes-for-stable.adoc[] {productname} {release-version} was released for {enterpriseversion} and {cloudname} on Wednesday, February 4^th^, 2026. These release notes provide an overview of the changes for {productname} {release-version}, including: -* xref:new-premium-plugin[New Premium plugin] -* xref:new-open-source-plugin[New Open Source plugin] +* xref:new-premium-plugins[New Premium plugin] +* xref:new-open-source-plugins[New Open Source plugins] * xref:accompanying-premium-plugin-changes[Accompanying Premium plugin changes] * xref:accompanying-premium-plugin-end-of-life-announcement[Accompanying Premium plugin end-of-life announcement] * xref:accompanying-open-source-plugin-end-of-life-announcement[Accompanying open source plugin end-of-life-announcement] @@ -28,8 +28,8 @@ include::partial$misc/admon-releasenotes-for-stable.adoc[] * xref:known-issues[Known issues] -[[new-premium-plugin]] -== New Premium plugin +[[new-premium-plugins]] +== New Premium plugins The following new Premium plugin was released alongside {productname} {release-version}. diff --git a/modules/ROOT/pages/exportpdf.adoc b/modules/ROOT/pages/exportpdf.adoc index 1be2a9d008..7bdb1c607e 100644 --- a/modules/ROOT/pages/exportpdf.adoc +++ b/modules/ROOT/pages/exportpdf.adoc @@ -92,4 +92,4 @@ include::partial$commands/{plugincode}-cmds.adoc[] == API Reference -> Explore the comprehensive API documentation for the {pluginname} Premium plugin at https://exportpdf.api.tiny.cloud/docs[{pluginname} API Reference Documentation.^] +> Explore the comprehensive API documentation for the {pluginname} Premium plugin at https://exportpdf.api.tiny.cloud/v1/convert/docs[{pluginname} API Reference Documentation.^] diff --git a/modules/ROOT/pages/html-to-pdf-converter-api.adoc b/modules/ROOT/pages/html-to-pdf-converter-api.adoc index 3beeff4ac2..2a655566ab 100644 --- a/modules/ROOT/pages/html-to-pdf-converter-api.adoc +++ b/modules/ROOT/pages/html-to-pdf-converter-api.adoc @@ -27,9 +27,9 @@ The {servicename} is a powerful tool that seamlessly integrates advanced documen Tailor your PDF documents to suit your needs: -* **Custom CSS Styling:** Apply link:https://exportpdf.api.tiny.cloud/docs#section/General/CSS[custom CSS^] styles to your PDFs for brand consistency and enhanced presentation. -* **Header and Footer Options:** Add link:https://exportpdf.api.tiny.cloud/docs#section/PDF-options/Header-and-footer[headers, footers^], and other branding elements to your PDF documents for a professional touch. -* **Page Formatting:** Control page settings such as orientation, link:https://exportpdf.api.tiny.cloud/docs#section/PDF-options/Margins[margins^], and link:https://exportpdf.api.tiny.cloud/docs#section/PDF-options/Page-format[page size] to optimize readability. +* **Custom CSS Styling:** Apply link:https://exportpdf.api.tiny.cloud/v1/convert/docs#section/General/CSS[custom CSS^] styles to your PDFs for brand consistency and enhanced presentation. +* **Header and Footer Options:** Add link:https://exportpdf.api.tiny.cloud/v1/convert/docs#section/PDF-options/Header-and-footer[headers, footers^], and other branding elements to your PDF documents for a professional touch. +* **Page Formatting:** Control page settings such as orientation, link:https://exportpdf.api.tiny.cloud/v1/convert/docs#section/PDF-options/Margins[margins^], and link:https://exportpdf.api.tiny.cloud/v1/convert/docs#section/PDF-options/Page-format[page size] to optimize readability. == Ideal for Various Use Cases @@ -40,4 +40,4 @@ Tailor your PDF documents to suit your needs: == PDF Converter API Reference -> Explore the comprehensive API documentation at link:https://exportpdf.api.tiny.cloud/docs[PDF Converter API Reference documentation.^] \ No newline at end of file +> Explore the comprehensive API documentation at link:https://exportpdf.api.tiny.cloud/v1/convert/docs[PDF Converter API Reference documentation.^] \ No newline at end of file diff --git a/modules/ROOT/pages/installation.adoc b/modules/ROOT/pages/installation.adoc index 2adf73388b..6092f662d5 100644 --- a/modules/ROOT/pages/installation.adoc +++ b/modules/ROOT/pages/installation.adoc @@ -32,43 +32,43 @@ The following packages are thin wrappers around {productname} to make it easier [.lead] xref:react-cloud.adoc[React] -Integrate {productname} into your React application using the {cloudname}. +Integrate {productname} into your React application. | [.lead] xref:angular-cloud.adoc[Angular] -Integrate {productname} into your Angular application using the {cloudname}. +Integrate {productname} into your Angular application. | [.lead] xref:vue-cloud.adoc[Vue.js] -Integrate {productname} into your Vue.js application using the {cloudname}. +Integrate {productname} into your Vue.js application. | [.lead] xref:blazor-cloud.adoc[Blazor] -Integrate {productname} into your Blazor application using the {cloudname}. +Integrate {productname} into your Blazor application. | [.lead] xref:svelte-cloud.adoc[Svelte] -Integrate {productname} into your Svelte application using the {cloudname}. +Integrate {productname} into your Svelte application. | [.lead] xref:webcomponent-cloud.adoc[Web Component] -Integrate {productname} as a web component using the {cloudname}. +Integrate {productname} as a web component. | [.lead] xref:jquery-cloud.adoc[jQuery] -Integrate {productname} with the jQuery JavaScript library using the {cloudname}. +Integrate {productname} with the jQuery JavaScript library. // Empty cell to even out rows | @@ -83,19 +83,19 @@ Integrate {productname} with the jQuery JavaScript library using the {cloudname} [.lead] xref:django-cloud.adoc[Django] -Integrate {productname} into your Django application using the {cloudname}. +Integrate {productname} into your Django application. | [.lead] xref:laravel-tiny-cloud.adoc[Laravel] -Integrate {productname} into your Laravel application using the {cloudname}. +Integrate {productname} into your Laravel application. | [.lead] xref:rails-cloud.adoc[Ruby on Rails] -Integrate {productname} into your Ruby on Rails application using the {cloudname}. +Integrate {productname} into your Ruby on Rails application. // Empty cell to even out rows | @@ -112,6 +112,6 @@ Integrate {productname} into your Ruby on Rails application using the {cloudname [.lead] xref:bootstrap-cloud.adoc[Bootstrap] -Integrate {productname} with the Bootstrap CSS framework using the {cloudname}. +Integrate {productname} with the Bootstrap CSS framework. | |=== diff --git a/modules/ROOT/pages/tiny-docs-ai.adoc b/modules/ROOT/pages/tiny-docs-ai.adoc deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/modules/ROOT/partials/configuration/exportpdf_converter_options.adoc b/modules/ROOT/partials/configuration/exportpdf_converter_options.adoc index 806eea7d6b..667d77a730 100644 --- a/modules/ROOT/partials/configuration/exportpdf_converter_options.adoc +++ b/modules/ROOT/partials/configuration/exportpdf_converter_options.adoc @@ -39,4 +39,4 @@ tinymce.init({ [NOTE] The `exportpdf_service_url` option must be configured for the {pluginname} plugin to work. -> For comprehensive details regarding the `exportpdf_converter_options`, please refer to the https://exportpdf.api.tiny.cloud/docs[API documentation^] available for the {pluginname} Premium plugin. \ No newline at end of file +> For comprehensive details regarding the `exportpdf_converter_options`, please refer to the https://exportpdf.api.tiny.cloud/v1/convert/docs[API documentation^] available for the {pluginname} Premium plugin. \ No newline at end of file diff --git a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-api-usage.adoc b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-api-usage.adoc index f79a093ec6..4ed99e7aec 100644 --- a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-api-usage.adoc +++ b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-api-usage.adoc @@ -7,7 +7,7 @@ The API is available on `+http://localhost:[port]+` (by default the `port` is `8 [NOTE] The REST API documentation is available at `+http://localhost:[port]/docs+`. -Alternatively, refer to the specifications in link:https://exportpdf.api.tiny.cloud/docs[https://exportpdf.api.tiny.cloud/docs^]. +Alternatively, refer to the specifications in link:https://exportpdf.api.tiny.cloud/v1/convert/docs[https://exportpdf.api.tiny.cloud/v1/convert/docs^]. If the authorization for the API is enabled, provided an authorization token. More instructions can be found in the xref:individual-export-to-pdf-on-premises.adoc#authorization[authorization] section. diff --git a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-autorization.adoc b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-autorization.adoc index eba8d6e67b..6d895410be 100644 --- a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-autorization.adoc +++ b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-autorization.adoc @@ -91,7 +91,7 @@ axios.post( 'http://localhost:8080/v1/convert', data, config ) `SECRET_KEY` it’s the key which has been passed to the {pluginname} On-Premises instance -Please refer to the link:https://exportpdf.api.tiny.cloud/docs[{pluginname} REST API documentation] to start using the service. +Please refer to the link:https://exportpdf.api.tiny.cloud/v1/convert/docs[{pluginname} REST API documentation] to start using the service. [NOTE] If API clients like Postman or Insomnia are used, then set the JWT token as an `Authorization` header in the `Headers` tab. Do not use the built-in token authorization as this will generate invalid header with a `Bearer` prefix added to the token. \ No newline at end of file diff --git a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-fonts.adoc b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-fonts.adoc index 648b948eee..0b68a02c09 100644 --- a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-fonts.adoc +++ b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-fonts.adoc @@ -5,7 +5,7 @@ During document writing, the possibility of using many different fonts can be ve Using the appropriate font can change the appearance of the document and emphasize its style. -{pluginname} Converter allows link:https://exportpdf.api.tiny.cloud/docs#section/Web-Fonts[Web Fonts^] to be used, which provided the integrator with the ability to use standard operating system fonts or use custom fonts without the need to import them using CSS. +{pluginname} Converter allows link:https://exportpdf.api.tiny.cloud/v1/convert/docs#section/Web-Fonts[Web Fonts^] to be used, which provided the integrator with the ability to use standard operating system fonts or use custom fonts without the need to import them using CSS. Below is a list of the basic fonts included in the image: @@ -31,7 +31,7 @@ However, additional fonts can be added to {pluginname} Converter in two ways: ** See Use Windows fonts in PDF Converter section. [NOTE] -The fonts inside the mounted volume will be installed on the docker image operating system. Only the `.ttf` and `.otf` font formats are supported. If other font formats are used, these will need to be converted to the supported format prior or use fonts such as link:https://exportpdf.api.tiny.cloud/docs#section/Web-Fonts[Web Fonts^]. +The fonts inside the mounted volume will be installed on the docker image operating system. Only the `.ttf` and `.otf` font formats are supported. If other font formats are used, these will need to be converted to the supported format prior or use fonts such as link:https://exportpdf.api.tiny.cloud/v1/convert/docs#section/Web-Fonts[Web Fonts^]. [TIP] Ensure that the converted fonts can be installed and used on your local machine first, before installing them on the docker container. diff --git a/modules/ROOT/partials/misc/supported-versions.adoc b/modules/ROOT/partials/misc/supported-versions.adoc index c085c5d3f8..70108327b0 100644 --- a/modules/ROOT/partials/misc/supported-versions.adoc +++ b/modules/ROOT/partials/misc/supported-versions.adoc @@ -8,7 +8,7 @@ Supported versions of {productname}: |Version |Release Date |End of Premium Support |8.4 |2026-02-04 |2027-02-04 |8.3 |2025-12-10 |2027-06-10 -|8.2 |2025-10-22 |2027-10-22 +|8.2 |2025-10-22 |2027-04-22 |8.1 |2025-09-17 |2027-03-17 |8.0 |2025-07-23 |2027-01-23 |7.9 |2025-05-14 |2026-11-14 diff --git a/package.json b/package.json index b038529b0b..3994f1bc67 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,8 @@ "build": "./-scripts/api-reference.sh", "build-local-ref": "./-scripts/api-reference-local.sh", "clean": "rm -rf ./build", + "generate-llm-files": "node ./-scripts/generate-llm-files.js", + "generate-llm-files-from-url": "node ./-scripts/generate-llm-files.js https://www.tiny.cloud/docs/antora-sitemap.xml", "nodemon": "nodemon --exec yarn antora ./antora-playbook.yml", "nodemon-dev": "nodemon --exec yarn antora ./antora-playbook-local.yml", "server": "http-server build/site/ --port 4000 -a localhost", @@ -43,5 +45,7 @@ "nodemon": "^3.1.10", "npm-run-all": "^4.1.5" }, - "dependencies": {} + "dependencies": { + "sanitize-html": "^2.17.1" + } }