@@ -9,11 +9,17 @@ const ListComponent = {
99 template : template
1010} ;
1111
12- function controller ( $stateParams , $timeout , wikidata ) {
12+ function controller ( $state , $ stateParams, $timeout , leafletData , wikidata ) {
1313 let vm = this ;
14+ const id = $stateParams . id [ 0 ] === 'Q' ? $stateParams . id : 'Q' + $stateParams . id ;
15+
1416 vm . map = { } ;
17+ vm . listParams = { } ;
18+
19+ vm . goToItem = ( item ) => item ? $state . go ( 'main.list' , { id : item . id . substring ( 1 ) } ) : false ;
20+ vm . querySearch = ( text ) => wikidata . getSearch ( text ) ;
21+ vm . search = { } ;
1522
16- const ids = $stateParams . id . split ( '-in-' ) . map ( id => id [ 0 ] === 'Q' ? id : 'Q' + id ) ;
1723 const icon = {
1824 iconUrl : 'assets/images/marker.png' ,
1925 shadowUrl : undefined ,
@@ -32,40 +38,54 @@ function controller($stateParams, $timeout, wikidata) {
3238 markers : { }
3339 } ;
3440
35- wikidata . getSPARQL ( `SELECT ?item ?itemLabel ?admin ?adminLabel ?coord WHERE {
36- ?item wdt:P31 wd:` + ids [ 0 ] + ` .
37- ?item wdt:P131* wd:` + ids [ 1 ] + ` .
41+ wikidata . getSearch ( id ) . then ( results => {
42+ vm . search . selectedItem = results . length ? results [ 0 ] : undefined ;
43+ } ) ;
44+
45+ wikidata . getSPARQL ( `SELECT DISTINCT ?item ?itemLabel ?admin ?adminLabel ?coord ?image WHERE {
46+ ?item p:P1435 ?monument .
47+ ?item wdt:P131* wd:` + id + ` .
3848 ?item wdt:P131 ?admin .
3949 ?item wdt:P625 ?coord .
50+ OPTIONAL { ?item wdt:P18 ?image }
4051 SERVICE wikibase:label { bd:serviceParam wikibase:language "pl,en" }
4152 }` ) . then ( data => {
42- console . log ( data )
43- vm . list = data . map ( element => ( {
44- name : {
45- value_id : element . item . value . substring ( element . item . value . indexOf ( '/Q' ) + 1 ) ,
46- value : element . itemLabel . value
47- } ,
48- admin : {
49- value_id : element . admin . value . substring ( element . admin . value . indexOf ( '/Q' ) + 1 ) ,
50- value : element . adminLabel . value
51- } ,
52- coord : element . coord . value ? element . coord . value . replace ( 'Point(' , '' ) . replace ( ')' , '' ) . split ( ' ' ) : false
53- } ) ) ;
54- return vm . list ;
55- } ) . then ( list => {
56- list . forEach ( element => {
57- if ( element . coord ) {
58- vm . map . markers [ element . name . value_id ] = {
59- lat : + element . coord [ 1 ] ,
60- lng : + element . coord [ 0 ] ,
61- icon : icon
62- } ;
63- }
64- } ) ;
65- $timeout ( ( ) => {
66- vm . showMap = true ;
53+ // console.log(data)
54+ vm . list = data . map ( element => ( {
55+ name : {
56+ value_id : element . item . value . substring ( element . item . value . indexOf ( '/Q' ) + 1 ) ,
57+ value : element . itemLabel . value
58+ } ,
59+ admin : {
60+ value_id : element . admin . value . substring ( element . admin . value . indexOf ( '/Q' ) + 1 ) ,
61+ value : element . adminLabel . value
62+ } ,
63+ coord : element . coord . value ? element . coord . value . replace ( 'Point(' , '' ) . replace ( ')' , '' ) . split ( ' ' ) : false ,
64+ image : element . image ? element . image . value . replace ( 'wiki/Special:FilePath' , 'w/index.php?title=Special:Redirect/file' ) + '&width=75' : false
65+ } ) ) ;
66+ return vm . list ;
67+ } ) . then ( list => {
68+ let bounds = [ ] ;
69+ list . forEach ( element => {
70+ if ( element . coord ) {
71+ vm . map . markers [ element . name . value_id ] = {
72+ lat : + element . coord [ 1 ] ,
73+ lng : + element . coord [ 0 ] ,
74+ message : element . name . value ,
75+ icon : icon
76+ } ;
77+ bounds . push ( [ + element . coord [ 1 ] , + element . coord [ 0 ] ] ) ;
78+ }
79+ } ) ;
80+ $timeout ( ( ) => {
81+ vm . showMap = true ;
82+ leafletData . getMap ( ) . then ( function ( map ) {
83+ if ( bounds . length ) {
84+ map . fitBounds ( bounds , { padding : [ 25 , 25 ] } ) ;
85+ }
86+ } ) ;
87+ } ) ;
6788 } ) ;
68- } ) ;
6989}
7090
7191export default ( ) => {
0 commit comments