Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fixed a preview quirk which caused the pikchr click handlers to not get processed on wikiedit/fileedit previews after the first one. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
052d37480927b6010c8a33549254fe0f |
User & Date: | stephan 2020-09-18 09:21:14 |
Context
2020-09-18
| ||
10:32 | An alternate impl for centering pikchrs which does not rely on margin:auto. ... (check-in: 2963f440 user: stephan tags: trunk) | |
09:21 | Fixed a preview quirk which caused the pikchr click handlers to not get processed on wikiedit/fileedit previews after the first one. ... (check-in: 052d3748 user: stephan tags: trunk) | |
07:48 | Made the return code of a bit of new code match its docs. ... (check-in: 539eb61f user: stephan tags: trunk) | |
Changes
Changes to src/fileedit.c.
︙ | ︙ | |||
1745 1746 1747 1748 1749 1750 1751 | CX("<button id='btn-preview-refresh' " "data-f-preview-from='fileContent' " /* ^^^ fossil.page[methodName]() OR text source elem ID, ** but we need a method in order to support clients swapping out ** the text editor with their own. */ "data-f-preview-via='_postPreview' " /* ^^^ fossil.page[methodName](content, callback) */ | | | 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 | CX("<button id='btn-preview-refresh' " "data-f-preview-from='fileContent' " /* ^^^ fossil.page[methodName]() OR text source elem ID, ** but we need a method in order to support clients swapping out ** the text editor with their own. */ "data-f-preview-via='_postPreview' " /* ^^^ fossil.page[methodName](content, callback) */ "data-f-preview-to='_previewTo' " /* ^^^ dest elem ID */ ">Refresh</button>"); /* Toggle auto-update of preview when the Preview tab is selected. */ CX("<div class='input-with-label'>" "<input type='checkbox' value='1' " "id='cb-preview-autorefresh' checked>" "<label for='cb-preview-autorefresh'>Auto-refresh?</label>" |
︙ | ︙ |
Changes to src/fossil.dom.js.
︙ | ︙ | |||
803 804 805 806 807 808 809 | The methodNamespace (2nd argument) defaults to fossil.page, and any method-name data properties, e.g. data-f-preview-via and potentially data-f-preview-from/to, must be a single method name, not a property-access-style string. e.g. "myPreview" is legal but "foo.myPreview" is not (unless, of course, the method is actually named "foo.myPreview" (which is legal but would be | | > | 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 | The methodNamespace (2nd argument) defaults to fossil.page, and any method-name data properties, e.g. data-f-preview-via and potentially data-f-preview-from/to, must be a single method name, not a property-access-style string. e.g. "myPreview" is legal but "foo.myPreview" is not (unless, of course, the method is actually named "foo.myPreview" (which is legal but would be unconventional)). All such methods are called with methodNamespace as their "this". An example... First an input button: <button id='test-preview-connector' data-f-preview-from='#fileedit-content-editor' // elem ID or method name |
︙ | ︙ | |||
866 867 868 869 870 871 872 | : methodNamespace[e.dataset.fPreviewTo], eFrom = '#'===e.dataset.fPreviewFrom[0] ? document.querySelector(e.dataset.fPreviewFrom) : methodNamespace[e.dataset.fPreviewFrom], asText = +(e.dataset.fPreviewAsText || 0); eTo.textContent = "Fetching preview..."; methodNamespace[e.dataset.fPreviewVia]( | | | | 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 | : methodNamespace[e.dataset.fPreviewTo], eFrom = '#'===e.dataset.fPreviewFrom[0] ? document.querySelector(e.dataset.fPreviewFrom) : methodNamespace[e.dataset.fPreviewFrom], asText = +(e.dataset.fPreviewAsText || 0); eTo.textContent = "Fetching preview..."; methodNamespace[e.dataset.fPreviewVia]( (eFrom instanceof Function ? eFrom.call(methodNamespace) : eFrom.value), function(r){ if(eTo instanceof Function) eTo.call(methodNamespace, r||''); else if(!r){ dom.clearElement(eTo); }else if(asText){ eTo.textContent = r; }else{ dom.parseHtml(dom.clearElement(eTo), r); } |
︙ | ︙ |
Changes to src/fossil.page.fileedit.js.
︙ | ︙ | |||
1139 1140 1141 1142 1143 1144 1145 | this page's input fields, and updates the UI with with the preview. Returns this object, noting that the operation is async. */ P.preview = function f(switchToTab){ if(!affirmHasFile()) return this; | > | > > > | > > > > | > | | < | > > | < < | | 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 | this page's input fields, and updates the UI with with the preview. Returns this object, noting that the operation is async. */ P.preview = function f(switchToTab){ if(!affirmHasFile()) return this; return this._postPreview(this.fileContent(), function(c){ P._previewTo(c); if(switchToTab) self.tabs.switchToTab(self.e.tabs.preview); }); }; /** Callback for use with F.connectPagePreviewers(). Gets passed the preview content. */ P._previewTo = function(c){ const target = this.e.previewTarget; D.clearElement(target); if('string'===typeof c) D.parseHtml(target,c); if(F.pikchr){ F.pikchr.addSrcView(target.querySelectorAll('svg.pikchr')); } }; /** Callback for use with F.connectPagePreviewers() */ P._postPreview = function(content,callback){ if(!affirmHasFile()) return this; if(!content){ callback(content); |
︙ | ︙ |
Changes to src/fossil.page.wikiedit.js.
︙ | ︙ | |||
1340 1341 1342 1343 1344 1345 1346 | this page's input fields, and updates the UI with with the preview. Returns this object, noting that the operation is async. */ P.preview = function f(switchToTab){ if(!affirmPageLoaded()) return this; | > | > > > | > > > > | > | | < | > > | < < | | 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 | this page's input fields, and updates the UI with with the preview. Returns this object, noting that the operation is async. */ P.preview = function f(switchToTab){ if(!affirmPageLoaded()) return this; return this._postPreview(this.wikiContent(), function(c){ P._previewTo(c); if(switchToTab) self.tabs.switchToTab(self.e.tabs.preview); }); }; /** Callback for use with F.connectPagePreviewers(). Gets passed the preview content. */ P._previewTo = function(c){ const target = this.e.previewTarget; D.clearElement(target); if('string'===typeof c) D.parseHtml(target,c); if(F.pikchr){ F.pikchr.addSrcView(target.querySelectorAll('svg.pikchr')); } }; /** Callback for use with F.connectPagePreviewers() */ P._postPreview = function(content,callback){ if(!affirmPageLoaded()) return this; if(!content){ callback(content); |
︙ | ︙ |
Changes to src/wiki.c.
︙ | ︙ | |||
1219 1220 1221 1222 1223 1224 1225 | CX("<button id='btn-preview-refresh' " "data-f-preview-from='wikiContent' " /* ^^^ fossil.page[methodName]() OR text source elem ID, ** but we need a method in order to support clients swapping out ** the text editor with their own. */ "data-f-preview-via='_postPreview' " /* ^^^ fossil.page[methodName](content, callback) */ | | | | 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 | CX("<button id='btn-preview-refresh' " "data-f-preview-from='wikiContent' " /* ^^^ fossil.page[methodName]() OR text source elem ID, ** but we need a method in order to support clients swapping out ** the text editor with their own. */ "data-f-preview-via='_postPreview' " /* ^^^ fossil.page[methodName](content, callback) */ "data-f-preview-to='_previewTo' " /* ^^^ dest elem ID or fossil.page[methodName]*/ ">Refresh</button>"); /* Toggle auto-update of preview when the Preview tab is selected. */ CX("<div class='input-with-label'>" "<input type='checkbox' value='1' " "id='cb-preview-autorefresh' checked>" "<label for='cb-preview-autorefresh'>Auto-refresh?</label>" "</div>"); |
︙ | ︙ |