Show existing depicts on item page.
This commit is contained in:
		
							parent
							
								
									9867e90769
								
							
						
					
					
						commit
						62aff85ae6
					
				
							
								
								
									
										33
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								app.py
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -498,11 +498,41 @@ def get_description_from_page(html):
 | 
			
		|||
 | 
			
		||||
    return twitter_description
 | 
			
		||||
 | 
			
		||||
def existing_depicts_from_entity(entity):
 | 
			
		||||
    if 'P180' not in entity['claims']:
 | 
			
		||||
        return []
 | 
			
		||||
    existing = []
 | 
			
		||||
    for claim in entity['claims']['P180']:
 | 
			
		||||
        item_id = claim['mainsnak']['datavalue']['value']['numeric-id']
 | 
			
		||||
 | 
			
		||||
        item = DepictsItem.query.get(item_id)
 | 
			
		||||
        if item:
 | 
			
		||||
            d = {
 | 
			
		||||
                'label': item.label,
 | 
			
		||||
                'description': item.description,
 | 
			
		||||
                'qid': item.qid,
 | 
			
		||||
                'count': item.count,
 | 
			
		||||
                'existing': True,
 | 
			
		||||
            }
 | 
			
		||||
        else:
 | 
			
		||||
            qid = f'Q{item_id}'
 | 
			
		||||
            d = {
 | 
			
		||||
                'label': 'not in db',
 | 
			
		||||
                'description': '',
 | 
			
		||||
                'qid': qid,
 | 
			
		||||
                'count': 0,
 | 
			
		||||
                'existing': True,
 | 
			
		||||
            }
 | 
			
		||||
        existing.append(d)
 | 
			
		||||
    return existing
 | 
			
		||||
 | 
			
		||||
@app.route("/item/Q<int:item_id>")
 | 
			
		||||
def item_page(item_id):
 | 
			
		||||
    qid = f'Q{item_id}'
 | 
			
		||||
    item = painting.Painting(qid)
 | 
			
		||||
    entity = mediawiki.get_entity_with_cache(qid)
 | 
			
		||||
    entity = mediawiki.get_entity_with_cache(qid, refresh=True)
 | 
			
		||||
 | 
			
		||||
    existing_depicts = existing_depicts_from_entity(entity)
 | 
			
		||||
 | 
			
		||||
    width = 800
 | 
			
		||||
    image_filename = item.image_filename
 | 
			
		||||
| 
						 | 
				
			
			@ -600,6 +630,7 @@ def item_page(item_id):
 | 
			
		|||
                           label=label,
 | 
			
		||||
                           label_languages=label_languages,
 | 
			
		||||
                           show_translation_links=show_translation_links,
 | 
			
		||||
                           existing_depicts=existing_depicts,
 | 
			
		||||
                           image=image,
 | 
			
		||||
                           other=other,
 | 
			
		||||
                           # hits=hits,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,10 +8,11 @@ var app = new Vue({
 | 
			
		|||
        searchTerms: '',
 | 
			
		||||
        hits: [],
 | 
			
		||||
        new_depicts: [],
 | 
			
		||||
        existing_depicts: existing_depicts,
 | 
			
		||||
    },
 | 
			
		||||
    methods: {
 | 
			
		||||
        remove(index) {
 | 
			
		||||
                this.$delete(this.new_depicts, index);
 | 
			
		||||
            this.$delete(this.new_depicts, index);
 | 
			
		||||
        },
 | 
			
		||||
        add_depicts(hit) {
 | 
			
		||||
            this.new_depicts.push(hit);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,8 @@
 | 
			
		|||
 | 
			
		||||
{% block style %}
 | 
			
		||||
<style>
 | 
			
		||||
.description { margin-left: 2em; color: rgb(96, 96, 96); }
 | 
			
		||||
div.description { margin-left: 2em; color: rgb(96, 96, 96); }
 | 
			
		||||
span.description { color: rgb(96, 96, 96); }
 | 
			
		||||
</style>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +105,20 @@
 | 
			
		|||
      <form method="POST" action="{{ url_for('save', item_id=item_id) }}">
 | 
			
		||||
      {% raw %}
 | 
			
		||||
      <div id="app" class="mt-2">
 | 
			
		||||
        <div v-if="existing_depicts.length">
 | 
			
		||||
          <div>this painting has {{ existing_depicts.length }} existing depicts statement</div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="mb-2" v-for="(hit, index) in existing_depicts">
 | 
			
		||||
          <div>
 | 
			
		||||
            <a :href="'https://www.wikidata.org/wiki/' + hit.qid">{{ hit.label }}</a>
 | 
			
		||||
            ({{ hit.qid }})
 | 
			
		||||
             
 | 
			
		||||
            <span v-if="hit.description" class="description">{{ hit.description }}</span>
 | 
			
		||||
            — {{ hit.count }} paintings
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <h3>what can you see in this painting?</h3>
 | 
			
		||||
 | 
			
		||||
        <div v-if="new_depicts.length">
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +133,7 @@
 | 
			
		|||
            <a href="#" @click.prevent="remove(index)" >remove</a>
 | 
			
		||||
            — {{ hit.count }} existing paintings
 | 
			
		||||
            ({{ hit.qid }})
 | 
			
		||||
            <a :href="'https://www.wikidata.org/wiki/' + hit.qid">view on Wikidata</a>
 | 
			
		||||
            <a :href="'https://www.wikidata.org/wiki/' + hit.qid">[wikidata]</a>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div v-if="hit.description">
 | 
			
		||||
            <div class="description">{{ hit.description }}</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -162,6 +177,7 @@
 | 
			
		|||
{% block script %}
 | 
			
		||||
<script>
 | 
			
		||||
  var lookup_url = {{ url_for('depicts_lookup') | tojson }};
 | 
			
		||||
  var existing_depicts = {{ existing_depicts | tojson }};
 | 
			
		||||
</script>
 | 
			
		||||
<script src="{{ url_for('static', filename='vue/vue.js') }}"></script>
 | 
			
		||||
<script src="{{ url_for('static', filename='js/item.js') }}"></script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue