Compare commits

..

No commits in common. "sc" and "v1.11.17-sc.0.test.1" have entirely different histories.

20 changed files with 43 additions and 155 deletions

View file

@ -1,5 +1,5 @@
ARG NODE_VERSION ARG NODE_VERSION
FROM docker.io/node:${NODE_VERSION}-buster FROM node:${NODE_VERSION}
RUN apt-get -qq update && apt-get -qq install --no-install-recommends -y \ RUN apt-get -qq update && apt-get -qq install --no-install-recommends -y \
curl \ curl \
@ -23,4 +23,8 @@ ENV RUSTUP_HOME=/usr/local/rustup \
PATH=/usr/local/cargo/bin:$PATH PATH=/usr/local/cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal
COPY . /project
WORKDIR /project WORKDIR /project
# There might be remnants of the host which break the build
RUN make fixup

View file

@ -1,6 +1,6 @@
FROM docker.io/fedora:38 FROM fedora:latest
RUN dnf install -y openssl openssl-devel cargo llvm libsecret libsecret-devel sqlcipher sqlcipher-devel g++ ruby-devel gcc make rpm-build libffi-devel tcl libxcrypt-compat pkgconf perl RUN dnf install -y openssl openssl-devel rust cargo libsecret libsecret-devel g++ ruby-devel gcc make rpm-build libffi-devel tcl libxcrypt-compat
# node setup # node setup
ARG NODE_VERSION ARG NODE_VERSION
@ -11,11 +11,10 @@ RUN bash n ${NODE_VERSION}
RUN npm install -g n RUN npm install -g n
RUN npm install -g yarn RUN npm install -g yarn
RUN npm install -g node-gyp RUN npm install -g node-gyp
RUN gem install --no-user-install --no-document fpm RUN gem install --ignore-dependencies --no-user-install --no-document fpm
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal
COPY . /project
WORKDIR /project WORKDIR /project
# There might be remnants of the host which break the build
RUN make fixup

View file

@ -1,13 +0,0 @@
ARG CONTAINER_IMAGE_DEBIAN
FROM ${CONTAINER_IMAGE_DEBIAN}:latest
RUN dpkg --add-architecture i386 && apt-get update && apt-get install --no-install-recommends -y \
wine \
wine32 \
wine64 \
libwine \
libwine:i386 \
fonts-wine \
zip
WORKDIR /project

View file

