Compare commits

..

4 Commits

Author SHA1 Message Date
Anders Kaseorg
b8f8056f56 markdown: Use re-exported guess_type to ensure adding EXTRA_MIME_TYPES.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-10-08 23:36:15 -07:00
Shubham Padia
66466760a0 css: Move out --box-shadow-overlay out of dark_theme.css.
Fixes #35881.
2025-10-08 23:35:46 -07:00
Shubham Padia
d9b7d8d2a6 overlay: Make sure all overlays have the same box shadow in dark mode.
Drafts, scheduled messages and message edit history had different
box-shadow done in #25771. The main reason for the different color was
for these overlays with the new background colors to play nice with the
then message/sidebar sections using the old background colors. Since
there is no such difference anymore, we can have one box-shadow for all
overlays.
2025-10-08 23:35:46 -07:00
Anders Kaseorg
b05b5e72f5 test_helpers: Use care in load_subdomain_token URL parsing.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-10-08 23:33:47 -07:00
6 changed files with 34 additions and 20 deletions

View File

@@ -52,6 +52,19 @@ rules:
languages: [python]
severity: ERROR
- id: use-wrapped-mimetypes
pattern-either:
- pattern: mimetypes.guess_type
- pattern: mimetypes.guess_file_type
- pattern: mimetypes.guess_all_extensions
- pattern: mimetypes.guess_extension
message: Use zerver.lib.mime_types (to ensure our EXTRA_MIME_TYPES are added)
languages: [python]
severity: ERROR
paths:
exclude:
- zerver/lib/mime_types.py
- id: dont-import-models-in-migrations
patterns:
- pattern-not: from zerver.lib.migrate import $X

View File

@@ -1118,6 +1118,12 @@ input.settings_text_input {
}
}
div.overlay .flex.overlay-content > .overlay-container,
#settings_page,
.informational-overlays .overlay-content {
box-shadow: var(--box-shadow-overlay);
}
.delete-selected-drafts-button-container {
display: flex;
}

View File

@@ -404,6 +404,9 @@
*/
--message-area-max-width: 57.4125em;
/* Box shadow for overlays across the web app */
--box-shadow-overlay: none;
/* Shared sidebar typography and effects values. */
--font-weight-sidebar-heading: 600;
--font-weight-sidebar-action-heading: 370;
@@ -3010,6 +3013,9 @@
the unread marker to the left. */
--unread-marker-left: 0;
/* Box shadow for overlays across the web app */
--box-shadow-overlay: 0 0 30px hsl(212deg 32% 7%);
/* Colors used across the app */
--color-recipient-bar-controls-spinner: hsl(0deg 0% 100%);
--box-shadow-unread-counter-normal: none;

View File

@@ -107,20 +107,6 @@
border-color: hsl(0deg 0% 0% / 90%);
}
& div.overlay .flex.overlay-content > .overlay-container,
#settings_page,
.informational-overlays .overlay-content {
box-shadow: 0 0 30px hsl(212deg 32% 7%);
}
#draft_overlay,
#scheduled_messages_overlay_container,
#message-edit-history-overlay-container {
.flex.overlay-content > .overlay-container {
box-shadow: 0 0 30px hsl(213deg 31% 0%);
}
}
.popover hr,
hr {
opacity: 0.2;

View File

@@ -1,7 +1,6 @@
# Zulip's main Markdown implementation. See docs/subsystems/markdown.md for
# detailed documentation on our Markdown syntax.
import logging
import mimetypes
import re
import time
from collections import deque
@@ -1032,7 +1031,7 @@ class InlineInterestingLinkProcessor(markdown.treeprocessors.Treeprocessor):
if not self.zmd.image_preview_enabled:
return False
url_type = mimetypes.guess_type(url)[0]
url_type = guess_type(url)[0]
# Support only video formats (containers) that are supported cross-browser and cross-device. As per
# https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers#index_of_media_container_formats_file_types
# MP4 and WebM are the only formats that are widely supported.

View File

@@ -10,6 +10,7 @@ from dataclasses import dataclass
from typing import IO, TYPE_CHECKING, Any, TypeVar, Union, cast
from unittest import mock
from unittest.mock import patch
from urllib.parse import urlsplit
import boto3.session
import fakeldap
@@ -19,11 +20,11 @@ from django.conf import settings
from django.contrib.auth.models import AnonymousUser
from django.contrib.sessions.backends.base import SessionBase
from django.db.migrations.state import StateApps
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
from django.http import HttpRequest, HttpResponse
from django.http.request import QueryDict
from django.http.response import HttpResponseBase
from django.test import override_settings
from django.urls import URLResolver
from django.urls import URLResolver, resolve
from moto.core.decorator import mock_aws
from mypy_boto3_s3.service_resource import Bucket
from typing_extensions import ParamSpec, override
@@ -45,6 +46,7 @@ from zerver.models.clients import clear_client_cache, get_client
from zerver.models.realms import get_realm
from zerver.models.streams import get_stream
from zerver.tornado.handlers import AsyncDjangoHandler, allocate_handler_id
from zerver.views.auth import log_into_subdomain
from zilencer.models import RemoteZulipServer
from zproject.backends import ExternalAuthDataDict, ExternalAuthResult
@@ -584,8 +586,10 @@ def write_instrumentation_reports(full_suite: bool, include_webhooks: bool) -> N
def load_subdomain_token(response: Union["TestHttpResponse", HttpResponse]) -> ExternalAuthDataDict:
assert isinstance(response, HttpResponseRedirect)
token = response.url.rsplit("/", 1)[1]
assert response.status_code == 302
match = resolve(urlsplit(response["Location"]).path)
assert match.func == log_into_subdomain
token = match.kwargs["token"]
data = ExternalAuthResult(
request=mock.MagicMock(), login_token=token, delete_stored_data=False
).data_dict