Browse Source

Various UI fixes

* Fix status on details page
* Fix follow button on details page
* Replace back button by a link on the flat status
* Fix leaflet markers position, close #24
* Fix Leaflet icons
* Add unfollow link on followed posts
responsive
Lucas Verney 5 years ago
parent
commit
2af742b764
  1. 2
      flatisfy/__main__.py
  2. 73
      flatisfy/filters/duplicates.py
  3. 18
      flatisfy/web/js_src/components/flatsmap.vue
  4. 1
      flatisfy/web/js_src/i18n/en/index.js
  5. 25
      flatisfy/web/js_src/views/details.vue

2
flatisfy/__main__.py

@ -183,8 +183,6 @@ def main(): @@ -183,8 +183,6 @@ def main():
cmds.import_and_filter(config, load_from_db=True)
# Import command
elif args.cmd == "import":
# TODO: Do not fetch details for already imported flats / use the last
# timestamp
cmds.import_and_filter(config, load_from_db=False)
# Purge command
elif args.cmd == "purge":

73
flatisfy/filters/duplicates.py

@ -107,3 +107,76 @@ def detect(flats_list, key="id", merge=True, should_intersect=False): @@ -107,3 +107,76 @@ def detect(flats_list, key="id", merge=True, should_intersect=False):
should_intersect=False)
return unique_flats_list, duplicate_flats
def deep_detect(flats_list):
"""
TODO
"""
for i, flat1 in enumerate(flats_list):
for j, flat2 in enumerate(flats_list):
if i < j:
continue
n_common_items = 0
try:
# They should have the same area, up to one unit
assert abs(flat1["area"] - flat2["area"]) < 1
n_common_items += 1
# They should be at the same price, up to one unit
assert abs(flat1["cost"] - flat2["cost"]) < 1
n_common_items += 1
# They should have the same number of bedrooms if this was
# fetched for both
if flat1["bedrooms"] and flat2["bedrooms"]:
assert flat1["bedrooms"] == flat2["bedrooms"]
n_common_items += 1
# They should have the same utilities (included or excluded for
# both of them), if this was fetched for both
if flat1["utilities"] and flat2["utilities"]:
assert flat1["utilities"] == flat2["utilities"]
n_common_items += 1
# They should have the same number of rooms if it was fetched
# for both of them
if flat1["rooms"] and flat2["rooms"]:
assert flat1["rooms"] == flat2["rooms"]
n_common_items += 1
# They should have the same postal code, if available
if (
flat1["flatisfy"].get("postal_code", None) and
flat2["flatisfy"].get("postal_code", None)
):
assert (
flat1["flatisfy"]["postal_code"] ==
flat2["flatisfy"]["postal_code"]
)
n_common_items += 1
# They should have the same phone number if it was fetched for
# both
if flat1["phone"] and flat2["phone"]:
homogeneize_phone_number = lambda number: (
number.replace(".", "").replace(" ", "")
)
pass # TODO: Homogeneize phone numbers
# TODO: Compare texts (one is included in another? fuzzymatch?)
except AssertionError:
# Skip and consider as not duplicates whenever the conditions
# are not met
continue
except TypeError:
# TypeError occurs when an area or a cost is None, which should
# not be considered as duplicates
continue
# TODO: Check the number of common items
# TODO: Merge flats
# TODO: Compare photos

18
flatisfy/web/js_src/components/flatsmap.vue

@ -21,10 +21,16 @@ @@ -21,10 +21,16 @@
<script>
import L from 'leaflet'
// Fix for a bug in Leaflet default icon
// see https://github.com/PaulLeCam/react-leaflet/issues/255#issuecomment-261904061
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png'),
});
import 'leaflet/dist/leaflet.css'
import markerUrl from 'leaflet/dist/images/marker-icon.png'
import marker2XUrl from 'leaflet/dist/images/marker-icon.png'
import shadowUrl from 'leaflet/dist/images/marker-icon.png'
require('leaflet.icon.glyph')
@ -51,11 +57,7 @@ export default { @@ -51,11 +57,7 @@ export default {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
},
icons: {
flat: L.icon({
iconUrl: markerUrl,
iconRetinaUrl: marker2XUrl,
shadowUrl: shadowUrl
}),
flat: new L.Icon.Default(),
place: L.icon.glyph({
prefix: 'fa',
glyph: 'clock-o'

1
flatisfy/web/js_src/i18n/en/index.js

@ -8,6 +8,7 @@ export default { @@ -8,6 +8,7 @@ export default {
'Restore': 'Restore',
'External_link': 'External link',
'Follow': 'Follow',
'Unfollow': 'Unfollow',
'Close': 'Close',
'sortUp': 'Sort in ascending order',
'sortDown': 'Sort in descending order'

25
flatisfy/web/js_src/views/details.vue

@ -3,10 +3,11 @@ @@ -3,10 +3,11 @@
<div class="grid" v-if="flat && timeToPlaces">
<div class="left-panel">
<h2>
<router-link :to="'/' + flat.status">
<i class="fa fa-arrow-left" aria-hidden="true"></i>
</router-link>
({{ flat.status ? capitalize(flat.status) : '' }}) {{ flat.title }} [{{ flat.id.split("@")[1] }}]
(<!--
--><router-link :to="{ name: 'status', params: { status: flat.status }}"><!--
-->{{ flat.status ? capitalize($t("status." + flat.status)) : '' }}<!--
--></router-link><!--
-->) {{ flat.title }} [{{ flat.id.split("@")[1] }}]
</h2>
<div class="grid">
<div class="left-panel">
@ -128,10 +129,18 @@ @@ -128,10 +129,18 @@
<ul>
<template v-if="flat.status !== 'user_deleted'">
<li>
<button v-on:click="updateFlatStatus('follow')">
<i class="fa fa-star" aria-hidden="true"></i>
{{ $t("common.Follow") }}
</button>
<template v-if="flat.status !== 'followed'">
<button v-on:click="updateFlatStatus('followed')">
<i class="fa fa-star" aria-hidden="true"></i>
{{ $t("common.Follow") }}
</button>
</template>
<template v-else>
<button v-on:click="updateFlatStatus('new')">
<i class="fa fa-star-o" aria-hidden="true"></i>
{{ $t("common.Unfollow") }}
</button>
</template>
</li>
<li>
<button v-on:click="updateFlatStatus('user_deleted')">

Loading…
Cancel
Save