Skip to content

Commit 62c48ec

Browse files
authored
Merge pull request #6 from yarl/dev
version 0.6
2 parents dacaafe + 752d563 commit 62c48ec

13 files changed

Lines changed: 176 additions & 43 deletions

File tree

package.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "monumental",
3-
"version": "0.5.0",
3+
"version": "0.6.0",
44
"private": true,
55
"description": "Monumental app",
66
"main": "src/index.js",
@@ -48,17 +48,19 @@
4848
"webpack-dev-server": "^1.14.1"
4949
},
5050
"dependencies": {
51-
"angular": "^1.5.0",
52-
"angular-animate": "^1.5.8",
53-
"angular-aria": "^1.5.0",
51+
"angular": "1.5.9",
52+
"angular-animate": "1.5.9",
53+
"angular-aria": "1.5.9",
5454
"angular-file-upload": "^2.3.4",
5555
"angular-leaflet-directive": "^0.10.0",
56+
"angular-local-storage": "^0.5.0",
5657
"angular-material": "^1.0.0",
57-
"angular-messages": "^1.5.0",
58-
"angular-sanitize": "^1.5.9",
58+
"angular-messages": "1.5.9",
59+
"angular-sanitize": "1.5.9",
5960
"angular-ui-router": "*",
6061
"babel-polyfill": "^6.16.0",
6162
"leaflet": "^1.0.2",
63+
"leaflet.markercluster": "^1.0.0",
6264
"lodash": "^4.16.2",
6365
"material-design-icons": "^3.0.1",
6466
"moment": "^2.15.1",
Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
11
<md-content layout="column" layout-align="start center" flex>
2-
<div class="dashboard">
3-
<a ui-sref="main.object({id: '765569'})">Zamek Gryf<a/><br />
4-
<a ui-sref="main.list({id: '54181'})">monuments in silesian voivodeship<a/>
2+
<div class="dashboard" layout="row" layout-align="center start">
3+
<div layout="column" layout-align="start start" flex>
4+
<h3 class="md-title">Language</h3>
5+
<div layout="row" layout-align="start start">
6+
<md-input-container>
7+
<label>First language</label>
8+
<input type="text" ng-model="$ctrl.languages[0]">
9+
</md-input-container>
10+
<md-input-container>
11+
<label>Second language</label>
12+
<input type="text" ng-model="$ctrl.languages[1]">
13+
</md-input-container>
14+
<md-input-container>
15+
<label>Third language</label>
16+
<input type="text" ng-model="$ctrl.languages[2]">
17+
</md-input-container>
18+
</div>
19+
<md-button class="md-primary" ng-click="$ctrl.saveLanguages()">Save</md-button>
20+
</div>
21+
<div flex>
22+
<h3 class="md-title">Examples</h3>
23+
<ul>
24+
<li><a ui-sref="main.object({id: '167566'})">Pałac Kultury i Nauki</a></li>
25+
<li><a ui-sref="main.list({id: '54181'})">monuments in Silesian Voivodeship</a></li>
26+
</ul>
27+
</div>
528
</div>
629
</md-content>

src/components/main/dashboard/dashboard.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import _ from 'lodash';
2-
31
import './dashboard.scss';
42
import template from './dashboard.html';
53

@@ -8,8 +6,16 @@ const DashboardComponent = {
86
template: template
97
};
108

11-
function controller () {
9+
function controller($state, localStorageService) {
10+
let vm = this;
11+
vm.languages = localStorageService.get('languages') || ['en', 'de'];
12+
vm.saveLanguages = saveLanguages;
1213

14+
function saveLanguages() {
15+
vm.languages.indexOf('en') === -1 ? vm.languages.push('en') : false;
16+
localStorageService.set('languages', vm.languages.filter(lang => lang));
17+
$state.reload();
18+
}
1319
}
1420

1521
export default () => {

src/components/main/list/list.html

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
<span>{{item.description}}</span>
1616
</md-item-template>
1717
</md-autocomplete>
18-
<div class="list__container" flex>
18+
<md-virtual-repeat-container class="list__container" flex>
1919
<md-list-item>
20-
<span>{{$ctrl.list.length}} results</span>
20+
<span ng-if="$ctrl.showMap">{{$ctrl.list.length}} results</span>
21+
<span ng-if="!$ctrl.showMap">Loading...</span>
2122
</md-list-item>
2223
<md-list-item class="md-2-line"
23-
ng-repeat="item in $ctrl.list | orderBy: 'name.value'"
24+
md-virtual-repeat="item in $ctrl.list | orderBy: 'name.value'"
2425
ui-sref="main.object({id: item.name.value_id.substring(1)})">
2526
<div class="list__image" layout="row" layout-align="center center">
2627
<img ng-src="{{item.image}}" alt="{{item.name.value}}" ng-if="item.image">
@@ -30,7 +31,29 @@
3031
<p class="muted">{{item.admin.value}}</p>
3132
</div>
3233
</md-list-item>
33-
</div>
34+
<md-list-item class="md-2-line" ng-if="!$ctrl.showMap">
35+
<div class="list__image" layout="row" layout-align="center center"></div>
36+
<div class="md-list-item-text" layout="column"></div>
37+
</md-list-item>
38+
<md-list-item class="md-2-line" ng-if="!$ctrl.showMap">
39+
<div class="list__image" layout="row" layout-align="center center"></div>
40+
<div class="md-list-item-text" layout="column"></div>
41+
</md-list-item>
42+
<md-list-item class="md-2-line" ng-if="!$ctrl.showMap">
43+
<div class="list__image" layout="row" layout-align="center center"></div>
44+
<div class="md-list-item-text" layout="column"></div>
45+
</md-list-item>
46+
<md-list-item class="md-2-line" ng-if="!$ctrl.showMap">
47+
<div class="list__image" layout="row" layout-align="center center"></div>
48+
<div class="md-list-item-text" layout="column"></div>
49+
</md-list-item>
50+
<md-list-item class="md-2-line" ng-if="!$ctrl.showMap">
51+
<div class="list__image" layout="row" layout-align="center center"></div>
52+
<div class="md-list-item-text" layout="column"></div>
53+
</md-list-item>
54+
</md-virtual-repeat-container>
55+
</div>
56+
<div class="list__map" flex>
57+
<leaflet ng-if="$ctrl.showMap" markers="$ctrl.map.markers" layers="$ctrl.map.layers" center="$ctrl.map.center" flex></leaflet>
3458
</div>
35-
<leaflet ng-if="$ctrl.showMap" markers="$ctrl.map.markers" center="$ctrl.map.center" flex></leaflet>
3659
</md-content>

src/components/main/list/list.js

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const ListComponent = {
99
template: template
1010
};
1111

12-
function controller($state, $stateParams, $timeout, leafletData, wikidata) {
12+
function controller($state, $stateParams, $timeout, leafletData, localStorageService, wikidata) {
1313
let vm = this;
1414
const id = $stateParams.id[0] === 'Q' ? $stateParams.id : 'Q' + $stateParams.id;
1515

@@ -35,21 +35,55 @@ function controller($state, $stateParams, $timeout, leafletData, wikidata) {
3535
lng: 19.545,
3636
zoom: 7
3737
},
38-
markers: {}
38+
markers: {},
39+
layers: {
40+
baselayers: {
41+
osm: {
42+
name: 'OpenStreetMap',
43+
type: 'xyz',
44+
url: '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
45+
layerOptions: {
46+
subdomains: ['a', 'b', 'c'],
47+
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
48+
continuousWorld: true
49+
}
50+
}
51+
},
52+
overlays: {
53+
monuments: {
54+
name: 'Monuments',
55+
type: 'markercluster',
56+
visible: true
57+
}
58+
}
59+
}
3960
};
4061

62+
if (!id || id === 'Q') {
63+
vm.showMap = true;
64+
return;
65+
}
66+
67+
let langs = $stateParams.lang ? [$stateParams.lang] : [];
68+
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
69+
wikidata.setLanguages(langs);
70+
4171
wikidata.getSearch(id).then(results => {
4272
vm.search.selectedItem = results.length ? results[0] : undefined;
4373
});
4474

45-
wikidata.getSPARQL(`SELECT DISTINCT ?item ?itemLabel ?admin ?adminLabel ?coord ?image WHERE {
46-
?item p:P1435 ?monument .
47-
?item wdt:P131* wd:`+ id + ` .
48-
?item wdt:P131 ?admin .
49-
?item wdt:P625 ?coord .
50-
OPTIONAL { ?item wdt:P18 ?image }
51-
SERVICE wikibase:label { bd:serviceParam wikibase:language "pl,en" }
52-
}`).then(data => {
75+
wikidata.getSPARQL(`SELECT DISTINCT ?item ?itemLabel (SAMPLE(?admin) AS ?admin) (SAMPLE(?adminLabel) AS ?adminLabel) (SAMPLE(?coord) AS ?coord) (SAMPLE(?image) AS ?image)
76+
WHERE {
77+
?item p:P1435 ?monument .
78+
?item wdt:P131* wd:` + id + ` .
79+
?item wdt:P131 ?admin .
80+
?item wdt:P625 ?coord .
81+
OPTIONAL { ?item wdt:P18 ?image }
82+
OPTIONAL { ?admin rdfs:label ?adminLabel. FILTER(LANG(?adminLabel) = "` + langs[0] + `"). }
83+
SERVICE wikibase:label { bd:serviceParam wikibase:language "` + langs.join(',') + `" }
84+
}
85+
GROUP BY ?item ?itemLabel
86+
ORDER BY ?itemLabel`).then(data => {
5387
// console.log(data)
5488
vm.list = data.map(element => ({
5589
name: {
@@ -58,10 +92,10 @@ function controller($state, $stateParams, $timeout, leafletData, wikidata) {
5892
},
5993
admin: {
6094
value_id: element.admin.value.substring(element.admin.value.indexOf('/Q') + 1),
61-
value: element.adminLabel.value
95+
value: element.adminLabel ? element.adminLabel.value : element.admin.value.substring(element.admin.value.indexOf('/Q') + 1)
6296
},
6397
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
98+
image: element.image ? element.image.value.replace('wiki/Special:FilePath', 'w/index.php?title=Special:Redirect/file') + '&width=120' : false
6599
}));
66100
return vm.list;
67101
}).then(list => {
@@ -72,6 +106,7 @@ function controller($state, $stateParams, $timeout, leafletData, wikidata) {
72106
lat: +element.coord[1],
73107
lng: +element.coord[0],
74108
message: element.name.value,
109+
layer: 'monuments',
75110
icon: icon
76111
};
77112
bounds.push([+element.coord[1], +element.coord[0]]);

src/components/main/list/list.scss

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
1+
@import '../../../styles/variables';
2+
@import '../../../styles/responsive';
3+
14
mo-list {
25
.list {
36
width: 450px;
47
height: calc(100vh - 105px);
58
}
69

710
.list__container {
8-
overflow-y: scroll;
9-
overflow-x: hidden;
11+
margin-right: 20px;
1012

1113
md-list-item.md-2-line {
12-
border-bottom: 1px solid #e5e5e5;
14+
border-bottom: 1px solid $softGrey;
1315
}
1416
}
1517

1618
.list__image {
1719
width: 75px;
1820
min-width: 75px;
1921
height: 75px;
20-
background: #e5e5e5;
22+
background: $softGrey;
2123
margin: 15px 15px 15px 0;
2224

2325
img {
@@ -26,6 +28,15 @@ mo-list {
2628
}
2729
}
2830

31+
.list__map {
32+
background: $softGrey;
33+
34+
.angular-leaflet-map {
35+
width: 100%;
36+
height: 100%;
37+
}
38+
}
39+
2940
md-autocomplete {
3041
margin: 20px;
3142
}

src/components/main/main.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ const MainComponent = {
77
template: template
88
};
99

10-
function controller(wikidata, $state, $stateParams) {
10+
function controller(wikidata, $state, $stateParams, localStorageService) {
1111
let vm = this;
1212

13-
vm.lang = $stateParams.lang || 'pl';
14-
wikidata.setLanguages([vm.lang, 'en']);
13+
let langs = $stateParams.lang ? [$stateParams.lang] : [];
14+
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
15+
16+
vm.lang = langs[0];
17+
wikidata.setLanguages(langs);
1518

1619
vm.goToItem = (item) => $state.go('main.object', {id: item.title.substring(1)});
1720
vm.querySearch = (text) => wikidata.getSearch(text);
1821
vm.search = {};
19-
2022
}
2123

2224
export default () => {

src/components/main/monument/monument.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22
<div class="monument" layout="row" layout-align="space-between stretch">
33

44
<!-- LEFT -->
5-
<div class="monument__left">
5+
<div class="monument__left" ng-show="$ctrl.loading">
6+
<h2 class="monument__title md-display-1">Loading...</h2>
7+
</div>
8+
9+
<div class="monument__left" ng-show="!$ctrl.loading">
610
<h2 class="monument__title md-display-1">{{$ctrl.monument.labels[$ctrl.lang] || 'no name'}}</h2>
711
<h4 class="monument__subtitle md-headline muted">{{$ctrl.monument.labels.en || 'no english name'}}</h4>
812

src/components/main/monument/monument.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ const MonumentComponent = {
99
template: template
1010
};
1111

12-
function controller($http, $q, $sce, $stateParams, $timeout, $window, WikiService, wikidata) {
12+
function controller($http, $q, $sce, $stateParams, $timeout, $window, localStorageService, WikiService, wikidata) {
1313
let vm = this;
1414
const id = $stateParams.id[0] === 'Q' ? $stateParams.id : 'Q' + $stateParams.id;
1515

1616
vm.getCommonsLink = getCommonsLink;
1717
vm.image = [];
18-
vm.lang = $stateParams.lang || 'pl';
1918
vm.map = {};
2019

21-
wikidata.setLanguages([vm.lang, 'en']);
20+
let langs = $stateParams.lang ? [$stateParams.lang] : [];
21+
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
22+
23+
vm.lang = langs[0];
24+
wikidata.setLanguages(langs);
2225
getWikidata();
2326

2427
// functions
@@ -69,6 +72,7 @@ function controller($http, $q, $sce, $stateParams, $timeout, $window, WikiServic
6972
}
7073

7174
function getWikidata() {
75+
vm.loading = true;
7276
wikidata.getById(id).then(data => {
7377
const first = Object.keys(data)[0];
7478
vm.monument = data[first];
@@ -113,6 +117,7 @@ function controller($http, $q, $sce, $stateParams, $timeout, $window, WikiServic
113117
};
114118
}
115119
getInterwiki();
120+
vm.loading = false;
116121

117122
let title = vm.monument.labels[vm.lang] || vm.monument.labels.en || vm.monument.id;
118123
$window.document.title = title + ' – Monumental';

0 commit comments

Comments
 (0)