Changes for page For Developers


From version 9.1
edited by Artur
on 2025/07/24 16:42
Change comment: There is no comment for this version
To version 11.1
edited by Artur
on 2025/07/24 17:12
Change comment: There is no comment for this version

Summary

Details

SKMS.Code.ForDevelopersClass[0]
URI
... ... @@ -1,0 +1,1 @@
1 +http://purl.semanticip.org/linked-data/
vann.preferredNamespacePrefix
... ... @@ -1,0 +1,1 @@
1 +sip
XWiki.JavaScriptExtension[0]
Caching policy
... ... @@ -1,0 +1,1 @@
1 +long
Code
... ... @@ -1,0 +1,105 @@
1 +require(['jquery','bootstrap','xwiki-meta'], function($, _bs, xm) {
2 + 'use strict';
3 +
4 + // Вешаем делегированный обработчик на все кнопки с классом .getTTL
5 + $('body').on('click', '.getTTL', function(e) {
6 + e.preventDefault();
7 +
8 + var $btn = $(this);
9 + var parentTd = $btn.closest('td');
10 + if (!parentTd.length) {
11 + parentTd = $btn.closest('dd');
12 +}
13 + // Ищем freestanding-ссылку
14 + var uri = parentTd.find('a.wikimodel-freestanding').attr('href');
15 + if (!uri) {
16 + return alert('Не найден исходный URI для запроса.');
17 + }
18 +
19 + // URL Groovy-скрипта
20 + var Url = "$xwiki.getURL('SKMS.Code.getTTLbyURI')";
21 +
22 + // Параметры AJAX (без изменений)
23 + var urlParams = {
24 + 'xpage': 'plain',
25 + 'outputSyntax': 'plain',
26 + 'action': 'getTTL',
27 + 'uri': uri
28 + };
29 +
30 + // Удаляем старый popover, если был
31 + $btn.popover('destroy');
32 +
33 + //title popover
34 + var lastPart = uri.substring(uri.lastIndexOf('/') + 1);
35 + let title = '<div style="display: flex; justify-content: space-between; align-items: center; width: 100%; min-width: 200px;">' + '<span style="flex: 1; word-break: break-all;">' + decodeURIComponent(lastPart) + '</span>' + '<button type="button" class="close popover-close-btn" aria-label="Close" style="border:none;background:none;font-size:1.2em;line-height:1;">&times;</button>'+ '</div>';
36 + let template = '<div class="popover ttl-preview-popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-title" >' + '<span style="flex: 1; word-break: break-word;">' + lastPart + '</span>' + '<button type="button" class="close popover-close-btn" aria-label="Close" style="border:none;background:none;font-size:1.2em;line-height:1;">&times;</button>' + '</h3>' + '<div class="popover-content"></div>' + '</div>';
37 + // Создаём popover со спиннером
38 + $btn.popover({
39 + trigger: 'manual',
40 + html: true,
41 + container: 'body',
42 + template: template,
43 + content: '<div class="col-md-12"><span class="fa fa-spinner fa-pulse"></span></div>'
44 + }).popover('show');
45 +
46 + // Навешиваем обработчик на кнопку закрытия поповера
47 +// Показываем заголовок вручную (Bootstrap мог его скрыть)
48 +setTimeout(function () {
49 + $('.popover .popover-title').css('display', 'flex').html(title);
50 +
51 + // Навешиваем обработчик на кнопку закрытия
52 + $('.popover .popover-close-btn').off('click').on('click', function () {
53 + $btn.popover('destroy');
54 +$('.popover').remove();
55 + });
56 +}, 100);
57 + // === AJAX POST (не менять) ===
58 + $.ajax({
59 + url: Url,
60 + type: 'POST',
61 + dataType: 'text',
62 + data: urlParams,
63 +
64 + beforeSend: function() {
65 + $(document.body).css('cursor','wait');
66 + },
67 +
68 + success: function(ttlText) {
69 + var pop = $btn.data('bs.popover');
70 + // $(this).data('bs.popover').tip().addClass('ttl-preview-popover');
71 + if (pop) {
72 + var $tip = pop.tip();
73 + $tip.addClass('ttl-preview-popover');
74 + $tip.find('.popover-body, .popover-content')
75 + .html(
76 + '<pre style="white-space: pre-wrap; font-family: monospace; margin:0;font-size:85%;">' +
77 + $('<div>').text(ttlText).html() +
78 + '</pre>'
79 + );
80 + }
81 + console.log(ttlText);
82 + if (xm.refreshVersion) xm.refreshVersion();
83 + },
84 +
85 + error: function(jqXHR) {
86 + var msg = "Ошибка при получении TTL:\nHTTP " +
87 + jqXHR.status + " — " + jqXHR.statusText;
88 + var pop = $btn.data('bs.popover');
89 + if (pop) {
90 + var $tip = pop.tip();
91 + $tip.find('.popover-body, .popover-content').text(msg);
92 + } else {
93 + alert(msg);
94 + }
95 + },
96 +
97 + complete: function() {
98 + $(document.body).css('cursor', 'default');
99 + }
100 + });
101 + // =======================
102 + });
103 +
104 +});
105 +
Parse content
... ... @@ -1,0 +1,1 @@
1 +Yes
Use this extension
... ... @@ -1,0 +1,1 @@
1 +currentPage
XWiki.StyleSheetExtension[0]
Caching policy
... ... @@ -1,0 +1,1 @@
1 +long
Code
... ... @@ -1,0 +1,17 @@
1 +.page-preview-popover .arrow {
2 + visibility:hidden;
3 +}
4 +
5 +#set($width="600")
6 +
7 +#set($height="1000")
8 +
9 +.ttl-preview-popover {
10 + min-width: $!{width}px;
11 + overflow-x: hidden;
12 +#if($height!="")
13 + max-height: $!{height}px;
14 + overflow-y: hidden;
15 +#end
16 +}
17 +
Content Type
... ... @@ -1,0 +1,1 @@
1 +CSS
Parse content
... ... @@ -1,0 +1,1 @@
1 +Yes
Use this extension
... ... @@ -1,0 +1,1 @@
1 +currentPage