1+
2+ let urls_types = {
3+ // "P": "https://www.wikidata.org/w/rest.php/wikibase/v1/entities/properties/$1/labels", // {"ar": "", "en": ""}
4+ "Q" : "https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/$1/labels" , // {"ar": "", "en": ""}
5+ "L" : "https://www.wikidata.org/wiki/Special:EntityData/$1.json" , // entities.lemmas
6+ } ;
7+
18async function find_labels ( ) {
9+ const spans = document . querySelectorAll ( "span[find-label]" ) ;
10+ console . log ( `find_labels: ${ spans . length } ` ) ;
11+
12+ spans . forEach ( async ( span ) => {
13+ const qid = span . getAttribute ( "find-label" ) ;
14+ const both = span . getAttribute ( "find-label-both" ) ;
15+ const noCache = span . getAttribute ( "no-cache" ) ;
16+ if ( ! qid ) return ;
17+
18+ const cached = localStorage . getItem ( `wikidata-label-2-${ qid } ` ) ;
19+ if ( cached && ! noCache ) {
20+ span . textContent = cached ;
21+ return ;
22+ }
23+
24+ try {
25+ const prefix = qid . charAt ( 0 ) . toUpperCase ( ) ;
26+ const urlTemplate = urls_types [ prefix ] || urls_types [ "L" ] ;
27+ const url = urlTemplate . replace ( "$1" , qid ) ;
28+
29+ let urls_load = $ ( "#urls_load" ) ;
30+ if ( urls_load . length ) {
31+ let link = `<a href="${ url } " target="_blank">${ url } </a>` ;
32+ urls_load . append ( `<li>${ link } </li>` ) ;
33+ }
34+
35+ const response = await fetch ( url ) ;
36+ if ( ! response . ok ) throw new Error ( "فشل في جلب البيانات" ) ;
37+
38+ const data = await response . json ( ) ;
39+
40+ let labelAr ;
41+
42+ if ( urls_types [ prefix ] && ( prefix === "Q" || prefix === "P" ) ) {
43+ labelAr = data ?. ar || data ?. en || data ?. mul || qid ;
44+ } else {
45+ const entity = data . entities [ qid ] ;
46+ if ( entity ?. type === "lexeme" ) {
47+ labelAr = Object . values ( entity . lemmas || { } )
48+ . map ( l => l . value )
49+ . filter ( Boolean )
50+ . join ( " / " ) || "(غير متوفر)" ;
51+ } else {
52+ let labels = entity ?. labels || { } ;
53+ labelAr = labels ?. ar ?. value || labels ?. en ?. value || labels ?. mul ?. value || "(غير متوفر)" ;
54+ }
55+ }
56+
57+ if ( labelAr ) {
58+ const labelFinal = both ? `${ labelAr } (${ qid } )` : labelAr ;
59+ span . textContent = labelFinal ;
60+ localStorage . setItem ( `wikidata-label-2-${ qid } ` , labelFinal ) ;
61+ }
62+
63+ } catch ( error ) {
64+ console . error ( `خطأ في جلب الاسم لـ ${ qid } :` , error ) ;
65+ }
66+ } ) ;
67+ }
68+
69+ async function find_labels_old ( ) {
270 const spans = document . querySelectorAll ( "span[find-label]" ) ;
371 console . log ( `find_labels: ${ spans . length } ` )
472 spans . forEach ( async ( span ) => {
573 const qid = span . getAttribute ( "find-label" ) ;
674 const both = span . getAttribute ( "find-label-both" ) ;
75+ const noCache = span . getAttribute ( "no-cache" ) ;
776 if ( ! qid ) return ;
877
978 // حاول الحصول على الاسم من localStorage أولاً
1079 const cached = localStorage . getItem ( `wikidata-label-2-${ qid } ` ) ;
11- if ( cached ) {
80+ if ( cached && ! noCache ) {
1281 span . textContent = cached ;
1382 return ;
1483 }
1584
1685 try {
1786 const url = `https://www.wikidata.org/wiki/Special:EntityData/${ qid } .json` ;
87+ let urls_load = $ ( "#urls_load" ) ;
88+ if ( urls_load . length ) {
89+ let link = `<a href="${ url } " target="_blank">${ qid } </a>` ;
90+ urls_load . append ( `<li>${ link } </li>` ) ;
91+ }
92+
1893 const response = await fetch ( url ) ;
1994 if ( ! response . ok ) throw new Error ( "فشل في جلب البيانات" ) ;
2095
@@ -40,3 +115,4 @@ async function find_labels() {
40115 }
41116 } ) ;
42117}
118+
0 commit comments