Use static logo in sidebar navigation
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
19
assets/static/img/avatar.svg
Normal file
|
@ -0,0 +1,19 @@
|
|||
<svg id="b96c2bed-161d-4a6a-88f8-007e67c638f7" data-name="Logo" xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 283.46 283.46">
|
||||
<defs>
|
||||
<style>
|
||||
.bbbce7e6-9f7c-4bc7-b65d-f87c42553021{fill:url(#b5078497-905e-430d-8c08-43e741159356);}.b35d0c34-aac5-4d6b-a247-c101a4f12738{fill:none;stroke:#eee;stroke-miterlimit:10;stroke-width:7px;}
|
||||
</style>
|
||||
<linearGradient id="b5078497-905e-430d-8c08-43e741159356" x1="75.44" y1="26.92" x2="208.02" y2="256.55"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#dab1d3"/>
|
||||
<stop offset="0.01" stop-color="#d84793"/>
|
||||
<stop offset="0.51" stop-color="#d6d900"/>
|
||||
<stop offset="0.76" stop-color="#1eb7c8"/>
|
||||
<stop offset="1" stop-color="#3c55a2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<circle class="bbbce7e6-9f7c-4bc7-b65d-f87c42553021" cx="141.73" cy="141.73" r="132.55"/>
|
||||
<path id="ad49426f-1fb1-4b02-9f9e-efa82492899f" data-name="Logo Pfad" class="b35d0c34-aac5-4d6b-a247-c101a4f12738"
|
||||
d="M233.41,185.29l-4.62,25.54M40.41,186.13l15.2,15.06M157.05,55.31,55.65,200.75a.11.11,0,0,0,.08.16l172.9,9.91a.1.1,0,0,0,.09-.14L157.23,55.32A.1.1,0,0,0,157.05,55.31ZM136.16,41.24,40,185.93a.13.13,0,0,0,.11.2l192.76-.84a.13.13,0,0,0,.1-.2L136.38,41.24A.13.13,0,0,0,136.16,41.24Zm.12-.16,20.87,14.08"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 510 KiB After Width: | Height: | Size: 510 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 676 B After Width: | Height: | Size: 676 B |
Before Width: | Height: | Size: 82 KiB |
|
@ -3,7 +3,7 @@
|
|||
"name": "PhotoPrism",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/static/favicons/favicon.png",
|
||||
"src": "/static/img/favicon.png",
|
||||
"sizes": "723x729",
|
||||
"type": "image/png"
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
<svg id="aada7afb-57cb-4a2f-9ce3-d521148cffca" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.ef58eb60-643f-42ae-a72e-16eb946c6bd0{fill:none;stroke:#1d1d1b;stroke-miterlimit:10;stroke-width:5px;}</style></defs><path id="f89ef285-ae36-434c-b97c-f4d23d413907" data-name="Logo Pfad" class="ef58eb60-643f-42ae-a72e-16eb946c6bd0" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 679 B |
|
@ -1 +0,0 @@
|
|||
<svg id="fd7d12b2-7955-4c74-8a9f-596890fb42bc" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.a689307f-cb30-4208-94fd-7cb41314ae7b{fill:none;stroke:#1d1d1b;stroke-miterlimit:10;stroke-width:6px;}</style></defs><path id="f762f87b-8f47-4f76-a6bd-499669f269d9" data-name="Logo Pfad" class="a689307f-cb30-4208-94fd-7cb41314ae7b" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 679 B |
|
@ -1 +0,0 @@
|
|||
<svg id="e2fba15c-1867-47be-8ea5-1e47bc66eb28" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.a45bbecd-4f41-4ae1-ad91-79b2603a7a49{fill:none;stroke:#1d1d1b;stroke-miterlimit:10;stroke-width:7px;}</style></defs><path id="be878b2a-1320-43bb-9fe9-af073b68769c" data-name="Logo Pfad" class="a45bbecd-4f41-4ae1-ad91-79b2603a7a49" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 679 B |
|
@ -1 +0,0 @@
|
|||
<svg id="b6f816b8-2ec9-4341-9df4-026397ed8ecb" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.ba518a38-ee1f-413e-9d3c-314e98d01903{fill:none;stroke:#1d1d1b;stroke-miterlimit:10;stroke-width:4px;}</style></defs><path id="e47e55cb-4800-4b2c-9d8d-6a55eeeef919" data-name="Logo Pfad" class="ba518a38-ee1f-413e-9d3c-314e98d01903" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 679 B |
|
@ -1 +0,0 @@
|
|||
<svg id="b01a508d-b59d-44f0-8be5-eca2aadd9bc2" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 253.78 224.78"><defs><style>.abae6701-d59a-4183-bf31-f7ca6639fed3,.e9c06423-71c9-47d7-ac4f-57ab05968afa{fill:none;}.e9270bc6-2df5-4c14-bf42-90cfc87d474b{clip-path:url(#ba383851-496a-4a7b-95ff-56b7a97252c7);}.e9c06423-71c9-47d7-ac4f-57ab05968afa{stroke:#000;stroke-miterlimit:10;stroke-width:3px;}</style><clipPath id="ba383851-496a-4a7b-95ff-56b7a97252c7"><rect class="abae6701-d59a-4183-bf31-f7ca6639fed3" x="-47.38" y="5.33" width="370.54" height="215.11"/></clipPath></defs><g class="e9270bc6-2df5-4c14-bf42-90cfc87d474b"><path class="e9c06423-71c9-47d7-ac4f-57ab05968afa" d="M248.26,187.21l-5.79,32m-236.15-31,19.06,18.88M152.54,24.27,25.43,206.59a.13.13,0,0,0,.09.2l216.74,12.43a.13.13,0,0,0,.12-.18L152.76,24.29A.13.13,0,0,0,152.54,24.27ZM126.35,6.64,5.74,188a.16.16,0,0,0,.14.25l241.63-1a.16.16,0,0,0,.14-.25L126.63,6.64A.17.17,0,0,0,126.35,6.64Zm.15-.21,26.17,17.66"/></g></svg>
|
Before Width: | Height: | Size: 1 KiB |
|
@ -1 +0,0 @@
|
|||
<svg id="f0412afa-f5ff-46c0-a8cf-32eccda5603a" data-name="Logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 283.46 283.46"><defs><style>.ba6471e3-f613-4f0c-8400-79fcd950c464{fill:none;stroke-miterlimit:10;stroke-width:7px;stroke:url(#a4d62fc3-123d-4106-920d-b4b95dd64fd7);}</style><linearGradient id="a4d62fc3-123d-4106-920d-b4b95dd64fd7" x1="61.09" y1="67.37" x2="185.88" y2="283.5" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#dab1d3"/><stop offset="0" stop-color="#d84793"/><stop offset="0.36" stop-color="#d6d900"/><stop offset="0.67" stop-color="#1eb7c8"/><stop offset="1" stop-color="#3c55a2"/></linearGradient></defs><path id="ffceab35-e25b-42bd-8037-c2b62b686bc4" data-name="Logo Pfad" class="ba6471e3-f613-4f0c-8400-79fcd950c464" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB |
|
@ -1 +0,0 @@
|
|||
<svg id="b96c2bed-161d-4a6a-88f8-007e67c638f7" data-name="Logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 283.46 283.46"><defs><style>.bbbce7e6-9f7c-4bc7-b65d-f87c42553021{fill:url(#b5078497-905e-430d-8c08-43e741159356);}.b35d0c34-aac5-4d6b-a247-c101a4f12738{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:5px;}</style><linearGradient id="b5078497-905e-430d-8c08-43e741159356" x1="75.44" y1="26.92" x2="208.02" y2="256.55" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#dab1d3"/><stop offset="0.01" stop-color="#d84793"/><stop offset="0.51" stop-color="#d6d900"/><stop offset="0.76" stop-color="#1eb7c8"/><stop offset="1" stop-color="#3c55a2"/></linearGradient></defs><circle class="bbbce7e6-9f7c-4bc7-b65d-f87c42553021" cx="141.73" cy="141.73" r="132.55"/><path id="ad49426f-1fb1-4b02-9f9e-efa82492899f" data-name="Logo Pfad" class="b35d0c34-aac5-4d6b-a247-c101a4f12738" d="M233.41,185.29l-4.62,25.54M40.41,186.13l15.2,15.06M157.05,55.31,55.65,200.75a.11.11,0,0,0,.08.16l172.9,9.91a.1.1,0,0,0,.09-.14L157.23,55.32A.1.1,0,0,0,157.05,55.31ZM136.16,41.24,40,185.93a.13.13,0,0,0,.11.2l192.76-.84a.13.13,0,0,0,.1-.2L136.38,41.24A.13.13,0,0,0,136.16,41.24Zm.12-.16,20.87,14.08"/></svg>
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1 +0,0 @@
|
|||
<svg id="b14cd102-2241-4742-aeeb-4ebca536e025" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 342.77 342.77"><defs><style>.e973c102-193a-465f-a6ce-238077277871,.fc6d24c6-9a63-4383-a118-2195cb69577d{fill:none;}.bb0146b0-9b01-4116-a7e2-79b9809a5f83{clip-path:url(#aced1c04-d137-4184-b323-97ff0384d552);}.b8904b42-fb62-4aa5-aae5-dc17759b185d{clip-path:url(#ed8c2ee9-6712-480b-97dc-53fde4d07a40);}.e973c102-193a-465f-a6ce-238077277871{stroke:#141412;stroke-miterlimit:10;stroke-width:3px;}.f5ddff88-48c1-46f9-a031-aee9bce94bd6{clip-path:url(#a1251993-bbf1-4548-8238-fa794c0bb4e3);}.ead6f749-dce3-444a-a4f2-acc8f3078dec{clip-path:url(#be2d8169-fac1-479f-9595-ff9fe03b48a4);}.a34fac52-8499-4455-a7f4-105abc9df09b,.f18ba0a9-054f-4ae5-b0d0-1c52cbadb98f{font-size:63px;fill:#141412;}.a34fac52-8499-4455-a7f4-105abc9df09b{font-family:Roboto-Regular, Roboto;}.beccc81f-4365-4373-9899-0d823daf22a9{letter-spacing:0.01em;}.ec36acec-7560-4cc7-a996-f8eb36ef5fbb{letter-spacing:0.01em;}.bf8a9fd3-72ac-44b7-b1db-6841c2e3b7c3{letter-spacing:0.01em;}.ab7ea333-5d0f-46b3-aa31-a0e9b6a570d5{letter-spacing:-0.01em;}.f18ba0a9-054f-4ae5-b0d0-1c52cbadb98f{font-family:Roboto-Light, Roboto;font-weight:300;letter-spacing:0em;}.a1c74a14-667e-420f-8ecb-79364b36eb33{letter-spacing:0.01em;}.a5f515e4-173e-416e-b367-cf57e24c9bf3{letter-spacing:0em;}.b6eb0847-9369-4e0b-bcf6-7f9ec038fd4c{letter-spacing:0em;}.e138f84f-74e3-43c0-81f5-2b4cc59558be{letter-spacing:0em;}</style><clipPath id="aced1c04-d137-4184-b323-97ff0384d552"><rect class="fc6d24c6-9a63-4383-a118-2195cb69577d" x="12.89" y="201.65" width="321" height="126"/></clipPath><clipPath id="ed8c2ee9-6712-480b-97dc-53fde4d07a40"><rect class="fc6d24c6-9a63-4383-a118-2195cb69577d" x="-44.79" y="40.23" width="457.74" height="262.31"/></clipPath><clipPath id="a1251993-bbf1-4548-8238-fa794c0bb4e3"><rect class="fc6d24c6-9a63-4383-a118-2195cb69577d" x="58.39" y="20.65" width="232" height="126"/></clipPath><clipPath id="be2d8169-fac1-479f-9595-ff9fe03b48a4"><rect class="fc6d24c6-9a63-4383-a118-2195cb69577d" x="-46.29" y="40.23" width="457.74" height="262.31"/></clipPath></defs><g class="bb0146b0-9b01-4116-a7e2-79b9809a5f83"><g class="b8904b42-fb62-4aa5-aae5-dc17759b185d"><path class="e973c102-193a-465f-a6ce-238077277871" d="M319.18,262l-7.06,39.05m-288-37.76,23.24,23m155.07-223-155,222.31a.17.17,0,0,0,.12.25L311.86,301a.15.15,0,0,0,.15-.22L202.72,63.35A.15.15,0,0,0,202.46,63.33ZM170.52,41.82,23.45,263a.2.2,0,0,0,.17.31L318.27,262a.2.2,0,0,0,.16-.31L170.86,41.82A.21.21,0,0,0,170.52,41.82Zm.18-.25,31.91,21.54"/></g></g><g class="f5ddff88-48c1-46f9-a031-aee9bce94bd6"><g class="ead6f749-dce3-444a-a4f2-acc8f3078dec"><path class="e973c102-193a-465f-a6ce-238077277871" d="M317.68,262l-7.06,39.05m-288-37.76,23.24,23M201,63.33,46,285.64a.17.17,0,0,0,.12.25L310.36,301a.15.15,0,0,0,.15-.22L201.22,63.35A.15.15,0,0,0,201,63.33ZM169,41.82,22,263a.2.2,0,0,0,.17.31L316.77,262a.2.2,0,0,0,.16-.31L169.36,41.82A.21.21,0,0,0,169,41.82Zm.18-.25,31.91,21.54"/></g></g><text class="a34fac52-8499-4455-a7f4-105abc9df09b" transform="translate(5.42 195.82)"><tspan class="beccc81f-4365-4373-9899-0d823daf22a9">P</tspan><tspan class="ec36acec-7560-4cc7-a996-f8eb36ef5fbb" x="40.37" y="0">h</tspan><tspan class="bf8a9fd3-72ac-44b7-b1db-6841c2e3b7c3" x="75.83" y="0">o</tspan><tspan class="ab7ea333-5d0f-46b3-aa31-a0e9b6a570d5" x="112.33" y="0">t</tspan><tspan x="132.53" y="0">o</tspan></text><text class="f18ba0a9-054f-4ae5-b0d0-1c52cbadb98f" transform="translate(174.45 195.82)">P<tspan class="a1c74a14-667e-420f-8ecb-79364b36eb33" x="38.98" y="0">r</tspan><tspan class="a5f515e4-173e-416e-b367-cf57e24c9bf3" x="60.68" y="0">i</tspan><tspan class="b6eb0847-9369-4e0b-bcf6-7f9ec038fd4c" x="74.55" y="0">s</tspan><tspan class="e138f84f-74e3-43c0-81f5-2b4cc59558be" x="106.76" y="0">m</tspan></text></svg>
|
Before Width: | Height: | Size: 3.8 KiB |
|
@ -1 +0,0 @@
|
|||
<svg id="a0b199e9-6da2-46f8-8ebb-dd71d98aec02" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 337.21 337.21"><defs><style>.a10ae2a7-444f-4254-a900-9c11d0ab8904,.b267ac74-1357-45cc-aa87-7cd83fecb121{fill:none;}.f7705130-cc59-414a-bb85-8537518d623b{clip-path:url(#a837ef03-6a65-4834-a0ae-07625eb90654);}.f54c38d1-bc6a-4aa5-8958-7189a4ae180b{clip-path:url(#b4582fdc-eb91-41a0-add5-069bf284b444);}.b267ac74-1357-45cc-aa87-7cd83fecb121{stroke:#fff;stroke-miterlimit:10;stroke-width:3px;}.be83b9b2-08bd-401d-b1b1-ba9de8e1e578{clip-path:url(#a433b5fa-a934-4b9f-9502-df7b281a6109);}.b7a9375a-f86a-40c6-b6d3-399c93347273{clip-path:url(#fba42c6c-43e1-4c2e-bd9b-1b9b8b9554b5);}.a7db60ef-bef9-48d1-bb7b-04bd1dc72af8,.b18d31a8-c3f3-4259-99bf-648b06fee602{font-size:62.49px;fill:#fff;}.b18d31a8-c3f3-4259-99bf-648b06fee602{font-family:Roboto-Regular, Roboto;}.e8c9e044-ce23-43de-95f1-8615ad27c8d9{letter-spacing:0.01em;}.ac82161d-9a49-4543-812c-bd7339e86130{letter-spacing:0.01em;}.ac60d1b6-fa98-4560-96d5-a7c4cc7996d6{letter-spacing:0.01em;}.bb80cc05-49fd-49f5-9aa5-60a29aecbb1a{letter-spacing:-0.01em;}.a7db60ef-bef9-48d1-bb7b-04bd1dc72af8{font-family:Roboto-Light, Roboto;font-weight:300;}.ff82efb9-d52a-4b4b-81c7-7e96a2d6f50e{letter-spacing:0em;}.ff7da4c8-31ad-4567-8562-0a521d197e84{letter-spacing:0.01em;}.f74aa262-a361-4ee8-9b4b-85fbd8cdb045{letter-spacing:0em;}.f5371299-275e-47d2-89b4-9377badce045{letter-spacing:0.01em;}</style><clipPath id="a837ef03-6a65-4834-a0ae-07625eb90654"><rect class="a10ae2a7-444f-4254-a900-9c11d0ab8904" x="11.53" y="195.88" width="318.42" height="124.99"/></clipPath><clipPath id="b4582fdc-eb91-41a0-add5-069bf284b444"><rect class="a10ae2a7-444f-4254-a900-9c11d0ab8904" x="-45.68" y="35.75" width="454.07" height="260.21"/></clipPath><clipPath id="a433b5fa-a934-4b9f-9502-df7b281a6109"><rect class="a10ae2a7-444f-4254-a900-9c11d0ab8904" x="56.66" y="16.34" width="230.14" height="124.99"/></clipPath><clipPath id="fba42c6c-43e1-4c2e-bd9b-1b9b8b9554b5"><rect class="a10ae2a7-444f-4254-a900-9c11d0ab8904" x="-47.17" y="35.75" width="454.07" height="260.21"/></clipPath></defs><g class="f7705130-cc59-414a-bb85-8537518d623b"><g class="f54c38d1-bc6a-4aa5-8958-7189a4ae180b"><path class="b267ac74-1357-45cc-aa87-7cd83fecb121" d="M315.36,255.75l-7,38.74M22.7,257l23.06,22.84M199.58,58.66,45.82,279.2a.15.15,0,0,0,.12.24l262.16,15a.15.15,0,0,0,.15-.21L199.84,58.69A.15.15,0,0,0,199.58,58.66ZM167.9,37.33,22,256.73a.19.19,0,0,0,.16.3l292.29-1.27a.2.2,0,0,0,.16-.31L168.23,37.33A.2.2,0,0,0,167.9,37.33Zm.17-.25,31.66,21.37"/></g></g><g class="be83b9b2-08bd-401d-b1b1-ba9de8e1e578"><g class="b7a9375a-f86a-40c6-b6d3-399c93347273"><path class="b267ac74-1357-45cc-aa87-7cd83fecb121" d="M198.09,58.66,44.33,279.2a.15.15,0,0,0,.12.24l262.16,15a.15.15,0,0,0,.15-.21L198.35,58.69A.15.15,0,0,0,198.09,58.66ZM313.87,255.75l-7,38.74M21.22,257l23.05,22.84M166.41,37.33,20.52,256.73a.19.19,0,0,0,.16.3L313,255.76a.2.2,0,0,0,.16-.31L166.74,37.33A.2.2,0,0,0,166.41,37.33Zm.18-.25,31.65,21.37"/></g></g><text class="b18d31a8-c3f3-4259-99bf-648b06fee602" transform="translate(4.12 190.09)"><tspan class="e8c9e044-ce23-43de-95f1-8615ad27c8d9">P</tspan><tspan class="ac82161d-9a49-4543-812c-bd7339e86130" x="40.05" y="0">h</tspan><tspan class="ac60d1b6-fa98-4560-96d5-a7c4cc7996d6" x="75.22" y="0">o</tspan><tspan class="bb80cc05-49fd-49f5-9aa5-60a29aecbb1a" x="111.42" y="0">t</tspan><tspan x="131.46" y="0">o</tspan></text><text class="a7db60ef-bef9-48d1-bb7b-04bd1dc72af8" transform="translate(171.8 190.09)"><tspan class="ff82efb9-d52a-4b4b-81c7-7e96a2d6f50e">P</tspan><tspan class="ff7da4c8-31ad-4567-8562-0a521d197e84" x="38.67" y="0">r</tspan><tspan class="f74aa262-a361-4ee8-9b4b-85fbd8cdb045" x="60.19" y="0">i</tspan><tspan class="f5371299-275e-47d2-89b4-9377badce045" x="73.95" y="0">s</tspan><tspan x="105.9" y="0">m</tspan></text></svg>
|
Before Width: | Height: | Size: 3.8 KiB |
|
@ -1 +0,0 @@
|
|||
<svg id="e5bd701c-7981-4bdd-acfb-47fadcaa44c8" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.bb89c75a-95bf-4e36-868a-d0a495503231{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:5px;}</style></defs><path id="a75bba96-13a5-4957-b73c-5eef2cf7ebdd" data-name="Logo Pfad" class="bb89c75a-95bf-4e36-868a-d0a495503231" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 676 B |
|
@ -1 +0,0 @@
|
|||
<svg id="bc281e5b-d714-4446-b661-358693364fc4" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.ef94ea8d-5a28-4e14-92aa-ea587f60c65b{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:7px;}</style></defs><path id="afc8505f-0837-4b99-a3d0-7a34597ea914" data-name="Logo Pfad" class="ef94ea8d-5a28-4e14-92aa-ea587f60c65b" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 676 B |
|
@ -1 +0,0 @@
|
|||
<svg id="b5229a43-bf20-4887-b140-75db5d5992a5" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 283.46 283.46"><defs><style>.bbb551ef-f3ef-434d-af0d-830274250289{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:4px;}</style></defs><path id="bb01f25a-992b-48f7-b07d-5f83e572bacc" data-name="Logo Pfad" class="bbb551ef-f3ef-434d-af0d-830274250289" d="M263.24,206.16l-5.8,32.09m-236.61-31,19.09,18.91M167.34,42.91,40,225.58a.13.13,0,0,0,.1.2l217.16,12.45a.12.12,0,0,0,.12-.17L167.55,42.93A.12.12,0,0,0,167.34,42.91ZM141.1,25.24,20.25,207a.16.16,0,0,0,.14.25l242.1-1.05a.17.17,0,0,0,.14-.26L141.37,25.24A.16.16,0,0,0,141.1,25.24Zm.14-.21,26.22,17.7"/></svg>
|
Before Width: | Height: | Size: 676 B |
|
@ -1 +0,0 @@
|
|||
<svg id="fc91d4d5-e710-4786-96df-8dbdd69a26a7" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 307.86 274.86"><defs><style>.b45ba6ae-d5a5-4d8e-9bfb-01a2e396654f,.e4513693-b131-43bb-a8bf-bbe7c0a43256{fill:none;}.e2b492dc-013f-4414-9261-055d4937b5fe{clip-path:url(#bb0cb192-a77d-4a56-8824-4794227d8e9f);}.b45ba6ae-d5a5-4d8e-9bfb-01a2e396654f{stroke:#fff;stroke-miterlimit:10;stroke-width:3px;}</style><clipPath id="bb0cb192-a77d-4a56-8824-4794227d8e9f"><rect class="e4513693-b131-43bb-a8bf-bbe7c0a43256" x="-56.99" y="5.77" width="451.84" height="262.31"/></clipPath></defs><g class="e2b492dc-013f-4414-9261-055d4937b5fe"><path class="b45ba6ae-d5a5-4d8e-9bfb-01a2e396654f" d="M303.51,227.55l-7.06,39.05m-288-37.76,23.24,23m155.06-223-155,222.32a.15.15,0,0,0,.12.24L296.2,266.59a.16.16,0,0,0,.15-.22L187.06,28.89A.16.16,0,0,0,186.79,28.87ZM154.86,7.36,7.79,228.53a.2.2,0,0,0,.16.31l294.65-1.28a.2.2,0,0,0,.17-.31L155.19,7.36A.2.2,0,0,0,154.86,7.36Zm.18-.25L187,28.65"/></g></svg>
|
Before Width: | Height: | Size: 1 KiB |
|
@ -21,8 +21,8 @@
|
|||
<meta name="description" content="{{ .config.SiteDescription }}"/>
|
||||
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="/static/favicons/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/favicons/favicon.png"/>
|
||||
<link rel="apple-touch-icon" href="/static/img/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/img/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/static/build/app.css?{{ .config.CSSHash }}">
|
||||
<link rel="manifest" href="/static/manifest.json">
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
<title>{{ .config.SiteTitle }}</title>
|
||||
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="/static/favicons/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/favicons/favicon.png"/>
|
||||
<link rel="apple-touch-icon" href="/static/img/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/img/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/static/build/app.css?{{ .config.CSSHash }}">
|
||||
<link rel="manifest" href="/static/manifest.json">
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
<meta name="description" content="{{ .config.SiteDescription }}"/>
|
||||
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="/static/favicons/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/favicons/favicon.png"/>
|
||||
<link rel="apple-touch-icon" href="/static/img/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/img/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/static/build/app.css?{{ .config.CSSHash }}">
|
||||
</head>
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
<meta name="description" content="{{ .config.SiteDescription }}"/>
|
||||
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="/static/favicons/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/favicons/favicon.png"/>
|
||||
<link rel="apple-touch-icon" href="/static/img/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/img/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/static/build/share.css?{{ .config.CSSHash }}">
|
||||
<link rel="manifest" href="/static/manifest.json">
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<meta name="description" content="{{ .config.SiteDescription }}"/>
|
||||
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="/static/favicons/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/favicons/favicon.png"/>
|
||||
<link rel="apple-touch-icon" href="/static/img/favicon.png">
|
||||
<link rel="icon" type="image/png" href="/static/img/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/static/build/app.css?{{ .config.CSSHash }}">
|
||||
<link rel="manifest" href="/static/manifest.json">
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
@click.stop="onLogoClick"
|
||||
v-show="!drawer"
|
||||
>
|
||||
<img src="/static/svg/logo-white-6pt.svg" alt="PhotoPrism">
|
||||
<img src="/static/img/logo.svg" alt="Logo">
|
||||
</v-avatar>
|
||||
</v-toolbar>
|
||||
<v-toolbar dark flat color="navigation darken-1" class="hidden-md-and-up">
|
||||
|
@ -32,9 +32,7 @@
|
|||
<v-list class="navigation-home">
|
||||
<v-list-tile class="p-navigation-logo">
|
||||
<v-list-tile-avatar class="clickable" @click.stop.prevent="openDocs">
|
||||
<div class="logo rainbow">
|
||||
<img src="/static/svg/logo-black-6pt.svg" alt="PhotoPrism">
|
||||
</div>
|
||||
<img class="logo" src="/static/img/avatar.svg" alt="Logo">
|
||||
</v-list-tile-avatar>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title class="title">
|
||||
|
|
|
@ -67,8 +67,8 @@
|
|||
this.player = new MediaElementPlayer(this.$el, {
|
||||
videoWidth: this.width,
|
||||
videoHeight: this.height,
|
||||
pluginPath: '/static/build/',
|
||||
shimScriptAccess: 'always',
|
||||
pluginPath: "/static/build/",
|
||||
shimScriptAccess: "always",
|
||||
forceLive: false,
|
||||
loop: false,
|
||||
stretching: true,
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
class="clickable"
|
||||
@click.stop.prevent="goHome"
|
||||
>
|
||||
<img src="/static/svg/logo-white-6pt.svg" alt="PhotoPrism">
|
||||
<img src="/static/img/logo.svg" alt="Logo">
|
||||
</v-avatar>
|
||||
</v-toolbar>
|
||||
<v-toolbar dark flat color="navigation darken-1">
|
||||
|
|
|
@ -511,7 +511,7 @@ func DownloadAlbum(router *gin.RouterGroup) {
|
|||
// type: string Thumbnail type, see photoprism.ThumbnailTypes
|
||||
func AlbumThumbnail(router *gin.RouterGroup) {
|
||||
router.GET("/albums/:uid/t/:token/:type", func(c *gin.Context) {
|
||||
if InvalidToken(c) {
|
||||
if InvalidPreviewToken(c) {
|
||||
c.Data(http.StatusForbidden, "image/svg+xml", albumIconSvg)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -175,7 +175,7 @@ func DislikeLabel(router *gin.RouterGroup) {
|
|||
// type: string Thumbnail type, see photoprism.ThumbnailTypes
|
||||
func LabelThumbnail(router *gin.RouterGroup) {
|
||||
router.GET("/labels/:uid/t/:token/:type", func(c *gin.Context) {
|
||||
if InvalidToken(c) {
|
||||
if InvalidPreviewToken(c) {
|
||||
c.Data(http.StatusForbidden, "image/svg+xml", labelIconSvg)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ type ByteCache struct {
|
|||
// type: string Thumbnail type, see photoprism.ThumbnailTypes
|
||||
func GetThumbnail(router *gin.RouterGroup) {
|
||||
router.GET("/t/:hash/:token/:type", func(c *gin.Context) {
|
||||
if InvalidToken(c) {
|
||||
if InvalidPreviewToken(c) {
|
||||
c.Data(http.StatusForbidden, "image/svg+xml", brokenIconSvg)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -124,15 +124,15 @@ func Auth(id string, resource acl.Resource, action acl.Action) session.Data {
|
|||
return sess
|
||||
}
|
||||
|
||||
// InvalidToken returns true if the token is invalid.
|
||||
func InvalidToken(c *gin.Context) bool {
|
||||
// InvalidPreviewToken returns true if the token is invalid.
|
||||
func InvalidPreviewToken(c *gin.Context) bool {
|
||||
token := c.Param("token")
|
||||
|
||||
if token == "" {
|
||||
token = c.Query("t")
|
||||
}
|
||||
|
||||
return service.Config().InvalidToken(token)
|
||||
return service.Config().InvalidPreviewToken(token)
|
||||
}
|
||||
|
||||
// InvalidDownloadToken returns true if the token is invalid.
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
// type: string Video type
|
||||
func GetVideo(router *gin.RouterGroup) {
|
||||
router.GET("/videos/:hash/:token/:type", func(c *gin.Context) {
|
||||
if InvalidToken(c) {
|
||||
if InvalidPreviewToken(c) {
|
||||
c.Data(http.StatusForbidden, "image/svg+xml", brokenIconSvg)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -75,10 +75,10 @@ func configAction(ctx *cli.Context) error {
|
|||
|
||||
// Additional path and file names.
|
||||
fmt.Printf("%-25s %s\n", "static-path", conf.StaticPath())
|
||||
fmt.Printf("%-25s %s\n", "static-build-path", conf.StaticBuildPath())
|
||||
fmt.Printf("%-25s %s\n", "favicons-path", conf.FaviconsPath())
|
||||
fmt.Printf("%-25s %s\n", "build-path", conf.BuildPath())
|
||||
fmt.Printf("%-25s %s\n", "img-path", conf.ImgPath())
|
||||
fmt.Printf("%-25s %s\n", "templates-path", conf.TemplatesPath())
|
||||
fmt.Printf("%-25s %s\n", "default-template", conf.DefaultTemplate())
|
||||
fmt.Printf("%-25s %s\n", "template-name", conf.TemplateName())
|
||||
fmt.Printf("%-25s %s\n", "cache-path", conf.CachePath())
|
||||
fmt.Printf("%-25s %s\n", "temp-path", conf.TempPath())
|
||||
fmt.Printf("%-25s %s\n", "config-file", conf.ConfigFile())
|
||||
|
@ -100,7 +100,7 @@ func configAction(ctx *cli.Context) error {
|
|||
|
||||
// Thumbnails, resampling and download security token.
|
||||
fmt.Printf("%-25s %s\n", "download-token", conf.DownloadToken())
|
||||
fmt.Printf("%-25s %s\n", "thumb-token", conf.PreviewToken())
|
||||
fmt.Printf("%-25s %s\n", "preview-token", conf.PreviewToken())
|
||||
fmt.Printf("%-25s %s\n", "thumb-filter", conf.ThumbFilter())
|
||||
fmt.Printf("%-25s %t\n", "thumb-uncached", conf.ThumbUncached())
|
||||
fmt.Printf("%-25s %d\n", "thumb-size", conf.ThumbSize())
|
||||
|
|
|
@ -41,8 +41,8 @@ func (c *Config) DownloadToken() string {
|
|||
return c.params.DownloadToken
|
||||
}
|
||||
|
||||
// InvalidToken returns true if the token is invalid.
|
||||
func (c *Config) InvalidToken(t string) bool {
|
||||
// InvalidPreviewToken returns true if the preview token is invalid.
|
||||
func (c *Config) InvalidPreviewToken(t string) bool {
|
||||
return c.PreviewToken() != t && c.DownloadToken() != t
|
||||
}
|
||||
|
||||
|
|
|
@ -143,8 +143,8 @@ func (c *Config) PublicConfig() ClientConfig {
|
|||
Experimental: c.Experimental(),
|
||||
Thumbnails: Thumbnails,
|
||||
Colors: colors.All.List(),
|
||||
JSHash: fs.Checksum(c.StaticBuildPath() + "/app.js"),
|
||||
CSSHash: fs.Checksum(c.StaticBuildPath() + "/app.css"),
|
||||
JSHash: fs.Checksum(c.BuildPath() + "/app.js"),
|
||||
CSSHash: fs.Checksum(c.BuildPath() + "/app.css"),
|
||||
Clip: txt.ClipDefault,
|
||||
PreviewToken: "public",
|
||||
DownloadToken: "public",
|
||||
|
@ -186,8 +186,8 @@ func (c *Config) GuestConfig() ClientConfig {
|
|||
Thumbnails: Thumbnails,
|
||||
DownloadToken: c.DownloadToken(),
|
||||
PreviewToken: c.PreviewToken(),
|
||||
JSHash: fs.Checksum(c.StaticBuildPath() + "/share.js"),
|
||||
CSSHash: fs.Checksum(c.StaticBuildPath() + "/share.css"),
|
||||
JSHash: fs.Checksum(c.BuildPath() + "/share.js"),
|
||||
CSSHash: fs.Checksum(c.BuildPath() + "/share.css"),
|
||||
Clip: txt.ClipDefault,
|
||||
}
|
||||
|
||||
|
@ -220,8 +220,8 @@ func (c *Config) UserConfig() ClientConfig {
|
|||
Thumbnails: Thumbnails,
|
||||
DownloadToken: c.DownloadToken(),
|
||||
PreviewToken: c.PreviewToken(),
|
||||
JSHash: fs.Checksum(c.StaticBuildPath() + "/app.js"),
|
||||
CSSHash: fs.Checksum(c.StaticBuildPath() + "/app.css"),
|
||||
JSHash: fs.Checksum(c.BuildPath() + "/app.js"),
|
||||
CSSHash: fs.Checksum(c.BuildPath() + "/app.css"),
|
||||
Clip: txt.ClipDefault,
|
||||
Server: NewRuntimeInfo(),
|
||||
}
|
||||
|
|
|
@ -273,7 +273,7 @@ func TestConfig_TensorFlowModelPath(t *testing.T) {
|
|||
assert.Equal(t, "/go/src/github.com/photoprism/photoprism/assets/nasnet", path)
|
||||
}
|
||||
|
||||
func TestConfig_HttpTemplatesPath(t *testing.T) {
|
||||
func TestConfig_TemplatesPath(t *testing.T) {
|
||||
ctx := CliTestContext()
|
||||
c := NewConfig(ctx)
|
||||
|
||||
|
@ -281,15 +281,7 @@ func TestConfig_HttpTemplatesPath(t *testing.T) {
|
|||
assert.Equal(t, "/go/src/github.com/photoprism/photoprism/assets/templates", path)
|
||||
}
|
||||
|
||||
func TestConfig_HttpFaviconsPath(t *testing.T) {
|
||||
ctx := CliTestContext()
|
||||
c := NewConfig(ctx)
|
||||
|
||||
path := c.FaviconsPath()
|
||||
assert.Equal(t, "/go/src/github.com/photoprism/photoprism/assets/static/favicons", path)
|
||||
}
|
||||
|
||||
func TestConfig_HttpStaticPath(t *testing.T) {
|
||||
func TestConfig_StaticPath(t *testing.T) {
|
||||
ctx := CliTestContext()
|
||||
c := NewConfig(ctx)
|
||||
|
||||
|
@ -297,14 +289,22 @@ func TestConfig_HttpStaticPath(t *testing.T) {
|
|||
assert.Equal(t, "/go/src/github.com/photoprism/photoprism/assets/static", path)
|
||||
}
|
||||
|
||||
func TestConfig_HttpStaticBuildPath(t *testing.T) {
|
||||
func TestConfig_BuildPath(t *testing.T) {
|
||||
ctx := CliTestContext()
|
||||
c := NewConfig(ctx)
|
||||
|
||||
path := c.StaticBuildPath()
|
||||
path := c.BuildPath()
|
||||
assert.Equal(t, "/go/src/github.com/photoprism/photoprism/assets/static/build", path)
|
||||
}
|
||||
|
||||
func TestConfig_ImgPath(t *testing.T) {
|
||||
ctx := CliTestContext()
|
||||
c := NewConfig(ctx)
|
||||
|
||||
path := c.ImgPath()
|
||||
assert.Equal(t, "/go/src/github.com/photoprism/photoprism/assets/static/img", path)
|
||||
}
|
||||
|
||||
func TestConfig_ClientConfig(t *testing.T) {
|
||||
c := TestConfig()
|
||||
|
||||
|
|
|
@ -85,8 +85,8 @@ func (c *Config) CreateDirectories() error {
|
|||
return createError(c.TensorFlowModelPath(), err)
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(c.StaticBuildPath(), os.ModePerm); err != nil {
|
||||
return createError(c.StaticBuildPath(), err)
|
||||
if err := os.MkdirAll(c.BuildPath(), os.ModePerm); err != nil {
|
||||
return createError(c.BuildPath(), err)
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(filepath.Dir(c.PIDFilename()), os.ModePerm); err != nil {
|
||||
|
|
|
@ -259,8 +259,8 @@ var GlobalFlags = []cli.Flag{
|
|||
},
|
||||
cli.StringFlag{
|
||||
Name: "preview-token",
|
||||
Usage: "`SECRET` url token for thumbnails and video streaming",
|
||||
Value: "static",
|
||||
Usage: "`SECRET` url token for preview images and video streaming",
|
||||
Value: "public",
|
||||
EnvVar: "PHOTOPRISM_PREVIEW_TOKEN",
|
||||
},
|
||||
cli.StringFlag{
|
||||
|
|
|
@ -57,8 +57,8 @@ func (c *Config) TemplateExists(name string) bool {
|
|||
return fs.FileExists(filepath.Join(c.TemplatesPath(), name))
|
||||
}
|
||||
|
||||
// DefaultTemplate returns the name of the default template (e.g. index.tmpl).
|
||||
func (c *Config) DefaultTemplate() string {
|
||||
// TemplateName returns the name of the default template (e.g. index.tmpl).
|
||||
func (c *Config) TemplateName() string {
|
||||
if c.TemplateExists(c.Settings().Templates.Default) {
|
||||
return c.Settings().Templates.Default
|
||||
}
|
||||
|
@ -66,17 +66,17 @@ func (c *Config) DefaultTemplate() string {
|
|||
return "index.tmpl"
|
||||
}
|
||||
|
||||
// FaviconsPath returns the favicons path.
|
||||
func (c *Config) FaviconsPath() string {
|
||||
return filepath.Join(c.StaticPath(), "favicons")
|
||||
}
|
||||
|
||||
// StaticPath returns the static server assets path (//server/static/*).
|
||||
// StaticPath returns the static assets path.
|
||||
func (c *Config) StaticPath() string {
|
||||
return filepath.Join(c.AssetsPath(), "static")
|
||||
}
|
||||
|
||||
// StaticBuildPath returns the static build path (//server/static/build/*).
|
||||
func (c *Config) StaticBuildPath() string {
|
||||
// BuildPath returns the static build path.
|
||||
func (c *Config) BuildPath() string {
|
||||
return filepath.Join(c.StaticPath(), "build")
|
||||
}
|
||||
|
||||
// ImgPath returns the static image path.
|
||||
func (c *Config) ImgPath() string {
|
||||
return filepath.Join(c.StaticPath(), "img")
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package server
|
|||
|
||||
import (
|
||||
"net/http"
|
||||
"path"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/photoprism/photoprism/internal/api"
|
||||
|
@ -9,12 +10,12 @@ import (
|
|||
)
|
||||
|
||||
func registerRoutes(router *gin.Engine, conf *config.Config) {
|
||||
// Static favicon file.
|
||||
router.StaticFile("/favicon.ico", conf.FaviconsPath()+"/favicon.ico")
|
||||
|
||||
// Other static assets like JS and CSS files.
|
||||
// Static assets like js, css and font files.
|
||||
router.Static("/static", conf.StaticPath())
|
||||
|
||||
// Site favicon image.
|
||||
router.StaticFile("/favicon.ico", path.Join(conf.ImgPath(), "favicon.ico"))
|
||||
|
||||
// Rainbow page.
|
||||
router.GET("/rainbow", func(c *gin.Context) {
|
||||
clientConfig := conf.PublicConfig()
|
||||
|
@ -147,6 +148,6 @@ func registerRoutes(router *gin.Engine, conf *config.Config) {
|
|||
// Default HTML page for client-side rendering and routing via VueJS.
|
||||
router.NoRoute(func(c *gin.Context) {
|
||||
clientConfig := conf.PublicConfig()
|
||||
c.HTML(http.StatusOK, conf.DefaultTemplate(), gin.H{"config": clientConfig})
|
||||
c.HTML(http.StatusOK, conf.TemplateName(), gin.H{"config": clientConfig})
|
||||
})
|
||||
}
|
||||
|
|