Merge pull request #3 from neodb-social/doubaniux/boofilsic/generalization
Generalize instance related code #2 by doubaniux
This commit is contained in:
commit
a333c4b01e
90 changed files with 244 additions and 203 deletions
4
.github/workflows/codeql-analysis.yml
vendored
4
.github/workflows/codeql-analysis.yml
vendored
|
@ -13,10 +13,10 @@ name: "CodeQL"
|
|||
|
||||
on:
|
||||
push:
|
||||
branches: [ "neo" ]
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "neo" ]
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '35 0 * * 0'
|
||||
|
||||
|
|
4
.github/workflows/pysa.yml
vendored
4
.github/workflows/pysa.yml
vendored
|
@ -17,9 +17,9 @@ name: Pysa
|
|||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ "neo" ]
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "neo" ]
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '45 12 * * 4'
|
||||
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -31,5 +31,8 @@ log
|
|||
# conf folder for neodb
|
||||
/neodb
|
||||
|
||||
# typesense folder
|
||||
/typesense-data
|
||||
|
||||
# test coverage
|
||||
.coverage
|
||||
|
|
|
@ -11,7 +11,7 @@ RUN pip install --no-cache-dir -r /tmp/requirements.txt \
|
|||
&& useradd -U app_user \
|
||||
&& install -d -m 0755 -o app_user -g app_user /app/static
|
||||
|
||||
ENV DJANGO_SETTINGS_MODULE=neodb.dev
|
||||
ENV DJANGO_SETTINGS_MODULE=yoursettings.dev
|
||||
WORKDIR /app
|
||||
USER app_user:app_user
|
||||
COPY --chown=app_user:app_user . .
|
||||
|
|
|
@ -13,7 +13,6 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
|
|||
import os
|
||||
import requests
|
||||
import psycopg2.extensions
|
||||
from git import Repo
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
@ -68,7 +67,6 @@ INSTALLED_APPS = [
|
|||
'timeline.apps.TimelineConfig',
|
||||
'easy_thumbnails',
|
||||
'user_messages',
|
||||
'django_slack',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
@ -114,9 +112,9 @@ if DEBUG:
|
|||
'default': {
|
||||
'ENGINE': 'django.db.backends.postgresql',
|
||||
'NAME': os.environ.get('DB_NAME', 'test'),
|
||||
'USER': os.environ.get('DB_USER', 'donotban'),
|
||||
'PASSWORD': os.environ.get('DB_PASSWORD', 'donotbansilvousplait'),
|
||||
'HOST': os.environ.get('DB_HOST', '172.18.116.29'),
|
||||
'USER': os.environ.get('DB_USER', 'postgres'),
|
||||
'PASSWORD': os.environ.get('DB_PASSWORD', 'admin123'),
|
||||
'HOST': os.environ.get('DB_HOST', '127.0.0.1'),
|
||||
'OPTIONS': {
|
||||
'client_encoding': 'UTF8',
|
||||
# 'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_DEFAULT,
|
||||
|
@ -281,22 +279,22 @@ LUMINATI_PASSWORD = 'nsb7te9bw0ney'
|
|||
SCRAPING_TIMEOUT = 90
|
||||
|
||||
# ScraperAPI api key
|
||||
SCRAPERAPI_KEY = 'wnb3794v675b8w475h0e8hr7tyge'
|
||||
SCRAPERAPI_KEY = '***REMOVED***'
|
||||
PROXYCRAWL_KEY = None
|
||||
SCRAPESTACK_KEY = None
|
||||
|
||||
# Spotify credentials
|
||||
SPOTIFY_CREDENTIAL = "NzYzNkYTE6MGQ0ODY0NTY2Y2b3n645sdfgAyY2I1ljYjg3Nzc0MjIwODQ0ZWE="
|
||||
SPOTIFY_CREDENTIAL = "***REMOVED***"
|
||||
|
||||
# IMDb API service https://imdb-api.com/
|
||||
IMDB_API_KEY = "k23fwewff23"
|
||||
IMDB_API_KEY = "***REMOVED***"
|
||||
|
||||
# The Movie Database (TMDB) API Keys
|
||||
TMDB_API3_KEY = "deadbeef"
|
||||
TMDB_API4_KEY = "deadbeef.deadbeef.deadbeef"
|
||||
TMDB_API3_KEY = "***REMOVED***"
|
||||
# TMDB_API4_KEY = "deadbeef.deadbeef.deadbeef"
|
||||
|
||||
# Google Books API Key
|
||||
GOOGLE_API_KEY = 'deadbeef-deadbeef-deadbeef'
|
||||
GOOGLE_API_KEY = '***REMOVED***'
|
||||
|
||||
# IGDB
|
||||
IGDB_CLIENT_ID = 'deadbeef'
|
||||
|
@ -348,19 +346,18 @@ RQ_SHOW_ADMIN_LINK = True
|
|||
|
||||
SEARCH_INDEX_NEW_ONLY = False
|
||||
|
||||
SEARCH_BACKEND = None
|
||||
|
||||
# SEARCH_BACKEND = 'MEILISEARCH'
|
||||
# MEILISEARCH_SERVER = 'http://127.0.0.1:7700'
|
||||
# MEILISEARCH_KEY = 'deadbeef'
|
||||
|
||||
# SEARCH_BACKEND = 'TYPESENSE'
|
||||
# TYPESENSE_CONNECTION = {
|
||||
# 'api_key': 'deadbeef',
|
||||
# 'nodes': [{
|
||||
# 'host': 'localhost',
|
||||
# 'port': '8108',
|
||||
# 'protocol': 'http'
|
||||
# }],
|
||||
# 'connection_timeout_seconds': 2
|
||||
# }
|
||||
SEARCH_BACKEND = 'TYPESENSE'
|
||||
TYPESENSE_CONNECTION = {
|
||||
'api_key': 'xyz',
|
||||
'nodes': [{
|
||||
'host': 'localhost',
|
||||
'port': '8108',
|
||||
'protocol': 'http'
|
||||
}],
|
||||
'connection_timeout_seconds': 2
|
||||
}
|
||||
|
|
|
@ -164,7 +164,7 @@ class BookReview(Review):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + reverse("books:retrieve_review", args=[self.id])
|
||||
return reverse("books:retrieve_review", args=[self.id])
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update_review.js' %}"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除图书' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ book.title }}{% trans '的标记' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
<meta property="og:image" content="{{ book.cover|thumb:'normal' }}">
|
||||
<title>{{ site_name }}{% trans '书评' %} - {{ review.title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ book.title }}{% trans '的评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '从豆瓣获取数据' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/scrape.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from django.db import models
|
||||
from markdown import markdown
|
||||
from common.models import UserOwnedEntity
|
||||
from movies.models import Movie
|
||||
from books.models import Book
|
||||
|
@ -8,6 +9,7 @@ from markdownx.models import MarkdownxField
|
|||
from django.utils.translation import gettext_lazy as _
|
||||
from django.conf import settings
|
||||
from common.utils import ChoicesDictGenerator, GenerateDateUUIDMediaFilePath
|
||||
from common.models import RE_HTML_TAG
|
||||
from django.shortcuts import reverse
|
||||
|
||||
|
||||
|
@ -64,7 +66,7 @@ class Collection(UserOwnedEntity):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + reverse("collection:retrieve", args=[self.id])
|
||||
return reverse("collection:retrieve", args=[self.id])
|
||||
|
||||
@property
|
||||
def wish_url(self):
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<style type="text/css">
|
||||
#id_collaborative li, #id_visibility li {display: inline-block !important;}
|
||||
|
|
|
@ -20,12 +20,12 @@
|
|||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
<meta property="og:image" content="{{ collection.cover|thumb:'normal' }}">
|
||||
<title>{{ site_name }} {% trans '收藏单' %} - {{ collection.title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/htmx/1.8.0/htmx.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/htmx/1.8.4/htmx.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<li>
|
||||
<form hx-target=".entity-list" hx-post="{% url 'collection:append_item' form.instance.id %}" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="url" name="url" placeholder="https://neodb.social/movies/1/" style="min-width:24rem" required>
|
||||
<input type="url" name="url" placeholder="{{ request.scheme }}://{{ request.get_host }}/movies/1/" style="min-width:24rem" required>
|
||||
<input type="text" name="comment" placeholder="{% trans '备注' %}" style="min-width:24rem">
|
||||
<input class="button" type="submit" value="{% trans '添加' %}" >
|
||||
</form>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -62,7 +62,12 @@ class Entity(models.Model):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + self.get_absolute_url()
|
||||
return self.get_absolute_url()
|
||||
|
||||
@property
|
||||
def absolute_url(self):
|
||||
"""URL with host and protocol"""
|
||||
return settings.APP_WEBSITE + self.url
|
||||
|
||||
def get_json(self):
|
||||
return {
|
||||
|
@ -70,7 +75,7 @@ class Entity(models.Model):
|
|||
'brief': self.brief,
|
||||
'rating': self.rating,
|
||||
'url': self.url,
|
||||
'cover_url': settings.APP_WEBSITE + self.cover.url,
|
||||
'cover_url': self.cover.url,
|
||||
'top_tags': self.tags[:5],
|
||||
'category_name': self.verbose_category_name,
|
||||
'other_info': self.other_info,
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import types
|
||||
import logging
|
||||
import typesense
|
||||
from typesense.exceptions import ObjectNotFound
|
||||
from django.conf import settings
|
||||
from django.db.models.signals import post_save, post_delete
|
||||
|
||||
|
@ -194,14 +196,16 @@ class Indexer:
|
|||
# 'facetsDistribution': ['_class'],
|
||||
# 'sort_by': None,
|
||||
}
|
||||
# print(q)
|
||||
r = self.instance().collections[INDEX_NAME].documents.search(options)
|
||||
# print(r)
|
||||
import types
|
||||
results = types.SimpleNamespace()
|
||||
results.items = list([x for x in map(lambda i: self.item_to_obj(i['document']), r['hits']) if x is not None])
|
||||
results.num_pages = (r['found'] + SEARCH_PAGE_SIZE - 1) // SEARCH_PAGE_SIZE
|
||||
# print(results)
|
||||
|
||||
try:
|
||||
r = self.instance().collections[INDEX_NAME].documents.search(options)
|
||||
results.items = list([x for x in map(lambda i: self.item_to_obj(i['document']), r['hits']) if x is not None])
|
||||
results.num_pages = (r['found'] + SEARCH_PAGE_SIZE - 1) // SEARCH_PAGE_SIZE
|
||||
except ObjectNotFound:
|
||||
results.items = []
|
||||
results.num_pages = 1
|
||||
|
||||
return results
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -2425,6 +2425,19 @@ select::placeholder {
|
|||
list-style: circle inside;
|
||||
}
|
||||
|
||||
.markdownx-preview h1 {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
.markdownx-preview h2 {
|
||||
font-size: 2.0em;
|
||||
}
|
||||
|
||||
.markdownx-preview blockquote {
|
||||
border-left: lightgray solid 0.4em;
|
||||
padding-left: 0.4em;
|
||||
}
|
||||
|
||||
.rating-star .jq-star {
|
||||
cursor: unset !important;
|
||||
}
|
||||
|
|
2
common/static/css/boofilsic.min.css
vendored
2
common/static/css/boofilsic.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -17,6 +17,24 @@ $(document).ready( function() {
|
|||
$(".mast-following-more").hide();
|
||||
$(".mast-followers-more").hide();
|
||||
|
||||
getUserInfo(
|
||||
id,
|
||||
mast_uri,
|
||||
token,
|
||||
function(userData) {
|
||||
let userName;
|
||||
if (userData.display_name) {
|
||||
userName = translateEmojis(userData.display_name, userData.emojis, true);
|
||||
} else {
|
||||
userName = userData.username;
|
||||
}
|
||||
$("#userInfoCard .mast-avatar").attr("src", userData.avatar);
|
||||
$("#userInfoCard .mast-displayname").html(userName);
|
||||
$("#userInfoCard .mast-brief").text($(userData.note).text());
|
||||
$(userInfoSpinner).remove();
|
||||
}
|
||||
);
|
||||
|
||||
getFollowers(
|
||||
id,
|
||||
mast_uri,
|
||||
|
@ -206,7 +224,6 @@ $(document).ready( function() {
|
|||
if (data.failed_urls.length > 0) {
|
||||
$(".import-panel__fail-urls").show();
|
||||
data.failed_urls.forEach((v, i) => {
|
||||
console.log(v)
|
||||
$("#failedUrls").append($("<li>" + v + "</li>"));
|
||||
});
|
||||
}
|
||||
|
@ -224,4 +241,4 @@ $(document).ready( function() {
|
|||
});
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,20 +1,3 @@
|
|||
.markdownx-preview h1 {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
.markdownx-preview h2 {
|
||||
font-size: 2.0em;
|
||||
}
|
||||
|
||||
.markdownx-preview h3 {
|
||||
font-size: 1.6em;
|
||||
}
|
||||
|
||||
.markdownx-preview blockquote {
|
||||
border-left: lightgray solid 0.4em;
|
||||
padding-left: 0.4em;
|
||||
}
|
||||
|
||||
.collection-item-position-edit {
|
||||
float: right;
|
||||
}
|
File diff suppressed because one or more lines are too long
1
common/static/lib/js/hyperscript-0.9.7.min.js
vendored
Normal file
1
common/static/lib/js/hyperscript-0.9.7.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -4,6 +4,21 @@
|
|||
& ul li
|
||||
list-style: circle inside
|
||||
|
||||
h1
|
||||
font-size: 2.5em
|
||||
|
||||
h2
|
||||
font-size: 2.0em
|
||||
|
||||
blockquote
|
||||
border-left: lightgray solid 0.4em
|
||||
padding-left: 0.1em
|
||||
margin-left: 0
|
||||
|
||||
code
|
||||
border-left: $color-primary solid 0.3em
|
||||
padding-left: 0.1em
|
||||
|
||||
.rating-star .jq-star
|
||||
cursor: unset !important
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="refresh" content="5;url={% if url %}{{url}}{% else %}{% url 'common:home' %}{% endif %}">
|
||||
<link rel="stylesheet" href="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/milligram/1.4.1/milligram.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.staticfile.org/milligram/1.4.1/milligram.min.css">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic_edit.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic_box.css' %}">
|
||||
<title>{% trans '错误' %}</title>
|
||||
|
|
|
@ -15,13 +15,13 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '搜索结果' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/htmx/1.8.0/htmx.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/htmx/1.8.4/htmx.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
{% load static %}
|
||||
{% if sentry_dsn %}
|
||||
<script src="https://static.neodb.social/browser.sentry-cdn.com/7.7.0/bundle.min.js"></script>
|
||||
<script src="https://browser.sentry-cdn.com/7.7.0/bundle.min.js"></script>
|
||||
<script>
|
||||
if (window.Sentry) Sentry.init({
|
||||
dsn: "{{ sentry_dsn }}",
|
||||
release: "NeoDB@{{ version_hash }}",
|
||||
release: "{{ version_hash }}",
|
||||
environment: "{{ settings_module }}",
|
||||
tracesSampleRate: 1.0,
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
{% if jquery %}
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
{% else %}
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/cash/8.1.1/cash.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/cash/8.1.1/cash.min.js"></script>
|
||||
{% endif %}
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/htmx/1.8.0/htmx.min.js"></script>
|
||||
<script src="https://static.neodb.social/unpkg.com/hyperscript.org@0.9.7.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/htmx/1.8.4/htmx.min.js"></script>
|
||||
<script src="{% static 'lib/js/hyperscript-0.9.7.min.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
<link rel="search"type="application/opensearchdescription+xml" title="{{ site_name }}" href="{% static 'opensearch.xml' %}">
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{% load oauth_token %}
|
||||
{% load truncate %}
|
||||
{% load thumb %}
|
||||
{% load neo %}
|
||||
{% load user_item %}
|
||||
<div class="grid__aside grid__aside--reverse-order grid__aside--tablet-column">
|
||||
<div class="aside-section-wrapper aside-section-wrapper--no-margin">
|
||||
<div class="user-profile" id="userInfoCard">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{% load highlight %}
|
||||
{% load i18n %}
|
||||
{% load l10n %}
|
||||
{% load neo %}
|
||||
{% load user_item %}
|
||||
{% current_user_marked_item book as marked %}
|
||||
<li class="entity-list__entity">
|
||||
<div class="entity-list__entity-img-wrapper">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{% load highlight %}
|
||||
{% load i18n %}
|
||||
{% load l10n %}
|
||||
{% load neo %}
|
||||
{% load user_item %}
|
||||
{% current_user_marked_item game as marked %}
|
||||
<li class="entity-list__entity">
|
||||
<div class="entity-list__entity-img-wrapper">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% load i18n %}
|
||||
{% load l10n %}
|
||||
{% load humanize %}
|
||||
{% load neo %}
|
||||
{% load user_item %}
|
||||
{% current_user_marked_item movie as marked %}
|
||||
<li class="entity-list__entity">
|
||||
<div class="entity-list__entity-img-wrapper">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{% load highlight %}
|
||||
{% load i18n %}
|
||||
{% load l10n %}
|
||||
{% load neo %}
|
||||
{% load user_item %}
|
||||
{% current_user_marked_item music as marked %}
|
||||
<li class="entity-list__entity">
|
||||
<div class="entity-list__entity-img-wrapper">
|
||||
|
|
|
@ -10,3 +10,17 @@ register = template.Library()
|
|||
def mastodon(domain):
|
||||
url = 'https://' + domain
|
||||
return url
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def current_user_relationship(context, user):
|
||||
current_user = context['request'].user
|
||||
if current_user and current_user.is_authenticated:
|
||||
if current_user.is_following(user):
|
||||
if current_user.is_followed_by(user):
|
||||
return '互相关注'
|
||||
else:
|
||||
return '已关注'
|
||||
elif current_user.is_followed_by(user):
|
||||
return '被ta关注'
|
||||
return None
|
|
@ -1,48 +0,0 @@
|
|||
from django import template
|
||||
import datetime
|
||||
from django.utils import timezone
|
||||
from collection.models import Collection
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def current_user_marked_item(context, item):
|
||||
user = context['request'].user
|
||||
if user and user.is_authenticated:
|
||||
if isinstance(item, Collection) and item.owner == user:
|
||||
return item
|
||||
else:
|
||||
return context['request'].user.get_mark_for_item(item)
|
||||
return None
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def current_user_relationship(context, user):
|
||||
current_user = context['request'].user
|
||||
if current_user and current_user.is_authenticated:
|
||||
if current_user.is_following(user):
|
||||
if current_user.is_followed_by(user):
|
||||
return '互相关注'
|
||||
else:
|
||||
return '已关注'
|
||||
elif current_user.is_followed_by(user):
|
||||
return '被ta关注'
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def prettydate(d):
|
||||
diff = timezone.now() - d
|
||||
s = diff.seconds
|
||||
if diff.days > 14 or diff.days < 0:
|
||||
return d.strftime('%Y年%m月%d日')
|
||||
elif diff.days >= 1:
|
||||
return '{} 天前'.format(diff.days)
|
||||
elif s < 120:
|
||||
return '刚刚'
|
||||
elif s < 3600:
|
||||
return '{} 分钟前'.format(s // 60)
|
||||
else:
|
||||
return '{} 小时前'.format(s // 3600)
|
22
common/templatetags/prettydate.py
Normal file
22
common/templatetags/prettydate.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
from django import template
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter
|
||||
def prettydate(d):
|
||||
# TODO use date and naturaltime instead https://docs.djangoproject.com/en/3.2/ref/contrib/humanize/
|
||||
diff = timezone.now() - d
|
||||
s = diff.seconds
|
||||
if diff.days > 14 or diff.days < 0:
|
||||
return d.strftime('%Y年%m月%d日')
|
||||
elif diff.days >= 1:
|
||||
return '{} 天前'.format(diff.days)
|
||||
elif s < 120:
|
||||
return '刚刚'
|
||||
elif s < 3600:
|
||||
return '{} 分钟前'.format(s // 60)
|
||||
else:
|
||||
return '{} 小时前'.format(s // 3600)
|
19
common/templatetags/user_item.py
Normal file
19
common/templatetags/user_item.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
from django import template
|
||||
from collection.models import Collection
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def current_user_marked_item(context, item):
|
||||
# NOTE weird to put business logic in tags
|
||||
user = context['request'].user
|
||||
if user and user.is_authenticated:
|
||||
if isinstance(item, Collection) and item.owner == user:
|
||||
return item
|
||||
else:
|
||||
return context['request'].user.get_mark_for_item(item)
|
||||
return None
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ services:
|
|||
- DB_USER=postgres
|
||||
- DB_PASSWORD=postgres
|
||||
- REDIS_HOST=redis
|
||||
- DJANGO_SETTINGS_MODULE=neodb.dev
|
||||
- DJANGO_SETTINGS_MODULE=yoursettings.dev
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
|
|
|
@ -149,7 +149,7 @@ class GameReview(Review):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + reverse("games:retrieve_review", args=[self.id])
|
||||
return reverse("games:retrieve_review", args=[self.id])
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update_review.js' %}"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除电影/剧集' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ game.title }}{% trans '的标记' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
<meta property="og:image" content="{{ game.cover|thumb:'normal' }}">
|
||||
<title>{{ site_name }}游戏评论 - {{ review.title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ game.title }}{% trans '的评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '从豆瓣获取数据' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/scrape.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<title>{{ site_name }} - {{ object.title }}</title>
|
||||
</head>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
||||
<title>{{ site_name }} - {% trans '公告栏' %}</title>
|
||||
|
@ -111,10 +111,9 @@
|
|||
});
|
||||
// strip html tags
|
||||
document.querySelectorAll(".markdownx-preview").forEach(e => {
|
||||
console.log($(e).text())
|
||||
$(e).html($(e).text());
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -410,7 +410,7 @@ def share_mark(mark):
|
|||
visibility = TootVisibilityEnum.UNLISTED
|
||||
tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(mark.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else ''
|
||||
stars = rating_to_emoji(mark.rating, MastodonApplication.objects.get(domain_name=user.mastodon_site).star_mode)
|
||||
content = f"{mark.translated_status}《{mark.item.title}》{stars}\n{mark.item.url}\n{mark.text}{tags}"
|
||||
content = f"{mark.translated_status}《{mark.item.title}》{stars}\n{mark.item.absolute_url}\n{mark.text}{tags}"
|
||||
update_id = None
|
||||
if mark.shared_link: # "https://mastodon.social/@username/1234567890"
|
||||
r = re.match(r'.+/(\w+)$', mark.shared_link) # might be re.match(r'.+/([^/]+)$', u) if Pleroma supports edit
|
||||
|
@ -469,7 +469,7 @@ def share_collection(collection, comment, user, visibility_no):
|
|||
else:
|
||||
visibility = TootVisibilityEnum.UNLISTED
|
||||
tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', '收藏单') if user.get_preference().mastodon_append_tag else ''
|
||||
content = f"分享收藏单《{collection.title}》\n{collection.url}\n{comment}{tags}"
|
||||
content = f"分享收藏单《{collection.title}》\n{collection.absolute_url}\n{comment}{tags}"
|
||||
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token)
|
||||
if response and response.status_code in [200, 201]:
|
||||
j = response.json()
|
||||
|
|
|
@ -272,7 +272,7 @@ class MovieReview(Review):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + reverse("movies:retrieve_review", args=[self.id])
|
||||
return reverse("movies:retrieve_review", args=[self.id])
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update_review.js' %}"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除电影/剧集' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ movie.title }}{% trans '的标记' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
<meta property="og:image" content="{{ movie.cover|thumb:'normal' }}">
|
||||
<title>{{ site_name }}影评 - {{ review.title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ movie.title }}{% trans '的评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '从豆瓣获取数据' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/scrape.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -195,7 +195,7 @@ class SongReview(Review):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + reverse("music:retrieve_song_review", args=[self.id])
|
||||
return reverse("music:retrieve_song_review", args=[self.id])
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
@ -246,7 +246,7 @@ class AlbumReview(Review):
|
|||
|
||||
@property
|
||||
def url(self):
|
||||
return settings.APP_WEBSITE + reverse("music:retrieve_album_review", args=[self.id])
|
||||
return reverse("music:retrieve_album_review", args=[self.id])
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ album.title }}{% trans '的标记' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
<meta property="og:image" content="{{ album.cover|thumb:'normal' }}">
|
||||
<title>{{ site_name }}乐评 - {{ review.title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ album.title }}{% trans '的评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update_review.js' %}"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update_review.js' %}"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除音乐' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除音乐' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '删除评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '从豆瓣获取数据' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/scrape.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '从豆瓣获取数据' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/scrape.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ song.title }}{% trans '的标记' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
<meta property="og:image" content="{{ song.cover|thumb:'normal' }}">
|
||||
<title>{{ site_name }}乐评 - {{ review.title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ song.title }}{% trans '的评论' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
|
@ -24,6 +24,4 @@ opencc
|
|||
dnspython
|
||||
typesense
|
||||
markdownify
|
||||
sentry-sdk
|
||||
gitpython
|
||||
igdb-api-v4
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
{% load oauth_token %}
|
||||
{% load truncate %}
|
||||
{% load thumb %}
|
||||
{% load neo %}
|
||||
{% load prettydate %}
|
||||
|
||||
{% for activity in activities %}
|
||||
{% current_user_marked_item activity.target.item as marked %}
|
||||
|
|
|
@ -41,7 +41,7 @@ class ReviewFeed(Feed):
|
|||
return f"{item.title} - 评论《{item.item.title}》"
|
||||
|
||||
def item_description(self, item):
|
||||
target_html = f'<p><a href="{item.item.url}">{item.item.title}</a></p>\n'
|
||||
target_html = f'<p><a href="{item.item.absolute_url}">{item.item.title}</a></p>\n'
|
||||
html = markdown(item.content)
|
||||
return target_html + html
|
||||
|
||||
|
|
|
@ -135,7 +135,7 @@ def export_marks_task(user):
|
|||
my_rating = None # (mark.rating / 2) if mark.rating else None
|
||||
content = review.content
|
||||
target_source_url = review.item.source_url
|
||||
target_url = review.item.url
|
||||
target_url = review.item.absolute_url
|
||||
line = [title, target, url, timestamp, my_rating, label, content, target_source_url, target_url]
|
||||
ws.append(line)
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
|
||||
{% include "partial/_common_libs.html" with jquery=1 %}
|
||||
|
||||
<script src="{% static 'js/mastodon.js' %}"></script>
|
||||
<script src="{% static 'js/home.js' %}"></script>
|
||||
<script src="{% static 'js/mastodon.js' %}" defer></script>
|
||||
<script src="{% static 'js/home.js' %}" defer></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
@ -635,7 +635,7 @@
|
|||
{% csrf_token %}
|
||||
<input type="hidden" name="layout">
|
||||
</form>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/html5sortable/0.13.3/html5sortable.min.js" crossorigin="anonymous"></script>
|
||||
<script src="https://cdn.staticfile.org/html5sortable/0.13.3/html5sortable.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{% static 'js/sort_layout.js' %}"></script>
|
||||
{% endif %}
|
||||
<script>
|
||||
|
|
|
@ -13,15 +13,15 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ user.mastodon_username }} {{ list_title }}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/htmx/1.8.0/htmx.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/htmx/1.8.4/htmx.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<script src="{% static 'js/mastodon.js' %}"></script>
|
||||
<script src="{% static 'js/home.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/neo.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'lib/css/collection.css' %}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
<meta property="og:image" content="{{ request.scheme }}://{{ request.get_host }}{% static 'img/logo_square.jpg' %}">
|
||||
<title>{{ site_name }} - {% trans '登录' %}</title>
|
||||
{% include "partial/_common_libs.html" %}
|
||||
<link rel="stylesheet" href="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/milligram/1.4.1/milligram.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.staticfile.org/milligram/1.4.1/milligram.min.css">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic_edit.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic_box.css' %}">
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/js-cookie/3.0.1/js.cookie.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/js-cookie/3.0.1/js.cookie.min.js"></script>
|
||||
<script> $(document).ready( function() { $('.delayed').remove(); $('#loginButton').prop("disabled", false); } ); </script>
|
||||
<style type="text/css">
|
||||
.delayed {
|
||||
|
@ -67,7 +67,6 @@
|
|||
placeholder="实例域名(不含@和@之前的部分),如mastodon.social"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
|
||||
<input type='submit' value="{% trans '授权登录' %}" id="loginButton" disabled />
|
||||
<br><a target="_blank" href="https://about.neodb.social/doc/howto/">{% trans '了解更多' %}</a>
|
||||
<script type="text/javascript">if (Cookies.get('mastodon_domain')) $('#domain').val(Cookies.get('mastodon_domain'));</script>
|
||||
{% else %}
|
||||
<select name="domain" placeholder="test">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '管理举报' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/milligram/1.4.1/milligram.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.staticfile.org/milligram/1.4.1/milligram.min.css">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic_edit.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic_box.css' %}">
|
||||
<title>{{ site_name }} - {% trans '注册' %}</title>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {% trans '举报用户' %}</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'js/create_update.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'css/boofilsic.min.css' %}">
|
||||
</head>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - 我的标签</title>
|
||||
<script src="https://static.neodb.social/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
|
||||
<script src="{% static 'lib/js/rating-star.js' %}"></script>
|
||||
<script src="{% static 'js/rating-star-readonly.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'lib/css/rating-star.css' %}">
|
||||
|
|
Loading…
Add table
Reference in a new issue