1
0
mirror of https://github.com/ascribe/onion.git synced 2024-11-15 01:25:17 +01:00

Merge remote-tracking branch 'remotes/origin/AD-527-transition-to-login-form-if-user-'

This commit is contained in:
diminator 2015-07-02 18:34:33 +02:00
commit 8d6a126aa7
36 changed files with 765 additions and 122 deletions

Binary file not shown.

View File

@ -0,0 +1,88 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_socialregular" horiz-adv-x="2400" >
<font-face units-per-em="2400" ascent="1920" descent="-480" />
<missing-glyph horiz-adv-x="500" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="800" />
<glyph unicode=" " />
<glyph unicode="&#xa0;" />
<glyph unicode="&#x2000;" horiz-adv-x="1200" />
<glyph unicode="&#x2001;" />
<glyph unicode="&#x2002;" horiz-adv-x="1200" />
<glyph unicode="&#x2003;" />
<glyph unicode="&#x2004;" horiz-adv-x="800" />
<glyph unicode="&#x2005;" horiz-adv-x="600" />
<glyph unicode="&#x2006;" horiz-adv-x="400" />
<glyph unicode="&#x2007;" horiz-adv-x="400" />
<glyph unicode="&#x2008;" horiz-adv-x="300" />
<glyph unicode="&#x2009;" horiz-adv-x="480" />
<glyph unicode="&#x200a;" horiz-adv-x="133" />
<glyph unicode="&#x202f;" horiz-adv-x="480" />
<glyph unicode="&#x205f;" horiz-adv-x="600" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#xe001;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1238 1934q-121 0 -228 -33t-185.5 -90t-135.5 -131t-85.5 -158.5t-28.5 -170.5q0 -134 53 -231 t146 -135q14 -6 27 -6q21 0 36.5 13t21.5 35l18 71q6 28 2 42.5t-20 33.5q-52 61 -52 155q0 58 16.5 114.5t51 107t82 89t114 61t142.5 22.5q157 0 248 -83t91 -226q0 -124 -33 -225.5t-90.5 -159t-127.5 -57.5q-59 0 -92 43q-31 39 -19 91q10 41 35 121q11 37 17 56.5 t13.5 49t10.5 52t3 42.5q0 37 -10.5 67t-30 51.5t-47.5 33t-61 11.5q-85 0 -143 -75t-58 -184q0 -77 26 -142q-136 -465 -152 -536q-34 -141 -4 -347q2 -16 14 -26t27 -10q21 0 36 18q125 160 163 299q8 30 85 252q38 -36 93.5 -57.5t112.5 -21.5q146 0 262 81.5t181 227.5 t65 328q0 79 -25.5 157t-76 146.5t-120.5 120.5t-165.5 82.5t-202.5 30.5z" />
<glyph unicode="&#xe002;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM840 2010q-15 0 -27 -8l-515 -332q-28 -17 -28 -40q0 -20 27 -39l304 -240q-23 -19 -63.5 -51 t-80.5 -63.5t-76.5 -60.5t-59.5 -47.5t-24 -18.5q-19 -16 -19 -40q0 -11 143.5 -104.5t286.5 -181.5l144 -87l352 293l348 -302q498 323 548 357q15 10 21 17t3.5 13t-7 9.5t-17 11.5t-21.5 14l-301 240q64 50 190.5 145.5t128.5 96.5q8 3 12.5 6t9 11t4.5 19q0 30 -33 44 l-513 330q-12 8 -32 8t-34 -12l-320 -266l-318 266q-14 12 -33 12zM1648 1351l-448 -281l-448 280l450 281zM794 608l370 -234q13 -8 27 -8t27 8l374 238l-392 330z" />
<glyph unicode="&#xe003;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1052q119 130 119 332q0 39 -6.5 76.5t-20.5 71t-28.5 61.5t-38.5 57t-41.5 49t-47 46.5t-45.5 40t-45 37.5q-34 27 -50 41t-37.5 35t-30.5 38t-9 33q0 21 14.5 43.5t31 37.5 t50.5 43q25 21 39 33t38.5 36.5t39.5 44t33 50t28.5 60t17.5 69t7 81.5q0 59 -2.5 99t-11 86t-25 78.5t-45 63.5t-69.5 54q24 5 63 10q26 4 41.5 6.5t39 7t37.5 11t28.5 16t21 22.5t6.5 30h-591q-20 0 -60 -3.5t-133.5 -27.5t-172 -64.5t-150.5 -127.5t-93 -203v676 q0 103 73.5 176.5t176.5 73.5zM1800 1900v-400h-400v-100h400v-400h100v400h400v100h-400v400h-100zM504 1777q92 0 174 -81.5t116 -206.5q23 -98 13.5 -183.5t-53 -148.5t-108.5 -81q-23 -6 -47 -6q-92 0 -174 81t-116 206q-40 146 5 268q22 57 58.5 94.5t84.5 50.5 q22 7 47 7zM0 528v737q9 -53 27.5 -99t42 -79t54.5 -60t62 -45t67.5 -31t68 -20t66.5 -11t60 -5t52 -1v-106q0 -9 2.5 -16.5t8.5 -14t9.5 -10t12 -9.5t9.5 -7q2 -2 10.5 -7.5t12 -9t9.5 -10t10 -14.5t6 -18q-45 0 -92 -2.5t-118 -13t-133.5 -27t-130 -48t-116.5 -73.5z M589 565q105 0 195 -36.5t144.5 -99t59.5 -138.5q6 -90 -57.5 -169t-173.5 -122h-406q-58 24 -102 59t-70 80.5t-29 94.5q-5 60 22.5 116.5t83.5 102.5q117 98 292 110q22 2 41 2z" />
<glyph unicode="&#xe004;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1280 1812q-66 0 -128 -17t-111 -46t-91.5 -65t-75 -78.5t-55.5 -81.5t-38 -78q-206 1 -304.5 -73.5 t-98.5 -235.5q0 -163 116.5 -250t339.5 -87h1264q30 0 33 13.5t-19 28.5q-83 62 -134.5 115t-86 118t-53 135t-32.5 178q-12 84 -57.5 161.5t-114 135.5t-161.5 92.5t-193 34.5z" />
<glyph unicode="&#xe005;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM2100 1700h-800l44 -137l182 -25l-269 -279l-316 424l229 21l18 120h-900l4 -127l256 -37l452 -560 l-2 -277l-228 -33l-24 -135l882 1l16 144h-244v300l436 421l205 42z" />
<glyph unicode="&#xe006;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1200 1800h-300q-184 0 -292 -108t-108 -292v-500q0 -71 28.5 -135t77 -112t112.5 -82.5t136 -52.5 t146 -18h400q74 0 146 18t136 52.5t112.5 82.5t77 112t28.5 135v319q0 22 -11 40.5t-29.5 29.5t-40.5 11l-88 7q-26 0 -48 12.5t-36 34.5t-16 49q0 120 -57 211t-154 138.5t-220 47.5zM946 1499h257q40 0 68.5 -28.5t28.5 -69t-28.5 -69t-68.5 -28.5h-257q-41 0 -69.5 28.5 t-28.5 68.5q0 27 13 49.5t35.5 35.5t49.5 13zM945 987h517q25 0 46 -12.5t33.5 -33.5t12.5 -47q0 -38 -27 -65t-65 -27h-517q-38 0 -65 27t-27 65.5t27 65.5t65 27z" />
<glyph unicode="&#xe007;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1187 1985q-143 0 -280 -51q3 -2 51 -44.5t112.5 -99t141 -125.5t140 -126.5t106 -99.5t42.5 -48v538 q-48 22 -101.5 35t-101.5 17t-110 4zM840 1898q-198 -101 -312.5 -288.5t-114.5 -409.5q0 -98 28 -204l697 632q-6 6 -78 71.5t-144.5 131t-75.5 67.5zM1600 1881v-981h331q46 143 52 267.5t-25 259.5q-14 66 -54.5 138t-92 132.5t-107.5 109t-104 74.5zM800 519v685 q0 -6 -32.5 -38t-80 -74t-93.5 -81.5t-82 -70l-36 -30.5q91 -256 324 -391zM900 805v-336q70 -36 175 -48.5t210.5 -1t183.5 42.5q82 33 155.5 79.5t143 114.5t118.5 149h-986z" />
<glyph unicode="&#xe008;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1224 2006q-61 0 -107 -2.5t-92 -8.5t-79.5 -17.5t-66 -29t-55 -43t-43 -60t-35 -79.5t-24.5 -102 q-6 -29 9.5 -51.5t47.5 -28.5l196 -22q15 1 28 9.5t22 22.5t12 31q9 46 41 70.5t83 24.5q52 0 77 -38q7 -11 8 -42.5t-2 -56.5l-4 -25q-25 -3 -65 -9t-127 -24t-129 -37q-110 -48 -170.5 -142t-60.5 -218q0 -158 89.5 -252.5t239.5 -94.5q70 0 123 12t100.5 40t98.5 76 q2 -3 8 -13q17 -26 29 -43t33 -44t38.5 -38t29.5 -4q39 23 114 71.5t101 70.5q1 1 9 7.5t9.5 8t7.5 8t6.5 10.5t3 11.5t0 15t-5.5 17.5t-10.5 22t-17.5 25q-2 2 -10 12.5t-10.5 14t-10 14.5t-11 16t-10 16t-9.5 18t-7 18t-6 20t-3.5 20t-1.5 22v346q0 32 -3 65.5t-13 79.5 t-26.5 87t-47 83t-70 72t-99 49t-132.5 19zM1240 1333q3 -16 5.5 -41t0 -79.5t-17.5 -81.5q-45 -82 -106 -82q-28 0 -49 13.5t-30.5 34t-13 37t-3.5 29.5q0 40 18 72.5t49 52.5t68.5 31.5t78.5 13.5zM1958 912q-138 0 -223 -61q-32 -22 -23 -51q6 -20 47 -20h1q16 0 72.5 10 t82.5 10q42 0 56 -3t20 -18t-7 -56t-62 -163q-4 -10 -8 -34t-1.5 -50t16.5 -29q11 -1 18 -0.5t16 6t13.5 9.5t11 10t8.5 8q42 34 71.5 94.5t41 118.5t11 107.5t-14.5 66.5q-19 23 -68.5 34t-78.5 11zM309 845q-31 0 -43 -28q-11 -31 15 -55q199 -179 416 -270.5t473 -91.5 q197 0 398 75t360 192q8 6 14 14t9 16.5t3.5 17.5t-2.5 18q-6 17 -21.5 28t-34.5 11q-15 0 -28 -6q-107 -45 -222.5 -77t-234 -49t-232.5 -17q-400 0 -841 214q-17 8 -29 8z" />
<glyph unicode="&#xe009;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1100 2000h-257q0 -7 -1 -20q-2 -46 -4.5 -69.5t-11.5 -61t-28 -70.5t-50 -69q-26 -31 -61 -53 t-66.5 -32.5t-59.5 -16.5t-44 -7l-17 -1v-300h200v-632q0 -71 24.5 -125.5t61.5 -86t88.5 -50.5t98.5 -25t98 -6h94q111 0 180.5 7.5t95 16t59.5 27.5v281q-117 -74 -218 -74q-40 0 -83.5 14t-71 34t-27.5 37v582h400v300h-400v400zM1850 758q-86 0 -147 -61t-61 -147 t61 -147t147 -61t147 61t61 147q0 56 -28 104t-76 76t-104 28z" />
<glyph unicode="&#xe010;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1155 2118q-122 0 -245.5 -39t-221.5 -102.5t-174 -138t-119 -149.5q12 0 49.5 1t82.5 2t89.5 2.5 t74 2.5t30.5 1q14 0 15 -15t-15 -17l-124 -9l343 -1019l210 631l-141 389l-104 9q-14 0 -14 15q0 3 1 5.5t5 6.5t10 4q129 -11 230 -11q18 0 41 0.5t44.5 1.5l43 2t40 2.5t33 2.5t23 1.5l8.5 0.5q14 0 15 -15t-14 -17l-124 -9l341 -1015l110 370q21 69 31.5 105t19 80.5 t8.5 78.5q0 52 -15 104.5t-31 84.5t-44 77l-24 39t-22.5 38t-15.5 31t-12.5 35t-3.5 33q0 34 13 63t45 49.5t77 20.5l70 -3q-6 6 -16 15.5t-43.5 37.5t-70.5 53.5t-95.5 57t-118.5 53.5t-138 37.5t-157 15.5zM1553 440l47 27q204 119 322 324.5t118 441.5q0 227 -108 425 l-38 -13q6 -42 6 -86q0 -142 -65 -303zM270 1233q0 -125 32.5 -240.5t86 -203.5t125 -163.5t146 -126t153.5 -85.5q-27 63 -224.5 604t-222.5 620q-40 -85 -68 -199.5t-28 -205.5zM1155 347q185 0 317 59l-303 811q-241 -708 -284 -828q100 -42 270 -42z" />
<glyph unicode="&#xe011;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM800 2000v-100h200v-1400h-200v-100h700v100h-200v1400h200v100h-700z" />
<glyph unicode="&#xe012;" d="M2400 250v1900q0 103 -73.5 176.5t-176.5 73.5h-1900q-103 0 -176.5 -73.5t-73.5 -176.5v-1900q0 -103 73.5 -176.5t176.5 -73.5h1900q103 0 176.5 73.5t73.5 176.5zM1900 1700l1.5 -55.5t3 -123t0 -170t-6 -204.5t-16 -218t-29 -218t-47.5 -197.5t-68 -163.5t-92.5 -109 t-120.5 -41q-78 0 -141 -3.5t-89.5 -7.5t-47 -5.5t-28.5 1.5t-19 15q-8 8 -12.5 19.5t-6 28t-1 34.5t3 43t5.5 49.5t6 59.5t5 66q2 37 20 62.5t44.5 36.5t58 16t63 2.5t57 -6t41.5 -7.5l16 -4v-100h-100q-22 0 -36.5 -10.5t-17 -25t1 -29t18 -25t34.5 -10.5h125 q26 0 44.5 31t25 76.5t9 97.5t-3.5 95q-2 21 -16.5 35t-35.5 21t-52 12t-60 7t-65 7t-62 11q-33 9 -60.5 28.5t-43.5 41t-27.5 41.5t-19.5 33.5t-13 13.5q-7 0 -10 -44t-5.5 -97t-16.5 -97t-40 -44q-85 0 -271.5 31t-225.5 70q-35 35 -70 135.5t-57 208.5t-35.5 194 t-13.5 110q0 40 27 62.5t73 19.5h300q19 0 28.5 1.5t25.5 11.5t24.5 30t15 59.5t6.5 97.5v200v33.5t2.5 21t5 15t11 6.5t17 4h26.5q1 1 82.5 0.5t105.5 -0.5q26 0 51 -18.5t42 -45t30.5 -53t20.5 -44.5l6 -19h400q48 0 94 -13t76 -36.5t30 -50.5zM800 1980v-281 q0 -10 -6 -25t-18 -32.5t-37 -29.5t-58 -12h-281zM1700 1100q40 4 -8 95q-48 90 -119 159q-47 46 -73 46q-25 0 -47.5 -45t-34 -100.5t-17 -102.5t-1.5 -52t29.5 9.5t57.5 32t48 17.5q25 0 83.5 -31t81.5 -28z" />
<glyph unicode="&#xe013;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1582 2100l-616 -1100l417 -700h469l-418 700l617 1100h-469zM458 1700l109 -296l-320 -504h470 l316 496l-111 304h-464z" />
<glyph unicode="&#xe014;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1534 1912q-45 25 -106.5 48t-133.5 42t-143 23.5t-132 -5t-104.5 -46t-56.5 -97.5q-7 -36 -6.5 -71 t17 -64t46.5 -37q43 22 107 27t130.5 -4.5t130 -27t114.5 -40.5q-75 -109 -169 -202.5t-233 -210.5q-94 90 -196 44q-79 -35 -123 -130q-53 -112 -19 -221q11 -33 29 -61q36 -5 66.5 2.5t48 20t43 27t48.5 19.5q30 -38 64 -106t63.5 -131.5t66.5 -127t87 -110.5t109 -64 q56 -16 119 -13.5t119 22t105 52.5t78.5 77t39.5 96t-14 110q-27 -1 -62.5 -13t-64.5 -24t-66.5 -19.5t-70.5 -0.5q-47 9 -90.5 46.5t-78 89.5t-64 104.5t-62 105t-60.5 78.5q8 7 23 21q65 58 99 89t90.5 86.5t93 97.5t78.5 98.5t75 112.5q103 16 146 117q35 83 12 166 q-19 70 -67 80q-57 10 -126 -76z" />
<glyph unicode="&#xe015;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1213 2020q-113 0 -221 -30t-199.5 -83.5t-168 -130.5t-130.5 -168.5t-84 -199.5t-30 -221t30 -221 t84 -199.5t130.5 -168t168 -130.5t199.5 -84t221 -30t221 30t199.5 84t168 130.5t130.5 168t84 199.5t30 221t-30 221t-84 199.5t-130.5 168.5t-168 130.5t-199.5 83.5t-221 30zM1213 1860q119 0 230.5 -40.5t202.5 -117.5q-8 -10 -18 -20.5t-27 -27t-36 -32.5t-46 -35 t-56 -36.5t-66.5 -36.5t-77.5 -34q-105 189 -234 368q63 12 128 12zM912 1789q127 -177 233 -363q-295 -75 -587 -78q36 143 129 259t225 182zM1750 1593q127 -167 137 -376q-150 27 -303 27q-77 0 -148 -8q-33 78 -46 105q58 25 112 55.5t91.5 57t71.5 55.5t52 47.5 t33 36.5zM1222 1282q20 -39 39 -81l-5 -2q-91 -29 -176.5 -78.5t-144 -98t-112 -105.5t-80.5 -92.5t-49 -69.5q-75 91 -115 202t-40 229l3 1q46 0 103 3t151 11t207 29t219 52zM1611 1097q139 0 265 -35q-16 -83 -51.5 -159.5t-88.5 -142t-121 -115.5q-41 217 -122 444 q58 8 118 8zM1324 1048q95 -252 138 -489q-120 -47 -249 -47q-222 0 -400 132q14 25 33.5 53.5t64.5 78.5t98 94.5t137 93.5t178 84z" />
<glyph unicode="&#xe016;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1000 1700v-700h-462l13 72q56 296 397 368l4 68q-239 -23 -406 -125q-83 -50 -140 -124t-81.5 -148 t-24.5 -148q0 -4 -0.5 -18.5t-0.5 -26.5t1 -18h900v800h-200zM1334 1490h-32l-1 -90h33q140 0 253 -24t184.5 -63.5t118 -92t63.5 -107.5t12 -111l-465 -2v300h-200v-400h900v98q0 107 -62.5 197t-191.5 170q-122 75 -258 100t-354 25z" />
<glyph unicode="&#xe017;" d="M1600 2400h550q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5h550v-1867q0 -14 7 -16.5t17 7.5l376 342l377 -342q9 -10 16 -7.5t7 16.5v1867z" />
<glyph unicode="&#xe018;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM650 2002q-76 0 -129.5 -54t-53.5 -129.5t53.5 -129t129.5 -53.5t129.5 53.5t53.5 129t-53.5 129.5 t-129.5 54zM1606 1503q-67 0 -121.5 -12t-88 -30.5t-56 -42.5t-31.5 -46t-9 -42v170h-300q2 -39 2 -289t-1 -480l-1 -231h300v551q0 51 10 75q1 4 4 10q7 18 11 26.5t11.5 23t16 22t20 16t27.5 12t35 3.5q81 0 123 -56.5t42 -153.5v-529h300v665q0 51 -1.5 90t-7 72t-10 57 t-17 43t-22.5 31t-31 21t-37 13.5t-47 7t-55 3t-66 0.5zM500 1500v-1000h300v1000h-300z" />
<glyph unicode="&#xe019;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM369 300h631v453l-157 122l41 62l116 -89v252h200v-190l213 116l37 -68l-250 -136v-147l374 203l37 -68 l-411 -223v-287h808l-826 1923z" />
<glyph unicode="&#xe020;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM1851 549l-558 714l238 237h-283l2 3l-350 297v200l-500 -500h200l297 -350l3 2v-283l231 232z" />
<glyph unicode="&#xe021;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM900 1700h-500v-1000h500q68 0 125 17.5t101.5 52.5t69.5 91t25 129q0 48 -7.5 87t-25 73t-48.5 58 t-74 36q41 20 65.5 51.5t33.5 68.5t9 88q0 135 -63.5 191.5t-210.5 56.5zM1400 1600v-100h500v100h-500zM600 1500h218q23 0 38 -1t34 -4t31 -9.5t23.5 -16.5t16.5 -27t5 -40q0 -58 -34.5 -80t-97.5 -22h-234v200zM1653 1426q-106 0 -189 -48t-128 -132t-45 -190 q0 -168 97.5 -274t264.5 -106q54 0 104 12t86.5 31.5t67 44t49.5 49.5t29.5 47.5t10.5 39.5h-197q-57 -63 -147 -63q-53 0 -90.5 20t-57.5 56t-22 87h514q0 113 -20 193t-63 132t-108 76.5t-156 24.5zM1647 1291q37 0 65 -10.5t44 -27.5t27 -37.5t14.5 -40.5t5 -37t0.5 -28 l-1 -10h-316q9 191 161 191zM600 1100h251q31 0 51 -1.5t41.5 -8t33 -18t19 -31.5t7.5 -50q0 -29 -10.5 -47t-31.5 -27t-44.5 -12.5t-58.5 -3.5l-258 -1v200z" />
<glyph unicode="&#xe022;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM500 1900v-400q-100 -131 -100 -300v-100q0 -136 68 -250t181 -180q-49 57 -49 130v200q0 83 58.5 141.5t141.5 58.5h800 q83 0 141.5 -58.5t58.5 -141.5v-200q0 -74 -49 -130q113 66 181 180t68 250v100q0 64 -8 113.5t-29 96.5t-57 90l-6 400l-400 -200h-600zM1000 1100h-200v-300h200v300zM1600 1100h-200v-300h200v300zM1300 800h-200v-100h200v100z" />
<glyph unicode="&#xe023;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM858 2100l-62 -260l-65 260h-163l150 -486l-1 -314h183v337l123 463h-165zM1151 1921 q-38 0 -64.5 -10.5t-52.5 -34.5q-22 -20 -28 -47t-6 -73v-296q0 -36 1 -52t8 -39t21 -38q18 -18 31.5 -27.5t33 -15.5t44.5 -6q76 0 123 47q38 39 38 129v295q0 83 -39 121q-25 25 -49.5 36t-60.5 11zM1600 1900v-439q0 -4 -9 -8t-21 -7.5t-15 -5.5q-13 -9 -40 -9 q-15 3 -15 18v451h-100v-490q0 -7 -0.5 -21.5t0 -21t1.5 -16.5t3.5 -16.5t6.5 -12.5q13 -18 26 -26t34 -8q44 0 80 21q4 2 17 6t22.5 8t9.5 8v-31h100v600h-100zM1151 1782q21 0 28 -6q1 -1 5 -3t7.5 -3.5t6 -4t2.5 -5.5v-310q0 -4 -3 -7.5t-6.5 -6t-7.5 -5t-5 -4t-7.5 -3 t-14 -2.5t-13.5 -1q-22 0 -27 6l-4 4l-5.5 5.5t-4.5 6t-2 7.5v310q0 4 4 7t9 5.5t7 4.5q6 5 31 5zM1600 1200h-800q-124 0 -212 -88t-88 -212v-200q0 -124 88 -212t212 -88h800q124 0 212 88t88 212v200q0 81 -40 150.5t-109 109.5t-151 40zM914 987h-90v-482h-87v482h-90 v82h267v-82zM1288 1069v-182q16 19 34 29q17 10 35 10q37 0 56 -26q20 -27 20 -78v-231q0 -45 -18.5 -68.5t-52.5 -23.5q-23 0 -41 9q-17 9 -33 29v-32h-78v564h78zM1609 931q53 0 81 -31q29 -32 29 -91v-106h-148v-79q0 -32 7 -45q8 -13 27 -13t26.5 11t7.5 47v29h80v-31 q0 -64 -29 -96q-29 -33 -87 -33q-52 0 -82 34q-30 35 -30 95v187q0 54 33 88t85 34zM1134 505h-77v45q-22 -25 -45 -38q-23 -14 -44 -14q-27 0 -41 19q-13 19 -13 56v348h77v-319q0 -15 5 -22t16 -7q8 0 21 9q14 9 24 23v316h77v-416zM1321 860q-9 0 -17 -4t-16 -13v-259 q10 -11 19 -15q8 -5 18 -5q15 0 21 9q7 9 7 29v215q0 21 -8 32q-9 11 -24 11zM1605 859q-18 0 -26 -12q-8 -11 -8 -37v-43h68v43q0 26 -8 37.5t-26 11.5z" />
<glyph unicode="&#xe024;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1835 1850q-59 59 -135 86t-152 22.5t-154.5 -27t-147 -61t-124 -81t-91.5 -84.5q-53 -63 -85 -95.5 t-56.5 -48.5t-44 -16.5t-48.5 -0.5q4 2 19 6.5t24.5 7.5t23.5 11t22.5 17.5t16 25t8.5 35.5q3 29 -15 52.5t-47.5 34.5t-64.5 16t-65 -3q-21 -5 -42 -11.5t-52.5 -21.5t-59 -34t-56 -50.5t-48.5 -69.5t-33 -92.5t-13 -117.5q0 -65 9 -123t24 -104.5t41 -92t52 -80.5t66 -75 t74 -69.5t83 -70.5q48 -39 107.5 -76.5t117.5 -66.5t115 -53.5t108.5 -42.5t90 -30t65.5 -18q40 -9 61 -11t36.5 4t22.5 19t15 41q6 16 4 33t-2.5 43t-2 52t5.5 61t18.5 70.5t38 79.5t64.5 88q2 2 5 6q43 51 67 79.5t69 87t70 99t57.5 102t45.5 109.5t20.5 109.5t-5 113.5 t-42.5 108.5t-81 107.5z" />
<glyph unicode="&#xe025;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1751 2000h-970q-47 0 -84 -16.5t-57 -43t-30 -53.5t-10 -53v-1542q0 -76 64 -102q12 -5 34 -5q55 0 86 35 q458 541 466 549q5 5 8.5 13t7 13t8.5 5h296q36 0 63.5 8.5t42.5 19t26.5 29.5t16 31.5t9.5 33.5q22 92 112 541l61 304q10 49 10 87q0 48 -16.5 80t-52 49t-91.5 17zM867 1800h779q20 0 34.5 -12.5t14.5 -33.5q0 -5 -1 -11l-41 -208q-4 -16 -21.5 -25.5t-38.5 -9.5h-379 q-17 0 -27.5 -0.5t-24 -1.5t-21.5 -4t-16.5 -7.5t-13.5 -11.5t-8 -17.5t-3 -23.5v-67q0 -44 25 -55.5t90 -11.5h320q14 0 26.5 -7.5t20 -19.5t7.5 -26q0 -5 -1 -10l-40 -207q-7 -30 -60 -30h-262q-14 0 -25.5 -3.5t-18.5 -6.5t-18.5 -14.5t-15.5 -16.5t-18 -23l-320 -402 q-2 -2 -6 -1.5t-4 2.5v1204q0 21 20.5 41t46.5 20z" />
<glyph unicode="&#xe026;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1200 2029q-30 0 -62 -2q-102 -7 -194 -40t-160 -82t-124.5 -112.5t-92 -127.5t-57.5 -131 q-61 -189 -35.5 -377.5t131.5 -334.5q93 -129 233.5 -197.5t309.5 -68.5q75 0 154 14q27 4 65 15q27 -53 57 -79t72 -45q77 -34 187 -34q8 0 15 2.5t16 14.5t12 33q4 36 -9 81t-41 52l-10 2q-16 5 -25.5 7.5t-25 9t-30 17t-29.5 24.5q168 108 253.5 296.5t69.5 417.5 q-10 145 -63.5 265.5t-141.5 204t-210 129.5t-265 46zM1173 1806q54 0 100 -14t77.5 -37.5t51.5 -44.5t35 -45q50 -80 70 -209t5.5 -265.5t-59.5 -237.5q-6 7 -9 10q-26 22 -55 38.5t-55.5 26t-52.5 15.5t-47 8t-37.5 2.5t-24.5 0.5l-9 -1q-22 0 -42.5 -22t-32 -49.5 t-12.5 -48.5q-2 -38 37 -41q124 -8 177 -98q-50 -16 -107 -16q-125 0 -200 64q-69 59 -107.5 195t-33.5 298q6 147 47 260.5t106 160.5q50 37 127 47q26 3 51 3z" />
<glyph unicode="&#xe027;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM598.5 2080q-43.5 0 -74.5 -31.5t-31 -74.5v-955q0 -143 54 -273t155 -232q67 -67 148 -113.5t171 -71 t185 -24.5q143 0 273 54t231.5 155.5t155 231.5t53.5 273q0 95 -24 185t-70.5 171t-113.5 149q-102 100 -232 154t-273 54q-142 0 -271.5 -53t-229.5 -153v448q0 43 -31.5 74.5t-75 31.5zM1206 1520q101 0 192.5 -37.5t162.5 -108.5t109 -163t38 -192q0 -67 -17 -130.5 t-50 -120.5t-80 -104q-71 -71 -162.5 -109t-192.5 -38q-50 0 -98.5 10t-93.5 28.5t-86 46t-77 62.5q-71 71 -108.5 162.5t-37.5 192t37.5 192.5t108.5 163q36 35 77 62.5t86 46t93.5 28t98.5 9.5zM1029.5 1143q-71.5 0 -122 -51t-50.5 -122q0 -47 23 -87t63 -63t87 -23 q71 0 122 50.5t51 122t-51 122.5t-122.5 51z" />
<glyph unicode="&#xe028;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1762 1879q16 26 9.5 56.5t-32.5 47.5q-68 44 -155 75t-186 47t-203 16q-138 0 -246 -29 q-31 -7 -46 -34q-16 -27 -8 -58q7 -25 27 -40.5t46 -15.5q9 0 19 3q89 23 208 23q133 0 256 -30t206 -84q19 -12 41 -12q41 0 64 35zM1581 1673q16 -11 36 -11q36 0 56 29q15 23 9 50q-5 27 -28 42q-94 63 -216.5 97.5t-251.5 34.5q-111 0 -211 -27q-27 -7 -40.5 -30.5 t-6.5 -49.5q6 -22 23.5 -36t40.5 -14q8 0 17 2q81 22 176 22q72 0 143.5 -13t136.5 -37.5t116 -58.5zM1595 1533q12 20 7.5 43t-24.5 36q-166 109 -388 109q-95 0 -200 -20q-23 -4 -36 -23q-14 -20 -9 -43q4 -20 19.5 -33.5t35.5 -13.5l12 2q92 17 176 17q190 0 328 -90 q13 -10 31 -10q30 0 48 26zM1163 344q93 -9 179.5 15.5t155 78t120 128t81 168.5t32.5 196q0 268 -126.5 419t-354.5 176q-80 9 -164 -14t-158 -74t-133.5 -120.5t-96 -160t-39.5 -187.5q-4 -130 31 -241.5t102 -192t162 -130.5t209 -61zM1200 1265h6q105 -3 160 -83 q58 -86 53 -249q-5 -147 -67 -229.5t-168 -82.5q-99 3 -156 85q-61 87 -56 237q2 58 16.5 110t38 90t52 66t60 42t61.5 14z" />
<glyph unicode="&#xe029;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 68 33.5 125.5t91 91t125.5 33.5zM1200 1945q-88 0 -163 -30t-127 -83t-81 -125.5t-29 -156.5v-700q0 -27 -10 -46.5t-26.5 -29t-32 -13.5t-31.5 -4t-31.5 4 t-32 13.5t-26.5 29t-10 46.5v250h-300v-250q0 -212 117 -321q14 -13 31 -23.5t29.5 -17t36.5 -11.5t33.5 -7.5t39.5 -3.5t35.5 -1.5t42 -0.5h39.5q44 0 85.5 7t81.5 21t74 35.5t63 53t49 70t31.5 89.5t11.5 110v700q0 17 11 29t28 17t30.5 7t25.5 2q13 0 29 -2.5t30.5 -6.5 t21.5 -10q1 -1 5 -4t6.5 -5t6 -6t5 -9.5t1.5 -11.5v-132l150 -65l150 65v132q0 112 -49.5 202t-141 141.5t-209.5 51.5zM1450 1075l-150 65v-290q0 -200 127 -302q117 -93 263 -93q51 0 98 10t88 29t76 45.5t62 60.5t46.5 73t29.5 84t10 93v270l-300 -4v-266 q0 -17 -11.5 -29t-30 -17t-32 -7t-26 -2t-26.5 2t-32.5 7t-30 17t-11.5 29v290z" />
<glyph unicode="&#xe030;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1200.5 1910q-132.5 0 -252 -55t-206.5 -154.5t-125 -226.5l-1 -8l10 -3q78 -36 126 -108t48 -155v-77 l10 15q169 152 387 152q73 0 142 -17.5t132 -51.5t117 -83l12 -15v77q0 55 22 107t61.5 92t90.5 64l13 3l-2 8q-38 127 -125 226.5t-207 154.5t-252.5 55zM496.5 1410q-86.5 0 -145.5 -61.5t-59 -148.5q0 -89 69 -151l139 -249v-150q0 -50 50 -50h100q50 0 50 50v550 q0 87 -58.5 148.5t-145 61.5zM1905 1410q-86 0 -145.5 -61.5t-59.5 -148.5v-550q0 -50 50 -50h100q50 0 50 50v88l5 57l139 251q69 64 69 154q0 87 -60.5 148.5t-147.5 61.5zM1205 1210q-76 0 -149 -18t-140 -56t-116 -91v-345h800v300l4 53q-174 157 -399 157z" />
<glyph unicode="&#xe031;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-550v900h300l75 400h-375l9 205q0 81 33 119t128 38h212l48 358q-227 30 -361 30q-223 0 -349 -137.5t-126 -371.5l6 -241h-300v-400h300v-900h-950q-104 0 -177 73t-73 177v1900q0 104 73 177 t177 73z" />
<glyph unicode="&#xe032;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1556 1863q-98 0 -180.5 -48t-130.5 -130.5t-48 -180.5q0 -42 9 -81q-220 11 -412 110t-327 264 q-48 -83 -48 -180q0 -61 20 -118t55.5 -102.5t83.5 -77.5q-85 2 -162 44v-4q0 -129 82 -228t206 -124q-47 -12 -95 -12q-36 0 -67 6q34 -108 126 -177.5t209 -71.5q-62 -48 -132.5 -82t-150.5 -52.5t-163 -18.5q-42 0 -85 5q251 -161 549 -161q138 0 264 31.5t227 87.5 t187 133t148.5 167.5t106.5 190.5t65.5 204t21.5 206q0 21 -1 46q106 77 179 186q-98 -44 -206 -57q56 34 97 85t61 114q-106 -63 -228 -87q-50 53 -117.5 83t-143.5 30z" />
<glyph unicode="&#xe033;" d="M600 1800h89q-47 -48 -82 -100h-607v450q0 90 57 158.5t143 86.5v-595h100v600h100v-600h100v600h100v-600zM700 2400h1450q103 0 176.5 -73.5t73.5 -176.5v-450h-607q-98 145 -254.5 230t-338.5 85q-143 0 -272 -53.5t-228 -150.5v589zM2200 1900v200q0 41 -29.5 70.5 t-70.5 29.5h-200q-41 0 -70.5 -29.5t-29.5 -70.5v-200q0 -41 29.5 -70.5t70.5 -29.5h200q41 0 70.5 29.5t29.5 70.5zM1200 1852q112 0 214.5 -43.5t176.5 -117.5t117.5 -176.5t43.5 -214.5t-43.5 -214.5t-117.5 -176.5t-176.5 -117.5t-214.5 -43.5t-214.5 43.5t-176.5 117.5 t-117.5 176.5t-43.5 214.5t43.5 214.5t117.5 176.5t176.5 117.5t214.5 43.5zM1200 866q88 0 168.5 34t139 92.5t92.5 139t34 168.5q0 59 -15.5 115.5t-43.5 104t-68 87.5t-87.5 68t-104 43.5t-115.5 15.5q-88 0 -168.5 -34.5t-139 -92.5t-92.5 -138.5t-34 -168.5t34 -168.5 t92.5 -139t139 -92.5t168.5 -34zM1915 1300q0 156 -66 300h551v-1350q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1350h551q-66 -144 -66 -300q0 -97 25.5 -190t71.5 -171.5t112 -144.5t144.5 -112t171.5 -72t190 -26q146 0 278.5 57 t228 152.5t152 228t56.5 278.5z" />
<glyph unicode="&#xe034;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1000 2100h-600q-27 0 -50 -13.5t-36.5 -36.5t-13.5 -50v-600q0 -41 29.5 -70.5t70.5 -29.5h600 q41 0 70.5 29.5t29.5 70.5v600q0 27 -13.5 50t-36.5 36.5t-50 13.5zM2000 2100h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5t29.5 70.5v600q0 27 -13.5 50t-36.5 36.5t-50 13.5zM700 1916q89 0 152.5 -63.5t63.5 -152.5 t-63.5 -152.5t-152.5 -63.5q-59 0 -108.5 29t-78.5 78.5t-29 108.5q0 89 63.5 152.5t152.5 63.5zM1700 1916q59 0 108.5 -29t78.5 -78.5t29 -108.5q0 -89 -63.5 -152.5t-152.5 -63.5q-44 0 -84 17t-68.5 46t-46 69t-17.5 84q0 89 63.5 152.5t152.5 63.5zM1000 1100h-600 q-27 0 -50 -13.5t-36.5 -36.5t-13.5 -50v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM2000 1100h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5t29.5 70.5v600 q0 41 -29.5 70.5t-70.5 29.5zM700 916q89 0 152.5 -63.5t63.5 -152.5t-63.5 -152.5t-152.5 -63.5t-152.5 63.5t-63.5 152.5t63.5 152.5t152.5 63.5zM1700 916q59 0 108.5 -29t78.5 -78.5t29 -108.5q0 -89 -63.5 -152.5t-152.5 -63.5q-44 0 -84 17t-68.5 46t-46 69t-17.5 84 q0 89 63.5 152.5t152.5 63.5z" />
<glyph unicode="&#xe035;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1731 1872q-335 11 -454 -375q61 26 119 26q122 0 108 -137q-7 -83 -108 -241.5t-152 -158.5 q-64 0 -118 245q-18 71 -65 367q-44 274 -231 256q-79 -7 -238 -144q-121 -110 -234 -209l76 -97q108 75 126 75q83 0 155 -259l130 -476q97 -259 237 -259q227 0 555 425q317 407 328 642q15 313 -234 320z" />
<glyph unicode="&#xe036;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 68 33.5 125.5t91 91t125.5 33.5zM750 1575q-57 0 -110.5 -17.5t-96.5 -50t-75.5 -75.5t-50 -96.5t-17.5 -110.5q0 -95 47 -175.5t127.5 -127.5t175.5 -47 q71 0 136 27.5t112 74.5t74.5 112t27.5 136q0 95 -47 175.5t-127.5 127.5t-175.5 47zM1650 1575q-95 0 -175.5 -47t-127.5 -127.5t-47 -175.5t47 -175.5t127.5 -127.5t175.5 -47t175.5 47t127.5 127.5t47 175.5t-47 175.5t-127.5 127.5t-175.5 47z" />
<glyph unicode="&#xe037;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM836 1774q-113 0 -215 -43.5t-176.5 -118t-118 -176.5t-43.5 -214.5t43.5 -215t118 -176.5t176.5 -118 t215 -44q125 0 236.5 53t190.5 149l8 10l-90 208l-20 -37q-47 -91 -134.5 -144t-190.5 -53q-100 0 -184.5 49t-133.5 134t-49 184.5t49 184t133.5 133.5t184.5 49q110 0 203 -60t133 -158l170 -387l20 -44q58 -137 148 -200.5t226 -64.5q105 0 191.5 43.5t135.5 119.5 t49 169q0 70 -18.5 121.5t-57.5 88.5t-87.5 61.5t-121.5 48.5l-46 15q-42 13 -65 21t-48 20.5t-36.5 24.5t-19 30t-7.5 42q0 50 34.5 82.5t88.5 32.5q29 0 52 -7.5t43 -24t39 -43.5l10 -14l148 76l-10 18q-93 165 -275 165q-93 0 -163 -35.5t-107.5 -101t-37.5 -152.5 q0 -66 21 -115.5t66 -87t101.5 -65t141.5 -54.5q42 -15 64.5 -23.5t47 -20.5t35 -25t17 -31t6.5 -42q0 -69 -55.5 -113t-144.5 -44q-45 2 -76.5 13.5t-55 37.5t-38.5 52t-36 73q-68 155 -167 386l-7 17q-47 108 -123 184.5t-174.5 116.5t-213.5 40z" />
<glyph unicode="&#xe038;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM400 2043v-315q177 0 347.5 -48t315.5 -133.5t267.5 -208t208.5 -268t134.5 -318t48.5 -352.5h314 q0 223 -59.5 436t-166 393t-258.5 332t-331.5 258t-390.5 165t-430 59zM400 1485v-315q154 0 293.5 -58t247.5 -167t166 -250t58 -295h315q0 143 -39.5 282.5t-110.5 258t-171.5 220t-219 172.5t-257.5 111.5t-282 40.5zM618 838q-90 0 -154 -64t-64 -154t64 -154t154 -64 t154 64t64 154t-64 154t-154 64z" />
<glyph unicode="&#xe039;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM809 2128q-81 0 -157.5 -25t-138 -71t-107.5 -107.5t-71.5 -137.5t-25.5 -157q-1 -134 67 -251 q-16 -81 -17 -162q0 -115 30 -224.5t84 -202t132 -170.5t170 -132.5t201.5 -85t223.5 -31.5q96 0 196 24q104 -50 217 -50q104 -1 198 39t162 108t108.5 162t40.5 197q0 150 -81 276q5 43 5 86q0 114 -30 223.5t-84 202t-132 170.5t-170 132.5t-201.5 85t-224.5 31.5 q-57 0 -126 -10q-123 79 -269 80zM1118 1782q48 7 95 7.5t95 -6t94 -23.5t84 -44q30 -22 57 -56.5t44 -73.5t9 -79t-46 -65q-22 -14 -41.5 -16.5t-34.5 5t-30 21.5t-27 31.5t-25 37.5t-24.5 38t-25.5 33t-27 22q-43 23 -106 25t-119.5 -25t-70.5 -79q-9 -34 5 -62.5 t36 -45.5t65 -33t69 -22.5t71 -15.5q13 -3 20 -4.5t16 -3.5t15 -4q34 -9 58 -17t56 -19.5t56.5 -25t49.5 -31t45 -40.5t34 -50q26 -51 30.5 -107t-11 -108.5t-52 -100t-87.5 -82.5t-122.5 -56t-152.5 -21q-231 0 -345 130q-18 20 -35.5 49.5t-30 65t-14.5 67.5t15.5 58 t55.5 36q30 7 55 -2.5t41.5 -30.5t33.5 -49.5t30.5 -55.5t33.5 -51.5t41 -35.5q46 -23 106 -25t116.5 21t85.5 66q18 28 23 55t-3.5 48.5t-24.5 41t-39.5 34.5t-47.5 26t-49 18q-28 8 -85.5 22t-92.5 23.5t-81.5 29t-80.5 44.5q-78 56 -103 148t12 181q34 78 110 123.5 t171 58.5z" />
<glyph unicode="&#xe040;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1469 1056q-14 18 -14 38l8 43q1 2 16 56l121 407h-209l-22 -70q-2 5 -8.5 15.5t-12.5 19.5t-12 15 q-57 57 -158 57q-168 0 -283 -148q-113 -145 -113 -312q0 -146 77 -228q77 -84 192 -84q114 0 194 74q24 21 45 51q11 -38 45 -73q49 -53 139 -53q166 0 294 151q127 150 127 358q0 264 -200 424q-189 150 -474 150q-351 0 -576 -218q-215 -208 -215 -507q0 -267 172 -461 q208 -235 584 -235q161 0 310 52q150 52 278 151l15 11l-86 132l-39 -27q-83 -59 -160 -91q-142 -60 -307 -60q-239 0 -404 129q-185 145 -185 394q0 224 159 385q176 178 468 178q159 0 286 -65q198 -101 198 -331q0 -158 -73 -252q-70 -92 -136 -92q-29 0 -41 16z M1220 1476q38 0 61 -25q23 -27 23 -66q0 -78 -59 -218q-56 -132 -137 -132q-44 0 -68 32q-25 35 -25 92q0 103 64 212q60 105 141 105z" />
<glyph unicode="&#xe041;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM2000 1252l-26 -17q-9 -4 -32.5 -12.5t-81 -21t-109.5 -12.5q-83 0 -159 41.5t-126 105.5q-95 121 -94 322q0 63 66 74q4 1 18 1t18 -1 q58 -4 68 -70q5 -30 7 -64t1 -64.5t-3.5 -61.5t-5.5 -54.5t-6.5 -44t-5.5 -29.5t-2 -11l-8 -33h304l3 24q22 266 14 370q-13 161 -135 258q-102 80 -241 80q-34 0 -73 -5q-89 -13 -159.5 -61.5t-111.5 -124.5t-45 -169t17 -192q60 -289 293 -445q-113 -224 -275 -367 q-122 128 -197.5 233t-126.5 229q-111 273 -115 615l1 55h-301q1 0 1 -54q0 -197 40 -403q73 -364 273 -649q146 -208 328 -332q50 -35 96 -35q47 0 93 36q130 99 262 260t200 303q68 -12 139 -12q97 0 191 30l6 6v302z" />
<glyph unicode="&#xe042;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM1726 1666q-107 0 -183 -76t-76 -182.5t76 -182.5t183 -76t183 76t76 182.5t-76 182.5t-183 76zM1149 1570q-97 0 -165.5 -68.5 t-68.5 -165t68.5 -165t165.5 -68.5t165.5 68.5t68.5 165t-68.5 165t-165.5 68.5zM625 1484q-58 0 -106.5 -28.5t-77 -77t-28.5 -105.5t28.5 -105.5t77 -77t106.5 -28.5q87 0 149 62t62 149t-62 149t-149 62zM2009 725v96q0 74 -34.5 138.5t-94 105.5t-131.5 47l-10 1h-26 l-10 -1q-110 -10 -185.5 -94t-75.5 -197v-96q0 -10 5 -18t15 -12.5t24 -4.5h488q10 0 18 4.5t12.5 12.5t4.5 18zM1405 722v87q0 102 -68 178t-167 85h-13h-15h-14q-65 -6 -119 -42.5t-85 -95t-31 -125.5v-87q0 -14 10.5 -23t29.5 -9h440q8 0 15.5 4.5t12 12t4.5 15.5z M856 720v78q0 93 -63 161.5t-158 76.5h-10l-19 -1q-59 -5 -108 -38t-77 -85.5t-28 -113.5v-78q0 -13 10 -21.5t27 -8.5h396q13 0 21.5 9t8.5 21z" />
<glyph unicode="&#xe043;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1303 1718h-160v-84q-46 51 -110.5 80t-134.5 29q-120 0 -214 -58t-146 -162t-52 -237q0 -218 109 -341 t303 -123q73 0 136 28.5t109 81.5v-23q0 -152 -59 -222t-186 -70q-22 0 -44 2t-52.5 11t-54.5 24t-44 43t-26 66l-4 23h-158l2 -30q4 -61 29.5 -110t63 -80.5t87 -53t99.5 -30.5t102 -9q204 0 304.5 108t100.5 328v809zM1948 1735l-38 4q-27 4 -61 4q-63 0 -122.5 -31.5 t-101.5 -80.5v89h-233v-923h245v448q0 120 55 191.5t147 71.5q34 0 75 -8l34 -6v241zM898 1590q50 0 91.5 -18.5t68.5 -50t45 -73t25.5 -85t7.5 -88.5q0 -56 -14.5 -108.5t-42.5 -96t-75 -70t-106 -26.5q-53 0 -95 18t-69.5 47.5t-46 69.5t-26.5 81t-8 85q0 45 8 88.5 t26.5 85t46 73t69.5 50t95 18.5z" />
<glyph unicode="&#xe045;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1800 1900l-722 -105v-524h722v629zM1026 1787l-528 -76v-440h528v516zM1026 1220h-528v-445l528 -78 v523zM1800 1220h-722v-530l722 -107v637z" />
<glyph unicode="&#xe046;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM734 1898q-7 -11 -7 -25.5t4 -25.5t10.5 -23t10 -16.5t5.5 -7.5l318 -432q2 -3 8.5 -8t22.5 -12.5t32 -7.5q9 0 18 2q13 4 24 13.5t17 20 t10 23t5 18t1 9.5l-3 523q-8 70 -40 90q-30 18 -52 18q-8 0 -29 -6l-304 -114q-33 -11 -51 -39zM1526 1618l-207 -326q-1 -2 -2.5 -5.5t-4 -11t-3.5 -16t1 -19.5t8 -20q17 -29 62 -29q14 0 20 2l368 107q8 4 18 8.5t25.5 18.5t19.5 27q2 13 2 23.5t-3 21.5t-5.5 16.5 t-3.5 7.5l-175 206q-2 3 -6 8.5t-19 14.5t-33 10q-11 0 -21.5 -4.5t-17 -10t-12.5 -13t-8 -11t-3 -5.5zM616 975q4 0 8.5 0.5t8 1t7.5 1.5t6.5 1.5t4.5 1t3.5 1l1.5 0.5l382 85l11 6q11 5 17.5 9.5t13.5 20t8 37.5q0 13 -5 25.5t-12.5 20.5t-16.5 15t-13.5 9.5t-6.5 3.5 l-328 166q-28 12 -54 12q-16 0 -27 -7q-15 -9 -27 -24t-14 -31l-21 -262q-2 -50 10 -72q12 -21 43 -21zM1662 631l156 223q17 31 17 58q0 19 -15 32.5t-27.5 17t-16.5 4.5l-368 118q-8 2 -20 2q-31 0 -50 -19q-14 -14 -15 -36.5t2.5 -33t7.5 -17.5l197 -329q4 -6 12 -14.5 t25 -20.5t31 -12t29.5 6.5t23 12t11.5 8.5zM1174 494q18 5 27 23t7.5 31.5t0.5 16.5l5 382q-3 44 -36 61q-12 6 -25 6q-32 0 -59 -26l-257 -283q-5 -6 -11 -16t-12.5 -29.5t-1.5 -32.5q11 -37 44 -53l258 -81q10 -3 32 -3q15 0 28 4z" />
<glyph unicode="&#xe047;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM1300 609l3 1032q0 23 1 37.5t4 31.5t11 23.5t21 1.5q56 -15 56 -108v-425q67 -32 125.5 -32.5 t101.5 28t68 88.5t25 144q0 89 -16.5 154.5t-55 118.5t-100 91t-154.5 70q-146 49 -395 95v-1259zM939 1193l-411 -147q-124 -39 -182 -82q-24 -18 -30 -44t5 -53t44.5 -52t83.5 -39q70 -23 156 -28.5t154.5 0.5t151.5 19l28 5v149l-142 -51q-39 -15 -89.5 -17.5t-82 8 t-26.5 28t44 31.5l296 106v167zM2083 919q13 17 14.5 36t-9.5 39t-42 39.5t-80 34.5q-88 34 -195 46t-203 2q-55 -7 -108.5 -18t-79.5 -19l-26 -9l-17 -6v-172l307 108q118 27 172 9q32 -10 26.5 -27.5t-44.5 -31.5l-461 -165v-166l627 226q9 3 24 9.5t47 26t48 38.5z" />
<glyph unicode="&#xe048;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM1199 1922q-88 0 -172.5 -21t-158.5 -59t-138 -93q7 4 21 10t60.5 13t97.5 1.5t130 -37.5t160 -91q52 47 106.5 78t99 43.5t86.5 16 t73.5 -2t55.5 -12t36 -13.5l12 -6q-214 173 -469 173zM476 1200q0 -126 41.5 -241t116.5 -210q-2 6 -4.5 16.5t-3.5 48t6 79.5t31 109.5t64 139t113 168t169 196.5q-43 27 -85 51.5t-75 42.5t-62 34t-50 26.5t-36.5 18t-22.5 10.5l-7 3q-61 -65 -104 -142t-67 -166.5 t-24 -183.5zM1765 749q75 95 116.5 210t41.5 241q0 140 -51 267t-144 225q-126 -56 -338 -186q96 -100 169 -196t112.5 -169t64.5 -138.5t30.5 -110.5t6 -78t-3.5 -49zM1199 479q152 0 287.5 59t235.5 165q-1 4 -3 11.5t-11.5 32t-22 50.5t-35 66.5t-50 80.5t-68.5 90.5 t-88 100t-111 105.5t-136 109q-82 -60 -155.5 -128.5t-124.5 -129.5t-93.5 -120.5t-69 -107t-44.5 -84.5t-26 -57l-7 -20q100 -105 235.5 -164t286.5 -59z" />
<glyph unicode="&#xe049;" d="M250 2400h1900q103 0 176.5 -73.5t73.5 -176.5v-1900q0 -103 -73.5 -176.5t-176.5 -73.5h-1900q-103 0 -176.5 73.5t-73.5 176.5v1900q0 103 73.5 176.5t176.5 73.5zM800 1600h800q0 5 -0.5 13t-4.5 33.5t-10 50t-18.5 58.5t-29.5 64t-43.5 61t-59.5 54l88 112 q12 19 6.5 41t-24.5 35q-13 8 -29 8q-31 0 -45 -23l-98 -127q-66 20 -130 20q-66 0 -133 -20l-97 124q-17 26 -47 26q-16 0 -29 -8q-20 -13 -24.5 -35t8.5 -44l86 -109q-44 -32 -77.5 -77.5t-49.5 -89t-25.5 -82t-11.5 -62.5zM954 1809q23 0 39 -16t16 -38.5t-16 -38.5 t-38.5 -16t-38.5 16t-16 38q0 15 7.5 27.5t20 20t26.5 7.5zM1446 1809q14 0 26.5 -7.5t20 -20t7.5 -27t-7.5 -27.5t-20 -20t-26.5 -7q-23 0 -39 16t-16 38.5t16 38.5t39 16zM700 1050v450q0 27 -13.5 50t-36.5 36.5t-50 13.5q-41 0 -70.5 -29.5t-29.5 -70.5v-450 q0 -41 29.5 -70.5t70.5 -29.5t70.5 29.5t29.5 70.5zM1900 1050v450q0 41 -29.5 70.5t-70.5 29.5q-27 0 -50 -13.5t-36.5 -36.5t-13.5 -50v-450q0 -41 29.5 -70.5t70.5 -29.5t70.5 29.5t29.5 70.5zM1600 1500h-800v-646q0 -11 4.5 -21t11.5 -17t17.5 -11.5t21.5 -4.5h45v-303 q0 -40 30 -68.5t70.5 -28.5t70 28.5t29.5 68.5v303h200v-303q0 -40 30 -68.5t70 -28.5t70 28.5t30 68.5v303h45q23 0 39 16t16 38v646z" />
<glyph unicode="&#xe050;" d="M2400 250v1900q0 103 -73.5 176.5t-176.5 73.5h-1900q-103 0 -176.5 -73.5t-73.5 -176.5v-1900q0 -103 73.5 -176.5t176.5 -73.5h1900q103 0 176.5 73.5t73.5 176.5zM641 1602q0 -55 -41 -94t-99 -39t-99.5 39t-41.5 94q0 27 11.5 52t30 42.5t44.5 28t55 10.5 q58 0 99 -39t41 -94zM2124 1033q-3 -39 -14 -73t-25.5 -58t-37.5 -44.5t-41 -33t-44 -24t-39 -16.5t-34 -11q-33 -10 -84 -11q-72 0 -145 15t-109 30l-37 16l59 180q4 -3 12 -8t32.5 -17.5t49 -21.5t59 -15.5t65.5 -4.5q35 2 60.5 11.5t38.5 21.5t20.5 28.5t9 28t0.5 24.5 q-1 34 -48.5 67t-132.5 60q-70 22 -118.5 76.5t-67 119.5t-8.5 128q14 88 102 149.5t212 61.5q39 0 77 -7t64.5 -17t47 -20t30.5 -17l10 -7l-46 -171q-2 3 -6 7t-19 14.5t-31 18.5t-42.5 14.5t-54.5 6.5q-49 0 -87.5 -24.5t-41.5 -55.5q-3 -16 -0.5 -30t12 -28t33 -30.5 t62.5 -36.5q8 -4 25 -12q30 -16 46.5 -24.5t46 -26.5t46 -32.5t38 -37.5t32.5 -45.5t18 -53t5 -64.5zM1513 1231q0 -80 -20.5 -153.5t-58.5 -132.5t-89 -103t-114 -68t-132 -24q-187 0 -301.5 132.5t-114.5 348.5t114.5 348.5t301.5 132.5q120 0 214.5 -61t147 -170.5 t52.5 -249.5zM1205 1478q-50 51 -105 51q-39 0 -75 -18t-66.5 -53.5t-48.5 -94t-18 -132.5t18 -132.5t48.5 -93.5t66.5 -53.5t75 -18.5q84 0 142.5 81t60.5 198q1 75 -25.5 147.5t-72.5 118.5zM600 800h-201v605h203z" />
<glyph unicode="&#xe051;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM2206 1721q-37 0 -99 -5q-51 -6 -90 -6q-35 0 -91 6q-68 5 -106 5q-17 0 -29.5 -12.5t-12.5 -37.5q0 -20 9 -32.5t17 -14.5l9 -2 q58 -3 77.5 -21.5t19.5 -47.5q0 -30 -16 -72l-325 -754l-204 416l166 309q61 106 100 136q36 26 98 34q19 0 32 13t13 40q0 20 -8.5 31t-15 13t-12.5 2q-47 0 -116 -6q-58 -5 -80 -5q-37 0 -97 6q-72 5 -108 5q-19 0 -31 -19q-10 -13 -10 -31q0 -20 9 -32.5t17 -14.5l9 -2 q34 -2 55.5 -9t29 -18.5t9.5 -19t2 -17.5q0 -30 -24 -75l-107 -199l-108 221q-26 51 -26 73q0 37 96 44q34 0 34 49q0 22 -9.5 34t-16.5 14t-14 2q-61 0 -124 -6q-67 -5 -112 -5q-58 0 -101 4q-35 4 -114 4q-6 0 -13 -2.5t-15.5 -15.5t-8.5 -34q0 -24 11 -38q22 -28 29 -28 q71 -4 89 -22q41 -38 82 -125l192 -401l-186 -346l-347 797q-12 28 -12 44q0 31 24 49q29 21 80 26q34 0 34 49q0 22 -9.5 34t-16.5 14t-13 2q-61 0 -141 -6q-82 -5 -127 -5q-61 0 -114 4q-44 4 -128 4q-6 0 -13.5 -2.5t-16.5 -15.5t-9 -34q0 -24 12 -39l30 -27 q79 0 117 -31q50 -41 82 -115l451 -1034q13 -30 49 -30q30 0 47 28l273 495l238 -496q16 -27 46 -27q39 0 48 30l459 1034q41 96 81 131q35 31 92 37q21 0 35 18q12 16 12 35q0 23 -11 34.5t-27 11.5z" />
<glyph unicode="&#xe052;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM2000 1200v600q0 41 -29.5 70.5t-70.5 29.5h-1400q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -46 12 -104t40.5 -129t70 -140t107 -134.5 t145 -115.5t190 -80t236.5 -30t236.5 30t190 80t144.5 115.5t106.5 134.5t69.5 140t40 129t12 104zM1676 1470q32 -33 32 -79q0 -49 -35 -83l-393 -377q-34 -32 -79 -32q-46 0 -80 32l-393 377q-35 34 -35 83q0 46 32 79q34 35 83 35q46 0 79 -32l314 -301l313 301 q33 32 79 32q49 0 83 -35z" />
<glyph unicode="&#xe053;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v607l514 -206q26 -123 125 -204t228 -81q140 0 243 94t117 232l464 339q201 0 343 142t142 342q0 132 -65 243.5t-176.5 176.5t-243.5 65q-199 0 -340.5 -140.5 t-143.5 -339.5l-302 -433q-13 2 -38 2q-101 0 -184 -51l-683 275v837q0 104 73 177t177 73zM1691 1840q134 0 229.5 -95t95.5 -230q0 -134 -95.5 -229t-229.5 -95t-229.5 95t-95.5 229q0 135 95.5 230t229.5 95zM1692 1776q-107 0 -183 -76t-76 -183t76 -183.5t183 -76.5 q108 0 184 76.5t76 183.5t-76 183t-184 76zM867 993q111 0 188.5 -77.5t77.5 -188.5q0 -110 -77.5 -188t-188.5 -78q-75 0 -138 39t-97 103q43 -17 131 -53q38 -15 78 -15q64 0 118.5 36t78.5 97q16 38 16 79q0 63 -36 117t-97 79l-111 44q27 6 57 6z" />
<glyph unicode="&#xe054;" d="M250 2400h1900q104 0 177 -73t73 -177v-935q-78 42 -161 42q-32 0 -62 -6q-29 195 -178.5 325.5t-349.5 130.5q-198 0 -349 -132v-975h1040q29 10 60 26v-376q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM976 1500q-32 0 -76 -7 v-893h100v898q-16 2 -24 2zM1100 600h100v859l-8 -11q-39 20 -92 35v-883zM800 600v865q-50 -19 -100 -55v-810h100zM600 600v715q-28 -35 -51 -77q-32 10 -49 13v-651h100zM400 600v653q-54 -6 -100 -27v-610q26 -12 40 -16h60zM200 686v470q-97 -99 -97 -236 q0 -135 97 -234z" />
<glyph unicode="&#xe055;" d="M250 2400h1900q104 0 177 -73.5t73 -176.5v-970q-338 -175 -745 -175q-51 0 -128.5 3.5t-103.5 3.5q-169 0 -180 -151q-10 7 -125 103q-50 53 -165 47q-199 -6 -208 -6q-407 0 -745 175v970q0 104 73 177t177 73zM1658 1837q-110 0 -203 -51t-147.5 -138.5t-54.5 -190.5 q0 -62 20.5 -119.5t58 -104t87.5 -82t111.5 -54.5t127.5 -19q110 0 203.5 51t148 138t54.5 190t-54.5 190.5t-148 138.5t-203.5 51zM784 1832q-81 0 -155.5 -29.5t-128 -79.5t-85.5 -119.5t-32 -146.5q0 -61 20.5 -118.5t57.5 -103.5t86 -80.5t110.5 -53.5t126.5 -19 q109 0 201 50t146 136.5t54 188.5t-54 188.5t-146 136.5t-201 50zM0 250v639q148 -97 338 -175q-62 -212 -62 -396q0 -176 56 -318h-82q-103 0 -176.5 73t-73.5 177zM2400 889v-639q0 -104 -73 -177t-177 -73h-82q56 142 56 318q0 184 -62 396q190 78 338 175zM1865 841 q-10 -63 -33 -118.5t-67 -110.5t-105.5 -96.5t-153.5 -72.5t-206 -43v-400h-200q0 37 0.5 264t0.5 336q43 -3 85 -3q130 0 248 23t233.5 79t197.5 142z" />
<glyph unicode="&#xe056;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM1432 2018q-33 3 -45 -10t-12 -47q0 -128 2 -388.5t2 -392.5v-63q0 -1 -3 -1.5t-8 -1t-7 -0.5q-3 9 -14 34t-16 39q-201 567 -277 787 q-9 24 -22.5 34t-37.5 9h-46q-34 1 -105 1q-19 0 -28 -0.5t-18 -3.5t-12 -6t-5.5 -13t-2.5 -18.5v-29.5v-1516v-28v-2.5v-2.5q0 -34 29 -34q5 0 12 1q98 15 148 18q36 1 49.5 17t13.5 53q-2 171 -2 423v286v32q0 4 3 60l15 1q14 -37 15 -38q212 -600 258 -734 q9 -27 22.5 -39t36.5 -12q9 0 20 2q86 14 174 19q28 2 39.5 14t11.5 41v361v177.5v177.5q0 124 0.5 369.5t0.5 366.5q0 34 -12 47.5t-45 10.5q-32 -2 -65 -2q-34 0 -69 2z" />
<glyph unicode="&#xe057;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM1357 1916h-513q-17 0 -32.5 -8t-25.5 -21.5t-12 -30.5l-208 -1316q-3 -20 10 -34.5t33 -14.5h245q26 0 45.5 17t24.5 43l56 355 q4 26 24 43t46 17h163q507 0 584 488q9 54 9 102q0 142 -75 229q-113 131 -374 131zM1127 1600h34q58 0 88 -1.5t68.5 -10.5t58.5 -28q28 -26 28 -72q0 -17 -4 -38q-4 -23 -13 -42t-19 -32.5t-27 -24.5t-30.5 -18t-36.5 -11.5t-38 -7t-42 -4t-42 -1.5h-44h-74l52 264 q2 12 14 19.5t27 7.5zM1922 1598q2 -30 2 -55q0 -57 -9 -109q-30 -192 -120 -323t-236.5 -198t-345.5 -67h-77q-27 0 -37.5 -12.5t-14.5 -38.5l-42 -263q-6 -39 -18.5 -65t-28 -41t-44 -22.5t-55 -9.5t-72.5 -2h-90l-3 -43q-3 -19 9.5 -34t32.5 -15h321q26 0 46 17t24 43 l64 275q8 54 67 60q176 0 328.5 69.5t253.5 195.5t126 285q7 44 7 88q0 79 -22 146.5t-62 114.5z" />
<glyph unicode="&#xe058;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM1500 972h600l-604 1030l-582 2zM281 913l282 -517l606 1044l-288 507zM930 915l-301 -519l1198 1l303 518h-1200z" />
<glyph unicode="&#xe059;" d="M250 2400h1900q104 0 177 -73t73 -177v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73zM1749 1900h-1198q-62 0 -106.5 -44.5t-44.5 -106.5v-249h300v50q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-800 q0 -20 -14.5 -35t-35.5 -15h-350v-300h549q62 0 106.5 44.5t44.5 106.5v1198q0 62 -44.5 106.5t-106.5 44.5zM400 1400v-849q0 -62 44.5 -106.5t106.5 -44.5h549v300h-350q-21 0 -35.5 15t-14.5 35v650h-300z" />
<glyph unicode="&#xe060;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM1800 1600h-264q-22 142 -131 237t-255 95t-255 -95t-131 -237h-264v-950q0 -62 59 -106t141 -44h900q82 0 141 44t59 106v950z M1377 1600h-454q20 77 83 126t144 49t144 -49t83 -126zM600 800h200v600h-200v-600zM900 800h200v600h-200v-600zM1200 800h200v600h-200v-600zM1500 800h200v600h-200v-600z" />
<glyph unicode="&#xf8ff;" d="M2400 2150v-1900q0 -104 -73 -177t-177 -73h-1900q-104 0 -177 73t-73 177v1900q0 104 73 177t177 73h1900q104 0 177 -73t73 -177zM1251 2032q-28 -33 -49.5 -74t-33.5 -91.5t-6 -96.5q68 -5 136 29t116 91q22 27 39.5 58.5t30 66t17 72.5t0.5 75q-41 -2 -88 -19.5 t-89.5 -46.5t-72.5 -64zM1736 675q37 53 67 114t39.5 89t11.5 39q-4 1 -13 5t-32 18t-44.5 31t-47.5 46t-45 62t-32 80.5t-13 99.5q-1 60 18 115.5t42.5 89.5t55 64.5t45 39.5t23.5 15q-29 41 -66.5 73t-71 49t-70 28t-60 14t-43.5 4q-45 5 -97 -6.5t-90 -27.5t-77.5 -30.5 t-60.5 -14.5q-27 0 -74.5 19.5t-103.5 38t-103 17.5q-106 -1 -199.5 -58.5t-148.5 -153.5q-54 -94 -67.5 -213t9.5 -234.5t65 -220.5t99 -187q27 -39 45 -63.5t47.5 -57.5t54 -51t56.5 -31t64 -12q35 1 70.5 12.5t60.5 23.5t64.5 22.5t83.5 10.5q43 0 82 -11t64 -23.5 t60.5 -22.5t72.5 -9q25 0 48 6.5t42 16.5t39 27t35.5 32.5t33.5 39t30.5 41.5t30.5 44z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -8,23 +8,34 @@ import PieceListFetcher from '../fetchers/piece_list_fetcher';
class PieceListActions {
constructor() {
this.generateActions(
'updatePieceList'
'updatePieceList',
'updatePieceListRequestActions'
);
}
fetchPieceList(page, pageSize, search, orderBy, orderAsc) {
PieceListFetcher
.fetch(page, pageSize, search, orderBy, orderAsc)
.then((res) => {
this.actions.updatePieceList({
page,
pageSize,
search,
orderBy,
orderAsc,
'pieceList': res.pieces,
'pieceListCount': res.count
return new Promise((resolve, reject) => {
PieceListFetcher
.fetch(page, pageSize, search, orderBy, orderAsc)
.then((res) => {
this.actions.updatePieceList({
page,
pageSize,
search,
orderBy,
orderAsc,
'pieceList': res.pieces,
'pieceListCount': res.count
});
resolve();
});
});
}
fetchPieceRequestActions() {
PieceListFetcher
.fetchRequestActions()
.then((res) => {
this.actions.updatePieceListRequestActions(res.piece_ids);
});
}

View File

@ -1,30 +1,67 @@
'use strict';
import React from 'react';
import Router from 'react-router';
import Glyphicon from 'react-bootstrap/lib/Glyphicon';
import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger';
import Tooltip from 'react-bootstrap/lib/Tooltip';
import requests from '../../utils/requests';
import { getLangText } from '../../utils/lang_utils';
let AccordionListItem = React.createClass({
mixins: [Router.Navigation],
propTypes: {
className: React.PropTypes.string,
content: React.PropTypes.object,
children: React.PropTypes.object
},
handleClick(event){
requests.get('piece_first_edition_id', {'piece_id': this.props.content.id})
.then((res) => this.transitionTo('edition', {editionId: res.bitcoin_id}));
console.log(event.target);
},
getGlyphicon(){
if (this.props.content.requestAction){
return (
<OverlayTrigger delay={500} placement="left"
overlay={<Tooltip>You have actions pending in one of your editions</Tooltip>}>
<Glyphicon glyph='bell' />
</OverlayTrigger>);
}
return null;
},
render() {
return (
<div className="row">
<div className={this.props.className}>
<div className="wrapper">
<div className="col-xs-5 col-sm-5 col-md-4 col-lg-4 thumbnail-wrapper">
<img src={this.props.content.thumbnail} />
<div className="col-xs-4 col-sm-3 col-md-2 col-lg-2 clear-paddings">
<div className="thumbnail-wrapper" onClick={this.handleClick}>
<img src={this.props.content.thumbnail} />
</div>
</div>
<div className="col-xs-7 col-sm-7 col-md-7 col-lg-7 col-md-offset-1 col-lg-offset-1">
<h1>{this.props.content.title}</h1>
<div className="col-xs-8 col-sm-9 col-md-9 col-lg-9 col-md-offset-1 col-lg-offset-1 accordion-list-item-header">
<OverlayTrigger delay={500} placement="left"
overlay={<Tooltip>{this.props.content.title}</Tooltip>}>
<h1 className="truncate" onClick={this.handleClick}>{this.props.content.title}</h1>
</OverlayTrigger>
<h3>{getLangText('by %s', this.props.content.artist_name)}</h3>
<h3>{this.props.content.date_created.split('-')[0]}</h3>
<div>
<span>{this.props.content.date_created.split('-')[0]}</span>
<a href={this.props.content.license_type.url} target="_blank" className="pull-right">
{this.props.content.license_type.code} license
</a>
</div>
</div>
<span style={{'clear': 'both'}}></span>
<div className="request-action-batch">
{this.getGlyphicon()}
</div>
</div>
</div>
{this.props.children}

View File

@ -139,8 +139,12 @@ let AccordionListItemTableEditions = React.createClass({
),
new ColumnModel(
(item) => {
let content = item.acl;
if (item.request_action){
content = [item.request_action + ' request'];
}
return {
'content': item.acl
'content': content
}; },
'acl',
getLangText('Actions'),

View File

@ -3,6 +3,7 @@
import React from 'react';
import Router from 'react-router';
import Header from '../components/header';
import Footer from '../components/footer';
import GlobalNotification from './global_notification';
let Link = Router.Link;
@ -15,6 +16,7 @@ let AscribeApp = React.createClass({
<div>
<Header />
<RouteHandler />
<Footer />
<GlobalNotification />
<div id="modal" className="container"></div>
</div>

View File

@ -42,11 +42,11 @@ let DeleteButton = React.createClass({
if (availableAcls.indexOf('delete') > -1) {
content = <EditionDeleteForm editions={ this.props.editions }/>;
btnDelete = <Button bsStyle="danger" bsSize="small">DELETE</Button>;
btnDelete = <Button bsStyle="danger" className="btn-delete" bsSize="small">DELETE</Button>;
}
else if (availableAcls.indexOf('del_from_collection') > -1){
content = <EditionRemoveFromCollectionForm editions={ this.props.editions }/>;
btnDelete = <Button bsStyle="danger" bsSize="small">REMOVE FROM COLLECTION</Button>;
btnDelete = <Button bsStyle="danger" className="btn-delete" bsSize="small">REMOVE FROM COLLECTION</Button>;
}
else{
return null;

View File

@ -110,8 +110,8 @@ let Form = React.createClass({
buttons = (
<div className="row" style={{margin: 0}}>
<p className="pull-right">
<Button className="ascribe-btn" type="submit">Save</Button>
<Button className="ascribe-btn" onClick={this.reset}>Cancel</Button>
<Button className="btn btn-default btn-sm ascribe-margin-1px" type="submit">SAVE</Button>
<Button className="btn btn-danger btn-delete btn-sm ascribe-margin-1px" onClick={this.reset}>CANCEL</Button>
</p>
</div>
);

View File

@ -54,10 +54,10 @@ let RequestActionForm = React.createClass({
let buttons = (
<span>
<span>
<div id="request_accept" onClick={this.handleRequest} className='btn btn-default btn-sm'>ACCEPT</div>
<div id="request_accept" onClick={this.handleRequest} className='btn btn-default btn-sm ascribe-margin-1px'>ACCEPT</div>
</span>
<span>
<div id="request_deny" onClick={this.handleRequest} className='btn btn-default btn-sm'>REJECT</div>
<div id="request_deny" onClick={this.handleRequest} className='btn btn-danger btn-delete btn-sm ascribe-margin-1px'>REJECT</div>
</span>
</span>
);

View File

@ -21,7 +21,7 @@ let PieceListToolbar = React.createClass({
},
render() {
let searchIcon = <Glyphicon glyph='search' />;
let searchIcon = <Glyphicon glyph='search' className="filter-glyph"/>;
return (
<div className={this.props.className}>

View File

@ -8,7 +8,7 @@ import MenuItem from 'react-bootstrap/lib/MenuItem';
let PieceListToolbarFilterWidgetFilter = React.createClass({
render() {
let filterIcon = <Glyphicon glyph='filter' />;
let filterIcon = <Glyphicon glyph='filter' className="filter-glyph"/>;
return (
<DropdownButton title={filterIcon}>

View File

@ -0,0 +1,107 @@
'use strict';
import React from 'react';
import Router from 'react-router';
import ReactAddons from 'react/addons';
let State = Router.State;
let Navigation = Router.Navigation;
let SlidesContainer = React.createClass({
propTypes: {
children: React.PropTypes.arrayOf(React.PropTypes.element)
},
mixins: [State, Navigation],
getInitialState() {
// handle queryParameters
let queryParams = this.getQuery();
let slideNum = 0;
if(queryParams && 'slide_num' in queryParams) {
slideNum = parseInt(queryParams.slide_num, 10);
}
// if slide_num is not set, this will be done in componentDidMount
return {
containerWidth: 0,
slideNum: slideNum
};
},
componentDidMount() {
// check if slide_num was defined, and if not then default to 0
let queryParams = this.getQuery();
if(!('slide_num' in queryParams)) {
this.transitionTo(this.getPathname(), null, {slide_num: 0});
}
// init container width
this.handleContainerResize();
// we're using an event listener on window here,
// as it was not possible to listen to the resize events of a dom node
window.addEventListener('resize', this.handleContainerResize);
},
componentWillUnmount() {
window.removeEventListener('resize', this.handleContainerResize);
},
handleContainerResize() {
this.setState({
containerWidth: this.refs.containerWrapper.getDOMNode().offsetWidth
});
},
// We let every one from the outsite set the page number of the slider,
// though only if the slideNum is actually in the range of our children-list.
setSlideNum(slideNum) {
if(slideNum < 0 || slideNum < React.Children.count(this.props.children)) {
this.transitionTo(this.getPathname(), null, {slide_num: slideNum});
this.setState({
slideNum: slideNum
});
} else {
throw new Error('You\'re calling a page number that is out of range.');
}
},
// Since we need to give the slides a width, we need to call ReactAddons.addons.cloneWithProps
// Also, a key is nice to have!
renderChildren() {
return ReactAddons.Children.map(this.props.children, (child, i) => {
return ReactAddons.addons.cloneWithProps(child, {
className: 'ascribe-slide',
style: {
width: this.state.containerWidth
},
key: i
});
});
},
render() {
return (
<div
className="container ascribe-sliding-container-wrapper"
ref="containerWrapper">
<div
className="container ascribe-sliding-container"
style={{
width: this.state.containerWidth * React.Children.count(this.props.children),
transform: 'translateX(' + (-1) * this.state.containerWidth * this.state.slideNum + 'px)'
}}>
<div className="row">
{this.renderChildren()}
</div>
</div>
</div>
);
}
});
export default SlidesContainer;

View File

@ -9,7 +9,7 @@ let TableItemAclFiltered = React.createClass({
},
render() {
var availableAcls = ['consign', 'loan', 'transfer', 'view'];
var availableAcls = ['consign', 'loan', 'transfer', 'view', 'consign request', 'unconsign request', 'loan request'];
let filteredAcls = this.props.content.filter((v) => {
return availableAcls.indexOf(v) > -1;

View File

@ -44,7 +44,7 @@ var ReactS3FineUploader = React.createClass({
}),
signature: React.PropTypes.shape({
endpoint: React.PropTypes.string
}),
}).isRequired,
uploadSuccess: React.PropTypes.shape({
method: React.PropTypes.string,
endpoint: React.PropTypes.string,
@ -67,7 +67,7 @@ var ReactS3FineUploader = React.createClass({
method: React.PropTypes.string,
endpoint: React.PropTypes.string,
customHeaders: React.PropTypes.object
}),
}).isRequired,
session: React.PropTypes.shape({
endpoint: React.PropTypes.bool
}),
@ -106,20 +106,6 @@ var ReactS3FineUploader = React.createClass({
isBrowserPreviewCapable: fineUploader.supportedFeatures.imagePreviews
}
},
signature: {
endpoint: AppConstants.serverUrl + 's3/signature/',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
},
deleteFile: {
enabled: true,
method: 'DELETE',
endpoint: AppConstants.serverUrl + 's3/delete',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
},
cors: {
expected: true,
sendCredentials: true
@ -152,10 +138,24 @@ var ReactS3FineUploader = React.createClass({
getInitialState() {
return {
filesToUpload: [],
uploader: new fineUploader.s3.FineUploaderBasic(this.propsToConfig())
uploader: new fineUploader.s3.FineUploaderBasic(this.propsToConfig()),
csrfToken: getCookie('csrftoken')
};
},
// since the csrf header is defined in this component's props,
// everytime the csrf cookie is changed we'll need to reinitalize
// fineuploader and update the actual csrf token
componentWillUpdate(nextProps, nextState) {
let potentiallyNewCSRFToken = getCookie('csrftoken');
if(this.state.csrfToken !== potentiallyNewCSRFToken) {
this.setState({
uploader: new fineUploader.s3.FineUploaderBasic(this.propsToConfig()),
csrfToken: potentiallyNewCSRFToken
});
}
},
propsToConfig() {
let objectProperties = this.props.objectProperties;
objectProperties.key = this.requestKey;
@ -192,13 +192,6 @@ var ReactS3FineUploader = React.createClass({
};
},
getCookie(name) {
let value = '; ' + document.cookie;
let parts = value.split('; ' + name + '=');
if (parts.length === 2) {
return parts.pop().split(';').shift();
}
},
requestKey(fileId) {
let filename = this.state.uploader.getName(fileId);
return new Promise((resolve, reject) => {
@ -207,7 +200,7 @@ var ReactS3FineUploader = React.createClass({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': this.getCookie('csrftoken')
'X-CSRFToken': getCookie('csrftoken')
},
credentials: 'include',
body: JSON.stringify({
@ -245,15 +238,27 @@ var ReactS3FineUploader = React.createClass({
});
this.setState(newState);
this.createBlob(files[id]);
this.props.submitKey(files[id].key);
// also, lets check if after the completion of this upload,
// the form is ready for submission or not
if(this.props.isReadyForFormSubmission && this.props.isReadyForFormSubmission(this.state.filesToUpload)) {
// if so, set uploadstatus to true
this.props.setIsUploadReady(true);
// since the form validation props isReadyForFormSubmission, setIsUploadReady and submitKey
// are optional, we'll only trigger them when they're actually defined
if(this.props.submitKey) {
this.props.submitKey(files[id].key);
} else {
this.props.setIsUploadReady(false);
console.warn('You didn\'t define submitKey in as a prop in react-s3-fine-uploader');
}
// for explanation, check comment of if statement above
if(this.props.isReadyForFormSubmission && this.props.setIsUploadReady) {
// also, lets check if after the completion of this upload,
// the form is ready for submission or not
if(this.props.isReadyForFormSubmission(this.state.filesToUpload)) {
// if so, set uploadstatus to true
this.props.setIsUploadReady(true);
} else {
this.props.setIsUploadReady(false);
}
} else {
console.warn('You didn\'t define the functions isReadyForFormSubmission and/or setIsUploadReady in as a prop in react-s3-fine-uploader');
}
},
@ -264,7 +269,7 @@ var ReactS3FineUploader = React.createClass({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': this.getCookie('csrftoken')
'X-CSRFToken': getCookie('csrftoken')
},
credentials: 'include',
body: JSON.stringify({
@ -316,11 +321,17 @@ var ReactS3FineUploader = React.createClass({
let notification = new GlobalNotificationModel('File upload canceled', 'success', 5000);
GlobalNotificationActions.appendGlobalNotification(notification);
if(this.props.isReadyForFormSubmission && this.props.isReadyForFormSubmission(this.state.filesToUpload)) {
// if so, set uploadstatus to true
this.props.setIsUploadReady(true);
// since the form validation props isReadyForFormSubmission, setIsUploadReady and submitKey
// are optional, we'll only trigger them when they're actually defined
if(this.props.isReadyForFormSubmission && this.props.setIsUploadReady) {
if(this.props.isReadyForFormSubmission(this.state.filesToUpload)) {
// if so, set uploadstatus to true
this.props.setIsUploadReady(true);
} else {
this.props.setIsUploadReady(false);
}
} else {
this.props.setIsUploadReady(false);
console.warn('You didn\'t define the functions isReadyForFormSubmission and/or setIsUploadReady in as a prop in react-s3-fine-uploader');
}
},
@ -374,11 +385,19 @@ var ReactS3FineUploader = React.createClass({
GlobalNotificationActions.appendGlobalNotification(notification);
}
if(this.props.isReadyForFormSubmission && this.props.isReadyForFormSubmission(this.state.filesToUpload)) {
// if so, set uploadstatus to true
this.props.setIsUploadReady(true);
// since the form validation props isReadyForFormSubmission, setIsUploadReady and submitKey
// are optional, we'll only trigger them when they're actually defined
if(this.props.isReadyForFormSubmission && this.props.setIsUploadReady) {
// also, lets check if after the completion of this upload,
// the form is ready for submission or not
if(this.props.isReadyForFormSubmission(this.state.filesToUpload)) {
// if so, set uploadstatus to true
this.props.setIsUploadReady(true);
} else {
this.props.setIsUploadReady(false);
}
} else {
this.props.setIsUploadReady(false);
console.warn('You didn\'t define the functions isReadyForFormSubmission and/or setIsUploadReady in as a prop in react-s3-fine-uploader');
}
},

View File

@ -555,6 +555,24 @@ let FileUploader = React.createClass({
},
params: {
'pk': this.props.edition.other_data ? this.props.edition.other_data.id : null
},
cors: {
expected: true,
sendCredentials: true
}
}}
signature={{
endpoint: AppConstants.serverUrl + 's3/signature/',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
}}
deleteFile={{
enabled: true,
method: 'DELETE',
endpoint: AppConstants.serverUrl + 's3/delete',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
}}
areAssetsDownloadable={true}

31
js/components/footer.js Normal file
View File

@ -0,0 +1,31 @@
'use strict';
import React from 'react';
import { getLangText } from '../utils/lang_utils';
let Footer = React.createClass({
render() {
return (
<div className="ascribe-footer">
<hr />
<p className="ascribe-sub-sub-statement">
<br />
<a href="https://github.com/ascribe/REST-main/" target="_blank">api</a> |
<a href="https://www.ascribe.io/impressum" target="_blank"> impressum</a> |
<a href="https://www.ascribe.io/terms" target="_blank"> terms of service</a> |
<a href="https://www.ascribe.io/privacy" target="_blank"> privacy</a>
</p>
<p className="social-icons-wrapper">
<a href="https://twitter.com/ascribeIO" className="social social-twitter" target="_blank"></a>
<a href="https://www.facebook.com/ascribeio" className="social social-facebook" target="_blank"></a>
<a href="https://github.com/ascribe" className="social social-github" target="_blank"></a>
<a href="http://ascribe-io.tumblr.com/" className="social social-tumblr" target="_blank"></a>
<a href="https://www.linkedin.com/company/4816284?trk=vsrp_companies_res_name&trkInfo=VSRPsearchId%3A122827941425632318075%2CVSRPtargetId%3A4816284%2CVSRPcmpt%3Aprimary" className="social social-linked-in" target="_blank"></a>
</p>
</div>
);
}
});
export default Footer;

View File

@ -80,6 +80,7 @@ let Header = React.createClass({
render() {
let account = null;
let signup = null;
let collection = null;
if (this.state.currentUser.username){
account = (
<DropdownButton eventKey="1" title={this.state.currentUser.username}>
@ -91,6 +92,7 @@ let Header = React.createClass({
<MenuItem eventKey="4" onClick={this.handleLogout}>{getLangText('Log out')}</MenuItem>
</DropdownButton>
);
collection = <NavItemLink to="pieces">COLLECTION</NavItemLink>;
}
else {
account = <NavItemLink to="login">LOGIN</NavItemLink>;
@ -101,11 +103,14 @@ let Header = React.createClass({
<div>
<Navbar
brand={
<Link className="navbar-brand" to="pieces" path="/?page=1">
<Link className="navbar-brand" to="pieces">
{this.getLogo()}
</Link>}
toggleNavKey={0}>
<CollapsibleNav eventKey={0}>
<Nav navbar left>
{collection}
</Nav>
<Nav navbar right>
{account}
{signup}

View File

@ -7,6 +7,7 @@ import GlobalNotificationModel from '../models/global_notification_model';
import GlobalNotificationActions from '../actions/global_notification_actions';
import UserStore from '../stores/user_store';
import UserActions from '../actions/user_actions';
import Form from './ascribe_forms/form';
import Property from './ascribe_forms/property';
@ -17,8 +18,22 @@ import AppConstants from '../constants/application_constants';
let Link = Router.Link;
let LoginContainer = React.createClass({
propTypes: {
message: React.PropTypes.string,
redirectOnLoggedIn: React.PropTypes.bool,
redirectOnLoginSuccess: React.PropTypes.bool
},
mixins: [Router.Navigation],
getDefaultProps() {
return {
message: 'Log in to ascribe...',
redirectOnLoggedIn: true,
redirectOnLoginSuccess: true
};
},
getInitialState() {
return UserStore.getState();
},
@ -35,7 +50,7 @@ let LoginContainer = React.createClass({
this.setState(state);
// if user is already logged in, redirect him to piece list
if(this.state.currentUser && this.state.currentUser.email) {
if(this.state.currentUser && this.state.currentUser.email && this.props.redirectOnLoggedIn) {
this.transitionTo('pieces');
}
},
@ -45,7 +60,7 @@ let LoginContainer = React.createClass({
<div className="ascribe-login-wrapper">
<br/>
<div className="ascribe-login-text ascribe-login-header">
Log in to ascribe...
{this.props.message}
</div>
<LoginForm />
</div>
@ -55,18 +70,31 @@ let LoginContainer = React.createClass({
let LoginForm = React.createClass({
propTypes: {
redirectOnLoginSuccess: React.PropTypes.bool
},
handleSuccess(){
let notification = new GlobalNotificationModel('Login successsful', 'success', 10000);
GlobalNotificationActions.appendGlobalNotification(notification);
/*Taken from http://stackoverflow.com/a/14916411 */
// register_piece is waiting for a login success as login_container and it is wrapped
// in a slides_container component.
// The easiest way to check if the user was successfully logged in is to fetch the user
// in the user store (which is obviously only possible if the user is logged in), since
// register_piece is listening to the changes of the user_store.
UserActions.fetchCurrentUser();
/* Taken from http://stackoverflow.com/a/14916411 */
/*
We actually have to trick the Browser into showing the "save password" dialog
as Chrome expects the login page to be reloaded after the login.
Users on Stack Overflow claim this is a bug in chrome and should be fixed in the future.
Until then, we redirect the HARD way, but reloading the whole page using window.location
*/
window.location = AppConstants.baseUrl + 'collection';
if(this.props.redirectOnLoginSuccess) {
window.location = AppConstants.baseUrl + 'collection';
}
},
render() {

View File

@ -33,7 +33,8 @@ let PieceList = React.createClass({
let page = this.props.query.page || 1;
PieceListStore.listen(this.onChange);
if (this.state.pieceList.length === 0){
PieceListActions.fetchPieceList(page, this.state.pageSize, this.state.search, this.state.orderBy, this.state.orderAsc);
PieceListActions.fetchPieceList(page, this.state.pageSize, this.state.search, this.state.orderBy, this.state.orderAsc)
.then(PieceListActions.fetchPieceRequestActions());
}
},

View File

@ -12,12 +12,17 @@ import LicenseStore from '../stores/license_store';
import PieceListStore from '../stores/piece_list_store';
import PieceListActions from '../actions/piece_list_actions';
import UserStore from '../stores/user_store';
import GlobalNotificationModel from '../models/global_notification_model';
import GlobalNotificationActions from '../actions/global_notification_actions';
import Form from './ascribe_forms/form';
import Property from './ascribe_forms/property';
import LoginContainer from './login_container';
import SlidesContainer from './ascribe_slides_container/slides_container';
import apiUrls from '../constants/api_urls';
import ReactS3FineUploader from './ascribe_uploader/react_s3_fine_uploader';
@ -25,6 +30,7 @@ import ReactS3FineUploader from './ascribe_uploader/react_s3_fine_uploader';
import DatePicker from 'react-datepicker/dist/react-datepicker';
import { mergeOptions } from '../utils/general_utils';
import { getCookie } from '../utils/fetch_api_utils';
let RegisterPiece = React.createClass( {
mixins: [Router.Navigation],
@ -32,11 +38,13 @@ let RegisterPiece = React.createClass( {
getInitialState(){
return mergeOptions(
LicenseStore.getState(),
UserStore.getState(),
PieceListStore.getState(),
{
digitalWorkKey: null,
uploadStatus: false,
selectedLicense: 0
selectedLicense: 0,
isFineUploaderEditable: false
});
},
@ -44,26 +52,39 @@ let RegisterPiece = React.createClass( {
LicenseActions.fetchLicense();
LicenseStore.listen(this.onChange);
PieceListStore.listen(this.onChange);
UserStore.listen(this.onChange);
},
componentWillUnmount() {
LicenseStore.unlisten(this.onChange);
PieceListStore.unlisten(this.onChange);
UserStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
// once the currentUser object from UserStore is defined (eventually the user was transitioned
// to the login form via the slider and successfully logged in), we can direct him back to the
// register_piece slide
if(state.currentUser && state.currentUser.email || this.state.currentUser && this.state.currentUser.email) {
this.refs.slidesContainer.setSlideNum(0);
// we should also make the fineuploader component editable again
this.setState({
isFineUploaderEditable: true
});
}
},
handleSuccess(){
let notification = new GlobalNotificationModel('Piece registration successful', 'success', 10000);
handleSuccess(response){
let notification = new GlobalNotificationModel(response.notification, 'success', 10000);
GlobalNotificationActions.appendGlobalNotification(notification);
// once the user was able to register a piece successfully, we need to make sure to keep
// the piece list up to date
PieceListActions.fetchPieceList(this.state.page, this.state.pageSize, this.state.searchTerm, this.state.orderBy, this.state.orderAsc);
this.transitionTo('pieces');
this.transitionTo('edition', {editionId: response.edition.bitcoin_id});
},
getFormData(){
@ -96,7 +117,7 @@ let RegisterPiece = React.createClass( {
}
},
onLicenseChange(event){
console.log(this.state.licenses[event.target.selectedIndex].url);
//console.log(this.state.licenses[event.target.selectedIndex].url);
this.setState({selectedLicense: event.target.selectedIndex});
},
getLicenses() {
@ -108,7 +129,7 @@ let RegisterPiece = React.createClass( {
onChange={this.onLicenseChange}
footer={
<a className="pull-right" href={this.state.licenses[this.state.selectedLicense].url} target="_blank">
Learn more about this license
Learn more
</a>}>
<select name="license">
{this.state.licenses.map((license, i) => {
@ -127,11 +148,21 @@ let RegisterPiece = React.createClass( {
return null;
},
changeSlide() {
// only transition to the login store, if user is not logged in
// ergo the currentUser object is not properly defined
if(!this.state.currentUser.email) {
this.refs.slidesContainer.setSlideNum(1);
}
},
render() {
return (
<div className="row ascribe-row">
<div className="col-md-12">
<h3 style={{'marginTop': 0}}>Lock down title</h3>
<SlidesContainer ref="slidesContainer">
<div
onClick={this.changeSlide}
onFocus={this.changeSlide}>
<h3 style={{'marginTop': 0}} onClick={this.changePage}>Lock down title</h3>
<Form
ref='form'
url={apiUrls.pieces_list}
@ -148,12 +179,12 @@ let RegisterPiece = React.createClass( {
<img src="https://s3-us-west-2.amazonaws.com/ascribe0/media/thumbnails/ascribe_animated_medium.gif" />
</button>
}>
<Property
label="Files to upload">
<Property label="Files to upload">
<FileUploader
submitKey={this.submitKey}
setIsUploadReady={this.setIsUploadReady}
isReadyForFormSubmission={this.isReadyForFormSubmission}/>
isReadyForFormSubmission={this.isReadyForFormSubmission}
editable={this.state.isFineUploaderEditable}/>
</Property>
<Property
name='artist_name'
@ -193,7 +224,13 @@ let RegisterPiece = React.createClass( {
<hr />
</Form>
</div>
</div>
<div>
<LoginContainer
message="Please login before ascribing your piece..."
redirectOnLoggedIn={false}
redirectOnLoginSuccess={false}/>
</div>
</SlidesContainer>
);
}
});
@ -203,12 +240,18 @@ let FileUploader = React.createClass({
propTypes: {
setIsUploadReady: React.PropTypes.func,
submitKey: React.PropTypes.func,
isReadyForFormSubmission: React.PropTypes.func
isReadyForFormSubmission: React.PropTypes.func,
onClick: React.PropTypes.func,
// editable is used to lock react fine uploader in case
// a user is actually not logged in already to prevent him from droping files
// before login in
editable: React.PropTypes.bool
},
render() {
return (
<ReactS3FineUploader
onClick={this.props.onClick}
keyRoutine={{
url: AppConstants.serverUrl + 's3/key/',
fileClass: 'digitalwork'
@ -224,7 +267,21 @@ let FileUploader = React.createClass({
setIsUploadReady={this.props.setIsUploadReady}
isReadyForFormSubmission={this.props.isReadyForFormSubmission}
areAssetsDownloadable={false}
areAssetsEditable={true}/>
areAssetsEditable={this.props.editable}
signature={{
endpoint: AppConstants.serverUrl + 's3/signature/',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
}}
deleteFile={{
enabled: true,
method: 'DELETE',
endpoint: AppConstants.serverUrl + 's3/delete',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
}}/>
);
}
});

View File

@ -15,6 +15,8 @@ import ApplicationStore from '../stores/application_store';
import GlobalNotificationModel from '../models/global_notification_model';
import GlobalNotificationActions from '../actions/global_notification_actions';
import ReactS3FineUploader from './ascribe_uploader/react_s3_fine_uploader';
import CollapsibleParagraph from './ascribe_collapsible/collapsible_paragraph';
import Form from './ascribe_forms/form';
import Property from './ascribe_forms/property';
@ -22,6 +24,7 @@ import Property from './ascribe_forms/property';
import apiUrls from '../constants/api_urls';
import AppConstants from '../constants/application_constants';
import { getCookie } from '../utils/fetch_api_utils';
let SettingsContainer = React.createClass({
mixins: [Router.Navigation],
@ -30,8 +33,11 @@ let SettingsContainer = React.createClass({
return (
<div>
<AccountSettings />
<BitcoinWalletSettings />
<APISettings />
<BitcoinWalletSettings />
<LoanContractSettings />
<br />
<br />
</div>
);
}
@ -172,19 +178,71 @@ let BitcoinWalletSettings = React.createClass({
}
});
let ContractSettings = React.createClass({
propTypes: {
currentUser: React.PropTypes.object
},
let LoanContractSettings = React.createClass({
render() {
return (
<div>
<div>Username: {this.props.currentUser.username}</div>
<div>Email: {this.props.currentUser.email}</div>
</div>
<CollapsibleParagraph
title="Loan Contract Settings"
show={true}
defaultExpanded={true}>
<FileUploader />
</CollapsibleParagraph>
);
}
});
let FileUploader = React.createClass({
propTypes: {
},
render() {
return (
<Form>
<Property
label="Contract file">
<ReactS3FineUploader
keyRoutine={{
url: AppConstants.serverUrl + 's3/key/',
fileClass: 'contract'
}}
createBlobRoutine={{
url: apiUrls.ownership_loans_contract
}}
validation={{
itemLimit: 100000,
sizeLimit: '10000000'
}}
session={{
endpoint: apiUrls.ownership_loans_contract,
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
},
cors: {
expected: true,
sendCredentials: true
}
}}
signature={{
endpoint: AppConstants.serverUrl + 's3/signature/',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
}}
deleteFile={{
enabled: true,
method: 'DELETE',
endpoint: AppConstants.serverUrl + 's3/delete',
customHeaders: {
'X-CSRFToken': getCookie('csrftoken')
}
}}
areAssetsDownloadable={true}
areAssetsEditable={true}/>
</Property>
<hr />
</Form>
);
}
});
@ -227,7 +285,7 @@ let APISettings = React.createClass({
name={app.name}
label={app.name}>
<div className="row-same-height">
<div className="col-xs-6 col-xs-height col-middle">
<div className="no-padding col-xs-6 col-xs-height col-middle">
{'Bearer ' + app.bearer_token.token}
</div>
<div className="col-xs-6 col-xs-height">

View File

@ -23,6 +23,7 @@ let apiUrls = {
'ownership_loans': AppConstants.apiEndpoint + 'ownership/loans/',
'ownership_loans_confirm': AppConstants.apiEndpoint + 'ownership/loans/confirm/',
'ownership_loans_deny': AppConstants.apiEndpoint + 'ownership/loans/deny/',
'ownership_loans_contract': AppConstants.apiEndpoint + 'ownership/loans/contract/',
'ownership_shares': AppConstants.apiEndpoint + 'ownership/shares/',
'ownership_transfers': AppConstants.apiEndpoint + 'ownership/transfers/',
'ownership_transfers_withdraw': AppConstants.apiEndpoint + 'ownership/transfers/withdraw/',
@ -31,7 +32,9 @@ let apiUrls = {
'ownership_unconsigns_request': AppConstants.apiEndpoint + 'ownership/unconsigns/request/',
'piece': AppConstants.apiEndpoint + 'pieces/${piece_id}',
'piece_extradata': AppConstants.apiEndpoint + 'pieces/${piece_id}/extradata/',
'piece_first_edition_id': AppConstants.apiEndpoint + 'pieces/${piece_id}/edition_index/',
'pieces_list': AppConstants.apiEndpoint + 'pieces/',
'pieces_list_request_actions': AppConstants.apiEndpoint + 'pieces/request_actions/',
'user': AppConstants.apiEndpoint + 'users/',
'users_login': AppConstants.apiEndpoint + 'users/login/',
'users_logout': AppConstants.apiEndpoint + 'users/logout/',

View File

@ -1,7 +1,6 @@
'use strict';
import fetch from 'isomorphic-fetch';
import requests from '../utils/requests';
import AppConstants from '../constants/application_constants';
@ -11,13 +10,7 @@ let OwnershipFetcher = {
* If no arg is supplied, load the current user
*/
fetchLoanContract(email) {
return fetch(AppConstants.baseUrl + 'ownership/loans/contract/?loanee=' + email, {
headers: {
'Authorization': 'Basic ' + AppConstants.debugCredentialBase64
}
}).then(
(res) => res.json()
);
return requests.get(AppConstants.apiEndpoint + 'ownership/loans/contract/?loanee=' + email);
}
};

View File

@ -12,6 +12,10 @@ let PieceListFetcher = {
fetch(page, pageSize, search, orderBy, orderAsc) {
let ordering = generateOrderingQueryParams(orderBy, orderAsc);
return requests.get('pieces_list', { page, pageSize, search, ordering });
},
fetchRequestActions() {
return requests.get('pieces_list_request_actions');
}
};

View File

@ -85,6 +85,11 @@ class PieceListStore {
this.pieceList = pieceList;
}
onUpdatePieceListRequestActions(requestActions) {
this.pieceList.forEach((piece) => {
piece.requestAction = requestActions.indexOf(piece.id) > -1;
});
}
}
export default alt.createStore(PieceListStore, 'PieceListStore');

View File

@ -44,10 +44,10 @@ class Requests {
}
handleAPIError(json) {
if (!json.success) {
if (json.success === false) {
let error = new APIError();
error.json = json;
console.error(new Error('The \'success\' property is missing in the server\'s response.'));
//console.error(new Error('The \'success\' property is missing in the server\'s response.'));
throw error;
}
return json;

View File

@ -17,6 +17,9 @@ $ascribe-accordion-list-font: 'Source Sans Pro';
border-radius: 1px;
border-bottom: 0.1em solid rgba(0,0,0,.2);
.wrapper {
&:hover{
background-color: rgba(2, 182, 163, 0.05);
}
width:100%;
height:100%;
// ToDo: Include media queries for thumbnail
@ -24,6 +27,7 @@ $ascribe-accordion-list-font: 'Source Sans Pro';
width: 110px;
height: 110px;
padding:0;
cursor: pointer;
img {
max-width: 100%;
max-height: 100%;
@ -38,10 +42,14 @@ $ascribe-accordion-list-font: 'Source Sans Pro';
h1 {
margin-top: .3em;
font-size: 2.25em;
cursor: pointer;
}
h3 {
font-size: 1.1em;
margin: .7em 0 0 0;
margin: .2em 0 0 0;
}
a {
color: #666;
}
}
}
@ -62,11 +70,46 @@ $ascribe-accordion-list-font: 'Source Sans Pro';
margin-bottom: 3em;
background-color: white;
border-bottom-left-radius: 1px;
border-bottom-right-radius: 1px;
//border-bottom-left-radius: 1px;
//border-bottom-right-radius: 1px;
border-bottom: 0.1em solid rgba(0,0,0,.15);
border-left: 0.1em solid rgba(0,0,0,.2);
border-right: 0.1em solid rgba(0,0,0,.2);
padding: 0;
thead:first-child {
tr:first-child {
border: none! important;
th{
padding-left: 10px;
border: none! important;
}
}
border-left: 3px solid rgba(0,0,0,0);
border-bottom: 1px solid rgba(0,0,0,.1);
}
tbody {
tr {
padding: 1em;
&:hover{
background-color: rgba(2, 182, 163, 0.05);
border-left: 3px solid rgba(2, 182, 163, 0.4);
}
border-left: 3px solid rgba(0,0,0,0);
border-bottom: 1px solid rgba(0,0,0,.05);
td {
border: none! important;
a {
color: #444
}
}
}
tr{
td:first-child {
margin-left: 10px;
}
}
}
}
span.ascribe-accordion-list-table-toggle {
@ -84,4 +127,13 @@ span.ascribe-accordion-list-table-toggle {
font-size:.85em;
text-align: center;
}
}
.request-action-batch {
position: absolute;
top: 0px;
right: 0px;
color: #666;
font-size: 1.2em;
padding: 0.3em;
}

52
sass/ascribe_footer.scss Normal file
View File

@ -0,0 +1,52 @@
.ascribe-footer {
text-align: center;
}
.ascribe-footer hr {
border: 0;
border-top: 1px solid #eee;
background-color: rgba(0,0,0,0);
margin-bottom: 0 !important;
}
.ascribe-footer .btn-ascribe-landing {
margin-top: 2em;
}
.ascribe-footer-statement {
font-family: 'mercury_light';
font-size: 1.6em !important;
margin-bottom: 0;
margin-top: 0;
}
.ascribe-footer-statement a, .ascribe-footer-sub-statement a {
color: #424242;
}
.ascribe-footer-sub-statement {
font-size: .9em !important;
margin-bottom: 2.5em;
}
.ascribe-footer-statement a, .ascribe-footer-sub-statement a {
color: #424242;
}
.ascribe-footer-statement a:hover, .ascribe-footer-sub-statement a:hover {
color: #48DACB;
}
.ascribe-footer .social-icons-wrapper {
margin-top: 1em;
}
.ascribe-footer .social-icons-wrapper a {
color: #424242;
margin-left: 1em;
font-size: 1.3em;
}
.ascribe-footer .social-icons-wrapper a:hover {
color: #48DACB;
}

View File

@ -1,7 +1,6 @@
$break-small: 764px;
$break-medium: 991px;
.ascribe-row {
@media screen and (max-width: $break-medium) {
max-width: 600px;
@ -9,5 +8,9 @@ $break-medium: 991px;
@media screen and (min-width: $break-medium) {
max-width: 1200px;
}
margin: 0 auto
margin: 0 auto;
}
.ascribe-row > div {
padding-left: 0;
}

View File

@ -0,0 +1,16 @@
.ascribe-sliding-container-wrapper {
overflow-x: hidden;
padding-left: 0;
}
.ascribe-sliding-container {
transition: transform 1s cubic-bezier(0.23, 1, 0.32, 1);
}
.ascribe-slide {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
float:left;
}

File diff suppressed because one or more lines are too long

View File

@ -7,6 +7,7 @@ $BASE_URL: '<%= BASE_URL %>';
@import 'variables';
@import '../node_modules/bootstrap-sass/assets/stylesheets/bootstrap';
@import '../node_modules/react-datepicker/dist/react-datepicker';
@import 'glyphicons-social';
@import 'ascribe_theme';
@import './ascribe-fonts/style';
@import './ascribe-fonts/ascribe-fonts';
@ -19,16 +20,22 @@ $BASE_URL: '<%= BASE_URL %>';
@import 'ascribe_textarea';
@import 'ascribe_media_player';
@import 'ascribe_uploader';
@import 'ascribe_footer';
@import 'ascribe-global-notification';
@import 'ascribe_piece_register';
@import 'offset_right';
@import 'ascribe_settings';
@import 'ascribe_slides_container';
body {
background-color: #FDFDFD;
border-radius: 0;
}
html {
overflow-y: scroll;
}
.hidden {
display: none;
}
@ -48,6 +55,27 @@ body {
border-color: #CCC
}
.truncate {
white-space: nowrap;
width: 4em;
overflow: hidden;
text-overflow: ellipsis;
@media only screen and (min-width: 400px) {
width: 8em;
}
@media only screen and (min-width: 600px) {
width: 12em;
}
@media only screen and (min-width: 1000px) {
width: 14em;
}
@media only screen and (min-width: 1200px) {
width: 16em;
}
@media only screen and (min-width: 1400px) {
width: 18em;
}
}
.navbar-right {
margin-right: 0;
}
@ -92,12 +120,21 @@ body {
vertical-align: middle;
float: none;
}
.filter-glyph{
color: white;
}
.no-margin {
margin-right: 0;
margin-left: 0;
}
.btn-delete{
background-color: rgba(0,0,0,0);
color: #888;
border: 1px solid rgba(0,0,0,0);
&:hover{
border: 1px solid $ascribe-brand-danger;
}
}
.btn-ascribe, .btn-ascribe-inv {
border: 1px solid #444;
line-height: 2em;
@ -243,7 +280,7 @@ body {
vertical-align: bottom;
}
.ascribe-button-list button {
.ascribe-button-list button, .ascribe-margin-1px {
margin-right: 1px;
margin-top: 1px;
}
}

View File

@ -186,7 +186,7 @@ $input-bg: #fff !default;
$input-bg-disabled: $gray-lighter !default;
//** Text color for `<input>`s
$input-color: white !default;
$input-color: $gray !default;
//** `<input>` border color
$input-border: #ccc !default;
@ -477,7 +477,9 @@ $pager-hover-bg: darken($ascribe-color-full, 10%) !default
$pager-active-bg: $ascribe-color-full !default;
$pager-active-color: $ascribe-color-full !default;
$pager-disabled-color: lighten($ascribe-color-full, 10%) !default;
$pager-disabled-color: #CCC !default;
$pager-disabled-border: 1px solid #CCC !default;
$pager-disabled-bg: #000 !default;
//== Jumbotron