Initial commit: Bocken theme for webtrees
Nord-themed dark/light mode family tree theme with: - Floating glass-morphism header bar - Auto/light/dark theme toggle with Lucide icons - Smart SVG logo with theme-aware fill colors - Active page highlighting with per-menu Nord icon colors - Language button showing 2-letter abbreviation - Start page search form - Mobile responsive icon-only nav - Custom views inherited from ArgonLight
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="44.976448mm"
|
||||
height="47.592033mm"
|
||||
viewBox="0 0 44.976448 47.592033"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1167">
|
||||
<g
|
||||
id="g1171"
|
||||
transform="translate(-839.26546,-1493.2693)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1169" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1161">
|
||||
<g
|
||||
id="g1165"
|
||||
transform="translate(-870.22246,-1471.759)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1163" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1155">
|
||||
<g
|
||||
id="g1159"
|
||||
transform="translate(-879.11756,-1418.6585)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1157" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1125">
|
||||
<g
|
||||
id="g1129"
|
||||
transform="translate(-985.61606,-1491.5374)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1127" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1119">
|
||||
<g
|
||||
id="g1123"
|
||||
transform="translate(-984.96026,-1455.9641)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1121" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1113">
|
||||
<g
|
||||
id="g1117"
|
||||
transform="translate(-945.76396,-1416.9275)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1115" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1107">
|
||||
<g
|
||||
id="g1111"
|
||||
transform="translate(-898.03256,-1543.4085)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1109" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1101">
|
||||
<g
|
||||
id="g1105"
|
||||
transform="translate(-916.79086,-1510.9075)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1103" />
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath1083">
|
||||
<g
|
||||
id="g1087"
|
||||
transform="translate(-941.26306,-1493.7234)">
|
||||
<path
|
||||
d="M -77.063638,2283.1277 H 1922.9364 V 283.12772 H -77.063638 Z"
|
||||
id="path1085" />
|
||||
</g>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-96.294406,-113.9353)">
|
||||
<g
|
||||
id="g70"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,100.41097,127.47916)"
|
||||
clip-path="url(#clipPath1167)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="M 0,0 C 6.633,-3.91 14.348,-4.302 20.992,-1.732 20.009,5.333 15.93,11.893 9.31,15.795 2.69,19.697 -5.025,20.088 -11.669,17.519 -10.7,10.462 -6.62,3.901 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path72" />
|
||||
</g>
|
||||
<g
|
||||
id="g74"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,106.63384,133.21363)"
|
||||
clip-path="url(#clipPath1161)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="m 0,0 c -6.62,3.901 -14.335,4.293 -20.979,1.724 0.97,-7.058 5.049,-13.618 11.669,-17.519 6.633,-3.91 14.348,-4.301 20.992,-1.732 C 10.699,-10.462 6.62,-3.902 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path76" />
|
||||
</g>
|
||||
<g
|
||||
id="g78"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,107.19786,150.50755)"
|
||||
clip-path="url(#clipPath1155)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="M 0,0 C 6.633,-3.909 14.348,-4.301 20.992,-1.731 20.009,5.333 15.93,11.894 9.31,15.795 2.69,19.697 -5.026,20.088 -11.669,17.52 -10.7,10.461 -6.62,3.902 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path80" />
|
||||
</g>
|
||||
<g
|
||||
id="g98"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,129.16573,138.05504)"
|
||||
clip-path="url(#clipPath1125)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="M 0,0 C 6.644,-2.57 14.358,-2.178 20.992,1.732 27.612,5.633 31.691,12.194 32.661,19.25 26.017,21.82 18.302,21.429 11.682,17.527 5.062,13.625 0.982,7.065 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path100" />
|
||||
</g>
|
||||
<g
|
||||
id="g102"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,132.036,149.80546)"
|
||||
clip-path="url(#clipPath1119)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="M 0,0 C 6.62,3.901 10.699,10.461 11.669,17.519 5.025,20.088 -2.689,19.696 -9.31,15.795 -15.93,11.893 -20.009,5.333 -20.992,-1.732 -14.348,-4.301 -6.633,-3.91 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path104" />
|
||||
</g>
|
||||
<g
|
||||
id="g106"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,139.41553,131.41004)"
|
||||
clip-path="url(#clipPath1113)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="m -27.40181,13.441787 c 6.644,-2.57 14.359,-2.178 20.9920004,1.731 6.62000002,3.902 10.699,10.461 11.669,17.519 -6.644,2.569 -14.359,2.178 -20.9790004,-1.724 -6.62,-3.901 -10.7,-10.462 -11.682,-17.526"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path108" />
|
||||
</g>
|
||||
<g
|
||||
id="g110"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,116.37715,121.06317)"
|
||||
clip-path="url(#clipPath1107)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="m 0,0 c 1.271,7.579 -1.125,14.922 -5.904,20.205 -6.242,-3.433 -10.906,-9.591 -12.178,-17.169 -1.275,-7.594 1.123,-14.937 5.902,-20.22 C -5.936,-13.736 -1.273,-7.578 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path112" />
|
||||
</g>
|
||||
<g
|
||||
id="g114"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,123.25775,134.69217)"
|
||||
clip-path="url(#clipPath1101)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="m 0,0 c 1.271,7.579 -1.125,14.922 -5.904,20.206 -6.242,-3.434 -10.906,-9.592 -12.178,-17.17 -1.275,-7.593 1.123,-14.937 5.902,-20.22 C -5.937,-13.736 -1.273,-7.578 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path116" />
|
||||
</g>
|
||||
<g
|
||||
id="g126"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,125.36425,127.9867)"
|
||||
clip-path="url(#clipPath1083)"
|
||||
style="fill:#2e3440;fill-opacity:1">
|
||||
<path
|
||||
d="M 0,0 C 4.779,5.283 7.176,12.627 5.901,20.22 4.629,27.798 -0.035,33.956 -6.277,37.39 -11.055,32.106 -13.453,24.763 -12.18,17.184 -10.908,9.606 -6.244,3.448 0,0"
|
||||
style="fill:#2e3440;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path128" />
|
||||
</g>
|
||||
<g
|
||||
id="g10"
|
||||
transform="translate(54.26113,76.790102)"
|
||||
style="fill:#2e3440;fill-opacity:1;stroke:#2e3440;stroke-opacity:1">
|
||||
<path
|
||||
style="fill:#2e3440;fill-opacity:1;stroke:#2e3440;stroke-width:3;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 65.113709,84.638921 c -0.346049,-9.794303 8.85917,-32.693347 8.85917,-32.693347"
|
||||
id="path9" />
|
||||
<path
|
||||
style="fill:#2e3440;fill-opacity:1;stroke:#2e3440;stroke-width:3;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 65.108044,84.684262 c 0.346049,-9.794303 -8.85917,-32.693347 -8.85917,-32.693347"
|
||||
id="path9-7" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.0 KiB |
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 45.742326 80.310542"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
width="45.742325"
|
||||
height="80.310539"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs id="defs12" />
|
||||
<style id="style1">
|
||||
svg {
|
||||
--fill: #2E3440;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
svg {
|
||||
--fill: #D8DEE9;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<g
|
||||
class="stroke"
|
||||
id="branches"
|
||||
transform="translate(-42.033271,-37.145192)">
|
||||
<path
|
||||
d="m 65.113709,84.638921 c -0.346049,-9.794303 8.85917,-32.693347 8.85917,-32.693347"
|
||||
id="path1"
|
||||
style="fill:none;stroke:var(--fill);stroke-width:3;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 65.108044,84.684262 c 0.346049,-9.794303 -8.85917,-32.693347 -8.85917,-32.693347"
|
||||
id="path2"
|
||||
style="fill:none;stroke:var(--fill);stroke-width:3;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
class="leaf"
|
||||
id="g1"
|
||||
style="fill:var(--fill);fill-opacity:1">
|
||||
<path
|
||||
d="M 0,0 C 6.633,-3.91 14.348,-4.302 20.992,-1.732 20.009,5.333 15.93,11.893 9.31,15.795 2.69,19.697 -5.025,20.088 -11.669,17.519 -10.7,10.462 -6.62,3.901 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,4.116564,13.543871)"
|
||||
id="path3"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="m 0,0 c -6.62,3.901 -14.335,4.293 -20.979,1.724 0.97,-7.058 5.049,-13.618 11.669,-17.519 6.633,-3.91 14.348,-4.301 20.992,-1.732 C 10.699,-10.462 6.62,-3.902 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,10.339434,19.278333)"
|
||||
id="path4"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="M 0,0 C 6.633,-3.909 14.348,-4.301 20.992,-1.731 20.009,5.333 15.93,11.894 9.31,15.795 2.69,19.697 -5.026,20.088 -11.669,17.52 -10.7,10.461 -6.62,3.902 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,10.903454,36.572256)"
|
||||
id="path5"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="M 0,0 C 6.644,-2.57 14.358,-2.178 20.992,1.732 27.612,5.633 31.691,12.194 32.661,19.25 26.017,21.82 18.302,21.429 11.682,17.527 5.062,13.625 0.982,7.065 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,32.871328,24.119748)"
|
||||
id="path6"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="M 0,0 C 6.62,3.901 10.699,10.461 11.669,17.519 5.025,20.088 -2.689,19.696 -9.31,15.795 -15.93,11.893 -20.009,5.333 -20.992,-1.732 -14.348,-4.301 -6.633,-3.91 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,35.741597,35.870171)"
|
||||
id="path7"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="m -27.40181,13.441787 c 6.644,-2.57 14.359,-2.178 20.9920004,1.731 6.62000002,3.902 10.699,10.461 11.669,17.519 -6.644,2.569 -14.359,2.178 -20.9790004,-1.724 -6.62,-3.901 -10.7,-10.462 -11.682,-17.526"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,43.12113,17.474745)"
|
||||
id="path8"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="m 0,0 c 1.271,7.579 -1.125,14.922 -5.904,20.205 -6.242,-3.433 -10.906,-9.591 -12.178,-17.169 -1.275,-7.594 1.123,-14.937 5.902,-20.22 C -5.936,-13.736 -1.273,-7.578 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,20.082753,7.127875)"
|
||||
id="path9"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="m 0,0 c 1.271,7.579 -1.125,14.922 -5.904,20.206 -6.242,-3.434 -10.906,-9.592 -12.178,-17.17 -1.275,-7.593 1.123,-14.937 5.902,-20.22 C -5.937,-13.736 -1.273,-7.578 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,26.963346,20.756878)"
|
||||
id="path10"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
<path
|
||||
d="M 0,0 C 4.779,5.283 7.176,12.627 5.901,20.22 4.629,27.798 -0.035,33.956 -6.277,37.39 -11.055,32.106 -13.453,24.763 -12.18,17.184 -10.908,9.606 -6.244,3.448 0,0"
|
||||
transform="matrix(0.35277777,0,0,-0.35277777,29.06985,14.051408)"
|
||||
id="path11"
|
||||
style="fill:var(--fill);fill-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
class="fill"
|
||||
d="m 23.308833,63.179301 -3.288947,-3.831872 2.16535,-2.433461 1.123597,-1.262592 1.119364,1.257653 2.169936,2.4384 z M 37.853155,39.714993 c -0.02117,0.08396 -0.9652,3.0988 -3.220508,5.991225 -1.128536,1.453444 -2.574573,2.872317 -4.37515,3.93065 -1.617486,0.947914 -3.517195,1.617839 -5.820481,1.786467 l -1.128183,-1.267531 -1.127125,1.266825 C 19.838911,51.249415 17.912391,50.557971 16.276561,49.58254 13.551705,47.957293 11.640003,45.483263 10.434208,43.388115 9.8309581,42.34354 9.4048026,41.401624 9.134222,40.732051 8.9991081,40.397265 8.902447,40.131271 8.8414165,39.954529 8.8107248,39.865982 8.7892053,39.800013 8.7761526,39.75909 l -0.013053,-0.04233 -0.00212,-0.006 L 8.374688,38.405835 H 0.87287218 v 3.653366 H 5.7302693 c 0.5323417,1.327503 1.5515166,3.495323 3.2441444,5.720645 1.3409083,1.757539 3.1143223,3.553177 5.4257223,4.937477 1.423105,0.854428 3.055761,1.541992 4.884914,1.960034 l -1.365956,1.534936 -2.751314,3.091744 4.069998,4.741686 c -1.8415,0.426861 -3.481212,1.128536 -4.909256,1.995664 -3.439936,2.087739 -5.6744305,5.06095 -7.0735472,7.485944 -0.7094361,1.234017 -1.2043833,2.33292 -1.5250583,3.129845 H 0.87287218 v 3.653366 H 8.3746915 l 0.3869972,-1.306689 c 0.017992,-0.07479 0.9574388,-3.071988 3.1996943,-5.959122 1.120775,-1.448505 2.556934,-2.865966 4.343753,-3.928886 1.594908,-0.94615 3.464983,-1.623483 5.726994,-1.814336 l 1.276703,1.486959 1.276703,-1.486959 c 2.304697,0.193675 4.202641,0.89147 5.8166,1.865136 2.703336,1.631245 4.598811,4.097514 5.794022,6.182431 0.597605,1.039283 1.01988,1.975908 1.288344,2.640894 0.134056,0.33267 0.229658,0.597253 0.289983,0.772583 0.02999,0.08784 0.05151,0.153459 0.06456,0.194028 l 0.01305,0.04198 0.0014,0.0056 0.385939,1.306336 h 7.502877 V 76.657176 H 40.885985 C 40.357172,75.336729 39.347522,73.18549 37.673944,70.973573 36.344677,69.222384 34.586433,67.430273 32.294788,66.041387 30.865333,65.173554 29.224563,64.47082 27.3813,64.044312 L 31.450238,59.304037 28.698572,56.21194 27.33438,54.679121 c 1.829153,-0.417336 3.461456,-1.104195 4.884208,-1.957917 3.46957,-2.081036 5.72135,-5.0673 7.129639,-7.505347 0.716845,-1.244953 1.216025,-2.353733 1.538111,-3.156656 h 4.855986 v -3.653366 h -7.502877 z"
|
||||
id="path12"
|
||||
style="fill:var(--fill);fill-opacity:1;stroke-width:0.352778" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\Auth;
|
||||
use Fisharebest\Webtrees\Fact;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\AddNewFact;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\DeleteRecord;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\EditFactPage;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\EditRawRecordPage;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\ReorderFamiliesPage;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\ReorderMediaPage;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\ReorderNamesPage;
|
||||
use Fisharebest\Webtrees\I18N;
|
||||
use Fisharebest\Webtrees\Individual;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
// Added by me
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\AddSpouseToIndividualPage;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\LinkSpouseToIndividualPage;
|
||||
use Fisharebest\Webtrees\Http\RequestHandlers\AddChildToIndividualPage;
|
||||
// End added
|
||||
|
||||
/**
|
||||
* @var bool $can_upload_media
|
||||
* @var Collection<int,Fact> $clipboard_facts
|
||||
* @var Individual $record
|
||||
* @var Collection<int,string> $shares
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<div class="dropdown wt-page-menu">
|
||||
<button class="btn btn-primary dropdown-toggle wt-page-menu-button" type="button" id="page-menu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<?= view('icons/menu') ?>
|
||||
<?= I18N::translate('edit') ?>
|
||||
</button>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-end wt-page-menu-items" aria-labelledby="page-menu">
|
||||
<?php if ($shares->isNotEmpty()) : ?>
|
||||
<button class="dropdown-item" data-bs-toggle="modal" data-bs-target="#wt-shares-modal">
|
||||
<?= view('icons/share') ?>
|
||||
<?= I18N::translate('Share') ?>
|
||||
</button>
|
||||
|
||||
<hr>
|
||||
<?php endif ?>
|
||||
|
||||
<a class="dropdown-item" href="<?= e(route(AddNewFact::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref(), 'fact' => 'NAME'])) ?>">
|
||||
<?= view('icons/add') ?>
|
||||
<?= I18N::translate('Add a name') ?>
|
||||
</a>
|
||||
|
||||
<?php if ($record->facts(['NAME'], false, null, true)->count() > 1) : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(ReorderNamesPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/reorder') ?>
|
||||
<?= I18N::translate('Re-order names') ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<div class="dropdown-item disabled">
|
||||
<?= view('icons/spacer') ?>
|
||||
<?= I18N::translate('Re-order names') ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
|
||||
<?php if ($record->facts(['SEX'], false, null, true)->isEmpty()) : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(AddNewFact::class, ['fact' => 'SEX', 'tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/edit') ?>
|
||||
<?= I18N::translate('Edit the sex') ?>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
|
||||
<?php foreach ($record->facts(['SEX'], false, null, true) as $fact) : ?>
|
||||
<?php if ($fact->canEdit()) : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(EditFactPage::class, ['xref' => $record->xref(), 'fact_id' => $fact->id(), 'tree' => $record->tree()->name()])) ?>">
|
||||
<?= view('icons/edit') ?>
|
||||
<?= I18N::translate('Edit the sex') ?>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
|
||||
<?php if ($record->spouseFamilies()->count() > 1 || $record->childFamilies()->count() > 1) : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(ReorderFamiliesPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/reorder') ?>
|
||||
<?= I18N::translate('Re-order families') ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<div class="dropdown-item disabled">
|
||||
<?= view('icons/spacer') ?>
|
||||
<?= I18N::translate('Re-order families') ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<!-- ADDED BY ME -->
|
||||
<a class="dropdown-item" href="<?= e(route(AddSpouseToIndividualPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/add') ?>
|
||||
<?= I18N::translate($record->sex() === 'F' ? 'Add a husband' : 'Add a wife') ?>
|
||||
</a>
|
||||
<a class="dropdown-item" href="<?= e(route(LinkSpouseToIndividualPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/link') ?>
|
||||
<?= I18N::translate($record->sex() === 'F' ? 'Add a husband using an existing individual' : 'Add a wife using an existing individual') ?>
|
||||
</a>
|
||||
|
||||
<a class="dropdown-item" href="<?= e(route(AddChildToIndividualPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/individual') ?>
|
||||
<?= I18N::translate('Add a child') ?>
|
||||
</a>
|
||||
<!-- END ADDED -->
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
|
||||
<?php if ($can_upload_media) : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(AddNewFact::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref(), 'fact' => 'OBJE'])) ?>">
|
||||
<?= view('icons/add') ?>
|
||||
<?= I18N::translate('Add a media object') ?>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if ($record->facts(['OBJE'], false, null, true)->count() > 1) : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(ReorderMediaPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/reorder') ?>
|
||||
<?= I18N::translate('Re-order media') ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<div class="dropdown-item disabled">
|
||||
<?= view('icons/spacer') ?>
|
||||
<?= I18N::translate('Re-order media') ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if ($clipboard_facts->isNotEmpty()) : ?>
|
||||
<div class="dropdown-divider"></div>
|
||||
|
||||
<?= view('record-page-menu-clipboard', ['clipboard_facts' => $clipboard_facts, 'record' => $record]) ?>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
|
||||
<a class="dropdown-item" href="#" data-wt-confirm="<?= I18N::translate('Are you sure you want to delete “%s”?', strip_tags($record->fullName())) ?>" data-wt-post-url="<?= e(route(DeleteRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/delete') ?>
|
||||
<?= I18N::translate('Delete') ?>
|
||||
</a>
|
||||
|
||||
<?php if (Auth::isAdmin() || $record->tree()->getPreference('SHOW_GEDCOM_RECORD') === '1') : ?>
|
||||
<a class="dropdown-item" href="<?= e(route(EditRawRecordPage::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) ?>">
|
||||
<?= view('icons/edit') ?>
|
||||
<?= I18N::translate('Edit the raw GEDCOM') ?>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,25 @@
|
||||
<input type="number" id="family-page" />
|
||||
|
||||
<?= view('::lists/families-table', get_defined_vars()); ?>
|
||||
|
||||
<script>
|
||||
window.onload = function() {
|
||||
var table = $(".wt-table-family").DataTable();
|
||||
var pageInput = $("#family-page");
|
||||
var queries = new URLSearchParams(window.location.search);
|
||||
|
||||
pageInput.on('keyup', function () {
|
||||
setPage(this.value);
|
||||
});
|
||||
table.on('page.dt', function () {
|
||||
pageInput.val(table.page() + 1);
|
||||
queries.set("page", table.page() + 1);
|
||||
window.history.pushState( {} , '', '?' + queries.toString() );
|
||||
});
|
||||
|
||||
setPage(queries.get("page"));
|
||||
function setPage(page){
|
||||
table.page(page - 1).draw('page');
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,25 @@
|
||||
<input type="number" id="individual-page" />
|
||||
|
||||
<?= view('::lists/individuals-table', get_defined_vars()); ?>
|
||||
|
||||
<script>
|
||||
window.onload = function() {
|
||||
var table = $(".wt-table-individual").DataTable();
|
||||
var pageInput = $("#individual-page");
|
||||
var queries = new URLSearchParams(window.location.search);
|
||||
|
||||
pageInput.on('keyup', function () {
|
||||
setPage(this.value);
|
||||
});
|
||||
table.on('page.dt', function () {
|
||||
pageInput.val(table.page() + 1);
|
||||
queries.set("page", table.page() + 1);
|
||||
window.history.pushState( {} , '', '?' + queries.toString() );
|
||||
});
|
||||
|
||||
setPage(queries.get("page"));
|
||||
function setPage(page){
|
||||
table.page(page - 1).draw('page');
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\I18N;
|
||||
|
||||
/**
|
||||
* @var string $block
|
||||
* @var string $content
|
||||
* @var string $config_url
|
||||
* @var int $id
|
||||
* @var string $title
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<div class="mb-4 wt-block wt-block-<?= e($block) ?>" id="block-<?= e($id) ?>">
|
||||
<h3 class="wt-block-header wt-block-header-<?= e($block) ?>">
|
||||
<?php if ($config_url !== '') : ?>
|
||||
<a class="btn btn-link" href="<?= e($config_url) ?>" title="<?= I18N::translate('Preferences') ?>">
|
||||
<?= view('icons/preferences') ?>
|
||||
<span class="visually-hidden"><?= I18N::translate('Preferences') ?></span>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
<?= $title ?>
|
||||
</h3>
|
||||
<div class="wt-block-content wt-block-content-<?= e($block) ?>">
|
||||
<?= $content ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\I18N;
|
||||
use Fisharebest\Webtrees\Tree;
|
||||
use Fisharebest\Webtrees\View;
|
||||
|
||||
/**
|
||||
* @var string $individual_list
|
||||
* @var Tree $tree
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<form method="post" action="<?= e(route('module', ['module' => 'descendancy', 'action' => 'Descendants', 'tree' => $tree->name()])) ?>" onsubmit="return false;">
|
||||
<div class="form-group">
|
||||
<input type="search" name="sb_desc_name" id="sb_desc_name" class="form-control" placeholder="<?= I18N::translate('Search') ?>">
|
||||
<?= csrf_field() ?>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div id="sb_desc_content">
|
||||
<ul>
|
||||
<?= $individual_list ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<?php View::push('javascript') ?>
|
||||
<script>
|
||||
function dsearchQ() {
|
||||
var query = $("#sb_desc_name").val();
|
||||
if (query.length>1) {
|
||||
$("#sb_desc_content").load(<?= json_encode(route('module', ['module' => 'descendancy', 'action' => 'Search', 'tree' => $tree->name(), 'search' => '']), JSON_THROW_ON_ERROR) ?> + encodeURIComponent(query));
|
||||
}
|
||||
}
|
||||
|
||||
$("#sb_desc_name").focus(function(){this.select();});
|
||||
$("#sb_desc_name").blur(function(){if (this.value === "") this.value="<?= I18N::translate('Search') ?>";});
|
||||
var dtimerid = null;
|
||||
$("#sb_desc_name").keyup(function(e) {
|
||||
if (dtimerid) window.clearTimeout(dtimerid);
|
||||
dtimerid = window.setTimeout("dsearchQ()", 500);
|
||||
});
|
||||
|
||||
$("#sb_desc_content").on("click", ".sb_desc_indi", function() {
|
||||
var self = $(this),
|
||||
state = self.children(".plusminus"),
|
||||
target = self.siblings("div");
|
||||
if(state.hasClass("icon-plus")) {
|
||||
if (jQuery.trim(target.html())) {
|
||||
target.show("fast"); // already got content so just show it
|
||||
} else if (this.dataset.wtHref !== "#") {
|
||||
target
|
||||
.hide()
|
||||
.load(this.dataset.wtHref, function(response, status, xhr) {
|
||||
if(status === "success" && response !== "") {
|
||||
target.show("fast");
|
||||
}
|
||||
})
|
||||
}
|
||||
} else {
|
||||
target.hide("fast");
|
||||
}
|
||||
state.toggleClass("icon-minus icon-plus");
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
<?php View::endpush() ?>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\I18N;
|
||||
|
||||
/**
|
||||
* @var array<int,object{
|
||||
* block_id: int,
|
||||
* block_order: int,
|
||||
* gedcom_id: int,
|
||||
* header: string,
|
||||
* faqbody: string,
|
||||
* languages: string
|
||||
* }> $faqs
|
||||
* @var string $title
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<h2 class="wt-page-title"><?= $title ?></h2>
|
||||
|
||||
<ul class="faq">
|
||||
<?php foreach ($faqs as $id => $faq) : ?>
|
||||
<li>
|
||||
<a href="#faq<?= e($id) ?>"><?= e($faq->header) ?></a>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
||||
<?php foreach ($faqs as $id => $faq) : ?>
|
||||
<article class="faq_article">
|
||||
<header class="faq_title" id="faq<?= $id ?>">
|
||||
<h3><?= e($faq->header) ?></h3>
|
||||
<span class="faq_top faq_italic">
|
||||
<a href="#content"><?= I18N::translate('back to top') ?></a>
|
||||
</span>
|
||||
</header>
|
||||
<main class="faq_body">
|
||||
<?= str_starts_with($faq->faqbody, '<') ? $faq->faqbody : nl2br(e($faq->faqbody), false) ?>
|
||||
</main>
|
||||
</article>
|
||||
<?php endforeach ?>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\Gedcom;
|
||||
use Fisharebest\Webtrees\Individual;
|
||||
|
||||
/**
|
||||
* @var string $dir
|
||||
* @var int $end_year
|
||||
* @var array<object{
|
||||
* background: string,
|
||||
* birth_year: int,
|
||||
* death_year: int,
|
||||
* id: string,
|
||||
* individual: Individual,
|
||||
* row: int
|
||||
* }> $lifespans
|
||||
* @var int $max_rows
|
||||
* @var int $start_year
|
||||
* @var string $subtitle
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<p class="wt-lifespans-subtitle">
|
||||
<?= $subtitle ?>
|
||||
</p>
|
||||
|
||||
<div class="wt-lifespans-scale">
|
||||
<?php for ($year = $start_year; $year < $end_year; $year += 10) :
|
||||
?><div class="wt-lifespans-decade"><?= $year ?></div><?php
|
||||
endfor ?>
|
||||
</div>
|
||||
|
||||
<div class="wt-lifespans-individuals position-relative" style="height: <?= (5 + $max_rows) * 1.5 ?>rem; width: <?= ($end_year - $start_year) * 7 ?>px;">
|
||||
<?php foreach ($lifespans as $lifespan) : ?>
|
||||
<a href="#" data-bs-toggle="collapse" data-bs-target="#<?= e($lifespan->id) ?>" aria-expanded="false" aria-controls="<?= e($lifespan->id) ?>">
|
||||
<div class="wt-lifespans-individual position-absolute text-nowrap text-truncate <?= 'wt-sex-'.strtolower($lifespan->individual->sex() ?? 'u') ?>" dir="auto" style="<?= $dir === 'ltr' ? 'left' : 'right' ?>:<?= ($lifespan->birth_year - $start_year) * 7 ?>px; top:<?= $lifespan->row * 2.5 ?>rem; width:<?= ($lifespan->death_year - $lifespan->birth_year) * 7 + 5 ?>px;">
|
||||
<?= $lifespan->individual->fullName() ?>
|
||||
<?= strip_tags($lifespan->individual->lifespan()) ?>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<div class="wt-lifespans-summary collapse position-absolute" id="<?= e($lifespan->id) ?>" style="<?= $dir === 'ltr' ? 'left' : 'right' ?>:<?= (min($lifespan->birth_year, $end_year - 50) - $start_year) * 7 ?>px; top:<?= ($lifespan->row + 1.2) * 2.5 ?>rem; width:350px;">
|
||||
<a class="wt-lifespans-summary-link" href="<?= e($lifespan->individual->url()) ?>">
|
||||
<?= $lifespan->individual->fullName() ?>
|
||||
</a>
|
||||
|
||||
<?php foreach ($lifespan->individual->facts(array_merge(Gedcom::BIRTH_EVENTS, Gedcom::DEATH_EVENTS), true) as $fact) : ?>
|
||||
<?= $fact->summary() ?>
|
||||
<?php endforeach ?>
|
||||
</div>
|
||||
<?php endforeach ?>
|
||||
</div>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\Media;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
* @var Collection<int,Media> $media_list
|
||||
*/
|
||||
|
||||
?>
|
||||
<div class="wt-tab-album container px-0 py-4">
|
||||
<div class="row">
|
||||
<?php foreach ($media_list as $media) : ?>
|
||||
<figure class="figure text-center col-sm-6 col-md-4 col-lg-3 col-xl-3 wt-album-tab-figure">
|
||||
<?php foreach ($media->mediaFiles() as $media_file) : ?>
|
||||
<?= $media_file->displayImage(100, 100, 'contain', ['class' => 'img-thumbnail wt-album-tab-image']) ?>
|
||||
<?php endforeach ?>
|
||||
<figcaption class="figure-caption wt-album-tab-caption">
|
||||
<a href="<?= e($media->url()) ?>">
|
||||
<?= $media->fullName() ?>
|
||||
</a>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<?php endforeach ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\I18N;
|
||||
use Fisharebest\Webtrees\Place;
|
||||
|
||||
/**
|
||||
* @var array<array<Place>> $columns
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<div class="row">
|
||||
<h5 class="col list_label text-center">
|
||||
<?= I18N::translate('Place list') ?>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="row">
|
||||
<?php foreach ($columns as $column) : ?>
|
||||
<ul class="col wt-page-options-value me-1 list-unstyled">
|
||||
<?php foreach ($column as $place) : ?>
|
||||
<li><?= $place->fullName(true) ?></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endforeach ?>
|
||||
</div>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fisharebest\Webtrees\Contracts\TimestampInterface;
|
||||
use Fisharebest\Webtrees\Contracts\UserInterface;
|
||||
use Fisharebest\Webtrees\GedcomRecord;
|
||||
use Fisharebest\Webtrees\I18N;
|
||||
use Fisharebest\Webtrees\View;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
* @var int $id
|
||||
* @var int $limit_low
|
||||
* @var int $limit_high
|
||||
* @var Collection<int,object{record:GedcomRecord,time:TimestampInterface,user:UserInterface}> $rows
|
||||
* @var bool $show_date
|
||||
* @var bool $show_user
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<div class="list-group">
|
||||
<?php foreach ($rows as $n => $row): ?>
|
||||
<?php if ($n === $limit_low && $rows->count() > $limit_high): ?>
|
||||
<div>
|
||||
<button class="btn btn-sm btn-secondary my-3" id="show-more-<?= e($id) ?>">
|
||||
<?= view('icons/add') ?>
|
||||
<?= /* I18N: button label */ I18N::translate('show more') ?>
|
||||
</button>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<a href="<?= e($row->record->url()) ?>" class="<?= $n >= $limit_low && $rows->count() > $limit_high ? 'd-none' : '' ?> list-group-item list-group-item-action">
|
||||
<span class="d-block"><?= $row->record->fullName() ?></span>
|
||||
|
||||
<small class="d-block">
|
||||
<?php if ($show_user && $show_date): ?>
|
||||
<?= /* I18N: [a record was] Changed on <date/time> by <user> */ I18N::translate('Changed on %1$s by %2$s', view('components/datetime', ['timestamp' => $row->time]), e($row->record->lastChangeUser())) ?>
|
||||
<?php elseif ($show_date): ?>
|
||||
<?= /* I18N: [a record was] Changed on <date/time> */ I18N::translate('Changed on %1$s', view('components/datetime', ['timestamp' => $row->time])) ?>
|
||||
<?php elseif ($show_user): ?>
|
||||
<?= /* I18N: [a record was] Changed by <user> */ I18N::translate('Changed by %1$s', e($row->user->userName())) ?>
|
||||
<?php endif ?>
|
||||
</small>
|
||||
</a>
|
||||
<?php endforeach ?>
|
||||
</div>
|
||||
|
||||
<?php View::push('javascript') ?>
|
||||
<script>
|
||||
document.getElementById("show-more-<?= e($id) ?>").addEventListener("click", function (ev) {
|
||||
document.querySelectorAll("#block-<?= e($id) ?> .d-none").forEach(function (el) {
|
||||
el.classList.remove("d-none");
|
||||
});
|
||||
ev.target.parentNode.removeChild(ev.target);
|
||||
});
|
||||
</script>
|
||||
<?php View::endpush() ?>
|
||||
Reference in New Issue
Block a user