@ -1,10 +1,9 @@
.PHONY: all setup regenerate-i18n web desktop-common linux debian rpm pacman local-pkgbuild local-pkgbuild-install windows windows-portable .PHONY: all setup regenerate-i18n web desktop-common linux debian rpm pacman local-pkgbuild local-pkgbuild-install windows windows-portable
.PHONY: web-release debian-release rpm-release pacman-release windows-setup-release windows-unpacked-release windows-portable-release windows-release .PHONY: web-release debian-release rpm-release pacman-release windows-setup-release windows-unpacked-release windows-portable-release windows-release
.PHONY: macos-common macos macos-mas macos-release macos-mas-release icns .PHONY: macos-common macos macos-mas macos-release macos-mas-release icns
.PHONY: container-build-debian container-build-fedora container-build-windows .PHONY: container-build-debian container-build-fedora
.PHONY: container-web-release container-debian-release container-rpm-release container-appimage-release container-windows-release container-release container-local-pkgbuild .PHONY: container-web-release container-debian-release container-rpm-release container-appimage-release
.PHONY: clean undo_setup fixup .PHONY: clean undo_setup fixup
.PHONY: fix_yarn_cache
CFGDIR ?= configs/sc CFGDIR ?= configs/sc
@ -12,7 +11,7 @@ all: web
YARN ?= yarnpkg YARN ?= yarnpkg
CONTAINER_ENGINE ?= podman CONTAINER_ENGINE ?= podman
NODE_VERSION ?= 18 NODE_VERSION ?= 16
VERSION := $(shell grep version element-desktop/package.json | sed 's|.*: \"\(.*\)\",|\1|') VERSION := $(shell grep version element-desktop/package.json | sed 's|.*: \"\(.*\)\",|\1|')
WEB_APP_NAME := $(shell grep '"name"' element-web/package.json | head -n 1 | sed 's|.*: \"\(.*\)\",|\1|') WEB_APP_NAME := $(shell grep '"name"' element-web/package.json | head -n 1 | sed 's|.*: \"\(.*\)\",|\1|')
@ -39,7 +38,6 @@ OUT_MACOS_MAS := $(DESKTOP_OUT)/mas-universal/$(PRODUCT_NAME).app
CONTAINER_IMAGE_DEBIAN := schildichat-desktop-containerbuild-debian CONTAINER_IMAGE_DEBIAN := schildichat-desktop-containerbuild-debian
CONTAINER_IMAGE_FEDORA := schildichat-desktop-containerbuild-fedora CONTAINER_IMAGE_FEDORA := schildichat-desktop-containerbuild-fedora
CONTAINER_IMAGE_WINDOWS := schildichat-desktop-containerbuild-windows
RELEASE_DIR := release RELEASE_DIR := release
CURRENT_RELEASE_DIR := $(RELEASE_DIR)/$(VERSION) CURRENT_RELEASE_DIR := $(RELEASE_DIR)/$(VERSION)
@ -77,7 +75,7 @@ web: setup
desktop-common: web desktop-common: web
$(YARN) --cwd element-desktop run fetch --cfgdir '' $(YARN) --cwd element-desktop run fetch --cfgdir ''
SQLCIPHER_BUNDLED=1 $(YARN) --cwd element-desktop run build:native SQLCIPHER_STATIC=1 $(YARN) --cwd element-desktop run build:native
macos-common: web icns macos-common: web icns
$(YARN) --cwd element-desktop run fetch --cfgdir '' $(YARN) --cwd element-desktop run fetch --cfgdir ''
@ -163,43 +161,27 @@ macos-mas-release: macos-mas
cp $(OUT_MACOS_MAS) $(CURRENT_RELEASE_DIR) cp $(OUT_MACOS_MAS) $(CURRENT_RELEASE_DIR)
container-build-debian: container-build-debian:
$(CONTAINER_ENGINE) build --security-opt seccomp=unconfined --security-opt label=disable -t $(CONTAINER_IMAGE_DEBIAN) -f Containerfile.debian --build-arg NODE_VERSION=$(NODE_VERSION) . $(CONTAINER_ENGINE) build -t $(CONTAINER_IMAGE_DEBIAN) -f Containerfile.debian --build-arg NODE_VERSION=$(NODE_VERSION) .
container-build-fedora: container-build-fedora:
$(CONTAINER_ENGINE) build --security-opt seccomp=unconfined --security-opt label=disable -t $(CONTAINER_IMAGE_FEDORA) -f Containerfile.fedora --build-arg NODE_VERSION=$(NODE_VERSION) . $(CONTAINER_ENGINE) build -t $(CONTAINER_IMAGE_FEDORA) -f Containerfile.fedora --build-arg NODE_VERSION=$(NODE_VERSION) .
container-build-windows: container-build-debian
$(CONTAINER_ENGINE) build --security-opt seccomp=unconfined --security-opt label=disable -t $(CONTAINER_IMAGE_WINDOWS) -f Containerfile.windows --build-arg CONTAINER_IMAGE_DEBIAN=$(CONTAINER_IMAGE_DEBIAN) .
container-web-release: container-build-debian container-web-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make web-release $(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make web-release
container-debian-release: container-build-debian container-debian-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make debian-release $(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make debian-release
container-rpm-release: container-build-fedora container-rpm-release: container-build-fedora
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_FEDORA):latest make rpm-release $(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_FEDORA):latest make rpm-release
container-appimage-release: container-build-debian container-appimage-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make appimage-release $(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make appimage-release
container-windows-release: container-build-windows
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_WINDOWS):latest make windows-release
container-release: container-build-windows container-build-fedora
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_WINDOWS):latest make web-release debian-release appimage-release windows-setup-release windows-portable-release
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_FEDORA):latest make rpm-release
container-local-pkgbuild: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make local-pkgbuild
bom.lock: element-desktop/yarn.lock element-web/yarn.lock matrix-js-sdk/yarn.lock matrix-react-sdk/yarn.lock bom.lock: element-desktop/yarn.lock element-web/yarn.lock matrix-js-sdk/yarn.lock matrix-react-sdk/yarn.lock
./build-bom.sh ./build-bom.sh
bom: bom.lock bom: bom.lock
fix_yarn_cache:
$(YARN) cache list || $(YARN) cache clean
clean: clean:
$(YARN) --cwd matrix-js-sdk clean $(YARN) --cwd matrix-js-sdk clean
$(YARN) --cwd matrix-react-sdk clean $(YARN) --cwd matrix-react-sdk clean
@ -213,7 +195,7 @@ clean:
undo_setup: undo_setup:
rm -rf element-desktop/node_modules element-web/node_modules matrix-react-sdk/node_modules matrix-js-sdk/node_modules i18n-helper/node_modules element-desktop/.hak rm -rf element-desktop/node_modules element-web/node_modules matrix-react-sdk/node_modules matrix-js-sdk/node_modules i18n-helper/node_modules element-desktop/.hak
fixup: undo_setup fix_yarn_cache fixup: undo_setup
make setup make setup
make clean make clean
make setup make setup

