... |
... |
@@ -1,18 +1,15 @@ |
1 |
1 |
{{groovy}} |
2 |
|
-def tags = binding.variables['tags'] |
3 |
|
-def includeTags = tags?.split(',')*.trim()*.toLowerCase().findAll { it } |
|
2 |
+def results = [] |
4 |
4 |
|
5 |
|
-def maxCount = 100 |
6 |
6 |
def hql = """ |
7 |
|
- select doc.fullName |
8 |
|
- from XWikiDocument doc, BaseObject obj |
9 |
|
- where obj.name = doc.fullName |
|
5 |
+ select doc.fullName |
|
6 |
+ from XWikiDocument doc, BaseObject obj |
|
7 |
+ where obj.name = doc.fullName |
10 |
10 |
and obj.className = 'Main Categories.Anti White Incidents.Code.MoviesClass' |
11 |
11 |
order by doc.date desc |
12 |
12 |
""" |
13 |
13 |
|
14 |
|
-def docs = xwiki.search(hql, maxCount, 0) |
15 |
|
-def results = [] |
|
12 |
+def docs = xwiki.search(hql, 100, 0) |
16 |
16 |
|
17 |
17 |
docs.each { docName -> |
18 |
18 |
def doc = xwiki.getDocument(docName) |
... |
... |
@@ -22,19 +22,17 @@ |
22 |
22 |
def title = obj.getProperty("shortText1")?.value?.toString()?.trim() |
23 |
23 |
def summary = obj.getProperty("shortText2")?.value?.toString()?.trim() ?: obj.getProperty("longText1")?.value?.toString()?.trim() |
24 |
24 |
def externalURL = obj.getProperty("longText2")?.value?.toString()?.trim() |
25 |
|
- def tagList = obj.getProperty("tags")?.value |
26 |
26 |
|
27 |
27 |
if (!title || !summary) return |
28 |
28 |
|
29 |
|
- if (includeTags && tagList instanceof List) { |
30 |
|
- def docTags = tagList.collect { it.toString().toLowerCase() } |
31 |
|
- if (!docTags.any { includeTags.contains(it) }) return |
32 |
|
- } |
33 |
|
- |
34 |
|
- def isValidURL = externalURL?.startsWith("http://") || externalURL?.startsWith("https://") |
|
25 |
+ // ✅ Choose external link if valid, otherwise link to doc |
|
26 |
+ def isValidURL = externalURL && (externalURL.startsWith("http://") || externalURL.startsWith("https://")) |
35 |
35 |
def linkTarget = isValidURL ? externalURL : "doc:${docName}" |
|
28 |
+ |
|
29 |
+ // ✅ Escape brackets in title to avoid wiki breakage |
36 |
36 |
def safeTitle = title.replaceAll(/[\[\]\|]/, '').replaceAll(/\>\>/, '>>\u200B') |
37 |
37 |
|
|
32 |
+ // ✅ Auto-detect first attached image |
38 |
38 |
def imageFile = doc.getAttachmentList()?.find { |
39 |
39 |
it.filename.toLowerCase().matches(".*\\.(png|jpg|jpeg|gif)") |
40 |
40 |
}?.filename |
... |
... |
@@ -45,24 +45,20 @@ |
45 |
45 |
} |
46 |
46 |
|
47 |
47 |
def block = """ |
48 |
|
- (% style="margin-bottom:20px; width:100%" %) |
49 |
|
- |${imageMarkup}| |
|
43 |
+(% style="margin-bottom:20px; width:100%" %) |
|
44 |
+|${imageMarkup}| |
50 |
50 |
|
51 |
|
- === [[${safeTitle}>>${linkTarget}]] === |
|
46 |
+=== [[${safeTitle}>>${linkTarget}]] === |
52 |
52 |
|
53 |
|
- ${summary} |
54 |
|
- [[Read More>>${linkTarget}]] |
55 |
|
- """.trim() |
|
48 |
+${summary} |
|
49 |
+[[Read More>>${linkTarget}]] |
|
50 |
+""".trim() |
56 |
56 |
|
57 |
57 |
results << block |
58 |
58 |
} |
59 |
59 |
|
60 |
60 |
if (results.isEmpty()) { |
61 |
|
- if (includeTags) { |
62 |
|
- println "⚠️ No incidents found with selected tag(s): ${tags}" |
63 |
|
- } else { |
64 |
|
- println "⚠️ No incidents to display." |
65 |
|
- } |
|
56 |
+ println "⚠️ Still no incident blocks rendered — ensure at least one page has valid title/summary/attachment." |
66 |
66 |
} else { |
67 |
67 |
println results.join("\n\n") |
68 |
68 |
} |