Merge branch 'enhancements' into 'main'

Various enhancements

Closes #1085

See merge request framasoft/mobilizon!1213
This commit is contained in:
Thomas Citharel 2022-04-21 11:06:56 +00:00
commit 95062df343
5 changed files with 97 additions and 81 deletions

View file

@ -31,15 +31,11 @@
</span> </span>
</div> </div>
</div> </div>
<div <div class="mb-2 line-clamp-3" dir="auto" v-html="group.summary" />
class="content mb-2 line-clamp-3"
dir="auto"
v-html="group.summary"
/>
<div> <div>
<inline-address <inline-address
class="has-text-grey-dark" class="has-text-grey-dark"
v-if="group.physicalAddress" v-if="group.physicalAddress && addressFullName(group.physicalAddress)"
:physicalAddress="group.physicalAddress" :physicalAddress="group.physicalAddress"
/> />
<p class="has-text-grey-dark"> <p class="has-text-grey-dark">
@ -65,6 +61,7 @@ import { displayName, IGroup, usernameWithDomain } from "@/types/actor";
import LazyImageWrapper from "@/components/Image/LazyImageWrapper.vue"; import LazyImageWrapper from "@/components/Image/LazyImageWrapper.vue";
import RouteName from "../../router/name"; import RouteName from "../../router/name";
import InlineAddress from "@/components/Address/InlineAddress.vue"; import InlineAddress from "@/components/Address/InlineAddress.vue";
import { addressFullName } from "@/types/address.model";
@Component({ @Component({
components: { components: {
@ -80,6 +77,8 @@ export default class GroupCard extends Vue {
usernameWithDomain = usernameWithDomain; usernameWithDomain = usernameWithDomain;
displayName = displayName; displayName = displayName;
addressFullName = addressFullName;
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View file

@ -65,26 +65,40 @@ export class Address implements IAddress {
} }
get poiInfos(): IPoiInfo { get poiInfos(): IPoiInfo {
return addressToPoiInfos(this);
}
get fullName(): string {
return addressFullName(this);
}
get iconForPOI(): IPOIIcon {
return iconForAddress(this);
}
}
export function addressToPoiInfos(address: IAddress): IPoiInfo {
/* generate name corresponding to poi type */ /* generate name corresponding to poi type */
let name = ""; let name = "";
let alternativeName = ""; let alternativeName = "";
let poiIcon: IPOIIcon = poiIcons.default; let poiIcon: IPOIIcon = poiIcons.default;
let addressType = address.type;
// Google Maps doesn't have a type // Google Maps doesn't have a type
if (this.type == null && this.description === this.street) { if (address.type == null && address.description === address.street) {
this.type = "house"; addressType = "house";
} }
switch (this.type) { switch (addressType) {
case "house": case "house":
name = this.description; name = address.description;
alternativeName = [this.postalCode, this.locality, this.country] alternativeName = [address.postalCode, address.locality, address.country]
.filter((zone) => zone) .filter((zone) => zone)
.join(", "); .join(", ");
poiIcon = poiIcons.defaultAddress; poiIcon = poiIcons.defaultAddress;
break; break;
case "street": case "street":
case "secondary": case "secondary":
name = this.description; name = address.description;
alternativeName = [this.postalCode, this.locality, this.country] alternativeName = [address.postalCode, address.locality, address.country]
.filter((zone) => zone) .filter((zone) => zone)
.join(", "); .join(", ");
poiIcon = poiIcons.defaultStreet; poiIcon = poiIcons.defaultStreet;
@ -92,38 +106,47 @@ export class Address implements IAddress {
case "zone": case "zone":
case "city": case "city":
case "administrative": case "administrative":
name = this.postalCode name = address.postalCode
? `${this.description} (${this.postalCode})` ? `${address.description} (${address.postalCode})`
: this.description; : address.description;
alternativeName = [this.region, this.country] alternativeName = [address.region, address.country]
.filter((zone) => zone) .filter((zone) => zone)
.join(", "); .join(", ");
poiIcon = poiIcons.defaultAdministrative; poiIcon = poiIcons.defaultAdministrative;
break; break;
default: default:
// POI // POI
name = this.description; name = address.description;
alternativeName = ""; alternativeName = "";
if (this.street && this.street.trim()) { if (address.street && address.street.trim()) {
alternativeName = `${this.street}`; alternativeName = `${address.street}`;
if (this.locality) { if (address.locality) {
alternativeName += ` (${this.locality})`; alternativeName += ` (${address.locality})`;
} }
} else if (this.locality && this.locality.trim()) { } else if (address.locality && address.locality.trim()) {
alternativeName = `${this.locality}, ${this.region}, ${this.country}`; alternativeName = `${address.locality}, ${address.region}, ${address.country}`;
} else if (this.region && this.region.trim()) { } else if (address.region && address.region.trim()) {
alternativeName = `${this.region}, ${this.country}`; alternativeName = `${address.region}, ${address.country}`;
} else if (this.country && this.country.trim()) { } else if (address.country && address.country.trim()) {
alternativeName = this.country; alternativeName = address.country;
} }
poiIcon = this.iconForPOI; poiIcon = iconForAddress(address);
break; break;
} }
return { name, alternativeName, poiIcon }; return { name, alternativeName, poiIcon };
} }
get fullName(): string { export function iconForAddress(address: IAddress): IPOIIcon {
const { name, alternativeName } = this.poiInfos; if (address.type == null) {
return poiIcons.default;
}
const type = address.type.split(":").pop() || "";
if (poiIcons[type]) return poiIcons[type];
return poiIcons.default;
}
export function addressFullName(address: IAddress): string {
const { name, alternativeName } = addressToPoiInfos(address);
if (name && alternativeName) { if (name && alternativeName) {
return `${name}, ${alternativeName}`; return `${name}, ${alternativeName}`;
} }
@ -132,13 +155,3 @@ export class Address implements IAddress {
} }
return ""; return "";
} }
get iconForPOI(): IPOIIcon {
if (this.type == null) {
return poiIcons.default;
}
const type = this.type.split(":").pop() || "";
if (poiIcons[type]) return poiIcons[type];
return poiIcons.default;
}
}

View file

@ -558,9 +558,10 @@
" "
> >
<div class="address-wrapper"> <div class="address-wrapper">
<span v-if="!physicalAddress">{{ <span
$t("No address defined") v-if="!physicalAddress || !addressFullName(physicalAddress)"
}}</span> >{{ $t("No address defined") }}</span
>
<div class="address" v-if="physicalAddress"> <div class="address" v-if="physicalAddress">
<div> <div>
<address dir="auto"> <address dir="auto">
@ -739,7 +740,7 @@ import DiscussionListItem from "@/components/Discussion/DiscussionListItem.vue";
import MultiPostListItem from "@/components/Post/MultiPostListItem.vue"; import MultiPostListItem from "@/components/Post/MultiPostListItem.vue";
import ResourceItem from "@/components/Resource/ResourceItem.vue"; import ResourceItem from "@/components/Resource/ResourceItem.vue";
import FolderItem from "@/components/Resource/FolderItem.vue"; import FolderItem from "@/components/Resource/FolderItem.vue";
import { Address } from "@/types/address.model"; import { Address, addressFullName } from "@/types/address.model";
import Invitations from "@/components/Group/Invitations.vue"; import Invitations from "@/components/Group/Invitations.vue";
import addMinutes from "date-fns/addMinutes"; import addMinutes from "date-fns/addMinutes";
import { CONFIG } from "@/graphql/config"; import { CONFIG } from "@/graphql/config";
@ -820,6 +821,8 @@ export default class Group extends mixins(GroupMixin) {
displayName = displayName; displayName = displayName;
addressFullName = addressFullName;
PostVisibility = PostVisibility; PostVisibility = PostVisibility;
Openness = Openness; Openness = Openness;

View file

@ -23,7 +23,7 @@ defmodule Mobilizon.Service.Workers.SendActivityRecapWorker do
Repo.transaction(fn -> Repo.transaction(fn ->
Users.stream_users_for_recap() Users.stream_users_for_recap()
|> Enum.to_list() |> Enum.to_list()
|> Repo.preload([:settings]) |> Repo.preload([:settings, :activity_settings])
|> Enum.filter(&filter_elegible_users/1) |> Enum.filter(&filter_elegible_users/1)
|> Enum.map(fn %User{} = user -> |> Enum.map(fn %User{} = user ->
%{ %{

View file

@ -11,7 +11,8 @@ defmodule Mobilizon.Web.RequestContext do
method: conn.method, method: conn.method,
headers: %{ headers: %{
"User-Agent": conn |> Plug.Conn.get_req_header("user-agent") |> List.first(), "User-Agent": conn |> Plug.Conn.get_req_header("user-agent") |> List.first(),
Referer: conn |> Plug.Conn.get_req_header("referer") |> List.first() Referer: conn |> Plug.Conn.get_req_header("referer") |> List.first(),
"Accept-Language": conn |> Plug.Conn.get_req_header("accept-language") |> List.first()
}, },
query_string: conn.query_string, query_string: conn.query_string,
env: %{ env: %{