@ -1 +1 @@
Subproject commit fb2931eb808d99995a4cd5ef168e8d4697f39e3f Subproject commit 86f7509f07039d94f43c3736518425eef0d43b3a

@ -1 +1 @@
Subproject commit 904c6378682d314fe91bf536b6207c6d5e320459 Subproject commit 02ec7bb3b0ffa47aca0d59a92788ef55ef481e78

6
flake.lock generated
View file

@ -2,11 +2,11 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1699380656, "lastModified": 1633901457,
"narHash": "sha256-H9kQH3J2Z15Ady3zVQsN/tXv8qnRr+p1B0eUkR1bKfE=", "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "03e7a22654c44489a0a70ea0e237de3e512cd8a6", "rev": "f358794824b4595d77fec93732485d329ed7b0e0",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -1,15 +0,0 @@
#!/bin/bash
set -e
mydir="$(dirname "$(realpath "$0")")"
cd "$mydir"
source ./merge_helpers.sh
# Note: this doesn't delete files starting with a dot,
# and in particular not the '.git' directory, which we
# want to keep
forall_repos bash -c 'rm -rf *'
forall_repos git reset HEAD --hard

View file

@ -35,13 +35,7 @@ function writeStrings(p, strings) {
let strings = readStrings(p); let strings = readStrings(p);
for (const key of Object.keys(strings)) { for (const key of Object.keys(strings)) {
strings[key] = strings[key] strings[key] = strings[key].replace(/Element/g, "SchildiChat").replace(/element\.io/g, "schildi.chat");
.replace(/Element/g, "SchildiChat")
.replace(/element\.io/g, "schildi.chat")
// It's still Element Call
.replace(/SchildiChat Call/g, "Element Call")
.replace(/SchildiChat-Call/g, "Element-Call");
} }
if (overlayPath) { if (overlayPath) {

View file

@ -1,3 +1 @@
{ {}
"Show": "Mutat"
}

View file

@ -21,8 +21,8 @@
"MXID": "MXID", "MXID": "MXID",
"In group chats": "Ve skupinových chatech", "In group chats": "Ve skupinových chatech",
"In public rooms": "Ve veřejných místnostech", "In public rooms": "Ve veřejných místnostech",
"All rooms you're in will appear in Home.": "Všechny místnosti, ve kterých se nacházíte, se zobrazí v Úvodu.", "All rooms you're in will appear in Home.": "Všechny místnosti, ve kterých se nacházíte, se zobrazí v domovském zobrazení.",
"Show all rooms in Home": "Zobrazit všechny místnosti v Úvodu", "Show all rooms in Home": "Ukázat všechny místnosti v domovském zobrazení",
"Show people in spaces": "Ukázat lidi v prostorech", "Show people in spaces": "Ukázat lidi v prostorech",
"Show notification badges for People in Spaces": "Zobrazit odznaky oznámení pro Lidé v prostorech", "Show notification badges for People in Spaces": "Zobrazit odznaky oznámení pro Lidé v prostorech",
"Return to the room previously opened in a space": "Návrat do dříve otevřené místnosti v prostoru", "Return to the room previously opened in a space": "Návrat do dříve otevřené místnosti v prostoru",
@ -50,6 +50,5 @@
"Mixed": "Smíšené", "Mixed": "Smíšené",
"Sound pack": "Balíček zvuků", "Sound pack": "Balíček zvuků",
"Schildi: Softer sounds for reduced anxiety": "Schildi: Jemnější zvuky pro snížení úzkosti", "Schildi: Softer sounds for reduced anxiety": "Schildi: Jemnější zvuky pro snížení úzkosti",
"Classic: The same sharp sounds as Element": "Klasické: Stejně ostré zvuky jako Element", "Classic: The same sharp sounds as Element": "Klasické: Stejně ostré zvuky jako Element"
"React with \"%(reaction)s\"": "Reagovat pomocí \"%(reaction)s\""
} }

View file

@ -49,6 +49,5 @@
"Mixed": "Mixed", "Mixed": "Mixed",
"Sound pack": "Sound pack", "Sound pack": "Sound pack",
"Schildi: Softer sounds for reduced anxiety": "Schildi: Softer sounds for reduced anxiety", "Schildi: Softer sounds for reduced anxiety": "Schildi: Softer sounds for reduced anxiety",
"Classic: The same sharp sounds as Element": "Classic: The same sharp sounds as Element", "Classic: The same sharp sounds as Element": "Classic: The same sharp sounds as Element"
"React with \"%(reaction)s\"": "React with \"%(reaction)s\""
} }

