diff --git a/src/wuttafarm/web/templates/appinfo/configure.mako b/src/wuttafarm/web/templates/appinfo/configure.mako index d9e448f..3760577 100644 --- a/src/wuttafarm/web/templates/appinfo/configure.mako +++ b/src/wuttafarm/web/templates/appinfo/configure.mako @@ -7,6 +7,13 @@

farmOS

+ + + + + - - - - + + Use farmOS-style grid links + + <${b}-tooltip position="${'right' if request.use_oruga else 'is-right'}"> + + +
diff --git a/src/wuttafarm/web/util.py b/src/wuttafarm/web/util.py index 65d637d..cd4ec0d 100644 --- a/src/wuttafarm/web/util.py +++ b/src/wuttafarm/web/util.py @@ -38,3 +38,7 @@ def save_farmos_oauth2_token(request, token): # save token to user session request.session["farmos.oauth2.token"] = token + + +def use_farmos_style_grid_links(config): + return config.get_bool(f"{config.appname}.farmos_style_grid_links", default=True) diff --git a/src/wuttafarm/web/views/animals.py b/src/wuttafarm/web/views/animals.py index 09162b2..7fa6a09 100644 --- a/src/wuttafarm/web/views/animals.py +++ b/src/wuttafarm/web/views/animals.py @@ -23,6 +23,8 @@ Master view for Animals """ +from webhelpers2.html import tags + from wuttaweb.forms.schema import WuttaDictEnum from wuttafarm.db.model import AnimalType, AnimalAsset @@ -189,6 +191,10 @@ class AnimalAssetView(AssetMasterView): g.set_joiner("animal_type", lambda q: q.join(model.AnimalType)) g.set_sorter("animal_type", model.AnimalType.name) g.set_filter("animal_type", model.AnimalType.name) + if self.farmos_style_grid_links: + g.set_renderer("animal_type", self.render_animal_type_for_grid) + else: + g.set_link("animal_type") # birthdate g.set_renderer("birthdate", "date") @@ -196,6 +202,10 @@ class AnimalAssetView(AssetMasterView): # sex g.set_enum("sex", enum.ANIMAL_SEX) + def render_animal_type_for_grid(self, animal, field, value): + url = self.request.route_url("animal_types.view", uuid=animal.animal_type_uuid) + return tags.link_to(value, url) + def configure_form(self, form): f = form super().configure_form(f) diff --git a/src/wuttafarm/web/views/farmos/animals.py b/src/wuttafarm/web/views/farmos/animals.py index 3f329f0..44a1cdc 100644 --- a/src/wuttafarm/web/views/farmos/animals.py +++ b/src/wuttafarm/web/views/farmos/animals.py @@ -109,7 +109,10 @@ class AnimalView(AssetMasterView): g.set_filter("produces_eggs", NullableBooleanFilter) # animal_type_name - g.set_renderer("animal_type_name", self.render_animal_type_for_grid) + if self.farmos_style_grid_links: + g.set_renderer("animal_type_name", self.render_animal_type_for_grid) + else: + g.set_link("animal_type_name") g.set_sorter("animal_type_name", SimpleSorter("animal_type.name")) g.set_filter("animal_type_name", StringFilter, path="animal_type.name") @@ -137,11 +140,16 @@ class AnimalView(AssetMasterView): return tags.link_to(value, url) def render_groups_for_grid(self, animal, field, value): - links = [] + groups = [] for group in animal["group_objects"]: - url = self.request.route_url("farmos_group_assets.view", uuid=group["uuid"]) - links.append(tags.link_to(group["name"], url)) - return ", ".join(links) + if self.farmos_style_grid_links: + url = self.request.route_url( + "farmos_group_assets.view", uuid=group["uuid"] + ) + groups.append(tags.link_to(group["name"], url)) + else: + groups.append(group["name"]) + return ", ".join(groups) def get_instance(self): diff --git a/src/wuttafarm/web/views/farmos/assets.py b/src/wuttafarm/web/views/farmos/assets.py index 1a61d42..1b81b35 100644 --- a/src/wuttafarm/web/views/farmos/assets.py +++ b/src/wuttafarm/web/views/farmos/assets.py @@ -104,20 +104,26 @@ class AssetMasterView(FarmOSMasterView): g.set_filter("archived", BooleanFilter) def render_owners_for_grid(self, asset, field, value): - links = [] + owners = [] for user in value: - url = self.request.route_url("farmos_users.view", uuid=user["uuid"]) - links.append(tags.link_to(user["name"], url)) - return ", ".join(links) + if self.farmos_style_grid_links: + url = self.request.route_url("farmos_users.view", uuid=user["uuid"]) + owners.append(tags.link_to(user["name"], url)) + else: + owners.append(user["name"]) + return ", ".join(owners) def render_locations_for_grid(self, asset, field, value): - links = [] + locations = [] for location in value: - asset_type = location["type"].split("--")[1] - route = f"farmos_{asset_type}_assets.view" - url = self.request.route_url(route, uuid=location["uuid"]) - links.append(tags.link_to(location["name"], url)) - return ", ".join(links) + if self.farmos_style_grid_links: + asset_type = location["type"].split("--")[1] + route = f"farmos_{asset_type}_assets.view" + url = self.request.route_url(route, uuid=location["uuid"]) + locations.append(tags.link_to(location["name"], url)) + else: + locations.append(location["name"]) + return ", ".join(locations) def grid_row_class(self, asset, data, i): """ """ diff --git a/src/wuttafarm/web/views/farmos/master.py b/src/wuttafarm/web/views/farmos/master.py index 90e8549..ae4b97e 100644 --- a/src/wuttafarm/web/views/farmos/master.py +++ b/src/wuttafarm/web/views/farmos/master.py @@ -32,7 +32,7 @@ import markdown from wuttaweb.views import MasterView from wuttaweb.forms.schema import WuttaDateTime -from wuttafarm.web.util import save_farmos_oauth2_token +from wuttafarm.web.util import save_farmos_oauth2_token, use_farmos_style_grid_links from wuttafarm.web.grids import ResourceData, StringFilter, SimpleSorter @@ -65,6 +65,7 @@ class FarmOSMasterView(MasterView): self.farmos_client = self.get_farmos_client() self.farmos_4x = self.app.is_farmos_4x(self.farmos_client) self.raw_json = None + self.farmos_style_grid_links = use_farmos_style_grid_links(self.config) def get_farmos_client(self): token = self.request.session.get("farmos.oauth2.token") diff --git a/src/wuttafarm/web/views/master.py b/src/wuttafarm/web/views/master.py index 0e25a30..82d64bc 100644 --- a/src/wuttafarm/web/views/master.py +++ b/src/wuttafarm/web/views/master.py @@ -27,6 +27,8 @@ from webhelpers2.html import tags from wuttaweb.views import MasterView +from wuttafarm.web.util import use_farmos_style_grid_links + class WuttaFarmMasterView(MasterView): """ @@ -49,6 +51,10 @@ class WuttaFarmMasterView(MasterView): "thumbnail_url": "Thumbnail URL", } + def __init__(self, request, context=None): + super().__init__(request, context=context) + self.farmos_style_grid_links = use_farmos_style_grid_links(self.config) + def get_farmos_url(self, obj): return None diff --git a/src/wuttafarm/web/views/settings.py b/src/wuttafarm/web/views/settings.py index 6372c40..86d7a0c 100644 --- a/src/wuttafarm/web/views/settings.py +++ b/src/wuttafarm/web/views/settings.py @@ -27,6 +27,8 @@ from webhelpers2.html import tags from wuttaweb.views import settings as base +from wuttafarm.web.util import use_farmos_style_grid_links + class AppInfoView(base.AppInfoView): """ @@ -63,6 +65,11 @@ class AppInfoView(base.AppInfoView): "name": f"{self.app.appname}.farmos_integration_mode", "default": self.app.get_farmos_integration_mode(), }, + { + "name": f"{self.app.appname}.farmos_style_grid_links", + "type": bool, + "default": use_farmos_style_grid_links(self.config), + }, ] ) return simple_settings