From ecbef12eef190c17aa6bab3802603de2d6d0b969 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Sun, 8 Sep 2024 21:56:47 +1000 Subject: [PATCH] Add hot links --- data/db.sqlite3 | Bin 163840 -> 167936 bytes links/__pycache__/views.cpython-312.pyc | Bin 13246 -> 13429 bytes links/templates/links/link_detail.html | 17 +- links/templates/links/link_list.html | 40 ++++- links/templates/links/tools.html | 26 +++ links/views.py | 27 ++- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 2396 -> 3547 bytes locale/zh_Hans/LC_MESSAGES/django.po | 30 +++- new_theme/static/css/dist/styles.css | 158 +++++++++++++----- templates/base.html | 83 ++++++++- .../__pycache__/settings.cpython-312.pyc | Bin 2208 -> 2208 bytes url_manager/__pycache__/urls.cpython-312.pyc | Bin 667 -> 667 bytes url_manager/settings.py | 2 +- url_manager/urls.py | 4 +- 14 files changed, 321 insertions(+), 66 deletions(-) diff --git a/data/db.sqlite3 b/data/db.sqlite3 index ab521e1675b5f94130ae81fb2b0ee13997a7ba8d..bcd03671d185c0aba688a4e7336c4afd478c5b99 100644 GIT binary patch delta 612 zcmZvZF=!KE6vw~s-Cc5*OYTLf+Eg%Cv|70-MG z#tKeS6k5+kNml8g1bUq;C_0!yog#=RI28j`p+#`3*J{OD?bzLe zQjZXF{GL8Zdr!T6S*qTe&j#~Zy7YEL)m8|8!e{spuj3^wVM_a{^|du^r8}xGXgAWT zNL*?%GnZjbh81tYLZ`!OlmzH-C zSS9B05t8YcInhrcd>v77gWxaR#x2~ycesgP@FVu|CHA^|ybcaa0;Pf)vKb3Gr-T$` zzn_LoQp5odfsAv99US2IU`U7eIK)fGX2Nu?aU4CvF*dfwfF@O}k;Ak@@GS1yvm`P^BV92|BJz{mWT6mE@sVe>XN9%P=9>83ivPa<{5~F$?$qP0cRY1u?-} zI;;}mhp;3Vu{Qy8WT1Ta}}FyCR$W|n3;wcR6tDTQf! zLmJZp#_c{KOgp$))EJr=rpqKSX^5~NU{7Y}WLv}L%le&l8EXK`dzPNxK>47)^=2A&@ diff --git a/links/__pycache__/views.cpython-312.pyc b/links/__pycache__/views.cpython-312.pyc index 4c908555908aa295be58d3284f365b4599c35f42..635f9ffb957082c2a85e5b061a18a320a8819d4d 100644 GIT binary patch delta 2514 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 diff --git a/links/templates/links/link_detail.html b/links/templates/links/link_detail.html index 539b2bb..8b005e7 100644 --- a/links/templates/links/link_detail.html +++ b/links/templates/links/link_detail.html @@ -20,11 +20,11 @@

{% trans "Created At" %}:

-

{{ link.created_at|date:"Y-m-d H:i" }}

+

{{ link.created_at|date:"Y-m-d H:i" }}

{% trans "Last Updated" %}:

-

{{ link.updated_at|date:"Y-m-d H:i" }}

+

{{ link.updated_at|date:"Y-m-d H:i" }}

@@ -85,3 +85,16 @@ {% endblock %} + +{% block extra_js %} + +{% endblock %} diff --git a/links/templates/links/link_list.html b/links/templates/links/link_list.html index aa18f2d..62cb13d 100644 --- a/links/templates/links/link_list.html +++ b/links/templates/links/link_list.html @@ -2,6 +2,25 @@ {% load i18n %} {% block content %} + +
+

{% trans "Popular Links" %}

+
+ {% for item in popular_links %} +
+
+ + {{ item.link.alias }} + +

{% trans "Clicks" %}: {{ item.link.click_count }}

+
+
+ {% empty %} +

{% trans "No popular links available" %}

+ {% endfor %} +
+
+

{% trans "Link List" %}