View file

@ -3,27 +3,5 @@
"Show message bubbles on one side only": "Üzenetbuborékok megjelenítése csak az egyik oldalon", "Show message bubbles on one side only": "Üzenetbuborékok megjelenítése csak az egyik oldalon",
"Message bubbles": "Üzenet buborékok", "Message bubbles": "Üzenet buborékok",
"Show message bubbles depending on the width either on both sides or only on one side": "Üzenetbuborékok megjelenítése a szélességtől függően mindkét oldalon vagy csak az egyik oldalon", "Show message bubbles depending on the width either on both sides or only on one side": "Üzenetbuborékok megjelenítése a szélességtől függően mindkét oldalon vagy csak az egyik oldalon",
"Normal priority": "Normál prioritás", "Normal priority": "Normál prioritás"
"Show people and rooms in a combined list": "Személyek és szobák megjelenítése egy egyesített listában",
"Update notifications": "Értesítések frissítése",
"Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Szeretne csatlakozni olyan szobához, amely értesíti Önt az új megjelenésekről? Ez különösen akkor hasznos, ha az Ön platformja nem támogatja a SchildiChat automatikus frissítéseit (pl. Windows és macOS).",
"System": "Rendszer",
"Show all rooms in Home": "Az összes szoba megjelenítése a kezdőoldalon",
"All rooms you're in will appear in Home.": "Az összes szoba, amelyben tartózkodik, megjelenik a Kezdőlapon.",
"Mark as read": "Olvasottnak jelöl",
"Enable YouTube embed player": "YouTube beágyazott lejátszó engedélyezése",
"Home is useful for getting an overview of everything. Keep in mind that disabling it could leave you unable to see certain rooms.": "A Kezdőlap hasznos ahhoz, hogy mindenről áttekintést kapjunk. Ne feledje, hogy a kikapcsolásával bizonyos szobákat nem fog látni.",
"Schildi: Softer sounds for reduced anxiety": "Schildi: Lágyabb hangok a kevesebb stresszért",
"Sound pack": "Hangcsomag",
"Classic: The same sharp sounds as Element": "Klasszikus: Ugyanazok az éles hangok, mint az Elementnél",
"Don't ask again": "Ne kérdezze újra",
"Light theme": "Világos téma",
"Dark theme": "Sötét téma",
"Mark as unread": "Olvasatlannak jelöl",
"Collapse additional buttons": "További gombok összecsukása",
"Theme": "Téma",
"Room list": "Szobák listája",
"Font size and typeface": "Betűméret és betűtípus",
"Message layout": "Üzenetek elrendezése",
"Modern": "Modern"
} }

View file

@ -49,6 +49,5 @@
"Mixed": "Campur", "Mixed": "Campur",
"Sound pack": "Paket suara", "Sound pack": "Paket suara",
"Schildi: Softer sounds for reduced anxiety": "Schildi: Suara lebih lembut untuk mengurangi kecemasan", "Schildi: Softer sounds for reduced anxiety": "Schildi: Suara lebih lembut untuk mengurangi kecemasan",
"Classic: The same sharp sounds as Element": "Klasik: Suara keras yang biasa seperti Element", "Classic: The same sharp sounds as Element": "Klasik: Suara keras yang biasa seperti Element"
"React with \"%(reaction)s\"": "Reaksi dengan \"%(reaction)s\""
} }

View file

