Changes for page EditSheet
Last modified by superadmin on 2025/02/27 10:46
From version 1.1
edited by Thomas Coelho (local)
on 2022/04/20 16:09
on 2022/04/20 16:09
Change comment:
Install extension [org.xwiki.contrib:application-ckeditor-ui/1.61]
To version 2.1
edited by Thomas Coelho (local)
on 2022/05/27 15:18
on 2022/05/27 15:18
Change comment:
Install extension [org.xwiki.contrib:application-ckeditor-ui/1.63.1]
Summary
-
Objects (1 modified, 0 added, 0 removed)
Details
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -3,6 +3,7 @@ 3 3 #set ($ckeditorBasePath = $stringtool.removeEnd($stringtool.removeEnd($ckeditorPath, '.js'), 'ckeditor')) 4 4 #set ($resourcePickerBundlePath = "${ckeditorBasePath}plugins/xwiki-resource/resourcePicker.bundle.min") 5 5 #set ($macroWizardBundlePath = "${ckeditorBasePath}plugins/xwiki-macro/macroWizard.bundle.min") 6 +#set ($imageWizardBundlePath = "${ckeditorBasePath}plugins/xwiki-image/imageWizard.bundle.min") 6 6 #set ($modalPath = "${ckeditorBasePath}plugins/xwiki-dialog/modal.min") 7 7 #set ($l10nPath = "${ckeditorBasePath}plugins/xwiki-localization/l10n.min") 8 8 */ ... ... @@ -13,6 +13,7 @@ 13 13 modal: '$!modalPath', 14 14 l10n: '$!l10nPath', 15 15 macroWizard: '$!macroWizardBundlePath', 17 + imageWizard: '$!imageWizardBundlePath', 16 16 // This is used by the resource suggest picker on the link modal. 17 17 'bootstrap3-typeahead': $jsontool.serialize($services.webjars.url('org.webjars.npm:bootstrap-3-typeahead', 18 18 'bootstrap3-typeahead.min')), ... ... @@ -27,7 +27,7 @@ 27 27 ckeditor: { 28 28 exports: 'CKEDITOR', 29 29 // This includes dependencies of the plugins bundled with the CKEditor code. 30 - deps: ['jquery', 'resource', 'resourcePicker', 'macroWizard'] 32 + deps: ['jquery', 'resource', 'resourcePicker', 'macroWizard', 'imageWizard'] 31 31 } 32 32 }, 33 33 config: { ... ... @@ -56,56 +56,6 @@ 56 56 "$!services.webjars.url('org.xwiki.platform:xwiki-platform-tree-webjar', 'require-config.min.js', {'evaluate': true})" 57 57 ], function($, ckeditor, xwikiMeta) { 58 58 var deferred = $.Deferred(); 59 - 60 - var loadJavaScriptSkinExtensions = $jsontool.serialize($xwiki.getDocument('CKEditor.Config' 61 - ).getValue('loadJavaScriptSkinExtensions')) === 1; 62 - 63 - // See http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules 64 - var allowedContentBySyntax = { 65 - 'xwiki/2.1': { 66 - '$1': { 67 - elements: { 68 - // Elements required because the editor input is a full HTML page. 69 - html: true, head: true, link: true, script: loadJavaScriptSkinExtensions, body: true, 70 - // Headings 71 - h1: true, h2: true, h3: true, h4: true, h5: true, h6: true, 72 - // Lists 73 - dl: true, ol: true, ul: true, 74 - // Tables 75 - table: true, tr: true, th: true, td: true, 76 - // Formatting 77 - span: true, strong: true, em: true, ins: true, del: true, sub: true, sup: true, tt: true, pre: true, 78 - // Others 79 - div: true, hr: true, p: true, a: true, img: true, blockquote: true, figure: true 80 - }, 81 - // The elements above can have any attribute, through the parameter (%%) syntax. 82 - attributes: '*', 83 - styles: '*', 84 - classes: '*' 85 - }, 86 - '$2': { 87 - // The XWiki syntax doesn't support parameters for the following elements. 88 - elements: {br: true, dd: true, dt: true, li: true, tbody: true, figcaption: true} 89 - }, 90 - '$3': { 91 - // Wiki syntax macros can output any HTML. 92 - match: CKEDITOR.plugins.xwikiMacro.isMacroOutput, 93 - attributes: '*', 94 - styles: '*', 95 - classes: '*' 96 - } 97 - }, 98 - 'plain/1.0': ';' 99 - }; 100 - allowedContentBySyntax['xwiki/2.0'] = allowedContentBySyntax['xwiki/2.1']; 101 - // This is a hack, increasing the technical debt since the CKEditor module should not know about the Markdown 102 - // syntax. Actually it should not know either about the xwiki/2.0 and xwiki/2.1 syntaxes ;) 103 - // This should be fixed by implementing https://jira.xwiki.org/browse/CKEDITOR-319 104 - allowedContentBySyntax['markdown/1.2'] = $.extend(true, {}, allowedContentBySyntax['xwiki/2.1']); 105 - // Markdown doesn't allow figures at the moment. 106 - delete allowedContentBySyntax['markdown/1.2']['$1'].elements.figure; 107 - delete allowedContentBySyntax['markdown/1.2']['$2'].elements.figcaption; 108 - 109 109 var currentLocale = $('html').attr('lang') || ''; 110 110 111 111 // We have to pass the plugin that makes the request (the initiator) because the expected response can be different ... ... @@ -114,6 +114,7 @@ 114 114 return document.getURL('get', $.param({ 115 115 sheet: 'CKEditor.FileUploader', 116 116 outputSyntax: 'plain', 69 + // The syntax and language are important especially when the upload request creates a new document. 117 117 syntax: document.syntax, 118 118 language: currentLocale, 119 119 form_token: xwikiMeta.form_token, ... ... @@ -129,60 +129,14 @@ 129 129 sourceDocument = new XWiki.Document(XWiki.Model.resolve(sourceDocumentReference, XWiki.EntityType.DOCUMENT)); 130 130 } 131 131 sourceDocument.syntax = $(element).attr('data-sourceDocumentSyntax'); 132 - var isHTML5 = $(element).data('syntax') !== 'annotatedxhtml/1.0'; 133 133 134 - var allowedContent; 135 - var allowedContentWithoutFigure; 136 - if (sourceDocument.syntax in allowedContentBySyntax) { 137 - allowedContent = allowedContentBySyntax[sourceDocument.syntax]; 138 - // Try removing the figure/figcaption tags for caption content to forbid nested figures. 139 - allowedContentWithoutFigure = $.extend(true, {}, allowedContent); 140 - delete allowedContentWithoutFigure['$1']?.elements?.figure; 141 - delete allowedContentWithoutFigure['$2']?.elements?.figcaption; 142 - 143 - // Disable figure support if the syntax isn't HTML 5. 144 - if (!isHTML5) { 145 - allowedContent = allowedContentWithoutFigure; 146 - } 147 - } 148 - 149 149 var config = { 150 - allowedContent: allowedContent, 151 - editorplaceholder: $jsontool.serialize($services.localization.render('ckeditor.content.placeholder')), 152 152 filebrowserUploadUrl: getUploadURL(sourceDocument, 'filebrowser'), 153 - // This is used in CKEditor.FileUploader so we must keep them in sync. 154 - fileTools_defaultFileName: '__fileCreatedFromDataURI__', 155 155 height: $(element).height(), 156 - // CKEditor uses '-' (dash) as locale separator (between the language code and the country code). 157 - language: currentLocale.toLowerCase().replace('_', '-'), 158 - uploadUrl: getUploadURL(sourceDocument, 'filetools'), 159 - stylesSet: isHTML5 ? 'html5' : 'html4', 160 - 'xwiki-image' : { 161 - captionAllowedContent: allowedContentWithoutFigure 162 - }, 163 - 'xwiki-link': { 164 - labelGenerator: sourceDocument.getURL('get', $.param({ 165 - sheet: 'CKEditor.LinkLabelGenerator', 166 - outputSyntax: 'plain', 167 - language: currentLocale 168 - })) 169 - }, 170 - 'xwiki-resource': { 171 - dispatcher: sourceDocument.getURL('get', $.param({ 172 - sheet: 'CKEditor.ResourceDispatcher', 173 - outputSyntax: 'plain', 174 - language: currentLocale 175 - })) 176 - }, 177 - 'xwiki-source': { 178 - htmlConverter: sourceDocument.getURL('get', $.param({ 179 - sheet: 'CKEditor.HTMLConverter', 180 - outputSyntax: 'plain', 181 - language: currentLocale 182 - })) 183 - }, 184 184 mentions: [ 185 185 { 91 + // We use the source document to compute the feed URL because we want the suggested link references to be 92 + // relative to the edited document (we want the editor to output relative references as much as possible). 186 186 feed: sourceDocument.getURL('get', $.param({ 187 187 sheet: 'CKEditor.LinkSuggestions', 188 188 outputSyntax: 'plain', ... ... @@ -207,16 +207,19 @@ 207 207 minChars: 0, 208 208 itemsLimit: 6 209 209 } 210 - ] 211 - }; 212 - if ($(element).attr('data-officeImporterSupported') === 'true') { 213 - config['xwiki-office'] = { 214 - importer: sourceDocument.getURL('get', $.param({ 215 - sheet: 'CKEditor.OfficeImporter', 117 + ], 118 + sourceDocument: sourceDocument, 119 + uploadUrl: getUploadURL(sourceDocument, 'filetools'), 120 + 'xwiki-link': { 121 + // We use the source document to compute the link label generator URL because we want the link references to be 122 + // resolved relative to the edited document (as they were inserted). 123 + labelGenerator: sourceDocument.getURL('get', $.param({ 124 + sheet: 'CKEditor.LinkLabelGenerator', 125 + outputSyntax: 'plain', 216 216 language: currentLocale 217 217 })) 218 - } ;219 - } 128 + } 129 + }; 220 220 return config; 221 221 }; 222 222