@@ -81,8 +100,12 @@
{{ link.click_count }} - {{ link.created_at|date:"Y-m-d H:i" }} - {{ link.updated_at|date:"Y-m-d H:i" }} + + {{ link.created_at|date:"Y-m-d H:i" }} + + + {{ link.updated_at|date:"Y-m-d H:i" }} + {% trans "Edit" %} {% trans "Delete" %} @@ -111,4 +134,17 @@ } }); + + {% block extra_js %} + + {% endblock %} {% endblock %} diff --git a/links/templates/links/tools.html b/links/templates/links/tools.html index c0252ed..5b11715 100644 --- a/links/templates/links/tools.html +++ b/links/templates/links/tools.html @@ -17,6 +17,32 @@

{% trans "Import Aliases" %}

+
+

{% trans "Import aliases from a JSON file. The file should contain a list of objects with the following fields:" %}

+
    +
  • {% trans "alias (required): The short alias for the URL" %}
  • +
  • {% trans "original_url (required): The original URL" %}
  • +
  • {% trans "created_at (optional): Creation timestamp (ISO format)" %}
  • +
  • {% trans "updated_at (optional): Last update timestamp (ISO format)" %}
  • +
+
+
+

{% trans "Example JSON file content:" %}

+
+[
+  {
+    "alias": "example",
+    "original_url": "https://example.com",
+    "created_at": "2023-09-08T12:00:00Z",
+    "updated_at": "2023-09-08T12:00:00Z"
+  },
+  {
+    "alias": "google",
+    "original_url": "https://www.google.com"
+  }
+]
+        
+
{% csrf_token %}
diff --git a/links/views.py b/links/views.py index 7601980..23529ea 100644 --- a/links/views.py +++ b/links/views.py @@ -18,6 +18,8 @@ from django.http import JsonResponse, HttpResponse from django.core.serializers.json import DjangoJSONEncoder from django.utils.dateparse import parse_datetime +import random + class LinkListView(ListView): model = Link template_name = 'links/link_list.html' @@ -45,6 +47,20 @@ class LinkListView(ListView): context = super().get_context_data(**kwargs) context['current_sort'] = self.request.GET.get('sort', 'alias') context['current_order'] = self.request.GET.get('order', 'asc') + + # Modern color palette + colors = [ + '#3498db', '#2ecc71', '#e74c3c', '#f39c12', '#9b59b6', + '#1abc9c', '#d35400', '#34495e', '#16a085', '#27ae60' + ] + + # Add popular links to the context with random colors + popular_links = Link.objects.order_by('-click_count')[:5] + context['popular_links'] = [ + {'link': link, 'color': random.choice(colors)} + for link in popular_links + ] + return context class LinkCreateView(CreateView): @@ -115,15 +131,8 @@ def search_aliases(request): query = request.GET.get('q', '').strip() print(f"Search query: {query}") # Debug print - if not query: - return JsonResponse([], safe=False) - - if len(query) == 1: - # For single-letter queries, only match the start of the alias - links = Link.objects.filter(alias__istartswith=query)[:10] - else: - # For longer queries, keep the current behavior - links = Link.objects.filter(Q(alias__icontains=query) | Q(original_url__icontains=query))[:10] + # Use icontains for all query lengths + links = Link.objects.filter(alias__icontains=query)[:10] print(f"Found {links.count()} links") # Debug print diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 079e0c2322a71cbec353c5b1af9abbafa6d032ed..d53930d32a25365a3f024a54d0677fb29793c248 100644 GIT binary patch literal 3547 zcmZ{k`*Ryt6~}K%fyUw07D9QomqJP0ASLMxG{_09YAcD0{J@XSwEWOnYp<-O>s_0kkV=_`y?t=x=oRp1W6Z zYRVlQefHePIp>~x?tTBE`_D48ry$>iyt|39MsV+^@P~Hre#SlvHiKUTe+qsY)WGk6 zz2KAJF!&kpCio@rw$lHg^uK_#J^<^$57qc47^D6NK=Shlh#|(o&EONNe<%15^rykE zgU^Fs0EMCl()trh9|i^VDUjl!;C2BIf(OCpz|VohAo)25lKqPy*}nlk2>uDAdH(=E z53Yd}-+w^-*nMzHye*cP~$Hh*b_;2vL;KMLZ{d+)~_l#mv@kNmGo>uw*Nb^sq z{@0a0rI-iF&YaS3fVAHg@N3{7)p!-ek9~+gY=v#w60X|}wn5(tQXbP_6!gFr@GX$+ zf1vmgNcOj&llZ9OZV+2!O(1@(6@L`>&lG!9zX8(z1{7aY{SzSN`7Myv{Y{PkU5$SL zQeA%pJ`FyOU@4z3f&0K;g5LsfgE$V^F!gTRfiDcnv&I(Kw;{A%)*yHvgc{|D8s+FI z2-Otjk=j=vJ0V|&a0t~owMQW2o8qI`DSyJc*9(~7Co?%-qi|YfLl@dDd6q=LD zu()Yx=(V_T9NXb`DwTB{4C`6PuzI=C*Ka#sj2}J5;*Q`)>@0V)>f?}RdEB$PE==JG z?qv*@n}+quGpvzZn5@w>Qm^n%PxB1dGg5BY0oYdBaQec9h>A5jLW6}?afl~jK!35RR6H;!F(cO+Tju-4aa3jTa& zTPsf+_)6KBWqC0S(I&Y}g@Daa#ZsEf4%ifv%bH~>?#@!G^dVfHcI-Z`ty_=su8au% zxEVWZ>e8KNSeS$mJ#MGD-Sczo#^r|$FN5@9x^0^FA^f~{Ej`NG9HZB;G*cc@yIK}z zyi*$xOx0-!t_Ec7@{YTf95pRGa^Xg!QPzptH4P+E=ZzV|60TrfRHAZM_(#p@N4PkQ zO}J6sZVJssO=N5v(70}-)51Y{aN815)@9qMwl3R4pt7u8*4?k8Xl0RxCbv7{7g+bRALov$3dho@LONlp#FVUd{bkML+wFe3mYRtr@)AJdp3x^<57o-IH+QxnPjtxj z%vOndIqR5wqp#YabdU`r+vp&v;iSW{|L5cAv04Us2FXWV2ur;I*r}UMrG)FIv!;0@ z%Gw>9$~V%iM_v$)i^yZVJ>K|}_<;m}A<@y<+}2vxA?RjBTHIbkk35&{bt7GNjMufd zMLNWQL2DvSNMek?n22{oTG}E_aelBZ*3!J=rMA{Y9Yq}Jax}{|HP3cpe1CT`$y?(s z3BEVc5^qjE8*ggrNOX4o7*nm@tkx?cT|(=N@npR9KsQCQH<^6aG@`cCyFLdIv^2LQ z*2CT%-BpK2iC%+9*O7k2bb$9KL>{*{jVWC7K2`gpmxU(_7 zr^oQ>+Rdz^nUVcCH8;kseyO_qb~o_wbKkCpIu?wdF5RAC)vM>q%Wnr`Gv(_SnV-Ar zkDX?IVZ|T1T)A_yJU3igocBlHET5UJo;hDB6xLRz@D2yZ=gRp7e_^U};OsR96P1Na;d;29 z_KVBG#I?{yO`p73oxBc(d?-{0Pa&vkeu-5ISAr8mth_Q&S$$JMEw2o}S1HW1%IY|F z5^gKVO;G8VFD;i=hv^9lCQg=$H~rU!{Dmd#OK$t*@_G(Ri_0H-eZ#b<@ltW*9vd=Y z;mAJ+k1NB=XZ$yY{IRS4(5+zRRH=Bmv^ea~PX-G&%2TiUg{8`Sc|SK<$ zg2@ZP*&L=x9~V~ql~LHOUVJr}nGMbr?p=(2MziRk=Fj;vbKzR#haxGA(y`>1%F_$} zouO*JNULR3>S^5&5LpXTsFJIWRL04IspGKjj~2>j=2W7?uJVcb>g3(7nRkLytA6fU zxi}vDW`<1qBeVY7!!rH%&Me*eHDYF}`a;y~%8CpvP=3O}Fvaw=mKO#~x5u$*BpZdG z&e*^8yD$lGS}EK@sRYBnEiDcr38lr;{@5Fod0FH#s#}+FHY^w{hDECCGMK)OIt;?n zlW*tRN)Flc^HDaidEqj*gNd7PN=vFCJy pi}i%9zoZ+C2Q!2I*vP%Xeu9gm$FTJZSP+SD??w$xIC%0MH8NGK@L!VT%6C@#5$kh|;dLiLga_GM%X z7u_O3B7`C^L5nhb=_Py)f-Iy5?=C?PJwy;<^gq|L4-I?fH)rO~ow>8~rTnXJVA1Cp zF_e0uf;h9rm}VTyqM}6B8k2+lxE`-!Hr~M+ypN4Ijb2>D4d`h8Tk{o^`9&UM)?pR$ z{D5hoAp?6+7CMCd%u%X5?9~2K=p#ReMHp4Ds|l2a$FTsXQ0BiwnfC!V;)0I|VAm-2P;d?iZW zh9UGOsX?^OpyUd7DhE zRhzJq{2+3IW}A!=rG#uGQ|dDftRbq25<>357D5(bE%&}`!ZJcGx!mpTM2`IbnId1l zli(V-i}Sac9fWK!Q>tiik=;^GE&sP{oPD}wE4ADOzndAe8H=?ocS%Z}RBh+uz2Q*I z*j=9G)<`%S_qSc@wPL}TIda8Kt(d?4DZbytw=#)J+ny&aa$ v)js=Y{vLZ@L4|#~V6?0|(2<^eoKDDC>sZ{dS_vDN{S6KZI{Nk7M diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index a224fc7..8cf3054 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -24,8 +24,8 @@ msgstr "英语" msgid "Simplified Chinese" msgstr "简体中文" -msgid "URL Manager" -msgstr "URL管理器" +msgid "GoLinks" +msgstr "GoLinks" msgid "Link List" msgstr "链接列表" @@ -121,7 +121,7 @@ msgid "Export Aliases" msgstr "导出别名" msgid "Export as JSON" -msgstr "导��为JSON" +msgstr "导为JSON" msgid "Import Aliases" msgstr "导入别名" @@ -129,6 +129,24 @@ msgstr "导入别名" msgid "Import from JSON" msgstr "从JSON导入" +msgid "Import aliases from a JSON file. The file should contain a list of objects with the following fields:" +msgstr "从JSON文件导入别名。文件应包含具有以下字段的对象列表:" + +msgid "alias (required): The short alias for the URL" +msgstr "alias(必填):URL的短别名" + +msgid "original_url (required): The original URL" +msgstr "original_url(必填):原始URL" + +msgid "created_at (optional): Creation timestamp (ISO format)" +msgstr "created_at(可选):创建时间戳(ISO格式)" + +msgid "updated_at (optional): Last update timestamp (ISO format)" +msgstr "updated_at(可选):最后更新时间戳(ISO格式)" + +msgid "Example JSON file content:" +msgstr "示例JSON文件内容:" + msgid "{} aliases have been imported successfully." msgstr "{}个别名已成功导入。" @@ -144,3 +162,9 @@ msgstr "JSON中存在无效项。每个项目必须是包含'alias'字段的对 #: 3.12/lib/python3.12/site-packages/django/forms/fields.py:95 msgid "This field is required." msgstr "" + +msgid "Popular Links" +msgstr "热门链接" + +msgid "No popular links available" +msgstr "暂无热门链接" diff --git a/new_theme/static/css/dist/styles.css b/new_theme/static/css/dist/styles.css index 2373b97..5f6c690 100644 --- a/new_theme/static/css/dist/styles.css +++ b/new_theme/static/css/dist/styles.css @@ -843,6 +843,14 @@ select { z-index: 10; } +.z-20 { + z-index: 20; +} + +.col-span-full { + grid-column: 1 / -1; +} + .mx-auto { margin-left: auto; margin-right: auto; @@ -860,10 +868,18 @@ select { margin-bottom: 1rem; } +.mb-6 { + margin-bottom: 1.5rem; +} + .ml-1 { margin-left: 0.25rem; } +.ml-4 { + margin-left: 1rem; +} + .mr-2 { margin-right: 0.5rem; } @@ -876,6 +892,10 @@ select { margin-top: 0.5rem; } +.mt-20 { + margin-top: 5rem; +} + .mt-6 { margin-top: 1.5rem; } @@ -884,12 +904,8 @@ select { margin-top: 2rem; } -.mt-20 { - margin-top: 5rem; -} - -.mb-6 { - margin-bottom: 1.5rem; +.mb-8 { + margin-bottom: 2rem; } .block { @@ -932,22 +948,6 @@ select { height: 100vh; } -.w-4 { - width: 1rem; -} - -.w-full { - width: 100%; -} - -.w-64 { - width: 16rem; -} - -.w-10 { - width: 2.5rem; -} - .w-1\/12 { width: 8.333333%; } @@ -960,6 +960,26 @@ select { width: 16.666667%; } +.w-10 { + width: 2.5rem; +} + +.w-4 { + width: 1rem; +} + +.w-48 { + width: 12rem; +} + +.w-64 { + width: 16rem; +} + +.w-full { + width: 100%; +} + .min-w-full { min-width: 100%; } @@ -994,6 +1014,14 @@ select { user-select: all; } +.list-inside { + list-style-position: inside; +} + +.list-disc { + list-style-type: disc; +} + .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } @@ -1131,6 +1159,11 @@ select { background-color: rgb(249 250 251 / var(--tw-bg-opacity)); } +.bg-green-500 { + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity)); +} + .bg-red-500 { --tw-bg-opacity: 1; background-color: rgb(239 68 68 / var(--tw-bg-opacity)); @@ -1141,23 +1174,22 @@ select { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } -.bg-green-500 { - --tw-bg-opacity: 1; - background-color: rgb(34 197 94 / var(--tw-bg-opacity)); +.bg-transparent { + background-color: transparent; } .p-2 { padding: 0.5rem; } -.p-6 { - padding: 1.5rem; -} - .p-4 { padding: 1rem; } +.p-6 { + padding: 1.5rem; +} + .px-4 { padding-left: 1rem; padding-right: 1rem; @@ -1183,6 +1215,16 @@ select { padding-bottom: 1rem; } +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + .text-left { text-align: left; } @@ -1314,10 +1356,29 @@ select { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.shadow-xl { + --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.blur { + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } @@ -1327,21 +1388,26 @@ select { background-color: rgb(37 99 235 / var(--tw-bg-opacity)); } +.hover\:bg-gray-100:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity)); +} + .hover\:bg-gray-300:hover { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity)); } -.hover\:bg-red-600:hover { - --tw-bg-opacity: 1; - background-color: rgb(220 38 38 / var(--tw-bg-opacity)); -} - .hover\:bg-green-600:hover { --tw-bg-opacity: 1; background-color: rgb(22 163 74 / var(--tw-bg-opacity)); } +.hover\:bg-red-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(220 38 38 / var(--tw-bg-opacity)); +} + .hover\:text-blue-800:hover { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity)); @@ -1352,6 +1418,11 @@ select { color: rgb(30 58 138 / var(--tw-text-opacity)); } +.hover\:text-gray-200:hover { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity)); +} + .hover\:text-green-900:hover { --tw-text-opacity: 1; color: rgb(20 83 45 / var(--tw-text-opacity)); @@ -1367,11 +1438,6 @@ select { color: rgb(127 29 29 / var(--tw-text-opacity)); } -.hover\:text-gray-200:hover { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} - .hover\:underline:hover { text-decoration-line: underline; } @@ -1416,10 +1482,24 @@ select { .sm\:inline { display: inline; } + + .sm\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } } @media (min-width: 768px) { .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } + + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +@media (min-width: 1024px) { + .lg\:grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } } diff --git a/templates/base.html b/templates/base.html index 6175cd4..304a724 100644 --- a/templates/base.html +++ b/templates/base.html @@ -5,7 +5,7 @@ - {% trans "URL Manager" %} + {% trans "GoLinks" %}