Merge branch 'master' into feature-tasklist
Conflicts: src/main/twirl/issues/commentform.scala.html src/main/twirl/issues/create.scala.html src/main/twirl/pulls/compare.scala.html src/main/twirl/wiki/edit.scala.html
@@ -8,7 +8,7 @@ Features
|
|||||||
--------
|
--------
|
||||||
The current version of GitBucket provides a basic features below:
|
The current version of GitBucket provides a basic features below:
|
||||||
|
|
||||||
- Public / Private Git repository (http access only)
|
- Public / Private Git repository (http and ssh access)
|
||||||
- Repository viewer and online file editing
|
- Repository viewer and online file editing
|
||||||
- Repository search (Code and Issues)
|
- Repository search (Code and Issues)
|
||||||
- Wiki
|
- Wiki
|
||||||
|
|||||||
732
etc/icons.svg
@@ -2,6 +2,7 @@
|
|||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
|
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
@@ -16,7 +17,16 @@
|
|||||||
inkscape:version="0.48.4 r9939"
|
inkscape:version="0.48.4 r9939"
|
||||||
sodipodi:docname="icons.svg">
|
sodipodi:docname="icons.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs4" />
|
id="defs4">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4044"
|
||||||
|
osb:paint="solid">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4046" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#ffffff"
|
pagecolor="#ffffff"
|
||||||
@@ -24,15 +34,15 @@
|
|||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1.4"
|
inkscape:zoom="0.7"
|
||||||
inkscape:cx="450.21999"
|
inkscape:cx="482.58197"
|
||||||
inkscape:cy="97.51519"
|
inkscape:cy="-83.92636"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1-9"
|
inkscape:current-layer="layer1-9"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="1366"
|
inkscape:window-width="1366"
|
||||||
inkscape:window-height="706"
|
inkscape:window-height="715"
|
||||||
inkscape:window-x="1912"
|
inkscape:window-x="-8"
|
||||||
inkscape:window-y="-8"
|
inkscape:window-y="-8"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
inkscape:snap-global="false"
|
inkscape:snap-global="false"
|
||||||
@@ -978,6 +988,716 @@
|
|||||||
id="path4310"
|
id="path4310"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
sodipodi:nodetypes="ccscc" />
|
sodipodi:nodetypes="ccscc" />
|
||||||
|
<path
|
||||||
|
id="path2991-7-1-4"
|
||||||
|
transform="translate(668.66057,1115.0272)"
|
||||||
|
d="m 359.99999,290.93362 c 0,57.59541 -46.6903,104.28572 -104.28571,104.28572 -57.59541,0 -104.28571,-46.69031 -104.28571,-104.28572 0,-57.5954 46.6903,-104.28571 104.28571,-104.28571 57.59541,0 104.28571,46.69031 104.28571,104.28571 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#b3b3b3;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
id="path2993-4-5-8"
|
||||||
|
d="m 359.99999,290.93362 c 0,57.59541 -46.6903,104.28572 -104.28571,104.28572 -57.59541,0 -104.28571,-46.69031 -104.28571,-104.28572 0,-57.5954 46.6903,-104.28571 104.28571,-104.28571 57.59541,0 104.28571,46.69031 104.28571,104.28571 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc"
|
||||||
|
transform="matrix(0.83611704,0,0,0.83611704,711.41194,1163.4493)" />
|
||||||
|
<rect
|
||||||
|
id="rect2995-0-2-8"
|
||||||
|
y="1378.4849"
|
||||||
|
x="916.58545"
|
||||||
|
height="99.396141"
|
||||||
|
width="20.706863"
|
||||||
|
style="fill:#b3b3b3;stroke:none;stroke-width:0.93666755999999995" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;stroke:#ffffff;stroke-width:2.92446065;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 884.0251,1366.2678 -64.6851,-36.2114 10.70013,55.9569 53.98497,-19.7455 z"
|
||||||
|
id="rect4046-3-4"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#b3b3b3;stroke:#b3b3b3;stroke-width:1.98877633;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 873.36878,1359.3959 -43.65605,-24.4345 6.99871,38.1562 36.65734,-13.7217 z"
|
||||||
|
id="rect4046-5"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#b3b3b3;stroke-width:13.63542366;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 1162.2186,1316.0972 c -0.2525,22.2049 -0.505,44.4098 -0.7575,66.6147 3.3299,0.032 6.6599,0.063 9.9898,0.095 -2.3515,2.3672 -4.703,4.7345 -7.0544,7.1018 31.3741,31.374 62.7482,62.7482 94.1223,94.1223 23.3412,-23.3412 46.6824,-46.6824 70.0236,-70.0236 -31.3741,-31.3899 -62.7483,-62.7798 -94.1224,-94.1697 -2.6197,2.6356 -5.2395,5.2711 -7.8593,7.9067 0.032,-3.6298 0.063,-7.2596 0.095,-10.8894 -21.4789,-0.2525 -42.9579,-0.505 -64.4368,-0.7575 z"
|
||||||
|
id="rect3075-11"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<rect
|
||||||
|
id="rect2995-0-2-8-6"
|
||||||
|
y="899.99463"
|
||||||
|
x="-1417.3273"
|
||||||
|
height="99.396141"
|
||||||
|
width="20.706863"
|
||||||
|
style="fill:#b3b3b3;stroke:none;stroke-width:0.93666755999999995"
|
||||||
|
transform="matrix(0,-1,1,0,0,0)" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:10.37699986;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 1172.5522,1326.6744 c -0.1922,16.8985 -0.3844,33.7973 -0.5765,50.6959 2.5342,0.024 5.0684,0.047 7.6026,0.072 -1.7896,1.8014 -3.5792,3.6031 -5.3686,5.4047 23.8766,23.8766 47.7533,47.7533 71.63,71.6301 17.7636,-17.7634 35.5269,-35.5268 53.2902,-53.2902 -23.8766,-23.8888 -47.7534,-47.7775 -71.6302,-71.6662 -1.9936,2.0058 -3.9873,4.0114 -5.9811,6.0172 0.024,-2.7624 0.047,-5.5247 0.072,-8.2872 -16.3463,-0.1921 -32.6925,-0.3843 -49.0386,-0.5764 z"
|
||||||
|
id="rect3075-11-7"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffffff;stroke:#b3b3b3;stroke-width:6.57334423;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none"
|
||||||
|
id="path3100-2"
|
||||||
|
sodipodi:cx="700"
|
||||||
|
sodipodi:cy="812.36218"
|
||||||
|
sodipodi:rx="10"
|
||||||
|
sodipodi:ry="10"
|
||||||
|
d="m 710,812.36218 c 0,5.52285 -4.47715,10 -10,10 -5.52285,0 -10,-4.47715 -10,-10 0,-5.52284 4.47715,-10 10,-10 5.52285,0 10,4.47716 10,10 z"
|
||||||
|
transform="matrix(1.2362333,-1.2362333,1.2362333,1.2362333,-667.98357,1217.7251)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#b3b3b3;stroke-width:10.80681515;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect4114"
|
||||||
|
width="45.086407"
|
||||||
|
height="62.401226"
|
||||||
|
x="-133.16023"
|
||||||
|
y="1850.2394"
|
||||||
|
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" />
|
||||||
|
<path
|
||||||
|
id="path2991-7-6"
|
||||||
|
transform="translate(1090.5728,-207.2632)"
|
||||||
|
d="m 359.99999,290.93362 c 0,57.59541 -46.6903,104.28572 -104.28571,104.28572 -57.59541,0 -104.28571,-46.69031 -104.28571,-104.28572 0,-57.5954 46.6903,-104.28571 104.28571,-104.28571 57.59541,0 104.28571,46.69031 104.28571,104.28571 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#a0a0a0;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
id="path2993-4-8"
|
||||||
|
d="m 359.99999,290.93362 c 0,57.59541 -46.6903,104.28572 -104.28571,104.28572 -57.59541,0 -104.28571,-46.69031 -104.28571,-104.28572 0,-57.5954 46.6903,-104.28571 104.28571,-104.28571 57.59541,0 104.28571,46.69031 104.28571,104.28571 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#808080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc"
|
||||||
|
transform="matrix(0.83611704,0,0,0.83611704,1133.3242,-158.84107)" />
|
||||||
|
<rect
|
||||||
|
id="rect2995-0-8"
|
||||||
|
y="10.829478"
|
||||||
|
x="1332.5247"
|
||||||
|
height="99.221687"
|
||||||
|
width="29.189819"
|
||||||
|
style="fill:#a0a0a0;stroke:#ffffff;stroke-width:1.11112404000000000;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
id="rect2997-9-2"
|
||||||
|
y="129.62337"
|
||||||
|
x="1332.7828"
|
||||||
|
height="26.258072"
|
||||||
|
width="29.724136"
|
||||||
|
style="fill:#a0a0a0;stroke:#ffffff;stroke-width:0.57680577000000000;fill-opacity:1" />
|
||||||
|
<g
|
||||||
|
id="g4284-1"
|
||||||
|
transform="translate(670.07237,-816.24186)"
|
||||||
|
style="stroke:#a0a0a0;stroke-opacity:1">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="czcczcc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="rect4201-26"
|
||||||
|
d="m 568.37427,1080.8464 c 0,0 55.60005,-9.5933 75.06243,-8.6574 19.46238,0.9359 40.43273,8.6574 40.43273,8.6574 l 0,141.4674 c 0,0 -20.97035,-7.7215 -40.43273,-8.6574 -19.46238,-0.9359 -75.06243,8.6574 -75.06243,8.6574 z"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:14.36538028999999900;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1108.1473"
|
||||||
|
x="597.4068"
|
||||||
|
height="5.4857273"
|
||||||
|
width="55.265846"
|
||||||
|
id="rect4203-0"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1142.7776"
|
||||||
|
x="598.48895"
|
||||||
|
height="5.4857273"
|
||||||
|
width="55.26585"
|
||||||
|
id="rect4203-2-4"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1176.1093"
|
||||||
|
x="598.48895"
|
||||||
|
height="5.4857273"
|
||||||
|
width="55.26585"
|
||||||
|
id="rect4203-2-3-9"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="czc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4245-4"
|
||||||
|
d="m 563.55369,1233.6274 c 0,0 59.11965,-16.1473 81.00954,-14.7566 21.8899,1.3907 46.29117,14.7566 46.29117,14.7566"
|
||||||
|
style="fill:#b3b3b3;stroke:#a0a0a0;stroke-width:19.63722609999999900;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<g
|
||||||
|
transform="matrix(-1.0032405,0,0,1,1329.8708,99.560238)"
|
||||||
|
id="g4277-6"
|
||||||
|
style="stroke:#a0a0a0;stroke-opacity:1">
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:14.36538124000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
|
||||||
|
d="m 519.67634,980.83663 c 0,0 55.60005,-9.5933 75.06243,-8.6574 19.46238,0.9359 40.43272,8.6574 40.43272,8.6574 l 0,141.46737 c 0,0 -20.97034,-7.7215 -40.43272,-8.6574 -19.46238,-0.9359 -75.06243,8.6574 -75.06243,8.6574 z"
|
||||||
|
id="rect4201-2-0"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="czcczcc" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4203-21-3"
|
||||||
|
width="55.26585"
|
||||||
|
height="5.4857273"
|
||||||
|
x="548.70886"
|
||||||
|
y="1008.1376" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4203-2-6-6"
|
||||||
|
width="55.26585"
|
||||||
|
height="5.4857273"
|
||||||
|
x="549.79102"
|
||||||
|
y="1042.7678" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4203-2-3-8-2"
|
||||||
|
width="55.26585"
|
||||||
|
height="5.4857273"
|
||||||
|
x="549.79102"
|
||||||
|
y="1076.0995" />
|
||||||
|
<path
|
||||||
|
style="fill:#b3b3b3;stroke:#a0a0a0;stroke-width:19.63722609999999900;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 514.85576,1133.6176 c 0,0 59.11965,-16.1473 81.00954,-14.7566 21.8899,1.3907 46.29116,14.7566 46.29116,14.7566"
|
||||||
|
id="path4245-5-4"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="czc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3850-1-1"
|
||||||
|
d="m 1409.5992,670.87038 0,-128.57724 c 0,0 1.8599,-15.30681 -16.7384,-15.30681 -18.5984,0 -51.1454,0 -51.1454,0"
|
||||||
|
style="fill:none;stroke:#a0a0a0;stroke-width:22.72570610000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
y="547.80316"
|
||||||
|
x="1294.749"
|
||||||
|
height="104.27072"
|
||||||
|
width="3.2554622"
|
||||||
|
id="rect3818-4-7"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:22.72570610000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,944.16607,536.33294)"
|
||||||
|
d="m 372.74629,230.89374 c 0,19.40779 -9.7236,35.14091 -21.71827,35.14091 -11.99468,0 -21.71828,-15.73312 -21.71828,-35.14091 0,-19.40779 9.7236,-35.14092 21.71828,-35.14092 11.99467,0 21.71827,15.73313 21.71827,35.14092 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-4-8-4"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,942.63054,386.00935)"
|
||||||
|
d="m 372.74629,230.89374 c 0,19.40779 -9.7236,35.14091 -21.71827,35.14091 -11.99468,0 -21.71828,-15.73312 -21.71828,-35.14091 0,-19.40779 9.7236,-35.14092 21.71828,-35.14092 11.99467,0 21.71827,15.73313 21.71827,35.14092 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-8-0"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,1056.9547,536.43446)"
|
||||||
|
d="m 372.74629,230.89374 c 0,19.40779 -9.7236,35.14091 -21.71827,35.14091 -11.99468,0 -21.71828,-15.73312 -21.71828,-35.14091 0,-19.40779 9.7236,-35.14092 21.71828,-35.14092 11.99467,0 21.71827,15.73313 21.71827,35.14092 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-4-0-2-9"
|
||||||
|
style="fill:#ffffff;stroke:#a0a0a0;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3852-4-4"
|
||||||
|
d="m 1369.3146,490.2451 0,70.69144 -45.5889,-32.13462 z"
|
||||||
|
style="fill:#a0a0a0;stroke:#a0a0a0;stroke-width:0.83335358000000004px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:10.82955647;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="1474.2273"
|
||||||
|
y="-367.14282"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:10.82955647;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-8"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="-281.45197"
|
||||||
|
y="-1573.058"
|
||||||
|
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:10.82955647;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-82"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="-412.46057"
|
||||||
|
y="-1617.4926"
|
||||||
|
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:10.82955647;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-82-4"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="-1617.2937"
|
||||||
|
y="306.0546"
|
||||||
|
transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)" />
|
||||||
|
<g
|
||||||
|
id="g4016"
|
||||||
|
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,3107.8871,982.01044)">
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,-1)"
|
||||||
|
y="-1119.1083"
|
||||||
|
x="-1370.8767"
|
||||||
|
height="105.80523"
|
||||||
|
width="33.87508"
|
||||||
|
id="rect3953-82-4-1-4"
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:16.74562263;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,-1)"
|
||||||
|
y="-1207.0963"
|
||||||
|
x="-1358.6217"
|
||||||
|
height="113.43421"
|
||||||
|
width="9.3650599"
|
||||||
|
id="rect3953-82-4-1-7-0"
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:9.11664104;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.5972925,0,0,1.509886,-99.098035,-27.987625)"
|
||||||
|
d="m 936.41143,838.20984 c 0,14.50519 -11.75878,26.26396 -26.26397,26.26396 -14.50519,0 -26.26396,-11.75877 -26.26396,-26.26396 0,-14.50519 11.75877,-26.26397 26.26396,-26.26397 14.50519,0 26.26397,11.75878 26.26397,26.26397 z"
|
||||||
|
sodipodi:ry="26.263966"
|
||||||
|
sodipodi:rx="26.263966"
|
||||||
|
sodipodi:cy="838.20984"
|
||||||
|
sodipodi:cx="910.14746"
|
||||||
|
id="path3226"
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:7.14799976;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.1933397,0,0,1.5429659,269.38527,-37.350485)"
|
||||||
|
d="m 936.41143,838.20984 c 0,14.50519 -11.75878,26.26396 -26.26397,26.26396 -14.50519,0 -26.26396,-11.75877 -26.26396,-26.26396 0,-14.50519 11.75877,-26.26397 26.26396,-26.26397 14.50519,0 26.26397,11.75878 26.26397,26.26397 z"
|
||||||
|
sodipodi:ry="26.263966"
|
||||||
|
sodipodi:rx="26.263966"
|
||||||
|
sodipodi:cy="838.20984"
|
||||||
|
sodipodi:cx="910.14746"
|
||||||
|
id="path3226-9"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||||
|
id="rect4027"
|
||||||
|
width="73.460579"
|
||||||
|
height="107.13"
|
||||||
|
x="1722.2299"
|
||||||
|
y="-207.2868"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
|
||||||
|
<g
|
||||||
|
id="g4022"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,1095.262,-713.65443)">
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,-1)"
|
||||||
|
y="-1121.4039"
|
||||||
|
x="-1505.5544"
|
||||||
|
height="105.80523"
|
||||||
|
width="33.87508"
|
||||||
|
id="rect3953-82-4-1"
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:16.74562263;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,-1)"
|
||||||
|
y="-1222.4006"
|
||||||
|
x="-1494.0955"
|
||||||
|
height="113.43421"
|
||||||
|
width="9.3650599"
|
||||||
|
id="rect3953-82-4-1-7"
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:9.11664104;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="rect3182"
|
||||||
|
d="m 1469.5507,1220.8203 20.5952,52.7426 20.6425,-52.7426 -2.0832,-5.35 -37.0713,0 -2.0832,5.35 z"
|
||||||
|
style="fill:#a0a0a0;fill-opacity:1;stroke:#a0a0a0;stroke-width:7.02416945;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id="path2991-7-6-1"
|
||||||
|
transform="translate(1482.3625,-199.43254)"
|
||||||
|
d="m 359.99999,290.93362 c 0,57.59541 -46.6903,104.28572 -104.28571,104.28572 -57.59541,0 -104.28571,-46.69031 -104.28571,-104.28572 0,-57.5954 46.6903,-104.28571 104.28571,-104.28571 57.59541,0 104.28571,46.69031 104.28571,104.28571 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
id="path2993-4-8-7"
|
||||||
|
d="m 359.99999,290.93362 c 0,57.59541 -46.6903,104.28572 -104.28571,104.28572 -57.59541,0 -104.28571,-46.69031 -104.28571,-104.28572 0,-57.5954 46.6903,-104.28571 104.28571,-104.28571 57.59541,0 104.28571,46.69031 104.28571,104.28571 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#3c3c80;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc"
|
||||||
|
transform="matrix(0.83611704,0,0,0.83611704,1525.1139,-151.0104)" />
|
||||||
|
<rect
|
||||||
|
id="rect2995-0-8-4"
|
||||||
|
y="18.660131"
|
||||||
|
x="1724.3145"
|
||||||
|
height="99.221687"
|
||||||
|
width="29.189819"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#ffffff;stroke-width:1.11112404000000000" />
|
||||||
|
<rect
|
||||||
|
id="rect2997-9-2-0"
|
||||||
|
y="137.45401"
|
||||||
|
x="1724.5726"
|
||||||
|
height="26.258072"
|
||||||
|
width="29.724136"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#ffffff;stroke-width:0.57680577000000000" />
|
||||||
|
<g
|
||||||
|
id="g4284-1-9"
|
||||||
|
transform="translate(1061.8621,-808.41119)"
|
||||||
|
style="stroke:#3c3c3c;stroke-opacity:1">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="czcczcc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="rect4201-26-4"
|
||||||
|
d="m 568.37427,1080.8464 c 0,0 55.60005,-9.5933 75.06243,-8.6574 19.46238,0.9359 40.43273,8.6574 40.43273,8.6574 l 0,141.4674 c 0,0 -20.97035,-7.7215 -40.43273,-8.6574 -19.46238,-0.9359 -75.06243,8.6574 -75.06243,8.6574 z"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:14.36538028999999900;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1108.1473"
|
||||||
|
x="597.4068"
|
||||||
|
height="5.4857273"
|
||||||
|
width="55.265846"
|
||||||
|
id="rect4203-0-8"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
y="1142.7776"
|
||||||
|
x="598.48895"
|
||||||
|
height="5.4857273"
|
||||||
|
width="55.26585"
|
||||||
|
id="rect4203-2-4-8"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
y="1176.1093"
|
||||||
|
x="598.48895"
|
||||||
|
height="5.4857273"
|
||||||
|
width="55.26585"
|
||||||
|
id="rect4203-2-3-9-2"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="czc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4245-4-4"
|
||||||
|
d="m 563.55369,1233.6274 c 0,0 59.11965,-16.1473 81.00954,-14.7566 21.8899,1.3907 46.29117,14.7566 46.29117,14.7566"
|
||||||
|
style="fill:#b3b3b3;stroke:#3c3c3c;stroke-width:19.63722609999999900;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<g
|
||||||
|
transform="matrix(-1.0032405,0,0,1,1329.8708,99.560238)"
|
||||||
|
id="g4277-6-5"
|
||||||
|
style="stroke:#3c3c3c;stroke-opacity:1">
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:14.36538124000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
|
||||||
|
d="m 519.67634,980.83663 c 0,0 55.60005,-9.5933 75.06243,-8.6574 19.46238,0.9359 40.43272,8.6574 40.43272,8.6574 l 0,141.46737 c 0,0 -20.97034,-7.7215 -40.43272,-8.6574 -19.46238,-0.9359 -75.06243,8.6574 -75.06243,8.6574 z"
|
||||||
|
id="rect4201-2-0-5"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="czcczcc" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect4203-21-3-1"
|
||||||
|
width="55.26585"
|
||||||
|
height="5.4857273"
|
||||||
|
x="548.70886"
|
||||||
|
y="1008.1376" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect4203-2-6-6-7"
|
||||||
|
width="55.26585"
|
||||||
|
height="5.4857273"
|
||||||
|
x="549.79102"
|
||||||
|
y="1042.7678" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:11.82844734000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect4203-2-3-8-2-1"
|
||||||
|
width="55.26585"
|
||||||
|
height="5.4857273"
|
||||||
|
x="549.79102"
|
||||||
|
y="1076.0995" />
|
||||||
|
<path
|
||||||
|
style="fill:#b3b3b3;stroke:#3c3c3c;stroke-width:19.63722609999999900;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 514.85576,1133.6176 c 0,0 59.11965,-16.1473 81.00954,-14.7566 21.8899,1.3907 46.29116,14.7566 46.29116,14.7566"
|
||||||
|
id="path4245-5-4-1"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="czc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3850-1-1-5"
|
||||||
|
d="m 1801.3889,678.70099 0,-128.5772 c 0,0 1.8599,-15.3068 -16.7384,-15.3068 -18.5984,0 -51.1454,0 -51.1454,0"
|
||||||
|
style="fill:none;stroke:#3c3c3c;stroke-width:22.72570610000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
y="555.63385"
|
||||||
|
x="1686.5388"
|
||||||
|
height="104.27072"
|
||||||
|
width="3.2554622"
|
||||||
|
id="rect3818-4-7-2"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:22.72570610000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,1335.9558,544.16359)"
|
||||||
|
d="m 372.74629,230.89374 c 0,19.40779 -9.7236,35.14091 -21.71827,35.14091 -11.99468,0 -21.71828,-15.73312 -21.71828,-35.14091 0,-19.40779 9.7236,-35.14092 21.71828,-35.14092 11.99467,0 21.71827,15.73313 21.71827,35.14092 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-4-8-4-7"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,1334.4203,393.83999)"
|
||||||
|
d="m 372.74629,230.89374 c 0,19.40779 -9.7236,35.14091 -21.71827,35.14091 -11.99468,0 -21.71828,-15.73312 -21.71828,-35.14091 0,-19.40779 9.7236,-35.14092 21.71828,-35.14092 11.99467,0 21.71827,15.73313 21.71827,35.14092 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-8-0-6"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,1448.7444,544.26509)"
|
||||||
|
d="m 372.74629,230.89374 c 0,19.40779 -9.7236,35.14091 -21.71827,35.14091 -11.99468,0 -21.71828,-15.73312 -21.71828,-35.14091 0,-19.40779 9.7236,-35.14092 21.71828,-35.14092 11.99467,0 21.71827,15.73313 21.71827,35.14092 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-4-0-2-9-1"
|
||||||
|
style="fill:#ffffff;stroke:#3c3c3c;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3852-4-4-4"
|
||||||
|
d="m 1761.1043,498.07579 0,70.6914 -45.5889,-32.1346 z"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:0.83335358000000004px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:10.82955647000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-2"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="1756.8015"
|
||||||
|
y="-638.64288"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:10.82955647000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-8-3"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="-552.95203"
|
||||||
|
y="-1855.6323"
|
||||||
|
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:10.82955647000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-82-2"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="-683.96063"
|
||||||
|
y="-1900.0669"
|
||||||
|
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:10.82955647000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect3953-82-4-2"
|
||||||
|
width="15.304287"
|
||||||
|
height="97.947441"
|
||||||
|
x="-1899.8679"
|
||||||
|
y="577.55469"
|
||||||
|
transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)" />
|
||||||
|
<g
|
||||||
|
id="g4138">
|
||||||
|
<rect
|
||||||
|
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
|
||||||
|
y="2055.4602"
|
||||||
|
x="403.84506"
|
||||||
|
height="105.80523"
|
||||||
|
width="33.87508"
|
||||||
|
id="rect3953-82-4-1-4-6"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:16.74562263000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
|
||||||
|
y="1967.4722"
|
||||||
|
x="416.10007"
|
||||||
|
height="113.43421"
|
||||||
|
width="9.3650599"
|
||||||
|
id="rect3953-82-4-1-7-0-8"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:9.11664103999999930;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
transform="matrix(-1.1294564,1.1294564,-1.0676506,-1.0676506,3589.5398,939.55844)"
|
||||||
|
d="m 936.41143,838.20984 c 0,14.50519 -11.75878,26.26396 -26.26397,26.26396 -14.50519,0 -26.26396,-11.75877 -26.26396,-26.26396 0,-14.50519 11.75877,-26.26397 26.26396,-26.26397 14.50519,0 26.26397,11.75878 26.26397,26.26397 z"
|
||||||
|
sodipodi:ry="26.263966"
|
||||||
|
sodipodi:rx="26.263966"
|
||||||
|
sodipodi:cy="838.20984"
|
||||||
|
sodipodi:cx="910.14746"
|
||||||
|
id="path3226-5"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:7.14799976000000030;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.84381859,0.84381859,-1.0910416,-1.0910416,3335.6033,1206.736)"
|
||||||
|
d="m 936.41143,838.20984 c 0,14.50519 -11.75878,26.26396 -26.26397,26.26396 -14.50519,0 -26.26396,-11.75877 -26.26396,-26.26396 0,-14.50519 11.75877,-26.26397 26.26396,-26.26397 14.50519,0 26.26397,11.75878 26.26397,26.26397 z"
|
||||||
|
sodipodi:ry="26.263966"
|
||||||
|
sodipodi:rx="26.263966"
|
||||||
|
sodipodi:cy="838.20984"
|
||||||
|
sodipodi:cx="910.14746"
|
||||||
|
id="path3226-9-7"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
|
||||||
|
y="-476.95105"
|
||||||
|
x="2003.8865"
|
||||||
|
height="107.13"
|
||||||
|
width="73.460579"
|
||||||
|
id="rect4027-6"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)"
|
||||||
|
y="429.19318"
|
||||||
|
x="-2057.9661"
|
||||||
|
height="105.80523"
|
||||||
|
width="33.87508"
|
||||||
|
id="rect3953-82-4-1-8"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:16.74562263000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)"
|
||||||
|
y="328.19647"
|
||||||
|
x="-2046.5071"
|
||||||
|
height="113.43421"
|
||||||
|
width="9.3650599"
|
||||||
|
id="rect3953-82-4-1-7-9"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:9.11664103999999930;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="rect3182-2"
|
||||||
|
d="m 1662.9307,1196.5558 -22.7317,51.8577 51.8911,-22.6982 2.31,-5.2561 -26.2134,-26.2134 -5.256,2.31 z"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#3c3c3c;stroke-width:7.02416944999999960;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id="path2991-7-1-4-1"
|
||||||
|
transform="translate(-154.10522,1432.0357)"
|
||||||
|
d="m 359.99999,290.93362 a 104.28571,104.28571 0 1 1 -208.57142,0 104.28571,104.28571 0 1 1 208.57142,0 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#bebeff;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
id="path2993-4-5-8-7"
|
||||||
|
d="m 359.99999,290.93362 a 104.28571,104.28571 0 1 1 -208.57142,0 104.28571,104.28571 0 1 1 208.57142,0 z"
|
||||||
|
sodipodi:ry="104.28571"
|
||||||
|
sodipodi:rx="104.28571"
|
||||||
|
sodipodi:cy="290.93362"
|
||||||
|
sodipodi:cx="255.71428"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc"
|
||||||
|
transform="matrix(0.83611704,0,0,0.83611704,-111.35384,1480.4578)" />
|
||||||
|
<rect
|
||||||
|
id="rect2995-0-2-8-4"
|
||||||
|
y="1695.4933"
|
||||||
|
x="93.81971"
|
||||||
|
height="99.396141"
|
||||||
|
width="20.706863"
|
||||||
|
style="fill:#bebefa;stroke:none;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;stroke:#ffffff;stroke-width:2.92446065;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 61.259358,1683.2763 -64.6850999,-36.2114 10.7001,55.9569 53.9849999,-19.7455 z"
|
||||||
|
id="rect4046-3-4-0"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#bebeff;stroke:#bebeff;stroke-width:1.98877633000000010;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1;stroke-opacity:1"
|
||||||
|
d="m 50.602958,1676.4044 -43.6559999,-24.4345 6.9986999,38.1562 36.6573,-13.7217 z"
|
||||||
|
id="rect4046-5-9"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#bebefa;stroke-width:13.63542366000000100;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 339.45286,1633.1057 c -0.2525,22.2049 -0.505,44.4098 -0.7575,66.6147 3.3299,0.032 6.6598,0.063 9.9898,0.095 -2.3515,2.3672 -4.703,4.7345 -7.0544,7.1018 31.3741,31.374 62.7482,62.7482 94.1222,94.1223 23.3413,-23.3412 46.6825,-46.6824 70.0237,-70.0236 -31.3741,-31.3899 -62.7483,-62.7798 -94.1224,-94.1697 -2.6197,2.6356 -5.2395,5.2711 -7.8593,7.9067 0.032,-3.6298 0.063,-7.2596 0.095,-10.8894 -21.4789,-0.2525 -42.9579,-0.505 -64.4368,-0.7575 z"
|
||||||
|
id="rect3075-11-4"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<rect
|
||||||
|
id="rect2995-0-2-8-6-8"
|
||||||
|
y="77.228889"
|
||||||
|
x="-1734.3357"
|
||||||
|
height="99.396141"
|
||||||
|
width="20.706863"
|
||||||
|
style="fill:#bebefa;stroke:none;fill-opacity:1"
|
||||||
|
transform="matrix(0,-1,1,0,0,0)" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:10.37699986;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 349.78646,1643.6829 c -0.1922,16.8985 -0.3844,33.7973 -0.5765,50.6959 2.5342,0.024 5.0684,0.047 7.6026,0.072 -1.7896,1.8014 -3.5792,3.6031 -5.3686,5.4047 23.8766,23.8766 47.7533,47.7533 71.63,71.6301 17.7636,-17.7634 35.5269,-35.5268 53.2902,-53.2902 -23.8766,-23.8888 -47.7534,-47.7775 -71.6302,-71.6662 -1.9936,2.0058 -3.9873,4.0114 -5.9811,6.0172 0.024,-2.7624 0.047,-5.5247 0.072,-8.2872 -16.3463,-0.1921 -32.6925,-0.3843 -49.0386,-0.5764 z"
|
||||||
|
id="rect3075-11-7-8"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffffff;stroke:#bebefa;stroke-width:6.57334423000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none"
|
||||||
|
id="path3100-2-2"
|
||||||
|
sodipodi:cx="700"
|
||||||
|
sodipodi:cy="812.36218"
|
||||||
|
sodipodi:rx="10"
|
||||||
|
sodipodi:ry="10"
|
||||||
|
d="m 710,812.36218 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
|
||||||
|
transform="matrix(1.2362333,-1.2362333,1.2362333,1.2362333,-1490.7493,1534.7336)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#bebeff;stroke-width:10.80681515000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="rect4114-4"
|
||||||
|
width="45.086407"
|
||||||
|
height="62.401226"
|
||||||
|
x="-939.10236"
|
||||||
|
y="1492.6151"
|
||||||
|
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#bebeff;stroke-width:25.84518814000000100;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 655.10691,1790.494 c 0,0 3.44333,-28.5633 47.63498,-35.4849 15.10377,-2.3655 48.7968,-8.2798 48.7968,-42.5816"
|
||||||
|
id="path3207-5"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:transform-center-x="-9.2946303"
|
||||||
|
sodipodi:nodetypes="csc"
|
||||||
|
inkscape:transform-center-y="2.9369479e-005" />
|
||||||
|
<rect
|
||||||
|
y="1676.2623"
|
||||||
|
x="652.97418"
|
||||||
|
height="104.27072"
|
||||||
|
width="3.2554622"
|
||||||
|
id="rect3818-4-8-4-5"
|
||||||
|
style="fill:#ffffff;stroke:#bebefa;stroke-width:22.72570610000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,302.39116,1664.7945)"
|
||||||
|
d="m 372.74629,230.89374 a 21.718279,35.140915 0 1 1 -43.43655,0 21.718279,35.140915 0 1 1 43.43655,0 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-4-8-7-8-1"
|
||||||
|
style="fill:#ffffff;stroke:#bebeff;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,300.85563,1514.4712)"
|
||||||
|
d="m 372.74629,230.89374 a 21.718279,35.140915 0 1 1 -43.43655,0 21.718279,35.140915 0 1 1 43.43655,0 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-8-4-8-7"
|
||||||
|
style="fill:#ffffff;stroke:#bebeff;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.0049237,0,0,0.61497516,401.70879,1561.5007)"
|
||||||
|
d="m 372.74629,230.89374 a 21.718279,35.140915 0 1 1 -43.43655,0 21.718279,35.140915 0 1 1 43.43655,0 z"
|
||||||
|
sodipodi:ry="35.140915"
|
||||||
|
sodipodi:rx="21.718279"
|
||||||
|
sodipodi:cy="230.89374"
|
||||||
|
sodipodi:cx="351.02802"
|
||||||
|
id="path3795-8-4-8-2-1"
|
||||||
|
style="fill:#ffffff;stroke:#bebeff;stroke-width:12.04511166000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 87 KiB |
@@ -355,14 +355,10 @@ trait AccountControllerBase extends AccountManagementControllerBase {
|
|||||||
val loginUserName = loginAccount.userName
|
val loginUserName = loginAccount.userName
|
||||||
|
|
||||||
LockUtil.lock(s"${loginUserName}/${repository.name}/create"){
|
LockUtil.lock(s"${loginUserName}/${repository.name}/create"){
|
||||||
if(repository.owner == loginUserName){
|
if(repository.owner == loginUserName || getRepository(loginAccount.userName, repository.name, baseUrl).isDefined){
|
||||||
// redirect to the repository
|
// redirect to the repository if repository already exists
|
||||||
redirect(s"/${repository.owner}/${repository.name}")
|
redirect(s"/${loginUserName}/${repository.name}")
|
||||||
} else {
|
} else {
|
||||||
getForkedRepositories(repository.owner, repository.name).find(_._1 == loginUserName).map { case (owner, name) =>
|
|
||||||
// redirect to the repository
|
|
||||||
redirect(s"/${owner}/${name}")
|
|
||||||
} getOrElse {
|
|
||||||
// Insert to the database at first
|
// Insert to the database at first
|
||||||
val originUserName = repository.repository.originUserName.getOrElse(repository.owner)
|
val originUserName = repository.repository.originUserName.getOrElse(repository.owner)
|
||||||
val originRepositoryName = repository.repository.originRepositoryName.getOrElse(repository.name)
|
val originRepositoryName = repository.repository.originRepositoryName.getOrElse(repository.name)
|
||||||
@@ -397,7 +393,6 @@ trait AccountControllerBase extends AccountManagementControllerBase {
|
|||||||
redirect(s"/${loginUserName}/${repository.name}")
|
redirect(s"/${loginUserName}/${repository.name}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
private def insertDefaultLabels(userName: String, repositoryName: String): Unit = {
|
private def insertDefaultLabels(userName: String, repositoryName: String): Unit = {
|
||||||
|
|||||||
@@ -25,7 +25,9 @@ class FileUploadController extends ScalatraServlet with FileUploadSupport {
|
|||||||
|
|
||||||
post("/image/:owner/:repository"){
|
post("/image/:owner/:repository"){
|
||||||
execute { (file, fileId) =>
|
execute { (file, fileId) =>
|
||||||
FileUtils.writeByteArrayToFile(new java.io.File(getAttachedDir(params("owner"), params("repository")), fileId), file.get)
|
FileUtils.writeByteArrayToFile(new java.io.File(
|
||||||
|
getAttachedDir(params("owner"), params("repository")),
|
||||||
|
fileId + "." + FileUtil.getExtension(file.getName)), file.get)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -274,12 +274,14 @@ trait IssuesControllerBase extends ControllerBase {
|
|||||||
})
|
})
|
||||||
|
|
||||||
get("/:owner/:repository/_attached/:file")(referrersOnly { repository =>
|
get("/:owner/:repository/_attached/:file")(referrersOnly { repository =>
|
||||||
defining(new java.io.File(Directory.getAttachedDir(repository.owner, repository.name), params("file"))){ file =>
|
(Directory.getAttachedDir(repository.owner, repository.name) match {
|
||||||
if(file.exists) {
|
case dir if(dir.exists && dir.isDirectory) =>
|
||||||
contentType = FileUtil.getMimeType(file)
|
dir.listFiles.find(_.getName.startsWith(params("file") + ".")).map { file =>
|
||||||
|
contentType = FileUtil.getMimeType(file.getName)
|
||||||
file
|
file
|
||||||
} else NotFound
|
|
||||||
}
|
}
|
||||||
|
case _ => None
|
||||||
|
}) getOrElse NotFound
|
||||||
})
|
})
|
||||||
|
|
||||||
val assignedUserName = (key: String) => params.get(key) filter (_.trim != "")
|
val assignedUserName = (key: String) => params.get(key) filter (_.trim != "")
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ trait WikiControllerBase extends ControllerBase {
|
|||||||
|
|
||||||
get("/:owner/:repository/wiki")(referrersOnly { repository =>
|
get("/:owner/:repository/wiki")(referrersOnly { repository =>
|
||||||
getWikiPage(repository.owner, repository.name, "Home").map { page =>
|
getWikiPage(repository.owner, repository.name, "Home").map { page =>
|
||||||
wiki.html.page("Home", page, repository, hasWritePermission(repository.owner, repository.name, context.loginAccount))
|
wiki.html.page("Home", page, getWikiPageList(repository.owner, repository.name),
|
||||||
|
repository, hasWritePermission(repository.owner, repository.name, context.loginAccount))
|
||||||
} getOrElse redirect(s"/${repository.owner}/${repository.name}/wiki/Home/_edit")
|
} getOrElse redirect(s"/${repository.owner}/${repository.name}/wiki/Home/_edit")
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -44,7 +45,8 @@ trait WikiControllerBase extends ControllerBase {
|
|||||||
val pageName = StringUtil.urlDecode(params("page"))
|
val pageName = StringUtil.urlDecode(params("page"))
|
||||||
|
|
||||||
getWikiPage(repository.owner, repository.name, pageName).map { page =>
|
getWikiPage(repository.owner, repository.name, pageName).map { page =>
|
||||||
wiki.html.page(pageName, page, repository, hasWritePermission(repository.owner, repository.name, context.loginAccount))
|
wiki.html.page(pageName, page, getWikiPageList(repository.owner, repository.name),
|
||||||
|
repository, hasWritePermission(repository.owner, repository.name, context.loginAccount))
|
||||||
} getOrElse redirect(s"/${repository.owner}/${repository.name}/wiki/${StringUtil.urlEncode(pageName)}/_edit")
|
} getOrElse redirect(s"/${repository.owner}/${repository.name}/wiki/${StringUtil.urlEncode(pageName)}/_edit")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ trait RepositoryService { self: AccountService =>
|
|||||||
}
|
}
|
||||||
|
|
||||||
def renameRepository(oldUserName: String, oldRepositoryName: String, newUserName: String, newRepositoryName: String): Unit = {
|
def renameRepository(oldUserName: String, oldRepositoryName: String, newUserName: String, newRepositoryName: String): Unit = {
|
||||||
|
getAccountByUserName(newUserName).foreach { account =>
|
||||||
(Query(Repositories) filter { t => t.byRepository(oldUserName, oldRepositoryName) } firstOption).map { repository =>
|
(Query(Repositories) filter { t => t.byRepository(oldUserName, oldRepositoryName) } firstOption).map { repository =>
|
||||||
Repositories insert repository.copy(userName = newUserName, repositoryName = newRepositoryName)
|
Repositories insert repository.copy(userName = newUserName, repositoryName = newRepositoryName)
|
||||||
|
|
||||||
@@ -51,8 +52,8 @@ trait RepositoryService { self: AccountService =>
|
|||||||
val labels = Query(Labels ).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
val labels = Query(Labels ).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
||||||
val issueComments = Query(IssueComments).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
val issueComments = Query(IssueComments).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
||||||
val issueLabels = Query(IssueLabels ).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
val issueLabels = Query(IssueLabels ).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
||||||
val collaborators = Query(Collaborators).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
|
||||||
val activities = Query(Activities ).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
val activities = Query(Activities ).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
||||||
|
val collaborators = Query(Collaborators).filter(_.byRepository(oldUserName, oldRepositoryName)).list
|
||||||
|
|
||||||
Repositories.filter { t =>
|
Repositories.filter { t =>
|
||||||
(t.originUserName is oldUserName.bind) && (t.originRepositoryName is oldRepositoryName.bind)
|
(t.originUserName is oldUserName.bind) && (t.originRepositoryName is oldRepositoryName.bind)
|
||||||
@@ -76,8 +77,12 @@ trait RepositoryService { self: AccountService =>
|
|||||||
IssueComments .insertAll(issueComments .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
IssueComments .insertAll(issueComments .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
||||||
Labels .insertAll(labels .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
Labels .insertAll(labels .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
||||||
IssueLabels .insertAll(issueLabels .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
IssueLabels .insertAll(issueLabels .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
||||||
Collaborators .insertAll(collaborators .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
|
||||||
Activities .insertAll(activities .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
Activities .insertAll(activities .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
||||||
|
if(account.isGroupAccount){
|
||||||
|
Collaborators.insertAll(getGroupMembers(newUserName).map(m => Collaborator(newUserName, newRepositoryName, m.userName)) :_*)
|
||||||
|
} else {
|
||||||
|
Collaborators.insertAll(collaborators.map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*)
|
||||||
|
}
|
||||||
|
|
||||||
// Update activity messages
|
// Update activity messages
|
||||||
val updateActivities = Activities.filter { t =>
|
val updateActivities = Activities.filter { t =>
|
||||||
@@ -97,6 +102,7 @@ trait RepositoryService { self: AccountService =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def deleteRepository(userName: String, repositoryName: String): Unit = {
|
def deleteRepository(userName: String, repositoryName: String): Unit = {
|
||||||
Activities .filter(_.byRepository(userName, repositoryName)).delete
|
Activities .filter(_.byRepository(userName, repositoryName)).delete
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory
|
|||||||
import util.Directory._
|
import util.Directory._
|
||||||
import util.ControlUtil._
|
import util.ControlUtil._
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.api.Git
|
||||||
|
import util.Directory
|
||||||
|
|
||||||
object AutoUpdate {
|
object AutoUpdate {
|
||||||
|
|
||||||
@@ -50,6 +51,32 @@ object AutoUpdate {
|
|||||||
* The history of versions. A head of this sequence is the current BitBucket version.
|
* The history of versions. A head of this sequence is the current BitBucket version.
|
||||||
*/
|
*/
|
||||||
val versions = Seq(
|
val versions = Seq(
|
||||||
|
new Version(2, 0){
|
||||||
|
override def update(conn: Connection): Unit = {
|
||||||
|
import eu.medsea.mimeutil.{MimeUtil2, MimeType}
|
||||||
|
|
||||||
|
val mimeUtil = new MimeUtil2()
|
||||||
|
mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector")
|
||||||
|
|
||||||
|
super.update(conn)
|
||||||
|
using(conn.createStatement.executeQuery("SELECT USER_NAME, REPOSITORY_NAME FROM REPOSITORY")){ rs =>
|
||||||
|
while(rs.next){
|
||||||
|
defining(Directory.getAttachedDir(rs.getString("USER_NAME"), rs.getString("REPOSITORY_NAME"))){ dir =>
|
||||||
|
if(dir.exists && dir.isDirectory){
|
||||||
|
dir.listFiles.foreach { file =>
|
||||||
|
if(file.getName.indexOf('.') < 0){
|
||||||
|
val mimeType = MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file, new MimeType("application/octet-stream"))).toString
|
||||||
|
if(mimeType.startsWith("image/")){
|
||||||
|
file.renameTo(new File(file.getParent, file.getName + "." + mimeType.split("/")(1)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
Version(1, 13),
|
Version(1, 13),
|
||||||
Version(1, 12),
|
Version(1, 12),
|
||||||
Version(1, 11),
|
Version(1, 11),
|
||||||
|
|||||||
@@ -5,13 +5,9 @@ import java.net.URLConnection
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import util.ControlUtil._
|
import util.ControlUtil._
|
||||||
import scala.util.Random
|
import scala.util.Random
|
||||||
import eu.medsea.mimeutil.{MimeUtil2, MimeType}
|
|
||||||
|
|
||||||
object FileUtil {
|
object FileUtil {
|
||||||
|
|
||||||
private val mimeUtil = new MimeUtil2()
|
|
||||||
mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector")
|
|
||||||
|
|
||||||
def getMimeType(name: String): String =
|
def getMimeType(name: String): String =
|
||||||
defining(URLConnection.getFileNameMap()){ fileNameMap =>
|
defining(URLConnection.getFileNameMap()){ fileNameMap =>
|
||||||
fileNameMap.getContentTypeFor(name) match {
|
fileNameMap.getContentTypeFor(name) match {
|
||||||
@@ -20,16 +16,6 @@ object FileUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns mime type detected by file content.
|
|
||||||
*
|
|
||||||
* @param file File object
|
|
||||||
* @return mime type String
|
|
||||||
*/
|
|
||||||
def getMimeType(file: File): String = {
|
|
||||||
MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file, new MimeType("application/octet-stream"))).toString
|
|
||||||
}
|
|
||||||
|
|
||||||
def getContentType(name: String, bytes: Array[Byte]): String = {
|
def getContentType(name: String, bytes: Array[Byte]): String = {
|
||||||
defining(getMimeType(name)){ mimeType =>
|
defining(getMimeType(name)){ mimeType =>
|
||||||
if(mimeType == "application/octet-stream" && isText(bytes)){
|
if(mimeType == "application/octet-stream" && isText(bytes)){
|
||||||
|
|||||||
@@ -372,7 +372,12 @@ object JGitUtil {
|
|||||||
|
|
||||||
if(commits.length >= 2){
|
if(commits.length >= 2){
|
||||||
// not initial commit
|
// not initial commit
|
||||||
val oldCommit = commits(1)
|
val oldCommit = if(revCommit.getParentCount >= 2) {
|
||||||
|
// merge commit
|
||||||
|
revCommit.getParents.head
|
||||||
|
} else {
|
||||||
|
commits(1)
|
||||||
|
}
|
||||||
(getDiffs(git, oldCommit.getName, id, fetchContent), Some(oldCommit.getName))
|
(getDiffs(git, oldCommit.getName, id, fetchContent), Some(oldCommit.getName))
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ class GitBucketHtmlSerializer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private def fixUrl(url: String): String = {
|
private def fixUrl(url: String): String = {
|
||||||
if(!enableWikiLink || url.startsWith("http://") || url.startsWith("https://")){
|
if(!enableWikiLink || url.startsWith("http://") || url.startsWith("https://") || url.startsWith("#")){
|
||||||
url
|
url
|
||||||
} else {
|
} else {
|
||||||
repository.httpUrl.replaceFirst("/git/", "/").replaceFirst("\\.git$", "") + "/wiki/_blob/" + url
|
repository.httpUrl.replaceFirst("/git/", "/").replaceFirst("\\.git$", "") + "/wiki/_blob/" + url
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Edit your profile"){
|
@html.main("Edit your profile"){
|
||||||
<div class="row-fluid">
|
<div class="container">
|
||||||
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
@menu("profile", settings.ssh)
|
@menu("profile", settings.ssh)
|
||||||
</div>
|
</div>
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(if(account.isEmpty) "Create group" else "Edit group"){
|
@html.main(if(account.isEmpty) "Create group" else "Edit group"){
|
||||||
<div>
|
<div class="container">
|
||||||
<form id="form" method="post" action="@if(account.isEmpty){@path/groups/new} else {@path/@account.get.userName/_editgroup}" validate="true">
|
<form id="form" method="post" action="@if(account.isEmpty){@path/groups/new} else {@path/@account.get.userName/_editgroup}" validate="true">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span5">
|
<div class="span5">
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(account.userName){
|
@html.main(account.userName){
|
||||||
|
<div class="container">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span4">
|
<div class="span4">
|
||||||
@@ -54,4 +55,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Create your account"){
|
@html.main("Create your account"){
|
||||||
|
<div class="container">
|
||||||
<h3>Create your account</h3>
|
<h3>Create your account</h3>
|
||||||
<form action="@path/register" method="POST" validate="true">
|
<form action="@path/register" method="POST" validate="true">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
@@ -45,4 +46,5 @@
|
|||||||
<input type="submit" class="btn btn-success" value="Create account"/>
|
<input type="submit" class="btn btn-success" value="Create account"/>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("SSH Keys"){
|
@html.main("SSH Keys"){
|
||||||
<div class="row-fluid">
|
<div class="container">
|
||||||
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
@menu("ssh", settings.ssh)
|
@menu("ssh", settings.ssh)
|
||||||
</div>
|
</div>
|
||||||
@@ -41,5 +42,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
@(active: String)(body: Html)(implicit context: app.Context)
|
@(active: String)(body: Html)(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
<div class="row-fluid">
|
<div class="container">
|
||||||
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<ul class="nav nav-tabs nav-stacked side-menu">
|
<ul class="nav nav-tabs nav-stacked side-menu">
|
||||||
@@ -19,4 +20,5 @@
|
|||||||
<div class="span9">
|
<div class="span9">
|
||||||
@body
|
@body
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -8,8 +8,9 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Your Issues"){
|
@html.main("Your Issues"){
|
||||||
@dashboard.html.tab("issues")
|
<div class="container">
|
||||||
<div class="row-fluid">
|
@dashboard.html.tab("issues")
|
||||||
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
<li@if(filter == "all"){ class="active"}>
|
<li@if(filter == "all"){ class="active"}>
|
||||||
@@ -44,5 +45,6 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@listparts
|
@listparts
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,9 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Your Issues"){
|
@html.main("Your Issues"){
|
||||||
@dashboard.html.tab("pulls")
|
<div class="container">
|
||||||
<div class="row-fluid">
|
@dashboard.html.tab("pulls")
|
||||||
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
<li@if(filter == "created_by"){ class="active"}>
|
<li@if(filter == "created_by"){ class="active"}>
|
||||||
@@ -36,5 +37,6 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@listparts
|
@listparts
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
@(active: String, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context)
|
|
||||||
@import context._
|
|
||||||
@import view.helpers._
|
|
||||||
|
|
||||||
@if(repository.commitCount > 0){
|
|
||||||
<div class="pull-right">
|
|
||||||
<div class="input-prepend">
|
|
||||||
<a href="@path/@repository.owner/@repository.name/fork" class="btn" style="margin-bottom: 10px;">Fork</a>
|
|
||||||
<span class="add-on count"><a href="@url(repository)/network/members">@repository.forkedCount</a></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
<div class="head">
|
|
||||||
@helper.html.repositoryicon(repository, true)
|
|
||||||
<a href="@url(repository.owner)">@repository.owner</a> / <a href="@url(repository)" class="strong">@repository.name</a>
|
|
||||||
|
|
||||||
@defining(repository.repository){ x =>
|
|
||||||
@if(repository.repository.originRepositoryName.isDefined){
|
|
||||||
<div class="forked">
|
|
||||||
forked from <a href="@path/@x.parentUserName/@x.parentRepositoryName">@x.parentUserName/@x.parentRepositoryName</a>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
@repository.repository.description.map { description =>
|
|
||||||
<p>@description</p>
|
|
||||||
}
|
|
||||||
<table class="global-nav box-header">
|
|
||||||
<tr>
|
|
||||||
<th class="box-header@if(active=="code"){ active}">
|
|
||||||
<a href="@url(repository)">Code</a>
|
|
||||||
</th>
|
|
||||||
<th class="box-header@if(active=="issues"){ active}">
|
|
||||||
<a href="@url(repository)/issues">Issues</a>
|
|
||||||
@if(repository.issueCount > 0){
|
|
||||||
<span class="badge">@repository.issueCount</span>
|
|
||||||
}
|
|
||||||
</th>
|
|
||||||
<th class="box-header@if(active=="pulls"){ active}">
|
|
||||||
<a href="@url(repository)/pulls">Pull Requests</a>
|
|
||||||
@if(repository.pullCount > 0){
|
|
||||||
<span class="badge">@repository.pullCount</span>
|
|
||||||
}
|
|
||||||
</th>
|
|
||||||
<th class="box-header@if(active=="wiki"){ active}">
|
|
||||||
<a href="@url(repository)/wiki">Wiki</a>
|
|
||||||
</th>
|
|
||||||
<th class="box-header@if(active=="network"){ active}">
|
|
||||||
<a href="@url(repository)/network/members">Network</a>
|
|
||||||
</th>
|
|
||||||
@if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){
|
|
||||||
<th class="box-header@if(active=="settings"){ active}">
|
|
||||||
<a href="@url(repository)/settings">Settings</a>
|
|
||||||
</th>
|
|
||||||
}
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(function(){
|
|
||||||
$('table.global-nav th.box-header').click(function(){
|
|
||||||
location.href = $(this).find('a').attr('href');
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
@(id: String, value: String, prepend: Boolean = false)(html: Html)
|
@(id: String, value: String)(html: Html)
|
||||||
<div class="input-append@if(prepend){ input-prepend}">
|
<div class="input-append" style="margin-bottom: 0px;">
|
||||||
@html
|
@html
|
||||||
<span id="@id" class="add-on btn" data-clipboard-text="@value" data-placement="bottom" title="copy to clipboard"><i class="icon-check"></i></span>
|
<span id="@id" class="add-on btn" data-clipboard-text="@value" data-placement="bottom" title="copy to clipboard"><i class="icon-check"></i></span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@(value: String = "", prefix: String = "", mini: Boolean = true, style: String = "", right: Boolean = false)(body: Html)
|
@(value: String = "", prefix: String = "", mini: Boolean = true, style: String = "", right: Boolean = false)(body: Html)
|
||||||
<div class="btn-group"@if(style.nonEmpty){ style="@style"}>
|
<div class="btn-group"@if(style.nonEmpty){ style="@style"}>
|
||||||
<button class="btn dropdown-toggle@if(mini){ btn-mini}" data-toggle="dropdown">
|
<button class="btn dropdown-toggle@if(mini){ btn-mini} else { btn-small}" data-toggle="dropdown">
|
||||||
@if(value.isEmpty){
|
@if(value.isEmpty){
|
||||||
<i class="icon-cog"></i>
|
<i class="icon-cog"></i>
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
<div class="tabbable">
|
<div class="tabbable">
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs" style="height: 37px;">
|
||||||
<li class="active"><a href="#tab1" data-toggle="tab">Write</a></li>
|
<li class="active"><a href="#tab1" data-toggle="tab">Write</a></li>
|
||||||
<li><a href="#tab2" data-toggle="tab" id="preview">Preview</a></li>
|
<li><a href="#tab2" data-toggle="tab" id="preview">Preview</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -4,8 +4,9 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@main("GitBucket"){
|
@main("GitBucket"){
|
||||||
@dashboard.html.tab()
|
<div class="container">
|
||||||
<div class="row-fluid">
|
@dashboard.html.tab()
|
||||||
|
<div class="row-fluid">
|
||||||
<div class="span8">
|
<div class="span8">
|
||||||
@helper.html.activities(activities)
|
@helper.html.activities(activities)
|
||||||
</div>
|
</div>
|
||||||
@@ -42,14 +43,13 @@
|
|||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
}
|
}
|
||||||
|
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
<th class="metal">
|
<th class="metal">
|
||||||
Recent updated repositories
|
Recent updated repositories
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
@if(recentRepositories.isEmpty){2
|
@if(recentRepositories.isEmpty){
|
||||||
<tr>
|
<tr>
|
||||||
<td>No repositories</td>
|
<td>No repositories</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -65,6 +65,6 @@
|
|||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<div class="issue-avatar-image">@avatar(loginAccount.get.userName, 48)</div>
|
<div class="issue-avatar-image">@avatar(loginAccount.get.userName, 48)</div>
|
||||||
<div class="box issue-comment-box">
|
<div class="box issue-comment-box">
|
||||||
<div class="box-content">
|
<div class="box-content">
|
||||||
@helper.html.preview(repository, "", false, true, true, "width: 680px; height: 100px; max-height: 150px;", elastic = true)
|
@helper.html.preview(repository, "", false, true, true, "width: 635px; height: 100px; max-height: 150px;", elastic = true)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"New Issue - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"New Issue - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("issues", repository)
|
@html.menu("issues", repository){
|
||||||
@tab("", repository)
|
@tab("", true, repository)
|
||||||
<form action="@url(repository)/issues/new" method="POST" validate="true">
|
<form action="@url(repository)/issues/new" method="POST" validate="true">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span9">
|
<div class="span9">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<div class="box issue-box">
|
<div class="box issue-box">
|
||||||
<div class="box-content">
|
<div class="box-content">
|
||||||
<span id="error-title" class="error"></span>
|
<span id="error-title" class="error"></span>
|
||||||
<input type="text" name="title" value="" placeholder="Title" style="width: 600px;"/>
|
<input type="text" name="title" value="" placeholder="Title" style="width: 565px;"/>
|
||||||
<div>
|
<div>
|
||||||
<span id="label-assigned">No one is assigned</span>
|
<span id="label-assigned">No one is assigned</span>
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission){
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
@helper.html.preview(repository, "", false, true, true, "width: 600px; height: 200px; max-height: 250px;", elastic = true)
|
@helper.html.preview(repository, "", false, true, true, "width: 565px; height: 200px; max-height: 250px;", elastic = true)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
@@ -85,6 +85,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
<span id="error-edit-content-@commentId" class="error"></span>
|
<span id="error-edit-content-@commentId" class="error"></span>
|
||||||
@helper.html.attached(owner, repository){
|
@helper.html.attached(owner, repository){
|
||||||
<textarea style="width: 680px; height: 100px;" id="edit-content-@commentId">@content</textarea>
|
<textarea style="width: 635px; height: 100px;" id="edit-content-@commentId">@content</textarea>
|
||||||
}
|
}
|
||||||
<div>
|
<div>
|
||||||
<input type="button" id="update-comment-@commentId" class="btn btn-small" value="Update Comment"/>
|
<input type="button" id="update-comment-@commentId" class="btn btn-small" value="Update Comment"/>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
@(title: String, content: Option[String], issueId: Int, owner: String, repository: String)(implicit context: app.Context)
|
@(title: String, content: Option[String], issueId: Int, owner: String, repository: String)(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
<span id="error-edit-title" class="error"></span>
|
<span id="error-edit-title" class="error"></span>
|
||||||
<input type="text" style="width: 680px;" id="edit-title" value="@title"/>
|
<input type="text" style="width: 635px;" id="edit-title" value="@title"/>
|
||||||
@helper.html.attached(owner, repository){
|
@helper.html.attached(owner, repository){
|
||||||
<textarea style="width: 680px; height: 100px; max-height: 300px;" id="edit-content">@content.getOrElse("")</textarea>
|
<textarea style="width: 635px; height: 100px; max-height: 300px;" id="edit-content">@content.getOrElse("")</textarea>
|
||||||
}
|
}
|
||||||
<div>
|
<div>
|
||||||
<input type="button" id="update" class="btn btn-small" value="Update Issue"/>
|
<input type="button" id="update" class="btn btn-small" value="Update Issue"/>
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${issue.title} - Issue #${issue.issueId} - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"${issue.title} - Issue #${issue.issueId} - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("issues", repository)
|
@html.menu("issues", repository){
|
||||||
@tab("issues", repository)
|
@tab("issues", false, repository)
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs pull-left fill-width">
|
||||||
<li class="pull-left"><a href="@url(repository)/issues"><i class="icon-arrow-left"></i> Back to issue list</a></li>
|
<li class="pull-left"><a href="@url(repository)/issues"><i class="icon-arrow-left"></i> Back to issue list</a></li>
|
||||||
<li class="pull-right">Issue #@issue.issueId</li>
|
<li class="pull-right">Issue #@issue.issueId</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -36,4 +36,5 @@
|
|||||||
@issues.html.labels(issue, issueLabels, labels, hasWritePermission, repository)
|
@issues.html.labels(issue, issueLabels, labels, hasWritePermission, repository)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Issues - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"Issues - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("issues", repository)
|
@html.menu("issues", repository){
|
||||||
@tab("issues", repository)
|
@tab("issues", false, repository)
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
@@ -140,6 +140,7 @@
|
|||||||
<input type="hidden" name="checked"/>
|
<input type="hidden" name="checked"/>
|
||||||
</form>
|
</form>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission){
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
@helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.IssuesService.IssueLimit, 7, condition.toURL)
|
@helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.IssuesService.IssueLimit, 7, condition.toURL)
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a class="btn@if(condition.state == "open"){ active}" href="@condition.copy(state = "open").toURL">@openCount Open</a>
|
<a class="btn btn-small@if(condition.state == "open"){ active}" href="@condition.copy(state = "open").toURL">@openCount Open</a>
|
||||||
<a class="btn@if(condition.state == "closed"){ active}" href="@condition.copy(state = "closed").toURL">@closedCount Closed</a>
|
<a class="btn btn-small@if(condition.state == "closed"){ active}" href="@condition.copy(state = "closed").toURL">@closedCount Closed</a>
|
||||||
</div>
|
</div>
|
||||||
@helper.html.dropdown(
|
@helper.html.dropdown(
|
||||||
value = (condition.sort, condition.direction) match {
|
value = (condition.sort, condition.direction) match {
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Milestones - ${repository.owner}/${repository.name}"){
|
@html.main(s"Milestones - ${repository.owner}/${repository.name}"){
|
||||||
@html.header("milestones", repository)
|
@html.menu("milestones", repository){
|
||||||
@issues.html.tab("milestones", repository)
|
@issues.html.tab("milestones", false, repository)
|
||||||
<form method="POST" action="@url(repository)/issues/milestones/@if(milestone.isEmpty){new}else{@milestone.get.milestoneId/edit}" validate="true">
|
<form method="POST" action="@url(repository)/issues/milestones/@if(milestone.isEmpty){new}else{@milestone.get.milestoneId/edit}" validate="true">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<label for="title"><string>Title</string></label>
|
<label for="title"><string>Title</string></label>
|
||||||
@@ -36,4 +36,5 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Milestones - ${repository.owner}/${repository.name}"){
|
@html.main(s"Milestones - ${repository.owner}/${repository.name}"){
|
||||||
@html.header("issues", repository)
|
@html.menu("issues", repository){
|
||||||
@issues.html.tab("milestones", repository)
|
@issues.html.tab("milestones", false, repository)
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
@@ -94,6 +94,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
@(active: String, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context)
|
@(active: String, create: Boolean, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs pull-left fill-width">
|
||||||
<li@if(active == "issues"){ class="active"}><a href="@url(repository)/issues">Browse Issues</a></li>
|
<li@if(active == "issues"){ class="active"}><a href="@url(repository)/issues">Browse Issues</a></li>
|
||||||
<li@if(active == "milestones"){ class="active"}><a href="@url(repository)/issues/milestones">Milestones</a></li>
|
<li@if(active == "milestones"){ class="active"}><a href="@url(repository)/issues/milestones">Milestones</a></li>
|
||||||
@if(loginAccount.isDefined){
|
@if(loginAccount.isDefined){
|
||||||
<li class="pull-right">
|
<li class="pull-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a class="btn btn-success" href="@url(repository)/issues/new">New Issue</a>
|
@if(create){
|
||||||
|
<a class="btn btn-small btn-success" href="#" disabled="disabled">New Issue</a>
|
||||||
|
} else {
|
||||||
|
<a class="btn btn-small btn-success" href="@url(repository)/issues/new">New Issue</a>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,9 +72,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="container body">
|
|
||||||
@body
|
@body
|
||||||
</div>
|
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
$('#search').submit(function(){
|
$('#search').submit(function(){
|
||||||
|
|||||||
173
src/main/twirl/menu.scala.html
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
@(active: String,
|
||||||
|
repository: service.RepositoryService.RepositoryInfo,
|
||||||
|
id: Option[String] = None,
|
||||||
|
expand: Boolean = false)(body: Html)(implicit context: app.Context)
|
||||||
|
@import context._
|
||||||
|
@import view.helpers._
|
||||||
|
|
||||||
|
@sidemenu(path: String, name: String, label: String, count: Int = 0) = {
|
||||||
|
<li @if(active == name){class="active"}>
|
||||||
|
<div class="@if(active == name){margin} else {gradient} pull-left"></div>
|
||||||
|
<a href="@url(repository)@path"@* @if(!expand){data-toggle="tooltip" data-placement="left" data-original-title="Code"}*@>
|
||||||
|
@if(active == name){
|
||||||
|
<img src="@assets/common/images/menu-@{name}-active.png">
|
||||||
|
} else {
|
||||||
|
<img src="@assets/common/images/menu-@{name}-active.png" class="menu-icon-active" style="display:none;">
|
||||||
|
<img src="@assets/common/images/menu-@{name}.png" class="menu-icon">
|
||||||
|
}
|
||||||
|
@if(expand){ @label}
|
||||||
|
@if(expand && count > 0){
|
||||||
|
<div class="pull-right"><span class="label">@count</span></div>
|
||||||
|
}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
@if(repository.commitCount > 0){
|
||||||
|
<div class="pull-right">
|
||||||
|
<div class="input-prepend">
|
||||||
|
<a href="@path/@repository.owner/@repository.name/fork" class="btn btn-small" style="margin-bottom: 10px;">Fork</a>
|
||||||
|
<span class="add-on count"><a href="@url(repository)/network/members">@repository.forkedCount</a></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<div class="head">
|
||||||
|
@helper.html.repositoryicon(repository, true)
|
||||||
|
<a href="@url(repository.owner)">@repository.owner</a> / <a href="@url(repository)" class="strong">@repository.name</a>
|
||||||
|
|
||||||
|
@defining(repository.repository){ x =>
|
||||||
|
@if(repository.repository.originRepositoryName.isDefined){
|
||||||
|
<div class="forked">
|
||||||
|
forked from <a href="@path/@x.parentUserName/@x.parentRepositoryName">@x.parentUserName/@x.parentRepositoryName</a>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr style="margin-bottom: 20px;"/>
|
||||||
|
<div class="container body">
|
||||||
|
<div style="width: @if(expand){170px} else {40px};" class="pull-right">
|
||||||
|
<ul class="sidemenu">
|
||||||
|
<li style="height: 12px"><div class="gradient pull-left" style="height: 12px"></div></li>
|
||||||
|
@sidemenu("" , "code" , "Code")
|
||||||
|
@sidemenu("/issues", "issues", "Issues", repository.issueCount)
|
||||||
|
@sidemenu("/pulls" , "pulls" , "Pull Requests", repository.pullCount)
|
||||||
|
@sidemenu("/wiki" , "wiki" , "Wiki")
|
||||||
|
@if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){
|
||||||
|
@sidemenu("/settings", "settings", "Settings")
|
||||||
|
}
|
||||||
|
<li style="height: 12px"><div class="gradient pull-left" style="height: 12px"></div></li>
|
||||||
|
</ul>
|
||||||
|
@if(expand){
|
||||||
|
<div class="small">
|
||||||
|
<strong id="repository-url-proto">HTTP</strong> <span class="mute">clone URL</span>
|
||||||
|
</div>
|
||||||
|
@helper.html.copy("repository-url-copy", repository.httpUrl){
|
||||||
|
<input type="text" value="@repository.httpUrl" id="repository-url" readonly>
|
||||||
|
}
|
||||||
|
@if(settings.ssh && loginAccount.isDefined){
|
||||||
|
<div class="small">
|
||||||
|
<span class="mute">You can clone <a href="javascript:void(0);" id="repository-url-http">HTTP</a> or <a href="javascript:void(0);" id="repository-url-ssh">SSH</a>.</span>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
@id.map { id =>
|
||||||
|
<div style="margin-top: 10px;">
|
||||||
|
<a href="@{url(repository)}/archive/@{encodeRefName(id)}.zip" class="btn btn-small" style="width: 147px;"><i class="icon-download-alt"></i>Download ZIP</a>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div style="margin-right: @if(expand){180px} else {50px};">
|
||||||
|
@if(expand){
|
||||||
|
@repository.repository.description.map { description =>
|
||||||
|
<p class="description">@description</p>
|
||||||
|
}
|
||||||
|
<div style="border: 1px solid #eee; padding: 4px; margin-bottom: 10px;">
|
||||||
|
<table class="fill-width">
|
||||||
|
<tr>
|
||||||
|
<td style="width: 33%; text-align: center;">
|
||||||
|
<a href="@url(repository)/commits/@encodeRefName(id.getOrElse(""))" class="header-link">
|
||||||
|
<img src="@assets/common/images/header-commits-hover.png" class="header-icon-hover" style="display: none;"/>
|
||||||
|
<img src="@assets/common/images/header-commits.png" class="header-icon"/>
|
||||||
|
<strong>@repository.commitCount</strong> commits
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="width: 33%; text-align: center;">
|
||||||
|
<a href="@url(repository)/branches" class="header-link" class="header-link">
|
||||||
|
<img src="@assets/common/images/header-branches-hover.png" class="header-icon-hover" style="display: none;"/>
|
||||||
|
<img src="@assets/common/images/header-branches.png" class="header-icon"/>
|
||||||
|
<strong>@repository.branchList.length</strong> branches
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="width: 33%; text-align: center;">
|
||||||
|
<a href="@url(repository)/tags" class="header-link" class="header-link">
|
||||||
|
<img src="@assets/common/images/header-tags-hover.png" class="header-icon-hover" style="display: none;"/>
|
||||||
|
<img src="@assets/common/images/header-tags.png" class="header-icon"/>
|
||||||
|
<strong>@repository.tags.length</strong> releases
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
@body
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function(){
|
||||||
|
$('a.header-link').mouseover(function(e){
|
||||||
|
var target = e.target;
|
||||||
|
if(e.target.tagName != 'A'){
|
||||||
|
target = e.target.parentElement;
|
||||||
|
}
|
||||||
|
$(target).children('strong' ).css('color', '#0088cc');
|
||||||
|
$(target).children('img.header-icon-hover').css('display', 'inline');
|
||||||
|
$(target).children('img.header-icon' ).css('display', 'none');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('a.header-link').mouseout(function(e){
|
||||||
|
var target = e.target;
|
||||||
|
if(e.target.tagName != 'A'){
|
||||||
|
target = e.target.parentElement;
|
||||||
|
}
|
||||||
|
$(target).children('strong' ).css('color', 'black');
|
||||||
|
$(target).children('img.header-icon-hover').css('display', 'none');
|
||||||
|
$(target).children('img.header-icon' ).css('display', 'inline');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('ul.sidemenu a').mouseover(function(e){
|
||||||
|
var target = e.target;
|
||||||
|
if(e.target.tagName == "IMG"){
|
||||||
|
target = e.target.parentElement;
|
||||||
|
}
|
||||||
|
$(target).prev ('div.gradient' ).css('border-left', '1px solid silver');
|
||||||
|
$(target).children('img.menu-icon-active').css('display', 'inline');
|
||||||
|
$(target).children('img.menu-icon' ).css('display', 'none');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('ul.sidemenu a').mouseout(function(e){
|
||||||
|
var target = e.target;
|
||||||
|
if(e.target.tagName == "IMG"){
|
||||||
|
target = e.target.parentElement;
|
||||||
|
}
|
||||||
|
$(target).prev ('div.gradient' ).css('border-left', '1px solid #eee');
|
||||||
|
$(target).children('img.menu-icon-active').css('display', 'none');
|
||||||
|
$(target).children('img.menu-icon' ).css('display', 'inline');
|
||||||
|
});
|
||||||
|
|
||||||
|
@if(settings.ssh && loginAccount.isDefined){
|
||||||
|
$('#repository-url-http').click(function(){
|
||||||
|
$('#repository-url-proto').text('HTTP');
|
||||||
|
$('#repository-url').val('@repository.httpUrl');
|
||||||
|
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#repository-url-ssh').click(function(){
|
||||||
|
$('#repository-url-proto').text('SSH');
|
||||||
|
$('#repository-url').val('@repository.sshUrl(settings.sshPort.getOrElse(service.SystemSettingsService.DefaultSshPort), loginAccount.get.userName)');
|
||||||
|
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Pull Requests - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"Pull Requests - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("pulls", repository)
|
@html.menu("pulls", repository){
|
||||||
<div class="pullreq-info">
|
<div class="pullreq-info">
|
||||||
<div id="compare-info">
|
<div id="compare-info">
|
||||||
<a href="#" id="edit-compare-condition" class="btn btn-mini pull-right">Edit</a>
|
<a href="#" id="edit-compare-condition" class="btn btn-mini pull-right">Edit</a>
|
||||||
@@ -50,15 +50,15 @@
|
|||||||
<div id="pull-request-form" class="box" style="display: none;">
|
<div id="pull-request-form" class="box" style="display: none;">
|
||||||
<div class="box-content">
|
<div class="box-content">
|
||||||
<form method="POST" action="@path/@originRepository.owner/@originRepository.name/pulls/new" validate="true">
|
<form method="POST" action="@path/@originRepository.owner/@originRepository.name/pulls/new" validate="true">
|
||||||
<div style="width: 260px; position: absolute; margin-left: 635px;">
|
<div style="width: 240px; position: absolute; margin-left: 610px;">
|
||||||
<div class="check-conflict" style="display: none;">
|
<div class="check-conflict" style="display: none;">
|
||||||
<img src="@assets/common/images/indicator.gif"/> Checking...
|
<img src="@assets/common/images/indicator.gif"/> Checking...
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="width: 620px; border-right: 1px solid #d4d4d4;">
|
<div style="width: 600px; border-right: 1px solid #d4d4d4;">
|
||||||
<span class="error" id="error-title"></span>
|
<span class="error" id="error-title"></span>
|
||||||
<input type="text" name="title" style="width: 600px" placeholder="Title"/>
|
<input type="text" name="title" style="width: 580px" placeholder="Title"/>
|
||||||
@helper.html.preview(repository, "", false, true, true, "width: 600px; height: 200px;")
|
@helper.html.preview(repository, "", false, true, true, "width: 580px; height: 200px;")
|
||||||
<input type="hidden" name="targetUserName" value="@originRepository.owner"/>
|
<input type="hidden" name="targetUserName" value="@originRepository.owner"/>
|
||||||
<input type="hidden" name="targetBranch" value="@originId"/>
|
<input type="hidden" name="targetBranch" value="@originId"/>
|
||||||
<input type="hidden" name="requestUserName" value="@forkedRepository.owner"/>
|
<input type="hidden" name="requestUserName" value="@forkedRepository.owner"/>
|
||||||
@@ -84,6 +84,7 @@
|
|||||||
@pulls.html.commits(commits, repository)
|
@pulls.html.commits(commits, repository)
|
||||||
@helper.html.diff(diffs, repository, Some(commitId), Some(sourceId), true)
|
@helper.html.diff(diffs, repository, Some(commitId), Some(sourceId), true)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
Merge pull request #@issue.issueId from @{pullreq.requestUserName}/@{pullreq.requestBranch}
|
Merge pull request #@issue.issueId from @{pullreq.requestUserName}/@{pullreq.requestBranch}
|
||||||
</div>
|
</div>
|
||||||
<span id="error-message" class="error"></span>
|
<span id="error-message" class="error"></span>
|
||||||
<textarea name="message" style="width: 680px; height: 80px;">@issue.title</textarea>
|
<textarea name="message" style="width: 635px; height: 80px;">@issue.title</textarea>
|
||||||
<div>
|
<div>
|
||||||
<input type="button" class="btn" value="Cancel" id="cancel-merge-pull-request"/>
|
<input type="button" class="btn" value="Cancel" id="cancel-merge-pull-request"/>
|
||||||
<input type="submit" class="btn btn-success" value="Confirm merge"/>
|
<input type="submit" class="btn btn-success" value="Confirm merge"/>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Pull Requests - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"Pull Requests - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("pulls", repository)
|
@html.menu("pulls", repository){
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
@@ -46,5 +46,6 @@
|
|||||||
</div>
|
</div>
|
||||||
@listparts(issues, page, openCount, closedCount, condition, Some(repository), hasWritePermission)
|
@listparts(issues, page, openCount, closedCount, condition, Some(repository), hasWritePermission)
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a class="btn@if(condition.state == "open"){ active}" href="@condition.copy(state = "open").toURL">@openCount Open</a>
|
<a class="btn btn-small@if(condition.state == "open"){ active}" href="@condition.copy(state = "open").toURL">@openCount Open</a>
|
||||||
<a class="btn@if(condition.state == "closed"){ active}" href="@condition.copy(state = "closed").toURL">@closedCount Closed</a>
|
<a class="btn btn-small@if(condition.state == "closed"){ active}" href="@condition.copy(state = "closed").toURL">@closedCount Closed</a>
|
||||||
</div>
|
</div>
|
||||||
@helper.html.dropdown(
|
@helper.html.dropdown(
|
||||||
value = (condition.sort, condition.direction) match {
|
value = (condition.sort, condition.direction) match {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${issue.title} - Pull Request #${issue.issueId} - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"${issue.title} - Pull Request #${issue.issueId} - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("pulls", repository)
|
@html.menu("pulls", repository){
|
||||||
@defining(dayByDayCommits.flatten){ commits =>
|
@defining(dayByDayCommits.flatten){ commits =>
|
||||||
<div class="pullreq-info">
|
<div class="pullreq-info">
|
||||||
@if(issue.closed) {
|
@if(issue.closed) {
|
||||||
@@ -32,12 +32,12 @@
|
|||||||
into <code>@pullreq.userName:@pullreq.branch</code> from <code>@pullreq.requestUserName:@pullreq.requestBranch</code>
|
into <code>@pullreq.userName:@pullreq.branch</code> from <code>@pullreq.requestUserName:@pullreq.requestBranch</code>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav nav-tabs" id="pullreq-tab">
|
<ul class="nav nav-tabs fill-width pull-left" id="pullreq-tab">
|
||||||
<li class="active"><a href="#discussion">Discussion</a></li>
|
<li class="active"><a href="#discussion">Discussion</a></li>
|
||||||
<li><a href="#commits">Commits <span class="badge">@commits.size</span></a></li>
|
<li><a href="#commits">Commits <span class="badge">@commits.size</span></a></li>
|
||||||
<li><a href="#files">Files Changed <span class="badge">@diffs.size</span></a></li>
|
<li><a href="#files">Files Changed <span class="badge">@diffs.size</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content">
|
<div class="tab-content fill-width pull-left">
|
||||||
<div class="tab-pane active" id="discussion">
|
<div class="tab-pane active" id="discussion">
|
||||||
@pulls.html.discussion(issue, pullreq, comments, issueLabels, collaborators, milestones, labels, hasWritePermission, repository)
|
@pulls.html.discussion(issue, pullreq, comments, issueLabels, collaborators, milestones, labels, hasWritePermission, repository)
|
||||||
</div>
|
</div>
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$('#pullreq-tab a').click(function (e) {
|
$('#pullreq-tab a').click(function (e) {
|
||||||
|
|||||||
@@ -7,9 +7,17 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(branch, repository, "files")
|
|
||||||
<div class="head">
|
<div class="head">
|
||||||
|
@helper.html.dropdown(
|
||||||
|
value = if(branch.length == 40) branch.substring(0, 10) else branch,
|
||||||
|
prefix = if(branch.length == 40) "tree" else if(repository.branchList.contains(branch)) "branch" else "tree",
|
||||||
|
mini = true
|
||||||
|
){
|
||||||
|
@repository.branchList.map { x =>
|
||||||
|
<li><a href="@url(repository)/blob/@encodeRefName(x)/@pathList.mkString("/")">@helper.html.checkicon(x == branch) @x</a></li>
|
||||||
|
}
|
||||||
|
}
|
||||||
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> /
|
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> /
|
||||||
@pathList.zipWithIndex.map { case (section, i) =>
|
@pathList.zipWithIndex.map { case (section, i) =>
|
||||||
@if(i == pathList.length - 1){
|
@if(i == pathList.length - 1){
|
||||||
@@ -30,13 +38,13 @@
|
|||||||
<a href="@url(repository)/commit/@latestCommit.id" class="commit-message">@link(latestCommit.summary, repository)</a>
|
<a href="@url(repository)/commit/@latestCommit.id" class="commit-message">@link(latestCommit.summary, repository)</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-group pull-right">
|
<div class="btn-group pull-right">
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission && content.viewType == "text" && repository.branchList.contains(branch)){
|
||||||
<a class="btn" href="@url(repository)/edit/@encodeRefName(branch)/@pathList.mkString("/")">Edit</a>
|
<a class="btn btn-mini" href="@url(repository)/edit/@encodeRefName(branch)/@pathList.mkString("/")">Edit</a>
|
||||||
}
|
}
|
||||||
<a class="btn" href="?raw=true">Raw</a>
|
<a class="btn btn-mini" href="?raw=true">Raw</a>
|
||||||
<a class="btn" href="@url(repository)/commits/@encodeRefName(branch)/@pathList.mkString("/")">History</a>
|
<a class="btn btn-mini" href="@url(repository)/commits/@encodeRefName(branch)/@pathList.mkString("/")">History</a>
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission){
|
||||||
<a class="btn btn-danger" href="@url(repository)/remove/@encodeRefName(branch)/@pathList.mkString("/")">Delete</a>
|
<a class="btn btn-mini btn-danger" href="@url(repository)/remove/@encodeRefName(branch)/@pathList.mkString("/")">Delete</a>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
@@ -46,7 +54,9 @@
|
|||||||
@if(content.viewType == "text"){
|
@if(content.viewType == "text"){
|
||||||
@defining(pathList.reverse.head) { file =>
|
@defining(pathList.reverse.head) { file =>
|
||||||
@if(renderableSuffixes.find(suffix => file.toLowerCase.endsWith(suffix))) {
|
@if(renderableSuffixes.find(suffix => file.toLowerCase.endsWith(suffix))) {
|
||||||
|
<div class="box-content markdown-body" style="border: none; padding-left: 16px; padding-right: 16px;">
|
||||||
@renderMarkup(pathList, content.content.get, branch, repository, false, false)
|
@renderMarkup(pathList, content.content.get, branch, repository, false, false)
|
||||||
|
</div>
|
||||||
} else {
|
} else {
|
||||||
<pre class="prettyprint linenums blob">@content.content.get</pre>
|
<pre class="prettyprint linenums blob">@content.content.get</pre>
|
||||||
}
|
}
|
||||||
@@ -56,14 +66,16 @@
|
|||||||
<img src="?raw=true"/>
|
<img src="?raw=true"/>
|
||||||
}
|
}
|
||||||
@if(content.viewType == "large" || content.viewType == "binary"){
|
@if(content.viewType == "large" || content.viewType == "binary"){
|
||||||
<div style="text-align: center">
|
<div style="text-align: center; padding-top: 20px; padding-bottom: 20px;">
|
||||||
<a href="?raw=true">View Raw</a><br>
|
<a href="?raw=true">View Raw</a><br>
|
||||||
|
<br>
|
||||||
(Sorry about that, but we can't show files that are this big right now)
|
(Sorry about that, but we can't show files that are this big right now)
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script src="@assets/common/js/jquery.ba-hashchange.js"></script>
|
<script src="@assets/common/js/jquery.ba-hashchange.js"></script>
|
||||||
<script>
|
<script>
|
||||||
@@ -71,6 +83,31 @@ $(window).load(function(){
|
|||||||
$(window).hashchange(function(){
|
$(window).hashchange(function(){
|
||||||
updateHighlighting();
|
updateHighlighting();
|
||||||
}).hashchange();
|
}).hashchange();
|
||||||
|
|
||||||
|
$('pre.prettyprint ol.linenums li').each(function(i, e){
|
||||||
|
var pre = $('pre.prettyprint');
|
||||||
|
pre.append($('<div class="source-line-num">')
|
||||||
|
.data('line', (i + 1))
|
||||||
|
.css({
|
||||||
|
cursor : 'pointer',
|
||||||
|
position: 'absolute',
|
||||||
|
top : $(e).position().top + 'px',
|
||||||
|
left : pre.position().left + 'px',
|
||||||
|
width : ($(e).position().left - pre.position().left) + 'px',
|
||||||
|
height : '16px'
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
$('div.source-line-num').click(function(e){
|
||||||
|
var line = $(e.target).data('line');
|
||||||
|
var hash = location.hash;
|
||||||
|
if(e.shiftKey == true && hash.match(/#L\d+(-L\d+)?/)){
|
||||||
|
var lines = hash.split('-');
|
||||||
|
location.hash = lines[0] + '-L' + line;
|
||||||
|
} else {
|
||||||
|
location.hash = '#L' + line;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(repository.repository.defaultBranch, repository, "branches", true)
|
|
||||||
<h1>Branches</h1>
|
<h1>Branches</h1>
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
@@ -36,6 +35,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@import util.Implicits._
|
@import util.Implicits._
|
||||||
@html.main(commit.shortMessage, Some(repository)){
|
@html.main(commit.shortMessage, Some(repository)){
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(commitId, repository, "commits")
|
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
@@ -71,6 +70,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@helper.html.diff(diffs, repository, Some(commit.id), oldCommitId, true)
|
@helper.html.diff(diffs, repository, Some(commit.id), oldCommitId, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -7,9 +7,17 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(branch, repository, if(pathList.isEmpty) "commits" else "files")
|
|
||||||
<div class="head">
|
<div class="head">
|
||||||
|
@helper.html.dropdown(
|
||||||
|
value = if(branch.length == 40) branch.substring(0, 10) else branch,
|
||||||
|
prefix = if(branch.length == 40) "tree" else if(repository.branchList.contains(branch)) "branch" else "tree",
|
||||||
|
mini = true
|
||||||
|
){
|
||||||
|
@repository.branchList.map { x =>
|
||||||
|
<li><a href="@url(repository)/commits/@encodeRefName(x)">@helper.html.checkicon(x == branch) @x</a></li>
|
||||||
|
}
|
||||||
|
}
|
||||||
@if(pathList.isEmpty){
|
@if(pathList.isEmpty){
|
||||||
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> / Commit History
|
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> / Commit History
|
||||||
}
|
}
|
||||||
@@ -63,4 +71,5 @@
|
|||||||
<button class="btn" onclick="location.href='?page=@{page - 1}'"@if(page <= 1){ disabled="true"}>< Newer</button>
|
<button class="btn" onclick="location.href='?page=@{page - 1}'"@if(page <= 1){ disabled="true"}>< Newer</button>
|
||||||
<button class="btn" onclick="location.href='?page=@{page + 1}'"@if(!hasNext){ disabled="true"}>Older ></button>
|
<button class="btn" onclick="location.href='?page=@{page + 1}'"@if(!hasNext){ disabled="true"}>Older ></button>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Deleting ${path} at ${fileName} - ${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"Deleting ${path} at ${fileName} - ${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(branch, repository, "files")
|
|
||||||
<form method="POST" action="@url(repository)/remove" validate="true">
|
<form method="POST" action="@url(repository)/remove" validate="true">
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> /
|
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> /
|
||||||
@@ -50,6 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script type="text/javascript" src="@assets/jsdifflib/difflib.js"></script>
|
<script type="text/javascript" src="@assets/jsdifflib/difflib.js"></script>
|
||||||
<script type="text/javascript" src="@assets/jsdifflib/diffview.js"></script>
|
<script type="text/javascript" src="@assets/jsdifflib/diffview.js"></script>
|
||||||
|
|||||||
@@ -5,9 +5,8 @@
|
|||||||
content: util.JGitUtil.ContentInfo)(implicit context: app.Context)
|
content: util.JGitUtil.ContentInfo)(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(if(fileName.isEmpty) "New File" else s"Editing ${path} at ${fileName} - ${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(if(fileName.isEmpty) "New File" else s"Editing ${fileName.get} at ${branch} - ${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(branch, repository, "files")
|
|
||||||
<form method="POST" action="@url(repository)/@if(fileName.isEmpty){create}else{update}" validate="true">
|
<form method="POST" action="@url(repository)/@if(fileName.isEmpty){create}else{update}" validate="true">
|
||||||
<span class="error" id="error-newFileName"></span>
|
<span class="error" id="error-newFileName"></span>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
@@ -24,18 +23,23 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<select id="wrap" class="input-medium" style="margin-bottom: 0px;">
|
<select id="wrap" class="input-medium" style="margin-bottom: 0px; height: 26px; padding: 0px;">
|
||||||
<optgroup label="Line Wrap Mode">
|
<optgroup label="Line Wrap Mode">
|
||||||
<option value="false">No wrap</option>
|
<option value="false">No wrap</option>
|
||||||
<option value="true">Soft wrap</option>
|
<option value="true">Soft wrap</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="btn-group" data-toggle="buttons-radio">
|
||||||
|
<input type="button" id="btn-code" class="btn btn-default btn-small active" value="Code">
|
||||||
|
<input type="button" id="btn-preview" class="btn btn-default btn-small" value="Preview">
|
||||||
|
</div>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div id="editor" style="width: 100%; height: 600px;"></div>
|
<div id="editor" style="width: 100%; height: 600px;"></div>
|
||||||
|
<div id="preview" style="width: 100%; display: none;"></div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -62,8 +66,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script src="@assets/ace/ace.js" type="text/javascript" charset="utf-8"></script>
|
<script src="@assets/ace/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script type="text/javascript" src="@assets/jsdifflib/difflib.js"></script>
|
||||||
|
<script type="text/javascript" src="@assets/jsdifflib/diffview.js"></script>
|
||||||
|
<link href="@assets/jsdifflib/diffview.css" type="text/css" rel="stylesheet" />
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
$('#editor').text($('#initial').val());
|
$('#editor').text($('#initial').val());
|
||||||
@@ -88,7 +96,6 @@ $(function(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
$('#wrap').change(function(){
|
$('#wrap').change(function(){
|
||||||
console.log($('#wrap option:selected').val());
|
|
||||||
if($('#wrap option:selected').val() == 'true'){
|
if($('#wrap option:selected').val() == 'true'){
|
||||||
editor.getSession().setUseWrapMode(true);
|
editor.getSession().setUseWrapMode(true);
|
||||||
} else {
|
} else {
|
||||||
@@ -103,5 +110,36 @@ $(function(){
|
|||||||
$('#commit').click(function(){
|
$('#commit').click(function(){
|
||||||
$('#content').val(editor.getValue());
|
$('#content').val(editor.getValue());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#btn-code').click(function(){
|
||||||
|
$('#editor').show();
|
||||||
|
$('#preview').hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#btn-preview').click(function(){
|
||||||
|
$('#editor').hide();
|
||||||
|
$('#preview').show()
|
||||||
|
|
||||||
|
@if(renderableSuffixes.find(suffix => fileName.map(_.toLowerCase.endsWith(suffix)).getOrElse(false))) {
|
||||||
|
// update preview
|
||||||
|
$('#preview').html('<img src="@assets/common/images/indicator.gif"> Previewing...');
|
||||||
|
$.post('@url(repository)/_preview', {
|
||||||
|
content : editor.getValue(),
|
||||||
|
enableWikiLink : false,
|
||||||
|
enableRefsLink : false
|
||||||
|
}, function(data){
|
||||||
|
$('#preview').empty().append(
|
||||||
|
$('<div class="markdown-body" style="padding-left: 16px; padding-right: 16px;">').html(data));
|
||||||
|
prettyPrint();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Show diff
|
||||||
|
$('#preview').empty()
|
||||||
|
.append($('<div id="diffText">'))
|
||||||
|
.append($('<textarea id="newText" style="display: none;">').html(editor.getValue()))
|
||||||
|
.append($('<textarea id="oldText" style="display: none;">').html($('#initial').val()));
|
||||||
|
diffUsingJS('oldText', 'newText', 'diffText');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -8,14 +8,17 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository, Some(branch), pathList.isEmpty){
|
||||||
@tab(branch, repository, "files")
|
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<div class="pull-right">
|
@helper.html.dropdown(
|
||||||
@defining(repository.commitCount){ commitCount =>
|
value = if(branch.length == 40) branch.substring(0, 10) else branch,
|
||||||
<a href="@url(repository)/commits/@encodeRefName(branch)">@if(commitCount > 10000){ 10000+ } else { @commitCount } @plural(commitCount, "commit")</a>
|
prefix = if(branch.length == 40) "tree" else if(repository.branchList.contains(branch)) "branch" else "tree",
|
||||||
|
mini = true
|
||||||
|
){
|
||||||
|
@repository.branchList.map { x =>
|
||||||
|
<li><a href="@url(repository)/tree/@encodeRefName(x)">@helper.html.checkicon(x == branch) @x</a></li>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</div>
|
|
||||||
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> /
|
<a href="@url(repository)/tree/@encodeRefName(branch)">@repository.name</a> /
|
||||||
@pathList.zipWithIndex.map { case (section, i) =>
|
@pathList.zipWithIndex.map { case (section, i) =>
|
||||||
<a href="@url(repository)/tree/@encodeRefName(branch)/@pathList.take(i + 1).mkString("/")">@section</a> /
|
<a href="@url(repository)/tree/@encodeRefName(branch)/@pathList.take(i + 1).mkString("/")">@section</a> /
|
||||||
@@ -24,8 +27,7 @@
|
|||||||
<a href="@url(repository)/new/@encodeRefName(branch)/@pathList.mkString("/")"><img src="@assets/common/images/newfile.png"/></a>
|
<a href="@url(repository)/new/@encodeRefName(branch)/@pathList.mkString("/")"><img src="@assets/common/images/newfile.png"/></a>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="box">
|
<table class="table table-file-list">
|
||||||
<table class="table table-file-list" style="border: 1px solid silver;">
|
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="4" style="font-weight: normal;">
|
<th colspan="4" style="font-weight: normal;">
|
||||||
<a href="@url(repository)/commit/@latestCommit.id" class="commit-message">@link(latestCommit.summary, repository)</a>
|
<a href="@url(repository)/commit/@latestCommit.id" class="commit-message">@link(latestCommit.summary, repository)</a>
|
||||||
@@ -41,7 +43,7 @@
|
|||||||
@avatar(latestCommit, 20)
|
@avatar(latestCommit, 20)
|
||||||
@user(latestCommit.committer, latestCommit.mailAddress, "username strong")
|
@user(latestCommit.committer, latestCommit.mailAddress, "username strong")
|
||||||
<span class="muted">@datetime(latestCommit.time)</span>
|
<span class="muted">@datetime(latestCommit.time)</span>
|
||||||
<div class="pull-right align-right monospace">
|
<div class="pull-right align-right monospace" style="line-height: 18px;">
|
||||||
<a href="@url(repository)/commit/@latestCommit.id" class="commit-id"><span class="muted">latest commit</span> @latestCommit.id.substring(0, 10)</a>
|
<a href="@url(repository)/commit/@latestCommit.id" class="commit-id"><span class="muted">latest commit</span> @latestCommit.id.substring(0, 10)</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,20 +81,19 @@
|
|||||||
<a href="@url(repository)/blob@{(encodeRefName(branch) :: pathList).mkString("/", "/", "/")}@file.name">@file.name</a>
|
<a href="@url(repository)/blob@{(encodeRefName(branch) :: pathList).mkString("/", "/", "/")}@file.name">@file.name</a>
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>@datetime(file.time)</td>
|
<td class="mute">
|
||||||
<td>
|
|
||||||
<a href="@url(repository)/commit/@file.commitId" class="commit-message">@link(file.message, repository)</a>
|
<a href="@url(repository)/commit/@file.commitId" class="commit-message">@link(file.message, repository)</a>
|
||||||
[@user(file.committer, file.mailAddress)]
|
[@user(file.committer, file.mailAddress)]
|
||||||
</td>
|
</td>
|
||||||
|
<td style="text-align: right;">@datetime(file.time)</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
|
|
||||||
@readme.map { case(filePath, content) =>
|
@readme.map { case(filePath, content) =>
|
||||||
<div id="readme" class="box">
|
<div id="readme">
|
||||||
<div class="box-header">@filePath.reverse.head</div>
|
<div class="box-header">@filePath.reverse.head</div>
|
||||||
<div class="box-content markdown-body">@renderMarkup(filePath, content, branch, repository, false, false)</div>
|
<div class="box-content markdown-body">@renderMarkup(filePath, content, branch, repository, false, false)</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("network", repository)
|
@html.menu("network", repository){
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
<li class="active"><a href="@url(repository)/network/members">Members</a></li>
|
<li class="active"><a href="@url(repository)/network/members">Members</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -31,4 +31,5 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@if(!hasWritePermission){
|
@if(!hasWritePermission){
|
||||||
<h3>This is an empty repository</h3>
|
<h3>This is an empty repository</h3>
|
||||||
} else {
|
} else {
|
||||||
@@ -23,4 +23,5 @@
|
|||||||
git push -u origin master
|
git push -u origin master
|
||||||
</pre>
|
</pre>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
@(id: String, repository: service.RepositoryService.RepositoryInfo, active: String,
|
|
||||||
hideBranchPulldown: Boolean = false)(implicit context: app.Context)
|
|
||||||
@import context._
|
|
||||||
@import view.helpers._
|
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
@if(!hideBranchPulldown){
|
|
||||||
<li>
|
|
||||||
@helper.html.dropdown(
|
|
||||||
value = if(id.length == 40) id.substring(0, 10) else id,
|
|
||||||
prefix = if(id.length == 40) "tree" else if(repository.branchList.contains(id)) "branch" else "tree",
|
|
||||||
mini = false,
|
|
||||||
style = "margin-right: 20px;"
|
|
||||||
){
|
|
||||||
@repository.branchList.map { branch =>
|
|
||||||
<li><a href="@url(repository)/@if(active=="commits"){commits} else {tree}/@encodeRefName(branch)">@helper.html.checkicon(id == branch) @branch</a></li>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
<li@if(active=="files" ){ class="active"}><a href="@url(repository)/tree/@encodeRefName(id)">Files</a></li>
|
|
||||||
<li@if(active=="commits" ){ class="active"}><a href="@url(repository)/commits/@encodeRefName(id)">Commits</a></li>
|
|
||||||
<li@if(active=="branches"){ class="active"}><a href="@url(repository)/branches">Branches@if(repository.branchList.length > 0){ <span class="badge">@repository.branchList.length</span>}</a></li>
|
|
||||||
<li@if(active=="tags" ){ class="active"}><a href="@url(repository)/tags">Tags@if(repository.tags.length > 0){ <span class="badge">@repository.tags.length</span>}</a></li>
|
|
||||||
<li class="pull-right">
|
|
||||||
@helper.html.copy("repository-url-copy", repository.httpUrl, true){
|
|
||||||
@if(settings.ssh && loginAccount.isDefined){
|
|
||||||
<div class="btn-group add-on" data-toggle="buttons-radio" style="padding: 0px; border-width: 0px;">
|
|
||||||
<button type="button" class="btn active" id="repository-url-http">HTTP</button><button type="button" class="btn" id="repository-url-ssh">SSH</button>
|
|
||||||
</div>
|
|
||||||
} else {
|
|
||||||
<span class="add-on">HTTP</span>
|
|
||||||
}
|
|
||||||
<input type="text" value="@repository.httpUrl" id="repository-url" style="width: 150px;" readonly>
|
|
||||||
}
|
|
||||||
</li>
|
|
||||||
<li class="pull-right" style="margin-right: 8px;">
|
|
||||||
<div class="pull-right">
|
|
||||||
<a href="@{url(repository)}/archive/@{encodeRefName(id)}.zip" class="btn"><i class="icon-download-alt"></i>ZIP</a>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
@if(settings.ssh && loginAccount.isDefined){
|
|
||||||
<script>
|
|
||||||
$(function(){
|
|
||||||
$('#repository-url-http').click(function(){
|
|
||||||
$('#repository-url').val('@repository.httpUrl');
|
|
||||||
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
|
||||||
});
|
|
||||||
$('#repository-url-ssh').click(function(){
|
|
||||||
$('#repository-url').val('@repository.sshUrl(settings.sshPort.getOrElse(service.SystemSettingsService.DefaultSshPort), loginAccount.get.userName)');
|
|
||||||
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
}
|
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
@html.main(s"${repository.owner}/${repository.name}", Some(repository)) {
|
||||||
@html.header("code", repository)
|
@html.menu("code", repository){
|
||||||
@tab(repository.repository.defaultBranch, repository, "tags", true)
|
|
||||||
<h1>Tags</h1>
|
<h1>Tags</h1>
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
@@ -21,4 +20,5 @@
|
|||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</table>
|
</table>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
repository: service.RepositoryService.RepositoryInfo)(body: Html)(implicit context: app.Context)
|
repository: service.RepositoryService.RepositoryInfo)(body: Html)(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.header("", repository)
|
@html.menu("", repository){
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<ul class="nav nav-tabs nav-stacked side-menu">
|
<ul class="nav nav-tabs nav-stacked side-menu">
|
||||||
@@ -34,4 +34,5 @@
|
|||||||
</form>
|
</form>
|
||||||
@body
|
@body
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Settings", Some(repository)){
|
@html.main("Settings", Some(repository)){
|
||||||
@html.header("settings", repository)
|
@html.menu("settings", repository){
|
||||||
@menu("collaborators", repository){
|
@menu("collaborators", repository){
|
||||||
<h3>Manage Collaborators</h3>
|
<h3>Manage Collaborators</h3>
|
||||||
<ul class="collaborator">
|
<ul class="collaborator">
|
||||||
@@ -31,4 +31,5 @@
|
|||||||
</form>
|
</form>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Danger Zone", Some(repository)){
|
@html.main("Danger Zone", Some(repository)){
|
||||||
@html.header("settings", repository)
|
@html.menu("settings", repository){
|
||||||
@menu("danger", repository){
|
@menu("danger", repository){
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="box-header">Danger Zone</div>
|
<div class="box-header">Danger Zone</div>
|
||||||
@@ -34,6 +34,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Settings", Some(repository)){
|
@html.main("Settings", Some(repository)){
|
||||||
@html.header("settings", repository)
|
@html.menu("settings", repository){
|
||||||
@menu("hooks", repository){
|
@menu("hooks", repository){
|
||||||
@helper.html.information(info)
|
@helper.html.information(info)
|
||||||
<h3>WebHook URLs</h3>
|
<h3>WebHook URLs</h3>
|
||||||
@@ -20,4 +20,5 @@
|
|||||||
<a href="@url(repository)/settings/hooks/test" class="btn">Test Hook</a>
|
<a href="@url(repository)/settings/hooks/test" class="btn">Test Hook</a>
|
||||||
</form>
|
</form>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main("Settings", Some(repository)){
|
@html.main("Settings", Some(repository)){
|
||||||
@html.header("settings", repository)
|
@html.menu("settings", repository){
|
||||||
@menu("options", repository){
|
@menu("options", repository){
|
||||||
@helper.html.information(info)
|
@helper.html.information(info)
|
||||||
<form id="form" method="post" action="@url(repository)/settings/options" validate="true">
|
<form id="form" method="post" action="@url(repository)/settings/options" validate="true">
|
||||||
@@ -96,4 +96,5 @@
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,19 +10,18 @@
|
|||||||
@import org.eclipse.jgit.diff.DiffEntry.ChangeType
|
@import org.eclipse.jgit.diff.DiffEntry.ChangeType
|
||||||
@html.main(s"Compare Revisions - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"Compare Revisions - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@helper.html.information(info)
|
@helper.html.information(info)
|
||||||
@html.header("wiki", repository)
|
@html.menu("wiki", repository){
|
||||||
@tab("history", repository)
|
<ul class="nav nav-tabs fill-width pull-left">
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li>
|
<li>
|
||||||
<h1 class="wiki-title"><span class="muted">Compare Revisions</span></h1>
|
<h1 class="wiki-title"><span class="muted">Compare Revisions</span></h1>
|
||||||
</li>
|
</li>
|
||||||
<li class="pull-right">
|
<li class="pull-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
@if(pageName.isDefined){
|
@if(pageName.isDefined){
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)">View Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)">View Page</a>
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)/_history">Back to Page History</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)/_history">Back to Page History</a>
|
||||||
} else {
|
} else {
|
||||||
<a class="btn" href="@url(repository)/wiki/_history">Back to Wiki History</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/_history">Back to Wiki History</a>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
@@ -37,4 +36,5 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,31 +4,31 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${if(pageName.isEmpty) "New Page" else pageName} - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"${if(pageName.isEmpty) "New Page" else pageName} - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("wiki", repository)
|
@html.menu("wiki", repository){
|
||||||
@tab("", repository)
|
<ul class="nav nav-tabs fill-width pull-left">
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li>
|
<li>
|
||||||
<h1 class="wiki-title"><span class="muted">Editing</span> @if(pageName.isEmpty){New Page} else {@pageName}</h1>
|
<h1 class="wiki-title"><span class="muted">Editing</span> @if(pageName.isEmpty){New Page} else {@pageName}</h1>
|
||||||
</li>
|
</li>
|
||||||
<li class="pull-right">
|
<li class="pull-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
@if(page.isDefined){
|
@if(page.isDefined){
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)">View Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)">View Page</a>
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)/_delete" id="delete">Delete Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)/_delete" id="delete">Delete Page</a>
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)/_history">Page History</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)/_history">Page History</a>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<form action="@url(repository)/wiki/@if(page.isEmpty){_new} else {_edit}" method="POST" validate="true">
|
<form action="@url(repository)/wiki/@if(page.isEmpty){_new} else {_edit}" method="POST" validate="true">
|
||||||
<span id="error-pageName" class="error"></span>
|
<span id="error-pageName" class="error"></span>
|
||||||
<input type="text" name="pageName" value="@pageName" style="width: 900px; font-weight: bold;" placeholder="Input a page name."/>
|
<input type="text" name="pageName" value="@pageName" style="width: 850px; font-weight: bold;" placeholder="Input a page name."/>
|
||||||
@helper.html.preview(repository, page.map(_.content).getOrElse(""), true, false, false, "width: 900px; height: 400px;", "")
|
@helper.html.preview(repository, page.map(_.content).getOrElse(""), true, false, false, "width: 850px; height: 400px;", "")
|
||||||
<input type="text" name="message" value="" style="width: 900px;" placeholder="Write a small message here explaining this change. (Optional)"/>
|
<input type="text" name="message" value="" style="width: 850px;" placeholder="Write a small message here explaining this change. (Optional)"/>
|
||||||
<input type="hidden" name="currentPageName" value="@pageName"/>
|
<input type="hidden" name="currentPageName" value="@pageName"/>
|
||||||
<input type="hidden" name="id" value="@page.map(_.id)"/>
|
<input type="hidden" name="id" value="@page.map(_.id)"/>
|
||||||
<input type="submit" value="Save" class="btn btn-success">
|
<input type="submit" value="Save" class="btn btn-success">
|
||||||
</form>
|
</form>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|||||||
@@ -4,9 +4,8 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"History - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"History - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("wiki", repository)
|
@html.menu("wiki", repository){
|
||||||
@tab(if(pageName.isEmpty) "history" else "", repository)
|
<ul class="nav nav-tabs fill-width pull-left">
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li>
|
<li>
|
||||||
<h1 class="wiki-title">
|
<h1 class="wiki-title">
|
||||||
@if(pageName.isEmpty){
|
@if(pageName.isEmpty){
|
||||||
@@ -20,18 +19,18 @@
|
|||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
@if(pageName.isEmpty){
|
@if(pageName.isEmpty){
|
||||||
@if(loginAccount.isDefined){
|
@if(loginAccount.isDefined){
|
||||||
<a class="btn" href="@url(repository)/wiki/_new">New Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/_new">New Page</a>
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)">View Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)">View Page</a>
|
||||||
@if(loginAccount.isDefined){
|
@if(loginAccount.isDefined){
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)/_edit">Edit Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)/_edit">Edit Page</a>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered fill-width pull-left">
|
||||||
@commits.map { commit =>
|
@commits.map { commit =>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="0%"><input type="checkbox" name="commitId" value="@commit.id"></td>
|
<td width="0%"><input type="checkbox" name="commitId" value="@commit.id"></td>
|
||||||
@@ -68,4 +67,5 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,30 +1,75 @@
|
|||||||
@(pageName: String,
|
@(pageName: String,
|
||||||
page: service.WikiService.WikiPageInfo,
|
page: service.WikiService.WikiPageInfo,
|
||||||
|
pages: List[String],
|
||||||
repository: service.RepositoryService.RepositoryInfo,
|
repository: service.RepositoryService.RepositoryInfo,
|
||||||
hasWritePermission: Boolean)(implicit context: app.Context)
|
hasWritePermission: Boolean)(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
|
@import service.WikiService._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"${pageName} - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"${pageName} - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("wiki", repository)
|
@html.menu("wiki", repository){
|
||||||
@tab((if(pageName == "Home") "home" else ""), repository)
|
<ul class="nav nav-tabs fill-width pull-left">
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li>
|
<li>
|
||||||
<h1 class="wiki-title">@pageName</h1>
|
<h1 class="wiki-title">@pageName</h1>
|
||||||
|
<div class="small">
|
||||||
|
<span class="muted"><strong>@page.committer</strong> edited this page at @datetime(page.time)</span>
|
||||||
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="pull-right">
|
<li class="pull-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission){
|
||||||
<a class="btn" href="@url(repository)/wiki/_new">New Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/_new">New Page</a>
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)/_edit">Edit Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)/_edit">Edit Page</a>
|
||||||
}
|
}
|
||||||
<a class="btn" href="@url(repository)/wiki/@urlEncode(pageName)/_history">Page History</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/@urlEncode(pageName)/_history">Page History</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div style="width: 200px;" class="pull-right">
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<tr>
|
||||||
|
<th class="metal">Pages</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<ul style="margin-left: 0px; margin-bottom: 0px;">
|
||||||
|
@pages.map { page =>
|
||||||
|
<li style="margin-left:0px; list-style-type: none;"><a href="@url(repository)/wiki/@urlEncode(page)">@page</a></li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="small">
|
||||||
|
<strong>Clone this wiki locally</strong>
|
||||||
|
</div>
|
||||||
|
@helper.html.copy("repository-url-copy", repository.httpUrl){
|
||||||
|
<input type="text" value="@httpUrl(repository)" id="repository-url" style="width: 160px;" readonly>
|
||||||
|
}
|
||||||
|
@if(settings.ssh && loginAccount.isDefined){
|
||||||
|
<div class="small">
|
||||||
|
<span class="mute">You can clone <a href="javascript:void(0);" id="repository-url-http">HTTP</a> or <a href="javascript:void(0);" id="repository-url-ssh">SSH</a>.</span>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div style="margin-right: 220px;">
|
||||||
<div class="markdown-body">
|
<div class="markdown-body">
|
||||||
@markdown(page.content, repository, true, false)
|
@markdown(page.content, repository, true, false)
|
||||||
</div>
|
</div>
|
||||||
<div class="small">
|
|
||||||
<span class="muted">Last edited by @page.committer at @datetime(page.time)</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@if(settings.ssh && loginAccount.isDefined){
|
||||||
|
<script>
|
||||||
|
$(function(){
|
||||||
|
$('#repository-url-http').click(function(){
|
||||||
|
$('#repository-url').val('@httpUrl(repository)');
|
||||||
|
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
||||||
|
});
|
||||||
|
$('#repository-url-ssh').click(function(){
|
||||||
|
$('#repository-url').val('@sshUrl(repository, settings, loginAccount.get.userName)');
|
||||||
|
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
}
|
}
|
||||||
@@ -4,24 +4,23 @@
|
|||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@html.main(s"Pages - ${repository.owner}/${repository.name}", Some(repository)){
|
@html.main(s"Pages - ${repository.owner}/${repository.name}", Some(repository)){
|
||||||
@html.header("wiki", repository)
|
@html.menu("wiki", repository){
|
||||||
@tab("pages", repository)
|
<ul class="nav nav-tabs fill-width pull-left">
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li>
|
<li>
|
||||||
<h1 class="wiki-title"><span class="muted">Pages</span></h1>
|
<h1 class="wiki-title"><span class="muted">Pages</span></h1>
|
||||||
</li>
|
</li>
|
||||||
<li class="pull-right">
|
<li class="pull-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
@if(hasWritePermission){
|
@if(hasWritePermission){
|
||||||
<a class="btn" href="@url(repository)/wiki/_new">New Page</a>
|
<a class="btn btn-small" href="@url(repository)/wiki/_new">New Page</a>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul class="pull-left">
|
||||||
@pages.map { page =>
|
@pages.map { page =>
|
||||||
<li><a href="@url(repository)/wiki/@urlEncode(page)">@page</a></li>
|
<li><a href="@url(repository)/wiki/@urlEncode(page)">@page</a></li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
@(active: String,
|
|
||||||
repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context)
|
|
||||||
@import context._
|
|
||||||
@import service.WikiService._
|
|
||||||
@import view.helpers._
|
|
||||||
<ul class="nav nav-tabs">
|
|
||||||
<li@if(active == "home" ){ class="active"}><a href="@url(repository)/wiki">Home</a></li>
|
|
||||||
<li@if(active == "pages" ){ class="active"}><a href="@url(repository)/wiki/_pages">Pages</a></li>
|
|
||||||
<li@if(active == "history"){ class="active"}><a href="@url(repository)/wiki/_history">Wiki History</a></li>
|
|
||||||
<li class="pull-right">
|
|
||||||
@helper.html.copy("repository-url-copy", httpUrl(repository), true){
|
|
||||||
@if(settings.ssh && loginAccount.isDefined){
|
|
||||||
<div class="btn-group add-on" data-toggle="buttons-radio" style="padding: 0px; border-width: 0px;">
|
|
||||||
<button type="button" class="btn active" id="repository-url-http">HTTP</button><button type="button" class="btn" id="repository-url-ssh">SSH</button>
|
|
||||||
</div>
|
|
||||||
} else {
|
|
||||||
<span class="add-on">HTTP</span>
|
|
||||||
}
|
|
||||||
<input type="text" value="@httpUrl(repository)" readonly id="repository-url">
|
|
||||||
}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
@if(settings.ssh && loginAccount.isDefined){
|
|
||||||
<script>
|
|
||||||
$(function(){
|
|
||||||
$('#repository-url-http').click(function(){
|
|
||||||
$('#repository-url').val('@httpUrl(repository)');
|
|
||||||
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
|
||||||
});
|
|
||||||
$('#repository-url-ssh').click(function(){
|
|
||||||
$('#repository-url').val('@sshUrl(repository, settings, loginAccount.get.userName)');
|
|
||||||
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
}
|
|
||||||
@@ -3,12 +3,44 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
body {
|
body {
|
||||||
color: #333;
|
color: #333;
|
||||||
|
line-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
li p {
|
li p {
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 30px;
|
||||||
|
line-height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 28px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 26px;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h7 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* Global Header */
|
/* Global Header */
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
@@ -55,55 +87,31 @@ span.header-version {
|
|||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================================== */
|
|
||||||
/* Repository Header */
|
|
||||||
/* ======================================================================== */
|
|
||||||
table.global-nav {
|
|
||||||
width: 920px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.global-nav th {
|
|
||||||
padding-top: 5px;
|
|
||||||
padding-bottom: 8px;
|
|
||||||
width: 16%;
|
|
||||||
border-bottom: 2px solid silver;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.global-nav th.active {
|
|
||||||
border-bottom: 2px solid #D26911;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.global-nav th a:link, table.global-nav th a:hover, table.global-nav th a:visited {
|
|
||||||
color: #333;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.input-prepend span.count {
|
div.input-prepend span.count {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
-webkit-border-radius: 0 4px 4px 0;
|
-webkit-border-radius: 0 4px 4px 0;
|
||||||
-moz-border-radius: 0 4px 4px 0;
|
-moz-border-radius: 0 4px 4px 0;
|
||||||
border-radius: 0 4px 4px 0;
|
border-radius: 0 4px 4px 0;
|
||||||
|
height: 16px;
|
||||||
|
font-size: 12px;
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* General Styles */
|
/* General Styles */
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
div.head {
|
div.head {
|
||||||
font-size: large;
|
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.head div.forked {
|
div.head div.forked {
|
||||||
font-size: 60%;
|
font-size: 60%;
|
||||||
|
margin-left: 36px;
|
||||||
color: #999999;
|
color: #999999;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.head div.forked a {
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.container {
|
div.container {
|
||||||
width: 920px;
|
width: 920px;
|
||||||
}
|
}
|
||||||
@@ -122,7 +130,7 @@ span.error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.small {
|
.small {
|
||||||
font-size: 85%;
|
font-size: 80%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.strong {
|
.strong {
|
||||||
@@ -302,6 +310,63 @@ span.highlight {
|
|||||||
background-color: #ffff88;
|
background-color: #ffff88;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fill-width {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/* Side Menu */
|
||||||
|
/****************************************************************************/
|
||||||
|
ul.sidemenu {
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.sidemenu img {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ul.sidemenu a:hover{
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.sidemenu li.active {
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
border-right: 2px solid #bb4444;
|
||||||
|
border-left: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.sidemenu div.gradient {
|
||||||
|
width: 5px;
|
||||||
|
height: 30px;
|
||||||
|
background: linear-gradient(to right, #eee, #fff);
|
||||||
|
margin-right: 4px;
|
||||||
|
border-left: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.sidemenu div.margin {
|
||||||
|
width: 5px;
|
||||||
|
height: 30px;
|
||||||
|
margin-right: 4px;
|
||||||
|
border-left: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.sidemenu li {
|
||||||
|
line-height: 30px;
|
||||||
|
height: 30px;
|
||||||
|
border-left: 1px solid #eee;
|
||||||
|
margin-left:0px;
|
||||||
|
border-right: 2px solid white;
|
||||||
|
list-style-type: none;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.sidemenu span.badge {
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
/* Create Repository */
|
/* Create Repository */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
@@ -413,8 +478,33 @@ div.activity-content {
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
/* Repository Viewer */
|
/* Repository Viewer */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
p.description {
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.header-link {
|
||||||
|
color: #888;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.header-link img {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.header-link strong {
|
||||||
|
color: black;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.header-link:hover {
|
||||||
|
color: #0088cc;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
table.table-file-list {
|
table.table-file-list {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.table-file-list th, table.table-file-list td {
|
table.table-file-list th, table.table-file-list td {
|
||||||
@@ -436,6 +526,7 @@ table.table-file-list td {
|
|||||||
th, td, .table th, .table td {
|
th, td, .table th, .table td {
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
|
line-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.commit-avatar-image {
|
div.commit-avatar-image {
|
||||||
@@ -458,7 +549,16 @@ pre.commit-description {
|
|||||||
#repository-url {
|
#repository-url {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
width: 300px;
|
height: 16px;
|
||||||
|
width: 129px;
|
||||||
|
color: silver;
|
||||||
|
font-size: 9pt;
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
#repository-url-copy {
|
||||||
|
height: 18px;
|
||||||
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul#commit-file-list {
|
ul#commit-file-list {
|
||||||
@@ -486,8 +586,12 @@ pre.blob {
|
|||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#readme {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
#readme .box-content {
|
#readme .box-content {
|
||||||
padding: 30px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
li.highlight {
|
li.highlight {
|
||||||
@@ -910,6 +1014,26 @@ a.markdown-anchor-link {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 a.markdown-anchor-link, h2 a.markdown-anchor-link, h3 a.markdown-anchor-link {
|
h1 a.markdown-anchor-link {
|
||||||
top: 10px;
|
top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 a.markdown-anchor-link {
|
||||||
|
top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 a.markdown-anchor-link {
|
||||||
|
top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 a.markdown-anchor-link {
|
||||||
|
top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 a.markdown-anchor-link {
|
||||||
|
top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 a.markdown-anchor-link {
|
||||||
|
top: 2px;
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
src/main/webapp/assets/common/images/header-branches-hover.png
Normal file
|
After Width: | Height: | Size: 288 B |
BIN
src/main/webapp/assets/common/images/header-branches.png
Normal file
|
After Width: | Height: | Size: 311 B |
BIN
src/main/webapp/assets/common/images/header-commits-hover.png
Normal file
|
After Width: | Height: | Size: 382 B |
BIN
src/main/webapp/assets/common/images/header-commits.png
Normal file
|
After Width: | Height: | Size: 406 B |
BIN
src/main/webapp/assets/common/images/header-tags-hover.png
Normal file
|
After Width: | Height: | Size: 342 B |
BIN
src/main/webapp/assets/common/images/header-tags.png
Normal file
|
After Width: | Height: | Size: 371 B |
BIN
src/main/webapp/assets/common/images/menu-code-active.png
Normal file
|
After Width: | Height: | Size: 290 B |
BIN
src/main/webapp/assets/common/images/menu-code.png
Normal file
|
After Width: | Height: | Size: 262 B |
BIN
src/main/webapp/assets/common/images/menu-issues-active.png
Normal file
|
After Width: | Height: | Size: 485 B |
BIN
src/main/webapp/assets/common/images/menu-issues.png
Normal file
|
After Width: | Height: | Size: 404 B |
BIN
src/main/webapp/assets/common/images/menu-pulls-active.png
Normal file
|
After Width: | Height: | Size: 356 B |
BIN
src/main/webapp/assets/common/images/menu-pulls.png
Normal file
|
After Width: | Height: | Size: 315 B |
BIN
src/main/webapp/assets/common/images/menu-settings-active.png
Normal file
|
After Width: | Height: | Size: 418 B |
BIN
src/main/webapp/assets/common/images/menu-settings.png
Normal file
|
After Width: | Height: | Size: 368 B |
BIN
src/main/webapp/assets/common/images/menu-wiki-active.png
Normal file
|
After Width: | Height: | Size: 419 B |
BIN
src/main/webapp/assets/common/images/menu-wiki.png
Normal file
|
After Width: | Height: | Size: 367 B |