@ -9,26 +9,5 @@
"Light theme": "Tema chiaro", "Light theme": "Tema chiaro",
"Dark theme": "Tema scuro", "Dark theme": "Tema scuro",
"Normal priority": "Priorità normale", "Normal priority": "Priorità normale",
"Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Vuoi entrare in una stanza che ti notificherà riguardo nuove release? Sarebbe comodo particolarmente se la tua piattaforma non supporta aggiornamenti automatici (Come per esempio Windows o MacOS.)", "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Vuoi entrare in una stanza che ti notificherà riguardo nuove release? Sarebbe comodo particolarmente se la tua piattaforma non supporta aggiornamenti automatici (Come per esempio Windows o MacOS.)"
"Show message bubbles on one side only": "Visualizza bolle messaggi su un lato solo",
"Show message bubbles depending on the width either on both sides or only on one side": "Visualizza bolle messaggi in base alla lunghezza di entrambi i lati o di uno solo",
"User name color mode": "Modalità colore nome utente",
"Room list style": "Stile lista stanze",
"Theme": "Tema",
"Show all rooms in Home": "Visualizza tutte le stanze nella Home",
"All rooms you're in will appear in Home.": "Tutte le stanze in cui partecipi appariranno nella Home.",
"For people": "Per le persone",
"Room list": "Lista stanze",
"Show advanced theme settings": "Visualizza impostazioni avanzate tema",
"Mark rooms as unread": "Permetti di segnare le chat come non lette",
"Message bubbles": "Bolle messaggi",
"Message layout": "Impaginazione messaggi",
"Mark as unread": "Segna come non letto",
"Uniform": "Uniforme",
"Show people in spaces": "Visualizza persone negli spazi",
"MXID": "MXID",
"In public rooms": "Nelle stanze pubbliche",
"In group chats": "Nelle chat di gruppo",
"Font size and typeface": "Dimensione e tipo carattere",
"Hide advanced theme settings": "Nascondi impostazioni avanzate tema"
} }

View file

@ -40,6 +40,5 @@
"Room list style": "Estilo da lista de salas", "Room list style": "Estilo da lista de salas",
"Mark rooms as unread": "Permitir markar conversas como não lidos", "Mark rooms as unread": "Permitir markar conversas como não lidos",
"Mark as unread": "Markar como não lido", "Mark as unread": "Markar como não lido",
"Mark as read": "Markar como lido", "Mark as read": "Markar como lido"
"Collapse additional buttons": "Recolher botões adicionais"
} }

View file

@ -42,13 +42,5 @@
"Mark as unread": "标记为未读", "Mark as unread": "标记为未读",
"Home is useful for getting an overview of everything. Keep in mind that disabling it could leave you unable to see certain rooms.": "主页对于概览所有消息来说非常有用。请注意:禁用主页可能会让您无法看到某些房间。", "Home is useful for getting an overview of everything. Keep in mind that disabling it could leave you unable to see certain rooms.": "主页对于概览所有消息来说非常有用。请注意:禁用主页可能会让您无法看到某些房间。",
"Enable YouTube embed player": "启用 YouTube 嵌入式播放器", "Enable YouTube embed player": "启用 YouTube 嵌入式播放器",
"Collapse additional buttons": "折叠额外的按钮", "Collapse additional buttons": "折叠额外的按钮"
"Round": "圆角",
"React with \"%(reaction)s\"": "与 \"%(reaction)s\" 互动",
"Schildi: Softer sounds for reduced anxiety": "Schildi: 舒缓音效以减少焦虑",
"Mixed": "混合",
"Extra round": "超圆角",
"Sound pack": "音频包",
"Classic: The same sharp sounds as Element": "Classic: 与 Element 相同的尖锐声音",
"Corners": "边缘"
} }

@ -1 +1 @@
Subproject commit 9bbc329635e1e31f5e72e93ef87ccd90b43de538 Subproject commit b9afe2320caee4969dc64c09ba680f0041e3ca5a

@ -1 +1 @@
Subproject commit 5a1c34750acf0c8da2a8ba25b6f79e9ac115230e Subproject commit 7ebde053f052965a463ab5b710110be33a2f4a1c

View file

@ -23,13 +23,7 @@ automatic_i18n_reversion
automatic_packagejson_reversion automatic_packagejson_reversion
# Merge upstream # Merge upstream
get_latest_upstream_tag
# Check if specific version to merge passed
if [ -z "$1" ]; then
get_latest_upstream_tag
else
latest_upstream_tag="$1"
fi
forelement_repos git merge "$latest_upstream_tag" forelement_repos git merge "$latest_upstream_tag"
get_current_mxsdk_tags get_current_mxsdk_tags