commit 65a7943588df84cb15d02447e5af09854884f2cd Author: Lucas Colombo Date: Sat Jul 1 16:19:40 2023 -0300 🥂 Initial commit diff --git a/.cocorc b/.cocorc new file mode 100644 index 0000000..8a03036 --- /dev/null +++ b/.cocorc @@ -0,0 +1,2 @@ +useEmoji: true +askScope: false \ No newline at end of file diff --git a/.design/logos.ai b/.design/logos.ai new file mode 100644 index 0000000..601bad0 --- /dev/null +++ b/.design/logos.ai @@ -0,0 +1,1460 @@ +%PDF-1.6 % +1 0 obj <>/OCGs[27 0 R 28 0 R 29 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + logos + + + 2023-06-30T07:30:52-03:00 + 2023-06-30T07:30:52-03:00 + 2023-06-30T07:30:52-02:00 + Adobe Illustrator 26.0 (Windows) + + + + 192 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AmOd09myX8vP+UkT/AIxS fqzW9rf3PxDr+0/7r4h6nnLvOOxV475t/wCUk1D/AIyn9Qzr9D/cx9z1Oi/uo+5Kcy3KdirsVeif lh/vBe/8ZV/4jnP9s/XH3Oi7W+qPuZpmldS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8Hzuns 2S/l5/ykif8AGKT9Wa3tb+5+Idf2n/dfEM/1zzJp+i+h9cEh+scuHpqG+xStakfzZodNo55r4a2d Lp9LLLfD0Sr/AJWP5e/luP8AgF/5qzK/kjN5OT/JeXyY5e+WNW127m1ewRPql45eH1GCtQfDuN+4 zY49bjwRGOf1Rc7Hq4YYiEvqiof8q88yfyRf8jBk/wCVsPn8mf8AKeLz+SF1TyfrWm2b3d0sYhQg MVcE/EaDbLcPaGPJLhjdtuLXY8kuGPNJMzXLeiflh/vBe/8AGVf+I5z/AGz9cfc6Ltb6o+5mmaV1 LsVdirsVdirsVdirsVdirsVdirsVdirsVdirwfO6ezZL+Xn/ACkif8YpP1Zre1v7n4h1/af918Qm /wCaX/Ss/wCe/wDzLzE7F/j+H6XF7I/i+H6WB5vXdPXvJn/KMWH+o3/E2zku0f7+X46PL67++knW YTiMd8/f8oxcf68f/Exmw7L/AL8fH7nO7N/vh8XlOdU9K9E/LD/eC9/4yr/xHOf7Z+uPudF2t9Uf czTNK6l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4PndPZsl/Lz/lJE/4xSfqzW9rf3PxDr+0/ 7r4hN/zS/wClZ/z3/wCZeYnYv8fw/S4vZH8Xw/SwPN67pkGm+eNa0+yis4FhMMIITkhJ3JO55Dxz Azdm48kjI3ZcHL2fjnIyN2UT/wArH8w/y2//AADf81ZV/JGHza/5LxeaD1Xznq+qWT2dysQhcqW4 KQfhNRuWOXYOzseKXFG7bcOhx45cQu0izOc16J+WH+8F7/xlX/iOc/2z9cfc6Ltb6o+5mmaV1LsV dirsVdirsVdirsVdirsVdirsVdirsVdirwfO6ezZL+Xn/KSJ/wAYpP1Zre1v7n4h1/af918Qm/5p f9Kz/nv/AMy8xOxf4/h+lxeyP4vh+lgeb13TsVdirsVdir0T8sP94L3/AIyr/wARzn+2frj7nRdr fVH3M0zSupdirsVdirsVdirsVdirsVdirsVdirsVdirsVeD53T2bJfy8/wCUkT/jFJ+rNb2t/c/E Ov7T/uviHqEtvBNT1Y0k4/Z5qGpXwrnMxmRyLzwkRyKn+j7D/lmi/wCAX+mS8WfeU+JLvLv0fYf8 s0X/AAC/0x8WfeV8SXeXfo+w/wCWaL/gF/pj4s+8r4ku8sf892lpH5buHjhjRw0dGVQD9sdwMz+z MkjmFk9fuc7s+cjmFnveXZ070T0T8sP94L3/AIyr/wARzn+2frj7nRdrfVH3M0zSupdirsVdirsV dirsVdirsVdirsVdirsVdirsVeD53T2bJfy8/wCUkT/jFJ+rNb2t/c/EOv7T/uviHqecu84oX19b 2NpJd3LFYIgC7AE0qadB88sxYzOQjHmWePGZyERzKSf4+8sf8tD/APIt/wCmZn8l5+77Q5f8m5u7 7Xf4+8sf8tD/APIt/wCmP8l5+77Qv8m5u77Un82+bdD1HQ5rS0mZ53ZCqlGX7LAncjMzQ6HLjyiU hs5ei0WTHkEpDZgOb53T0T8sP94L3/jKv/Ec5/tn64+50Xa31R9zNM0rqXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXg+d09myX8vP+UkT/jFJ+rNb2t/c/EOv7T/uviHqecu84kvnP/lGL/8A1F/4 muZvZ39/H8dHL0P99F5DnWvUOxV2KuxV6J+WH+8F7/xlX/iOc/2z9cfc6Ltb6o+5mmaV1LsVdirs VdirsVdirsVdirsVdirsVdirsVdirC/+VYWH/LbL/wACubr+WZ/zQ7b+VpfzQmGheSbXSNQF5Hcv KwVl4MAB8XyzH1PaMssOEgBo1GvlljwkUyTNa4CE1bTk1LTprF3MaTAAuu5FCD3+WXYMxxzEh0bc OXw5iQ6MW/5VhYf8tsv/AAK5tP5Zn/NDsf5Wl/NDv+VYWH/LbL/wK4/yzP8Amhf5Wl/NDv8AlWFh /wAtsv8AwK4/yzP+aF/laX80O/5VhYf8tsv/AAK4/wAsz/mhf5Wl/NCe+XPLkOhwzRRTNMJmDEsA KUFO2YGr1ZzEEiqcPVao5iCRVJvmI4rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdiqS/4z8sf8t6f8C//NOZv8nZ/wCb9zl/kc381EWHmPRL +4FvaXSyzEFggDDYdeoGV5dJlxi5CgwyaXJAXIUFXUta0zTPT+vTiD1eXp1DGvGlegP8wyGHTzyX wi6Y4sE8l8IukF/jPyx/y3p/wL/805f/ACdn/m/c2/kc381NbS7t7y3S5tnEkEgqjiorQ0708Mxc mMwPDLYhxpwMTR5quQYuxV2KuxV2KuxVSu7u3s7d7m5cRwRiruamlTTtXxyePGZnhjuSyhAyNDml X+M/LH/Len/Av/zTmV/J2f8Am/c5P5HN/Nd/jPyx/wAt6f8AAv8A804/ydn/AJv3L+RzfzXf4z8s f8t6f8C//NOP8nZ/5v3L+RzfzXf4z8sf8t6f8C//ADTj/J2f+b9y/kc381Nbq6gtbd7i4f04Yxyd zU0H0ZiQgZGhzLjQgZGhzSr/ABn5Y/5b0/4F/wDmnMv+Ts/837nJ/I5v5qM03W9K1JpFsbgTGIAu AGFK9OoHhlObTZMdcQq2rLp54/qFLNQ8xaNp8/oXl0sMxUNwIY7HodgfDDi0mTILiLCcemyTFxFh Df4z8sf8t6f8C/8AzTlv8nZ/5v3Nn5HN/NTlHWRFdDVHAZT4g7jMMijTikVs3gQ7FXg+d09myX8v P+UkT/jFJ+rNb2t/c/EOv7T/ALr4hN/zS/6Vn/Pf/mXmJ2L/AB/D9Li9kfxfD9LA83runr3kz/lG LD/Ub/ibZyXaP9/L8dHl9d/fSTrMJxHYq7FXYq7FXYqkvnP/AJRi/wD9Rf8Aia5m9nf38fx0cvQ/ 30XkOda9Q7FXYq7FXsXm3/lG9Q/4xH9YzkND/fR97y2i/vY+947nXvUs4/K/+/1D/Ui/W2aTtrlH 4un7X5R+KA/Mf/lIV/5h0/4k2X9kf3Pxbuy/7r4sWzaOye46f/vBbf8AGJP+IjOJy/Wfe8fk+o+9 Xytg7FXg+d09myX8vP8AlJE/4xSfqzW9rf3PxDr+0/7r4hN/zS/6Vn/Pf/mXmJ2L/H8P0uL2R/F8 P0sDzeu6eveTP+UYsP8AUb/ibZyXaP8Afy/HR5fXf30k6zCcR2KpH5q8xvodvBKkAn9ZyhBbjSgr 4HM7Q6QZyRdU5mj0vjEi6pjf/K0J/wDq3p/yNP8AzTmx/kUfzvsc/wDkgfzvsZd5e1dtW0qO+aIQ mQsOAPKnFiOtB4ZqdXg8LIY3brNTh8KZjdsXvfzJnt7ye3FgrCGR4w3qEV4sRX7Ptmzx9jiUQeLm O52OPsoSiDxcx3KDeb5vMVNEa2W2F8RGZwxfjQhq8aLXp45YNANP+9vi4ejP8kMH7y74eir/AMqt /wC1n/yQ/wCvmQ/lr+h9v7GH8r/0ft/Y7/lVv/az/wCSH/XzH+Wv6H2/sX+V/wCj9v7GK+YdF/Q+ pNZet69EV/U48PtdqVb9ebTSajxocVU7LTZ/FhxVSW5kuQ9t1aw/SGm3Fl6npeunD1Kcqe9Kj9ec Vgy+HMSq6eRw5OCYlzph3/Krf+1n/wAkP+vmbj+Wv6H2/sdp/K/9H7f2J55X8p/oKS4f619Z9cKK enwpxJ/ymr1zC1uu8cDaq83E1es8YDaqYh+Y/wDykK/8w6f8SbNt2R/c/F2fZf8AdfFi2bR2T3HT /wDeC2/4xJ/xEZxOX6z73j8n1H3q+VsHYq8Hzuns2S/l5/ykif8AGKT9Wa3tb+5+Idf2n/dfEJv+ aX/Ss/57/wDMvMTsX+P4fpcXsj+L4fpYHm9d09e8mf8AKMWH+o3/ABNs5LtH+/l+Ojy+u/vpJ1mE 4jsVYX+Z/wDvBZf8ZW/4jm67G+uXudt2T9Uvc87zoHevVvIP/KMW/wDryf8AEznK9qf35+H3PNdp f3x+DzTWP+Ote/8AMRL/AMTOdLp/7uPuH3PQYPoj7gi/KX/KSaf/AMZR+o5Trv7mXuatb/dS9z2L OQeWdiryz8w/+Ukf/jFH+rOo7J/ufiXo+zP7r4ljWbJ2D2nX72ey0a7u4CBNChZCRUVr4Zxulxie SMTyJeT02MTyCJ5F53/ysPzJ/PF/yLGdB/JOHz+bvP5Mxefzd/ysPzJ/PF/yLGP8k4fP5r/JmLz+ aT6tq95qt0Lq7KmUKEqo4igJI2+nMzBgjijwx5OXhwxxxqPJBZc2sji8/wDmGKJI1eLiihV/djoB QZrpdl4Sb3+bgHs3ETe6b+V/OWt6jrttZ3LRmCXnzCoAfhjZhv8AMZia3s/FjxGUbsV97i6vQ48e MyHMfrZ9mhdK8Hzuns2S/l5/ykif8YpP1Zre1v7n4h1/af8AdfEJv+aX/Ss/57/8y8xOxf4/h+lx eyP4vh+lgeb13T17yZ/yjFh/qN/xNs5LtH+/l+Ojy+u/vpJ1mE4jsVYX+Z/+8Fl/xlb/AIjm67G+ uXudt2T9Uvc87zoHevVvIP8AyjFv/ryf8TOcr2p/fn4fc812l/fH4PNNY/4617/zES/8TOdLp/7u PuH3PQYPoj7gh4J5reZZoXMcqGqOpoQfY5ZKIkKPJnKIkKPJH/4m8w/9XG4/5GNmP+Tw/wA0fJp/ KYv5od/ibzD/ANXG4/5GNj+Tw/zR8l/KYv5oQV1eXV3N611K00pABdySaDpucvhjjAVEUG6EIxFA UFLJMnsXm3/lG9Q/4xH9YzkND/fR97y2i/vY+947nXvUuxV2KuxV2Kp95F/5Sqx/56/8mXzB7T/u JfD7w4XaH9zL4feHrWcm8y8Hzuns2S/l5/ykif8AGKT9Wa3tb+5+Idf2n/dfEJv+aX/Ss/57/wDM vMTsX+P4fpcXsj+L4fpYHm9d09e8mf8AKMWH+o3/ABNs5LtH+/l+Ojy+u/vpJ1mE4jsVYX+Z/wDv BZf8ZW/4jm67G+uXudt2T9Uvc87zoHevVvIP/KMW/wDryf8AEznK9qf35+H3PNdpf3x+DBdU8u69 Jqd3IlhOyPNIysEJBBckEZvcOrxCEQZDkHc4dVjEADIcghf8M+Yf+rdcf8i2yz85h/nD5tn5vF/O Dv8ADPmH/q3XH/ItsfzmH+cPmv5vF/ODv8M+Yf8Aq3XH/ItsfzmH+cPmv5vF/OCCurO6tJvRuomh lABKOCDQ9Njl8MkZi4mw3QnGQsGwpZJk9i82/wDKN6h/xiP6xnIaH++j73ltF/ex97x3OvepZr+W kEE09/6sayUWOnNQ1N28c03bEiBGj3up7VkQI0e9AfmHFFFr6rEixr6CHioAFeTeGX9kyJxb97d2 ZInFv3sZzZOwe1WFhYmxtybeIkxJU8F/lHtnGZcsuI7nm8lkyS4jueaJjs7SNw8cEaOOjKqgjt1A ys5JHYktZnI8yq5Bi8Hzuns2S/l5/wApIn/GKT9Wa3tb+5+Idf2n/dfEJv8Aml/0rP8Anv8A8y8x Oxf4/h+lxeyP4vh+lgeb13T17yZ/yjFh/qN/xNs5LtH+/l+Ojy+u/vpJ1mE4jsVYX+Z/+8Fl/wAZ W/4jm67G+uXudt2T9Uvc87zoHevVvIP/ACjFv/ryf8TOcr2p/fn4fc812l/fH4MizXuC7FXYq7FX ln5h/wDKSP8A8Yo/1Z1HZP8Ac/EvR9mf3XxLGs2TsHsXm3/lG9Q/4xH9YzkND/fR97y2i/vY+947 nXvUs4/K/wDv9Q/1Iv1tmk7a5R+Lp+1+UfigPzH/AOUhX/mHT/iTZf2R/c/Fu7L/ALr4sWzaOye4 6f8A7wW3/GJP+IjOJy/Wfe8fk+o+9Xytg7FXg+d09myX8vP+UkT/AIxSfqzW9rf3PxDr+0/7r4hm fmzyvJrv1XhcCD6t6laqWrz4+46cc0+h1owXtd06rR6sYb2u2P8A/Kr5/wDq4J/yKP8AzVmf/LQ/ m/a5v8rj+b9rcXnE+XE/Qhs/rJsSYzOJeHKpLV48Gp18cEuz/wAx+94uHi6V+1TofH/eXXF0r9q/ /laX/as/5L/9e8H8i/0/s/ax/kj+l9n7Xf8AK0v+1Z/yX/694/yL/T+z9q/yR/S+z9qS+Z/N36dg gi+qfV/Rcvy9TnWopT7K5m6LQeASeK78v2uZpNF4JJu78mO5sHOereQf+UYt/wDXk/4mc5XtT+/P w+55rtL++PwZFmvcFjHmTzt+hdQFn9S+sVjWTn6vD7RIpTg3hmz0fZ3jQ4uKt+79rsdLoPFjxcVf D9qVf8rS/wC1Z/yX/wCveZX8i/0/s/a5H8kf0vs/a7/laX/as/5L/wDXvH+Rf6f2ftX+SP6X2ftY r5h1r9Mak176PoVRU9Plz+z3rRf1ZtNJp/Bhw3bstNg8KHDdpbmS5D2Lzb/yjeof8Yj+sZyGh/vo +95bRf3sfe8dzr3qWcflf/f6h/qRfrbNJ21yj8XT9r8o/FAfmP8A8pCv/MOn/Emy/sj+5+Ld2X/d fFi2bR2TOLf8zfRgji/RvL00VOXr0rxFK/3eaSfY1knj+z9rp5dk2SeL7P2qn/K0v+1Z/wAl/wDr 3kf5F/p/Z+1j/JH9L7P2px5Y84/py7lt/qn1f0o/U5epzr8QFKcV8cw9Z2f4EQeK7Pd+1xdXofBi Dd/B5XnUvSMl/Lz/AJSRP+MUn6s1va39z8Q6/tP+6+Iep5y7zjsVeO+bf+Uk1D/jKf1DOv0P9zH3 PU6L+6j7kpzLcp2KuxV2KvVvIP8AyjFv/ryf8TOcr2p/fn4fc812l/fH4MizXuC8w/Mf/lIV/wCY dP8AiTZ03ZH9z8Xoey/7r4sWzaOydirsVdir2Lzb/wAo3qH/ABiP6xnIaH++j73ltF/ex97x3Ove pZx+V/8Af6h/qRfrbNJ21yj8XT9r8o/FAfmP/wApCv8AzDp/xJsv7I/ufi3dl/3XxYtm0dk7FXYq zH8sv+Otdf8AMP8A8brmo7Z/ux7/ANDqu1voHvZb/gzyx/ywJ/wT/wDNWan+Uc/877nWfns385EW HlzRLC4FxaWqxTAFQ4LHY9epOV5dXlyCpGwwyarJMVI2EyzGcd2KpVdeVfL91cPcXFmsk0h5O5Zx U/Qcyoa3LEUJbByYazLEUDspf4M8sf8ALAn/AAT/APNWT/lHP/O+5l+ezfznf4M8sf8ALAn/AAT/ APNWP8o5/wCd9y/ns3853+DPLH/LAn/BP/zVj/KOf+d9y/ns3853+DPLH/LAn/BP/wA1Y/yjn/nf cv57N/OTOxsbSxt1trSMRQKSVQEmlTU9a5jZMspnikbLj5Mkpm5Gyr5WwS7UPLujahP695arNMFC 8yWGw6DYjxzIxavJjFRNBvx6nJAVE0EN/gzyx/ywJ/wT/wDNWW/yjn/nfc2fns3853+DPLH/ACwJ /wAE/wDzVj/KOf8Anfcv57N/Od/gzyx/ywJ/wT/81Y/yjn/nfcv57N/Od/gzyx/ywJ/wT/8ANWP8 o5/533L+ezfzk1urWC6t3t7hPUhkHF0NRUfRmJCZibHMONCZibHNKv8ABnlj/lgT/gn/AOasy/5R z/zvucn89m/nIzTdE0rTWkaxtxCZQA5BY1p06k+OU5tTkyVxG6asuonk+o2s1Dy7o2oT+veWqzTB QvMlhsOg2I8cOLV5MYqJoJx6nJAVE0EN/gzyx/ywJ/wT/wDNWW/yjn/nfc2fns3853+DPLH/ACwJ /wAE/wDzVj/KOf8Anfcv57N/Od/gzyx/ywJ/wT/81Y/yjn/nfcv57N/ORenaBpGmytLZWwhkdeLM CxqK1puT4ZVl1WTIKkba8upnkFSNo/MdodirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqV f4gh/wB9N94zK/Knvcn8se9Xs9WjuZhEsZUkE1JHbIZMBiLthPCYi1S+1BLThyQtzrSntT+uRxYj Njjx8SE/xBD/AL6b7xlv5U97b+WPemNtOJ4ElA4h+x+dMx5x4TTRONGlTIsXYq7FXYq7FXYqp3M4 ggeUjkE7D50yUI8RplCNmku/xBD/AL6b7xmR+VPe3/lj3u/xBD/vpvvGP5U96/lj3u/xBD/vpvvG P5U96/lj3u/xBD/vpvvGP5U96/lj3pjcTCGF5SKhBUgZjwjZpojGzSXf4gh/3033jMj8qe9v/LHv RVjqKXZcKhXhStffKsuIwa8mLhWXmqx2s3pMhY0BqCO+Sx4DIWnHhMhah/iCH/fTfeMn+VPez/LH vTRG5IrfzAH78xiKcchvAh2KsPzbu1R+if73D/VbKNT9LRqPpRPmH/j3/wBn/wAa5XpOrXpuqT5l uWybS/8AeCH5H9ZzW5/rLr831FFZU1OxV2KuxV2KuxVC6p/vBN8h+sZbg+sNuH6gxnNk7B2KuxV2 Ksn1L/eGb/VzWYfqDrsX1BjGbN2Kb+X/ALc3yX+OYmq5BxdT0Udc/wB7R/qD9Zyem+llp/pS7Mhy GWw/3Mf+qP1ZqZcy6uXNfgQ7FWH5t3ao/RP97h/qtlGp+lo1H0onzD/x7/7P/jXK9J1a9N1SfMty 2TaX/vBD8j+s5rc/1l1+b6iisqanYql+sXU9vHG0LcSxIOwPb3BzI08BIm2/BASO6V/pfUf9+/8A Cr/TMnwIdzkeBDuTrTJ5ZrNZJW5OSamgHQ+2YeaIjKg4mWIEqCUz6rfrPIqy0VWIA4r0B+WZccEC Bs5UcMSOTre9urqZLeeTlFIaOtFFR16gYyxxiLA3WWOMRY5pn+hrD+Q/8EcxvzE3H8eTv0NYfyH/ AII4/mJr48kn1O3igujHEKLQGla9cy8MzKNlysUjKNlCZa2suliSWNo3FVYUIzUxkQbDqwaNoT9D WH8h/wCCOXfmJtvjyVrayt7YsYlILUrUk9Pnlc8hlzYTyGXNJ9c/3tH+oP1nMzTfS5Wn+lLsyHIZ bD/cx/6o/VmplzLq5c1+BDsVYfm3dqj9E/3uH+q2Uan6WjUfSifMP/Hv/s/+Ncr0nVr03VJ8y3LZ Npf+8EPyP6zmtz/WXX5vqKKypqdiqVeYP7mL/WP6sytLzLk6bmUkzNcxkejf7wJ82/Xmv1H1uBn+ pIbn/emX/Xb9eZ0PpDmw5BU04gXsJJoA25ORy/SWOX6SyT1of9+L94zW8J7nX8Jd60P+/F+8Y8J7 l4SkGssrXpKkEcRuN82GnHpc3APSgcub2UagzLZTFSQQuxGxzWYh6g63F9QY59Zuf9+v/wAEc2PB HudhwDud9Zuf9+v/AMEceCPcvAO5Y7u5q7Fj4k1yQACQKW4pVBc3AFBK9P8AWOR4B3MeAdyM0qed r+JWkZlPKoJJH2TlWeIEDs1ZogRLIM17gsA/T2kf8tK/c39M3/5XJ3O7/Lz7k08uarp9zqaxQTB5 CjHiAeg+YzF1eCcYWQ42qwyjCyEZ5rv7S0+q/WJBHz9TjWu9ONenzynQ4pTuh3NWjxyldBj/AOnt I/5aV+5v6ZsPyuTuc78vPuZjok8U+l28sTc42B4sO/xEZp9TExyEF1WoiRMgo7KGl2KpH5qvbW1t 4GuJBGGchSa7mntmboscpE0HM0eOUiaY5+ntI/5aV+5v6ZsvyuTuc/8ALz7mW+XriG40uOWFw8ZL AMPZiO+anVwMchBdZqYmMyCxi81vSkvJ0a4UMsjhhQ7EMfbNnj02QxG3R2ENPMxG3RR/T2kf8tK/ c39Mn+VydzP8vPud+ntI/wCWlfub+mP5XJ3L+Xn3O/T2kf8ALSv3N/TH8rk7l/Lz7nfp7SP+Wlfu b+mP5XJ3L+Xn3O/T2kf8tK/c39MfyuTuX8vPuZnrE0cOmXEsrcY0SrN4DNNp4kzADqcESZgBhn6e 0j/lpX7m/pm5/K5O5235efci9Pni1Eutk3rmMAuFB2r0608MpyxOP6trassTD6tll9e2thP6F5II ZSobgwNaHodvlksWOWQXEWE48ZmLjuEP+ntI/wCWlfub+mWflcnc2fl59ybpYXjorpExVgCp8Qdx mIcsQatxTkiOqL0yyu4r6N5ImVByqT7qRlObJExIBasuSJiQCnuYLhvB87p7Nkv5ef8AKSJ/xik/ Vmt7W/ufiHX9p/3XxCb/AJpf9Kz/AJ7/APMvMTsX+P4fpcXsj+L4fpYHm9d09e8mf8oxYf6jf8Tb OS7R/v5fjo8vrv76SdZhOI7FWF/mf/vBZf8AGVv+I5uuxvrl7nbdk/VL3PO86B3r1byD/wAoxb/6 8n/EznK9qf35+H3PNdpf3x+DGr/8vtenv7mdGg4Syu61c1ozEivw5s8XauKMADewdhj7SxxiAb2C H/5Vx5h/mt/+Db/mnJ/yvh82f8qYvN3/ACrjzD/Nb/8ABt/zTj/K+HzX+VMXm7/lXHmH+a3/AODb /mnH+V8Pmv8AKmLzSPV9JutKvDaXRUyhQx4EkUbpuQMzsGeOWPFHk5uHNHJHiHJBZc2vYvNv/KN6 h/xiP6xnIaH++j73ltF/ex97x3OvepZx+V/9/qH+pF+ts0nbXKPxdP2vyj8UB+Y//KQr/wAw6f8A Emy/sj+5+Ld2X/dfFi2bR2T3HT/94Lb/AIxJ/wARGcTl+s+94/J9R96vlbB2KvB87p7Nkv5ef8pI n/GKT9Wa3tb+5+Idf2n/AHXxCb/ml/0rP+e//MvMTsX+P4fpcXsj+L4fpYHm9d09e8mf8oxYf6jf 8TbOS7R/v5fjo8vrv76SdZhOI7FWF/mf/vBZf8ZW/wCI5uuxvrl7nbdk/VL3PO86B3r1byD/AMox b/68n/EznK9qf35+H3PNdpf3x+DIs17guxV2KuxV5Z+Yf/KSP/xij/VnUdk/3PxL0fZn918SxrNk 7B7F5t/5RvUP+MR/WM5DQ/30fe8tov72PveO5171LOPyv/v9Q/1Iv1tmk7a5R+Lp+1+UfigPzH/5 SFf+YdP+JNl/ZH9z8W7sv+6+LFs2jsnuOn/7wW3/ABiT/iIzicv1n3vH5PqPvV8rYOxV4PndPZsl /Lz/AJSRP+MUn6s1va39z8Q6/tP+6+IZ/rnlvT9a9D64ZB9X5cPTYL9ula1B/lzQ6bWTw3w1u6XT 6qWK+HqlX/KuPL381x/wa/8ANOZX8r5vJyf5Uy+THL3zPq2hXc2kWDp9Us3KQ+ooZqH4tzt3ObHH oseeIyT+qTnY9JDNETl9UlD/AJWH5k/ni/5FjJ/yTh8/mz/kzF5/N3/Kw/Mn88X/ACLGP8k4fP5r /JmLz+aX6z5m1TV4o47xkKxMWTivHcimZGn0cMRJj1b8GkhiJMeqVZlOS9W8g/8AKMW/+vJ/xM5y van9+fh9zzXaX98fgyLNe4LCfOPmzV9K1YWtoyCIxK9GQMakkHf6M3XZ+hx5cfFLnbt9Do8eSFy5 2kX/ACsPzJ/PF/yLGZ38k4fP5uZ/JmLz+bv+Vh+ZP54v+RYx/knD5/Nf5MxefzSXVdVu9Uuzd3ZU zFQpKjiKL02zNwYI4o8MeTl4cMcceGPJCZa2vYvNv/KN6h/xiP6xnIaH++j73ltF/ex97x3OvepZ x+V/9/qH+pF+ts0nbXKPxdP2vyj8UB+Y/wDykK/8w6f8SbL+yP7n4t3Zf918WLZtHZMji8/+YYok jV4uKKFX92OgFBmul2XhJvf5uAezcRN7rv8AlYfmT+eL/kWMH8k4fP5o/kzF5/NkXkrzRqur388F 4yGOOLmvFQpryA/jmv7R0WPFAGPe4Ov0kMUQY97zjOid8yX8vP8AlJE/4xSfqzW9rf3PxDr+0/7r 4h6nnLvOOxV475t/5STUP+Mp/UM6/Q/3Mfc9Tov7qPuSnMtynYq7FXYq9W8g/wDKMW/+vJ/xM5yv an9+fh9zzXaX98fgyLNe4LzD8x/+UhX/AJh0/wCJNnTdkf3Pxeh7L/uvixbNo7J2KuxV2KvYvNv/ ACjeof8AGI/rGchof76PveW0X97H3vHc696lnH5X/wB/qH+pF+ts0nbXKPxdP2vyj8UB+Y//ACkK /wDMOn/Emy/sj+5+Ld2X/dfFi2bR2TsVdirMfyy/4611/wAw/wDxuuajtn+7Hv8A0Oq7W+ge9//Z + + + + uuid:eaeb02ed-34a2-4367-87dc-ffab6ee97523 + xmp.did:1e4ab4ed-b8c8-e047-8c52-16c966090be3 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:b2c80867-177f-d845-8d40-b6de0240b885 + xmp.did:b2c80867-177f-d845-8d40-b6de0240b885 + uuid:5D20892493BFDB11914A8590D31508C8 + default + + + + + saved + xmp.iid:b2c80867-177f-d845-8d40-b6de0240b885 + 2023-06-30T07:20:20-03:00 + Adobe Illustrator 26.0 (Windows) + / + + + saved + xmp.iid:1e4ab4ed-b8c8-e047-8c52-16c966090be3 + 2023-06-30T07:30:04-03:00 + Adobe Illustrator 26.0 (Windows) + / + + + + Print + AIRobin + Document + False + True + 1 + + 448.000000 + 160.000000 + Pixels + + + + Cyan + Magenta + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + brand + PROCESS + 100.000000 + RGB + 227 + 115 + 255 + + + + + + + Adobe PDF library 16.03 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 160.0 160.0]/Type/Page>> endobj 26 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 448.0 160.0]/Type/Page>> endobj 31 0 obj <>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/TrimBox[0.0 0.0 448.0 160.0]/Type/Page>> endobj 38 0 obj <>stream +HTj0 zǒdmݭ7-l[{?(|9ǒe+3Cfl3c)%%o=>}1m2q"nt@HM22Kaf!o^Nk@Wqqk ܠ V[~X\KW8TSAˡ1R`q +K %FѺ6egY_~8BRY +endstream endobj 39 0 obj <> endobj 41 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0.89 0.451 1 scn +/GS0 gs +352 160 -32 -32 re +224 160 m +224 128 l +272 128 l +272 96 l +224 96 l +224 128 l +192 128 l +192 80 l +304 80 l +304 160 l +h +0 80 32 80 re +144 80 32 48 re +48 80 32 80 re +432 112 m +432 80 l +320 80 l +320 112 l +368 112 l +368 160 l +400 160 l +400 112 l +h +f + +endstream endobj 43 0 obj <> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 44 0 R] endobj 44 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream endobj 27 0 obj <> endobj 28 0 obj <> endobj 29 0 obj <> endobj 49 0 obj [/View/Design] endobj 50 0 obj <>>> endobj 47 0 obj [/View/Design] endobj 48 0 obj <>>> endobj 45 0 obj [/View/Design] endobj 46 0 obj <>>> endobj 40 0 obj <> endobj 8 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 24.0 +%%AI8_CreatorVersion: 26.0.3 +%%For: (Lucas Colombo) () +%%Title: (logos.ai) +%%CreationDate: 6/30/2023 7:30 AM +%%Canvassize: 16383 +%%BoundingBox: 0 -608 448 0 +%%HiResBoundingBox: 0 -608 448 0 +%%DocumentProcessColors: Cyan Magenta +%AI5_FileFormat 14.0 +%AI12_BuildNumber: 778 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%%+ 0.890196084976196 0.450980395078659 1 (brand) +%AI3_Cropmarks: 0.000000000000909 -384 448 -224 +%AI3_TemplateBox: 256.5 -256.5 256.5 -256.5 +%AI3_TileBox: -172 -610 620 2 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI24_LargeCanvasScale: 1 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 3 +%AI17_Begin_Content_if_version_gt:24 4 +%AI10_OpenToVie: -1280.4 517.2 0.555555555555556 0 8014.5 8246.7 1519 906 18 0 0 46 121 1 1 0 1 1 0 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -1280.4 517.2 0.555555555555556 1519 906 18 0 0 46 121 1 1 0 1 1 0 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 777 +%AI17_Begin_Content_if_version_gt:24 4 +%AI17_Alternate_Content +%AI17_End_Versioned_Content +%%PageOrigin:-50 -652 +%AI7_GridSettings: 32 4 32 4 1 0 0.419607847929001 0.490196079015732 0.619607865810394 0.709803938865662 0.745098054409027 0.80980396270752 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 20 0 obj <>stream +%AI24_ZStandard_Data(/Xܠ>xq ,Pd2zh(lRowa"{saggǯNZ Q !!- qm3X+8p8 + LA * +B *T@b (Tp P`8Ppq@2y"$ D@@4 A d ͕Xs.ywD^x*"eAi*m9HK*vIbaǰ6Sp6sJOR/&|,(:_-SPa"BH +]Zwm~ qL9^Q]q a0G ф 7 đ@qXj8(q +;Rd"i8~9 AIP$H,eґ!تL_xE1[ 9ﲻe"ːp0 +A48va8 (S aCUaXA +UXR`YHƝ'qP—]S6"Y}={9#2C+˳KʲZrvW +mt4ޝ8eiq$Cep0L@$ ca7 +Mq0UJ$ ppUMH<3 _Ž4QFpPA@whׇ#˂wvfdNLW W;eQ]q|TeHM^Y}O<=YՏ3nCSFCp"H+0V&1ʧ驛BF*;;F '~$yM aEF DbAW Yp+ @{J97 UU{QK`rU"oh|oҜIhˈӽMVSgCI[(bX$SkU;7ݟvV[f+K,]-=mjz3_s3Jt, #0au$ #aJ` `XXwqa]'&PY7a8pFp>m& 2Qg#ߨ"{́I"l8$@O2d PIeIXv7]9'{ շj8‹ + q φCy# hG0lśEp0rqC 2 +@U%@?l\XFFa88ag#%ptWxbeyHĬ7wEi 0C La8P~$Qᐆo8  ! p8 |0ㆃQHP0 đ a` :!s L8a,+bEEpj333xcWV- aCiRXpf-P8f$zH.&-2a88(aqHEyXg)(V" e q !Ρˌ64cde8V8X ^26)C>wX_Lj~*]`ٝM pmKK`*EY1=3P,GH8l DD!8p8Z*LqR!JbpCX(G8D "Q c +ca$ay|#T(7`8 C0m8h8h +\PVȅ`p0pFb0.pfs)rD$"+' `)9R Hh+UJ( :.qs( +ā@  1 đP ` +Ha80 @$ІÍb1N`( +DbTa;aV,fáEp4#Dm8,CX(fAZta"@ ~3hn8WjHp4D"q-DOg0Zsٕ 7eԳhhÓE3*Cʾ22uݧDv9^ T5r۟C=QYqʬL\rl8,<; : BԈ'0|(IP K\8"q$ EbE)8*PBE-lqC# *4A %hA ,BTNmWl6k8بQD=]tffhii6 aĢg8 }?CK\) x`0(++-t>T|F6Nxas:j8787p,f GFdf.H  -CZU+>xtūtQ(P3, *CLYX>t/̜wn;zA @@aD" DEX +#a06@ 3jA+qč>n + Fmgs]&DH#LKf%hјX- E )f1 +p$x 4T3C335ǘcQ`2 MQ\/RԢ뾈Utvf3,a +[]gp\7XhxD +|"2$a^cGqpHfeH!2!ːjy=9xbz +p s $X@ H$A  "8p .L0499,herhL!UXXA*TBDF\ + +0pTb"2 +DXxPG&,&DNĂ@@ ,eƒ DPBPx` D~{ǟ2O7.C +$H 6! 0 4 "P 2``A h`u&Bd. a"D.+:K4Ҋ7d2K~v[]9,Mv,Y#WЍh-TN,+y% Ӷ,fF\_ێ}W, +Z;e)dD]xxM9g4CD;͜%d)ѽMHhɣ:RGyr%TgcǥnҲ\Z=F.K,~fLb>r4UwfĄ@!,'>dqZ|O.E_٬If'Fuc<=D$pjiXYYbsY.QbUvlS*6DЇxFZ~o5ɰԳ{~}t'oUS+,F.U~*CtKP m.ul:Vl^O5bbEt^ѷ_RO]eRsFd.7v,7#[/eF^moǢzoK67|Ҹt-vym<;3T:[tx+_KKf8k>FXh5CUkGg|DdVci>XiR.;KXM*̓d!^[fʘ$o/)Nb7oMN$81VPm %m]u_Rb.'J\'^2IӻHSYrHpet!Yأ:dwltDx_ Ʃ e!=fXU hdڐ=.Fo)$9UFieLHs-Fj;ycWsU؎)sΤhs>tV6,*;,#l)P4x%sR!W}#8Hſ5E*_V袼bvSf/'[4hV9[efXNbvDf)WKNIC{^fv[]~kX<%RK3*K4ؗ7+.ɧ4"B<&"4V9"tX6vZA>iCcѥGyy-3>+:wK&%,Xnz~-^ϦxoM[ՕH_ ,)c{JtquNFzX{W miU[޽t*D<_^FN 0GUFJdzT<m>1dvkuvɫI$OWH0:"LY#b]xF$Km Bv@iDx57U٘JZ:lͯj]xm Kssߓ|XΡK!$*OkWM\iM讙VBw'Y~iU}d+E"R:kZI_fӭ\KFL>%KSzަPkRHfWP)sJZM+PHχ+ɱ;߭8F=1~7W=k1,IfGAg) g,k~\3 Vu=Ve M^ ]T%/۞?y +[vG$ ]iWJzz߫+vtS4U#WDʭ854񦥰Ħ9sͧHŲ6ˈ,ݜڍW3N3J^x8fI%O]b\EW6 e{ռ\(K4Yxa9]Bn )fD̎iS0KLVƈd2/A,T"5x31b"3yd#1~Wؼ;^Tt{ҪPaLNhUuQ j^/6VB|^R,!fSs'Δ%Dnꞻ:/T#FdY\9r2r;Hb}tC 32ZNhqli;"#lt6!/&J*,Ki$XFy)Ж6Y?´WW3ɜ7VW3eA,TLf~3'9+c剋`z줻Bi6ZXo)UT;CՇcOfT3]*-D9YdS3k5N.$jmZОfͥӬ9o,c*J/l3y3v ]1u&uI3eGMG5?#/+-1Ȏ4&gWlF{YˇvԺZƪ9Dz4/nCNJ|4oBЈ5uJqV3ѵ +}ClKbJ6dWhYrdÒeױ:Syc J5Mӫwgn욖ϔ4am|h솪>DO)T:4yf*$NXrY35$9靆~׶ԑD%&ʒ^'d`[leź"\*|j ++6Bf38,ye]XsDs,3KrëBկ%3Hx6dlHz&2*IxjswP܋ngt;6 +҉Gf]ղ +sdw#~5ػQn"˒d̈:S#T\7X+խĶ˙/6F&uׇyx + J~Jf2*"&+*R}3f"**zۣYѝ+ST8O 2UeUDΞ4]]q֡XeDOM o&[VW[G3]3SRD2leޙNggJ"E띈NRW瘫^K6xGv'i]tHs֧cYg1nn:wGvfiяv&d(zCΓQ/nrW$,25ӞtH|dۓ"rk$3B$*mȍsgXp+|唚U/Z7?UTS5f8D}4ôA,&ͼtTvU%9MU}7w{Qϻ[[)Jӓs!krDryB?ys򓟢u,,dlXGWHzJfՖJTv%3bA$xh7YLg+&)"" +$\xp2 (`RAUe]{^'$b6=)dO;<+kxo%^ZW?/_wN+jqND-se|i좕BZ\At=TGnC'K{/˭ZgB;ٍ +R,l6xi"IQjQl&NW.w"#e{Hϟrx.DUwzq %}p<-،t7ht!-~5h"0iN$RFءݝQaVISVyp0iW<{8MwNߠv7g3w%BI䥹Ȫ{Xz9$R)눥}/QSs䗟 I|k/I۫J̜I=u!w'&ݿusVU;%M8Ytv⤧lJωoJNʅ/)Y<"IJ4rF*9uD:2v⑏1K ]n?ەBrgx<Ҿ{|Q3hwG|meUSy]ޤ' Y9CKbDzJ|[Qk#whR;ZpNe]Y+nh3v/2굜4K+O2rwJl 6-d [Qq۲ܛwUm.[g䲭TfuZt"{Z6l6&=J뭰Uz8Xդr]-C՛[ֲyV":]!dލ>xj-XgמVϓJVKyybly +甝?{U[h5L Eۣesr5vNɭ;s|z]6y%U旽Tssͭg-̚{5VǚD-5ۖ^k֢g4_fϊ㢟^sjL{cδXN;i"k|hn& ?ªX#=뼝ZtVT'jNjJk̺fn+gg+n-:%YZ;˺ϥÏ*J, J+ZUcmY̬G˾\O+Ou4=fUº^Wx;rzr.vn8HdMU{ò~~=5eo^";謟Y?Wf\5+fV}W$!M.{2t}]"[ϔutUi_zHι^׹^r\ޭ]9j%2ê+]jO*U^u*2<+~_+n!##VCa o| +c +ޝNW, 򛬂%Z'&LzMD9 0ZA2+W0i2XY3%*ϊU^Q V1ϫ/BĹSbUsE*;G,>3jv˴aKFb3WLf}R2Fev'ΚСo)2i䨔nl.8O=]7RnwB}YƖibCvI\dU,%CWi,˼ApvMLMV#2W]֔Xy;*KjAduⵚmNbI*~"3ʹB'5ص՛褼ްǤ2͌_iNB:Z9ճSjZ&G,I7;yef4T"mj +/6Jr`&0냃h%ě)WsA]朽pE<Y>S9?F#zY)ڡK>M,ݲ7t m;YݣQ!l,ݽ3t5lCIM&ˮϙ|KhxDtv~~XG团y=̱?|WadUD5?O6f{?h$ {sĺIU]%44{ĿW<kŨ}HHgE>S,|\Ff }[3[7ْ=vnB;?d$tt&N Zn:X5]#7[yG`I7-gD,˩kw=|fC%ߐbIvy*u=-k㜴i<+|5^ݽwqiKm[oҨnuB:"էj:Mܲ2wc[stIyVWL<2X;xRi18F3)h^wtCK[*6Ot%ser}䣡I+QJ#4|S3|觻ZCE&fY!1nTB N!=wIs˖r.1%dV?:2[a=fbV[|6 %݆+WДnCxJhuC~G\d<ʣ3b/kYrPo.釞Gϙd䣺_"NbGeE^nN hgg7ɼr,^o4CcN?/el*98f1iVv*Ƽ#gͭ;V9HȗBGuh; +jkr5Y;}G(}inV^g[ݔ4BfvjY"_frtV>tfr=='b:(km``mv={! V |јLk LOJ!jFF#084DBaќ> +ɒBX$ 2$HPǂ J~n'eyZͲ(# *J,*P 9'в^l1: R5ˢݛ/̲Jn$,KpEejdIiWE de44mͲHB8dY]gW+6Y9 .3abY9cqU'1cYy%S˰j|.7b.ˁey%., @,kMˁ2B`ħ,i8pA˲鍂nW79wBmŖ2DEeq>'*afN,ι*겙b.eY;G,LkVey,?"FejAh.NdKLP,כdKBWBЬjoYgq?6UD-:@ז-FDdٷ,,{q˶,`nlB4F'^Dd_@ಢ8pYGȡQC>DRsY%Ie@]'|+ݘM$n调Ry. qh]׷c&$ƚ(DnD(ba pYefuԀL!1>,2h~ɂY;RChEpaA,V6҂FiRdpGDxv1~FyiI_SxD`R)+W?0kŠ2JB%#d̄YF~H6tֹ#$,LDeмڐJW)X0q)xj2'i/WeZqƕJ֘Y/t5V{$85~`p2 8(4]eV$f}kB1ode| 22Qs` kL,*"^f=ܗD2?YҺ*NAq'̪[t1K$KPP ,` eZf)G-:B]@. zLYL3{*@ưү*22) +;3}YNb:ck'&љTf]}=HtYϘL_ 3+0}%EϚXϬ֌&P 8AFa/S5d1:}3+ܒ}OVt("e`3 +w`gV Zcq+!Yfu&hV F.i_'V=uѬl- ͺ;pfș-f2gcY#M~Nב$joPàQX{H*-*B,,u0?[1~= ttP9$nh*ϬYh֓>sG5)fDͪPp3{q#wDYLr犚MB[ODVPE&[&ֵU'r+GM^Ydf9ʈ&YjV¥ڋ8WĥMHU\4լjFD]"q ݅YYtA;V8s k֭/šYdMƑ4Yq#, +75~7x jȱJŸ1?=FͲE֚w ĥ"b `fqI%eU앚ULq?ʱe.NU8᠔zgS0?;Q^JwutZ_sլ %Ze%kֻ1m?`ԭCg%˛I~vBfpY5GhfTN>lk^Rk B=l]5vV"H>uLŢ̚ؽZeu@Y!^#$5녠f^lM%Qe߫YVeuՒx6hԾrrejBQV*#t%'s0TB~FMWű7XZY! ֬Lbg5˘ƒUif_dp|f=(,SlM*լ⸝jd^pi^D}N:]<R]!fP 8D<j/jyqGE;xY1Az?dQto*{{ P,z!v\7k +{U:]#ADTUE5fŞ/|B:xo}f;XyJYt/iI%yTNW0Y¤z(08 KY?e @U(,`A)Xkͪ5Y_Nڽ_an֑Au8Z9Y n|2UAw D7|;  + VYgiWd5=wZ~PY@hÒ$O3e!KNbb0EQ7yU{L,oM۬yڬc6p0czE?Jɕ։˪Wܽgi* J!1͢'feq,pmVpuY!D"V:t2Bf%Nhugard[z/?eY9lh/#m='_dN"$O B, +icgd8 +M]{vc/%Y=kVd͂ 9q9'LX2Jt 'xx5+jޖ5$c5{3`O|_L`ceeͺ6fՈdC څә9;*x٬R*2 Nf`Cf}#/d?KXEuGLf5jP^LI*(Ί&AI6k=V5CKYGج17iD$/V6E:ކ:R }` ]8pȰ,؟UƖ> uY~p/ý0gqIf 5m.f]vhdTf]{x fax&5`KL.6l0>ȸ:>mV3GlsMemۼ8>mmѐ:H RI-Ƽt ;F^\m2fqǢ93b(z>1­bQwAk^N#4Ί Hiٔ5Ye2W)zD M8rfUdPf|K5 ]bbZp/rӢ!-qSd֒Qd6fO\Yr[422X!PdVh5! -hVqYސ;PЗof +zm{(ѦQBE,8@hVHZS^u-xRTEf;1,܋6hĢ&v,Tҹ,VB]Z?ͪ0~'OwёunO"5E90\h _ЬGAW@/1vYQHe-)pe4+DΖލ.ij/0H .,2@]0A peOo=M8ꑆPv (0Z0I0A%`@J .C>"4W*fQth %k8bpi)f%$ T&Xŧ7NO1Hr:c')- 6C^ L1"إܹɽM_̙O@1;Kw`'h tZNI(Q14B9c5k'8-km,~Ojj^f:6 MQsH`V,ډpe]ZS|p\ímANU1d|&|/k }bW5t.Tӌuzņ +vBXd~, <)ڀ6nMqm 2MLdPwBS_iH2/6ż#3~ +;Ś Q)KSClP5T{h  BA{39֊}nu;艹XYF\3 S}M&@ jA6=r 2K0o0knA&DENj:o #D,8'ffQ$:<$ـF4wbJ)Cbj.Ffc( +%5zQMnuk?/:-Uu0(7 Vс*moO <_X?v>T@Ʈe%xE ZY2yyEa۲s '5Rriu䄤~x\-»GEUY[S+Q[JђҼJً͹aüb=`o0/-@`qA%x`*,rc'ao7 rM3On'$D-gZZ`mBձnM蟵F?alI5)$Hw|p4Pp@!dfw"ttVk3OaE(!',#sͦ4q1HHHD7<k)[Hib5=.R~R-D/[ +4ۣ/2كఝ3(Jj&굌}=EMK_['L[3h̪FV}`B^&E2mP.#um%}%_'7">e'6v3xIE`ՀTXp ffT^]^E%*ANZ ST"6memzo HD@&NQtDx2Yw9aH&pc՜}XsN%gǯ+ |ZOeMW'0>hWAj U) +o x/`I٤e ^=YU苔6N*D"mpt8Ñ$d˷RU`'$g +i#5 +yjeTr8()[ZzMffFK i擡, EBdĔ +G$ZgCUllU lr4]=dBi +t F~{9FBy!Md1UѱV0^!  `+k;i2lp!.NއO.p"$b y*-Vrk}ͳZN%h''J:ိEUTLb[ X]\ -#Х-NC6Iq!F%1J/x#.SDH}@0 96C,?υ0'QHyOFr>,YasעF4g<"C\rũwfIW ʐdbJWОH0vpCБgx<}:ҩ\yvw9P!`:d;fmbmu9"}>0^/5!!1,GS!_%{kc[wc`;;v[I_^/8k*cv6EYJLQk͚ئ'ncw X'DY)8ۼ擨@9s BJcwn.K|$ɯ&8SB(@Ap,_D+[.X1pCYŋ@k>_)S11rށgT(WK\B 5dMdp9d?yGhVH'eaiu;`d#x%amND֓g*1 40zDΘQ4YF__x 0Cj^4yutѴ5UQ~QH]~@_\# +lE+Do~,73)&dWCY¤nsEbq('[rWaX yAigq7E4KͶ_ya~ywr$$*jJI!cxĿn-s ϟNX42o;lgIѲؘMvҩK'9Rni%B0,.*оDžWf%]ix/$VN2Or]^߬>5wArepahT J vpJ.jg +1w{#C5lpe(Ӡ~OڕI{\cT_N@f*AG,y"vEީLߙRX{mRG\yAI\.;`X07jȚP(\|qzx/"l) + .eA u_g'cOq;(f +oQ9_Y|rS}< +U/(-2ⴈtQ%Ba8pbpV?}J-:q6 +(i8Uh.jAtQQti4biA[pv] ~ &}1Tgȅ1T>X,ov85ʩLX_qUK4˛ڤBy^ykX7UX 7!BOo;r9$&h*!`0K=QVG1Y5 +o"Jò)FH3mc;܋4=:'΍F+L.=.w 6Ô617N~aY"l77'vx2&PgP4k"~ b-"g°^ gڜVJVv 9 =5> G@ e]D/6\ j9/Pw޻DT ͎`D*,r 㵈]V@{-eP \ -LIv> +buPvc (N_tсWq)Bb42 |Apؕt5qY1>amR\0_ܰW̘ 2b3@Ë3uEhagE#AɿE%GVsOk0ӹ}fέϒQc72W & +f[SSq\έhr+uؑDUi-j( 1I:LVrM*S5O,nIjmQZWG@G ! txT qe z ++N_@cRZım[Rr\  /eS!f]th +LE9i;I+끐(]RI7mg:ҿۛP92Nl<.+ϸ/UfXɜ1OȖ z輽֜7#jBl\:aHeXM$_W'g!p% &O'ٛ~>30@<%W7{KV_tD͖D.7ʕ)1Fഭǒa (?2.e n5z&hH|^1?џd)#@ lI n"}-oRHp[SG\T"})mp]Rd2zƒL1Jg4644\6w8~`⨪[ru?AHRn`EBOHG.#dCf`CL h `Xc3t"RN`i-$~g13eP{DV ctPEMo:H۵d3K94l6&CEKj5zԗjGw@_Zi vpƒÕ{ͺڍR qT/dז3_Z[UƘ֏:b03"y1դN!BkTqNtD+ t[EaPh @L *ѐyRp"}Kujp64sTuudUсЦ!YdD]n߇0\3(t5"Po91q=\b]Mfdyhv +M+WCs:-V]@_tǫ@xSf{Il&3vF/!F"SJyM:U^Ldž*)s I`̑ ­dy3@OAo1wLP%$; #c1hky 2YboQx`kϡ[ +ՈŜ"?X,:ܷ\nz}u W%$圪<^Q Ю!0C9HTdPOo|SU@"F<6>|m1#l>Z*"ek|'RǽflL;});TRϵ,b/(pbZ3?׭2`[AjcfH4$F˜Ąw]V1wq$_qyAS:'%:*1Y +\ Jpy >.(om;mm +2@a[n:z b%H[:NK@i͔ ~w{ lRA_,F`!,X)<]vY&:K С #T%+@ϽB,$bsd E)YlQ!ve>O#w`d!S`?5ٮ_ 6D_+6D^a7گ\UP" &NXAӔ +arZZ0+{á݌H]6%S5h*5)YHg)eh-WCV>鱒MQvE2!T*H *A<mj2#>^].^vN>enSD`Ј42fzvtR3Kgl +4C~6#>Ă۲ +QhiC)*g%~/ӼZLt?< cf8O *?a@wT\~jvGORpL8\Y5da~BFh>;˵BndN١aҍ*\c'E O|LJLt + L>NQ&؟BK:I + ^3TmĢo)WlkɈorpYQ;,dMcU +IS8obSOjA5^TeP;[ew]fKBϝ">7en?1`P;"g>PpUj&x^z W:zZNn 2$HˣԒ]$ ΟR"ue eV X  md*.BȕNhD4}8#Z +ȰB"ȩ6e_ld8oOHvȝeRGe+k5,̘H=r6 s + 0.z%2ބwx ư˟>d ,Wq=CSv]Mwr|`dG]߼sN$Ar3aY=}29aFŃv7yX4mхst;~U\Z' ;- ϷijB'CM8UI".(WCDG^l<*.|Guuul=[qSO!݋/v^jOXPDIG)K0Ft-ARƗ֐$:x{(>j?{Ӵ49פzAZ KjiA+,t5]*0gocAX{,H;Xpu8H+NrRB*g@*2߱%5ҕcYDuJ`$!H:V5felւ\gz#O 輨c\Q)~MAU#Z"#;tN{9 Gː.FH\x(0pBxB%+8Z/WBubFx=R7ʥ'Tݦ['_h@^vL3`>T~Wp9vpvc簥;wrF]MT׵iZ o+h2;э#*uD}#-C,DUd3/@ˠ?L6{0Nmfa3i^fe/2ErEHJ3[ { ^M@\F߁+ʰEGc4ei3sx\ +<=Cvt_KQsW)4O_أn2,!v],f?c + )ug@;ͨV yuWו\?7G*ȼ?sfx*WLծ7\m+!W^V{tj3j;{HXR.oGl]%  Kq\v8UL939>MtJmfq% >jqST+h?J$K`<1_QhK y? +ynʰgFbc'CC%Sk Jg;ualZCLb qh%xVaAØ@8V. +h2J-lWń>fNca!2k@'Z7!{;cY8&+Ȣ574CK{*2MF5," ;U 7\;z%tx8]Uv[B}aC\o}=5LhbWEՅuY7ჰR6A嗋O4MG0IDӁd̆7D0wAͿH_B-eƂ3HX2|q6;VuX.[{vEtIT`ʍd܈?qv"h0 wف=Mٔ%D?Zy|},7s!z\_('Ml XmFH##DhքIrg#@Ęܷzф6R${JఞZXÞ +/Id*XΠ 5]m&p;k wMwi$eb 7A0Nē bPP;%I3A55GydIɫC\m;5A%`Xroݽ0΁o _O:#t-@gQ1'^*%M}4 +MX 8p3`>a;PZey10`P͛z!APp3n*D=ۤi}l,Ex[^} cbQ*& +&c3hGLɶi@祬emZ}עcHqЏMPNPA&@ϥIZqܛqhG*lֹHybhIY־Ӗ@uk5l831 p*wH7PۄX#ňĵ{l޳=<~]ΩI +YPq󼒲T#v l.lqE^sF9=e4s#F#7b8B)~Lܻ=ibtH@3?k_DIs_wAu\Q +ɬ-и8F縫|+]\WޤXpF8Z~0=cXT:~Dy=pp5w0TJط%q[H:o#ҲC7=Cbmcǔ +hO x 神YHSZ9x&- qء!=awԭ%ۄi`sP2ľ-˲FoBլj]xIV٘EK&_ Yк[B+*J +T^5lAB|XWAS9.wKBu,-3̀PlU45-([ xJ&14冨ӯ4{_{YyHJkk6 Lgf<z#τy $&9zLJQaF]QO^DöYȭtXʉװZAad9*7:c1Q]5 eU(TU@ 㸞P H/tQLP) +{' &:,r&f5ei'ŻKS _z`)?0N2 ّE=I+d6LP~GI%B: :y(1.YJNIԛ1ӣ<6eúrctIs)w[x9zY * ۼG:D-t=.) 8!L)M֜! +^4F.(1Na`i]J_{)<\\Ƭ$czGDv2xwV;9k c- DKJKAhU'1|I@$?C, =~ +n5'Cin{2Zbg[Wǡkp^oq:Pm=CԱӗ#H OD1VBV`!FjpΧr +R% S!R0Rɔ1K7Z*mbf▶! I¯㈫.DNMMi,cd`#˸+AE/4B52cV`#ՃCu囜(X[V`U+X^\FL>lXmm6z\RrZpnh h{qeÞȆ|q’=z?Cp&^u{4eZs b\2viZR+8j5(EyXAJ4P.T"ӷ``Z| t6r\!gWͩ{\@-sȘ0,?_f +IuYP{ +(e 6LBR]h#ȱcvlߑ62c&& 3Hbp@E3!.+{;EbqI@_+1l6t(0Ack6xnW[Gij^k Ն ȏ8Փb[ Z"&k#wd-_tn7_$۶`NL$E~mpn+lN^Rdo+%Mt[X㖐u CK30k"zQ=0 'F_<I(S:ηB6cU{TaEZ) JbG_M5%% )tٓW=}`A-XNq'#$os)p@]`5H(Pf:Q$x|Zے `z)teϒF9im%I0JwZ7LtDW0L.ODΘk~QF(Z~`@j@$VZa; vnzG̎twSVGǂSYh'-#}R+!X8A$+L%^4"O=$3buq!-YjqL32.#y)R.8+RWBu#*8Sm'(:aEzlY?sZ2Cgɑa5$s\vY|)lv~js*,tg(ީmhY]d0l5R!K211-U"mbs]Ccv|:~b 0zl =1bẐ,i-?3{T0b  +z4BV`.6o'2=+$9ɋNT+ITngbka *!)z#6-P}(. Qݐo^i7Z>>R&$5Tz /,/UmSߗ%moy-#d ca.j:- Y 8 fˆ'eYDEv`âَIˤ _ "f(+rt6%m4I(fƞJcgM|nX 0QM41l|&QE!&M ;(C &GYK:߾" QH;H.aTz +=)PX_?(as(d^|"WXnlM͉ԙ7 =8͉x-SBJ:]:Uۘ|GxFQ?rb6nrpY aB+ %{d[w6'2 -JG>ڟ׮1U| +<  m fxi)Gϑ{9 +BBk$ayc#c4az~*|>&#䡰1(ꆘ'4x .$NzN Y&uBuIx%5v ׹JU[|Hax K'KYM47K#tr=Vkl\yv} SJXC'5,:Y_`%H@mת὘XՑVj +ن'?z>㛥o/4cύ16,bW);aOkB˺z@StWe96V<7{EIG yr$Vt{d1a neh׾5B/c/Y*,66ڹpw,ZC(NqB<`0,Vcn"Y5 KٶZqY L2ZK'ƧՖ.{""Ry6!T^*6p/ a7y& À')3g?ǍMrIK<0)a"[ۙ.. ym6Sf؉t/˙rIww,^Dwi6kX2FNzҔ5gR^G6ܼш|~!!~MG2HNh?﷍OzȖ~%'py!,`khr{ ӥl:=x݋eT$I٫ \œufawލe>f^f(Tچo:j1#NOakMbzG5)N^_4ېG|\U)қp4yyiyv&c)N wYKl \]C0KUmA J2 h5f)q͂w 5u3ypJ ;(! +L24Я|ǡ>@%IոlHz=8*1\J!,%"\֮MY`i&4,\v%FI9eTm ڮKl:+PJU\-9Lj)e<HsJB7aLD8c}gn)~AaÏ9aK!-Xܒx|nަ0(!%,؎ܪi$.AfmU4/0RXػ$z$*EP!߈i ~zUw%?EX0CdaiL3ĘbX]GXƃe\X}iG lbʩHSN*MآUK:^慲E, 9D2'fh[@/>HT3AYbHYcqvxx ޲-iKm#oS6a†qe JIj@'*`JYX*(ȝN0b* w* +W|lH[! /υwb VV[HuC >hպ˜L0[:ACu@vzL +*w] Vn}/E4kQTf iONz {hnSAĞM"RrXf+╚@Ґ.3ioe HHO4nf`4XWX>&l _A\3`qV.K~,nw3d |*So<6buSQJ~֗G,2 p9ZTq>=HQ\4 F.cCGV'\v$Zt-J+]d2\ H꿽vAW>[0C(/2F +(c4zHId(W嫘*kUTPf1ʓY|r1b 4A3,3jw=X +$8MwH˛jQ_))pQ}B2#3q 1,\Jt*^Ŧ GGC=q2iO##v/DԢ_x\a/ơ@18(` ;/@3GHvSڽ5(_M܃)q-tr1Oclndhy +Ph +c-y5o9R ~=%)3) W_ c}1d>WFt@t5ʹ|үzLJp|?ikAņ_e0i"pu#V3Vwv2*Xrx>} 6\ ljGTw2x)*ArljsclP>@:BȗJ4ϝ"_p ][eI! Wg{-a}-6evXZ{P +T3>_%9@A# m'zCk耯wd,lhvyhe݂2kqN &H7T+}>U Ǻ!$QW"4V:ISccҾjCWup I}ZTҰl(,kS!(gwJ̢LӲ)1V:<0\Z4 Ij2VZ9Չ.yBPqq}-`e~(ʃOEi:P'}[q8-E}y}=-qډ&1no\3,4Ŗ #;KxNO#EHR;TO&uC)N+zDMTbI9dk3һ%@4=ڌӹq$ +Lo`}?sdyCs~E,5w>eYQWjoEZ}/W>{5Zc;z;.*!jPArZ:A սBn4WoNk&ί{?S5oTnI"#65ޜjj_=ꢽݽaUǗoɎ͓]{ '̃N;inQwnžAq G1/;P90ӌi|?YKojJ ս6PfUG]thæo3( +{皹gʔ61 +vM5,h_+!ߠYϦgV}v/Fm$MQB\TA6\->˟П|0jZ$Zo[d,j^g:G ]x/}f^Ý: H!?2݊ Eʘ%[e361I._1t1ge[}DG3^bo2?xW}n 0 eQqODݏ$~)11=Q=kK(+C ȴG%M%!i ek2)D94JY-*D:‰ccs-OO,҇=02^ @boT}PKuq#XCdIb\IA3_Kco35#0 B shQ(mp얼p +]xk:j"ڀ%VUhuug)n&k{9\KIU]:YKhB.p/zGӚS ~yGxP3zɵ.j7G 9ണ,ݰ4E;βʄuMFb}]X%咗'ԨK(Цz, +y=>/֞D~z8e? `耧pthq|f۩ɻkׅ=b<>,S.Y-hoeDG2|+yN\5W76jOo#wX pŔ%7g~3Ge,KґB2W'V`C7!f1I^~Ykl%#a{`G'ǑU#cE:#wDzi{{DO[|\{uQ(ڸOM>3U߇.|oP~>A:~pLR:[b[F#`=2? *t2e6 +& +̫^i8lP,E&YH&B~j@4S__C?ӼړS&^?0]z'sO>i/ t0Da(n0{V{7iְIlpbL; .q"2 fQF+ck?0f4)]riU;^̺WEK6:z0;dwP8sux1T޼E~VlOD@Zm67؇["=u;W3it&琻O<@͢ߦ?҇ ڭFjp/Go3ƗtLpX䢊ڨY: + L2K d˅R i8PK1^0 +sH Aai p4Y Gd2 c)hylP,u1( N0QPP>c{DcMa._~X)W5l.xYnVaP}HCԘ~2r%k軎RϻVd>-z ңJg3ӿdvfێiZ{eoG<.m~&VMƗUw~–9|h?rMj\6w/[NV7,dgc XM\~^CR뚪k) +@l]3a*Ǖ0*/zň^s h~OXHG.f=$o|_οV-:..kA\\,7c%nќ=a ]\`KWu6K.#_CS 6hB +e?"j" '=Cΐw +T#h:2HwxH=O&v;;?\374Zd6S]I^&Ne9lCf. w[BlΝN\[ 1)Qt} 1e3(ƺ,K =L}z@YGZ&!0i"_irص/OHm@]q2JF;"B]oMjK%x䞱E--))͛ރ?UK +ujH WtOq4[WŕgrbZai{RMw9ޣ(1+;FK UX?QHrf4 J?% +7i2x@iU7mSfjBƯN=nڿ̩5=f= AJl33?V[4  樾QtL%;'j*͉ ,xřZt_ZKޜui7RL/:nd=17W*:=ff\o#YU*c{Za.сݘ|I7w>&&+4l A)}p 2AU I3yyIoL/Gr$YN11xbd)(u&~_V/{M\DcC:N0^3ׅ\O3b^1l@GsO9qDAVvF>`PV$ +h`HǽXSzħ,OXMؓRR ɸvp^0zkzҟFBIE +V +f%Bqw\ǒR! +Alݍyŕh'|/c]njn4u ~ֿ-~Xed h;pnEb=6r,i4h(zGmq٫}-ZoU2T^sk [J)g3&=^kwCӽ6=AT<"쫞nSL#|NҞEM*iiN2t/Iv3_$B3kF94?Jy_]"2c]U(\ϟ8ZĿ'ES榧0|!{9e.1}2%2ӗ9Ӈd&#=g7I8>ȕ?&sRoWC 3 +1$MTCGR<#5RKRH͑C,9$=17<ߨDǪRQ)(IV:;U]DKtH꥗{iKxcΈcf"~'']kʉi>H%>*_83OcQ;ە^yGGNy:?甛(F?ĕ 筬FVl&·?O8ZhHJ]*ꇼsŠw,5=Zu1tDqU%h"jUZf"jהd _c:y:ty+yp{W .[|UetG2O!MKWUV̆%Sj$nuL/R&yGFc\e%c6w'ΑWtGᾖDv$1aaѸ'^Ӡ&PCj/oU^ă꡸L93^G"-S )Q U|SG*VL5 |: +BEѪG-4. +ʪuNEUU‘!ەG0[Ԩ; ]wQS!!-56@0vjҲHyFhH6+G~ҿkm1k';*O4#O/nM%ێi[٥]#ӕ*wre%w/wZHmnOрPyEx$y:˓,ye6 zŧE($[,Ù= H,EF ߹I,!ݤ"?3c/8RQ*TJwS%HX,kQ )7X^>x22! 9)hߕ +A5;Hgl!7|x(jS _YjgY,ڨ~m,!?fYccvT *Ơ&5ybj6QpQ `k:Fu5pab=IDOb%F5m(HPKLz+6 KӬ4tS-=ʟK\$֚llARYi'>Ϩ~5CtS3!畮-7X8glNSE)VR%Lsę4 +h\" +auiH<2&Ry ޏͥ3 A:HQ~'H67;_Y|3;y :rB4S">O˕(I_ZZxxD*oUnL&3kFO1}S"LQ}`,a#H*Lp4EGǑVRϘA~E//Q&Т3#~dD"⾠5ζQj4ڧ*G֟ɮ Cz#S#<ڙvsE1̣ţ#N&!]$!S@4CjC#FJS 5SM2U ъM",T:S0!ι=;OrA2+Ͻ3cUpx7FE#QbV*ǙAqV++G0eU,,eSkýJa6]Pzf`,#PEX Ca2 +]0Dž18Ȃty5P%P%L(2fa@@wz3SsxRCia(< erԗIr_BY/آ"[s=bv-*odʢZQ;Sj5]'b&>O:#O2b9*dG [#/%iH%}LRJZI/Mv^iZVC<{ûpDHfd|4}2ﴠ$ZwZ>Z:у3W%k5dek8DED:c܏8YBu/A#MN +GC9iU('#j"%j" Iΐ-Ee9!F3n67YщDTŴ':oy\'SWIETy3K/z~ I 4=WiVمVq+*ֲ")+2d I{&ErQt AbPH8[Ie@O!HyTɖP̃Qק CɊ%ɡÐQg}19BL(!(Ī@GL9::,([c_L*BFAVdQP"3fArK<-\dbrȚjH31jx614P7,QPTZ ߙFSHĘ4ƣ$FH#*_]FC}}$hlSԚ_SSr+2,$B>Ak=vc[ݡﺕ_9[[s+7nqwZjk>AY#s҄Rc%JUk"U.]8YݻLۙV"DJ"7*?VQ}YbFVC4a& v)Y #2 key4<8EDk3S%/ʐN( J1x1^"D%KLT]r= + SΔ!`6B(H!C1IqIȼ\mn(S7r`KZ?j0ɾ1:7٬HIkb@4PJ1&+Z+ouDDױ5R 拏udG;b]#KrkFس\4$ZəC q "Yʅo+Mb9Hٱ(aRQjE+: ho/x5e 0+FVqEB"dT'5&ڞ(E IDj0{1B E,DGgE*N?"CD)u1Y.ʕZ<^ǣZZs]MnP֠ V(Ϸc%4V뫴P~BXt^qQ"TcTS\TD#G8zq(pRu9ԪxDWeZ4άM~rIOT)Qau闄[^idT8^4C,^g0eJ( ʏ`%R[*FE w~rM++덊i'VÃ2upf#s*:`Yc?>OJ` $!W!PK\]U:0軆{b1^x Z* UxA T1!@=B41nIMT +I 0-=e~Ԟt>P +R<2w |cF6x(5 EI(@tătoҽ{\i +^{jIebp#X^ +W.Fn%YXo9} 4".810zקqV-ET ҁpXY=p])c +A̙^b(@e^jr}Q %ZUvN\sHp TG͂ \: @ӘxPzg?^4@wh*hA ^1xRL#9fHGAI@2P ˠ.2ʠ Ry@:#^Ц!?Tzu 6:1wZ x[Q 2$*Q_ ՆAAku +{AW +@S~INJ`/HR`{A^$/gTg_Er-qY/A_5+{$.R/a_ )ak((_ U;|A_ VtF.@| jA:G76 ]/~!/9\ޣq%ez|Hs͂(_@zB_ R|Ce)cQVq0s1X{#rAH3\tL$/3p~#_ m/hU oGv_ŐKdT̬ 4B6 pNxd 3Uoуr؃A.B@C_y^{yq킙q`//|}/88:` +} W+.I u>pX g`z Wο-XmyE/"N 'ME喺` FPn(ՂvMp лhAY6\n Zqw .j~qhJBx!JxDQNasG'hW>}a9l.rA \mZ։hMD=RK1ِ4gՐ^eIJ&Df+1AГaRJd]v F% &K0wg:Ph|D4:Q2,XqC,n6FJˎȖh'=EHmMLgkŕG\XL)GI{jy #Aqp9HpgsDnZ$ȕKlep*U`B;G`;rAnHpEq1giJ0װ`~rͭS}zi7)4Fpz\e؋`E-/ ) \.68"oV.~7Ks0A'0#7<4~O Y(*J{ɷ c)e(W=?-FH{0z愠i&4xC[!P;;*Ȩ8 z8 Ш!!G*TVv9 c`oFFڥ!b +{S|#EG6{JcdT&$-0.߮%`OmyQx؊s,}yw(0{{rI$&wu=@J"G?&9'60M'x|B3O 8ow +KRg+gȋew 2B ?.aʭNɒ݁F +[[/e(ײ2I[TۧFov3R^FEӁ +t`hvZș~:)Df< ;P32[ExsPeӶ*,mKD$s#&u9C$ڮ:@ڧ$b2MKTB`制UǸ + +ڦW>udHuJB2zX/,a5ۦA -{xŷ\t0(/> /Jٮ aαuo06FR2=:@Dǚ?bfZu@J)~J^ +nGhl{gP, +P`IX:3'nziN-@@aD@0}[d49VPAOBeD0RTHYEQ2Mr6~8%Q24{L3%"^DWpp =Mb K( FzԽ&/= +cQh l;7pE`O6=zJUm6;Ķe L@DਥT?@15|ABn>@x8 G@tyBQCN.1ÈwzF_ٕ/L]% DYFP#,Xgc@FLA3=)[?;^^3  _P2MVzHdz20" q܀_10'K(NꎚMͮ\h +8>2ese//P`r0kBřz݃SFqN(uklxn5\?a3+i\8[r*Ő&vR2aŮ< ,]}krgok̈;eB& ̞Yd:g*#oBYI̶a) +D +QF%+EW] ̓Z`,M8s9eKd]` )@BVu&ͨt,!|*) $0(VVWK}k=dc8]+tPƒ`rYxs',sЄGjn&.8#QRjWyee3 gɬL`/jp @+w6DTJ nNRĀHɂf08 pdB 630iA^͋@wT㒇 +#1W%dQBfP_J@ E٤7gfW^6 _MB2iTV^ O4p x pɔ Ԩ l  ^LU@C ii !}oe +Ya>N.r5*LA3^lgE RŽ`h@8b{`ptGSꢥ5n36>["/w' n Nq nGh 0TI?^ŚT- +XپTbϴ) %@>^;SY_|>\~ i9G%ϖI f3-<&%xH&PSB7F{{ErpZ0J?J0 -I!WXw+V6!Ɯep]zOB?@\HŸ\ ,梸%ON ѭ^ ()2cLF$5\a/#,S?5nGe8 s 3L!t8y[g8U[W2hcsrFw ag?QNq3S$,h&%1NHp|-cZn c@ + [8twC,.0u X^+[H̲t 0!|b,Qc@+,bw@K6,7ǀ줸1y IcEU*BU0`hrv)Rǀp?xb2:,Qb5$€+ډ0<2;daf?w _qDUߋweX4M%5Pͪ1o%'Z8$7)I*&ƖmX@r4I1WG9<$(}UNpZKzXB]yO QxE]wxl0#+eEUNO˝|D7?'`)ĩ]j ьk` t%`:%B= xu'Hh8Do,6>IO`C4ÌXߟQOV'D,,5:'! @͉NГ>Om=;ΞbVyj䎾@:mCqy[^ % VZ}b1Q8Nu (qd ^;[?T +fЁX 8a\sX|O4> +2wR惱q7OrR&?VR\P凫k[ `XIـu Ch[(tS^ꞟEr;@u5m.R%DMgM +Q s"̟*/>SYdrj=NW`fQ7E0[89OD#G?Xo2C/V!肏Sר=Qڵ)/ 9YҲĆ{02 rysS&?\_ H'hreHA]49EydRj*^c ?mv'J&ӕMO3=] bIO"!AHȔ6#: +UfSx{vkm~abhjIGhF'g} gf:C8[£iϭnl+V[W&}a9{sM9"i-쿨tnpKu +ZHo E=U*4o(kܬfvEvd;h=?Ho|JXJRQ4rЃ + @?Z=Xm߳V*} Gyhp< l`_#5(,K9(+c>+}#cX*hؙvRUL# ͕ǔ?vmmN2D:rC9" Zʓ㳹P0 BI ٳt"A$ٵJ;Usy!~zZGpe'#3nXcAƑz;I<8ڤX)x:ε#ߩ_5"|gyc+fWXxyKWݺ6eb'k-46\p#~jiۈTn"A<&Wϖ';QGi#/B. Wؽx,Jb ]7LOP'C YZKz`ST& >dT[j`,{rV[ݛ}Rˁq;M (/d~aUw hʒ?",GEYMxʔK'RN^–`L\p +Z qrZ[ֿ߫Rm{8v< Է7k/H΅05^6 8Kce? ͡+XuRlpFF;~Mv-&+1gNogq 4 +5?oV-$ pl ٢ПoynHoQl{N6;DYXL*תxB +o؆(e}v0ڄ(gyL^3ae4T}?|8+24.wKx +(X$1?W݂J O/V_ +}_SOн3Y%@xbj҂Dfݦ5iS}fLuѿ|و1"et@773a4?;ʡV DY z3/AyCS> 1q +':D&,eCmI1TBн >g F\ 3+cHD~#LD?+b<џh_џ +|,'~0'kƘuyk+)KuEUČ(ȌgdH DYUO)B6-%o@$iL^FKWJCqaκ*+Mjb ۺ66eؐ.M(u:pןP=~OqtߛIEѮoP=c,>ڈMuT3 *tUج5T4DkP#}YWr J_Ɲa@0t ~ŃJt$ Ii\.R_ַFt^(dr F7B8J.wJ*Kq@@ߌEQ2v= VoeɅ5&Ob? 5,Y_u&ZbDR)M~ 2'0@?$o7O"b0RM*?"!(2]/1x^H?aw|Xhc-$SskFBeuΈ_/Q4|W7@65;F5^)'Fͱ% = J_kߦe!ARfMѐj73}+ywwa0o?ݿFgVIJ.Cn?b"fcII{A!쳿 {fD=CG]pPO'AgG|}_|1ܼ{WYXhƎ'4Cߨek4T~gWW&J*TT?$FAW_נ=>@u|28?VŸ*o[dSQR"$~V 1Rpz?,ru> 8CWCcBsMg~N^WO[e- cf~k @wtKC1PG?_"q4/?>~2u߷1z^NgF1ez ,xY%U:HuPTĴϲY/J&nC+Z!Y W]kFl4z2W}A2rµő<~KN_d?;'VIQ _wYv} BÎa~}LnRZ`ά`bO͊F4R;erN@-%>֣9(हz`Q= ;&*)Rn;ش<`~P'0Kw:VΊŸ+>2L#!sȢ01T=ar +,~w=a6,-_?mJCџr8Onx9=ORS :`IA1kFHiqY>^[L01o +YmJx̝Un9kwnq< 9q)09WBk[rg~tͯL\p#*o 0VO_Vogj?-twRj >zٕ'k0RO6&"LƬ%p,c +RkkOWL~b1Sk'KP  XC ȿQevQlXǠw{yN˅HtA8E[ x|r:cD/\°!BM*-"g7`u 7(>L}~V$/$R,>Ds>G@,療ۄjmw{?/ +fcr hR{J 0oc):(ʛw%{BݤiF1⯶xOv -wFNH[wy;Ϫ:tǪG|1P +ty6=7"ȩx^wcZَ\Wz3W`I"?<Ώk-^c=vƃi/(hw +D&z-p-4[_I;?Y2X~;'Н'`[ǨЯgG G<%ip~p!^ kg1P<^Й[ hCy)Vgp!R晪ZaX*\Y8q+ZÿNr&m@D;*%r /W*'#Ò) ++xYa/^d=L[F94Ȋ*%eY#cҿ ?4sͪcO+!R9 +zqŌdX2BEvklh,' /+6AO4mre!ƥhyH wYR!UMXzlG=0Hz4syp.@]LFʧDcﲔ4ǩ +* k[OX=_)!8+ 6rbk:`N,A>JGղpJ&0yD5S[}o#? +Dճ`4 +JRQ E͕T9+y0n{\ѡ\ ?+uC'c7 G7[rav%#]eSXwC1yRg4!~So߀N6/kWWrlj̄`;/b,>[9yHԚƫy%L*RW߶y}2!d|unCfO݄lW:KouyUR4/_6dŪ2PRsU}2k7eݤZ;T4ȁB< Ș&΃˯xB?G 'ҩRB$zKΩۀ[@jdjY`!1r+}NTHi[IЯtZY7W|Tm"DrbmtL+fҦ=iWt C \)az* u8tK )Y?Lvzb?k]qEwNX*!ReiTFlFz`"9wqCœ!{BZB乇+'J]O$-.$nRt|-|u3:-m͠Od'SҕK4 Gh¾d.b(QDcoYbTD$ )^O ١`W9g=hg$9 O9U'!2C]zQLчﻌ|,x::~x Iϐ- xNsiP$$e%2ysh>,Ȟɦ[<@l[4RMce_t@T.3;B7O(| =ȳN/q @,l'&jYI;AS;}Z5{$!; hl Ө>߶ug4jrcdK =D@aB 0/ÏM)d=>6mBل3΅JBn2W Ll}MuXM:7AI]]7屐TDaE[OڋM*`W ǽ; +v,T%8?NB%紡iM(sLOȏCj<2!'VY09NAfMC8EӢ + EQ BJgk6=NZUD5?>q;SD^˔g +>M"BE"n9Ti()%ibCN=~~C"CW8M!b0frX. +P[P  P0eH&-8[&`dkZdKEbtAB&ԛ*T KMe}e ^fm +q9SD=>>HoV_*W> )Qr'o+}P9KlNe1M!S7#.N7rऻMahp CY3Cc < k8&dfOx?=P_IeZ_@7H;|d^o(fhe p5|)E_$oC4@7 &UY!ܔqHVLժ$Њ  PJ"P$nU&, +'Qqtib$ǩ6#l8lj7OSq0lCŅSϬAUlC/ ''3 jl϶=ېTY_jZMqR4 #/mh ·d ROe5M8="fVdJЮST'q=!9*::$ET._(2VP&s(sVwrKK9t&4X?eĽs<:D V`V2%٦q>Jc Э9DE-7+AjІ *ZR5KN-cMNMCv9N͡+@5,Td(с.nYw$#D 9Gq%|e4^"P4 +9٪(L'!ME2{c8 #P}DF!'Ts'0K 9 j<1}l }G$r +Z~6PJGr9qe4lrnuh`U;vE+g ^NHX,nDQ5fz9*Lb=m6=êfҎlSaŘ@ +PgN'€1 /[N4B> +njdN +윮Box J g+[G +_lhYw~Ϣehu"p@+yT#g$(u۩o _key9Atz@(Vۼ، T׹IR1+ +ysx譥IsгH!׉C$w[pQsU5'F빒t3kN;gZYsj`$3l;E-* 1~:P P2w+5Dp\hĜX>Uxz;T|JȍSO*8*K^Dt +QTyU3u2ximMP.R'ب6p࡚FAE)ibQrL4L7xpRIh!"2ڠ ubY"Jdb Ll^|> +e}֒9[ t:S_B +NRgcO\+yC!ØUѩ9$9=yҫ &s7NOԠ&\H'p =tyЦ CtrGpnRhHUy)p@sNZjHu9i8(srLBW5ِa;'`P~#横; "6J3U Bwh+JvNk"Yg,}yh"෠˟S1룰E +!"`wKزZ͜9Q9,vIUSEwHWwÔ[zvRٔ5fͅ!!(w'W ]g(;H?vbG;D5 *Ӿ/!1Hh8~LCBdi{}!zpԭfղ,; +TNGS޾s@A.fZR-SE~vbCTP5fC̅YCWQ b"_ʝf59i-p[tI]ǚV9=s}\s(@E&9bdgܻdYCkW)/iy椗iLB>63.XLqhjn}WSsK&j {&1SR}(# ;4kG)2(s|]-&*BRϡ;DzsR"1;U#C؏4u(3 u<4t|!g)t.8H_e tzjVs,[AcR$v;NV?>PcV5&IR{x(j֋S&;PSN1~L[:E'.:ʰ@/ C!")"2#b=H;2ۊDDD%;Qf`"r%*\̉*#cTU:\^_qDPo % }G3̅Bz.rְVJ]d X*Hn\Db -_I9_bְ!@tB$10~%9LŸ_I8'WZOih{%u"'j$z p,NPU!$5ݸV,..K7ˣ#H5 +Tz K5Y&ݱa!{y/4g^;8kH#__:ᑚKbGxFMu WTKΔ,Hi*l7om@IVVR2~I pKPgRɾK"}==HhӠ94@aF)~]3c6fKa1DNT._zPLG"eX{X#:NfŔ\j @lSR#7~6BtHL׎'/eC!ILAJC/wcH&BX2<&ZH2%r%ɤ\7Un'&bMjV+(BN2Bej|qROQ1,(~@׭C ѱ%i 4 7ve([ +ѫjL30, f>dz`6]O4h.#qB$~ebqL;xQ5,-'(ML ]jQӃ1i4rQ&fH7́Y2u=&eQ^џELhXIR&kHD2_-'`T(9 +綪HtEԅn*eBSM9T,,G)YH)m{F5/UnV"`fSs t|Sx[!$]f’彲؍,z|LJff:g4!ʙxEA'u~hT0PK 5I gBD!T9SB)3źL4:DĂ+@gs:C*f'H$Ț3ݘYa1gJ]Z3ENVhss&hyOsUH(o޻L(F:,/Sj,8T3 vOthb}.əAa`ՙd+Zg=v%pM Lm0S8Yf<~Iad풹fja^Ʃ:]0٧֌w9x=%cZ x8zϚ  єnщ j"m 8R~jdS *5QSTbpTt +FiJc to(ݩ@<"H4 0Ƀ8apb)X1]Nlz` 2։. +}h ǩ1Cwj9|h;3Uyr`>*#O8Ƃ?xTJRZ_@q>`ົSf +2 +endstream endobj 21 0 obj <>stream +)Q&5ijE[ +}(> Qbzyz$ .dTfʶ 9;o(dzR fOj%`ɷ/zR)<֐d|ͩd3tCeKXd>&/ :zJ!kT@D)!?s,gő͛/.&?m#!+һp_L4uTwѽ`4g'OZҢmMzt싐(j*r= '$ + b勦橦c5O}2UP_L&;9v0}OVl42fxDOuTt:Q#}̏x=] +]4,߯eOPd䒊)pn>FSœ".U'+VT(?e FUDld؀>T*P(C2Sw'(%3堒P^ 5gbS( UPK$\:Ҥ*!L;?DTHZ?b)߼],9\:J#;^6@`@8{veUAdIL(UّR Ƅ2dDa;:B4G1J7D107&_EQU*Xh$I`Glɒ ȪsY0NJ/-[ +5X{>'Qt,9>[+P.yCZpm+$$iI8%jӂPBZ4 ³HEJra+*ͣXit׊cqi*.mRgqE0蓨j3v_36A@mh/#q@Œ4jJLQ'.9rl[k:EYJ5NDŢANk$5Do*!"[ibZ8ybwu.{Y&RyrpJbg^E!UӞ=Q0)# Q?Ax@%eĸ;S!G~U-w'I[ QSƫ + +$UMw$+r2Ck\TCmO+CXW$3|$'d!/k2DkJCl\6ٖȰ}gVJ2 =+9ОP&d`QVE5@BWXSS N X8| [~.|[6<XĠ&By)P?P%l lzLY3(_ 4bR-znU%EL{ (2,v4x)XQU@)MۦVryD ʳ +X%V+XIKUAOfoڔU%,."CHvTfU -HLcZVXWϸL} a Q8wk3dbAUץuU%uSNAW=I{玨U%p؎0^VZdU,N`[!(XF"QKI*Vaこq\FȬgQC)5/B8X |V!GL( "ygAmRI<*-RjOV+,L{N;;5_XQJT/ ԓ0Vnձsj{Ro\F-Ԥ}(혘)9r"󦤁7DũU|ZiZ9N^`1ALi{B}v E[Iw䳸hp'>ų4"rkS=%\n 9M8cS[çАj9c~*$j\E3m>SUԶO5`7E$S*i,[a%DlzX] +} +aGC!B:mQ s[j+Rc*ڳ@qxl[?o)@i55LU2?T +TT~T(@mm"UI*~.4+}"kVIQAV`LXc%jdK*?Ѹt\WW`>2%O@lX?( : dFkA\@@h΢ ́a)4pF;OekK +@PTdݸ5vn`BcեSE|"M ڏ>wNa.c.f[ +}&Bv[z,/r称W[,,%>Y"HP"PAI(ܗ1/h 4?sQ/8əg6 R0 +"9dvYVƥՋT)&+OT׶F?Vdv}w+ݯȓCYǵ +jXm;,%˚ǢU>{T +Hܹ-Da2(@jxX7-6` i&B|&tX c5рq3QWQX)c>֨§~9}sI]>6LN]v޽RPG4Lr >Vr 8L +UB_0TՒHKUx_[zceܠ)X+"cͧ:Vs>XLr0U,ݹDa{ÍL4HYWvto>V|^L +$>񰲲W%PF-%^@v@}_U})Md " +;]b@<]XIJ\1,caa>V_e,u%kE\Pk|,mߊq)I鉏EK5ă |LU++LLʻg^6j HH)wy,ߦgd!x6cY#08#}>|!UGbciq, +!~B~1.XIGܩʙ`oQk(n2ǒ^˷%Mx.8R,Ʋpo@VTʜcAA vxӟJ! cP:ϏfLno"@wfpB졡kȂZ{3IwnȂjOY4P6j(ښG€ +H.diNIYnAvif8# Ȋ,}@֬zK,tȊ^J5Cy~x!WW)bP + qS'sVp0b=s -)ROoc]r wyv†! hǿYPuɅb!()΂@p!kF#H*diL>CHd4VA*Ϗg,IH +C'o,TyPÜxPNbad_CVN@Zl2%0Rg/$ 8ص5]dHF,=c)osPPzJ 6YDw"1j}PdM!ΐ7XNɑ5' jeLԴrYd3`dȌ[ CdJg '+] IHxO&z,)7VarJtQPauz>&W8_ɪzP\ܼ8YduM^Gׁ|Tv 'D.' 5HX3'LuIN'+v +-F %:W"GO'Z1S"6;Yn g-:YJ}c8K,=O|:Yw^]s' WLG['9aLI`WuqdLfE)"w 63.F/=Y}T73.ztxi7ޭʓa$Idސ"A^3#=r7U' EA'/9ԪHx,ot'7!4dU758]w'('Yp%.ZcGd(?YU6 f鴇d92|$O 9/!bX83 /zd!#L-m)pxdhy4P?Y'6ڞ,~[) {`'r'5¦@=. uLE:u'+ڇon[юM,ܟ7c %Sd 1%,^'jS]Ծ<\ .:xq&;,dM$ڛ+G d*7 &6NEY<'7s}q}4V2y0_ZNfe!QUyWZTSE) i">oFYxP e ,%8ʲ΍hLBIz)a&CYj.jY!%8'3-渎9Pe1(kzu ȉ䈫F5=HFYM+GY✮Bkq O폲R.pQ@eޭDʊØHY2S ,P6[v`#* M~DMB2ҫ?p t tQV,T#e.쿆WϮIYj>Ea<#e09'FRDc$bV!eW%i&e{ HYc +XI$~'e!)B0{SJY$Uc閲2odKY2͗lY~1a`.%cg<)k"e(ӌPEʒ%с-2)Mޡi 6ϹF h %eȪ,)wqUd6˥p|Rg`/:)=&eyIY7!W|HõwL>[RHqR)j5) zleM`ÏtOh|\Y~+KjteQHѣL}d:d{5+K|eb&WV{(LIJ@^z +zǖ*We: 3C٥7w>ASBXHd}(b$ +U +Fʒ}į,hedž DoW֭Q\./Oz|ߺ.yv.qele bì5q?e ;N5VEȈVK~5yWY?wep,fٕ5#G] B1ەtZ,/_YKWeMYv BepI5X3VbY] NXGve;f`|,Le5nc2?u*,)^5Ʋʧiz?J>ver5}X־@\@| ,L=Ų`| +[ԅreCQk; Nma``dBxXV5Ic^6dY5YBQ- tere9T9ڨ&,K_~aYН0!N}e bJݼYE5Iw63&q[׍輲NcDzwƏ? ,{N#nʤ˚6f%"i"Dg,/I֌ yuIՎۈei.5˲8׳ə{#= Ͳ%ͲL,)* , ^)?"%$+RҔ#/?C̵?EV0)n.4 ō"w0ola*q؂%)bE (9SB凘 g. <2Q6:gгpфq`|Sspu()&:_̋Plx.jHݰX)=)MI'$~=nIa.%?yNJ7ANك4qB5e6DF+DILF +(D`|faitSYhCIC`)MVZ$VIOdB{<#Dx5@DŽbBOOUb 39#!ܵ]f/246 8;EňzEC袋NU+~0)TC#CS6p2l>l Ef)җaE,i l ~N ܋8şCi< CaX ~:WҼcb0$Cw=\? bb̀@ade~Hȭ"ad ./{a40[e(Ep kAh(_,ÿqyJX'os8 Y{2hԶ)oo.g(\N\Hy"Ot! < +?2!ZeƗB~Abf9 ͌1~4)\~@!$R%?A JK"JFK<{ K*ѩ24T&T1j ?p?`AC ]AϷŸE}`]Ü%pAG !Y\&2fF&}b}SnKQ^TzaJ!h!+mԽ$A45{7bЫ6F Sܳ)z灙NHQ5(aoM'_B, fȸX)I9$H]J3gv)YSR*˕-33eXhY~/Jl%JЅ2l9Cq@.|Gt2 C' K"Aa}! #qV["Fa CNOZfAk¦9l;VtÐᔰG%2B 7u?rva_Q$Ԙiۍq\ tOST1(tnmzma!Eh> + +pYagG b +ɨbCU-_h(3H|B9 }|  ۴:7Phh$\tEb8:x\"9'^|bl! E& +y$Wp@l t,\ + +@^#0 rriD&8 LF j;NiR<9E9 Ji{,J?sn8瓮LS:jc.4\9 5׹Vi q}4ı #(9ISJƘ(4HiH$BbܨFO +r\X1[?74:91#Ey2XZրp{CCENcX`+Oq_iV.+zi qh(.N]:w|'f73=~EGO3tDoleg)*B'4ȵ̋hӘìr)M8H*^1MfAw ]rFkJ=* +\&! 00GSy&6骭ZI rՐ,(Wu5)BP/W#4跤%WbZ5Nvl +4=q}teC +]zg%l;8|p=s]%Ǻlr4`Ze!X;]1=iUXL9{Ex]QS4?540_L0(<,@THB_+^rňe`9%@D7WHr |Ƶ,`Isn^ii $ k%nV rZrIYM +ʊQIs\?aRIХW}& +Зȝ$>4Tڋ5rvP(?kpNgD3.F5Ds989 `FzȩΩ F 69 kdFca"H/!9 ̚6F +pTvN`A\*]S(l7Ҡ00ڈtczN"4): Hj9zpBOpM 0H}Aq|;Píut]$a qubd!2tVz*k: ܡP%٦|F*Pv]I#4hI=?3A*L2%Rzuj=(Ik +'~:?d`o\)8A3-bKP:YL4$Pc}Q_ NcLRӀ15D-D/夌F)iZiσ)WF? /IÅ!%@͔6< f=riGὤ4RRMrh.Z,l &m#ʃ5ը謀;@X­; v9cl؝$kR,x]r^߭BKk1T;wkƘ|x;񹐮&-;QxpILs&,wNÐR#1}ٍۋy,KE@>yg<F yݼӨуa)x*9Fr̥!cd<٣rce'4|Zg>jhp"\';1/}(.9[=Yp{Ԡ)4;X:tG4 &S\;.~ OЏc>*O㒁ad6ؼ"< /75E< ,4+VAsSiF),p-·a+qOcz=cMeJW$OyiBq𡷃^lQ,i%3C):P.+~E?4^복b1⒋[< jrs< At?XbX#E e}x*YQ9N_fo<_&_e"*|cOcdj+h4($wY yk/hH҂;.O>YqIGѡptZ!0X+rl%$P&O#w0|$&Ov٣hs@4b/]uЏa8hLmy5%Ī0GDW/G)p[y? jGRa~%"/V 4p/|guU4q<%a@7ݚY@zHL#nذCyYێWF&%=1H@nHIDJ-9-S:0Oㅽ2a!@ /tŻlXDaچ4 +N kOL< ܔYӈ]2;y@Oã cJ4b_EY+RT :>O'sC +;HtX'O>!' wt)OQFP%i/{#Zܾi 7h$¸G >7h#CM҃>H@>X< ]w\) g?@QVS:j|Hq{h}S<)OC^l}iIi=S 82"t ++H: +#LEtpcJxaFt0 d}WвZx4X<;%3:Gž "06T%TZʳ' y@%= +!< NaPE< Np J9a%6$ 0\4vQ1ŖAVF020.>!C~UqQޜT~9\< ՚eBQ7Q4嵋"OiYAeOc'^zWOc(Ԡ< !0yKT,kiw,8OaN7@\YH 4S/s+/~4?4h@лi)A7,נ^XiOnjW$lJӀR}pi x4x]"BwRc>b[a/}K_ۑѿm&sl%]pU +;6^ri=Q$:mEC1:_r"j],u Kٹ:LS*"ْ:e[ +m[%4d+U-2Ϩ{՘*)rRYN83V]@V * 9<jcL8EtQH +ojs^to(ҁE: 4ܰuOqT:smv6C4y 6PwW"^DC{CTtx b|i=v/ Voi1C: 2 i,KzihHygOoH4/=q ѹNU@>q4 iP'$ajQo%N! uizNcYCzٟ,0dvUl1+~9/ O4j.s75EEiҗy4(~ѹ{v"i;2ȾC?PTQe\j1D?І>O}; 4vT×NVp + 2IlgTria 04_6x>;)Gt!N6\@O{ddwv"R4u M+LuAhd9_J4'pFu"4Nų.?=#9CJ@OFWT +"SzidLkQ]ui} ! \< +lӨ0ЊI $42n Bʝ)Rp3umpd{x :}&2wP:~?~5xkcI{CI|r41iTSwFaN$`#3s8ӐD袖2zHV +1>VRo fgN4Li9qj Qwi#nChltyԞ/Ҡ>iz|4,$Ώi\޺p(ZXXgЭaqzS?[ȰU\:Uֻqiԟx O"h4HNtӆv*sZeQi.}āNC 0C4p@ +v&򯀮ѭf?}_۱S42 +@]`AX%m]1aDˮfhj +i*|5AMNUӘ |87KeHB4:cn/v2 L"R۬Ӱg a1(⍆'R ":H.<9g8a8g`ni@_ Sɩ i(b`ɀ: vBo! 6Á3d{]Dw2Y 9냄 +9\iuBDtյN#4~vXyG 2kQsvL,ewHnuiFfLtop4q9U37ZそFʰFu ?':J R f*׏v⃣$N\FN9:xlpP#&wZu[*~fm̧.T%=i`P^: $[fuCSE3؁G3NiK$C";}5Cb:XVz3 ׯ=Oax\VC: U*XZ?FK=V@tx˩jvm 3 +c +a5h7g%؜t Di[RZm40mY:K:'Jư,0qJdcZ0di̐yP ո7ߛY٪'J@ z3X?NCVu7VQ)qhNպ8A@ٜdWWs_:tt +Ki_-֗nU!wP2[.7]F^v#c" W2d(t,E2e .;2l"#ȗe 2 .d`deAFX+~NW_EvefC H#חcp1̰/c$,tL#t1,tK1j}ٽ`161< A|1&c<`ܼ +$?><9,s[V+WY=bP3x1c11ȢXQe%}Цk +4 c(|a$2sT=C 2 /ӱ#/2F`:$ 255/"a0EefˊޛH zY|ge_V"0IR3Z,01˰."df̚3fOi]f4nެ?8 HHe\9|gb0rgi# 1LRϒ5A-<# >c@YO)Dh@UUpASh_  +_IY<2G$Ց֩4[`*aKapPLkϴHpx<4#< " +"OO; O|Zj#X^Q#!=v.H#xj +> Zj` 3jA4lZ;+ƍ2Qv)kV(Zb[LpQrMO`45y!1L{M*f[w"l$Ɉ,63̩X B?f;A| Ŗ`,بņ gH_V` oi0dI茗`kh8~$qko5&`<gGXΓ-LB@$Zl- 2y%XJaǶ:t7WXt̜@ !g!CgKŌ48hgKg&|[helvꚅEp'gszSe l?A=bT,µ7C[@{1レ#R +5bY$,leEʶxY\,cYl#*AdYa׫,DY$dAdASټxxC%ۋ @[(6d\_l, dXX0k*Q,֒ BbAaq9}Xa`a&Âu17?,2PSvA,}pm,bQiCi&[gxWİP'0,_66 LM+nV1,!a(`d34,cE6dаE48lXÂɆd5OfÂg[ͻȲI6,kX@`aAijle`i1aѺf#5Xptlm_A+Phj5u+_zll+نJŶ Z!3]W.ӕa빢h 5`2xU07P^Eob +vz{U̿6kf%uRX㖀x {9^ȹ(EFב(ISFa .Ơ,OQ@r * |űx́j ɝ͜D]Da58 ir.S+ιH{}hiZ{}: .FD#UֈJ>"E{ ݨ: vtB?Q8os td[A@Q==tQ(ΉbBKHXa**]tOLz囎t@hfI7uT'?QVlu' +url؟tYDŵ|5PdIN`f D(r| +URPHAP.Ph ?:֝w?A[?щ0dO`>{Y _ɶAeuճD*OPI.u1.J<|)\hO4ʺCF+E'C:D\uȨd'&uWy]$|bu 4%ϭ|Kup] Yu]E^'tzO0+bNq9$ YxH'ޗ呈DNxyb{6O@∇Je[q E]:CPrv"Yx섕NdTK 9#ڷ(i'L<*x&5^؋9@AK1S +$Aמԃ޿\C5x9!z ` w(9 +f`^ǘ#8 P'0NX< %'Pj<߄5s.&{M m +~B?yD#b<X^ykö&%?lfn"%B/%`ԇ(%0ȟՊzX$b9oI~q gءIh/*6/Px^~$$rJBhJʹp%EBDGb)%|GB7N3MHآ"a.h^v"KiCb$V00$㢗ėwm/zA:*H;g <6@blDG\HG|#E wWi:XvĬuAˡ7x~E3/B:9 +k.W,BMHA@=z7⊇F[ +^j1h0X0zЈtF )}1#p(#$z1be1~e4`m_D^)S !gS&>[W\BojE F%VW"D4EG(R QDOv"tQIw\"S"Dp'()~uyQ&"Hou`JāA4"~q~A!<hLGZzWLjCnQ{SC 8hSg.C8Dl^__= a[׌{S<ȥ?Xz'Bq D#!̄#ɄV|Ƈ 5x{!!N>bڃv-'QmAPA,q> Ѻ*A')AA@ؠOk ڰsPqr>jDwgk>/:%:r |6狄 {>qk#klE8S7B1UUߓ?}M_ .}hq/L-}> Rlkf!Y? ~ݥP PqݎuDTZk?YR뱿#7BiH@%9iJ DFD$^ B6z)I߇_&@lA] x. -Edf)B=@\ Dȟ' amsj'9.A:e$@(PYŭ-\k.@ g D#+hr1 2~K]A̠#@b߂Q̀0@, Dln= ؤX]AKHqFm;l-}p`h`X?d&\7?LH@GгG 8$ȗ}"\_>A$D:֘C@8$xW2M$#h$&{xJ$y {A̷{kvJ![끥e='\z@0ӃI `ߕ =4+g{J9 A^~$D $h5!jK 20@o,,G;WS!07hMKz&G7׊-dtRܙGЊ-:op0Ah3M@(%Aմ޸,#(])o v%~jQ][#oH\& u|#xI{ïUUBohrAwvC`766X Nj۰D&D iW`im8HQ6~6l6PTɳ#$!#V-jc )%6l&l@l0l$6\q DkP v YÚc *V%FϪA*4k'd44< 6 OQ< ZHҰCPIp壁 Kh׌d4@O&u}2APĒ!$J`GF!"( jp{ 14hoikCMc.Bbb )'`YQe0A075\ꖔ3@08*7Y~r"= Q +. 6!h , T ` 8@h Xp6 +@B|HJ5Q(Nb+"yr@@N 9ہq52*dFIqsN"DhAvƭ!5>ā0U]UAR9h @ a>(d䢆-L]G2E^sę4$%2ѐ?}V#)N( JC~}EzpN% 1415=a" +FS"nu܇TM- +޻/11. +e|fA&eJ}A14fe4^oHR@Yƛ>E/-UShzozB%!1DFY43SgQR> |<\4xPA`\`A.@`p`4@%@t` `P` `hT *8  p2 06 + 3%!`LC + '* +kaHajj7$Ty=#XYWZwq&,:nn +gE&V]DI%L'h2/^N?4hxBEk6jZs} Ulat+IE*ci)hpB#QSz2A3|kE<5Ss.n}Do+s$޹"j?i4}|t]Z*Ϟμוҝ'*ќZoa$=h>C۶[ Cv&(P萳rHT/"xltj} :*QBZRI%y}%mZN?%^5RU։@5YzUO 2*Q5!g<81jnN02b<!<;?"?u E~6$,L=\"# EbiQ`{lxZ4j.F{Дa tne8ekƴ %,ul34{2R7􆡅WI&,iACP?yVxhscKb*RCJ|^'V rpW<+,Lb<QGFjafsm ע$ʣ>Pʯ*:!(! 65I|`ȍH HE[IoJeuKŪf3~N=YJx{{ 3G7x uP`8LC5 6RbTSzTZF%i*T{r|r]j쩊֟Z|໨~/^OT.Q1Q-~}LL?ipeM(r1A, 2!sP=!xMkHۂjFS΁.,).oxP\[x]-Ҋ&]l5!q]3]4"I-]Zl\>GsMd.`A|ؐ`~`AdE(̡olx^'@D0ØR\!:#fhoMQMhFir<&5p5+E: ׌eJ2\C=U@U.\]^EqTsLrǐDزquVL.Euh9DL*XoJH2"SdmFq +mB(e] IcicvzV,(~GloYNTgK&|$šsc3`Ñ_f>r\E8DSC +ѽ8H,i=$A'lN r3SA)[u k\RdUs[Y!jt%eTe3tЪ.HLNcR8ut#K i; 'Yς6C$~jDGZRo29"4Caiu " /r\*bSbr <$~ LH>$R4.r!'H2B-9 Ŏc'J7&zJ.Q34;&x5x1b0jU6=--$\ O/;b$1ZXI KS͉&ɠL'|F: \Fgy|jU SToyf"7 t@К"H"LQI~<2&CM 6Sl#VMT)Į}AȀg6@c&sX`<@&) ۤ@72yIPBuzd=s7?yL>X2Eٚzޜ_NzB,de' zDA.vZ;Q6Vg@=Ke |6޴"]L}2NTH45` gOimʖk{5&9OC<^o SI>}b[:W; +s2Z/<J*^[)niX籃0<k_ ~EPl~m8tw:P΢4Su(`r)xOYw":ws/zf֨L " "?wl؟U`qG4?o=Q꿟ZO1#aCni=^,t0?b,H:mx."C (vShcJz]w^jPT-ލF?jDߺ.Zb/o6V+w (6h6~ˢ/kQݼDKMWRA7ck*G-O殂 + = LP⓹Dt,ch<ahZQ E:@6%zEݕR"0݋Ġ]Rdoҗ[+< y4딻{/*d{@΄[Մ-]qyKQEJ˓n* }:.3. @QFI[7Щ5Taض*gtU$Pٔ룼a2Sըã'Ӂ#%[pOet#7 +#y mΧ ^K >50TC,pdjݤcs;KMj.T*RuQWA+^R-&DQv"_,pL̆sWOì* +"_g$feOƟf1dx) +Do9XVxhƿaٞ@tAr?F*XD xF.x QEgQ*yб,FD$C.S*Z#ZD M_1=N- C  3m[WgE*3tJH& n>JljGh1lhK,ԱVDM`[Elz`Y%2L44QV—Ĵ-%j&R|6uH:(eDiWݯ장,25T%!V>**t)jiN~ҹd#2\0 `(wHH&2G΃m&7F5{ %+| + _Y q6K_md/EbzI>5?Ar](.vfcQ \AoER,jDf_}&G-l/mqc>szTÖL ξ9]^.`pD3%C|`~$+E +H3OA9=\6*Ƙ>5H|DU0](c=+W#fA^S N Z3 o0@I7)] +3 ~XBA}nU6utዱE0$Z2\ͯKShJf SBs$lMk1kCWOƅ;]KJoʲo!쐂RWHJNX/,~U1pZKEA;A8~Hbw1E0E*8-i)"Zb^ENA<ˏ.L#9"*Ad>\ f^N)Uo71R;P#궣*)0Q`Adl{I:gY.\ 0eFNj2E[j (ҟGEkks!BdO _tVV k6*">Z,L4ʐ (c?<ՄP{ +#y$V*8oElwt{@4*px܀pD&4hzziT6t.NjWTu,jkKw+l|ݏ~OwNڱ1hq=:\pᒛ{ \QSwvt5v;r;)2~j[q1tXk܈R GS)[pmk;C(s9Qk,/ǀPx9v^,^)B˛"fw. 8 +%>DFTCFB# ψvA,S]G)/~>S,vDdI~Іq_cTzuC{UFqe<ԿS3H<2n05S䬭`^aM39dPy0?ίhS|؅О`(Wenl-ҵӊw=F f)X&1Gɉ@݂XL(|Җ| +>[aӿcI#A vq^hG yVqmK̎S!":EJ ˂~xcLD_•_s򘄚Tйt E9D!Äu +yI䪅aO_ ]:Db{ eJ ׉/C0(!y?2>c9έu@+ìell$t}o []NKM"o)R_Xﵵ-1aPE<)+ֱx\bhhԌXɳԃ KK 9J ̟Ǿ뜯h=΁ik%^G౉ %ml=BU0>C2hء쫴?'YEORv)HDѴAS(K8"`]ajHHQ!Uӕiin(5APa%rS蓊o` X76u<ʺLE[吊N֣{M@ +@W$7zǰb]3rR` YAd,i APqsc=ww/+M}5xJ`|:兊BdMBp6m9K7/^r_!AϽJK{Ҷ!n C^N ʔ>v|rEaË.&w6KCPA.(EO!↵;(!f$:HP.`ɱh$`<4@o.D$rSˇ q?$AI,;<5<WHT;G/|0,E"&9l0/FfFv-f,96O'9t>}э٪ ${ZS^QQ!ϑe4Xc`eG +dEQ\Cm,\B=X@,|_QxtWN镇MW ф]LLP+#q\I,@%Jxf+2 ZDi%H(uVqTU 0V +3UAU\x"|V)H?êm ZT1L *>y*˂g*Uv,!1wIBxxb$]ws"̂&L{Q&Bx؅ rBÒP Ll> X AF ! +2tD6XSW0%a+0 )T0)Rb )סQ^TGIoV0FE:@BPBD q(kaɷ3 5xKZݕ;@^XZPZ:JNLp爼L)'٦^ȮQd3QAF=sh}SDⰯ)kՆ4hJjK|&i~w,ޛQX?y1LЩUFr3~YLXcS*?sqg{[<=iM-Ws)fdF[,kS<_Va!H̀ +5`rP@? vZAF2M.s(M.N-0:7kSB|iǕ0KEAq$y e +1iv10= +d)e*Sr{ۘKxf?i?o"H9'iń{e h+WeiʎԬfwE00FO2L2>'#}(beϦr^cZGPAȇTg1B `6:9 eyV /_\ \}IL|Wy Ot2C!`W?ig Y.2Ð$J@ 1([q-6[Ŕg >FKK L7{+ b>Il!,ń%e$أy<-lP!ڏZDKdmLWX }f=XAN6p>0 "!qnoP`&[ƣ+P4*O;,$?(0U8sQT4m :'4 h2g[ObؕǪhUyA"~z;#OR19=p YݽpǽYWBWml_ q]~R(C& nu-7UcsPgDo ]mF2)|U@$?D9ۼr>sjˁd1] Z%̙"d":Y6u G7'kHW΅:^ ܩU>M_~`CʂQ5,mJh2BДʕNq3kJr֢ԍ TmlQMlS9%1|@w6{lscYꦰs%pS'UYC5 {CKC V.u\eق LyNܤP,YOI61BLIwO ^,XGaKFT L"-!adk@YE+Y!"Lcx j7:MobiJD|@ϞQ:iٱ)ӽՇy59)ilmq1&p i#>ydfT6%., `G5Al o0B+'S$l%bjRGXK0(i ÒL[ V [EqGMCrG-rx8ĭgSk[I +5f bُ +!@!_\k +1] zJReYE {7 +G2?4];ð~ZWo}L @RGm)qٖ+[sTDµ^BSR UeU鉹L),/H*d!< tj.X}/T)"A,bIQX*9| u|>^_5j +W:CKBܴkJlP[7"| +[I! |w 5?Tϻ`6HsTm_'뀱BWɟ{ +B}d@~XR/g糚'؇d  &GP?L Ct9szF,fU\ѹQ%R 8E\eOC.e7:榝;Y>޺?ƪYWߞ X*T FEfruV 1 +%L-T@vV1ā'Tz2 I+8&`.!r\{B>|t|fA# I"6?Ŝ%^$O7R5d] +0$JҪ àF# &6!.F (T7׈:﷤ +?Q:2m\Mh,E9:fm[$;%ԣ*z#fb"j=WBy\bx!*b#ӵ {1H`Eyv=_6&S9[ d4+ 7~$ +%Pa,Ktņ5[=,nD|0z[+L! |c)VIA`{0vIrLˀM\%iaT +e0%w .HUcVc}PAFjf!z^?(ġ3FOΟEac?&jCy չ>f%%]%T~@uNqU#cKN,hjַ~3<;iu…] +*!T*ĻԈH̘GEUBp+{IZLf@ْ,Z ,Z"GФQ+nwZ`_D̔Jw;ؠ \zkZ^EX;Kd⬸B)8L)Jֹs$Lm&ⲃ,bHUf Bl[YLj!DdHHŊtqSWgj5/?;ۓfTi +EfciNJ[=0u?MǧZS6db5 _e7 #ddZfe9jt𲧡6;X|,^f ]9LPBu^?LT${)fO|K̔3P#߿}1q.a_pYFkN>f?v03 XPP/Df3fHU|"*D zyM@f;Xe%02 +O2c62K"!DIfP+ ezcYí8B2C4d&oX23e&U%3 \fw4}Z:+O{Ct(j 0웋8|2ƹ*L`v_ԨBGb2jpaa<fu`:F9`VըHIa G133Cr̘fȑr6t=5j4̈1ӔEFzaR!LǬ{'3:^̕1Wx5SD9&ٙy[*BCfA:5ˊk&E̾ffgR$qf6g3g Qj9jųA3Zh ^BghȊQi?ã4))Z2hZT`h9 5 DZRdtvRqiRL3O&4iGΥ?4F;iGY5C5iZ&$ZF-+GjXjΩqdJ9 >T7jSݥA?5j)2k 5|*՚֏mmO5?! +lמ<_]8"=:RW65>Quƺ=a51!@50-'NXFWi{$ +˶er0gt71&QC%ŁXި1y&Ř Ǡtn:g,}u`s5-Q#e66jy孕62J٢φvhˏ9l"|(1‘-Mlg܄iJ$!Ϧgݞ-LCl5Xl9wDٰ~^(g- Gv(ntr?[mjMdNQɣF񫶊imQEQLG u C[nmֆmyӶMp.4c-B5Z6ĪiKk7 +v>qq^hƀSRCEۧ8M(n)jPMԨMZD+(M85Aw|,9zN˨a_CKhM|cGk^DDΤ H]EݥaxoNKxo HλQNǻwp-j Fasv;7AIQO;D U\*}}`p +O3< p?uē3_U/O&9Mc18̔ɺ㩰GI^Z.oyy"3x*!=>÷I\ACTx `PC$ +B +oY8Hxjjx-P݇9AMb'c QԈG'5/⭁5&A͚hgD'⡣D Ϩ%~Ɩך]NhǛn4~x Tphx Z )%ϦNP+O-ρQ+4љ;τy^j2)ңJ46o~^Zǥ)54^C4PI izK5pҁJEF9?QC,z}" @H&j얛KMqsצg "j .,P#@T 5{wFs2Q72 &Nae7>7B4?q+I~V&d&ըRA 5N=ocEPCVt{9 UB5431oB=FR@_Qjsz5P ℨ5ՅzVrNOJӋy+ FP#G +jTL275$2FQZ%~TPe jWPPV j(:h. PQ+]W/I@7Z7e/OމȦ= y$=)SmmW޲Pcȇ)O<{/n2Ί={ C wC z6Γ_RLJ`iIxn/Qv5Fo,j%dH`+m'cυ5 5" +8^0|5(j4LNSOj9}jHo>=O1h806ԈEN}jP#lXYWBsub>تS?^QDuPUp7n +r_@gwxF[1P:J3[@7~axDC<&D 09??g @L~nCo7i!ĿjSP#)Ga;d j\Gn|Fˡ< -5~&~UQ54/`+ xg@D <h^,. +#<\S]Ry(01Ѝ5p79x\>l·Ǝ1ݢ*X:tiDø /aaFГ AnӐ#X&a*7SF89 < +Un?$ "Aw9r6$i  +t ( $/EI-Ks FzЗq9 r  k~`,YWŁiT )t c*iQ4+ _ HKX4}$5Ao5i!$c,Ap_!E,4T\NJɏ)An o4nNiױ2Jy\bxJ gP'A~,L=(:;̶|Dh 8\2 d$x46SG|ܽMa4lS`W4?Gah4 +OӀJ$D4:kpSj< 1x"U$XWOJ1hqk#AC^h! 2z_ nHOIalB m$A!8Ӿ$H-`* $#ʁB +ȡr<~'@JWq ~fH +@<5$I4R>Q}MPa JAKO#`-{ƠPd#0ìyu7*y'=dG}\z[p6OCH˒`"Dɖ<4=M4t&O6@Ab4"y@r<H:&OcAMlӐa0H ?4TPAya/N@AHE$AA+P Ġ`ICN ;%OP +iȹzwF$k=A@X;" FFv"EJZU(1Ă +.#:$P1'4(ELu[ԒQVDl)l8.e| T:R&(cT7^QB=4$Nx|%@WL; }+Ja;4*;ܾF}Xdd(Ȗó(j4)$iAiNbTp,ѐw OGvT$34i8T0i\]T=4:" +0< P9O;7k{xω觠Jם 4R*HeT 23sN$ō `r>hi$ҿhw +4TAN  +z0r5tz0m: p+ +b +^Fi6T0UքuiuVVPgAGvڝ%4]+wzn{ +`Ӑ714l)GDIF Z‚(iXetr`7cQrI,8*-k eF: &0*+lLi43kճiĦ 4ro/~ zm5Mm(7Mci.?4; mMC^r#o/X}ۯqXfƷt v{FB/F+M#m8W EԽ`QPilx8xWq6@5윃I49sii_pd9 pryRξ @%|oFqW|޻C9 T_Xl?_4{X4 +iM Frqȗ/=}AGr/x{4 md ( |O5 atIC9i,ړb%*dPHֱ+Rx*lygqtml+268I"u< 'f&L*DlQTG!K^ Z +sD8,qeT9)h>e!c|DƆ #<nPvFL,Kj.2|i|XCy#My'.5O{40E55, +Ͳ.A߰o\`b;Qnb(Xp(Gu"PЁ]-[5Ֆ*Tᯊ5䢕6$[YRBU.Z19b 5K͔Ҽ5cfUÝDZatUc+2[/yU%qgUB-ߊиz՜Ne؉:fg:;AwFu+ǎe!2_+~KQݼQwgbϡϗĸ_]F]R.85'"vHDD8A2:ppPZkvN3s}Ec9 ;>Y:EJD]*s^zUԽaO^^ŴE\sp,Y?p3BpXPF'(:/$TTyW(A^ȗEdh@ɧ,όi V(,N!1QpnG.ltN?c6HRN+,Q"Fa9#/9w$iQky|H ++j4C t |D~J9f,hM‰B$b ȍ%η\G>u8U8n(f "͐Ne|AK32|58hfb 'hEЬ|q"IZ O$IbHy<jeVRe +< |raN(pH'ʋ=XaDI8:(5jtKLQy䋑uNFlYCTye,p{Lj`RȞhd؊_O8;*if{$gIjI I +}lc(ENx^*٪f2ArMDZc$ܰ1ƃ VXLXwlŊ}.C\kLvqq=# +I`rW@Ir X\H~ Qg8Q>(;מ;^\kgeWL/6(cPpb#YM&*Y![1i4hդޥ[kb_'cb%8M0Ѓ4Ze"6bE 9J~,E`MxtӇZڎՐ2 #qTVN2m EGTM"'6t^It8Jd Ӡ &"2XP8"\ECC1jfWNPDZ0z3 `OU"LAa\uȵ7`/S:8 + G|BTj.2uHUŠJqdUo U+j=f||&(S]j&LbgxT.;)$C!>ʟjAX K@zG!*T=|&'m +ѡM"QfPFjDC0AQ!R&&\Y/R1>5%'4T*AbjBy+{ =L!a-M haV +142U1#D"?-ah* #Mē- +%RB*\3S_C, QH%p?BCDA9x-3$0w9=#2<(M5P>#2TpSI!H,&_.'kCkĆB묜 ^9:=\jBS4"SMЅ#B(Og|w1dOEq8TBYU 5{KESCX yUPkaZ[C >> %oF"c5-#\vMAAPћɌԃ8\ D)4ZP29h{-_ƃX$)LkΨ PSp (#*'T́-T᧍-)hAAgbK{),Gh|"<l9x\1 ]wQ̉Х6*O I$qocȳ 48g;BeJX:mk0 ϢW֯".S$?2{(285u<;lH^t݌|4RcՃ'V5kkSzgqެK/_b`ow8*̚)b?ocX|ZZnⓞMk-: 8~!3YU}5fP֢ڜ P̵D^Y]M$*X(6ܛ"bU5'v rU[[7C{}x0F0ZʮozmgLcZrY4O{zaۻf\] UEAS2Y _ 6d892l' 2*p  B x2:3rvvY07Oz +5$X}~ onA;<53,dјDli/nBN'L*,$z/a)*&)M{؂D e 'LB=Cxf(ڊx5< k +|<)[zR;6sR#/RH ^ejڠ ?**Ajy17,OX<}ƥlzv>\^x# < 뷳BO;m:89}?T MogL[ݼ'g[0kqBrPhlSઃW"\S1W5@G50A> Eu|M>oWRd* 㱞 ,cUAͥ4j;:֏َ>I8T:B1GV@ȰbG!BZom7ќË6bW'La ,>*Qrރ}Vִʬ^r=}i{0\_[78p?]'Y|0S+KMhtiNyxS z Fsg# Hȶ/)le .W0PK<'}T~ぎ$I +?=@d:'t7u&WQ̃fTl|6* +niro +FoEj LQU)l;  kn~Y/e֫$xE}famK2{ptda %/go)1ngy] }m>GgOJ@Y%%oƌQ N<ޣpc7* 3id +'Zv.Oy*==44[#z<6TQp7e #/@ysQ*e k ,TDlpIM0/)BdXӤ&@%!>1v̰U1*9alOyuӎ́Nv62x NAn>35]JX!UZag 3Bʩ5}(Tc .GOfQXXduO7 Ja*uk<&S&#;$eYOQ'Y"ۢڰ'֐ !rr.h%E Dwأ" )po_WXR& QJGNl"h| nE_"GMg ]3Jεi?^a/O @IGZĢ^6TlDg7).'ՠgOr5tAjK;eؚ754tB-[xC0cTCrߖ5s0\iLsL/մ ͢e#eN)E8-+}!8h]64B=SxP!7~Z?aˏs)K(;'%0wnVp%dL]}KJfCp!0<5J[Տ˫a)'!@7TZԊ*LQKОe^e_d%yS$x"Q}ZWE$߷\2c,~ +mnF(A n@c4l:45 IU<st+~^c>%5aJ5z"W,  >=ў՛A-5{Y~NMqrC84hb/ +_۠:[`iM +\f\ ka7P+~zp?:|r('Ap,_-@Pv {¦fV-dݽPM!F Q؁NF,WLV8$^€լlAaƗT'AJ5,2P5vHePNf!]wC %8ŽN#s_D:hc|<-͜^H8@zj4U,=1TR`[]YeqFR`&Ls<8#]p/PZ,Lf^'M;{gCC= L?(>hL +AS³*CYKD"B7gtܩgc4{9Ԫhh0xJW/8uϷG,L|P`-KgOTVGQQ#\4-E<(a_1][227h;MjQ.R8~4ڈDž/UAS+SOXZ?MWeMe~p~8an =lč%@ +T?Rdbf-/o[RnjHtÙq"&|0[3.%6YiN6Qw,EE5<r"d#NQfo[LT84Mۘ] :$^'Жąe(. +d;9 i⵲@NCˊ+E#:m*hB{G5xa +$P}$z1I iWejftռwSr{ViƛO԰Y龍*e3"lj#XnBmq,I;MsپZJ5JE+Ɋ 'B!!Oh]G{HA6'in=[W7B41#'!~^*Bg;vkVHZQU B!icиTK@=y^ێ}f[S@\:/lU!>n@ Gj-jCpz)b¢M$m{t3A mH[0q/1aGbg>u]@/ |f9RW~\ [Tc=JϴS@P|Us.ޘy&L,i͊L Ih~iuRQo +Yg8|OڜKPQA2 Uw~f!ډ EFR2AH ok蒬 T:v D&I{ufPb4W +fՍuïpψFz#DPAӅc"Bvv۲&ouB@~e#_k{AISͽ`KFh:x=E⭙P0xb8!B'wFR#w0K=0|tL;$yλ,b۔yl;~C{t"=2!wʄpn]88{?Jθ0#y'#9 ce7Ž!"̌_*x) +&'9f.uڣZǑS׍(3 +^j{; C+)av iQnϻ(b +BP,*xǺ:N6Me%,i?S-[t4{Κ}\L nO҄>y(r1٬n볞hM[mDŽzU{P + pP %$;=gGΘn=0\֫C`Aok˨u +QQ6MէDg'LZcdSkPR<^v; YRw^ZM@˙޺[H׀s4u۸jMZ"m'el^٤$f*9"@v5*E@@sYԁ]1q})Ur;]DJG37㌃2Y-mNY&6f`Dwo@ CYM;6 Mrx;Zu0G^,./#rPi9 ,!2I lEa3kR4Lpi.ivLEK'7v 6K5v̵qe&ۺr]A)8Kv`Thv\xB^l?V /|p;Yd\b G] +SyQP"=&Q&GD?ޑӄ~CYU9_g{tq٥O++R}DEwge +YGO8n][-)TG^x HٔBiejsL6By-%De&93u'n+8I "UxwJD5{n#"h>k=LY6&=t~K7OX&?{ T Y+Qd.0HVeI3{h8+uE4> =4EƧ/lx3W}˧rJ#ӆ[^>U@zLE NyץJv b%;\=aoτh'P*v`~hkugѝ ֫H<֘i$*!Mμ_IL&H`ϣ<BA +\a^p2霐s,TA~yY^ú8N F3 ʼ*Qfǵ< ׊!rvtYpz?ո=_:}4_+'lg[,&}W=J[ +Z5V}OUl~pgWZD[3؟E> ;/{u #?+ {UuXUVM9lVͶ +%e: d1kX [5„2N L&[ya70YBܳ# C=OL"u;Ƈ_&[L?Ӏe +Θp\J%7\ЅfxX8&Lݐ̷K h #+* :m J̉\#, ?6~4g'H# QK8,f ^* N@`EW8eAV~E"z{`F& /Xc kc L3vqwʫxWRXmjpߚJ`JHX:%]Ɯ#&`ºN-&vGJe1 ;aWdF&;;tLٙ#cmq-V S U>m+ D[ ĀQjVYt +6ډD=*af~2WC@i{LɵC: $CUDw*w?'2gL+$ T@ KmQ +Th$H <=9ݷĔYNYrlk' Ah! +9.N}L-t bATKT H8)AcB2~oO<ؒÈ8˸#ܥ60TDV9Xð{"40c!h*R)\uĔ<` +LG߉)V%:SDj^xA|DoXpW8e3 ^!#7E6dZ65~ +<'R~10:A[C Hv +Wo3vD}Kck[Y nB9L4gq ?˱!29 t&d,0~J SΘJY֎eIYx_ q=ђJ@PC*@ʝm6Y(X~2Hg!sva a H Yۼ BP-'XO.Wy + d@e#_8S: #);1#2ηU!COĝ.2ى3]j\!VD%";}W `8F:v^1d̷[EXʁH+AA x Ƞ^Eqaj tށY}Lxj*uZe_zPu|t:Q2CXO4}_vA /,ru|_վd`?&؅wT&~Gt/?ޑ] 8_LpUT'w^qSRv|}w!dup kthGlSR=a@:asُ<_g]e[H fmE aBF&)!Tc0(E4~(IP g4 +i̮QղUhG?c@H7A=LW$ so`o=Q`f9]@ ژJAu"۾<*ؚU%f +Daб8AK c6rCb"aĨ+VIҖ07ÚlF%L0g@eD̕->HQrL> Rv'X *rँ#rTLh5D`H0m\ 4`0&̚@I 0P? 0Bd0i +`Q**8ĿM4'"D dLK.H6%H('Px}C}AQ1~@m|GQxLQP_%Ik7}:{s=&͗#Z]ȗ?ӻh= zÝyLlX/F^6>pg(|᝸F^);X!\M.i|ʪqy&mz[dwq@%6yzVտ0|򒬜6-0͍F^XOf)亦W_?r)x33_a^ +4^,i4 鱌FC IFpYƌ``8o%Y8a3``,i (hnIvr(p@سnZ MHN,?!<{ .^W,>wi__ +endstream endobj 22 0 obj <>stream +tľr],i]uAzcm+ƀ72#+oìY +iCYW*{OF- .%@hyN)h[}2:dn,)D9qfdA'64_aQk,c$k$-T@dp.r1!n}5HGu3!$@{XbMD*4.7WT:Y(5Ғ4*`P+ϛ0o:}8Uz~"GDǫ}NEx_+gD-SX? \rBjzb@G{&$j5k} fP7T rPآ0F>,&@Kx}~'弋ӗ5קS+GU"xEg5 3AH.KOkbEN9`Lf_ssTOF*3AB?Sk+13dϪZofEn^1s+ +$`Xަ]kSo jDlj20xމUgjOxw#ߥqPŹn.e]崠:ܶwHW(s-*ƕܷä{0*[һ%?rO~3`5˿(޻9F{GOeٻUF.$SEa0gH\xt0h4鮿j?[wqF;f}cS::lR%51O9{(cvY1̽4&@7ZF`eb4vb#7ݢ?A9v8lAVX;o͕tSm'N$Ʃ7 +6sUQ=)Wip~m'P5`rp!֩վd{,vY:XvdYqeO2ö)ѥ{uYde,'N^Z .'߾ ` [`/&vK av\>Y%ԁӳ XU +y2Q!ۮӔ7t$dYV|Ơw*'w^ċy:C0~іG-Ѵ?Ƕ>rpqLw0u#܅Jw µ֧J\뢜\$d{}9JQ#tFFo:.4v +ٰ;/ i;فkn闥m{iI+{s$QZ \~ Zr͙2i_e҈K:;ņ A~*?hN I-pUx槈-.'uO~lWO8*"A+{[퇱%GBFD]/L$(#qYvcL'NTʂ |9(J7%JH]+ YݾEJ? o .zfg`NGhd +sP7/LbQlΧ<.F/.3-w\Pέ:F 85z>CcC~R,R0P|avsPc( ?\8`L=xʏ·nbic6RqXا|) )mJr_[lk&#ZFU,;Ў1RB ǤZu y@ +N6䧸_I_(#}_/XpZ^XrC6[| |}HzՋ6[] ~Z P!-CDFH@,u|U< }L,_g:~G"?B%K%׹5D$vlvJ&= 4z=T|\X]|mWE -*F#'իzpZ7*[[Fa.P`zٖ]5Y:;xH6tw_nܮtR&E;`X@`z}Da,Yx&ZRey!K +L G? Z(6w[]17LpoPt)S +# /Ң =u|9@(_xVh~x_LD9gij +4ZP]^8XKʤiV Ձp۴%7MlEkhB>ƢZVS8B% qQ|&\'#ޑ=nފ\z2Զb]ښdwW`.p Mi:>rLz+*eFh>uk? NJOwR +'ododxak&E ѿvϳYRhGaIA7$ e%禨LǃF<]N>8 q&* +0))<[3!|z+G33heu|yE'7g7 +̃"|whf܌&TxʩD2z` IiH?!717 F6a +ew@$Pz+6{܀IZ)@E^ϷΕgO;]ᕻ BZPV)_ΦBeaB]H"C7|޹ӆl^@{/e3iy۞xLjS;fGTZnl<y]8<0G%_39Usg3]uC.o%!/nI@[ieSq \' +3+vz,Vo{W Vӄ>8sA"nLU@,bOxXwuUƚ ZYcGI[哒 4K;so6 7d Vv28lsd?@~sIo)q][Q-ҀYB Ӡfu$9f|ދ22-SՒ.ŧ8YEm‚~vş j(6A=L/lO,N>R} .$B[H3 CN5&l rti_80Tk>/81?@H'蓍JEQTNN{ +50>JNOu *;P}~P +1,x;՜T W%F=W׵%pRGASlɘ.diG r +>\ruGv^APV^Br2xSF#:skUY@ ;o0]&Y!`PkERAJybtMPO;0"#PcX\:$bZ@)6CEgI;/bRuxigLFduL=hN'2ё1jk粍>oggrdcӟBJoTH5ZFPgda .E/{ Ls_^h :Aʴ\rt9T)՚Ӷ9~YlXy'lZmEw_"݊>gHw\o8.RguL^4/*3]R,D>U3ސ_+BCcu;D2cwg^je +;qϹgT]:+gaQVu(wO?e4,'.t[ +W$o,eVߧ?1e5LyݙGEŇō׳q7\$hrymrno#P)%Y@INY^boi7v9†kW +M0d@`qu +5Pتm8|.D-,L䥔ȉw2 8ZPw`G@|jF-<2&I2| P_s2 0C(/ éNKdNŇTi ࣭ՎtvT?6^cJkvb`V0DɷYC-D[BTz9${nL"ă<(ʢj,r.N,5U*,q+Six iۡf~3[>R̡dyH .dCvvz +?"f{iF@SI|4Kr0u`7otk|†RUZQ cf;0cG*h_*@#'VU;gI>8EHB3G5e9+whrL/J5ˆҶ$REKS:SJpw[#do1 5*=Tyڊ$zN?~QC0)n~)E` H Gݎ@@ d[Aau0!Eʺ0v\EsE?r[:;s5B">'/>wgRII-Iܒ\.C[ߞP=E>?y^J5BN,mU32|x%`3İpj+Pf& *,.-e~=*5H%y4Ƒ +/jfJW)ebi&.ff;drshQt-qGؓa`ݞ,eNxh&0 ›hrp;Aiѓk4h96wg1> d;gc 1g}sIH}lr5̬_Q\*Ϧp 5#Kr&a׼>%t60/Uݟ(aGVc+aˎ0JEf*o )ըP)TԘPҐ +U&dWHTG{L9R 2T!<п$ݹg<$A.K.Ra BaqJC{Kvn!|: SIARBxL`r;=Uki5V3 9HS!JBw=+! }rw+a B\X#2Kv? kBDH+3[Q,AZ')$„IɄ<LȲ$%3vfUkןN6!Mr3S>q}ؼ9ƍCo`{txom@Qu:KC0 w$/߿oߧӮx+@'O_Dc!6 s o{wbYYT-zz^9{Lw +r O6~(}#ss]n(voC{uuU(IW0B&;TZՑm*m2ۧ!3X{]>r/PE1iHs`1>u>RO~|ˀvM"kMݢB״yoqp0W*mfU4oE%Ry^I~b Mpa[]_)uU.oQ-jt-w2yEj;r1؉4NS$aR5 4 +Gu3`눧2I Vq"&%+T‹׽Tmhç(6)DR)DOբIS$;pAeZR53d~EĜ(E/Fv8!9~)P)-90gRq'ا/T AXF +l2fag[Yk7W~&mpaˠB +Mnl_w9l^\?ºqbDttAid(!MG0(S.m4 }AZRi[l[ע ^ +[&A,ru` +p#~`@s};U`N#omd .&y jtپRH..@u=I9Z`f}O"u6F{aaMб6(jFt󹸘Y&P"[i)hV͸|n`>/"F} ]7}` ?LWp신,#P#`n_!LE Tp$|mV_vǛ&;] >C3Tb 'obT?WDnݼmkAH mZĂ'*gFD͟$LooJE{NpCm%Db&|DXw7 .2Y]s-ͯ7)סI9Dpq/WvZ o}Ep}wy2|}LF1Gۧ P)iyq3\Cs5I3(&_J*_<^ćk:!-V-9ՠc V_,]g=/,h|.*N\dmJ&^RX?RQ9v/hi"l>…3 薡`u&0F ;5iT<}xVW\؞plÉmWJͲr}^|[Pi^mҩ.Yw|O< W=+7naْX*-hAiå'&([ +S"rgI;hvM3=0FP+\qhA])Ze.D5!MGaVKk:p3GV ɦ *EoΦxik5n>;U3cؘmQU,q~r߾V[O Yyk-~i-X<'Nk [z9 +:9_ L,:=2*R2XRI!:mIC)/춤b$݌@qVyK+ƄJ oLmV'ԣbUC}D㔥NIیg`n,ȤB JuM8*yܼ>V>cU!¨J{*p;͢uj` +So'A ff$;9% ;@e`Z@,+5FLEMC` yzus8yc7; U)dZV݋8z΋-ie[T]J 䃭Jh4͋ +74Z5g\Z_B2kQuVcLe;/^o8'8sN9ѱ4 YZQo0נ艛Jj p2Z N[z(n/C >8#D *~kr%r_d +=E%z[H!66^Fo%l1H r.S{SO7Z!`Q(+*`݋AͣlJ̜6n'r3J_5l$hzJ >蒤_W dBl|MIC%{F &}K v }\S50T@{Ba~GA:ګ\zIhü 0BR +rĻFː}7/XLQ PbS[z`“8x*p/4N:)+zõCSC4mTh+m}dd'_m۸զ]k8O7ʡ&J-U82YUMNWڬQ0չ)Zl)UBRE*W"4VL hHGWŖOp*0ƛ!է U%kf&*oYU\QgDXCabv' +EG`UxPJ ;;$A>ɪ}yUDvVj +X[8-+ UynN]VRIQWa]S|*j!:؈WP0ͥ*&) +8#H${afъWax?*dU04$C*r\f*œL|ȫi+Uo+c bfN? +fF''5;/J*Щ;9%Nнd/h͑a݉qnediF$FV5gJe8*6Y=keRrk.QZB)av`L9zS)e H^~qt$y2÷_J)y.btC/k/],W M,1Y {7 =FT*ӢÏN갱/ǪGFq<, +.tB(QG@HⅶX2H8ѻIOVA6ָIrE$ԣ ?@.y;D7{0 "B)ΓR_{;R9FL`Dn\Щ;L8Ae`c;~u""1d^lnQ:Td@VFLwћ^aĶ1n%pvR2!zeQOji&BۙâJwQ^#3(\|^+ %a*ҹӅS52s-PS$"F[zQ}$Kg%tŌRTdqPl#ņFr1|#\8=&6Z:hoƫVAsrt*bbcަJ;qjU.tahFAvmkAP +i}D1aAThxtjtp~{sAP7F2׼qqx?:8,4&sZ+<;p2: nwQ\< +WB07Ց館_mI~7gl`"O>F/ Z< IV #`[*)C}&(f+,ol1=jx@4la* +} +*p OG34NK➕'ϼ1K_bnX?vx?z.ٽ^cpLtG2QZ/]\qi8[dԷlx ˊ,!HcQ1ċaCc#劅ϕv1"OqCF2bxW9?D^2Spne =8 +X>^C鼾k 9,ZA?`3]JIt%骙"9S|%n6V啞b\EmdH@\Xf?so18ZM.\<дQxBF؂qI]ŀ`ctB!g£2i|;ldmH_-6 p}A#זXAaP,H rgm:P7sX!XQ4Q$Xטr\kHxӄBʘ\4j"#!Cj|WhBNj xhױ3^h<3sBNE%k!`1H\\/o؈nqNkG-R?/m{j|.襎l|)r-\agF \dWc")S-0ª(KhkW +?)#E:T7\\ P(>NqY8V"vg[}N-FzCJ_`Zy/SU'PDuSm) P~R%WpP?2wxhMAĢL-y.' 7 "_բ +{4hVY6H=SGVך6#^GmYK/R!Y-EF.X3Hjq = 2Vb>SKcrmOt&nj?l&l]ɾzU6ayI'3j4֎"zڨqxvH.vn['>^,]%V >^+xM0=V,5_%~}YzZ"dok.'΅/ڑAL% ƧQ^>.V:}޴^ǜ @Wȍ1$(Yc(3G,vO/DdakIK5OYclf^Ѱ4BOu[ ) (l0ud\[3j $ZpJNmng$[Xr="YT1β^$9Zbd6ՠIwy@ : ڡ;A+ iLޖx$Zp#rif:Žzwd}y)*YR4f1; ^N:lƽ412S/P4 HgQ#E HEl#cE/5.CARcM_lM%$ /5L":`wP, +=JgM6[!`ѻQC/iATu&#i:KBt!L U[@\zgi +n ̺/uH"`FL5Pέl>ak/RHpOhn/d7^ n)Kk;V2G%j^ ;#]|wAD&fM };tm}͙DD/Zp@D@$ICZh{3HU;Ca+\.yH^8_/A/ydIᎶ]!&ZC4gU/^F]mNK#[43IQ\>8 <ˤ zfE qx^|:1u"3/K0ا7AVu&EY 8,ˬP  [< FD6_׺u OC,[a+uq4C,R%=GdHʌ_Έɚz]ձ1}tօ^ heyi/Z-Y0=0StB://X*{zΏ+R&1 y*l18.) q52oQ +![t7WH0 BBJBj' %+^cH ّZ@X`!xu +|O|kZ?i1ceep0;t +)QٽMf)P'|볋ˊԟQ +#E.K݉0ܟ2CKm +9Cz&l1+aNU.4b%\56A:2?z#|23l5JB@n\&+DR`=0DXW\=l+A +c zT$nI.&n2։t]82j%.P0Ꮐrٹ4%I^zgV[,qpv8R!,(rMS*v.Еkln֑'؋X> vуw"ugQ k)CqÎ?L1<F/ `2J5{! ++GM_b0#?O.l{iî +\ ыA1KPڊ{1WBB/x;'aLǺR[B +7e<fK̫{ge`X~!`<? [l\-!:u-{p~ziT,v@q\f*AXг(c B Rp؇et,*Y2z6eerpr\F3vڟWq:@zq3p)2'#i!8lu,W@tc33 Mfy52C8GyfI*W6s|7 +LxFySQ-YqR``yPkfmQX o֝gźfmvZ.k[V5rlUIVR{EȚ'{WCV%.&KlYgHP* )fȚvnN\׶yM\[$!ߚVc# +_~;#HoCu9 cQqnOá6R7B62)~|5./jir7{<W!Vuc/RҦ +:i¦/ҝw3ZCbom$b#YI/CQݘSEm Q?J9vFuY +̄ (mmR}Hu>_?<4k^FtΉМX_"ƀ%=2ybfMnYI7 e9E-C_֏) u8hQ-D "`87pg]Fta>f8чn{|]N-׷+)L'Cj/ F9K 9MY_Vp,l$*>1*Xj8 B|@yx({Y/zr5$G$[hFx,3f8,;̳ ^?n^>uB֞m-ph.ςܮjq}y<ҝI +|| I 5l:qO1(3(雗G$|6uhkhXvAҝ* Qjp`RTP"9m9+̧RjzPjDӳHbB(^Y=!EjEME +=d971ZAi@s0{>nj(^> +Kc; +ˠ#x/c7 oWq -%c0Ptw^V`pOg$9;škz\hȗa0d@+ʓ`s-xḍo1s')g$z#%7G`w$@_דՊ4#۳+%PcD H^C;|0՜&Q"-+}륗^g᚛OgP$5La1O. +e߼{*\Ա>%ݞ_Lq G"2[uY~EKGvo2w<5ު} 3)1 [zY`F%$|0%Q%IQf!df-1 "/Iꇁ_ҡˮsʭ&O)4xUl&;dLx1eٓ"=;)RJ,QO!5߭$s׉E MtPa`uB6PTB8gޖ,Nm<YMm3&fU3M‰MOyarMt8] ♬~US5,RURȁY9)HHl}Wi; pј~aFnͼ='Iւ6_}Ε3>G8=Iz젌ˌ'y+L m `5Hs:3_drFH2s-9@Kq 9 tdv +%s +mD_6si֠WJ57V}Zy'YWf}aXSqXgE1ZDB541VBp1qnŲ(3;%k_eǦ_T^86R <<? ?g9N;:n[E?FGGGGGGGGGGGGQ*3X87b$U XKKW8ZAy2XÞFRC04*+?ԨHi cR0'WmAp49y~`LJ2+DȬ|z%]b @Y) ._f5zqb~AOj A(YT@*޺iUA=gEk#WcK bukÌ&|jS|RbXP +Pxp!bd&[rJvYDxCL,=TiFK 2^V"KfK-ǠD0,FV(U"rU21̊䢤u,8m!,`'SU*TdwJ<9eWXJ -zc"ZyN>S- fIڛ&ks8q2;FGWO:Hy?QÌJ*uAR`V?ITPQ+ XG J؊)Eí{EL9b0xdN *Gos_nuCdESW<9JO2.T^NP>< +'䦙-^ϸD+R^$ }F**8*Ujy5dz X02VHL{;hbdp#F Tܔ̄ (K4b~hrc%C +ZrA}\7 v F Yt<Eⓒ3"K0}C$nx@1)h5WDsؿbHE c ^O)u +S% +1~p2-n׎ Ko8QŐ7G5_{=CE 2btvhR<8UK2{ h=hjr`)ԛb2(a#E5AИŊE$U=XB5C0YXIEiEOS,W4|E*L1~Kᖑ_"|1_U˛m)W]AobN/"ϊG'瑜~ѯGcńH˅U!yR쿫*UkP/VO.׭:.U4P JUz[ſaLN<8VH`B R  k v8JҨB#|5&^&ӬB$mdTJ*T@  ةdE JHT䓫XdT!W>|r .dY@JĘ!ZAhEe 'LID7^']. 2<z#xS G k3^-c͓ +NYB5*gJ7g\g"Q;+n[4ܢa=f"0.UY'vN׽Z iכ zV4喐gԫ@XBUrI𣚷ZO[Fefz!5b,T ಋ'gm]Z䦭c.鴈nU'$s4M[oS>{ʇ/픫%8jKszܢdu#9YzNr50DX&ZFnˆU@0(PAj_8>fWr;RO~ QmjEG.z[%as䲼ڤheZA9fRq'-]7QR&A=Rk_gh]?:NC7)QtsIM}RɐpOIc! eIMGiBSpqP<nםVEèM1'A>-{ &=cܢ]j7hOc]+bǞRI,JOj9v#eMw2ɡ,I+:R͑jzJ8r;/[do/`b,I(jՒ{FWG%p7C܎TӴ(aEa[es4~q.X]eu3+ 郒SIEIk:r1zdi5Ep9È<&{zWZ൤SIO-T52)tdkq1.?Bbw S"9}zבv1}T0jO9fwλ?O#M$ B;lsl IAn6'sr6':ZZجrݽ;H=:tݶtJp̛-=YY渚PNpSl2}1ǐ6gNYO)(WSنQRS0M_6X`*~eB(uC1MӚVE˧ +vU/{jUzRK18nRR=Ch9JM lȐͪisZݠ`;~OkbW>NGմUH'ŪiZ6w騜ဂiqiCx)B!f'S5lV-Np 'pub;;UD*s^)̐6 97t8NᤜMu;gnPPF7K,S9ӑ9NtЌwu?i#iTm=n8hsws}jƑ=?͸ԌwYNjٰNq1^'wy٠^s_כ.~ў7_>{Bp,c l^΋Oʹ ݦj4!)LNzwNit]o锛qbA:XY'pԌ&yign-Hܖf/|մe;;"d 9;`[3./8f~q;!qơM=ytS)yƹnZN@QNEŻq ,h<M5-l,96VN9~ Ian6!!{8qkG?0ƺ(TEසG(F7G{^q ` +(cr:ppAtO;#xu^g4Q%n:`q·XiNI\FrB'GRN$W晵[gWXM39EX0ñ:ZsYe즁P\;X0C8v[u$s ݿeN?䦧w;nlp mhC~~IBM HsiݶNhaiM=&e7ISfZՕ|& qXtd~kːecB"4liL٬s=[n{jE-k9MĪ$}ar[+tZ^VmsȮhf} _q<2`N;9w/EۄMis՜vsişWmh!gz`EE&JZ\:q՟'{IwFLj<9:4hɗ KfA RS$Y.s9M:f5Nq@빪iOz' RQYhYׯzpĦEmHEohE?G̢H]oQGQ4iě.8v8&qNiwXr8ffZq%nz cq_&$javMCBHղVD/o2fYiYn[#:.RS]id7Kbl`cw>y&Sݲr<ٍJO[ ٔθ :r2'/񖩝 Xf@Q20Ӻ0<9!6)K篣: H!q7W먜MizIpG0$D?1D_ͱGG%eAO rZ*u:)"n v*=ot/ Ufud/Oa"03i={Ic%uF/jmm9F_y›ֺc!^̔x@7)dO^/I9-~z)_Wtͯ3'm#I_-xIa(k᜛im(jګe(VC'22$<ߐ 9-9/BnBP-Ad8emY;٨Yoݻ<,z0tlHN, mYNi/ JӜ,eD1Oֹmt0AOVowrᔛSТw,Y_uNG܄)R)PxP(R_gMK7!4ȱl?Ay $aKA)JQ$Ð.$ n.D^&7N T W +)Xbw.U?vd{_73HB˗ۂPsM7(`C/;WkPzв9HY) y~V& *nkI^ĠuhUIEvPJMl*GIݪuԬcnR|ZTԛhNGALS9),7.8"#IuaxLu I^'suZ- :g!)r2|G f錛M"E٨Y&_mg˲yl8떥Z6,eN6}q=oCV/Kpm7Xw\mq'MpL65)Zd%*MmC7!kց;ݶy6pNG4lïAURNHuf;pPΦղc܄ۦ{<ܶfh{prQEr9;/$ =IzRO3U_iR[KfQo+{_s%IUьuQd2Ve=J, 0Uep/>8R1LLVA;Lrz\ +>,Wp7C:vSp2Jj'w-:}_Ugc.^\Բ;z֥vگ=۪Ŷrld34Q 7(B&5t)Pbxr8 +NoVNK< x{|!)f,.$(?4՜Ѫ~3޶6{ܚuhdu& 7!&gcnBNղ_$KZU mfn[mf(5Kl`Qf6؟ .~`gʞ8S⏎9R䮯&Ym,>1N1tyU^z~9#X*vMzב5V܊RҴ> $=gJE\U O4Th]֋$W(,ןiHq-ؽu0husq?GԻZ='\7p9Z{s\5NmU&uff܄uH骇 ~ pVNݶX-C92I917ն5pon'EV}L8Ə'oi{Fwu9flşo76:jm=e :OOIΟwv8iq :=]W_'ԟdu"s\0/޶4LIʞre$'D8}Ƒ /z}!qJ/%f~ZjYm0LCYjҚ`j.9Nj.!T-m[ JhWṅWTP9 *oZ5&v dqxdZ-eˢT/-iu"D))-ajUTb%%7OE ;pHT~{ &I_u֏!/~o$MW-efY__5q4\Q`L7{|8Ee",=*Ggk9 84cy;9)Yƫ%b)W5h5dݰʿ`xÓ˦xLMi鏞O9bEveczSƑME8JJOwN?/Axn3hwQvCÌa%5MFi= NtkN'U{zH<䌃{u-Zau'g=Eib!)LΦWM.*].)M CP9EC?xX,RWH1Rݴrv8zX{m͜n[ue)ep_G{~ǙT3dyS#ؓ(%A$~jA;j=.l^NA/;dGլ4LƟ +J(EMj~at +fJlEI$q'zf9^qmց9m?^H闣 z_7 zuWBK~00/ŗs#$,fI]4uYR4t)DUEdGQXn2VE>ZM㡘chR9n\q'r]1l?0&SeQZ:92y7M3JbnC9^gq떍ӡCzKEVجrBPNe:jҺ֠g[f_8Ns(bm$$OiJn𻿯:y7M(#C޶@jYҪ^mW2\_i0 2EvO)g)Z-IA\n?C(Q>ErŐ4peH=k%Lnc<9^'k;Q~Y.i5Y6(knO(G_oxGE|&(I5s.AIZ{,ޖ'QY IzUܾc=&wk~A=:;i<PrR}]2~}/w,zef~'gd>d.tN׵m߶Ln2M}߲]~'sHA kEH%i^umsHh`.ە{mro;2~{M!khb(Nlܞav۷Kg}_t׹ߺ^wr{r}7?oiyqko[gص͗ݖ\y~w͠s>]s[wo}y|[w}m]q|ݵ:<=nn߸M{^2O<}5~.|紉[i}.^-߶\}2nӸm6nunۺ-]rm]m}rroӴNLtN9}\7/w]r}r}w\=׻\~=O}]u[o[zqo}u~9.Zqu^o{q<ܮi]o\osqq]uq:u\qZqqݮzs;s;o]qu}uuZkiz{y\ؾi<{iq\w\uqYiZwD0TTaTL.blvh!#Ď^gBXT jՐb'>EҴQ:ѤH!q鶥F>z9v(pp{>srhUU^+X&-h]UMw]E[*|kE8h@!L@Eti\enYijzqʣ8l<՝Vն>U_sgYjY} A0$s2a7Q ;PY~nnZDWsP335)-#;NX] b (B|,ffbv:feN$O8)# Rק)^Ԍxta'G-hhDX?p /cqpY: A}Q-ۊaf*w\In0sY'o#x JCUxWI4+LЃIq5SVG`Epo͡hfܶfo#%qiQJ!t`G ,%3LXYr$ԻF؝yV@{v;n&2oi`H2ykk |~ZGUj09)qkU,+Gl˛g-">Oa4glM7OvV)he?iAӏax +I";beZ"tOOj35PNFGUuPm 7ri-@|,N6n6cw]ItuۮWIs8QqkX)y)}ZL>P M >b/IXn[7mö\ϋ?=b;Iǯ+ +ePˮYl,j*ZZhMIpXEC;N>̘y~~EJɪz.rТHb>45_9_'KxA%=-SgbP O:<{瓻3E0\9.8msd$`isa1w Wu{2vTͳ&e%0(‡̧q)r0,\@KhCH +i{ kql=T0U IMsG2<b`QR&I =`NxИDum<(%.kJWs$eCB\ϛYb_ S||TM9`eg<=Oߕ=<,iqM4}ic9n8y(BQ~ny.C qR4.I!Dp3.4&0hi՗,Fv:ߧneR5շ0{v4IcҤffhԘp^, ?2BꘑizJt6vv8_Htm[9uCOO~(q&bEaeEJEJ"M1jq>Sw}O/Ei&kOdqZD0\I140$D HygHF%{?m͟q?EX +̅H(Q\#uǬ.^xȯ 붝Gr8ƽWcukj&G3/8LHN$~x9aiKOOͱ~dgCv6ױl[Dž \w7˛$AoE1 +c 5\*6Iv`GSˆB$R/J…L*UZQ"HD`V(+1+iA:rٗ~9~begsjGhqMRJ +SVSt8L E6N^xˆ'xqp !EOg#"0PJPtܢߔ^?kZc_m$.rBI ˏ׍T%OW$٣M? s(/Xa!q_b㰽NǩFr6 &d܄Y:e0q@iQ󣞧w\ע_P +oπt(j[WUdnM-?iPfZ~O͘Jf0pHKfOp-G18`zi#/&*ޚ]̒/g1bpQҳ"h^Yz[$ټeMRsQO b<P Hcv9E?Mz35Рc +h7!}( +$у>nau2vX6jpa!fW4,A,[bi0Z6mVqY2SI!hUB:'&xX̨ph!qa(~Q5E{.JvGnjۑ~igYrWQO,4ȞF=P!f%I.F9ntB>{ӎ իsD lVR$+>HiBO۲ؖTGgߍ=ښߒ;>R5ת:K_>ԔAo`bH ovYv:j'C8}y8OTmq@^j)^o5FȡD$+Z%?ۣђCyƟwv8:hMmͱGOU⯣AJvE[1ZH%C-^+@bFD;9@: #NJHnZ?INϴN&:o +՜D2&^f'lBkZl8%į~G4Rɱe*!?J+_coO",''"83).^#X/OozUtq9:<1d8ǒݗexlTuqS"aMm2ů|]WS&K~$nheO581dhEEIJ^t1/KR,J-*J!\J\2am͟w6PN̐T i)1@1%fDu-.(ꥉ$_m::A/A>0GF FH-Xt|z;e\'/(x9֢~tqz MkE!^{k|z,S.R"jZ2. .P u=bNPp^Ĕ|~EN4fE:( /TXFOOdMoWBr *H-V8H<}ʶu|ybR1DT4jEjg13TXX85+J's<]iUd!XzLj[ۦf +)}dP-`",-4 +U%4t=)-.*0|hgy%=ha--ׁ6ԺN-(M?)ʢ%CTII+eU0˒ۘgÏZêo(u%yq7)]7cqxIUl]ܮlzsE1=?"O:IZvyuᡇrUQ&yNn{bW*5VAâedU:f:0/?ZW>a%Ի_gn 7regFSHJSVqm+)8Iz#+Nb&'OѱxD%-KgT'-RKUΜ.#9|<$|zϊfaD!DL#Hʔa:S@ytٙFEZyH;#iu~TDHt[6%~8* VVBZ0K|;+#w^@>m?I59]q8]'~ru)Y&ㆣC=+nOQےVĶh'/7M{$IB*; !Ii'IHK(eoG?- +?!EnQ,ypP-IԶG̴;M_z߰iN+a|n/iEYav4;xRFry^^Rǥ4u5̓0`,dxbմju4K@A ^PS۔ܺh`tX(YpuMtR,\*U]tԶyNʞ]`!]=xziY2xFʁ +ɋGϧ(VU6\MK˟g1_Wz]HGsrݕe}9]nN^r}2QUr)9ҍ3s[/%3edndĢ&mI6*6SH7GQÚݮS/K|U.+IWԺƕvuYh6OĮiާmoQ3W/Oo>׹r\>z'͢5MU_wݪ^;z}i\7Բ獜MٜYכT+/"e+HFmU[:ݐ3z*}I{eXaL(=?8],v{:$*):f 0\%ϋoV4M9!&Eu-7OTEN 4D9/E +3f|:!gKgqLpΎFr:߆roʚimv.z&u~XC m +BERt^<"'C3MʎV'-4$0. (Esreʹf}HdRl8RXWǫrUwR?N3r"9I53N k-.Ǖv'ɷPmKC2܄&c蓣mh7z[O],I쪒eMyP8s`2"RuEaB>̖C.q"$k?obYvmQ+Z׺4crAƍw40M3Բ|)jci-|&IJ^MӦIfv8N44ᴚvikc)=oGoC8|^fĢי[OMfYn6+9Fo:qm;iy[jk[H&]j?5Cng]qȨ]Qm7խԶ VS&%DfGbՑΐ>8H\,V(^U$k7xc]wanf'C:a(zWX{E_w#cq↣ric{lMpKIG2,3*ʝjnof9bٞ=-j)P 8an 5RJRt)Rߗi67Qr\q$ ]+8٧.r\kUziǵwE4yHD7]a{C0&GϻD峫 49Դ2H+.M n$Ip Xk$7:۾͆K"/EjXr?E4i[N&(IJ,%ICm⦅Z&fAu&+(EwE9R 7ہ,PLDcm܄hBJm ِ5G\Q6E +޷r8&80SNYO}\8v6SdQմ:m}-u8=={&ϸ4U1dκuyOeeD5Jl^Ջp>3iThdJTޤz_qpҭ9ٶ\%2#&1*T[^3n&P!/ZNpו&fq֭m{8XHTR K"}'B,IT^ٹ_Hܚ|zij'Lv̛NX |ޏiYqT2۽GuXUՇaϋh0G=ϋU5 +hQCjLnKg9>p{6w4SE=:j*ڧ h}iV$͔@#( b!4 "A Ё8 +$,Yg[$ %`( )/0*XԠJ f kp! +H(<HPBP,p +f@~P"+H V @:cbmꅲhe{F#|2 +T@J@@![01@A +N0xa +X#$3 pPg #*$ ! R+pA [0(A D1xJ( +ZP lиaZŴ^%yKsE^OsE" VB/?H/` h ``%P >@@ౣK||V~j_Ֆ# T@Fh/! +M(0xI0B +\.  Qwc۶@/}ӵWטH@ PP&Pa +S&ܠ8HB *@MhB +^#h=x021˧oM:&g)@ p +[@)X +LpB$A ]x`6 +bP(7^E5N&UdG &b.XA +X%0at1 " A( M0D8X(;k% _$ejѢG@KX. UV@8 A'z ;vQÅd%_VK$4`,05! Ord! T`B`@ x0('2'&/.icUNÑiZ<`P4 S03a \t=X` 9v`qqY@\}(Kb"(P `* m& +W= %, E <<9 WnAeu +R# ZԐ/ S$DA +LX"*'`;tȨ!=JOɱdeGWB ' a%! Hh +L@"08jHy.=YP)ǴVIt@VB5\a \``$/@H&` +2 $6jpѢ-JZ0RWd#KI"p"YB@0 n#<+X! +9ABpX  bdTLSR/VL`V)z ^P2; `) nPN C >0@J :EMˉ5|j2#.bȀ.`@p`  X 0; ʌJ FrbNsc<IA<`2 +Qz'A2b̨IDvqOK# +@X{j1ی)fZmץ9XX,=t "|/r[1$q,&U1NJW)QQ{۬V)QF(~\n}Ya"jU${Dne\&_viTDodC*/+~Q#e)1Wbu5ѓ83N'Ԫ*C5ШA}M24JHoᵎѣ}}sdoבȊd:hgW_xӬD*On]\L$9GNGph igq5] E:-u<+m^L!_E_L!XZ}91̌Hn .KD:Jϋ&,&e=zQN(eSLa*R^gdEq|Ȑ1>H)F6 Իd:%ق]mM|& tMEʏ-tP!S1XHy|mrdA$&ׅ!t|9WSQ۪8%%=^?>Pvi* e'Cl$bZ4zFrD#%,X …ˊ\`=^&EҡB ʏΣd|j!Xa ^G9 EnL*iI|q!҃ /&.HX#fE,Rj$Hz]I.^68& Z-[>:X!eum+!ϊShœd<-YRX's3.)Vna|jeϢvU.E^5}ёQ=YV˰~ʩ"bтkQ<]>-qCP4x<붭ZErq"||ynی xv7M~͝OCMJ-%]WBv˶}D2QG',~ƣzM/\( TQ%W=C.e}W|Ń| fIizJĈ\@} +fIZYT < z1^J$qU?5{q+ +bFlՂuBYq*OO3\_Ȇjj$=SkOmcC'7ޣd^9Ve;XLv`"E$!f9dp9R#* eus,' RA}2e*b ԪtH` >\N`#cUZp~1(?g?w2Qrb[5/>ȘA=  iB;em1hI=_\3U8O˒~gϚv*>>xainffKRL4[~Ů?{)h$^*R"hfjqO7O]wՔ6W6Ch^~̌>/{nٳ fr{`QǚaVH!I+"ϧeٯ#rdݕ9IÄ~\LQs{<)C%R-$QAˌԟ& +ĎhKf]=ZFhL1%?;tĎMe䡑B"B՜DCxRW^dWĢze. V]{$qTkAhinIt:զ,E+%Q@Aecde$VǡFqq*K d]ˉHn\!%$ė|f&MGK?5EG>d8ht%)q[ +F KFIkFuY41\Q(|g%! +t'?s +HJTED}1}+NhW54)_&9Q=}!Z3~qL2KoQx,!r"~ C%pЁr2`{\ rh9b#e + G +LJdUHQ"R!1媰;>k#))&8.?,PC h7s,5HvWTXSs{̊CeN.D_@IP=Ԡ^#v0>Βܳ&A'"GqmH+E$bAH g,]SAb1Eh})_w]  kįsxhI;Đ1CJեXc~P)5jD;ОY$ ]waW!}HUQ: 2JT5P^0]ϓ&>OBbSQʑr!rrI`>gӗǦB#ƊHK[&}%…!;^Y40UI~UF<<^PB#ERa +x|oUEݏ-b"lbbˆލ$~]\fmONٟEO>be*xvWs0+E?`q .ZWbvDQ񊓢 acEhF [hq̸\QBJJI* BaD][@zjDSbWĦQE|p $@oq2r#&eɏ*T`PtC~˨L#n(.'|UsXPZzVNEHP*Lb2i+^gR2(4VFb}ga S(F>aWXoVH1K;XF^D? EYӦ30WI4*rM] +_qL2 $ƥ SB+hbH?ȏ1iHr=xvGL U +BE*6` Mʼn51c p*Tw}D0h)/+ .s9B@HLj~T>0b&0BXф>TV1yZH4^.U*];q #-(T)ɉHUW$( .#0bm,qsinBE  5RgX‡=4ſaF5b'V4?G rĐIFv;f1|QJ<3#_ /4O (_Nl} & +WUC)bOPb@G H‰vICѸL'ϩu".p4@ ;ԼИ>+R^+J W yR> +Th2Ce" +ČGL4hxp|<|j\ŷU+V\Jxv" RRl,o#%ǐjxҊo==y՗ѿ )\L%&\(}ѱnԦ-X$')0,R'qMtaF q(#!\1cf,8HP-}s6`F1$ IKbUJ-%٫N%w-~ d:)1PkS{]<˖uDѭ +/&/$(܍($2nW 鮒,L^Lر2 +jxĆ '*},=3N<_]qMSEPzqbhw{ѯ.oyNSemIr'cEɛʦS1s\4$s0yNٗ`v6(]]7m㫘eͬjnmRE0E"yfڪeV]H=UZR,;-`Ī+9V?yq29:zȩ^uEVAp/ǓMv~U'.S_B4^NKS5:=!V6 sS7| Q4ovw&蟞"VeճfzQc/C묈$1&(-KZKk8XJJޥ*&k~Co:H"Z6lcEZ uuQ6ٳ I tudpwc[-A'ŕ~o19],QI2኿X`D$fچqT3mr)}ZJ3P(Ze%#ֵEPĢ-#?f%!yV3Ln8!w܉3VtS+j[xdͳk";miPtEJibYN+Q嶑G?EMoY=%1X_- v]y59iM9q?,F~}'q#{st^B, Ѵ?MAkʗ$9V4u!;owˮY ZU?MSMP<@!U!ʲX`؉,YLt1>tEʑ\{N= =%j\Ywhx{zӋb}Rs23 +,4{N9b&_ïGOEfQve&^4/.rAfpR N +_]2RPbH۶r6)ۆ".XH"*`z'3P*~FT%G=?evnݺ_JMK}~sOZi̔Txw56YP軻G1ERQR8`GMT<֞ۻb"I5R>&=/] z?7Mtϫ״~aeoQjP"80{߲ +l,sP Y)Nx4 X):Lr43T~ìbZZU"}z] Wm(BFNƛq$0H9&gW/H+:N1;. T݋̰PI}Xcz ʚLe:%(Zt?;1Xy^BO$cCsf!|r4]r2K(&yJZ}&doL{[I6_B QqPU@,Up0=)"\E&!O%Y}M9\$[Π=Y4` nCn0cи@ VE$% I~%#AEP0p0h(AfV_ѭ\c\M\\ʱ@ `ph,UtF?lL+%. +5Gx08a+ G -$ ЍdAr1fN;t4ʲ#T &6pc9h"O@"lt1htVjM4<(H +( =@ K +; 1>T'| :5QXGl~\$P9h7hB<P"T$0D_Dl҃ R ':ٵ5( (EXЃ=xQ LY鍮'Gn8be6LNvfѺ EDns|Ṓ=wUvd-B0 řq|c*ͺ;?za,@%8~Hd = h~ eL;$*$-L-1]"C#I9mtm{j]܆o+`YOLyW^];md?04ϧJXkmKiT슾A\'WvFpibo(}'nI%(>jon牝y(xvy"I枞3,)]U7D9穗e~? 6O.dSj-HԸiYDG%XEAmW_ܪˊJn\XIs_YOd%ByB;}뱬`Xj|>fa]K?lm8`" @0n}Uuw5ű<ρ?q7&:HхYE۟6r?ِKZfԭcBP<˥%zu)ЌEWYDQ<?&Q>}gѤŒ_Wp9vBۍG4M!ڗ#nTP$H$u+ׅjKX5EDk3Ŷ7ǯ9rp99pT)E),a~,;z8EԶ5I(ji{P4x,aOqXqu&uhE_WO~&_fB\=Aom10M'~O,9͒94Ɛz1bO_ uƑrY Xtk}A)TLzV/QD3E Tx_n|ʒ`n\oX-?ϑퟞ;IzG\Mr"繓dHMU[ZW ̵O(8Zg"DcڢDR T0z~(YFǥa^X*|e׍,$9=Yc~ ޤ\zJ %rѣdx^9f#׶.Q𼦭-߮dZ}:⸷Auc'K6ݻ6J)" .`z>mMgM\oUUԮ* &i% EKv` WYeɎ~a&\u{4nu] u&n+M}hee0|OGQ]pgW\]YtsTu >f߽ΦL(XuE" Y<W[[n1GӾ}uU6g u4oM(+{N<}mSu,O7`hyo8:3?9 iqqjFJtepL)"yj%ݵ蓫'Eq jDۍS-6TPO|=^M5Q +iSt.Z]zKQ[?]|14xbSO oS5\o_n5HV!9Vɳ$:$7B@ĘQnj$n1y^2aW6lu"{^BKr&VI $C + 42[$erAiAqr>T$%7yh]_[~MIkbQSn>~'ponhx'I_*@Z3,+A|6-HV"d?̺ )1imMKqc' EWr_<sL +Gtyt҈tۮv"`bL"S-ꆟvG~zJw!yL~?ǴỸfcr:ƹjuX-s-Ϫ` a7mϚnz$*yDmbڅמL h#m҈d(z~1:iP|O7MOq0)#h@:аnwTϡV\;aҊʖA+&*%>P1c9hqBPzޠn z.NF ~MwZPDh5${]+%xTDpi7b{2EWW +6pFv$mǩZ0- + 3ZF. b1/ML(1c>h@q#zy+`hK +g!4T]$ +==æ)Uz]W{ZD('R +K"X {1q#G8h0Aq4M3o$#r8d'.Lpl;OE$Z|P0lݒ~%y۔{ۧTB)IBȞMLՇQњJӋ4dre-׹a] ek9<MoQQԣ^%U/czVj0t9mC2iS j壓?$]:v^@<]7n̋{GTˮ>OtʞG̿nlqK*GxoQ$S2oq(෋c|^wTRt +.>~ӓ:ȑBxpS] L + h]QIb ?Q2Ċ.K9bPH@, / @pAR㥄2 h/T`h\4hLw<?,@ $NL(?!4ԏ!fAK)tH%{ZFuD 5X8Ć,f -Zy1z9TyiYe,3m<?+K}ƥ׍i!'BդH)FyNǞ{vabe) Ȫ + MŒ:2]D~-;asp/P|V$yr]Sl..ױjךEST4U-?[/G-d^0=p=M<{ TErrXcFEEc 1%AA"hL"&(>~6e B 1JJph8R`7LX1?ŔO0D3B#d̈XF8JX.$3G:1S& / XĘ|mdO~֥r\~$Ǡvu8)- o@1jG "WF0PDlPMgX&i.,+|B0O) +wI5 + ɐ<5K?fهmk$vEU@Qu2DLˈeO܀%`y~6nĶ~8hūkMu1v 8@XR2(&~EKIM3 +˵eKlyž'n6D3,V͋z]TMk47$w4 H(ADG54$I.\*-v:c*9u0SOq5hz71rBƌ *rc$jk$j$1fĿ G.GbU˭.b6M=$QJoܓ$=[z_70EBCHd.bl\N,SE<@IyD8&(W4z& 6bN+>' p"Z8x#X0*ZvH!QkvsbDz|<\8A>smrJ5i)B0L^0׍!áPMa /)P hXJf4  @AШD@OajU_U_Λ&(=Yۏ܁ƙΆxP{E :]u`pt!A۫ +cV%)G cZ+iQ^we2FX~=/ǔ7o˾v:t|K2eaAE +gZ67.-5#%!5qI` JO\nS;0;'~)?H  ^PXN깈=d`$VUB @ +˨/m2ZV @-'_$&$鮣?fbL׎EU%~bxZF]Ew's R +82R[y.(k"x<.!l~2عzEI4#u|Y9M9S+ciIa"$035˨9azAS ~C:bĈXTo& igv:-yHRab0~Q?rXR~i,F̐B TgH(ǰ壟>vY-BdEgY{pHn8$Sѐ},_>G2v+;SHp WEl%C܀D bH|PQB.~⇋t9VYȪU+~z-Oh@ ՌXjE +󽚺"(j$[-{/ (J\pjQfP%=cM}L jfeR/a9jDZ|ȃ\-{pZ!^yMrUz'v ) B̈|,mR\; \*-M@;qqQ47f0GfݰX DeNEۃ1T+&8P˖7)lѲ=8>UM/[ח>a1մ=`Qbnj"v𡂥:3Ϫj?+&qҪGQlw]$_l`9 "j]-}ZduŸ^,ֿ%}8}SvϓdD6\ZfZUh,7#9n62LNhXOh.7`{Q=0jŰZ7ZVxX1#D0(vI5,Qsg^(%gr;s0Vu&Gr$q^_t|û$v豂$V#%xp !j^x^L(^0TP4.^&crmo7GЪΠǗcM8]IIE{-D&xQA 3jphF!&JnEB}G bh9ia39մTϣVyyޗ~ m5+>n\c)f[|}[F?Ljm Fl0+*d~Ԡ@-^dO3|W, b\M}$i^F""}5;Zql=s8Yfڙi׍ݳorG` %LIQB#G *XV^ma0l`'II9UC>M5qq m~ ,mw`ajq ˞W=u)Bbso}<ɡv!Cqc>pI!y'e̐:pHqaCƈmQ*z>^|fϨ`M33$+ZXd /p(YQSlio4=1Mcq]C< +FT*S S +AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&L 2Ad "D&L 2Ad "D&L 2A $H A $H A $H A $H A $H A $H A $H A $H A $H A $H A $H A $H A^瀥"f=*ԦvHv8&hm"(|R!eFʤZQ8 mɑWv{dSrU}Ĭ y; &;T&%nQiǑD4BͶ>4 +_rZ -A6/Y1tNN'B[2?ţ'\r-O[b|_n{$Qﻋe0}RtI/%A+zݞ goQzzJ{cumbW.M162ԓt\Ĥ_n6Nlt3#)!XHTx栧r6x"v6DZbķ>hsf~9J8'sǽYdaxYmtp[2 M/dm}9xF)ZO [NKvK'"C~@l)R)h9 n+:0(on=ܾ3-Uf=%ȋ?zرbE!# SQ)6w]cHE_0Y(p d>?e[N87rj@)wv6lg LsD)#% !]e?J~y|IU)9lӳu%vAo:Ś6JѾ$፛=< ?hR&5IMY1Ii5M/:FiMOۛnBT +qQU>#l6/î5egRemEno5k#.e(]qRtgU-l;b(ʝ{X^z1ir2~czWOZdxt%K[Wp۱ e>޵U[(5{2'~}<{,厫N6xdqyU?M:~Zsd.+Ҋթ=

oe(XZS{yyD0۟kOp;ժ"t<%^yˮd;=ZߓI==*ڒҪ72E +2*3PI`oWwDvQBɘ=uIjY9>gZd8z==244`)y9I5lǩNe%x+"4jvY&K~Y1˝s1'm]c +&wX UK +T fwA] C)Z]E +sr^]Y[j?=sr=G޶ʦZ&# -i:ߪecX,Wib"˞Zc(⠗FШ`^3qw)zRԮv"EYB+~&zAAZW%ziU1" #5*SX%Ǣe_Wsqrdٚe6VUqӢjڪi7ф \F^>y +NQ0Z㢷IW=ˀ<'6݋`~S|U5 &I5MmZ:ds9-4,W[9Kܦn/I-=ؗnq3m4R!VDvbB!y[r v"Df$?rq +/O5/zд-P1E +S] :b(r4 ?ٴbGhه_m9T䲟A:Y!2^GuԌ *ĂyNg ?M6NN8$S3_mhfxcs3\(/ EϱƣhmQ9 D/7A\b{gq7+j=a0?q/IGA:^c|`׊]ңwjn}iq2šc,kl Ӛc9GBLIğ%uFK?";kFЪ6ZK-/4A r`AGjwPRabO#qbE s5c$HEEP/ǹKs)Vˑ81K'}A(zWܚo]sΫun;τ_ɱ z0\V{IMMu<ʞy$WyL$]]z2,Kﻗi=w vK&)w6k'AQl5xs Mw1Aa;9,cGT`״hnBNN z[o_Rn[?!zR<4ڶbHE]v(S̟G-?/~I,iM\TĐ[ CjBKy&9Mws6V%+҈H^#ț"%U%:3J~׎Gp"4ܒқ~X7>U49vBi*z̖VT74T=5ltŰ Nkpû,qeEjtZ?5ws$쏢=9R+VU4Г.xZ&yYdbѪ%f~<)'ɓ៖v#Z{eljXt%9~>})`WK jP@=$=R\.;!J|G.$m0Lt6!,q,Q9.ecL=NXFX)\NZu tUCi9rU En{bq>Z ղEa{?¿V_]_LZCp/nkQ1_Dk~z([XlI{f=;i~tN|)`vԲԌ2eqRAO2Ph9U+\UQ;bS޶A>HQsE< t.LV'ſGa:Vw]MiTZ՘,9nth=Mf<13eD~ +^o#7!fv:0,O( +kۖuӬvMQŦ/Ͳ}4I5`.c(V}3>pױrn։;v2ղ)"탊%/娚߿Iу6DZ4bYr>E =pAu^6A>*V%a?ybu 0.m_=nT䶵"ZOO)q'U0wvGOj38Vܣg[˒zi< fk19!ljԲVU.J j}#ȣ窖Q<|}cmt.~=Xun,r &nQĿS%m춝o-^oiX@1a)ѕ7Yr6i&?ܷ5 hc{u6ZW;/ujN'U72$EmX&=ay!o4Qn:BT@r%M-OsZ֚=/hmI$E,):ci3ӓYjM51o Vc1d)va([ʮzEKIzLRC/!~8e_.$5]I<9ZXqKB$*~?OAڟ'MW0;->_cU-z~V1{fIEIZ`ut}Zgӕ@4Ҍ m俦ybH"Y㸛d N=lA슚c]WS(:y>eMp%9ZQ8$L%D$|Ů;әOԺm^8W}t"z]>]!fhUE) +BOPd]@~=_nݟGrӠo4VTPD2(j}(v_(hgMEZĪ!|986u&7rzzq_==**_b*zWWzJ40l5C[q2Vͱ6V9zg, +endstream endobj 23 0 obj <>stream +]B?.*1  ҟYw?=An#& qL$.uhvR7B%CaQz_w,W-[^)Q7gn?'EYb岻qK_ӀvW̎RԢ{ v Z%z nG)E,yiI~R AȠB]3BiK2eUtܚ˾'$[F2,S>~ɞjz?Q$0ϓW۞x-y~6EK><<7/i% +-Kү+}.s[b Xfo8VPݗV5@z4.sy8}-d :Mŏ:D3}0Eu&-ڥy""0Q9p1!lL'xmZQT,Inp('cOgm,} c.2zܴH~bsz4,ģeH .j[q ЊhirYfQ1څ,M[&o6UkW̦Z$GzމEc<2'"^mױ]ho3'RSR^a3<{EOʗv!\nqP.U&aя_|x,[ ErWK=fzە|Fg>w2M[v|zYzכ(nK@} ?kȄGQWQ-z,kzI%V} Dّq=0]ryŞZgamik|P0AʑvhH +5,B^Lղ4M[Ejʛm}⧺r٘3V*L"Qȥd1}4nHfkLϧgccgY@XbS4{\0_iìǰGM,a1<+fz%PnT/5ms)~Ӭc_Ua<.HK||DaTiױfW%\ĸybM#qYޭӂ!^ yxf=Բ>~9\ԪOd=ĠĐ@Y刋I-Oy59rW VJն"o'AK@˵f+nyfH)m*a9 _clB ,=YrU_E6U2;+KŢ_泓4 ״7K_;"&DRy%w]3L^/HZ.DZ1(~C.d>| /ICJBU3Eȗ"m) L=K?岣Ԭ b7ƪBEB,,MĪI"w>4l/ԏPd&} ?~%=eTc|>.~ղs|,mYo{jk&IJ12,'=TJ\t"q69h\jRzڟw!m,v)FspƥbAqI@+zݘRs=Muf8J,4XĎQ0aJ~Kcc6-7IAMԮ(ub %G)=rjϲ$eDϷx^Oc&5+/0imn#(c +H!)kze*yQWei_'N0hyeףA׍AQMh4*bn[A\O#훥 ~m:O^A牃".$^B`7E 펃EBIQ!kM{2O'C,e](q|Ibv8w/Њ仮=jۺi9hYjQ}2d_Q/}㎛Ħ"v\3b,*NTqԚ`wNڢa$0X߫Iٓ w(=kЫ&Ř)烓J7`bƆ 52ưP.+:QKN$mSwDiҍJĞY򻗣ecZ)Q Z5Y@{]qlɰ]h}`Xet(xr,JnS?K~VE>D V̴@+MoW?UD0 [8-n_;Vmn|pX6VhvC (AElY3<]Stu,UKjqfbS=CBVM%u24$(MqLw. f7"xܸ@驂Y˒3߫Z֓4Q^qAf:LY:Nf4i".~<ة\-[qu2@\<]=f9{[@~9&mx >Y~eWR9VH`w^v-EybtV]a`R{9zPea[hY1.~3RE(:IϘ_u2a[iRHcY{*1р9n\4]-ZXhq 'WNn9ۦ<nH,XpZHMie9~'EJD3sKv,*K~yRQ~c<|M(:"}u h(lmi4Pêbh\@!Hr ~whCچfò99r63wzQ I hau&Y,b/yx^J P˞IU-37\o0" VidRdIheIKʢ<4,\+ۢie d$E) +s[ N }fB6^6;LF^EM/[( ߒ\6ʇq"2Xs*#uㄵm1͑?KBC +6̯aJɮ +nW w[#;dFtyd9>Z5'zm#"yYP!1=tJ4𧽐3'1JZ*I|AC 0IdZ`C%v#W@|̦Ok՞+چ) yVŏdW7I,  o4}eCk9I:Ur&jmȗ%w]9w{ER"\fI]_ #_9Ǔ-KB"xa,h9F]qQʲf`mYEmZzR~ԴN~OJC?KwYd ז̦ +^1EP*uVJ7`-I3WJ;owjS?Wؔ'A-i<1f^/: 3Y[w-<(-{.tN'5'=d _OonmOx=E[ۛ#MK/;0-VMꃋHţh89dzY.''~Ɗ 4`=MCh^h5YB-?/ǖރ +# /\aM5=Y2ʎU>Mxt(/$,X^y3 kJ#Ǒ5-"=[r cQW4yzW1uP,sGhjq,'G|ӪWU&=u۩zͱC +NphLrܟ#?WɭEKv[$K:ɕ̂2&5ZsyӃ/nܲKq\.|ɏB+EÔ<5J\. $B/o7eQ{T5nNJH-$=HZ+='WR $'K@>`Jv\eԦ-uƶXwO3RĶ$ыE[Ģw$i(]G*a_&V%aѻ$eQr#fOSIE/tmEJCԞ)C3*3`m5gT%$&OR1J +EX!9 ,05-AHcu!bBGЪ陚*%i73a~宼zێ, D13:Č~QwɎW?ɘL +Mn_uM%#$?Usm?E{\!y\P"^O0 G.1djT(S fK-A V_>;2G9 p{zl +nQmʊ]њYȃPP9#F2':JV,V!P[L%)hEOrb5R.SpzGf5zMONR)S `Ffi bWyivU~]&D\J2C6딛:rh 8,g*-r8(!0ݠ[0-9Ĭ<>űMԸԼT)Zj$8`TNB!Y<4Ԟ}G bȈ:ϳXp\@*{gE'@!xЂPq dD%V!bjRJ C *hT*n*^,Z|R%.]e@:^<,fx||̪x^$UNh̘ZTeu"E𯷵' BD0%N~m}вDQ0')1%в?Ih1QL5 sDM X*t ED}Lm_B X*ųv4P 2ȰP.&R ay-jhTDXKS|F%q1SU1! +pZvӻf"_Na ̘@5,R\5U?)rQٱUQ)n_:M%5]A/cxo+RU*f=`(IMϓ,:u׍ԥ4VB3Qש5]ibȸ8U%0T,odJ:fٛd^HfJ5^$~]QH*ҘBj7I\$kHͧ7Z:Ԍ^j%lQZŲ>9Zjup\*9))AE:s⧧n%[><"QbM,*?z4 +?sM/B̏=-cƥb}ND9Ɂ&$:ZFkŊ[Zrz8AU=xt#*!\Hzt\F-\ӲF%;5(PjB"}^>԰|P{DKp96=TbK%#c2, +‡m Fħ +^-JCvoGKG .%-OE2Fq(S>=-XaF!2&Mq7bD+%Nå&ÕPO#zwPc%1yR@{ !$WWtÅaj\$/_eϰR+*c +Ք~!Ix#MrٖHz-V#- .j3|AIgHb=NRб2-T P?bIĈ$Y|;&ķ|ZGLkc<Eh85WUl~Y>300NJVX&Ō VGȊUkHAQ }Ĥ< G-d`J- Ӟ-5^ W.HQ C+4ϤwEX%ě ϭ\6 kHȍ$/*~BÌ]oGJȓzjRv{SKQ%7 [1@?ԄQڶ  NB#yZNk=6֙? $sy5JX.Z%G!(kI+X?#Ilʺ$3\Y${M)-E*Pz r]}nq7.T]EJ/'Mد/P6ZRJDApd4 Ħr, r+ jW̲sKoxP݃^ˉKS-|#W>^pOakw*T~\<7g +TCN!H$I@ HD򐘼;OҺ$DA 0B!!B,g;xώ~J(汗jjIK(18d2\SiߴU'D*) )a^mN[?SNVoM& U&:.C%RF Js@)iqQ!1D(cXDA$JSaXTaCYҌPNJqhLQiqa RB0$R֨XAAdQ%#*"ʰXQa&6N(#d hIQV0b )#U"eP(3A@i(T!5. 03Q# =e2(^ SIS@1cJ" :,Rb(P1I)2*-2Δ 1CJ(D+H1\Q#DcDED+*9D e ģR-)1*f|@!eCDb Je&Hcp+>;.qr ;pTBK SE\Ud4*CӝČ6J!#DyK'P!F]q~-qRDՕv0,%R]A Dc=UzmB_ O`'ڠvlQ"=4(5;YP# hi¹ ׾)-!kž !^4EnwfN([k^gQOS$\^i5."`MW!? +ZC䰖K#ixp=9b҇"z\A + hǮE0$/沷pB>P+=KCh wõQlĖm5C܁:JjkKiw/,H&HT:~UzTJ—;rZ"PYTJQ"h%C!P l]wpS7`L"j :*.5 +jbH(-쀼d DO^1װ +<&ưfXl;AVw50b EfpFi(J߽ؗD +uoxҷU+C!!BWXpɶ?Xj@OWGhua(nXPɐժjP}8hP c?uVYg5u#j8ʁM"06G]VS4 H4kL?YT{IǓ8O,ɥw1-UR#`$.7<$;G[BϽ? o L)>э|xetP%9\}'VsDAIJCu8h e^K5 nt# aOHlɈ__O1  ͡3+H86a^9DsTY|VdQ?( ؝tgpYjsh>*^kO3F )\,JRM"d(-l9=:`)77tg N׺?OOV0ƚ2OgUcGS,t̓ɕG[ĕZ@Kx϶/MZ%u FGWn`d\Ɠ-h_>77E +ާ6%`uǴ׿,K2PWmnp16[&x5v`7 +%PQ$Iq%zdaPl@~gn =B;^E` lWlaiEͅ7EnD&*N( =#43NfkmƂiLj>F{N CKmi7Dcv +-ypmEWlS9E H'|ύ2* +=w@TD bm™ke[b}` O]+5̷31`&Lpt]/tE,M[< 5J8z;2?٩c]d$J"T#u\`䵁 +x[# +<s1N4@.M'{yv*6vzrZMUV?Åu_dVTց ,HV{ 1vteUO>"Ɯ$mZZ(Uz +UgP)KrGwRo=oYT2bbP[p1c&d |pY8 J'z&>$ܰ Jbʢc/DTz"T/2[{Ipùv/2p]k?mW Z~A}8nU/ D5Iݕ:sOiBI>W0QˠS:wp;'@P{grVjVBOJqPf έb^ocGKc#njda;q‡K_(Ǟ=cԤ>8/ͮ-(xE2KU <ߩ|deFzD=NX,F39} :yXyZݱhR{jO 27zQuH&X>'OVdRq?WRI"q_~21%.}3&9,M# Fpi p5(6-0H;_""V~:'j$f0KMx1@SO#F)+;RS64ݹv9Yi?z7zwRO\&mE)S$ $yT 0e'5z]%?n3ּJ +d&s^|PFyf$óp4QmcSӓynM 1-d*:Y)ꏵ1dʓ/݆`pHq+rMDaQ& ~JA@zFY O}"*x2L1wI=,$[}X/>R q]N{B;ugbzFE +{kܶW,{=7,l} G#|+,OȁyΕ4tL,^UKjA 4S7;Q KOq׉> ~ޅPzOЀ#G?ձ+T K&8{Ozm9}.5]GAO[Շ]!j[x?͚,3@xS> Rk-qۛIc>/{IR 5݀š,fU%6)Ty"m3*d@jl%0|LJq#a0 i!d@oکCN\DthmhmHo6=; Fw"hvGB;~2k] Vգ3 a{!{I|`jp9:<-%X$y'eID-4e:l2Ho'ӳXff!j!qf/t7_]lUor$õU Va@tHiMCJJ}x7*= gs3T9h^ՂNοPSfrV!HlӺ̪vr8$ٰ(J4Nr9"06{m5[ uS+pߡ{L3$!DV#^!HR{_<۟0ae,$9z*lZgN{y)$%޴& le|kl88T 7(py.^Rs{yj'8+ +QToS4B|$'YMJ bq ƼIl_!ɑt2BPRsfVdj]*@gCu~\d)kCM2]GdMq1>lѧxdq&ZJ(YL߷ +se +[끚"Fan7X? 6Qag89iNiEAQ$?;;YouO`ޙZeE*,*Dcu_ƀs;!a"&Ht^HL9b fYN˫8%;I9wO&|;B#V_\24UZ=nʁ~/L+ψivcS6fk79Shga{`kse'@7fsZ'k]E[0WR$ +d3˓U#"uq>Fl:R{6R M:ڔ1k#(-658fv,szAnrsД-SKNusDu7+H+uuEEC>!8E9+[iް}kλ9N4Ԁ8BCv(mz 6 q:\!pr*zplwOޤGjIm:7BԨ`7$gڑ3v*C=1R8 C|aEy; C|ՐӦ6-ґ,|@HpsO~ʵ!kvP'q)[;`L bR252y@0ԦѢV7KސQ#<$ 5D=5D}@H!Sc8ݪ=$N 9cCksci:朥v\}Ie> Tui6ZS]fךɋ%2o2ҜJרtⳞJ^-|w Gˀ_00mˈtw6d-RbP(,@@a d@@4@2E8@   _:!Nut wݪ +p@, ˺UMZ=g+o9V>s+K}4)^+ pwHY͵! + D)a + "@h@"aJ|Р2ؕʫ|:֭Ɨe8뛫ӝ~qh! f8cɍLQCMtKo,Ei<“|GkxHe +wN~ -MF bvQ44Kb0eH)սtx< Ug;%Jh䭴!*䬸' +q]JQW.|UEQ(jQ**-8ts;Q|5 5-lcbuY< L8V̚:bWaؽ= +4hB RZJʑt|@4j Q_J,Շ<$RZ.cXXwFK,$z+7Whzz ](dE"UCʮ%޻(Yn0Vbyz (;˩95J4klDmې3kD6&7֢(,sekr {%:GWQaiV!qsPLbNyAoWQոwV;幱` 4$1o cCtvXEIj'%B51,afWcí1Kx;c??GiLE(So8uDj3;*͌̆xG2YIoFkeOwnTq*zSieoY݈NZϴG23LʬOK3v^9{O}龤Sj% W٢40'׌J=֎=K{{P˕hً䑦vdI: ]ǃKP}t,׆.-.o{z;vQ4^1rQ,W?%Qs6WCr}f9KE-kFc.[Nԩ 썧i($XP <@ +  ƒ<`K7tQkp{jyUq#ͦB[.]#F(ڏҪc!Z`i>e+|!RU-,s~y7U8wC!zϻSn8$ +wAe;vWt@, qa6?'͝9i ;KTCGî2&u D.fЕ&^44ƨ.M4FB)WVN}wܝ7Ͷm*cp +e2{ba  9Û})߈?wG\]yxXƳmp=+o~ooFʮB|nRސTO_YXXYU7ffxYYƻTU%*n}&.n +=ib + ˰aVZfeeՕ5 \W6nz_ק: tYluv̲ʕbJJ+a-s\WL|oHi݆kcjcv5;UCtvlm m nlmMfF̽1[KlH2Yy(ՈOӚu%VUiU .̌L@h  `Fh4H(I2" 'B`dq^JO KwR#|R͏nJV6>8pX˭B  x%MR SrBZ۔S>ikv3? ڒ97e';bu-&nӦ<9Gp"JeMG4f&jWN/|qgG蘢$pu{|. Yb{4S7$u !'!GԝJr>$^n+oAsN}#@Ez=ce]ws\9=G,ⱠR Ŕm*G] QG܂<(Y㗺˕\hD(Hx%52 7.+[iL`.윦01Pje WDO.T\r'F9HUS?J*`C~w2M'pp3|°?CQ tp`Uץj1j&>+%@iӟB_G2| q:5$-3 !' +J1UKSژe=iY9ӟmȒ u{ lD/F XhaT c|Z1¬޾XH%a\YHzՀ7 (95i0gՊaagܩ +T V@`Cx4Yemok/ZOD||! j[ęGRfV} ;Q;3r@Ob5!kކ"Fu!8ԥ%Vn@*pHW*;VY~ H[c99)d4Y@BR0L)%z4ҤX:O`SY>srN%L(%PPw^S9czXր0 ҕsۖE^~,B +Zw.[N 8EzZ(1S^шQ :9T <;f Fcs[Z^?k~xyݠTl(t9F;/=HXN; 5n]ǔ@)$}Lm!`PIeZ0m^:1-P_F;;}4*5FFsk,.|U,dtDg糒xtǿlT =:f?Ⱥ_ ;k%vE" +I◃.G{kşEUDS +_f]i./,)DvW^L:+'.e^:wVj&&RœѳVG=YPqҜ'}\(/XpGU0./6kq[d2 = FJvD|$~u~S 9/N6͂s5d(_ۅ]uPrxf48tj]T$sF# B\r qalqtRNt{i)TY$S,"pVJ 3իG0/2Qʘ[<51]*|{P'Oa +xNFYQJx>[K@4_Woz&>w/Op,8A }2]ΎzցnrOwރul9%r0MMZ 2 ey&@2kIiw7ANه^J~~VE*T4wcZE4°gUB2DW / 8Uݍ*@V{ IÁxFDB sDE`H$D,po`?z iH}؞}i{vv%fXD[ڽZs*MШUi!Q(f-?X>mItp_Q75:gid= T◶R9VeKE:_g |E727MmjKR.E2ăzL{$ !"7H Uc~޴3yLtlQr6QcU+$T5m阌:ӤC)aUz#D[Rk*uȪL(XznQ!/#O:iRrUp`,Jc!0AR{=H=2#(zm_}9rCh\ >+nIMx0f8(<t70"_V,{4Νh 26ɹ"SE6 +lkC_W,N2G,tGkz}FUD>YlldЈFmLp9LE*$dM6yŵ_kw8RςAUD\Y*ѨGRҟfY-:oyLN.V)]koS%1 E~e"a;CuZCtY讜e"DЅ$rpi)纐yف:xC k +=o` $MvJ$p3sZߟ5sd ɛ\]Z3m.\[`6#ĺ6+˨Q B;k) S$VՅ6[Jչ2<]i1ZWk̟_8X ů>t>SkOj׵zgpUik%Ay0^? rjV +13[szq()0ˤ/h+`NRnIm/tL`Qֹ\6\>yQT d_~,dž7{)/_|P|$>% ҵ +ԺTHZ ZaYhZW'X1/1:udbmk~2xg1)x׺ ٙ@_anzAOKH0=asgV\Qa#ml(Yv`}`(o3ר igL)0]f +A(9Ў{-akm73mRY;d0z^ (L@Y$ȷW>}!3VGvfФy 4AIزl/%s.l/ =вƉfRu5g2w&GO] [T*uvǧugU +{B..%sd>II {Rv7fI 0i 0O5Hיs;fBf+vNyKާt'"8+|u!HԿ!@#^K}T0{u(Zg!p#0b4* +֌+Z84w>#,zxG 9n)y Ac?)BaJϩϊ~73=&gA=+e<9wKxS +wbo·wG>ȡ$]~$fV*0&60{y ,+˚n'+$!F N$AN$!Ɯk'SHŴZ^nV!,fx[k=֪!3GBȡt$ő'#aFP#!:X~kב>,L=h2X/ 2^Qő +d i@JQ!2~$gΣ{ $Aa f$J蔄"1O3%y$FI-=p$u$D z$h[Wa6O?چXNd%$+j-QskHBY~Zu㬮FB0H"VR7me Zȳ[H#x($ 6|ua=3'įF D"b{@\saΐ%rS+Ǔw7GUal:7RfbBLuI~s ڰ4}ph)/'-aqdja9UZf0Y +ELf# )u9ۃ( ) q7,j|(FyN Mm`|PXTI"$f 5P  XL:|&F͙ sZυ`geE֜2bzcPh@X^<-ARMYɊ,^ }M{?ͅAV%Zfus.2Nh[[bIk؈I>WS"Þ#jOEsC S-u>Bo#c٤} X4=ףά{u8D@ +@֪zi=UpG^tmoC+`Y%w .=+KUqrʲE24ngLJlcRZ&Pzޔeeki +vP5 9axp'q>H, ~"M΀2?#~!r/fvC" T?YҾL^-J^'a=)ct\MO`κpKYى c8D-V=D04].&75L7⇴B.FZF-H}hh5=q'w9~L Ÿ1:9BOL2#݈IrgZΰFi Y%7# +6&l5z|3(z'DY$$5Әa +Qe/%:ט (1e/%~ܙT!bx͗Y\o!J7DaڕIP9,9NZBXfӁHQe+)Ծ`J @9oոm<\/%bQD#i{.`Yg!{MiVŁ+ڹq [b.s+FAVcZtw7l;?.P._}@;OW O s砼=Mjk>0nG$*I]=Uf_͝ [Ǩ5˘”!* +Bt^%"Sq 6J AyQFh~'d$K3ef[GSdr%j\d7%  h%Գq:2tЮ~6| >[߶#m"$7GV! qR"D%Wf]Ibӑ7 ;mt"EGO'xcܼuʊIIIsrj3C18CngF  NU mEe$.Y?=o]Y^\ +ui*@֋8oM6F?M{$5f*-O$MKP`tkM;A˟Zrz1*v㊥i쑋 &*ƧPuKp0G@Dx3Et6 hzC4+&d1Jt!dzu6e ϟ_AJkB"2C]*0N}ռ +3]CN$/N0OV5 Pfurq)vqkhA 7*yq;cq;I3ּB %}A_ =DKVIK3,Ӭ~eĉBW߀!d(ol*T!~*Fl?r5~m}e\R#Z7]hY3?rV>͘hՔtáQO +.܊ |Vl%50A w ~Ĵ4yTA"^O Q:Άlʠ?K?9'PE:XP oB{cW ynu*Ievsw~=VCt``wnP]{7+ +{ZE%ډ}&<-H; 4"T J;]Sm_ڦN3@ p U h~ "`=ranFQJo3 `wMж#QƆBXU \lO"߆-n,j DTUznpCeBe11 -E75i&Q$ƌ&lrUVi_'nDZ0[: +rΈ~@4 H◟.SRv2 !aO4Gfͣ/. \3b7Bmblr Umu5뉔;$8#"-vS"xw2Q﬷Bsn$Y\m.t0W^o\Bs^Gm0͡'8fRc3C$51U n8"I`jOő~z1ܪǍUX6J}L~"!- kN[~L~C4rdS10 z4_cKȋՊVI"fz;ǸDYWF6nhDs)'c6oGP ~lˑH&0Ƙu2GhB(CQSqgr=5+5ꗰx7!F5Eb]^$b/w\uMiˏRtD9zt)Eu4C"ʤ!/j.+օ J|`#(fk\g}u uܣ"1Wi vQ6^RR>Bb=s-c W >70ѽ47@0mDC Ӄ.Q}.o#&XmM!ÅO@rWzId9|z.:/X\Wg!{3J 8\jj7W}CX!d8%-?[+D §lzx;DŽPj 셍4R tȴ+XBSp-aC enTTԶ*CbD$z$2Q"U^`ޖZCI!HTΙӏlLʹˬ`]!%P236" : EA ;FZ9&S`9#8H k<_Rn5vM+B7%h'&[IS#\hT9@˾^~7 #~1WP,|⃤ݫ(p ~7b|< '\q(Vޯ{`*HߵJ"Sd;ʾFu\ZD_@ τ#E!2l^?pIQ%l_=Ye0*˱XطS6R9=^:p:3Oy%ʹb,`a {P]Ka#VHp2@ +j#nQQگI<2һ`X:?,zbUdO@dTg]k ܖPʉO?LGbYȂIiIT^ސ=Ƙ s ?f_9W6i"@PS1;uz-X!r=2Wqn'R\=㝋 +$؝>dߨP<,žafŦBةҕ'` & }#7ި +掵^tr(6D/QK5«w歬\IQZʉSB}O)˖B$Ij_6tmȬ*>L 2H-[J +w?9`8!*RJ&B9jRt$Jy PҪ*T(c2N{Xep1q 8['tY yWQ& Wz +Mm hνKH794\ `tYU2kK0Te +s{L)e`K87oG1U$&}, +0aiczo*>]Q)T5K/q~ 18@;` Ćɡ09zѩ*Ƣ NvSwPƋp~:! +' SC=&%¸4*ξ { {XuE*_& ZSB@Q_|#1Ib ]6uκ'n_2k\"MO(I\VZRn; k{ť<5z3*jVׯ+a@ʉJ U,^h]H*6ci LZk; qoX7wj6]&hYaѧ][:Ll1#4E;<9*NHڴt7D0b޸rQ1h \Гfɘz;&'EA0] Jd[lnxY.֒AI)~Cͧ?+%dR+3f'рI~\0c$j*$S*Ն-ԷDʲw)lRt44=7)'\n97DjUc +D8 qFR 6zh$ |oC9+E8.U֞;橕_/<&GvΙ z" \"4`!)ajsVCtlEF$v;͡3<_Koz< pX9+U%>; +)89 +k4b9Iڈ@WdYTWUda1tsj)I$"$"LKFS4k>6=mhCDSI8O +JO6z=F|>xaQBv?U+IAQorDLj3tlw N˸!V>ACc4kcԦLjs72O@nKל :Ce~s0J/jci[GIuP;_Z +N۪^ZH"9c8%Lݔ, %_A04bvSyc$N#YD-eo!21I*N; |2$nVFY]:/&;dQ^ȟZJaeJcDM=1U ߷p!jP_߳fV6BҘ%˅D%YI&>k$& +NMF]0 O4G `n+8,D$U4 k]u×.Eb[z^vrI@jLѝW7%_ܔOfʎ] FQ}w;w7r&81+Y]F;x_q1i UM82=M:-/b- +{B(LJh\# cqY%yŠKFu]+ûu ]CKcLK d768C& {hI\Z\B;_"ЧE1+& ?4Mxq˰gͪ,WQx-zstw*0#LWhr57H +V6N_A>k4umJSk!HƗ~f(1ƒCz +yr0*#EcH +'!Tt~z1ИTq=/X,Io1'(YSus!n% Ǧ!ᬡ6J<pPNv K0͖LZnУyɮ0-z8J +ڣw6gk55E HuW$;hf= +]N\(<H/@r4Fb.ӛh3Z7DϦ;7yf+Ơ* pE&Ϥ3" IP\yXe%:Ya$F )*Y%B8/ϣ14[/_%y {JW74lty̩)%ie!]~ /_TQe*@ ^]>&%_v&L.GYU5ϘZE D»#21ۂޡ۩8,?@.ۈõEB +Mϭ"?H~iä@0Pk$Tf +_:(qG$4/l ՏF;^Aq!" U5 +8vF_?]L?<޺|:B8E,^P`M1<y²/}|af@oNҔʟɸ9Ge_wL6PmHkAW*!6}a8_ c*:(}J,|Q#yUe6'&^FT1ARfZ.7UL^KKmR SҀ92js#́Dk?lPWC5Bn"(dQ~&źa{a"ʓnQ/v5ǔ:SO_MFzں2 &AҰp1Mb[vm7Y4V%]:Rç98Z8 yڤ%|}́0\~fQ~$%C D)xoRAE#ևyj̀ @L!eNX&k#gZaPAc!˗;9sCӊhB)z}dN%ךl=W#ULO͠[,21!w)aI[ՍD%] `@Du ifQ$d{s>i`ϚI&j/8\oVfR#pi<d[̍odžsn6PH)R#o8{ja<:ݤâf!k4Ppu'Π+K/'/Q25+zc[$6aQ + NKy%hN 4`eJ/" ЬP Q*Y]cZd_``W|J- =U* +5Pij"[hk!Qh9֥PwY0IסK/<>R`xy =5.Cau#ڢr/ g,.=C&w%"Q.6B^)GUW j#oq/b&LuB&ÒWTvYV*Oթ`sy*6 хJ 1VQÁ,pQwM6YdzZ2v>;D$Pqk' S7XN\AJ L'A(Ö5KYeq횧\T@v|#eHG`SOjA(R P%a&,+4h ecr[w~A8"kj&xqB;\<¨Œ @.FOj7~~m +H +Ee22} AdvvN|o1Yˠ SO mc`ꚓ0Ml_Il}rDF6@#kJbIΆ22ƚfDƨM.6&Wօ-駞 +G?,@W]!>FR{Q-Փ0X_/9Lœi5F'~~CC! ^qc0zc@ӋSSf<ǩQKH̋hD6u(pnڛG:V)sV8k (JXk!ek.֒>YsL ,@Qs4$ o}F1LdLQ 6TO-r 0>e%T獢Ӊ{bWSjs>.~NNG%7Vd|P>@ 𵏊 +jס-崛m!jޥ7B|]#>;v+ӵ6/mpH5**_sêv8l?kw Djhaٖ=rqY8ǢoeI5,=D,Y6# 7~nwߺr$qlZyYy2 i+ ^#q7֒Mj=D>DC*c趢obl86Ut ہ[ /ຄlnxZyE?/"d +< +Oer8)H߇q!Mp:MMb#[Vm1\ٛ2=6Wvvԍ HǸ9{ZӤ{)ǡ;I '0rܞD!^Eg {VMp /0i9mW!Ի CRB06b'>>jV)wvu21 1%UrzvzѺPf\*AI`2tq%z]YQ#10mi҆ +ftE@13%5fR\S9N1Nhh*7r(3ېl1R 6V@Q =nK6ufXK8r.QſDylxG51֘) Ls!B:I锿WU_^C '^ aܲTӈ;κV%%ܥ?? <LZrVڵ(G1ѴOj,%)T@UAd'T p⫐ +CEF8@/ChjX1 Ŵ(=N'|dD6 jW;꙲޾cW6P1b?e^̦rM5z+}Ɩe\"žJF14 =hvGnZe5=Ty$R8UN &Z-jCC.YoqI +ϰ% 4GM8;{rk𨲄^zRHr[Us`}k4 +~lt2_$7SVg#/O&nQaW h6ZX2봉ձp,N#u<)PVGH> p+\+PAtS_({x%&unbU8?J|'&dA$nGq[FSu[/ kyս?BTiF!bb $9)ֶ0K;8":Djui(.]LJ{D,d>yu%%,cw$kjR0' +a0 M~9T"Qr81ZJf@ZI+hnHiux*N8:"l\h]S~mANPP (ag^ɗp!:R]S쩻:.w`, " Ɵ#}@\*"}K͵~Ղ/ǭ3qiX*TVq#[J>mzV rq%岆J"xw6gxyN從 +Hɪ54} <0*g2Ck$1qj^ %@H7?Gna}(B2b/co~<"Ɍ݂[$i;pC>{z_%on} -P'BM6y Ԍƌk .n= ظ /?Fk3TxaCWBNYʡȯW!5#hrޅB OfLKԽmJ4px6vek W%_:m +IeP5p8'8\Z#F-FJ;1ũx[ |pdY5SI'xzR-0՞,Zv1 fv} HEOǗ'ys^[+廙6{("J .RԂ)[oE" }~ @|g +[H7EԍBF]sd׋6 F598P~C9DI5B?+уSP5қ,5\;FW#L6t. +)EUW繖VyK  yT~8FN =c]NXfhWv15f hR1;}v,J3lΎ]@ NFa5.a'j(P+E4rT`b4Lm'GM1- 50 +T &>`˗}ˋߡ&T6`Í[B/j0bFVkp'1N}VZ<1L!EVOrfxREI'2ptxvg 4OAzcx'O +cY2iٺ( etkcG.ft4gLy{Dp?%4Fi,g, ]8Lc'֗X^3TϠDLj~rΐv7\aႛMvw$L[,"5`C>M]imTrO(,|DDp++;7k'xNekS%Ċ:i'mq`8h~t%',Da<ȞC`hW`Tp  uRkĭjHi + d)^;_nETbQAlowC.!䑌#HOȾ";{1{IS'Tˁ(4ITB$[=¾h^4γ;; ߑL)*s0N&~ ~ g!b@Ccכ5H\cu&b&99b0eH .ѷX^7,eY|uYaQk&`WL#VG ?1Cj$9+yu*ae HeGj )t&U;!Vč)H/ǕS E-TŘŎk*-D]%:b/vQ؀j2?`yʹ(+jd*t]DtNuf]Mah?W!AH0Uv^Pʛx`7#H!G=mЌ OQݔ($: .ЏDB ÐGvB]F_I*0 W?N3ztk׶Z c {܋HRHQ'5j-lT{/dsf`JV^n.~\oBڞ +e^^AAZQ eszϷt걅d&hG fgi@wiOU2ξAr +hq٠ 6_@(*uU cywS-.*N1kؔܘm<Ы^Nr!Fm9Q)<GUyn@شtnmb/'az_CA>I 점 ~߶j+sdD_dtC@Sj?|φXfGuŻ>XFfmA]sY9E ob5bzU [;r֑G*gZxS`PpMjɿ8 Z`VޙLM~E֝hg07}ÈQm@|tMD{-JZI~q͑ȺU҃TqeNݔ3v^n>AG¿u|Wt :i7bbCI#ߔ#Bz~r,댗 ET oin\PpkճwGΚ۠ Cz +.oE,^jùoO,p(yl fE@!o+h5$;іuo+&lP7`b1ɨ&%-'SGDsvq =g`YB܌!9[Q^IL_AdQv:Ǘ9-aUSFheXExdIJ^7`]T{܂mc$KnMBAoXR'])_9DkvC +RWLw PS*['R|T^V!/ESk}Z'u;Y0 PLyfBE=kosK? -խx^FwV֏%uJk-}Llnyu>S]3-~p|nFȿh6%Jz]Dؕ/ Nl4" +\M]y> X䆊Ri -tW7^bqsF, ɺ)Ɛh) ݨb3GͷnL;9WG6T-FNtUnWXn=һ]{۽]Mb?]esrNm:cL )UU _)/ 5}dz'DD`Y! LՇR=w"d +z P \SP$y Zf>b]׹mmQđ~%JE81kRdJuGuмD躎Nt]`GD "u]l Bu:Rx #jQ@1fDڔu.PVu]WO ]u:zuI КPNt@jSY@@Ru6PQ{nZ:cE0F΃ͯwb$Ē܂ ve8Br_ز8fe6h5vLa4|Ƿ nfd8ycxV]9$L<xx~q%_[kMp vySg]c|yp5Kg5[ +va{/ܺn$]UD֯GӴ[|4a,h_8#pnݞo k4\wGLo fo\ʲ ߉|ln6cv6Ɯ0w7}e6PϜdؕ|Zzn z6e +s9zyyUT]W)K|[vE=fQXvg]}kk]IWava@ZܱWz;ޚ˹P,諒8To vlXr\p!v'oL\{cy \v|,Ű ]6K*OMoѷ^Wpl=<+oMf .Ⱦr~knz.,-/(v]sܚ,oCq|\XXo&o 2U4__p=ث1YzC^|̆et^9¾/r^M0^T#3 *=^ٍ=wՔ*uYǯ<<[厽DSS~ߺcBqJX0n? Hd +ۆ5`4jzˍ#_{y`La1]C;wrA7yή_%\?^Y{ sƱ9;ͳԛTy"Gq\e2 +4/TcGѴw~f?r6dWva "YHe=nedeXs_o{۾=,`8 cՒf%qLvit @]!araPϳKϯ~iB׾q\Ox k-vlFg@f.nD71gnru< +#(= \NÕ8+`-_H_o,F +xǯs'$8 `[u'/m] 7| ޡ0d؝I*0FŒ{k.  Yΐn~NxWMμݸbv;=ٹO0e‚ɷ29g$jk:ºəcLt?'s{v=O0MϙgT9q$9Α'Gr O0G$kjNn#wyÑ08<Nbw~L‘mq:x` r o3o392g/p+sew[Ȱ{OMeq/l&8{jz՛^LvߧjgAN=E}Y ,O4n<Oѧf7/7˒eY󲗟;ys{{:#C?nv. $陪7=G)HrG%e?vOK>Wiɥ%fɕ)i\jr&NLY~,sy_0T/gsGSKKɉrgӳoesh/QJPh2U?ʕLQ4MӓSEXyďTs'wZreg{Ӳ_S~)jgyճӧ|Tձ^c},MSx}T45E_y<œ鉎"壪DRTiGԋS/zOQUUUDMSQʹ,MM5=jhRcy)~TM,E/ӱ~._eRxziYW7GT킁DĠ>&zeJ~ ,/&G46^oDŽɟV)C{y}tW<^ 9: rzw:M/Md$^^qF7㮕FC\aFreIHKI$!G(㎆4>RfAu8 *\@vg&nJS&IcqF,8Ȋ T WOi" h[/N(MQf\*^)>' f l֦M)' +NI"X!kN}`bwiw>%IoIJ#aDum%4`0X`L 6z@{bk^=UAAO(!ALN? }/7!YpwoqgRc9V F."<1fv[!.!kʃ:D9g"@*R0KQa,M|e~Ati!C:ۃ'|, 9gq`@! W<-րw0FW&<Ȉ<БxϬB1}z^ +q = t%]΃cycob+НK=Ky*>P:V%&E dң`ֵCKG VhYʊ $jVGUAqvw{xedĎ")v##PZ@t``v^ +Ln:Cu'v]7 6$9W)t]שn"L# B + 麎 VDC Vu]P_h  Zx(:e0 _ u6ij bࢨJųm"#xh& +!'ˆ)*X@73ـ mvx`,EwD']hERt%DuF&ѱT45B3E@_w?fLe3 oB:*J{AM_]ījC^uY٨$ +V䶫=N?Jb(Q9Jb([ߢfL&V˿Ev>NRI%OԒ6D,aCHlRd`.&3IȔ/ioS` I徼iP2- !ocjҦ>ƞ# |Lm܄2^.rO{Yr]CEfYZ+}[)23EE<"Ni֎O4wmn'|ZqmEw +(]AYQR5lR(+&:#gg 'F1A}ǦD̎ɵ۪nHO0MD +n5BS!]c~/R]!V2NW+;Z5mwV8`'a/ +g>P!ӣG8 u eu>TK&B[ Ɓ IňEňbGY#Sh P޿V rJ_` f{L/!m&t:B((.Uu1^B́O0f/|fĒ-eKRT"Dp$-eKkH"R)J|oClO--zdtfLI3id5l߈H8|{\@{eKP'(CW)=@0`2EoS-q3ExčeޡeQ]{&IB((5l~$?^bj˓rϋ EŹjґ + 2PHN +:xTiih Sk)id*ܭlO0Pez|EP v p +-OWvApnu1M`Y79ݐ'dz% D*آǁ6&:rdQhY"<2U$x1:1$y H:m"rX,) 4yv1c-yCb$R1D P[5^iY4(LrPuv5Y|:w}ut )ybⱷC+[A7`@P Gu"Kg[IL!e@cnRSRX"pm(%"RCB+mar*p W=/ҁ + +8``rH9F\aljz6 Qמ`@c=Rj{.Iڞ`0mUǜ#U`6er3%tݰ!VZ<n(!J!*w{Bks W( V5 oaZXY(BktEM ?rHB8|" O a7mv Pҙ2&PI|QIB` MB@oDqj1mrM5|`ZޭRL`6l feyRYi'PBk$rO=Brt!2P0/`Ȝ s,s*Hp,+Ú5M]i:p{a.7׌״[ah7o<0j:cy:86i>u(\c٦nayhH s-`@9O"@,):E=dAsxu7h Z` `+i1q(gAX +- Se'§jj:b1hkah+ѐz8/dNWםCg; Chiv*@ر\YjG(b# )hO0A2_f[IlCZf#(i6!I! y02!ES3I˫hջ%m+3L1'NK JZqkV2cGm$s A\CqѦ>b!'">k,}.0M!HLO3D䍹sJ ce9)iCT4HNVS5,e]eW:!Wk;̕HYbSOsfMZ_`[ /gA%s R/k\kKJ5$%/ǤNM[]d!(be} ی84F$]2Ma1Eb)5 10<ȏ!zdX\1>~9hRrQ10a]&Y[yO0+y JYUŪdU{B*o90I>CR(M# +l76 +EJ횂$/DӺ>&ӯ$b=H=`XGcq2Jq1@A ұ<.W ENz\`VhKK'ڃ5WD 1X<`\mKYWmMK:d])FA3R`oHmF% +g~16\B+zc4Г('$nU(=/q4@U be]wu};D/!,[]̯ԖPHM!Dx;$'?u?{u"{cUHީ7h~(w`>HB +[S[6bgG]OdkD.ք *In((k-V0|>70O0 !K9 +٧Qߨ==y0֒XH]UdBl$+ *Ǫu5!=0 LnL*FI:#ܶޖe$J듹ͥCf G5Neq8`g*meERt[E0Jn2q8m(2^ ²aC1Ў5$[}ZN>v4*#,[.95L[2z|)P#wy܏MQXhY8"e#cO4eK'G/EI k] R)ZL$JEUeIfE,Ag0b% #tJ iTΙ$^F;вpDrp4^=Crf|w*ɁCx\aJ+vtb8CA*:2 m ;Ú ,a bh{$>Ig`N)JHFbECCmiY}rB&28ƑIQAB1LUn]۵T2/Eۻ 7VS)I핣$k8؅d-_\mԡ뵬ASmwe|h{XL˦^G@BaNN\$1@;UY>RvɌ`K'Ƅon8Ôl(ӫŧR~(Ư1Λ&wq3qO"^I"^ +j}nG`T#Z +ta m}$^US7x X'A}@\M'n|JsO3pPbh&l~fk!)ԹKs:Vl$d8c^hITFr'mԪawl_8&k;QB5^4HrzR()A߂?6E'`q!Gm:BbVu*$]2 dHݹ-$9z)6e@ `>JDڝtzx <a-Qߙp+ߚ1;Ig+Z*[P1%VF,Dt@C_Ce;ѝ e&Qv§m%V1c"B4Vؤ3bLjkcQ$h].BP܁PsDFHKF0T?VD`IlIoJ(鯲ya:1BLnAo@5EƁJG:q=}!1"5`J_C̈aQljP{H-5OfB: w3)Zh@8^f)SFv w}fރސRj\>8]W}z؇g~ا._'BǬ9f`6q[1-_TME7/cuy2CẲXQ[O3݋(h0jai;o%Y7 XR|3Q`JBa#\Y/1%Qa`IQ,)6/ԫۦ&rR-x(Ӡ K]l}Oby _{+?4 ïWUxNL;_ʴ_٣W#_i{DGrQi>;m)Wi$Z)$ʷ{'bgFl *ҝGڵ <2(x]"80һG 5?6+$USRmU%-O &?*'v}>&e?]2ֆ&%jUxBn"u#y:bRLzm\bR rФ!Җ5O^n`6q2 :MBDԬӰe=|Ѝ +g+Cgι7On2 p!am"cV(;zhI˶xMꅴ6Wp cR'-@l9}TA}<Ë>JuR$G祿TWhaIV+9WzX~fE~a:)-I$ F, V~*b!OQ -qxILzv0\Jt%H+ft?@l=+4ڵ z{A ?-|n׊M;Lze[ͮJCsŏ^ ȥ8+) VÌh?9C:N6~9mRm]s!fXjVmᒻ.nMNx-My^6>*|!yuidc[H ]BW^?gJȬgBHw&Q#$b`Isnlh-OKWZˋf)_(4= "ߡVo%)jъgz +5l'Hq:\tk }XD!`و>=2ԣP<teVMQq a\Cn`/CR_[IY9~x9mjW%f%Ǭm0VS.8DYrqrDrn3Kh !0tFgc7kobb+=*v(k-]@w |$'w@L!-xe9'rqZJ`bף)*ՊUE]5h4?Ͻ2<b@#(8!8P|l M@Y"ٟ\bj!L9:'qB6=ē%A?0YuSb({@` șUR>d5xLL_V6W/pr W^Ȗl8x\ "u^̮{ѡRr}oM0\e v?PξS:.A'hJ>}xb6p xQP ( (@#+!]`jE-ۤ4X,@B.2;`C1Oa6MBrWZ>#C1L5L: +eE\2ܥa(.$_MЧ1p])stڸj0qKeqW ]Rd-EAkҾpfNobY!']bhIy^VYU4^ko@ 3 M/ Ai,H'/04"t)0_2e@S5`Fζ#xp ?ZY +|ת*d01C3O ZZՇ+U T>&,8:ͣ:8C㈏j/8DD\p ^{HBB$QC׀\P>f~k+0%J#ɛ=w=9@ x`N,CBdz%'9-DygB3`Hk;rpT۫W)9R H4aw( + ?T(ca9|JXU1;TRb2H<25) 4Y6Y[=&sݴ Qdqu>W(e@" +ǃ.,8Ѕ19{Y@~ +!_!K"i cvf{mV>,Gx=o,D <:o*R7eq;V ̛/~OVK%ݿ^݉ ~0ox$ EMQb;H6&6XwyoO }8 e?`/ 2+Jl-Λ/hs[Ee;mmX$/Rgtr|]Fctr;4!_{`Xm˨)nQ8:3[mw<9Aw>R,j@sL6BvOzDH4CLJ|K#|+DfF &&t~i-mv=zdZ3P@}fEd?;o?:@}_"OUy>K0X~?T.g/_zso~`RY,!BhOVORu +\Pb"rA=ֲ#̧޿vUD;\'A.J$_5x9v=jy;qAUXDDR?B/ !Y]@2>lyKL1_]n4Qэ~Dp*=5 +di yeҫc[GIT_ċGləehf'dlRr6!a,,EܺV)d`: KU~#cd oaN.p];.wfsz\3gk\I@&>UEYĦR7Rya],nM~qmzʦ_% +PO4VbhRzae۹NT.F5j/ @d.E'Z߀L\!Dc#o`>So恉eS6iG +bBI|R*u\,U,tRɫ|./k]Ps +`UXȍE 92Q9,e>.l=!AjZqFv/b +1ߋt]mhh3:)RL}P%cw(kyyb?6Suˆ ]tf8 "MtH?4q)dYp0,uV_#}M}(SHm YV[eۉ%"6֌I\Y]OfpJ4JEU6[ 7V{ K_p |Z|y?MRbWLyp6 v& Mo5kLHJwlx2wJs{B'6ҔGBE +QMlՇҋmjdến>*-kbr^,c99CKisʼ$zM DҟL̳ij q9Ŭś5W c'Fj*Z Q'@Q$z&IKAfX}M5l&JuׯRӹ'D5mS_ψ漓AM+\uWKf^_k,ᘘHϠ薯ɨdJ`)V=ww[5T0q^R]3Xɴi K|2~\F,lSb XN yG5,[F~cdX>ɑġlp"fyD~8c< -[?K5ߗG)hsf=?vq ~wA..`HeeP;\GnPY "l 9I" +`j61;pVu/PUC_&MY~Ñ 9 ;UFj+:wO@pmQ +#%@yvLT>a"D]!^C=dmjQp$`9&ư4)d?,Wu8}ʦ]17p +RZzwD@b=Ѻ%di/N +&w'k- FCؼzgFZ2rB9'41tDey~Ƌ|(7O``u; %yf3jbT[A]*n{iu᷈9, )6IOaOĥia 6qQ;ih k$ImJ˛MwT98si7k+GS-7G`͠(S hף//A3ٸ3ʗKőd|DNG"- .8qezT.KӔpQ7&G[V᱂H1>fs +{8"R-OZ1˅hdc g7G<ė+UaҐ=1$Tz; b=ྺ8nD.V*zڊD_8$9jea4Z (XaSPp +'inp+MEOD<aWak%Jf +Շ,t"/@n΅"L\K,-v4  4yv$JYz2{X38sҲƿ\AJUIF1ig۞\40Crt9DU|$Thp Z+EC٥C6u?#S,7Dc}xBĘdԹj S2'0|@12h#*[}0A1b{/T\?n.\H@Q?<2=OpE}mֹ#{Q}z6~ HWm:<#tI,n 5/C-9>Lx XA֐ +J +&K"DcIgׁx\JcYx E;uKtor"Dukmrj˺D_-dL۬,A;0E9KhRN%NY蓀qp UF<N+DӴGbZ!{a)pv歄SzӉeEI#ScG"'m +oRPX=J"Gq &형1BCjRnm\[*VX+ +[w˃Vq&6O!:z˒C#5JFy,r/DgdyD=^]O@-Aͦ_\$hQN>1U_KPB=ݞ[ZyH C(U3M'oz% +hkSZ đn luC36gvG y:p) +qh#@~I6+u Wn6 z?ylPO{9ynƌo7`OZCص,5Hw  +TƷ=Q^+8^{A6ALr v"Ϙ(rgMX3֙۞l6a'ޤSmWJnݯ);c, ˮIwlO8Ɗ8mwՈeDHa Lj)5[C AJaD(Lt_U=#>#~ʋ LE:>*S)H^iȥ=Ԡ>%(Il5:jrbvnMPNqe6E6IT 5ݾ- Y $vɑ+=˜ϗ28a:ϔN@_l6Q퐝 &RY1o~ +"O6Qd1/2%e=c~K%Iq\M3 )c4B]}g8O2fu:VTuHe&OjH%}~hA[yTzJP>0E/cBml'YMm;0ǛU]Pzq#s"gZ?c0EFѯڋcK@@P7CґlvWӒBLKVbǼLTܰU^2G,F`OO㆏`ʰ{c*m'ǓeЉF_H9"[x8S9SU/?iQzZ{8ǔ' ަZK ZގGcSn$K-4LY:ǺGv3X~C=~݅GQ&jJF2Ͻ&=RPtZ:Ki8q\7!۟^2I-ȅMǷ]J-O8p94䩫-nٴ0m4q=!u! +d .l( <-0 %{d"3i@=_ KAKEY +枀kxusg> +>stream +CAsjZxRh/nH`A?kuGJڲ!R9^r)Ik.:ATK&.|=Գк;DZ_v[S%ql}FSj|m >79 `̟FtT>Ӭ +\/@9b$z4RPhVΗJ] D$F_h rI*όtδ"(y]ZwGR$t?Yփ z[ S1?L] ě&*)V7K%!dF +E,>0٢WQ8Th< c-8jzQ]4!)s^]V,dm;馭[# \=%@ęɷd3'ɉRPAb}{LYrA,3)ZYf|]MF6Mm1rf/, t, %oTԢB'I^-dZc`n&|%6r\lx+̌q.gc5v]47~fxJGЧˑzާ*li-T uCm8 :MYU; xƐNe?3[Gj1QۭS+y$<3n I48C'Ŝ[bmn H.cT9JH뇜[t0fᒀd:8X02,wnt&hoOuW RP.jqpg̀fF~¨*X2s3E)A [M0^ JT_mn:ƾE'ri=iߖN-jܱDn*ܶB5+>geU A==% +c7jXb7'拁5 +{z19ƀZKCd[Pq" ~AVٲ`Ú`Fofl"J8ߧu h]Ĕ4S\,3ݗs"65a/%XXq['?"UGשY"+cu\fftTEn[M 5ָUe >PUX,{eЉƎg3*@E^j'FL¦ G*پHSjUoZJoi.ֵM)b@T$"zc\goŔJf*`NiČB <ե7tdH Z~dϧQO@ꌞTd{Zx [,{^` +)[7I-\Au)[hX)Eȵ^݊w>ٛU7(,M٨0''6HqZ!}kIИM͓gC5 .X2a`#LvKm`"C'G؎^ףp*#L Rg }#첩5G蛊7qt%$,v7z`O#@c:FII6f3es>Y6" uxghQ{n8Oab V?lZWRe0=UWBӡnJhN뗍FQtcl~H|<\ŗE"1/nXM$LG:@JZh=*#? R"fHSE#i %w(0.~_PDž?B$ +kpIBY\JKL6Xy]f 5g?%tb ̲pݧ(Po=.B"os79LT L"bNpBylYkP+dZVR Z[?qxclj)~ Yyp÷(>7sWŋ*El ++#9]ˏfiF3hϤL+ A{G(fcjdlwi::=j<@m :ڟ[q/2նk!ZďS'$;JYK2Qje0݇wY;!r,HQȂN C<<ǸMꅥ"U-9w"*Yo@TsBIb|oL :;j9զxˠ۞j lzbCg0Ѧ6( +pȼ^]ŝw< HM[0N}5ղK>^9/PHf[T˖74+T;Xv6߂c^FTTr Xsp̍Q1LT#3*Cw2DCCxcF ̻jST+yxDQH +KJ Y=&b[P$ D3 +eCDPnTEa~ѩq=/'?uUɟJ ~q Cm][*Ra]A杍z8 eB&gjĚ,(^j1 +lGCC,F/oq? 0„t +kghYՏkN,;-U*1} h +Q tbii:_!YTu-!a(ڨ*Ta["(b=?xp 1pc#e !'lZW;$6 A&ꁗX' ᬍ(ijYhs@eYۦ\%wDuYEzC w]STG;#N@%YХݞ7vn$%[B),֢`Yw+y3|ON_,Qx[kё.KTZ230"x<]0ZH!544LfUɑ=r y'rۙfRIX!+[p$ﰡ`ifҦ͆>u0Kn)^jf)7qC]ВT)[@| E9V"m-pe>q<]k:BB+wl3Cm^=0A!@9cv! ]C6ŌdtUWaC%_oaIə(N r\(8Qs'%wB `E1h5N{,C?W@^gOZ  uaMBՕйCD\} [ߌ6ᩱ\'&݊]u.S|y`t#YuDʼn=# |^ /~#̟ha߮k2X(~K'QۗzkhB#6 f$ ؁Dmc M,+>X- mg/ +0~7 +n'ˍ*CL 8Er)Mh` xX}Á'|3XrJT,(A3 ]laTB vZQ Kӵ;CJ|."|8rbx4U(BK&/؊WG N1y7DC!@V@c;>hgoM*\Hr5)t]7 "fQnnJ^-BKǡ5"!|㺨߁27:gE4f@9dAP+9pU[~ c!83C%3,fScYCB--(/=j_!S$f +. /Őqq$NK:zZUkr=6rA@ ioMtFѢS0zM/_M#t*Iߙ1Q\jDF["޲h/:q"R.ڦJcHJqC .쨈'QT@G7Io3mF|]#kr 3b!4UPNGfMd5z^_6qWJZf֘M d7j]]]+/h2\$Z>+aDJ5BYy֚ب#'ydEޏ.j(9F6A{[Eӵ$]U!)?iD~j +%#qsxHޓ,%/pG2ԛrhMM%)" /;Otk'}N'yy' q+ A!T^v'P :G2wИ +\oH @Q1 rbQ,^t׎Tݾ?.୸TfpE"ctCBxޅJd5*2Mռ\r"ڰDG8G\*'.A4+EBa,B (k`uXD&i'UP opW" ?zxS'" $KKJt湴L)2 8IoXz~"D&%}љ!S~FM ''V (}+8Dd/tMiXVB)N\d+KSTp,0߂Mбt1)yM:qK ϙkp(inbaj2qwtƮʆ^g)/ģcG(``yd),G&"0c\axE:u!0rz֌Qذ d"Rdhq^dᧅ6dX9uw,ν|s5s Nru1kNK|A3ڐ4m.2EO0P'xƕ6$QďM rb1P 5ᭂs B% QPQ7КXCR"-bwP|X,^:Q/TJhiX,`ԠbM<-}A--O2-TK>-q,s nri6& \s8ǙAj`2LaykV.t!5-AC< ^K`[Ϸ2{eAư[^~.riYwr2+GJ2Ga)@ڏhz 8>\ˁ؀@Q) YAUtP0u5aJ*1&rßYNZQA ( V ek}I$\\(:eN)Ū&a)XܤO):OXn殦IGvsvU ٚ&@]`'>qӎ.5eR6W;JX\c(PJw] /xcPGO+..L”ldWSFBxXԊ/K$uN`WRnOF[[ u>G{ʊ  +{.2b86[$ +{%0F9<@k2u\fHg&x'L  +xwO\H:e阨YA8bv]~XwheڅE5ْߋc!Թ~EGS3BC tC ݩ{5po~LrӋe*%fQߗQ%q(Of!1 Qh!JO,ML}M( : %ΰ 7sz\ַO9*5]GgYyq\ (U5H7J+%X(ײ13i47T |6 'b<}9K =wpK9/u='_@{咻5AP+`B]&2Dnsőj;(wvIv(mGAʻH .&nkgn(TAQ0\}D@GDS[?Q!sԵ;FHv9/2%:մ_TZ.4.Y#^}\)>vA]v̓j(񉶛g$NQzmRnK(.J ^]DvK#qЊ## +endstream endobj 42 0 obj [/ICCBased 44 0 R] endobj 36 0 obj <>stream +H\Mn b.`3 mzmm2!l7יyfz:ϺxssiY\t@h]~RY3!")--aXsgK=IVdKwtm &1H=KLcDT;Hͬ&6D`j[MvEz^ܧ{랋l^Us +endstream endobj 37 0 obj <> endobj 51 0 obj [/ICCBased 44 0 R] endobj 32 0 obj <>stream +HdK +1D}L:1(,aEDU/U݁Sb3'>1fi\L2 ⷖ-s/2G4B+e +BڨORh + ;.jKA@Q:R{ԅyki`V44 +endstream endobj 33 0 obj <> endobj 52 0 obj [/ICCBased 44 0 R] endobj 30 0 obj [29 0 R 28 0 R 27 0 R] endobj 53 0 obj <> endobj xref +0 54 +0000000004 65535 f +0000000016 00000 n +0000000175 00000 n +0000022777 00000 n +0000000000 00000 f +0000022842 00000 n +0000000000 00000 f +0000000000 00000 f +0000028459 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000028532 00000 n +0000028772 00000 n +0000030267 00000 n +0000095856 00000 n +0000161445 00000 n +0000227034 00000 n +0000292623 00000 n +0000000000 00000 f +0000023243 00000 n +0000027778 00000 n +0000027849 00000 n +0000027917 00000 n +0000302145 00000 n +0000023645 00000 n +0000301828 00000 n +0000302048 00000 n +0000025094 00000 n +0000024981 00000 n +0000301420 00000 n +0000301731 00000 n +0000024081 00000 n +0000024377 00000 n +0000028336 00000 n +0000024439 00000 n +0000301385 00000 n +0000024918 00000 n +0000025129 00000 n +0000028220 00000 n +0000028251 00000 n +0000028104 00000 n +0000028135 00000 n +0000027988 00000 n +0000028019 00000 n +0000301793 00000 n +0000302110 00000 n +0000302184 00000 n +trailer +<<3DF9902BF72B554C8410B076CE7E4393>]>> +startxref +302367 +%%EOF diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..a093c74 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "env": { + "node": true, + "es2021": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + } +} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..688277f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,22 @@ +name: Release +on: + push: + tags: + - "v*" + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 20 + - run: npm ci + - run: npm run build + - name: Create tarball + run: tar czf catppuccin-gitea.tar.gz --directory=./dist . + - name: Add zips to release + uses: softprops/action-gh-release@v1 + with: + files: ./lugit-theme.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eccf49d --- /dev/null +++ b/.gitignore @@ -0,0 +1,164 @@ +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# Support for Project snippet scope + +# End of https://www.toptal.com/developers/gitignore/api/node,visualstudiocode +# Support for Project snippet scope + diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f7fe484 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +# Add files here to ignore them from prettier formatting + +dist/ +bin/ +lib/ +node_modules/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..4d8927b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,20 @@ +{ + "singleQuote": true, + "useTabs": false, + "tabWidth": 4, + "printWidth": 90, + "overrides": [ + { + "files": ["*.yml", "*.yaml"], + "options": { + "tabWidth": 2 + } + }, + { + "files": ["*.scss"], + "options": { + "printWidth": 100 + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2c4a516 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,39 @@ +{ + "files.exclude": { + // 📙 sub-libs + // "tools": true, + ".design": true, + + // ⚙️ config + "**/**/*code-workspace": true, + ".cocorc": true, + // "**/**/package.json": true, + + // 🔄️ CI/CD + ".github": true, + + // 🧼 linters & styles + "**/**/.prettierrc": true, + "**/**/*.eslintrc.*": true, + ".prettierignore": true, + + // 📝 readmes + "**/**/README.md": true, + "LICENSE": true, + + // 🗑️ + "node_modules": true, + "package-lock.json": true, + ".gitignore": true, + ".git": true, + // "dist": true, + ".vscode": true, + + // 🧪 tests + "**/**/test": true, + "**/**/tests": true, + "**/**/*.specs.ts": true, + "**/**/*.specs.js": true, + }, + "scss.lint.emptyRules": "ignore" +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..91ec279 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 lucas-labs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..444efb6 --- /dev/null +++ b/README.md @@ -0,0 +1,255 @@ +

+ +

+ +🎨 lucas-labs/lui-micro > A lightweight scss library for building themed UIs 🤏. + +

+ +
+
+ +## 📄 Documentation + +### 📦 Install + +Download with NPM/PNPM/YARN: + +* `pnpm i @lucas-labs/lui-micro` +* `npm i @lucas-labs/lui-micro` +* `yarn add @lucas-labs/lui-micro` + +Then import it in your `.scss` file: + +```scss +@use '~@lucas-labs/lui-micro' as lui; +@include lui.init(); +``` + +### ⚙️ Options +The `lui.init` mixin can receive several params: + +* `$theme`: default theme configuration map +* `$breakpoints `: media-breakpoints for breakpoint utilities. +* `$options`: map with options for the library. It can have the following keys: + * `reboot`: boolean. If `true`, the reboot will be applied. Default: `true`. + * `basic`: boolean. If `true`, the basic styles will be applied. Default: `true`. + * `theme`: boolean. If `true`, the theme will be applied. Default: `true`. + * `merge-theme-with-prebuilt`: boolean. If `true`, the theme will be merged with the default theme. If you choose not to merge it, you will need to provide all the necesary variables. Default: `true`. + * `color-utilities`: boolean. If `true`, color utilities will be created. Default: `false`. + * `typography-utilities`: boolean. If `true`, typography utilities will be created. Default: `false`. + * `fg-var-name`: string. Indicates the name of the variable that will be used in the theme config to set the foreground color. Default: `text` + * `bg-var-name`: string. Indicates the name of the variable that will be used in the theme config to set the background color. Default: `background` + +> 💡 All parameters are optional! (defaults will be used) + +### 🎨 Theme / Customization + +You can create any number of themes, but one of them needs to be the default theme. Normally, the default theame is created when calling `lui.init`. + +#### Breakpoints +To set the breakpoints, you need to pass a map to the $breakpoints parameter in the `lui.init` mixin: + +```scss +@use '~@lucas-labs/lui-micro' as lui; +@include lui.init( + // this is also the default breakpoint map, + // so if you don't pass anything, this will be used + $breakpoints: ( + xs: 0px, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + ) +); +``` + +#### Setting default theme +You can set a default theme by passing a map object as a parameter to the `lui.init` mixin or by using the theme creation utility. + +- Using `init` mixin example: + +```scss +@use '~@lucas-labs/lui-micro' as lui; +@include lui.init( + $theme: ( + colors: ( + ... + ), + variables: ( + ... + ), + typography: ( + ... + ), + ) +); +``` + +> 💡 You can see an example of a more complete theme config [here](./demo/style.scss). + +- Using theme-creation utility: + +```scss +@use '~@lucas-labs/lui-micro' as lui; +@use '~@lucas-labs/lui-micro/theme' as theme; + +@include lui.init(); +@include theme.create-theme( + $theme: ( + ... + colors: ( + background: ..., + text: ..., + primary: ..., + + // nested maps are allowed (also allowed for variables) + grouped: ( + a-nested-color: #fff, + even-more-nested: ( + ... + ), + ) + ... + ), + ... + ) + $as-default: true // set as-default as true, so lui defaults to this theme + // this theme will be also used as a base for when you + // create a new theme +); +``` + +#### Setting default theme +By using the create-theme utility you can also create themes as non-default themes. This means you'll be able to change between themes at runtime. This is possible because themes are made only of css variables. + +```scss +@use '~@lucas-labs/lui-micro' as lui; +@use '~@lucas-labs/lui-micro/core' as core; + +// setting a deault theme called "light" +@include lui.init( + $theme: ( + name: "light", + ... + ) +); + +// creating another theme called "dark" that will not be default +@include core.create-theme( + $theme: ( + name: "dark" + ... + ) + // don't pass $as-default here, or pass it as "false" +); +``` + +Now to change themes at runtime, you'll need to set an argument in your tag: + +```html + +... + +``` + +To change it back to de default, either you set the `theme` attribute to its name, or remove the theme attribute from the html tag (it will default to the default theme): + +```html + +... + +``` + + +### Mixins + +#### Vars and colors +The library includes some mixins that can be used to access the theme variables and colors + +```scss +@use '@lucas-labs/lui-micro/color'; +@use '@lucas-labs/lui-micro/var'; + +.my-div { + background-color: color.get('primary'); // background-color: var(--c-primary); + color: color.get('primary', 'rgb'); // color: var(--c-primary-rgb); + + // it works with nested colors too + // provided you defined your nested theme-color as + // colors: ( + // my: ( + // nested: ( + // color: #000, + // ) + // ) + // ) + border-color: color.get('my/nested/color'); // border-color: var(--c-my_nested_color); + // dots instead of slashes can be used too + border-color: color.get('my.nested.color'); // border-color: var(--c-my_nested_color); + + + + // get a theme variable + border-radius: var.get('font-family'); // border-radius: var(--v-font-family); + + // as with colors, it works with nested variables too + // provided you defined your nested variable as + // variables: ( + // my: ( + // nested: ( + // variable: 10px, + // ) + // ) + // ) + border-radius: var.get('my/nested/variable'); // border-radius: var(--v-my_nested_variable); +} +``` + +#### Breakpoints + +The library includes several mixins to help you create responsive layouts and styles. + +```scss +@use '@lucas-labs/lui-micro/bp'; + +// @use '@lucas-labs/lui-micro/bp' with ( +// $breakpoints: ( sm: 576px, ... ) +// ); + +.my-div { + // create a breakpoint + @include bp.up('sm') { + // styles for sm and up + } + + @include bp.down('sm') { + // styles for sm and down + } + + @include bp.only('sm') { + // styles for sm only + } + + @include bp.between('sm', 'md') { + // styles for sm and md + } + + @include bp.not('sm') { + // styles for everything but sm + } + +} +``` +#### Typographies + +The library includes a mixin to get typography styles from the theme. + +```scss +@use '@lucas-labs/lui-micro/typo'; + +.my-div { + @include typo.typography('heading/h7'); +} +``` diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..82d7a52 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5699 @@ +{ + "name": "@lucas-labs/lugit-theme", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@lucas-labs/lugit-theme", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@lucas-labs/lui-micro": "^3.1.4" + }, + "devDependencies": { + "chokidar": "^3.5.3", + "eslint": "^8.43.0", + "fabric": "5.3", + "imagemin-zopfli": "^7.0.0", + "prettier": "^2.8.8", + "sass": "^1.63.6", + "svgo": "^3.0.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "http://localhost:4873/@aashutoshrathi%2fword-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "http://localhost:4873/@eslint-community%2feslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "http://localhost:4873/@eslint-community%2fregexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "http://localhost:4873/@eslint%2feslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "http://localhost:4873/@eslint%2fjs/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "http://localhost:4873/@humanwhocodes%2fconfig-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "http://localhost:4873/@humanwhocodes%2fmodule-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "http://localhost:4873/@humanwhocodes%2fobject-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@lucas-labs/lui-micro": { + "version": "3.1.4", + "resolved": "http://localhost:4873/@lucas-labs%2flui-micro/-/3b01aad9d6a6b85645f0119ccb190caf1912aa9b", + "integrity": "sha512-qGFaGa1xjDACiVPiRtnvHFVl6A7l3g+3Ejrw2BqluoNv/3ePDvhVRsjj0u4YCxHD4C6DjIVIZaraOS52CB6E2A==", + "license": "MIT" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "http://localhost:4873/@mapbox%2fnode-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "http://localhost:4873/@nodelib%2ffs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "http://localhost:4873/@nodelib%2ffs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "http://localhost:4873/@nodelib%2ffs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "http://localhost:4873/@sindresorhus%2fis/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "http://localhost:4873/@tootallnate%2fonce/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "http://localhost:4873/@trysound%2fsax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "http://localhost:4873/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "http://localhost:4873/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "http://localhost:4873/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "http://localhost:4873/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "http://localhost:4873/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "http://localhost:4873/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "http://localhost:4873/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "http://localhost:4873/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "http://localhost:4873/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "http://localhost:4873/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://localhost:4873/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "http://localhost:4873/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "http://localhost:4873/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "http://localhost:4873/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "http://localhost:4873/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "http://localhost:4873/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "http://localhost:4873/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "http://localhost:4873/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "http://localhost:4873/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "http://localhost:4873/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://localhost:4873/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "http://localhost:4873/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bin-build": { + "version": "3.0.0", + "resolved": "http://localhost:4873/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check": { + "version": "4.1.0", + "resolved": "http://localhost:4873/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-version": { + "version": "3.1.0", + "resolved": "http://localhost:4873/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version-check": { + "version": "4.0.0", + "resolved": "http://localhost:4873/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version-check/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://localhost:4873/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/bin-version/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "http://localhost:4873/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/bin-version/node_modules/execa": { + "version": "1.0.0", + "resolved": "http://localhost:4873/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "http://localhost:4873/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version/node_modules/path-key": { + "version": "2.0.1", + "resolved": "http://localhost:4873/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-version/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://localhost:4873/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/bin-version/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "http://localhost:4873/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-version/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "http://localhost:4873/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-version/node_modules/which": { + "version": "1.3.1", + "resolved": "http://localhost:4873/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-wrapper": { + "version": "4.1.0", + "resolved": "http://localhost:4873/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "http://localhost:4873/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/download": { + "version": "7.1.0", + "resolved": "http://localhost:4873/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/download/node_modules/pify": { + "version": "3.0.0", + "resolved": "http://localhost:4873/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/file-type": { + "version": "8.1.0", + "resolved": "http://localhost:4873/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/got": { + "version": "8.3.2", + "resolved": "http://localhost:4873/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "http://localhost:4873/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "http://localhost:4873/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "http://localhost:4873/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "http://localhost:4873/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "http://localhost:4873/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/p-event": { + "version": "2.3.1", + "resolved": "http://localhost:4873/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-timeout": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "http://localhost:4873/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/pify": { + "version": "4.0.1", + "resolved": "http://localhost:4873/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-wrapper/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "http://localhost:4873/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-wrapper/node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "http://localhost:4873/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "http://localhost:4873/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "http://localhost:4873/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "http://localhost:4873/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://localhost:4873/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "http://localhost:4873/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "http://localhost:4873/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "http://localhost:4873/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "http://localhost:4873/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "http://localhost:4873/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "http://localhost:4873/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "http://localhost:4873/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "http://localhost:4873/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "http://localhost:4873/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "http://localhost:4873/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "http://localhost:4873/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "http://localhost:4873/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "2.1.1", + "resolved": "http://localhost:4873/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "http://localhost:4873/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "http://localhost:4873/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/caw": { + "version": "2.0.1", + "resolved": "http://localhost:4873/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://localhost:4873/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "http://localhost:4873/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "http://localhost:4873/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "http://localhost:4873/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "http://localhost:4873/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://localhost:4873/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://localhost:4873/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "http://localhost:4873/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "http://localhost:4873/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "http://localhost:4873/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "http://localhost:4873/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "http://localhost:4873/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "http://localhost:4873/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/console-stream": { + "version": "0.1.1", + "resolved": "http://localhost:4873/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "http://localhost:4873/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "http://localhost:4873/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "http://localhost:4873/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "http://localhost:4873/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "http://localhost:4873/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "http://localhost:4873/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "http://localhost:4873/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "http://localhost:4873/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "http://localhost:4873/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "http://localhost:4873/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "http://localhost:4873/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "http://localhost:4873/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "http://localhost:4873/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "http://localhost:4873/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "http://localhost:4873/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "http://localhost:4873/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "http://localhost:4873/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "http://localhost:4873/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "http://localhost:4873/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "http://localhost:4873/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "http://localhost:4873/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "http://localhost:4873/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "http://localhost:4873/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "http://localhost:4873/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "http://localhost:4873/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "http://localhost:4873/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "http://localhost:4873/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "http://localhost:4873/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://localhost:4873/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "http://localhost:4873/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "http://localhost:4873/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://localhost:4873/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "http://localhost:4873/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "http://localhost:4873/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "http://localhost:4873/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "http://localhost:4873/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "http://localhost:4873/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "http://localhost:4873/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "http://localhost:4873/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "http://localhost:4873/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "http://localhost:4873/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "http://localhost:4873/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/download": { + "version": "6.2.5", + "resolved": "http://localhost:4873/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "http://localhost:4873/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "http://localhost:4873/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "http://localhost:4873/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "http://localhost:4873/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "http://localhost:4873/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "http://localhost:4873/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "http://localhost:4873/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "http://localhost:4873/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "http://localhost:4873/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "http://localhost:4873/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "http://localhost:4873/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "http://localhost:4873/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "http://localhost:4873/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "http://localhost:4873/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "http://localhost:4873/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "http://localhost:4873/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "http://localhost:4873/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-buffer": { + "version": "3.2.0", + "resolved": "http://localhost:4873/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "http://localhost:4873/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/execa": { + "version": "0.7.0", + "resolved": "http://localhost:4873/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "http://localhost:4873/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/execa/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "http://localhost:4873/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "http://localhost:4873/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "http://localhost:4873/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "http://localhost:4873/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/execa/node_modules/yallist": { + "version": "2.1.2", + "resolved": "http://localhost:4873/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "http://localhost:4873/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://localhost:4873/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "http://localhost:4873/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "http://localhost:4873/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fabric": { + "version": "5.3.0", + "resolved": "http://localhost:4873/fabric/-/fabric-5.3.0.tgz", + "integrity": "sha512-AVayKuzWoXM5cTn7iD3yNWBlfEa8r1tHaOe2g8NsZrmWKAHjryTxT/j6f9ncRfOWOF0I1Ci1AId3y78cC+GExQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "canvas": "^2.8.0", + "jsdom": "^19.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://localhost:4873/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "http://localhost:4873/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "http://localhost:4873/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "http://localhost:4873/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "http://localhost:4873/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "5.2.0", + "resolved": "http://localhost:4873/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "http://localhost:4873/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "2.1.0", + "resolved": "http://localhost:4873/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "http://localhost:4873/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "http://localhost:4873/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-versions": { + "version": "3.2.0", + "resolved": "http://localhost:4873/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-regex": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "http://localhost:4873/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "http://localhost:4873/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "http://localhost:4873/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "http://localhost:4873/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "http://localhost:4873/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://localhost:4873/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "http://localhost:4873/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "http://localhost:4873/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "http://localhost:4873/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "http://localhost:4873/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "http://localhost:4873/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "http://localhost:4873/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "http://localhost:4873/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-proxy": { + "version": "2.1.0", + "resolved": "http://localhost:4873/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "npm-conf": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "http://localhost:4873/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "http://localhost:4873/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "http://localhost:4873/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "http://localhost:4873/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "http://localhost:4873/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "7.1.0", + "resolved": "http://localhost:4873/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "http://localhost:4873/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "http://localhost:4873/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "http://localhost:4873/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "http://localhost:4873/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "http://localhost:4873/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "http://localhost:4873/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://localhost:4873/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "http://localhost:4873/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "http://localhost:4873/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "http://localhost:4873/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "http://localhost:4873/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "http://localhost:4873/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "http://localhost:4873/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "http://localhost:4873/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "http://localhost:4873/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "http://localhost:4873/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "http://localhost:4873/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "http://localhost:4873/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imagemin-zopfli": { + "version": "7.0.0", + "resolved": "http://localhost:4873/imagemin-zopfli/-/imagemin-zopfli-7.0.0.tgz", + "integrity": "sha512-nmffj58rVb0O3AlCZLBBVKGyZ5MYPZZfKxUhvA7bwPGougHl/F7EUKSse9jkgXjdvtJYG2ojJeh5N67mYgBM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "exec-buffer": "^3.0.0", + "is-png": "^2.0.0", + "zopflipng-bin": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "http://localhost:4873/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "http://localhost:4873/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "3.1.0", + "resolved": "http://localhost:4873/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "http://localhost:4873/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "2.1.0", + "resolved": "http://localhost:4873/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "http://localhost:4873/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "http://localhost:4873/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "http://localhost:4873/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "http://localhost:4873/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "http://localhost:4873/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "http://localhost:4873/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "http://localhost:4873/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "http://localhost:4873/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "http://localhost:4873/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "http://localhost:4873/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "http://localhost:4873/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "http://localhost:4873/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "http://localhost:4873/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "http://localhost:4873/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "http://localhost:4873/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-png": { + "version": "2.0.0", + "resolved": "http://localhost:4873/is-png/-/is-png-2.0.0.tgz", + "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "http://localhost:4873/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "http://localhost:4873/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "http://localhost:4873/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "http://localhost:4873/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "http://localhost:4873/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "http://localhost:4873/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "http://localhost:4873/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "http://localhost:4873/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "http://localhost:4873/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "http://localhost:4873/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://localhost:4873/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "http://localhost:4873/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "3.0.0", + "resolved": "http://localhost:4873/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "http://localhost:4873/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "http://localhost:4873/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://localhost:4873/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "http://localhost:4873/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "http://localhost:4873/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/logalot": { + "version": "2.1.0", + "resolved": "http://localhost:4873/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "http://localhost:4873/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "http://localhost:4873/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "http://localhost:4873/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lpad-align": { + "version": "1.1.2", + "resolved": "http://localhost:4873/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" + }, + "bin": { + "lpad-align": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://localhost:4873/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "http://localhost:4873/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "http://localhost:4873/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "http://localhost:4873/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "http://localhost:4873/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "http://localhost:4873/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "http://localhost:4873/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "http://localhost:4873/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "http://localhost:4873/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "http://localhost:4873/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "http://localhost:4873/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "http://localhost:4873/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "http://localhost:4873/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "http://localhost:4873/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "http://localhost:4873/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "http://localhost:4873/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "http://localhost:4873/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "http://localhost:4873/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "http://localhost:4873/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "http://localhost:4873/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "http://localhost:4873/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "http://localhost:4873/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "http://localhost:4873/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "http://localhost:4873/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "http://localhost:4873/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://localhost:4873/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "http://localhost:4873/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "http://localhost:4873/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "http://localhost:4873/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "http://localhost:4873/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "http://localhost:4873/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "http://localhost:4873/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "http://localhost:4873/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "http://localhost:4873/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "http://localhost:4873/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.5", + "resolved": "http://localhost:4873/nwsapi/-/nwsapi-2.2.5.tgz", + "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "http://localhost:4873/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "http://localhost:4873/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "http://localhost:4873/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-filter-obj": { + "version": "2.0.0", + "resolved": "http://localhost:4873/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arch": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-cancelable": { + "version": "0.3.0", + "resolved": "http://localhost:4873/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "1.3.0", + "resolved": "http://localhost:4873/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-timeout": "^1.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "http://localhost:4873/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "http://localhost:4873/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "http://localhost:4873/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "http://localhost:4873/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "1.0.0", + "resolved": "http://localhost:4873/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-reduce": { + "version": "1.0.0", + "resolved": "http://localhost:4873/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-timeout": { + "version": "1.2.1", + "resolved": "http://localhost:4873/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "http://localhost:4873/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "http://localhost:4873/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "http://localhost:4873/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "http://localhost:4873/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "http://localhost:4873/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "http://localhost:4873/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "http://localhost:4873/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "http://localhost:4873/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://localhost:4873/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "http://localhost:4873/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "http://localhost:4873/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "http://localhost:4873/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "http://localhost:4873/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "http://localhost:4873/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "http://localhost:4873/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "http://localhost:4873/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "http://localhost:4873/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "http://localhost:4873/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "http://localhost:4873/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "http://localhost:4873/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "http://localhost:4873/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "http://localhost:4873/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "http://localhost:4873/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "http://localhost:4873/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "http://localhost:4873/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "http://localhost:4873/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "http://localhost:4873/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "http://localhost:4873/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "http://localhost:4873/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "http://localhost:4873/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "http://localhost:4873/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "http://localhost:4873/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "http://localhost:4873/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "1.0.0", + "resolved": "http://localhost:4873/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "http://localhost:4873/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "http://localhost:4873/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "http://localhost:4873/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "http://localhost:4873/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "http://localhost:4873/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "http://localhost:4873/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "http://localhost:4873/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "http://localhost:4873/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "http://localhost:4873/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "http://localhost:4873/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/sass": { + "version": "1.63.6", + "resolved": "http://localhost:4873/sass/-/sass-1.63.6.tgz", + "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "http://localhost:4873/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "http://localhost:4873/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/semver": { + "version": "7.5.3", + "resolved": "http://localhost:4873/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-regex": { + "version": "2.0.0", + "resolved": "http://localhost:4873/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/semver-truncate": { + "version": "1.1.2", + "resolved": "http://localhost:4873/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semver-truncate/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://localhost:4873/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "http://localhost:4873/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "http://localhost:4873/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "http://localhost:4873/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://localhost:4873/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "http://localhost:4873/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "http://localhost:4873/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "http://localhost:4873/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "http://localhost:4873/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "http://localhost:4873/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "http://localhost:4873/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "http://localhost:4873/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "http://localhost:4873/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "http://localhost:4873/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "http://localhost:4873/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/squeak": { + "version": "1.3.0", + "resolved": "http://localhost:4873/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "http://localhost:4873/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "http://localhost:4873/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/chalk": { + "version": "1.1.3", + "resolved": "http://localhost:4873/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/squeak/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "http://localhost:4873/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/squeak/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "http://localhost:4873/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "http://localhost:4873/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "http://localhost:4873/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "http://localhost:4873/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "http://localhost:4873/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "http://localhost:4873/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "http://localhost:4873/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "http://localhost:4873/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "http://localhost:4873/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "http://localhost:4873/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "http://localhost:4873/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://localhost:4873/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "http://localhost:4873/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "http://localhost:4873/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "http://localhost:4873/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "http://localhost:4873/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "http://localhost:4873/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "http://localhost:4873/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "http://localhost:4873/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/tar-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://localhost:4873/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "http://localhost:4873/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tempfile": { + "version": "2.0.0", + "resolved": "http://localhost:4873/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "http://localhost:4873/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "http://localhost:4873/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "http://localhost:4873/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "http://localhost:4873/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "http://localhost:4873/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "http://localhost:4873/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "http://localhost:4873/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "http://localhost:4873/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "http://localhost:4873/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "http://localhost:4873/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "http://localhost:4873/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "http://localhost:4873/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "http://localhost:4873/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "http://localhost:4873/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "http://localhost:4873/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "http://localhost:4873/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "http://localhost:4873/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "http://localhost:4873/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "http://localhost:4873/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "http://localhost:4873/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://localhost:4873/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "http://localhost:4873/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "http://localhost:4873/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "http://localhost:4873/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "http://localhost:4873/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "http://localhost:4873/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "http://localhost:4873/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "http://localhost:4873/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "http://localhost:4873/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "http://localhost:4873/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "http://localhost:4873/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "http://localhost:4873/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "http://localhost:4873/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "http://localhost:4873/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://localhost:4873/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "http://localhost:4873/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "http://localhost:4873/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zopflipng-bin": { + "version": "6.0.1", + "resolved": "http://localhost:4873/zopflipng-bin/-/zopflipng-bin-6.0.1.tgz", + "integrity": "sha512-+aybvXv/xafL6I67uSH5yLHrSy4/OaSOV9tniw4yZFIHpINXUcctVHE/WzHxOONrL2GHzJ8Fd4iDrNyaS6TVbg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1", + "logalot": "^2.1.0" + }, + "bin": { + "zopflipng": "cli.js" + }, + "engines": { + "node": ">=10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..159353d --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "@lucas-labs/lugit-theme", + "version": "0.1.0", + "type": "module", + "description": "Custom theme for lucaslabs' internal git server", + "main": "index.js", + "scripts": { + "build": "node tools/build.js", + "serve": "node tools/serve.js", + "deploy": "node tools/deploy.js", + "restart": "node tools/restart.js", + "style:check": "npx prettier -c ." + }, + "author": "lucas-labs", + "license": "MIT", + "devDependencies": { + "chokidar": "^3.5.3", + "eslint": "^8.43.0", + "fabric": "5.3", + "imagemin-zopfli": "^7.0.0", + "prettier": "^2.8.8", + "sass": "^1.63.6", + "svgo": "^3.0.2" + }, + "dependencies": { + "@lucas-labs/lui-micro": "^3.1.4" + } +} diff --git a/src/__templates/home.tmpl b/src/__templates/home.tmpl new file mode 100644 index 0000000..1f10f3c --- /dev/null +++ b/src/__templates/home.tmpl @@ -0,0 +1,51 @@ +{{template "base/head" .}} +
+
+
+ +
+

+ {{AppName}} +

+

{{.locale.Tr "startpage.app_desc"}}

+
+
+
+
+
+

+ {{svg "octicon-flame"}} {{.locale.Tr "startpage.install"}} +

+

+ {{.locale.Tr "startpage.install_desc" | Str2html}} +

+
+
+

+ {{svg "octicon-device-desktop"}} {{.locale.Tr "startpage.platform"}} +

+

+ {{.locale.Tr "startpage.platform_desc" | Str2html}} +

+
+
+
+
+

+ {{svg "octicon-rocket"}} {{.locale.Tr "startpage.lightweight"}} +

+

+ {{.locale.Tr "startpage.lightweight_desc" | Str2html}} +

+
+
+

+ {{svg "octicon-code"}} {{.locale.Tr "startpage.license"}} +

+

+ {{.locale.Tr "startpage.license_desc" | Str2html}} +

+
+
+
+{{template "base/footer" .}} diff --git a/src/templates/admin/actions.tmpl b/src/templates/admin/actions.tmpl new file mode 100644 index 0000000..9640e0f --- /dev/null +++ b/src/templates/admin/actions.tmpl @@ -0,0 +1,7 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin actions")}} +
+ {{if eq .PageType "runners"}} + {{template "shared/actions/runner_list" .}} + {{end}} +
+{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/applications/list.tmpl b/src/templates/admin/applications/list.tmpl new file mode 100644 index 0000000..a292051 --- /dev/null +++ b/src/templates/admin/applications/list.tmpl @@ -0,0 +1,8 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}} +
+

+ {{.locale.Tr "settings.applications"}} +

+ {{template "user/settings/applications_oauth2_list" .}} +
+{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/applications/oauth2_edit.tmpl b/src/templates/admin/applications/oauth2_edit.tmpl new file mode 100644 index 0000000..668bfe0 --- /dev/null +++ b/src/templates/admin/applications/oauth2_edit.tmpl @@ -0,0 +1,6 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}} +
+ + {{template "user/settings/applications_oauth2_edit_form" .}} +
+{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/auth/edit.tmpl b/src/templates/admin/auth/edit.tmpl new file mode 100644 index 0000000..c30ee5c --- /dev/null +++ b/src/templates/admin/auth/edit.tmpl @@ -0,0 +1,461 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin edit authentication")}} +
+

+ {{.locale.Tr "admin.auths.edit"}} +

+
+
+ {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
+ + + {{.Source.TypeName}} +
+
+ + +
+ + + {{if or .Source.IsLDAP .Source.IsDLDAP}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ {{if .Source.IsLDAP}} +
+ + +
+
+ + +
+ {{end}} +
+ + +
+ {{if .Source.IsDLDAP}} +
+ + +
+ {{end}} +
+ + +
+
+ + +
+
+ + +

{{.locale.Tr "admin.auths.restricted_filter_helper"}}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + {{if .Source.IsLDAP}} +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ {{end}} +
+
+ + +

{{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+
+
+ + +
+
+ {{end}} + + + {{if .Source.IsSMTP}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+

{{.locale.Tr "admin.auths.force_smtps_helper"}}

+
+
+
+ + +
+
+
+ + +

{{.locale.Tr "admin.auths.helo_hostname_helper"}}

+
+
+
+ + +
+
+
+ + +

{{.locale.Tr "admin.auths.allowed_domains_helper"}}

+
+
+
+ + +

{{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+ {{end}} + + + {{if .Source.IsPAM}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+
+ + +

{{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+ {{end}} + + + {{if .Source.IsOAuth2}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +

{{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + {{range .OAuth2Providers}}{{if .CustomURLSettings}} + + + + + + + {{end}}{{end}} + +
+ + +
+
+ + +

{{.locale.Tr "admin.auths.oauth2_required_claim_name_helper"}}

+
+
+ + +

{{.locale.Tr "admin.auths.oauth2_required_claim_value_helper"}}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ {{end}} + + + {{if .Source.IsSSPI}} + {{$cfg:=.Source.Cfg}} +
+
+ + +

{{.locale.Tr "admin.auths.sspi_auto_create_users_helper"}}

+
+
+
+
+ + +

{{.locale.Tr "admin.auths.sspi_auto_activate_users_helper"}}

+
+
+
+
+ + +

{{.locale.Tr "admin.auths.sspi_strip_domain_names_helper"}}

+
+
+
+ + +

{{.locale.Tr "admin.auths.sspi_separator_replacement_helper"}}

+
+
+ + +

{{.locale.Tr "admin.auths.sspi_default_language_helper"}}

+
+ {{end}} + {{if .Source.IsLDAP}} +
+
+ + +
+
+ {{end}} +
+
+ + +
+
+ +
+ + +
+
+
+ +

+ {{.locale.Tr "admin.auths.tips"}} +

+
+
GMail Settings:
+

Host: smtp.gmail.com, Port: 587, Enable TLS Encryption: true

+ +
{{.locale.Tr "admin.auths.tips.oauth2.general"}}:
+

{{.locale.Tr "admin.auths.tips.oauth2.general.tip"}}

+
+
+ + + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/auth/list.tmpl b/src/templates/admin/auth/list.tmpl new file mode 100644 index 0000000..c9f7c0d --- /dev/null +++ b/src/templates/admin/auth/list.tmpl @@ -0,0 +1,38 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin authentication")}} +
+

+ {{.locale.Tr "admin.auths.auth_manage_panel"}} ({{.locale.Tr "admin.total" .Total}}) + +

+
+ + + + + + + + + + + + + + {{range .Sources}} + + + + + + + + + + {{end}} + +
ID{{.locale.Tr "admin.auths.name"}}{{.locale.Tr "admin.auths.type"}}{{.locale.Tr "admin.auths.enabled"}}{{.locale.Tr "admin.auths.updated"}}{{.locale.Tr "admin.users.created"}}{{.locale.Tr "admin.users.edit"}}
{{.ID}}{{.Name}}{{.TypeName}}{{if .IsActive}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{DateTime "short" .UpdatedUnix}}{{DateTime "short" .CreatedUnix}}{{svg "octicon-pencil"}}
+
+
+{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/auth/new.tmpl b/src/templates/admin/auth/new.tmpl new file mode 100644 index 0000000..37d1635 --- /dev/null +++ b/src/templates/admin/auth/new.tmpl @@ -0,0 +1,122 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin new authentication")}} +
+

+ {{.locale.Tr "admin.auths.new"}} +

+
+
+ {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
+ + +
+
+ + +
+ + + {{template "admin/auth/source/ldap" .}} + + + {{template "admin/auth/source/smtp" .}} + + +
+ + + + +
+
+
+ + +

{{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+ + + {{template "admin/auth/source/oauth" .}} + + + {{template "admin/auth/source/sspi" .}} + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+
+
+ +

+ {{.locale.Tr "admin.auths.tips"}} +

+
+
GMail Settings:
+

Host: smtp.gmail.com, Port: 587, Enable TLS Encryption: true

+ +
{{.locale.Tr "admin.auths.tips.oauth2.general"}}:
+

{{.locale.Tr "admin.auths.tips.oauth2.general.tip"}}

+ +
{{.locale.Tr "admin.auths.tip.oauth2_provider"}}
+
+
  • Bitbucket
  • + {{.locale.Tr "admin.auths.tip.bitbucket"}} +
  • Dropbox
  • + {{.locale.Tr "admin.auths.tip.dropbox"}} +
  • Facebook
  • + {{.locale.Tr "admin.auths.tip.facebook"}} +
  • GitHub
  • + {{.locale.Tr "admin.auths.tip.github"}} +
  • GitLab
  • + {{.locale.Tr "admin.auths.tip.gitlab"}} +
  • Google
  • + {{.locale.Tr "admin.auths.tip.google_plus"}} +
  • OpenID Connect
  • + {{.locale.Tr "admin.auths.tip.openid_connect"}} +
  • Twitter
  • + {{.locale.Tr "admin.auths.tip.twitter"}} +
  • Discord
  • + {{.locale.Tr "admin.auths.tip.discord"}} +
  • Gitea
  • + {{.locale.Tr "admin.auths.tip.gitea"}} +
  • Nextcloud
  • + {{.locale.Tr "admin.auths.tip.nextcloud"}} +
  • Yandex
  • + {{.locale.Tr "admin.auths.tip.yandex"}} +
  • Mastodon
  • + {{.locale.Tr "admin.auths.tip.mastodon"}} +
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/auth/source/ldap.tmpl b/src/templates/admin/auth/source/ldap.tmpl new file mode 100644 index 0000000..26eef89 --- /dev/null +++ b/src/templates/admin/auth/source/ldap.tmpl @@ -0,0 +1,141 @@ +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +

    {{.locale.Tr "admin.auths.restricted_filter_helper"}}

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

    +
    +
    +
    +
    + + +
    +
    +
    diff --git a/src/templates/admin/auth/source/oauth.tmpl b/src/templates/admin/auth/source/oauth.tmpl new file mode 100644 index 0000000..a0c5a87 --- /dev/null +++ b/src/templates/admin/auth/source/oauth.tmpl @@ -0,0 +1,109 @@ +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

    +
    +
    + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + {{range .OAuth2Providers}}{{if .CustomURLSettings}} + + + + + + + {{end}}{{end}} + +
    + + +
    +
    + + +

    {{.locale.Tr "admin.auths.oauth2_required_claim_name_helper"}}

    +
    +
    + + +

    {{.locale.Tr "admin.auths.oauth2_required_claim_value_helper"}}

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    diff --git a/src/templates/admin/auth/source/smtp.tmpl b/src/templates/admin/auth/source/smtp.tmpl new file mode 100644 index 0000000..e83f7af --- /dev/null +++ b/src/templates/admin/auth/source/smtp.tmpl @@ -0,0 +1,59 @@ +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.force_smtps_helper"}}

    +
    +
    +
    +
    + + +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.helo_hostname_helper"}}

    +
    +
    +
    + + +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.allowed_domains_helper"}}

    +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.skip_local_two_fa_helper"}}

    +
    +
    +
    diff --git a/src/templates/admin/auth/source/sspi.tmpl b/src/templates/admin/auth/source/sspi.tmpl new file mode 100644 index 0000000..9608616 --- /dev/null +++ b/src/templates/admin/auth/source/sspi.tmpl @@ -0,0 +1,43 @@ +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.sspi_auto_create_users_helper"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.sspi_auto_activate_users_helper"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.sspi_strip_domain_names_helper"}}

    +
    +
    +
    + + +

    {{.locale.Tr "admin.auths.sspi_separator_replacement_helper"}}

    +
    +
    + + +

    {{.locale.Tr "admin.auths.sspi_default_language_helper"}}

    +
    +
    diff --git a/src/templates/admin/base/search.tmpl b/src/templates/admin/base/search.tmpl new file mode 100644 index 0000000..ae1a4d2 --- /dev/null +++ b/src/templates/admin/base/search.tmpl @@ -0,0 +1,23 @@ + +
    +
    + + +
    +
    diff --git a/src/templates/admin/config.tmpl b/src/templates/admin/config.tmpl new file mode 100644 index 0000000..17fb244 --- /dev/null +++ b/src/templates/admin/config.tmpl @@ -0,0 +1,366 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}} +
    +

    + {{.locale.Tr "admin.config.server_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.app_name"}}
    +
    {{AppName}}
    +
    {{.locale.Tr "admin.config.app_ver"}}
    +
    {{AppVer}}{{.AppBuiltWith}}
    +
    {{.locale.Tr "admin.config.custom_conf"}}
    +
    {{.CustomConf}}
    +
    {{.locale.Tr "admin.config.app_url"}}
    +
    {{.AppUrl}}
    +
    {{.locale.Tr "admin.config.domain"}}
    +
    {{.Domain}}
    +
    {{.locale.Tr "admin.config.offline_mode"}}
    +
    {{if .OfflineMode}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.disable_router_log"}}
    +
    {{if .DisableRouterLog}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + +
    + +
    {{.locale.Tr "admin.config.run_user"}}
    +
    {{.RunUser}}
    +
    {{.locale.Tr "admin.config.run_mode"}}
    +
    {{.RunMode}}
    + +
    + +
    {{.locale.Tr "admin.config.git_version"}}
    +
    {{.GitVersion}}
    + +
    + +
    {{.locale.Tr "admin.config.repo_root_path"}}
    +
    {{.RepoRootPath}}
    +
    {{.locale.Tr "admin.config.static_file_root_path"}}
    +
    {{.StaticRootPath}}
    +
    {{.locale.Tr "admin.config.custom_file_root_path"}}
    +
    {{.CustomRootPath}}
    +
    {{.locale.Tr "admin.config.log_file_root_path"}}
    +
    {{.LogRootPath}}
    +
    {{.locale.Tr "admin.config.script_type"}}
    +
    {{.ScriptType}}
    +
    {{.locale.Tr "admin.config.reverse_auth_user"}}
    +
    {{.ReverseProxyAuthUser}}
    +
    +
    + +

    + {{.locale.Tr "admin.config.ssh_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.ssh_enabled"}}
    +
    {{if not .SSH.Disabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{if not .SSH.Disabled}} +
    {{.locale.Tr "admin.config.ssh_start_builtin_server"}}
    +
    {{if .SSH.StartBuiltinServer}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.ssh_domain"}}
    +
    {{.SSH.Domain}}
    +
    {{.locale.Tr "admin.config.ssh_port"}}
    +
    {{.SSH.Port}}
    +
    {{.locale.Tr "admin.config.ssh_listen_port"}}
    +
    {{.SSH.ListenPort}}
    + + {{if not .SSH.StartBuiltinServer}} +
    {{.locale.Tr "admin.config.ssh_root_path"}}
    +
    {{.SSH.RootPath}}
    +
    {{.locale.Tr "admin.config.ssh_key_test_path"}}
    +
    {{.SSH.KeyTestPath}}
    +
    {{.locale.Tr "admin.config.ssh_keygen_path"}}
    +
    {{.SSH.KeygenPath}}
    +
    {{.locale.Tr "admin.config.ssh_minimum_key_size_check"}}
    +
    {{if .SSH.MinimumKeySizeCheck}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{if .SSH.MinimumKeySizeCheck}} +
    {{.locale.Tr "admin.config.ssh_minimum_key_sizes"}}
    +
    {{.SSH.MinimumKeySizes}}
    + {{end}} + {{end}} + {{end}} +
    +
    + +

    + {{.locale.Tr "admin.config.lfs_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.lfs_enabled"}}
    +
    {{if .LFS.StartServer}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{if .LFS.StartServer}} +
    {{.locale.Tr "admin.config.lfs_content_path"}}
    +
    {{JsonUtils.EncodeToString .LFS.Storage.ToShadowCopy}}
    +
    {{.locale.Tr "admin.config.lfs_http_auth_expiry"}}
    +
    {{.LFS.HTTPAuthExpiry}}
    + {{end}} +
    +
    + +

    + {{.locale.Tr "admin.config.db_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.db_type"}}
    +
    {{.DbCfg.Type}}
    + {{if not (eq .DbCfg.Type "sqlite3")}} +
    {{.locale.Tr "admin.config.db_host"}}
    +
    {{if .DbCfg.Host}}{{.DbCfg.Host}}{{else}}-{{end}}
    +
    {{.locale.Tr "admin.config.db_name"}}
    +
    {{if .DbCfg.Name}}{{.DbCfg.Name}}{{else}}-{{end}}
    +
    {{.locale.Tr "admin.config.db_user"}}
    +
    {{if .DbCfg.User}}{{.DbCfg.User}}{{else}}-{{end}}
    + {{end}} + {{if eq .DbCfg.Type "postgres"}} +
    {{.locale.Tr "admin.config.db_schema"}}
    +
    {{if .DbCfg.Schema}}{{.DbCfg.Schema}}{{else}}-{{end}}
    +
    {{.locale.Tr "admin.config.db_ssl_mode"}}
    +
    {{if .DbCfg.SSLMode}}{{.DbCfg.SSLMode}}{{else}}-{{end}}
    + {{end}} + {{if eq .DbCfg.Type "sqlite3"}} +
    {{.locale.Tr "admin.config.db_path"}}
    +
    {{if .DbCfg.Path}}{{.DbCfg.Path}}{{else}}-{{end}}
    + {{end}} +
    +
    + +

    + {{.locale.Tr "admin.config.service_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.register_email_confirm"}}
    +
    {{if .Service.RegisterEmailConfirm}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.disable_register"}}
    +
    {{if .Service.DisableRegistration}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.allow_only_internal_registration"}}
    +
    {{if .Service.AllowOnlyInternalRegistration}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.allow_only_external_registration"}}
    +
    {{if .Service.AllowOnlyExternalRegistration}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.show_registration_button"}}
    +
    {{if .Service.ShowRegistrationButton}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.enable_openid_signup"}}
    +
    {{if .Service.EnableOpenIDSignUp}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.enable_openid_signin"}}
    +
    {{if .Service.EnableOpenIDSignIn}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.require_sign_in_view"}}
    +
    {{if .Service.RequireSignInView}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.mail_notify"}}
    +
    {{if .Service.EnableNotifyMail}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.disable_key_size_check"}}
    +
    {{if .SSH.MinimumKeySizeCheck}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.enable_captcha"}}
    +
    {{if .Service.EnableCaptcha}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.default_keep_email_private"}}
    +
    {{if .Service.DefaultKeepEmailPrivate}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.default_allow_create_organization"}}
    +
    {{if .Service.DefaultAllowCreateOrganization}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.enable_timetracking"}}
    +
    {{if .Service.EnableTimetracking}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{if .Service.EnableTimetracking}} +
    {{.locale.Tr "admin.config.default_enable_timetracking"}}
    +
    {{if .Service.DefaultEnableTimetracking}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.default_allow_only_contributors_to_track_time"}}
    +
    {{if .Service.DefaultAllowOnlyContributorsToTrackTime}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{end}} +
    {{.locale.Tr "admin.config.default_visibility_organization"}}
    +
    {{.Service.DefaultOrgVisibility}}
    + +
    {{.locale.Tr "admin.config.no_reply_address"}}
    +
    {{if .Service.NoReplyAddress}}{{.Service.NoReplyAddress}}{{else}}-{{end}}
    +
    {{.locale.Tr "admin.config.default_enable_dependencies"}}
    +
    {{if .Service.DefaultEnableDependencies}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    +
    {{.locale.Tr "admin.config.active_code_lives"}}
    +
    {{.Service.ActiveCodeLives}} {{.locale.Tr "tool.raw_minutes"}}
    +
    {{.locale.Tr "admin.config.reset_password_code_lives"}}
    +
    {{.Service.ResetPwdCodeLives}} {{.locale.Tr "tool.raw_minutes"}}
    +
    +
    + +

    + {{.locale.Tr "admin.config.webhook_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.queue_length"}}
    +
    {{.Webhook.QueueLength}}
    +
    {{.locale.Tr "admin.config.deliver_timeout"}}
    +
    {{.Webhook.DeliverTimeout}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.skip_tls_verify"}}
    +
    {{if .Webhook.SkipTLSVerify}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    +
    + +

    + {{.locale.Tr "admin.config.mailer_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.mailer_enabled"}}
    +
    {{if .MailerEnabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{if .MailerEnabled}} +
    {{.locale.Tr "admin.config.mailer_name"}}
    +
    {{.Mailer.Name}}
    + {{if eq .Mailer.Protocol "sendmail"}} +
    {{.locale.Tr "admin.config.mailer_use_sendmail"}}
    +
    {{svg "octicon-check"}}
    +
    {{.locale.Tr "admin.config.mailer_sendmail_path"}}
    +
    {{.Mailer.SendmailPath}}
    +
    {{.locale.Tr "admin.config.mailer_sendmail_args"}}
    +
    {{.Mailer.SendmailArgs}}
    +
    {{.locale.Tr "admin.config.mailer_sendmail_timeout"}}
    +
    {{.Mailer.SendmailTimeout}} {{.locale.Tr "tool.raw_seconds"}}
    + {{else if eq .Mailer.Protocol "dummy"}} +
    {{.locale.Tr "admin.config.mailer_use_dummy"}}
    +
    {{svg "octicon-check"}}
    + {{else}}{{/* SMTP family */}} +
    {{.locale.Tr "admin.config.mailer_protocol"}}
    +
    {{.Mailer.Protocol}}
    +
    {{.locale.Tr "admin.config.mailer_enable_helo"}}
    +
    {{if .Mailer.EnableHelo}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.mailer_smtp_addr"}}
    +
    {{.Mailer.SMTPAddr}}
    +
    {{.locale.Tr "admin.config.mailer_smtp_port"}}
    +
    {{.Mailer.SMTPPort}}
    + {{end}} +
    {{.locale.Tr "admin.config.mailer_user"}}
    +
    {{if .Mailer.User}}{{.Mailer.User}}{{else}}(empty){{end}}
    +
    +
    {{.locale.Tr "admin.config.send_test_mail"}}
    +
    +
    + {{.CsrfTokenHtml}} +
    + +
    + +
    +
    + {{end}} +
    +
    + +

    + {{.locale.Tr "admin.config.cache_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.cache_adapter"}}
    +
    {{.CacheAdapter}}
    + {{if eq .CacheAdapter "memory"}} +
    {{.locale.Tr "admin.config.cache_interval"}}
    +
    {{.CacheInterval}} {{.locale.Tr "tool.raw_seconds"}}
    + {{end}} + {{if .CacheConn}} +
    {{.locale.Tr "admin.config.cache_conn"}}
    +
    {{.CacheConn}}
    +
    {{.locale.Tr "admin.config.cache_item_ttl"}}
    +
    {{.CacheItemTTL}}
    + {{end}} +
    +
    + +

    + {{.locale.Tr "admin.config.session_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.session_provider"}}
    +
    {{.SessionConfig.Provider}}
    +
    {{.locale.Tr "admin.config.provider_config"}}
    +
    {{if .SessionConfig.ProviderConfig}}{{.SessionConfig.ProviderConfig}}{{else}}-{{end}}
    +
    {{.locale.Tr "admin.config.cookie_name"}}
    +
    {{.SessionConfig.CookieName}}
    +
    {{.locale.Tr "admin.config.gc_interval_time"}}
    +
    {{.SessionConfig.Gclifetime}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.session_life_time"}}
    +
    {{.SessionConfig.Maxlifetime}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.https_only"}}
    +
    {{if .SessionConfig.Secure}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    +
    + +

    + {{.locale.Tr "admin.config.picture_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.disable_gravatar"}}
    +
    +
    + +
    +
    +
    +
    {{.locale.Tr "admin.config.enable_federated_avatar"}}
    +
    +
    + +
    +
    +
    +
    + +

    + {{.locale.Tr "admin.config.git_config"}} +

    +
    +
    +
    {{.locale.Tr "admin.config.git_disable_diff_highlight"}}
    +
    {{if .Git.DisableDiffHighlight}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    {{.locale.Tr "admin.config.git_max_diff_lines"}}
    +
    {{.Git.MaxGitDiffLines}}
    +
    {{.locale.Tr "admin.config.git_max_diff_line_characters"}}
    +
    {{.Git.MaxGitDiffLineCharacters}}
    +
    {{.locale.Tr "admin.config.git_max_diff_files"}}
    +
    {{.Git.MaxGitDiffFiles}}
    +
    {{.locale.Tr "admin.config.git_gc_args"}}
    +
    {{.Git.GCArgs}}
    + +
    + +
    {{.locale.Tr "admin.config.git_migrate_timeout"}}
    +
    {{.Git.Timeout.Migrate}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.git_mirror_timeout"}}
    +
    {{.Git.Timeout.Mirror}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.git_clone_timeout"}}
    +
    {{.Git.Timeout.Clone}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.git_pull_timeout"}}
    +
    {{.Git.Timeout.Pull}} {{.locale.Tr "tool.raw_seconds"}}
    +
    {{.locale.Tr "admin.config.git_gc_timeout"}}
    +
    {{.Git.Timeout.GC}} {{.locale.Tr "tool.raw_seconds"}}
    +
    +
    + +

    + {{.locale.Tr "admin.config.log_config"}} +

    +
    +
    + {{if .Loggers.xorm.IsEnabled}} +
    {{$.locale.Tr "admin.config.xorm_log_sql"}}
    +
    {{if $.LogSQL}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    + {{end}} + + {{if .Loggers.access.IsEnabled}} +
    {{$.locale.Tr "admin.config.access_log_template"}}
    +
    {{$.AccessLogTemplate}}
    + {{end}} + + {{range $loggerName, $loggerDetail := .Loggers}} +
    {{$.locale.Tr "admin.config.logger_name_fmt" $loggerName}}
    + {{if $loggerDetail.IsEnabled}} +
    {{$loggerDetail.EventWriters | JsonUtils.EncodeToString | JsonUtils.PrettyIndent}}
    + {{else}} +
    {{$.locale.Tr "admin.config.disabled_logger"}}
    + {{end}} + {{end}} +
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/cron.tmpl b/src/templates/admin/cron.tmpl new file mode 100644 index 0000000..c154619 --- /dev/null +++ b/src/templates/admin/cron.tmpl @@ -0,0 +1,39 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}} +
    +

    + {{.locale.Tr "admin.monitor.cron"}} +

    +
    +
    + + + + + + + + + + + + + + {{range .Entries}} + + + + + + + + + + {{end}} + +
    {{.locale.Tr "admin.monitor.name"}}{{.locale.Tr "admin.monitor.schedule"}}{{.locale.Tr "admin.monitor.next"}}{{.locale.Tr "admin.monitor.previous"}}{{.locale.Tr "admin.monitor.execute_times"}}{{.locale.Tr "admin.monitor.last_execution_result"}}
    {{$.locale.Tr (printf "admin.dashboard.%s" .Name)}}{{.Spec}}{{DateTime "full" .Next}}{{if gt .Prev.Year 1}}{{DateTime "full" .Prev}}{{else}}-{{end}}{{.ExecTimes}}{{if eq .Status ""}}—{{else if eq .Status "finished"}}{{svg "octicon-check" 16}}{{else}}{{svg "octicon-x" 16}}{{end}}
    + + {{.CsrfTokenHtml}} +
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/dashboard.tmpl b/src/templates/admin/dashboard.tmpl new file mode 100644 index 0000000..9d503a1 --- /dev/null +++ b/src/templates/admin/dashboard.tmpl @@ -0,0 +1,137 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin dashboard")}} +
    + {{if .NeedUpdate}} +
    +

    {{(.locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer) | Str2html}}

    +
    + {{end}} +

    + {{.locale.Tr "admin.dashboard.operations"}} +

    +
    +
    + {{.CsrfTokenHtml}} + + + + + + + + + + + + + + + + + + + {{if and (not .SSH.Disabled) (not .SSH.StartBuiltinServer)}} + + + + + + + + + {{end}} + + + + + + + + + + + + + + + + + + + + + +
    {{.locale.Tr "admin.dashboard.delete_inactive_accounts"}}
    {{.locale.Tr "admin.dashboard.delete_repo_archives"}}
    {{.locale.Tr "admin.dashboard.delete_missing_repos"}}
    {{.locale.Tr "admin.dashboard.git_gc_repos"}}
    {{.locale.Tr "admin.dashboard.resync_all_sshkeys"}}
    + {{.locale.Tr "admin.dashboard.resync_all_sshkeys.desc"}}
    {{.locale.Tr "admin.dashboard.resync_all_sshprincipals"}}
    + {{.locale.Tr "admin.dashboard.resync_all_sshprincipals.desc"}}
    {{.locale.Tr "admin.dashboard.resync_all_hooks"}}
    {{.locale.Tr "admin.dashboard.reinit_missing_repos"}}
    {{.locale.Tr "admin.dashboard.sync_external_users"}}
    {{.locale.Tr "admin.dashboard.repo_health_check"}}
    {{.locale.Tr "admin.dashboard.delete_generated_repository_avatars"}}
    +
    +
    + +

    + {{.locale.Tr "admin.dashboard.system_status"}} +

    +
    +
    +
    {{.locale.Tr "admin.dashboard.server_uptime"}}
    +
    {{.SysStatus.StartTime}}
    +
    {{.locale.Tr "admin.dashboard.current_goroutine"}}
    +
    {{.SysStatus.NumGoroutine}}
    +
    +
    {{.locale.Tr "admin.dashboard.current_memory_usage"}}
    +
    {{.SysStatus.MemAllocated}}
    +
    {{.locale.Tr "admin.dashboard.total_memory_allocated"}}
    +
    {{.SysStatus.MemTotal}}
    +
    {{.locale.Tr "admin.dashboard.memory_obtained"}}
    +
    {{.SysStatus.MemSys}}
    +
    {{.locale.Tr "admin.dashboard.pointer_lookup_times"}}
    +
    {{.SysStatus.Lookups}}
    +
    {{.locale.Tr "admin.dashboard.memory_allocate_times"}}
    +
    {{.SysStatus.MemMallocs}}
    +
    {{.locale.Tr "admin.dashboard.memory_free_times"}}
    +
    {{.SysStatus.MemFrees}}
    +
    +
    {{.locale.Tr "admin.dashboard.current_heap_usage"}}
    +
    {{.SysStatus.HeapAlloc}}
    +
    {{.locale.Tr "admin.dashboard.heap_memory_obtained"}}
    +
    {{.SysStatus.HeapSys}}
    +
    {{.locale.Tr "admin.dashboard.heap_memory_idle"}}
    +
    {{.SysStatus.HeapIdle}}
    +
    {{.locale.Tr "admin.dashboard.heap_memory_in_use"}}
    +
    {{.SysStatus.HeapInuse}}
    +
    {{.locale.Tr "admin.dashboard.heap_memory_released"}}
    +
    {{.SysStatus.HeapReleased}}
    +
    {{.locale.Tr "admin.dashboard.heap_objects"}}
    +
    {{.SysStatus.HeapObjects}}
    +
    +
    {{.locale.Tr "admin.dashboard.bootstrap_stack_usage"}}
    +
    {{.SysStatus.StackInuse}}
    +
    {{.locale.Tr "admin.dashboard.stack_memory_obtained"}}
    +
    {{.SysStatus.StackSys}}
    +
    {{.locale.Tr "admin.dashboard.mspan_structures_usage"}}
    +
    {{.SysStatus.MSpanInuse}}
    +
    {{.locale.Tr "admin.dashboard.mspan_structures_obtained"}}
    +
    {{.SysStatus.MSpanSys}}
    +
    {{.locale.Tr "admin.dashboard.mcache_structures_usage"}}
    +
    {{.SysStatus.MCacheInuse}}
    +
    {{.locale.Tr "admin.dashboard.mcache_structures_obtained"}}
    +
    {{.SysStatus.MCacheSys}}
    +
    {{.locale.Tr "admin.dashboard.profiling_bucket_hash_table_obtained"}}
    +
    {{.SysStatus.BuckHashSys}}
    +
    {{.locale.Tr "admin.dashboard.gc_metadata_obtained"}}
    +
    {{.SysStatus.GCSys}}
    +
    {{.locale.Tr "admin.dashboard.other_system_allocation_obtained"}}
    +
    {{.SysStatus.OtherSys}}
    +
    +
    {{.locale.Tr "admin.dashboard.next_gc_recycle"}}
    +
    {{.SysStatus.NextGC}}
    +
    {{.locale.Tr "admin.dashboard.last_gc_time"}}
    +
    {{.SysStatus.LastGC}}
    +
    {{.locale.Tr "admin.dashboard.total_gc_pause"}}
    +
    {{.SysStatus.PauseTotalNs}}
    +
    {{.locale.Tr "admin.dashboard.last_gc_pause"}}
    +
    {{.SysStatus.PauseNs}}
    +
    {{.locale.Tr "admin.dashboard.gc_times"}}
    +
    {{.SysStatus.NumGC}}
    +
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/emails/list.tmpl b/src/templates/admin/emails/list.tmpl new file mode 100644 index 0000000..1da40cb --- /dev/null +++ b/src/templates/admin/emails/list.tmpl @@ -0,0 +1,101 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}} +
    +

    + {{.locale.Tr "admin.emails.email_manage_panel"}} ({{.locale.Tr "admin.total" .Total}}) +

    +
    + +
    +
    + + +
    +
    +
    +
    + + + + + + + + + + + + {{range .Emails}} + + + + + + + + {{end}} + +
    + {{.locale.Tr "admin.users.name"}} + {{SortArrow "username" "reverseusername" $.SortType false}} + {{.locale.Tr "admin.users.full_name"}} + {{.locale.Tr "email"}} + {{SortArrow "email" "reverseemail" $.SortType true}} + {{.locale.Tr "admin.emails.primary"}}{{.locale.Tr "admin.emails.activated"}}
    {{.Name}}{{.FullName}}{{if .IsPrimary}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}} + {{if .CanChange}} + + {{if .IsActivated}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}} + + {{else}} + {{if .IsActivated}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}} + {{end}} +
    +
    + + {{template "base/paginate" .}} + + + +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/hook_new.tmpl b/src/templates/admin/hook_new.tmpl new file mode 100644 index 0000000..1abdd4c --- /dev/null +++ b/src/templates/admin/hook_new.tmpl @@ -0,0 +1,55 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin settings new webhook")}} +
    +

    + {{if .PageIsAdminDefaultHooksNew}} + {{.locale.Tr "admin.defaulthooks.add_webhook"}} + {{else if .PageIsAdminSystemHooksNew}} + {{.locale.Tr "admin.systemhooks.add_webhook"}} + {{else if .Webhook.IsSystemWebhook}} + {{.locale.Tr "admin.systemhooks.update_webhook"}} + {{else}} + {{.locale.Tr "admin.defaulthooks.update_webhook"}} + {{end}} +
    + {{if eq .HookType "gitea"}} + + {{else if eq .HookType "gogs"}} + + {{else if eq .HookType "slack"}} + + {{else if eq .HookType "discord"}} + + {{else if eq .HookType "dingtalk"}} + + {{else if eq .HookType "telegram"}} + + {{else if eq .HookType "msteams"}} + + {{else if eq .HookType "feishu"}} + + {{else if eq .HookType "matrix"}} + {{svg "gitea-matrix" 26}} + {{else if eq .HookType "wechatwork"}} + + {{else if eq .HookType "packagist"}} + + {{end}} +
    +

    +
    + {{template "repo/settings/webhook/gitea" .}} + {{template "repo/settings/webhook/gogs" .}} + {{template "repo/settings/webhook/slack" .}} + {{template "repo/settings/webhook/discord" .}} + {{template "repo/settings/webhook/dingtalk" .}} + {{template "repo/settings/webhook/telegram" .}} + {{template "repo/settings/webhook/msteams" .}} + {{template "repo/settings/webhook/feishu" .}} + {{template "repo/settings/webhook/matrix" .}} + {{template "repo/settings/webhook/wechatwork" .}} + {{template "repo/settings/webhook/packagist" .}} +
    + + {{template "repo/settings/webhook/history" .}} +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/hooks.tmpl b/src/templates/admin/hooks.tmpl new file mode 100644 index 0000000..c77d27d --- /dev/null +++ b/src/templates/admin/hooks.tmpl @@ -0,0 +1,9 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin hooks")}} +
    + + {{template "repo/settings/webhook/base_list" .SystemWebhooks}} + {{template "repo/settings/webhook/base_list" .DefaultWebhooks}} + + {{template "repo/settings/webhook/delete_modal" .}} +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/layout_footer.tmpl b/src/templates/admin/layout_footer.tmpl new file mode 100644 index 0000000..8d6e564 --- /dev/null +++ b/src/templates/admin/layout_footer.tmpl @@ -0,0 +1,11 @@ +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    + {{/* block: admin-setting-content */}} +{{end}} + +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/admin/layout_head.tmpl b/src/templates/admin/layout_head.tmpl new file mode 100644 index 0000000..6d84f8f --- /dev/null +++ b/src/templates/admin/layout_head.tmpl @@ -0,0 +1,13 @@ +{{template "base/head" .ctxData}} +
    +
    + {{template "admin/navbar" .ctxData}} +
    + {{template "base/alert" .ctxData}} + {{/* block: admin-setting-content */}} + +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    +{{end}} diff --git a/src/templates/admin/navbar.tmpl b/src/templates/admin/navbar.tmpl new file mode 100644 index 0000000..641d3fa --- /dev/null +++ b/src/templates/admin/navbar.tmpl @@ -0,0 +1,71 @@ + diff --git a/src/templates/admin/notice.tmpl b/src/templates/admin/notice.tmpl new file mode 100644 index 0000000..5cd617a --- /dev/null +++ b/src/templates/admin/notice.tmpl @@ -0,0 +1,71 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin notice")}} +
    +

    + {{.locale.Tr "admin.notices.system_notice_list"}} ({{.locale.Tr "admin.total" .Total}}) +

    + + + + + + + + + + + + + {{range .Notices}} + + + + + + + + + {{end}} + + {{if .Notices}} + + + + + + + {{end}} +
    ID{{.locale.Tr "admin.notices.type"}}{{.locale.Tr "admin.notices.desc"}}{{.locale.Tr "admin.users.created"}}{{.locale.Tr "admin.notices.op"}}
    {{.ID}}{{$.locale.Tr .TrStr}}{{.Description}}{{DateTime "short" .CreatedUnix}}{{svg "octicon-note" 16}}
    +
    + {{.CsrfTokenHtml}} + +
    + + +
    + {{template "base/paginate" .}} +
    + + + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/org/list.tmpl b/src/templates/admin/org/list.tmpl new file mode 100644 index 0000000..a400dcb --- /dev/null +++ b/src/templates/admin/org/list.tmpl @@ -0,0 +1,54 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}} +
    +

    + {{.locale.Tr "admin.orgs.org_manage_panel"}} ({{.locale.Tr "admin.total" .Total}}) + +

    +
    + {{template "admin/base/search" .}} +
    +
    + + + + + + + + + + + + + + {{range .Users}} + + + + + + + + + + {{end}} + +
    ID{{SortArrow "oldest" "newest" $.SortType false}} + {{.locale.Tr "admin.orgs.name"}} + {{SortArrow "alphabetically" "reversealphabetically" $.SortType true}} + {{.locale.Tr "admin.orgs.teams"}}{{.locale.Tr "admin.orgs.members"}}{{.locale.Tr "admin.users.repos"}} + {{.locale.Tr "admin.users.created"}} + {{SortArrow "recentupdate" "leastupdate" $.SortType false}} + {{.locale.Tr "admin.users.edit"}}
    {{.ID}} + {{.Name}} + {{if .Visibility.IsPrivate}} + {{svg "octicon-lock"}} + {{end}} + {{.NumTeams}}{{.NumMembers}}{{.NumRepos}}{{DateTime "short" .CreatedUnix}}{{svg "octicon-pencil"}}
    +
    + + {{template "base/paginate" .}} +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/packages/list.tmpl b/src/templates/admin/packages/list.tmpl new file mode 100644 index 0000000..f320878 --- /dev/null +++ b/src/templates/admin/packages/list.tmpl @@ -0,0 +1,90 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}} +
    +

    + {{.locale.Tr "admin.packages.package_manage_panel"}} ({{.locale.Tr "admin.total" .TotalCount}}, + {{.locale.Tr "admin.packages.total_size" (FileSize .TotalBlobSize)}}, + {{.locale.Tr "admin.packages.unreferenced_size" (FileSize .TotalUnreferencedBlobSize)}}) +

    +
    +
    +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + {{range .PackageDescriptors}} + + + + + + + + + + + + + {{end}} + +
    ID{{.locale.Tr "admin.packages.owner"}}{{.locale.Tr "admin.packages.type"}} + {{.locale.Tr "admin.packages.name"}} + {{SortArrow "name_asc" "name_desc" .SortType false}} + + {{.locale.Tr "admin.packages.version"}} + {{SortArrow "version_desc" "version_asc" .SortType false}} + {{.locale.Tr "admin.packages.creator"}}{{.locale.Tr "admin.packages.repository"}}{{.locale.Tr "admin.packages.size"}} + {{.locale.Tr "admin.packages.published"}} + {{SortArrow "created_asc" "created_desc" .SortType true}} + {{.locale.Tr "admin.notices.op"}}
    {{.Version.ID}} + {{.Owner.Name}} + {{if .Owner.Visibility.IsPrivate}} + {{svg "octicon-lock"}} + {{end}} + {{.Package.Type.Name}}{{.Creator.Name}} + {{if .Repository}} + {{.Repository.Name}} + {{end}} + {{FileSize .CalculateBlobSize}}{{DateTime "short" .Version.CreatedUnix}}{{svg "octicon-trash"}}
    +
    + + {{template "base/paginate" .}} +
    + + + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/queue.tmpl b/src/templates/admin/queue.tmpl new file mode 100644 index 0000000..f58f25e --- /dev/null +++ b/src/templates/admin/queue.tmpl @@ -0,0 +1,34 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}} +
    +

    + {{.locale.Tr "admin.monitor.queues"}} +

    +
    + + + + + + + + + + + + + {{range $qid, $q := .Queues}} + + + + + + + + {{end}} + +
    {{.locale.Tr "admin.monitor.queue.name"}}{{.locale.Tr "admin.monitor.queue.type"}}{{.locale.Tr "admin.monitor.queue.exemplar"}}{{.locale.Tr "admin.monitor.queue.numberworkers"}}{{.locale.Tr "admin.monitor.queue.numberinqueue"}}
    {{$q.GetName}}{{$q.GetType}}{{$q.GetItemTypeName}}{{$sum := $q.GetWorkerNumber}}{{if lt $sum 0}}-{{else}}{{$sum}}{{end}}{{$sum = $q.GetQueueItemNumber}}{{if lt $sum 0}}-{{else}}{{$sum}}{{end}}{{if lt $sum 0}}{{$.locale.Tr "admin.monitor.queue.review"}}{{else}}{{$.locale.Tr "admin.monitor.queue.review_add"}}{{end}} +
    +
    +
    +{{template "admin/layout_footer" .}} + diff --git a/src/templates/admin/queue_manage.tmpl b/src/templates/admin/queue_manage.tmpl new file mode 100644 index 0000000..d456c2f --- /dev/null +++ b/src/templates/admin/queue_manage.tmpl @@ -0,0 +1,59 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}} +
    +

    + {{.locale.Tr "admin.monitor.queue" .Queue.GetName}} +

    +
    + + + + + + + + + + + + + + + + + + + + + +
    {{.locale.Tr "admin.monitor.queue.name"}}{{.locale.Tr "admin.monitor.queue.type"}}{{.locale.Tr "admin.monitor.queue.exemplar"}}{{.locale.Tr "admin.monitor.queue.numberworkers"}}{{.locale.Tr "admin.monitor.queue.maxnumberworkers"}}{{.locale.Tr "admin.monitor.queue.numberinqueue"}}
    {{.Queue.GetName}}{{.Queue.GetType}}{{.Queue.GetItemTypeName}}{{$sum := .Queue.GetWorkerNumber}}{{if lt $sum 0}}-{{else}}{{$sum}}{{end}}{{if lt $sum 0}}-{{else}}{{.Queue.GetWorkerMaxNumber}}{{end}} + {{$sum = .Queue.GetQueueItemNumber}} + {{if lt $sum 0}} + - + {{else}} + {{$sum}} +
    + {{$.CsrfTokenHtml}} + +
    + {{end}} +
    +
    + +

    + {{.locale.Tr "admin.monitor.queue.settings.title"}} +

    +
    +

    {{.locale.Tr "admin.monitor.queue.settings.desc"}}

    +
    + {{$.CsrfTokenHtml}} +
    +
    + + +
    + +
    +
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/repo/list.tmpl b/src/templates/admin/repo/list.tmpl new file mode 100644 index 0000000..f485784 --- /dev/null +++ b/src/templates/admin/repo/list.tmpl @@ -0,0 +1,109 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin")}} +
    +

    + {{.locale.Tr "admin.repos.repo_manage_panel"}} ({{.locale.Tr "admin.total" .Total}}) + +

    +
    + {{template "admin/repo/search" .}} +
    +
    + + + + + + + + + + + + + + + + + + {{range .Repos}} + + + + + + + + + + + + + + {{end}} + +
    ID{{SortArrow "oldest" "newest" $.SortType false}}{{.locale.Tr "admin.repos.owner"}} + {{.locale.Tr "admin.repos.name"}} + {{SortArrow "alphabetically" "reversealphabetically" $.SortType false}} + {{.locale.Tr "admin.repos.watches"}} + {{.locale.Tr "admin.repos.stars"}} + {{SortArrow "moststars" "feweststars" $.SortType false}} + + {{.locale.Tr "admin.repos.forks"}} + {{SortArrow "mostforks" "fewestforks" $.SortType false}} + {{.locale.Tr "admin.repos.issues"}} + {{.locale.Tr "admin.repos.size"}} + {{SortArrow "size" "reversesize" $.SortType false}} + {{.locale.Tr "admin.auths.updated"}}{{.locale.Tr "admin.users.created"}}{{.locale.Tr "admin.notices.op"}}
    {{.ID}} + {{.Owner.Name}} + {{if .Owner.Visibility.IsPrivate}} + {{svg "octicon-lock"}} + {{end}} + + {{.Name}} + {{if .IsArchived}} + {{$.locale.Tr "repo.desc.archived"}} + {{end}} + {{if .IsTemplate}} + {{if .IsPrivate}} + {{$.locale.Tr "repo.desc.private_template"}} + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.internal_template"}} + {{end}} + {{end}} + {{else}} + {{if .IsPrivate}} + {{$.locale.Tr "repo.desc.private"}} + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.internal"}} + {{end}} + {{end}} + {{end}} + {{if .IsFork}} + {{svg "octicon-repo-forked"}} + {{else if .IsMirror}} + {{svg "octicon-mirror"}} + {{end}} + {{.NumWatches}}{{.NumStars}}{{.NumForks}}{{.NumIssues}}{{FileSize .Size}}{{DateTime "short" .UpdatedUnix}}{{DateTime "short" .CreatedUnix}}{{svg "octicon-trash"}}
    +
    + + {{template "base/paginate" .}} +
    + + + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/repo/search.tmpl b/src/templates/admin/repo/search.tmpl new file mode 100644 index 0000000..15aa31b --- /dev/null +++ b/src/templates/admin/repo/search.tmpl @@ -0,0 +1,29 @@ + +
    +
    + + +
    +
    diff --git a/src/templates/admin/repo/unadopted.tmpl b/src/templates/admin/repo/unadopted.tmpl new file mode 100644 index 0000000..27898a1 --- /dev/null +++ b/src/templates/admin/repo/unadopted.tmpl @@ -0,0 +1,75 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin")}} +
    +

    + {{.locale.Tr "admin.repos.unadopted"}} + +

    +
    +
    +
    + + + +
    +
    +
    + {{if .search}} +
    + {{if .Dirs}} +
    + {{range $dirI, $dir := .Dirs}} +
    + {{svg "octicon-file-directory-fill"}} {{$dir}} +
    + + + + +
    +
    + {{end}} +
    + {{template "base/paginate" .}} + {{else}} +
    + {{.locale.Tr "admin.repos.unadopted.no_more"}} +
    + {{template "base/paginate" .}} + {{end}} +
    + {{end}} +
    + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/runners/edit.tmpl b/src/templates/admin/runners/edit.tmpl new file mode 100644 index 0000000..1165c84 --- /dev/null +++ b/src/templates/admin/runners/edit.tmpl @@ -0,0 +1,5 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin runners")}} +
    + {{template "shared/actions/runner_edit" .}} +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/stacktrace-row.tmpl b/src/templates/admin/stacktrace-row.tmpl new file mode 100644 index 0000000..15e51e4 --- /dev/null +++ b/src/templates/admin/stacktrace-row.tmpl @@ -0,0 +1,66 @@ +
    +
    +
    + {{if eq .Process.Type "request"}} + {{svg "octicon-globe" 16}} + {{else if eq .Process.Type "system"}} + {{svg "octicon-cpu" 16}} + {{else if eq .Process.Type "normal"}} + {{svg "octicon-terminal" 16}} + {{else}} + {{svg "octicon-code" 16}} + {{end}} +
    +
    +
    {{.Process.Description}}
    +
    {{if ne .Process.Type "none"}}{{TimeSince .Process.Start .root.locale}}{{end}}
    +
    +
    + {{if or (eq .Process.Type "request") (eq .Process.Type "normal")}} + {{svg "octicon-trash" 16 "text-red"}} + {{end}} +
    +
    + {{if .Process.Stacks}} +
    + {{range .Process.Stacks}} +
    +
    + +
    +
    + {{svg "octicon-code" 16}}{{.Description}}{{if gt .Count 1}} * {{.Count}}{{end}} +
    +
    + {{range .Labels}} +
    {{.Name}}
    {{.Value}}
    + {{end}} +
    +
    +
    +
    + {{range .Entry}} +
    + {{svg "octicon-dot-fill" 16}} +
    +
    {{.Function}}
    +
    {{.File}}:{{.Line}}
    +
    +
    + {{end}} +
    +
    +
    + {{end}} +
    + {{end}} + + {{if .Process.Children}} +
    + {{range .Process.Children}} + {{template "admin/stacktrace-row" dict "Process" . "root" $.root}} + {{end}} +
    + {{end}} + +
    diff --git a/src/templates/admin/stacktrace.tmpl b/src/templates/admin/stacktrace.tmpl new file mode 100644 index 0000000..46ad421 --- /dev/null +++ b/src/templates/admin/stacktrace.tmpl @@ -0,0 +1,48 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}} +
    + +
    + +
    +
    + + {{.locale.Tr "tool.raw_seconds"}} +
    +
    +
    + +
    + +

    + {{printf "%d Goroutines" .GoroutineCount}}{{/* Goroutine is non-translatable*/}} + {{- if .ProcessCount -}}, {{.locale.Tr "admin.monitor.processes_count" .ProcessCount}}{{- end -}} +

    + + {{if .ProcessStacks}} +
    +
    + {{range .ProcessStacks}} + {{template "admin/stacktrace-row" dict "Process" . "root" $}} + {{end}} +
    +
    + {{end}} +
    + + + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/stats.tmpl b/src/templates/admin/stats.tmpl new file mode 100644 index 0000000..c755969 --- /dev/null +++ b/src/templates/admin/stats.tmpl @@ -0,0 +1,17 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}} +
    +

    + {{.locale.Tr "admin.dashboard.statistic"}} +

    +
    + + {{range $statsKey := .StatsKeys}} + + + + + {{end}} +
    {{$statsKey}}{{index $.StatsCounter $statsKey}}
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/user/edit.tmpl b/src/templates/admin/user/edit.tmpl new file mode 100644 index 0000000..4e98223 --- /dev/null +++ b/src/templates/admin/user/edit.tmpl @@ -0,0 +1,216 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin edit user")}} +
    +

    + {{.locale.Tr "admin.users.edit_account"}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +

    {{.locale.Tr "admin.users.password_helper"}}

    +
    +
    + + +
    +
    + + +
    + +
    + +
    + + +

    {{.locale.Tr "admin.users.max_repo_creation_desc"}}

    +
    + +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + {{if not .DisableRegularOrgCreation}} +
    +
    + + +
    +
    + {{end}} + + {{if .TwoFactorEnabled}} +
    +
    +
    + + +
    +
    + {{end}} + +
    + +
    + + +
    +
    +
    + +

    + {{.locale.Tr "settings.avatar"}} +

    +
    +
    + {{.CsrfTokenHtml}} + {{if not (DisableGravatar $.Context)}} +
    +
    + + +
    +
    +
    + + +
    + {{end}} + +
    +
    + + +
    +
    + +
    + + +
    + +
    + + {{$.locale.Tr "settings.delete_current_avatar"}}{{/* TODO: Convert links without href to buttons for a11y */}} +
    +
    +
    +
    + + + +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/user/list.tmpl b/src/templates/admin/user/list.tmpl new file mode 100644 index 0000000..2f76f2d --- /dev/null +++ b/src/templates/admin/user/list.tmpl @@ -0,0 +1,109 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}} +
    +

    + {{.locale.Tr "admin.users.user_manage_panel"}} ({{.locale.Tr "admin.total" .Total}}) + +

    +
    +
    + + + + + +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + {{range .Users}} + + + + + + + + + + + {{if .LastLoginUnix}} + + {{else}} + + {{end}} + + + {{end}} + +
    ID{{SortArrow "oldest" "newest" .SortType false}} + {{.locale.Tr "admin.users.name"}} + {{SortArrow "alphabetically" "reversealphabetically" $.SortType true}} + {{.locale.Tr "email"}}{{.locale.Tr "admin.users.activated"}}{{.locale.Tr "admin.users.admin"}}{{.locale.Tr "admin.users.restricted"}}{{.locale.Tr "admin.users.2fa"}}{{.locale.Tr "admin.users.repos"}}{{.locale.Tr "admin.users.created"}} + {{.locale.Tr "admin.users.last_login"}} + {{SortArrow "lastlogin" "reverselastlogin" $.SortType false}} + {{.locale.Tr "admin.users.edit"}}
    {{.ID}}{{.Name}}{{if .IsActive}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{if .IsAdmin}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{if .IsRestricted}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{if index $.UsersTwoFaStatus .ID}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{.NumRepos}}{{DateTime "short" .CreatedUnix}}{{DateTime "short" .LastLoginUnix}}{{$.locale.Tr "admin.users.never_login"}}{{svg "octicon-pencil"}}
    +
    + + {{template "base/paginate" .}} +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/admin/user/new.tmpl b/src/templates/admin/user/new.tmpl new file mode 100644 index 0000000..691d63a --- /dev/null +++ b/src/templates/admin/user/new.tmpl @@ -0,0 +1,90 @@ +{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin new user")}} +
    +

    + {{.locale.Tr "admin.users.new_account"}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    + + +
    +
    + + + {{if .CanSendEmail}} +
    +
    + + +
    +
    + {{end}} + +
    + +
    +
    +
    +
    +{{template "admin/layout_footer" .}} diff --git a/src/templates/api/packages/pypi/simple.tmpl b/src/templates/api/packages/pypi/simple.tmpl new file mode 100644 index 0000000..77cb035 --- /dev/null +++ b/src/templates/api/packages/pypi/simple.tmpl @@ -0,0 +1,15 @@ + + + + Links for {{.PackageDescriptor.Package.Name}} + + +

    Links for {{.PackageDescriptor.Package.Name}}

    + {{range .PackageDescriptors}} + {{$p := .}} + {{range .Files}} + {{.File.Name}}
    + {{end}} + {{end}} + + diff --git a/src/templates/base/alert.tmpl b/src/templates/base/alert.tmpl new file mode 100644 index 0000000..160584f --- /dev/null +++ b/src/templates/base/alert.tmpl @@ -0,0 +1,20 @@ +{{if .Flash.ErrorMsg}} +
    +

    {{.Flash.ErrorMsg | Str2html}}

    +
    +{{end}} +{{if .Flash.SuccessMsg}} +
    +

    {{.Flash.SuccessMsg | Str2html}}

    +
    +{{end}} +{{if .Flash.InfoMsg}} +
    +

    {{.Flash.InfoMsg | Str2html}}

    +
    +{{end}} +{{if .Flash.WarningMsg}} +
    +

    {{.Flash.WarningMsg | Str2html}}

    +
    +{{end}} diff --git a/src/templates/base/alert_details.tmpl b/src/templates/base/alert_details.tmpl new file mode 100644 index 0000000..1d7ec15 --- /dev/null +++ b/src/templates/base/alert_details.tmpl @@ -0,0 +1,7 @@ +{{.Message}} +
    + {{.Summary}} + + {{.Details | Str2html}} + +
    diff --git a/src/templates/base/disable_form_autofill.tmpl b/src/templates/base/disable_form_autofill.tmpl new file mode 100644 index 0000000..6f06395 --- /dev/null +++ b/src/templates/base/disable_form_autofill.tmpl @@ -0,0 +1,31 @@ +{{/* +Why we need to disable form autofill: +1. Many pages contain different password inputs for different usages, eg: repo setting, autofill will make a mess. +2. We have `areYouSure` confirm dialog if a user leaves a pages without submit. +Autofill will make the form changed even if the user didn't input anything. Then the user keeps seeing annoying confirm dialog. + +In history, Gitea put `` in forms to bypass the autofill, +but there were still many forms suffered the autofill problem. + +Now we improve it. + +Solutions which do NOT work: +1. Adding `autocomplete=off` doesn't help. New Chrome completely ignores it. +2. Use a JavaScript to run in a few seconds later after the page is loaded to process the autofilled inputs, it doesn't work. +Because for security reason, the inputs won't be filled before the user makes an interaction in the page. +So we can not predict the correct time to run the JavaScript code. + +Solutions which work: +1. Some hacky methods like: https://github.com/matteobad/detect-autofill +2. This solution: use invisible inputs. Be aware of: +(a) The inputs must be at the beginning of the form, and can not be hidden. +(b) The input for username must have a valid name. +(c) There should be no negative word (eg: fake) in the `name` attribute. +(d) Chrome seems to use a weighted algorithm to choose an input to fill text, so the using "username" as input name is better than using "user". +We make the names of these dummy inputs begin with an underline to indicate it is for special usage, +and these dummy form values won't be used by backend code. +*/}} + diff --git a/src/templates/base/footer.tmpl b/src/templates/base/footer.tmpl new file mode 100644 index 0000000..e3cac80 --- /dev/null +++ b/src/templates/base/footer.tmpl @@ -0,0 +1,31 @@ +{{if false}} + {{/* to make html structure "likely" complete to prevent IDE warnings */}} + + +
    +{{end}} + + {{template "custom/body_inner_post" .}} + +
    + + {{template "custom/body_outer_post" .}} + + {{template "base/footer_content" .}} + + +{{if .EnableCaptcha}} + {{if eq .CaptchaType "recaptcha"}} + + {{end}} + {{if eq .CaptchaType "hcaptcha"}} + + {{end}} + {{if eq .CaptchaType "cfturnstile"}} + + {{end}} +{{end}} + +{{template "custom/footer" .}} + + diff --git a/src/templates/base/footer_content.tmpl b/src/templates/base/footer_content.tmpl new file mode 100644 index 0000000..3b87f25 --- /dev/null +++ b/src/templates/base/footer_content.tmpl @@ -0,0 +1,30 @@ +
    + + +
    diff --git a/src/templates/base/head.tmpl b/src/templates/base/head.tmpl new file mode 100644 index 0000000..4858d0b --- /dev/null +++ b/src/templates/base/head.tmpl @@ -0,0 +1,84 @@ + + + + + {{if .Title}}{{.Title | RenderEmojiPlain}} - {{end}}{{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}} + {{if .ManifestData}}{{end}} + + + + +{{if .GoGetImport}} + + +{{end}} +{{if and .EnableFeed .FeedURL}} + + +{{end}} + + + {{template "base/head_script" .}} + +{{if .PageIsUserProfile}} + + + + + {{if .ContextUser.Description}} + + {{end}} +{{else if .Repository}} + {{if .Issue}} + + + {{if .Issue.Content}} + + {{end}} + {{else}} + + + {{if .Repository.Description}} + + {{end}} + {{end}} + + {{if (.Repository.AvatarLink $.Context)}} + + {{else}} + + {{end}} +{{else}} + + + + + +{{end}} + + {{template "base/head_style" .}} + {{template "custom/header" .}} + + + {{template "custom/body_outer_pre" .}} + +
    + + + {{template "custom/body_inner_pre" .}} + + {{if not .PageIsInstall}} + {{template "base/head_navbar" .}} + {{end}} + +{{if false}} + {{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    + + +{{end}} diff --git a/src/templates/base/head_navbar.tmpl b/src/templates/base/head_navbar.tmpl new file mode 100644 index 0000000..5e41636 --- /dev/null +++ b/src/templates/base/head_navbar.tmpl @@ -0,0 +1,205 @@ +{{$notificationUnreadCount := 0}} +{{if and .IsSigned .NotificationUnreadCount}} + {{$notificationUnreadCount = call .NotificationUnreadCount}} +{{end}} + + diff --git a/src/templates/base/head_script.tmpl b/src/templates/base/head_script.tmpl new file mode 100644 index 0000000..4e1dffa --- /dev/null +++ b/src/templates/base/head_script.tmpl @@ -0,0 +1,45 @@ +{{/* +==== DO NOT EDIT ==== +If you are customizing Gitea, please do not change this file. +If you introduce mistakes in it, Gitea JavaScript code wouldn't run correctly. +*/}} + + diff --git a/src/templates/base/head_style.tmpl b/src/templates/base/head_style.tmpl new file mode 100644 index 0000000..7e8cba2 --- /dev/null +++ b/src/templates/base/head_style.tmpl @@ -0,0 +1,8 @@ + +{{if .IsSigned}} + {{if ne .SignedUser.Theme "gitea"}} + + {{end}} +{{else if ne DefaultTheme "gitea"}} + +{{end}} diff --git a/src/templates/base/modal_actions_confirm.tmpl b/src/templates/base/modal_actions_confirm.tmpl new file mode 100644 index 0000000..6cf3ecb --- /dev/null +++ b/src/templates/base/modal_actions_confirm.tmpl @@ -0,0 +1,38 @@ +{{/* +Template Attributes: +* locale + +Two buttons (negative, positive): +* ModalButtonTypes: "yes" (default) or "confirm" +* ModalButtonColors: "green" (default) / "blue" / "yellow" +* ModalButtonCancelText +* ModalButtonOkText + +Single danger button (GitHub-like): +* ModalButtonDangerText "This action will destroy your data" + +The ".ok.button" and ".cancel.button" selectors are also used by Fomantic Modal internally +*/}} +
    + {{if .ModalButtonDangerText}} + + {{else}} + {{$textNegitive := .locale.Tr "modal.no"}} + {{$textPositive := .locale.Tr "modal.yes"}} + {{if eq .ModalButtonTypes "confirm"}} + {{$textNegitive = .locale.Tr "modal.cancel"}} + {{$textPositive = .locale.Tr "modal.confirm"}} + {{end}} + {{if .ModalButtonCancelText}}{{$textNegitive = .ModalButtonCancelText}}{{end}} + {{if .ModalButtonOkText}}{{$textPositive = .ModalButtonOkText}}{{end}} + + {{$stylePositive := "green"}} + {{if eq .ModalButtonColors "blue"}} + {{$stylePositive = "blue"}} + {{else if eq .ModalButtonColors "yellow"}} + {{$stylePositive = "yellow"}} + {{end}} + + + {{end}} +
    diff --git a/src/templates/base/paginate.tmpl b/src/templates/base/paginate.tmpl new file mode 100644 index 0000000..9dd1549 --- /dev/null +++ b/src/templates/base/paginate.tmpl @@ -0,0 +1,32 @@ +{{$paginationLink := .Page.GetParams}} +{{with .Page.Paginater}} + {{if gt .TotalPages 1}} + + {{end}} +{{end}} diff --git a/src/templates/code/searchform.tmpl b/src/templates/code/searchform.tmpl new file mode 100644 index 0000000..dfe7bc5 --- /dev/null +++ b/src/templates/code/searchform.tmpl @@ -0,0 +1,14 @@ +
    +
    + + + +
    +
    diff --git a/src/templates/code/searchresults.tmpl b/src/templates/code/searchresults.tmpl new file mode 100644 index 0000000..684e286 --- /dev/null +++ b/src/templates/code/searchresults.tmpl @@ -0,0 +1,43 @@ +
    + {{range $term := .SearchResultLanguages}} + + + {{$term.Language}} +
    {{$term.Count}}
    +
    + {{end}} +
    + diff --git a/src/templates/custom/body_inner_post.tmpl b/src/templates/custom/body_inner_post.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/body_inner_pre.tmpl b/src/templates/custom/body_inner_pre.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/body_outer_post.tmpl b/src/templates/custom/body_outer_post.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/body_outer_pre.tmpl b/src/templates/custom/body_outer_pre.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/extra_links.tmpl b/src/templates/custom/extra_links.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/extra_links_footer.tmpl b/src/templates/custom/extra_links_footer.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/extra_tabs.tmpl b/src/templates/custom/extra_tabs.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/footer.tmpl b/src/templates/custom/footer.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/custom/header.tmpl b/src/templates/custom/header.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/devtest/fomantic-modal.tmpl b/src/templates/devtest/fomantic-modal.tmpl new file mode 100644 index 0000000..aaa4c2c --- /dev/null +++ b/src/templates/devtest/fomantic-modal.tmpl @@ -0,0 +1,49 @@ +{{template "base/head" .}} +
    + + + + + + + + + + + + + +
    +{{template "base/footer" .}} diff --git a/src/templates/devtest/gitea-ui.tmpl b/src/templates/devtest/gitea-ui.tmpl new file mode 100644 index 0000000..bfec3e7 --- /dev/null +++ b/src/templates/devtest/gitea-ui.tmpl @@ -0,0 +1,247 @@ +{{template "base/head" .}} +
    +
    +

    Button

    +
    + Style: + + + + +
    +
    + State: + +
    +
    + +
      +
    • +

      General purpose:

      + + + + + + + + +
    • +
    • +

      Recommended colors:

      + + + + + + + + + + +
    • +
    • +

      Supported but not recommended:

      +

      Do not use if there is no strong requirement. Do not use grey/black buttons, they don't work well with dark theme.

      + + + + + + + + + + + + + + +
    • +
    • +

      Inline / Plain:

      +
      + + + +
      +
    • +
    + +
    +
    + +
    +

    Tooltip

    +
    text with tooltip
    +
    text with interactive tooltip
    +
    + +
    +

    GiteaOriginUrl

    +
    +
    +
    + +
    +

    LocaleNumber

    +
    {{.locale.PrettyNumber 1}}
    +
    {{.locale.PrettyNumber 12}}
    +
    {{.locale.PrettyNumber 123}}
    +
    {{.locale.PrettyNumber 1234}}
    +
    {{.locale.PrettyNumber 12345}}
    +
    {{.locale.PrettyNumber 123456}}
    +
    {{.locale.PrettyNumber 1234567}}
    +
    + +
    +

    TimeSince

    +
    Now: {{TimeSince .TimeNow $.locale}}
    +
    5s past: {{TimeSince .TimePast5s $.locale}}
    +
    5s future: {{TimeSince .TimeFuture5s $.locale}}
    +
    2m past: {{TimeSince .TimePast2m $.locale}}
    +
    2m future: {{TimeSince .TimeFuture2m $.locale}}
    +
    1y past: {{TimeSince .TimePast1y $.locale}}
    +
    1y future: {{TimeSince .TimeFuture1y $.locale}}
    +
    + +
    +

    SVG alignment

    + +

    Text with SVG

    +
    {{svg "octicon-alert"}} {{svg "octicon-x"}} text (block)
    +
    {{svg "octicon-alert"}} {{svg "octicon-x"}} text
    (inline)
    +
    +
    {{svg "octicon-alert"}} flex every line
    +
    {{svg "octicon-alert"}} flex every item
    +
    + +

    Button with SVG

    +
    + +
    + + 123 +
    +
    + +

    Input with SVG

    +
    + +
    + +

    Dropdown with SVG

    +
    + + + + +
    + + +
    +
    + +
    + + + + +
    + +
    + + + + +
    +
    + +
    +

    ComboMarkdownEditor

    +
    ps: no JS code attached, so just a layout
    + {{template "shared/combomarkdowneditor" .}} +
    + + +
    +{{template "base/footer" .}} diff --git a/src/templates/devtest/list.tmpl b/src/templates/devtest/list.tmpl new file mode 100644 index 0000000..5044f2a --- /dev/null +++ b/src/templates/devtest/list.tmpl @@ -0,0 +1,12 @@ + +
      + {{range .SubNames}} +
    • {{.}}
    • + {{end}} +
    diff --git a/src/templates/devtest/tmplerr-sub.tmpl b/src/templates/devtest/tmplerr-sub.tmpl new file mode 100644 index 0000000..c4c8516 --- /dev/null +++ b/src/templates/devtest/tmplerr-sub.tmpl @@ -0,0 +1,3 @@ +sub template triggers an executing error + + {{.locale.NoSuch "asdf"}} diff --git a/src/templates/devtest/tmplerr.tmpl b/src/templates/devtest/tmplerr.tmpl new file mode 100644 index 0000000..2fe3f1e --- /dev/null +++ b/src/templates/devtest/tmplerr.tmpl @@ -0,0 +1,12 @@ +{{template "base/head" .}} +
    +
    +
    + hello hello hello hello hello hello hello hello hello hello +
    +
    + {{template "devtest/tmplerr-sub" .}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/explore/code.tmpl b/src/templates/explore/code.tmpl new file mode 100644 index 0000000..924a3e6 --- /dev/null +++ b/src/templates/explore/code.tmpl @@ -0,0 +1,25 @@ +{{template "base/head" .}} +
    + {{template "explore/navbar" .}} +
    + {{template "code/searchform" .}} +
    +
    + {{if .CodeIndexerUnavailable}} +
    +

    {{$.locale.Tr "explore.code_search_unavailable"}}

    +
    + {{else if .SearchResults}} +

    + {{.locale.Tr "explore.code_search_results" (.Keyword|Escape) | Str2html}} +

    + {{template "code/searchresults" .}} + {{else if .Keyword}} +
    {{$.locale.Tr "explore.code_no_results"}}
    + {{end}} +
    + + {{template "base/paginate" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/explore/navbar.tmpl b/src/templates/explore/navbar.tmpl new file mode 100644 index 0000000..3a55681 --- /dev/null +++ b/src/templates/explore/navbar.tmpl @@ -0,0 +1,18 @@ + diff --git a/src/templates/explore/organizations.tmpl b/src/templates/explore/organizations.tmpl new file mode 100644 index 0000000..a20dd75 --- /dev/null +++ b/src/templates/explore/organizations.tmpl @@ -0,0 +1,38 @@ +{{template "base/head" .}} +
    + {{template "explore/navbar" .}} +
    + {{template "explore/search" .}} + +
    + {{range .Users}} +
    + {{avatar $.Context .}} +
    + + {{.Name}} {{.FullName}} + {{if .Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.private"}} + {{end}} + +
    + {{if .Location}} + {{svg "octicon-location"}} {{.Location}} + {{end}} + {{if and .Website}} + {{svg "octicon-link"}} + {{.Website}} + {{end}} + {{svg "octicon-clock"}} {{$.locale.Tr "user.joined_on" (DateTime "short" .CreatedUnix) | Safe}} +
    +
    +
    + {{else}} +
    {{$.locale.Tr "explore.org_no_results"}}
    + {{end}} +
    + + {{template "base/paginate" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/explore/repo_list.tmpl b/src/templates/explore/repo_list.tmpl new file mode 100644 index 0000000..49adfe5 --- /dev/null +++ b/src/templates/explore/repo_list.tmpl @@ -0,0 +1,71 @@ +
    + {{range .Repos}} +
    +
    +
    + {{$avatar := (repoAvatar . 32 "gt-mr-3")}} + {{if $avatar}} + {{$avatar}} + {{end}} + + {{if or $.PageIsExplore $.PageIsProfileStarList}}{{if .Owner}}{{.Owner.Name}} / {{end}}{{end}}{{.Name}} + +
    + {{if .IsArchived}} + {{$.locale.Tr "repo.desc.archived"}} + {{end}} + {{if .IsTemplate}} + {{if .IsPrivate}} + {{$.locale.Tr "repo.desc.private_template"}} + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.internal_template"}} + {{end}} + {{end}} + {{else}} + {{if .IsPrivate}} + {{$.locale.Tr "repo.desc.private"}} + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.internal"}} + {{end}} + {{end}} + {{end}} + {{if .IsFork}} + {{svg "octicon-repo-forked"}} + {{else if .IsMirror}} + {{svg "octicon-mirror"}} + {{end}} +
    +
    + +
    +
    + {{$description := .DescriptionHTML $.Context}} + {{if $description}}

    {{$description}}

    {{end}} + {{if .Topics}} +
    + {{range .Topics}} + {{if ne . ""}}
    {{.}}
    {{end}} + {{end}} +
    + {{end}} +

    {{$.locale.Tr "org.repo_updated"}} {{TimeSinceUnix .UpdatedUnix $.locale}}

    +
    +
    + {{else}} +
    + {{$.locale.Tr "explore.repo_no_results"}} +
    + {{end}} +
    diff --git a/src/templates/explore/repo_search.tmpl b/src/templates/explore/repo_search.tmpl new file mode 100644 index 0000000..dac9246 --- /dev/null +++ b/src/templates/explore/repo_search.tmpl @@ -0,0 +1,42 @@ + +
    + + +
    + + {{if .PageIsExploreRepositories}} + + {{else}} + + {{end}} + +
    +
    +{{if and .PageIsExploreRepositories .OnlyShowRelevant}} +
    + {{.locale.Tr "explore.relevant_repositories" ((printf "%s%s" $.Link "?only_show_relevant=0")|Escape) | Safe}} +
    +{{end}} +
    diff --git a/src/templates/explore/repos.tmpl b/src/templates/explore/repos.tmpl new file mode 100644 index 0000000..dfede2f --- /dev/null +++ b/src/templates/explore/repos.tmpl @@ -0,0 +1,10 @@ +{{template "base/head" .}} +
    + {{template "explore/navbar" .}} +
    + {{template "explore/repo_search" .}} + {{template "explore/repo_list" .}} + {{template "base/paginate" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/explore/search.tmpl b/src/templates/explore/search.tmpl new file mode 100644 index 0000000..72dee41 --- /dev/null +++ b/src/templates/explore/search.tmpl @@ -0,0 +1,24 @@ + +
    +
    + + +
    +
    +
    diff --git a/src/templates/explore/users.tmpl b/src/templates/explore/users.tmpl new file mode 100644 index 0000000..1f3b944 --- /dev/null +++ b/src/templates/explore/users.tmpl @@ -0,0 +1,33 @@ +{{template "base/head" .}} +
    + {{template "explore/navbar" .}} +
    + {{template "explore/search" .}} + +
    + {{range .Users}} +
    + {{avatar $.Context .}} +
    + {{.Name}} {{.FullName}} +
    + {{if .Location}} + {{svg "octicon-location"}} {{.Location}} + {{end}} + {{if and $.ShowUserEmail .Email $.IsSigned (not .KeepEmailPrivate)}} + {{svg "octicon-mail"}} + {{.Email}} + {{end}} + {{svg "octicon-clock"}} {{$.locale.Tr "user.joined_on" (DateTime "short" .CreatedUnix) | Safe}} +
    +
    +
    + {{else}} +
    {{$.locale.Tr "explore.user_no_results"}}
    + {{end}} +
    + + {{template "base/paginate" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/home.tmpl b/src/templates/home.tmpl new file mode 100644 index 0000000..cc78499 --- /dev/null +++ b/src/templates/home.tmpl @@ -0,0 +1,9 @@ +{{template "base/head" .}} +
    +
    +
    + +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/install.tmpl b/src/templates/install.tmpl new file mode 100644 index 0000000..0ef1cd8 --- /dev/null +++ b/src/templates/install.tmpl @@ -0,0 +1,335 @@ +{{template "base/head" .}} +
    +
    +
    +

    + {{.locale.Tr "install.title"}} +

    +
    + {{template "base/alert" .}} + +

    {{.locale.Tr "install.docker_helper" "https://docs.gitea.io/en-us/install-with-docker/" | Safe}}

    + +
    + +

    {{.locale.Tr "install.db_title"}}

    +

    {{.locale.Tr "install.require_db_desc"}}

    +
    + + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + + {{.locale.Tr "install.db_schema_helper"}} +
    +
    + +
    +
    + + + {{.locale.Tr "install.sqlite_helper" | Safe}} +
    +
    + + {{if .Err_DbInstalledBefore}} +
    +

    {{.locale.Tr "install.reinstall_confirm_message"}}

    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + {{end}} + + +

    {{.locale.Tr "install.general_title"}}

    +
    + + + {{.locale.Tr "install.app_name_helper"}} +
    +
    + + + {{.locale.Tr "install.repo_path_helper"}} +
    +
    + + + {{.locale.Tr "install.lfs_path_helper"}} +
    +
    + + + {{.locale.Tr "install.run_user_helper"}} +
    +
    + + + {{.locale.Tr "install.domain_helper"}} +
    +
    + + + {{.locale.Tr "install.ssh_port_helper"}} +
    +
    + + + {{.locale.Tr "install.http_port_helper"}} +
    +
    + + + {{.locale.Tr "install.app_url_helper"}} +
    +
    + + + {{.locale.Tr "install.log_root_path_helper"}} +
    +
    +
    + + +
    + {{.locale.Tr "install.enable_update_checker_helper"}} +
    + + + +

    {{.locale.Tr "install.optional_title"}}

    + + +
    + + {{.locale.Tr "install.email_title"}} + +
    + + +
    +
    + + +
    +
    + + + {{.locale.Tr "install.smtp_from_helper"}} +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + + +
    + + {{.locale.Tr "install.server_service_title"}} + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + + + {{.locale.Tr "install.no_reply_address_helper"}} +
    +
    + + + {{.locale.Tr "install.password_algorithm_helper"}} +
    +
    + + +
    + + {{.locale.Tr "install.admin_title"}} + +

    {{.locale.Tr "install.admin_setting_desc"}}

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    + +{{template "base/footer" .}} diff --git a/src/templates/mail/auth/activate.tmpl b/src/templates/mail/auth/activate.tmpl new file mode 100644 index 0000000..a15afe3 --- /dev/null +++ b/src/templates/mail/auth/activate.tmpl @@ -0,0 +1,17 @@ + + + + + + {{.locale.Tr "mail.activate_account.title" (.DisplayName|DotEscape)}} + + +{{$activate_url := printf "%suser/activate?code=%s" AppUrl (QueryEscape .Code)}} + +

    {{.locale.Tr "mail.activate_account.text_1" (.DisplayName|DotEscape) AppName | Str2html}}


    +

    {{.locale.Tr "mail.activate_account.text_2" .ActiveCodeLives | Str2html}}

    {{$activate_url}}


    +

    {{.locale.Tr "mail.link_not_working_do_paste"}}

    + +

    © {{AppName}}

    + + diff --git a/src/templates/mail/auth/activate_email.tmpl b/src/templates/mail/auth/activate_email.tmpl new file mode 100644 index 0000000..b15cc2a --- /dev/null +++ b/src/templates/mail/auth/activate_email.tmpl @@ -0,0 +1,17 @@ + + + + + + {{.locale.Tr "mail.activate_email.title" (.DisplayName|DotEscape)}} + + +{{$activate_url := printf "%suser/activate_email?code=%s&email=%s" AppUrl (QueryEscape .Code) (QueryEscape .Email)}} + +

    {{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape) | Str2html}}


    +

    {{.locale.Tr "mail.activate_email.text" .ActiveCodeLives | Str2html}}

    {{$activate_url}}


    +

    {{.locale.Tr "mail.link_not_working_do_paste"}}

    + +

    © {{AppName}}

    + + diff --git a/src/templates/mail/auth/register_notify.tmpl b/src/templates/mail/auth/register_notify.tmpl new file mode 100644 index 0000000..3cdb456 --- /dev/null +++ b/src/templates/mail/auth/register_notify.tmpl @@ -0,0 +1,18 @@ + + + + + + {{.locale.Tr "mail.register_notify.title" (.DisplayName|DotEscape) AppName}} + + +{{$set_pwd_url := printf "%[1]suser/forgot_password" AppUrl}} + +

    {{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape) | Str2html}}


    +

    {{.locale.Tr "mail.register_notify.text_1" AppName}}


    +

    {{.locale.Tr "mail.register_notify.text_2" .Username}}

    {{AppUrl}}user/login


    +

    {{.locale.Tr "mail.register_notify.text_3" ($set_pwd_url | Escape) | Str2html}}


    + +

    © {{AppName}}

    + + diff --git a/src/templates/mail/auth/reset_passwd.tmpl b/src/templates/mail/auth/reset_passwd.tmpl new file mode 100644 index 0000000..172844c --- /dev/null +++ b/src/templates/mail/auth/reset_passwd.tmpl @@ -0,0 +1,17 @@ + + + + + + {{.locale.Tr "mail.reset_password.title" (.DisplayName|DotEscape)}} + + +{{$recover_url := printf "%suser/recover_account?code=%s" AppUrl (QueryEscape .Code)}} + +

    {{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape) | Str2html}}


    +

    {{.locale.Tr "mail.reset_password.text" .ResetPwdCodeLives | Str2html}}

    {{$recover_url}}


    +

    {{.locale.Tr "mail.link_not_working_do_paste"}}

    + +

    © {{AppName}}

    + + diff --git a/src/templates/mail/issue/assigned.tmpl b/src/templates/mail/issue/assigned.tmpl new file mode 100644 index 0000000..d02ea39 --- /dev/null +++ b/src/templates/mail/issue/assigned.tmpl @@ -0,0 +1,29 @@ + + + + + + {{.Subject}} + + +{{$repo_url := printf "%s" (Escape .Issue.Repo.HTMLURL) (Escape .Issue.Repo.FullName)}} +{{$link := printf "#%d" (Escape .Link) .Issue.Index}} + +

    + {{if .IsPull}} + {{.locale.Tr "mail.issue_assigned.pull" .Doer.Name $link $repo_url | Str2html}} + {{else}} + {{.locale.Tr "mail.issue_assigned.issue" .Doer.Name $link $repo_url | Str2html}} + {{end}} +

    + + + diff --git a/src/templates/mail/issue/default.tmpl b/src/templates/mail/issue/default.tmpl new file mode 100644 index 0000000..422a4f0 --- /dev/null +++ b/src/templates/mail/issue/default.tmpl @@ -0,0 +1,91 @@ + + + + + {{.Subject}} + + + + + + + {{if .IsMention}}

    {{.locale.Tr "mail.issue.x_mentioned_you" .Doer.Name | Str2html}}

    {{end}} + {{if eq .ActionName "push"}} +

    + {{if .Comment.IsForcePush}} + {{$oldCommitUrl := printf "%s/commit/%s" .Comment.Issue.PullRequest.BaseRepo.HTMLURL .Comment.OldCommit}} + {{$oldShortSha := ShortSha .Comment.OldCommit}} + {{$oldCommitLink := printf "%[2]s" (Escape $oldCommitUrl) (Escape $oldShortSha)}} + + {{$newCommitUrl := printf "%s/commit/%s" .Comment.Issue.PullRequest.BaseRepo.HTMLURL .Comment.NewCommit}} + {{$newShortSha := ShortSha .Comment.NewCommit}} + {{$newCommitLink := printf "%[2]s" (Escape $newCommitUrl) (Escape $newShortSha)}} + + {{.locale.Tr "mail.issue.action.force_push" .Doer.Name .Comment.Issue.PullRequest.HeadBranch $oldCommitLink $newCommitLink | Str2html}} + {{else}} + {{.locale.TrN (len .Comment.Commits) "mail.issue.action.push_1" "mail.issue.action.push_n" .Doer.Name .Comment.Issue.PullRequest.HeadBranch (len .Comment.Commits) | Str2html}} + {{end}} +

    + {{end}} +

    + {{if eq .ActionName "close"}} + {{.locale.Tr "mail.issue.action.close" (Escape .Doer.Name) .Issue.Index | Str2html}} + {{else if eq .ActionName "reopen"}} + {{.locale.Tr "mail.issue.action.reopen" (Escape .Doer.Name) .Issue.Index | Str2html}} + {{else if eq .ActionName "merge"}} + {{.locale.Tr "mail.issue.action.merge" (Escape .Doer.Name) .Issue.Index (Escape .Issue.PullRequest.BaseBranch) | Str2html}} + {{else if eq .ActionName "approve"}} + {{.locale.Tr "mail.issue.action.approve" (Escape .Doer.Name) | Str2html}} + {{else if eq .ActionName "reject"}} + {{.locale.Tr "mail.issue.action.reject" (Escape .Doer.Name) | Str2html}} + {{else if eq .ActionName "review"}} + {{.locale.Tr "mail.issue.action.review" (Escape .Doer.Name) | Str2html}} + {{else if eq .ActionName "review_dismissed"}} + {{.locale.Tr "mail.issue.action.review_dismissed" (Escape .Doer.Name) (Escape .Comment.Review.Reviewer.Name) | Str2html}} + {{else if eq .ActionName "ready_for_review"}} + {{.locale.Tr "mail.issue.action.ready_for_review" (Escape .Doer.Name) | Str2html}} + {{end}} + + {{- if eq .Body ""}} + {{if eq .ActionName "new"}} + {{.locale.Tr "mail.issue.action.new" (Escape .Doer.Name) .Issue.Index | Str2html}} + {{end}} + {{else}} + {{.Body | Str2html}} + {{end -}} + {{- range .ReviewComments}} +


    + {{$.locale.Tr "mail.issue.in_tree_path" .TreePath}} +
    +
    {{.Patch}}
    +
    {{.RenderedContent | Safe}}
    +
    + {{end -}} + {{if eq .ActionName "push"}} + + {{end}} +

    + + + diff --git a/src/templates/mail/notify/collaborator.tmpl b/src/templates/mail/notify/collaborator.tmpl new file mode 100644 index 0000000..9810c70 --- /dev/null +++ b/src/templates/mail/notify/collaborator.tmpl @@ -0,0 +1,21 @@ + + + + + + {{.Subject}} + + + +

    {{.locale.Tr "mail.repo.collaborator.added.text"}} {{.RepoName}}

    + + + diff --git a/src/templates/mail/notify/repo_transfer.tmpl b/src/templates/mail/notify/repo_transfer.tmpl new file mode 100644 index 0000000..586f83e --- /dev/null +++ b/src/templates/mail/notify/repo_transfer.tmpl @@ -0,0 +1,18 @@ + + + + + {{.Subject}} + + +{{$url := printf "%[2]s" (Escape .Link) (Escape .Repo)}} + +

    {{.Subject}}. + {{.locale.Tr "mail.repo.transfer.body" $url | Str2html}} +

    + --- +
    + {{.locale.Tr "mail.view_it_on" AppName}}. +

    + + diff --git a/src/templates/mail/release.tmpl b/src/templates/mail/release.tmpl new file mode 100644 index 0000000..f588d82 --- /dev/null +++ b/src/templates/mail/release.tmpl @@ -0,0 +1,61 @@ + + + + + {{.Subject}} + + + + + +{{$release_url := printf "%s" (.Release.HTMLURL | Escape) (.Release.TagName | Escape)}} +{{$repo_url := printf "%s" (.Release.Repo.HTMLURL | Escape) (.Release.Repo.FullName | Escape)}} + +

    + {{.locale.Tr "mail.release.new.text" .Release.Publisher.Name $release_url $repo_url | Str2html}} +

    +

    {{.locale.Tr "mail.release.title" .Release.Title}}

    +

    + {{.locale.Tr "mail.release.note"}}
    + {{- if eq .Release.RenderedNote ""}} + {{else}} + {{.Release.RenderedNote | Str2html}} + {{end -}} +

    +

    +

    + --- +
    + {{.locale.Tr "mail.release.downloads"}} +

    +

    + + + diff --git a/src/templates/mail/team_invite.tmpl b/src/templates/mail/team_invite.tmpl new file mode 100644 index 0000000..8357895 --- /dev/null +++ b/src/templates/mail/team_invite.tmpl @@ -0,0 +1,16 @@ + + + + + + +{{$invite_url := printf "%sorg/invite/%s" AppUrl (QueryEscape .Invite.Token)}} + +

    {{.locale.Tr "mail.team_invite.text_1" (DotEscape .Inviter.DisplayName) (DotEscape .Team.Name) (DotEscape .Organization.DisplayName) | Str2html}}

    +

    {{.locale.Tr "mail.team_invite.text_2"}}

    {{$invite_url}}

    +

    {{.locale.Tr "mail.link_not_working_do_paste"}}

    +

    {{.locale.Tr "mail.team_invite.text_3" .Invite.Email}}

    + +

    © {{AppName}}

    + + diff --git a/src/templates/org/create.tmpl b/src/templates/org/create.tmpl new file mode 100644 index 0000000..7e988ba --- /dev/null +++ b/src/templates/org/create.tmpl @@ -0,0 +1,57 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "new_org"}} +

    +
    + {{template "base/alert" .}} +
    + + + {{.locale.Tr "org.org_name_helper"}} +
    + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/org/header.tmpl b/src/templates/org/header.tmpl new file mode 100644 index 0000000..6106fe5 --- /dev/null +++ b/src/templates/org/header.tmpl @@ -0,0 +1,18 @@ +{{with .Org}} +
    +
    +
    +
    + {{avatar $.Context . 100}} + {{.DisplayName}} + + {{if .Visibility.IsLimited}}
    {{$.locale.Tr "org.settings.visibility.limited_shortname"}}
    {{end}} + {{if .Visibility.IsPrivate}}
    {{$.locale.Tr "org.settings.visibility.private_shortname"}}
    {{end}} +
    +
    +
    +
    +
    +{{end}} + +{{template "org/menu" .}} diff --git a/src/templates/org/home.tmpl b/src/templates/org/home.tmpl new file mode 100644 index 0000000..d540f80 --- /dev/null +++ b/src/templates/org/home.tmpl @@ -0,0 +1,95 @@ +{{template "base/head" .}} +
    +
    + {{avatar $.Context .Org 140 "org-avatar"}} +
    +
    + {{.Org.DisplayName}} + + {{if .Org.Visibility.IsLimited}}{{.locale.Tr "org.settings.visibility.limited_shortname"}}{{end}} + {{if .Org.Visibility.IsPrivate}}{{.locale.Tr "org.settings.visibility.private_shortname"}}{{end}} + + {{if .EnableFeed}} + {{svg "octicon-rss" 24}} + {{end}} +
    + {{if $.RenderedDescription}}
    {{$.RenderedDescription|Str2html}}
    {{end}} +
    + {{if .Org.Location}}
    {{svg "octicon-location"}} {{.Org.Location}}
    {{end}} + {{if .Org.Website}}
    {{svg "octicon-link"}} {{.Org.Website}}
    {{end}} +
    +
    + +
    + + {{template "org/menu" .}} + +
    +
    +
    + {{template "explore/repo_search" .}} + {{template "explore/repo_list" .}} + {{template "base/paginate" .}} +
    + +
    + {{if .CanCreateOrgRepo}} +
    + {{.locale.Tr "new_repo"}} + {{if not .DisableNewPullMirrors}} + {{.locale.Tr "new_migrate"}} + {{end}} +
    +
    + {{end}} +

    + {{.locale.Tr "org.members"}} + {{.MembersTotal}} {{svg "octicon-chevron-right"}} +

    +
    + {{$isMember := .IsOrganizationMember}} + {{range .Members}} + {{if or $isMember (call $.IsPublicMember .ID)}} + {{avatar $.Context . 48}} + {{end}} + {{end}} +
    + + {{if .IsOrganizationMember}} +
    + {{.locale.Tr "org.teams"}} + {{.Org.NumTeams}} {{svg "octicon-chevron-right"}} +
    + + {{if .IsOrganizationOwner}} + + {{end}} + {{end}} +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/org/member/members.tmpl b/src/templates/org/member/members.tmpl new file mode 100644 index 0000000..3d5b3be --- /dev/null +++ b/src/templates/org/member/members.tmpl @@ -0,0 +1,103 @@ +{{template "base/head" .}} +
    + {{template "org/header" .}} +
    + {{template "base/alert" .}} + +
    + {{range .Members}} +
    +
    + {{avatar $.Context . 48}} +
    + +
    {{.FullName}}
    +
    +
    +
    +
    + {{$.locale.Tr "org.members.membership_visibility"}} +
    +
    + {{$isPublic := index $.MembersIsPublicMember .ID}} + {{if $isPublic}} + {{$.locale.Tr "org.members.public"}} + {{if or (eq $.SignedUser.ID .ID) $.IsOrganizationOwner}}({{$.locale.Tr "org.members.public_helper"}}){{end}} + {{else}} + {{$.locale.Tr "org.members.private"}} + {{if or (eq $.SignedUser.ID .ID) $.IsOrganizationOwner}}({{$.locale.Tr "org.members.private_helper"}}){{end}} + {{end}} +
    +
    + {{if not $.PublicOnly}} +
    +
    + {{$.locale.Tr "org.members.member_role"}} +
    +
    + {{if index $.MembersIsUserOrgOwner .ID}}{{svg "octicon-shield-lock"}} {{$.locale.Tr "org.members.owner"}}{{else}}{{$.locale.Tr "org.members.member"}}{{end}} +
    +
    +
    + {{if $.IsOrganizationOwner}} +
    + {{$.locale.Tr "admin.users.2fa"}} +
    +
    + + {{if index $.MembersTwoFaStatus .ID}} + {{svg "octicon-check"}} + {{else}} + {{svg "octicon-x"}} + {{end}} + +
    + {{end}} +
    + {{end}} +
    +
    + {{if eq $.SignedUser.ID .ID}} +
    + +
    + {{else if $.IsOrganizationOwner}} +
    + +
    + {{end}} +
    +
    +
    + {{end}} +
    + + {{template "base/paginate" .}} +
    +
    + + + +{{template "base/footer" .}} diff --git a/src/templates/org/menu.tmpl b/src/templates/org/menu.tmpl new file mode 100644 index 0000000..1bb19a0 --- /dev/null +++ b/src/templates/org/menu.tmpl @@ -0,0 +1,47 @@ + diff --git a/src/templates/org/projects/list.tmpl b/src/templates/org/projects/list.tmpl new file mode 100644 index 0000000..1f113b2 --- /dev/null +++ b/src/templates/org/projects/list.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} + {{template "projects/list" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/org/projects/new.tmpl b/src/templates/org/projects/new.tmpl new file mode 100644 index 0000000..7011eb5 --- /dev/null +++ b/src/templates/org/projects/new.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} + {{template "projects/new" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/org/projects/view.tmpl b/src/templates/org/projects/view.tmpl new file mode 100644 index 0000000..c2d8f01 --- /dev/null +++ b/src/templates/org/projects/view.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} + {{template "projects/view" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/org/settings/actions.tmpl b/src/templates/org/settings/actions.tmpl new file mode 100644 index 0000000..b3b24e0 --- /dev/null +++ b/src/templates/org/settings/actions.tmpl @@ -0,0 +1,9 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings actions")}} +
    + {{if eq .PageType "runners"}} + {{template "shared/actions/runner_list" .}} + {{else if eq .PageType "secrets"}} + {{template "shared/secrets/add_list" .}} + {{end}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/applications.tmpl b/src/templates/org/settings/applications.tmpl new file mode 100644 index 0000000..5934f99 --- /dev/null +++ b/src/templates/org/settings/applications.tmpl @@ -0,0 +1,9 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings options")}} +
    +

    + {{.locale.Tr "settings.applications"}} +

    + + {{template "user/settings/applications_oauth2_list" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/applications_oauth2_edit.tmpl b/src/templates/org/settings/applications_oauth2_edit.tmpl new file mode 100644 index 0000000..987803a --- /dev/null +++ b/src/templates/org/settings/applications_oauth2_edit.tmpl @@ -0,0 +1,5 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings options")}} +
    + {{template "user/settings/applications_oauth2_edit_form" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/delete.tmpl b/src/templates/org/settings/delete.tmpl new file mode 100644 index 0000000..9c8644d --- /dev/null +++ b/src/templates/org/settings/delete.tmpl @@ -0,0 +1,35 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings delete")}} + +
    +

    + {{.locale.Tr "org.settings.delete_account"}} +

    +
    +
    +

    {{svg "octicon-alert"}} {{.locale.Tr "org.settings.delete_prompt" | Str2html}}

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    +
    +
    + + + +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/hook_new.tmpl b/src/templates/org/settings/hook_new.tmpl new file mode 100644 index 0000000..1bf74fb --- /dev/null +++ b/src/templates/org/settings/hook_new.tmpl @@ -0,0 +1,48 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings new webhook")}} +
    +

    + {{if .PageIsSettingsHooksNew}}{{.locale.Tr "repo.settings.add_webhook"}}{{else}}{{.locale.Tr "repo.settings.update_webhook"}}{{end}} +
    + {{if eq .HookType "gitea"}} + + {{else if eq .HookType "gogs"}} + + {{else if eq .HookType "slack"}} + + {{else if eq .HookType "discord"}} + + {{else if eq .HookType "dingtalk"}} + + {{else if eq .HookType "telegram"}} + + {{else if eq .HookType "msteams"}} + + {{else if eq .HookType "feishu"}} + + {{else if eq .HookType "matrix"}} + {{svg "gitea-matrix" 26}} + {{else if eq .HookType "wechatwork"}} + + {{else if eq .HookType "packagist"}} + + {{end}} +
    +

    +
    + {{template "repo/settings/webhook/gitea" .}} + {{template "repo/settings/webhook/gogs" .}} + {{template "repo/settings/webhook/slack" .}} + {{template "repo/settings/webhook/discord" .}} + {{template "repo/settings/webhook/dingtalk" .}} + {{template "repo/settings/webhook/telegram" .}} + {{template "repo/settings/webhook/msteams" .}} + {{template "repo/settings/webhook/feishu" .}} + {{template "repo/settings/webhook/matrix" .}} + {{template "repo/settings/webhook/wechatwork" .}} + {{template "repo/settings/webhook/packagist" .}} +
    + + {{template "repo/settings/webhook/history" .}} +
    + +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/hooks.tmpl b/src/templates/org/settings/hooks.tmpl new file mode 100644 index 0000000..9f30796 --- /dev/null +++ b/src/templates/org/settings/hooks.tmpl @@ -0,0 +1,5 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings webhooks")}} +
    + {{template "repo/settings/webhook/list" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/labels.tmpl b/src/templates/org/settings/labels.tmpl new file mode 100644 index 0000000..be40861 --- /dev/null +++ b/src/templates/org/settings/labels.tmpl @@ -0,0 +1,19 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings labels")}} +
    +
    +
    + {{$.locale.Tr "org.settings.labels_desc" | Str2html}} +
    +
    +
    + +
    +
    +
    +
    + {{template "repo/issue/labels/label_new" .}} + {{template "repo/issue/labels/label_list" .}} +
    +{{template "repo/issue/labels/edit_delete_label" .}} +{{template "org/settings/layout_footer" .}} + diff --git a/src/templates/org/settings/layout_footer.tmpl b/src/templates/org/settings/layout_footer.tmpl new file mode 100644 index 0000000..09d88c0 --- /dev/null +++ b/src/templates/org/settings/layout_footer.tmpl @@ -0,0 +1,11 @@ +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    + {{/* block: org-setting-content */}} +{{end}} + +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/org/settings/layout_head.tmpl b/src/templates/org/settings/layout_head.tmpl new file mode 100644 index 0000000..c245a3b --- /dev/null +++ b/src/templates/org/settings/layout_head.tmpl @@ -0,0 +1,14 @@ +{{template "base/head" .ctxData}} +
    + {{template "org/header" .ctxData}} +
    + {{template "org/settings/navbar" .ctxData}} +
    + {{template "base/alert" .ctxData}} + {{/* block: org-setting-content */}} + +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    +{{end}} diff --git a/src/templates/org/settings/navbar.tmpl b/src/templates/org/settings/navbar.tmpl new file mode 100644 index 0000000..6bea9f5 --- /dev/null +++ b/src/templates/org/settings/navbar.tmpl @@ -0,0 +1,42 @@ +
    + +
    diff --git a/src/templates/org/settings/options.tmpl b/src/templates/org/settings/options.tmpl new file mode 100644 index 0000000..21b1420 --- /dev/null +++ b/src/templates/org/settings/options.tmpl @@ -0,0 +1,98 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings options")}} +
    +

    + {{.locale.Tr "org.settings.options"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + + {{if .SignedUser.IsAdmin}} +
    + +
    + + +

    {{.locale.Tr "admin.users.max_repo_creation_desc"}}

    +
    + {{end}} + +
    + +
    +
    + +
    + +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    + + {{$.locale.Tr "settings.delete_current_avatar"}} +
    +
    +
    +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/packages.tmpl b/src/templates/org/settings/packages.tmpl new file mode 100644 index 0000000..91106c3 --- /dev/null +++ b/src/templates/org/settings/packages.tmpl @@ -0,0 +1,6 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings packages")}} +
    + {{template "package/shared/cleanup_rules/list" .}} + {{template "package/shared/cargo" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/packages_cleanup_rules_edit.tmpl b/src/templates/org/settings/packages_cleanup_rules_edit.tmpl new file mode 100644 index 0000000..ff4c2dd --- /dev/null +++ b/src/templates/org/settings/packages_cleanup_rules_edit.tmpl @@ -0,0 +1,5 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings packages")}} +
    + {{template "package/shared/cleanup_rules/edit" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/packages_cleanup_rules_preview.tmpl b/src/templates/org/settings/packages_cleanup_rules_preview.tmpl new file mode 100644 index 0000000..5a2f061 --- /dev/null +++ b/src/templates/org/settings/packages_cleanup_rules_preview.tmpl @@ -0,0 +1,5 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings packages")}} +
    + {{template "package/shared/cleanup_rules/preview" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/settings/runners_edit.tmpl b/src/templates/org/settings/runners_edit.tmpl new file mode 100644 index 0000000..acd67a4 --- /dev/null +++ b/src/templates/org/settings/runners_edit.tmpl @@ -0,0 +1,5 @@ +{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings runners")}} +
    + {{template "shared/actions/runner_edit" .}} +
    +{{template "org/settings/layout_footer" .}} diff --git a/src/templates/org/team/invite.tmpl b/src/templates/org/team/invite.tmpl new file mode 100644 index 0000000..55ecd04 --- /dev/null +++ b/src/templates/org/team/invite.tmpl @@ -0,0 +1,23 @@ +{{template "base/head" .}} +
    +
    + {{template "base/alert" .}} +
    +
    + {{avatar $.Context .Organization 140}} +
    +
    +
    {{.locale.Tr "org.teams.invite.title" .Team.Name .Organization.Name | Str2html}}
    +
    {{.locale.Tr "org.teams.invite.by" .Inviter.Name}}
    +
    {{.locale.Tr "org.teams.invite.description"}}
    +
    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/org/team/members.tmpl b/src/templates/org/team/members.tmpl new file mode 100644 index 0000000..f1ccbc0 --- /dev/null +++ b/src/templates/org/team/members.tmpl @@ -0,0 +1,76 @@ +{{template "base/head" .}} +
    + {{template "org/header" .}} +
    + {{template "base/alert" .}} +
    + {{template "org/team/sidebar" .}} +
    + {{template "org/team/navbar" .}} + {{if .IsOrganizationOwner}} +
    +
    + {{.CsrfTokenHtml}} + +
    + +
    + +
    +
    + {{end}} +
    + {{range .Team.Members}} +
    + {{avatar $.Context . 48 "gt-mr-3 gt-mb-0"}} + + {{.DisplayName}} + + {{if and $.IsOrganizationOwner (not (and ($.Team.IsOwnerTeam) (eq (len $.Team.Members) 1)))}} +
    + +
    + {{end}} +
    + {{else}} +
    + {{$.locale.Tr "org.teams.members.none"}} +
    + {{end}} +
    + {{if and .Invites $.IsOrganizationOwner}} +

    {{$.locale.Tr "org.teams.invite_team_member.list"}}

    +
    + {{range .Invites}} +
    + {{.Email}} +
    + {{$.CsrfTokenHtml}} + + +
    +
    + {{end}} +
    + {{end}} +
    +
    +
    +
    + +{{template "base/footer" .}} diff --git a/src/templates/org/team/navbar.tmpl b/src/templates/org/team/navbar.tmpl new file mode 100644 index 0000000..44fe5f1 --- /dev/null +++ b/src/templates/org/team/navbar.tmpl @@ -0,0 +1,4 @@ + diff --git a/src/templates/org/team/new.tmpl b/src/templates/org/team/new.tmpl new file mode 100644 index 0000000..0cba09b --- /dev/null +++ b/src/templates/org/team/new.tmpl @@ -0,0 +1,161 @@ +{{template "base/head" .}} +
    + {{template "org/header" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{if .PageIsOrgTeamsNew}}{{.locale.Tr "org.create_new_team"}}{{else}}{{.locale.Tr "org.teams.settings"}}{{end}} +

    +
    + {{template "base/alert" .}} +
    + + {{if eq .Team.LowerName "owners"}} + + {{end}} + + {{.locale.Tr "org.team_name_helper"}} +
    +
    + + + {{.locale.Tr "org.team_desc_helper"}} +
    + {{if not (eq .Team.LowerName "owners")}} +
    + +
    +
    +
    + + + {{.locale.Tr "org.teams.specific_repositories_helper" | Str2html}} +
    +
    +
    +
    + + + {{.locale.Tr "org.teams.all_repositories_helper" | Str2html}} +
    +
    + +
    +
    + + + {{.locale.Tr "org.teams.can_create_org_repo_helper"}} +
    +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "org.teams.general_access_helper"}} +
    +
    +
    +
    + + + {{.locale.Tr "org.teams.admin_access_helper"}} +
    +
    +
    +
    + +
    + + + + + + + + + + + + {{range $t, $unit := $.Units}} + {{if ge $unit.MaxPerm 2}} + + + + + + + {{end}} + {{end}} + +
    {{.locale.Tr "units.unit"}}{{.locale.Tr "org.teams.none_access"}} + {{svg "octicon-question" 16 "gt-ml-2"}}{{.locale.Tr "org.teams.read_access"}} + {{svg "octicon-question" 16 "gt-ml-2"}}{{.locale.Tr "org.teams.write_access"}} + {{svg "octicon-question" 16 "gt-ml-2"}}
    +
    +
    + + {{$.locale.Tr $unit.DescKey}} +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + {{range $t, $unit := $.Units}} + {{if lt $unit.MaxPerm 2}} +
    +
    + + + {{$.locale.Tr $unit.DescKey}} +
    +
    + {{end}} + {{end}} +
    + {{end}} + +
    + {{if .PageIsOrgTeamsNew}} + + {{else}} + + {{if not (eq .Team.LowerName "owners")}} + + {{end}} + {{end}} +
    +
    +
    +
    +
    +
    +
    + + +{{template "base/footer" .}} diff --git a/src/templates/org/team/repositories.tmpl b/src/templates/org/team/repositories.tmpl new file mode 100644 index 0000000..9263caf --- /dev/null +++ b/src/templates/org/team/repositories.tmpl @@ -0,0 +1,89 @@ +{{template "base/head" .}} +
    + {{template "org/header" .}} +
    + {{template "base/alert" .}} +
    + {{template "org/team/sidebar" .}} +
    + {{template "org/team/navbar" .}} + {{$canAddRemove := and $.IsOrganizationOwner (not $.Team.IncludesAllRepositories)}} + {{if $canAddRemove}} +
    +
    +
    + {{.CsrfTokenHtml}} +
    + +
    + +
    +
    +
    +
    + + +
    +
    +
    + {{end}} +
    + {{range .Team.Repos}} +
    + {{if .IsPrivate}} + {{svg "octicon-lock" 16 "gt-mr-3"}} + {{else if .IsFork}} + {{svg "octicon-repo-forked" 16 "gt-mr-3"}} + {{else if .IsMirror}} + {{svg "octicon-mirror" 16 "gt-mr-3"}} + {{else}} + {{svg "octicon-repo" 16 "gt-mr-3"}} + {{end}} + + {{$.Org.Name}}/{{.Name}} + + {{if $canAddRemove}} +
    + {{$.CsrfTokenHtml}} + +
    + {{end}} +
    + {{else}} +
    + {{$.locale.Tr "org.teams.repos.none"}} +
    + {{end}} +
    +
    +
    +
    +
    + + + + + +{{template "base/footer" .}} diff --git a/src/templates/org/team/sidebar.tmpl b/src/templates/org/team/sidebar.tmpl new file mode 100644 index 0000000..f215dd5 --- /dev/null +++ b/src/templates/org/team/sidebar.tmpl @@ -0,0 +1,94 @@ +
    +

    + {{.Team.Name}} +
    + {{if .Team.IsMember $.SignedUser.ID}} +
    + +
    + {{else if .IsOrganizationOwner}} +
    + {{$.CsrfTokenHtml}} + + +
    + {{end}} +
    +

    +
    +
    + {{if .Team.Description}} + {{.Team.Description}} + {{else}} + {{.locale.Tr "org.teams.no_desc"}} + {{end}} +
    + {{if eq .Team.LowerName "owners"}} +
    + {{.locale.Tr "org.teams.owners_permission_desc" | Str2html}} +
    + {{else}} +
    +

    {{.locale.Tr "org.team_access_desc"}}

    +
      + {{if .Team.IncludesAllRepositories}} +
    • {{.locale.Tr "org.teams.all_repositories" | Str2html}} + {{else}} +
    • {{.locale.Tr "org.teams.specific_repositories" | Str2html}} + {{end}} + {{if .Team.CanCreateOrgRepo}} +
    • {{.locale.Tr "org.teams.can_create_org_repo"}} + {{end}} +
    + {{if (eq .Team.AccessMode 2)}} +

    {{.locale.Tr "org.settings.permission"}}

    + {{.locale.Tr "org.teams.write_permission_desc" | Str2html}} + {{else if (eq .Team.AccessMode 3)}} +

    {{.locale.Tr "org.settings.permission"}}

    + {{.locale.Tr "org.teams.admin_permission_desc" | Str2html}} + {{else}} + + + + + + + + + {{range $t, $unit := $.Units}} + {{if (not $unit.Type.UnitGlobalDisabled)}} + + + + + {{end}} + {{end}} + +
    {{.locale.Tr "units.unit"}}{{.locale.Tr "org.team_permission_desc"}}
    {{$.locale.Tr $unit.NameKey}}{{if eq ($.Team.UnitAccessMode $.Context $unit.Type) 0 -}} + {{$.locale.Tr "org.teams.none_access"}} + {{- else if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 1) -}} + {{$.locale.Tr "org.teams.read_access"}} + {{- else if eq ($.Team.UnitAccessMode $.Context $unit.Type) 2 -}} + {{$.locale.Tr "org.teams.write_access"}} + {{- end}}
    + {{end}} +
    + {{end}} +
    + {{if .IsOrganizationOwner}} + + {{end}} +
    + diff --git a/src/templates/org/team/teams.tmpl b/src/templates/org/team/teams.tmpl new file mode 100644 index 0000000..dcf937f --- /dev/null +++ b/src/templates/org/team/teams.tmpl @@ -0,0 +1,55 @@ +{{template "base/head" .}} +
    + {{template "org/header" .}} +
    + {{template "base/alert" .}} + {{if .IsOrganizationOwner}} + +
    + {{end}} + +
    + {{range .Teams}} +
    +
    + {{.Name}} +
    + {{if .IsMember $.SignedUser.ID}} +
    + +
    + {{else if $.IsOrganizationOwner}} +
    + {{$.CsrfTokenHtml}} + +
    + {{end}} +
    +
    +
    + {{range .Members}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .}} + {{end}} +
    +
    +

    {{.NumMembers}} {{$.locale.Tr "org.lower_members"}} · {{.NumRepos}} {{$.locale.Tr "org.lower_repositories"}}

    +
    +
    + {{end}} +
    +
    +
    + +{{template "base/footer" .}} diff --git a/src/templates/package/content/alpine.tmpl b/src/templates/package/content/alpine.tmpl new file mode 100644 index 0000000..97e2289 --- /dev/null +++ b/src/templates/package/content/alpine.tmpl @@ -0,0 +1,52 @@ +{{if eq .PackageDescriptor.Package.Type "alpine"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    /$branch/$repository
    +

    {{.locale.Tr "packages.alpine.registry.info" | Safe}}

    +
    +
    + +
    curl -JO 
    +
    +
    + +
    +
    sudo apk add {{$.PackageDescriptor.Package.Name}}={{$.PackageDescriptor.Version.Version}}
    +
    +
    +
    + +
    +
    +
    + +

    {{.locale.Tr "packages.alpine.repository"}}

    +
    + + + + + + + + + + + + + + + +
    {{.locale.Tr "packages.alpine.repository.branches"}}
    {{StringUtils.Join .Branches ", "}}
    {{.locale.Tr "packages.alpine.repository.repositories"}}
    {{StringUtils.Join .Repositories ", "}}
    {{.locale.Tr "packages.alpine.repository.architectures"}}
    {{StringUtils.Join .Architectures ", "}}
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/cargo.tmpl b/src/templates/package/content/cargo.tmpl new file mode 100644 index 0000000..bfa585e --- /dev/null +++ b/src/templates/package/content/cargo.tmpl @@ -0,0 +1,62 @@ +{{if eq .PackageDescriptor.Package.Type "cargo"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    [registry]
    +default = "gitea"
    +
    +[registries.gitea]
    +index = ""
    +
    +[net]
    +git-fetch-with-cli = true
    +
    +
    + +
    cargo add {{.PackageDescriptor.Package.Name}}@{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}} +

    {{.locale.Tr "packages.about"}}

    + {{if .PackageDescriptor.Metadata.Description}}
    {{.PackageDescriptor.Metadata.Description}}
    {{end}} + {{if .PackageDescriptor.Metadata.Readme}}
    {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}
    {{end}} + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    + + + + + + + + + {{range .PackageDescriptor.Metadata.Dependencies}} + + + + + {{end}} + +
    {{.locale.Tr "packages.dependency.id"}}{{.locale.Tr "packages.dependency.version"}}
    {{.Name}}{{.Req}}
    +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{.locale.Tr "packages.keywords"}}

    +
    + {{range .PackageDescriptor.Metadata.Keywords}} + {{.}} + {{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/chef.tmpl b/src/templates/package/content/chef.tmpl new file mode 100644 index 0000000..77f1f37 --- /dev/null +++ b/src/templates/package/content/chef.tmpl @@ -0,0 +1,48 @@ +{{if eq .PackageDescriptor.Package.Type "chef"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    knife[:supermarket_site] = ''
    +
    +
    + +
    knife supermarket install {{.PackageDescriptor.Package.Name}} {{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.LongDescription}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}

    {{.PackageDescriptor.Metadata.Description}}

    {{end}} + {{if .PackageDescriptor.Metadata.LongDescription}}{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.LongDescription}}{{end}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    + + + + + + + + + {{range $dependency, $version := .PackageDescriptor.Metadata.Dependencies}} + + + + + {{end}} + +
    {{.locale.Tr "packages.dependency.id"}}{{.locale.Tr "packages.dependency.version"}}
    {{$dependency}}{{$version}}
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/composer.tmpl b/src/templates/package/content/composer.tmpl new file mode 100644 index 0000000..d0f88da --- /dev/null +++ b/src/templates/package/content/composer.tmpl @@ -0,0 +1,50 @@ +{{if eq .PackageDescriptor.Package.Type "composer"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    {
    +	"repositories": [{
    +			"type": "composer",
    +			"url": ""
    +		}
    +	]
    +}
    +
    +
    + +
    composer require {{.PackageDescriptor.Package.Name}}:{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if or .PackageDescriptor.Metadata.Require .PackageDescriptor.Metadata.RequireDev}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    +
    + {{template "package/content/composer_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.Require "title" (.locale.Tr "packages.composer.dependencies")}} + {{template "package/content/composer_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.RequireDev "title" (.locale.Tr "packages.composer.dependencies.development")}} +
    +
    + {{end}} + + {{if or .PackageDescriptor.Metadata.Keywords}} +

    {{.locale.Tr "packages.keywords"}}

    +
    + {{range .PackageDescriptor.Metadata.Keywords}} + {{.}} + {{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/composer_dependencies.tmpl b/src/templates/package/content/composer_dependencies.tmpl new file mode 100644 index 0000000..b55c1b5 --- /dev/null +++ b/src/templates/package/content/composer_dependencies.tmpl @@ -0,0 +1,19 @@ +{{if .dependencies}} +

    {{.title}}

    + + + + + + + + + {{range $dependency, $version := .dependencies}} + + + + + {{end}} + +
    {{.root.locale.Tr "packages.dependency.id"}}{{.root.locale.Tr "packages.dependency.version"}}
    {{$dependency}}{{$version}}
    +{{end}} diff --git a/src/templates/package/content/conan.tmpl b/src/templates/package/content/conan.tmpl new file mode 100644 index 0000000..07ad6b6 --- /dev/null +++ b/src/templates/package/content/conan.tmpl @@ -0,0 +1,34 @@ +{{if eq .PackageDescriptor.Package.Type "conan"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    conan remote add gitea 
    +
    +
    + +
    conan install --remote=gitea {{.PackageDescriptor.Package.Name}}/{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}} +
    + {{end}} + + {{if or .PackageDescriptor.Metadata.Keywords}} +

    {{.locale.Tr "packages.keywords"}}

    +
    + {{range .PackageDescriptor.Metadata.Keywords}} + {{.}} + {{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/conda.tmpl b/src/templates/package/content/conda.tmpl new file mode 100644 index 0000000..71c2c98 --- /dev/null +++ b/src/templates/package/content/conda.tmpl @@ -0,0 +1,30 @@ +{{if eq .PackageDescriptor.Package.Type "conda"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    channel_alias: 
    +channels:
    +  - 
    +default_channels:
    +  - 
    +
    +
    + + {{$channel := .PackageDescriptor.PackageProperties.GetByName "conda.channel"}} +
    conda install{{if $channel}} -c {{$channel}}{{end}} {{.PackageDescriptor.PackageProperties.GetByName "conda.name"}}={{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Summary}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{else}}{{.PackageDescriptor.Metadata.Summary}}{{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/container.tmpl b/src/templates/package/content/container.tmpl new file mode 100644 index 0000000..d928b36 --- /dev/null +++ b/src/templates/package/content/container.tmpl @@ -0,0 +1,90 @@ +{{if eq .PackageDescriptor.Package.Type "container"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + + {{if eq .PackageDescriptor.Metadata.Type "helm"}} +
    helm pull oci://{{.RegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}} --version {{.PackageDescriptor.Version.LowerVersion}}
    + {{else}} + {{$separator := ":"}} + {{if not .PackageDescriptor.Metadata.IsTagged}} + {{$separator = "@"}} + {{end}} +
    docker pull {{.RegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}}{{$separator}}{{.PackageDescriptor.Version.LowerVersion}}
    + {{end}} +
    +
    + +
    {{range .PackageDescriptor.Files}}{{if eq .File.LowerName "manifest.json"}}{{.Properties.GetByName "container.digest"}}{{end}}{{end}}
    +
    +
    + +
    +
    +
    + {{if .PackageDescriptor.Metadata.Manifests}} +

    {{.locale.Tr "packages.container.multi_arch"}}

    +
    + + + + + + + + + + {{range .PackageDescriptor.Metadata.Manifests}} + + + + + + {{end}} + +
    {{.locale.Tr "packages.container.digest"}}{{.locale.Tr "packages.container.multi_arch"}}{{.locale.Tr "admin.packages.size"}}
    {{.Digest}}{{.Platform}}{{FileSize .Size}}
    +
    + {{end}} + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + {{if .PackageDescriptor.Metadata.ImageLayers}} +

    {{.locale.Tr "packages.container.layers"}}

    +
    + + + {{range .PackageDescriptor.Metadata.ImageLayers}} + + + + {{end}} + +
    {{.}}
    +
    + {{end}} + {{if .PackageDescriptor.Metadata.Labels}} +

    {{.locale.Tr "packages.container.labels"}}

    +
    + + + + + + + + + {{range $key, $value := .PackageDescriptor.Metadata.Labels}} + + + + + {{end}} + +
    {{.locale.Tr "packages.container.labels.key"}}{{.locale.Tr "packages.container.labels.value"}}
    {{$key}}{{$value}}
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/cran.tmpl b/src/templates/package/content/cran.tmpl new file mode 100644 index 0000000..dcabdbc --- /dev/null +++ b/src/templates/package/content/cran.tmpl @@ -0,0 +1,59 @@ +{{if eq .PackageDescriptor.Package.Type "cran"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    options("repos" = c(getOption("repos"), c(gitea="")))
    +
    +
    + +
    install.packages("{{.PackageDescriptor.Package.Name}}")
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Title}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Title}}{{else}}{{end}} +
    + {{end}} + + {{if or .PackageDescriptor.Metadata.Imports .PackageDescriptor.Metadata.Depends .PackageDescriptor.Metadata.LinkingTo .PackageDescriptor.Metadata.Suggests}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    + + + {{if .PackageDescriptor.Metadata.Imports}} + + + + + {{end}} + {{if .PackageDescriptor.Metadata.Depends}} + + + + + {{end}} + {{if .PackageDescriptor.Metadata.LinkingTo}} + + + + + {{end}} + {{if .PackageDescriptor.Metadata.Suggests}} + + + + + {{end}} + +
    Imports{{StringUtils.Join .PackageDescriptor.Metadata.Imports ", "}}
    Depends{{StringUtils.Join .PackageDescriptor.Metadata.Depends ", "}}
    LinkingTo{{StringUtils.Join .PackageDescriptor.Metadata.LinkingTo ", "}}
    Suggests{{StringUtils.Join .PackageDescriptor.Metadata.Suggests ", "}}
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/debian.tmpl b/src/templates/package/content/debian.tmpl new file mode 100644 index 0000000..8b60b33 --- /dev/null +++ b/src/templates/package/content/debian.tmpl @@ -0,0 +1,65 @@ +{{if eq .PackageDescriptor.Package.Type "debian"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    sudo curl  -o /etc/apt/trusted.gpg.d/gitea-{{$.PackageDescriptor.Owner.Name}}.asc
    +echo "deb  $distribution $component" | sudo tee -a /etc/apt/sources.list.d/gitea.list
    +sudo apt update
    +

    {{.locale.Tr "packages.debian.registry.info" | Safe}}

    +
    +
    + +
    +
    sudo apt install {{$.PackageDescriptor.Package.Name}}={{$.PackageDescriptor.Version.Version}}
    +
    +
    +
    + +
    +
    +
    + +

    {{.locale.Tr "packages.debian.repository"}}

    +
    + + + + + + + + + + + + + + + +
    {{.locale.Tr "packages.debian.repository.distributions"}}
    {{StringUtils.Join .Distributions ", "}}
    {{.locale.Tr "packages.debian.repository.components"}}
    {{StringUtils.Join .Components ", "}}
    {{.locale.Tr "packages.debian.repository.architectures"}}
    {{StringUtils.Join .Architectures ", "}}
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    + + + {{range .PackageDescriptor.Metadata.Dependencies}} + + + + {{end}} + +
    {{.}}
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/generic.tmpl b/src/templates/package/content/generic.tmpl new file mode 100644 index 0000000..556e319 --- /dev/null +++ b/src/templates/package/content/generic.tmpl @@ -0,0 +1,18 @@ +{{if eq .PackageDescriptor.Package.Type "generic"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    
    +{{- range .PackageDescriptor.Files -}}
    +curl 
    +{{end -}}
    +				
    +
    +
    + +
    +
    +
    +{{end}} diff --git a/src/templates/package/content/go.tmpl b/src/templates/package/content/go.tmpl new file mode 100644 index 0000000..2343d94 --- /dev/null +++ b/src/templates/package/content/go.tmpl @@ -0,0 +1,14 @@ +{{if eq .PackageDescriptor.Package.Type "go"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    GOPROXY= go install {{$.PackageDescriptor.Package.Name}}@{{$.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    +{{end}} diff --git a/src/templates/package/content/helm.tmpl b/src/templates/package/content/helm.tmpl new file mode 100644 index 0000000..9b4f575 --- /dev/null +++ b/src/templates/package/content/helm.tmpl @@ -0,0 +1,57 @@ +{{if eq .PackageDescriptor.Package.Type "helm"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    helm repo add {{AppDomain}} 
    +helm repo update
    +
    +
    + +
    helm install {{.PackageDescriptor.Package.Name}} {{AppDomain}}/{{.PackageDescriptor.Package.Name}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    + + + + + + + + + {{range .PackageDescriptor.Metadata.Dependencies}} + + + + + {{end}} + +
    {{.locale.Tr "packages.dependency.id"}}{{.locale.Tr "packages.dependency.version"}}
    {{.Name}}{{.Version}}
    +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{.locale.Tr "packages.keywords"}}

    +
    + {{range .PackageDescriptor.Metadata.Keywords}} + {{.}} + {{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/maven.tmpl b/src/templates/package/content/maven.tmpl new file mode 100644 index 0000000..f18f120 --- /dev/null +++ b/src/templates/package/content/maven.tmpl @@ -0,0 +1,71 @@ +{{if eq .PackageDescriptor.Package.Type "maven"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    <repositories>
    +	<repository>
    +		<id>gitea</id>
    +			<url></url>
    +	</repository>
    +</repositories>
    +
    +<distributionManagement>
    +	<repository>
    +		<id>gitea</id>
    +		<url></url>
    +	</repository>
    +
    +	<snapshotRepository>
    +		<id>gitea</id>
    +		<url></url>
    +	</snapshotRepository>
    +</distributionManagement>
    +
    +
    + +
    <dependency>
    +	<groupId>{{.PackageDescriptor.Metadata.GroupID}}</groupId>
    +	<artifactId>{{.PackageDescriptor.Metadata.ArtifactID}}</artifactId>
    +	<version>{{.PackageDescriptor.Version.Version}}</version>
    +</dependency>
    +
    +
    + +
    mvn install
    +
    +
    + +
    mvn dependency:get -DremoteRepositories= -Dartifact={{.PackageDescriptor.Metadata.GroupID}}:{{.PackageDescriptor.Metadata.ArtifactID}}:{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    +
    + {{range .PackageDescriptor.Metadata.Dependencies}} +
    + {{svg "octicon-package-dependencies" 16 ""}} +
    +
    {{.GroupID}}:{{.ArtifactID}}
    +
    {{.Version}}
    +
    +
    + {{end}} +
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/npm.tmpl b/src/templates/package/content/npm.tmpl new file mode 100644 index 0000000..a8d3f40 --- /dev/null +++ b/src/templates/package/content/npm.tmpl @@ -0,0 +1,56 @@ +{{if eq .PackageDescriptor.Package.Type "npm"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    {{if .PackageDescriptor.Metadata.Scope}}{{.PackageDescriptor.Metadata.Scope}}:{{end}}registry=
    +
    +
    + +
    npm install {{.PackageDescriptor.Package.Name}}@{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    "{{.PackageDescriptor.Package.Name}}": "{{.PackageDescriptor.Version.Version}}"
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Readme}} +
    + {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}} +
    + {{else if .PackageDescriptor.Metadata.Description}} + {{.PackageDescriptor.Metadata.Description}} + {{end}} +
    + {{end}} + + {{if or .PackageDescriptor.Metadata.Dependencies .PackageDescriptor.Metadata.DevelopmentDependencies .PackageDescriptor.Metadata.PeerDependencies .PackageDescriptor.Metadata.OptionalDependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    +
    + {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.Dependencies "title" (.locale.Tr "packages.npm.dependencies")}} + {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.DevelopmentDependencies "title" (.locale.Tr "packages.npm.dependencies.development")}} + {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.PeerDependencies "title" (.locale.Tr "packages.npm.dependencies.peer")}} + {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.OptionalDependencies "title" (.locale.Tr "packages.npm.dependencies.optional")}} +
    +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{.locale.Tr "packages.keywords"}}

    +
    + {{range .PackageDescriptor.Metadata.Keywords}} + {{.}} + {{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/npm_dependencies.tmpl b/src/templates/package/content/npm_dependencies.tmpl new file mode 100644 index 0000000..b55c1b5 --- /dev/null +++ b/src/templates/package/content/npm_dependencies.tmpl @@ -0,0 +1,19 @@ +{{if .dependencies}} +

    {{.title}}

    + + + + + + + + + {{range $dependency, $version := .dependencies}} + + + + + {{end}} + +
    {{.root.locale.Tr "packages.dependency.id"}}{{.root.locale.Tr "packages.dependency.version"}}
    {{$dependency}}{{$version}}
    +{{end}} diff --git a/src/templates/package/content/nuget.tmpl b/src/templates/package/content/nuget.tmpl new file mode 100644 index 0000000..f3013ad --- /dev/null +++ b/src/templates/package/content/nuget.tmpl @@ -0,0 +1,52 @@ +{{if eq .PackageDescriptor.Package.Type "nuget"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    dotnet nuget add source --name {{.PackageDescriptor.Owner.Name}} --username your_username --password your_token 
    +
    +
    + +
    dotnet add package --source {{.PackageDescriptor.Owner.Name}} --version {{.PackageDescriptor.Version.Version}} {{.PackageDescriptor.Package.Name}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.ReleaseNotes}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}} + {{if .PackageDescriptor.Metadata.ReleaseNotes}}{{Str2html .PackageDescriptor.Metadata.ReleaseNotes}}{{end}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    + + + + + + + + + + {{range $framework, $dependencies := .PackageDescriptor.Metadata.Dependencies}} + {{range $dependencies}} + + + + + + {{end}} + {{end}} + +
    {{.locale.Tr "packages.dependency.id"}}{{.locale.Tr "packages.dependency.version"}}{{.locale.Tr "packages.nuget.dependency.framework"}}
    {{.ID}}{{.Version}}{{$framework}}
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/pub.tmpl b/src/templates/package/content/pub.tmpl new file mode 100644 index 0000000..28aa29a --- /dev/null +++ b/src/templates/package/content/pub.tmpl @@ -0,0 +1,19 @@ +{{if eq .PackageDescriptor.Package.Type "pub"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    dart pub add {{.PackageDescriptor.Package.Name}}:{{.PackageDescriptor.Version.Version}} --hosted-url=
    +
    +
    + +
    +
    +
    + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}} +

    {{.locale.Tr "packages.about"}}

    + {{if .PackageDescriptor.Metadata.Description}}
    {{.PackageDescriptor.Metadata.Description}}
    {{end}} + {{if .PackageDescriptor.Metadata.Readme}}
    {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}
    {{end}} + {{end}} +{{end}} diff --git a/src/templates/package/content/pypi.tmpl b/src/templates/package/content/pypi.tmpl new file mode 100644 index 0000000..07c387e --- /dev/null +++ b/src/templates/package/content/pypi.tmpl @@ -0,0 +1,31 @@ +{{if eq .PackageDescriptor.Package.Type "pypi"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    pip install --index-url  {{.PackageDescriptor.Package.Name}}
    +
    +
    + +
    +
    +
    + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.LongDescription .PackageDescriptor.Metadata.Summary}} +

    {{.locale.Tr "packages.about"}}

    +
    +

    {{if .PackageDescriptor.Metadata.Summary}}{{.PackageDescriptor.Metadata.Summary}}{{end}}

    + {{if .PackageDescriptor.Metadata.LongDescription}} + {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.LongDescription}} + {{else if .PackageDescriptor.Metadata.Description}} + {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Description}} + {{end}} +
    + {{end}} + {{if .PackageDescriptor.Metadata.RequiresPython}} +

    {{.locale.Tr "packages.requirements"}}

    +
    + {{.locale.Tr "packages.pypi.requires"}}: {{.PackageDescriptor.Metadata.RequiresPython}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/rpm.tmpl b/src/templates/package/content/rpm.tmpl new file mode 100644 index 0000000..63bb8b0 --- /dev/null +++ b/src/templates/package/content/rpm.tmpl @@ -0,0 +1,26 @@ +{{if eq .PackageDescriptor.Package.Type "rpm"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    dnf config-manager --add-repo 
    +
    +
    + +
    +
    dnf install {{$.PackageDescriptor.Package.Name}}
    +
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Summary .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    + {{if .PackageDescriptor.Metadata.Summary}}
    {{.PackageDescriptor.Metadata.Summary}}
    {{end}} + {{if .PackageDescriptor.Metadata.Description}}
    {{.PackageDescriptor.Metadata.Description}}
    {{end}} + {{end}} +{{end}} diff --git a/src/templates/package/content/rubygems.tmpl b/src/templates/package/content/rubygems.tmpl new file mode 100644 index 0000000..6e6ee71 --- /dev/null +++ b/src/templates/package/content/rubygems.tmpl @@ -0,0 +1,40 @@ +{{if eq .PackageDescriptor.Package.Type "rubygems"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    gem install {{.PackageDescriptor.Package.Name}} --version "{{.PackageDescriptor.Version.Version}}" --source ""
    +
    +
    + +
    source "" do
    +	gem "{{.PackageDescriptor.Package.Name}}", "{{.PackageDescriptor.Version.Version}}"
    +end
    +
    +
    + +
    +
    +
    + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    {{.PackageDescriptor.Metadata.Description}}
    + {{end}} + {{if or .PackageDescriptor.Metadata.RequiredRubyVersion .PackageDescriptor.Metadata.RequiredRubygemsVersion}} +

    {{.locale.Tr "packages.requirements"}}

    +
    + {{if .PackageDescriptor.Metadata.RequiredRubyVersion}}

    {{.locale.Tr "packages.rubygems.required.ruby"}}: {{range $i, $v := .PackageDescriptor.Metadata.RequiredRubyVersion}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{end}}

    {{end}} + {{if .PackageDescriptor.Metadata.RequiredRubygemsVersion}}

    {{.locale.Tr "packages.rubygems.required.rubygems"}}: {{range $i, $v := .PackageDescriptor.Metadata.RequiredRubygemsVersion}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{end}}

    {{end}} +
    + {{end}} + {{if or .PackageDescriptor.Metadata.RuntimeDependencies .PackageDescriptor.Metadata.DevelopmentDependencies}} +

    {{.locale.Tr "packages.dependencies"}}

    +
    +
    + {{template "package/content/rubygems_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.RuntimeDependencies "title" (.locale.Tr "packages.rubygems.dependencies.runtime")}} + {{template "package/content/rubygems_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.DevelopmentDependencies "title" (.locale.Tr "packages.rubygems.dependencies.development")}} +
    +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/rubygems_dependencies.tmpl b/src/templates/package/content/rubygems_dependencies.tmpl new file mode 100644 index 0000000..80febc8 --- /dev/null +++ b/src/templates/package/content/rubygems_dependencies.tmpl @@ -0,0 +1,19 @@ +{{if .dependencies}} +

    {{.title}}

    + + + + + + + + + {{range .dependencies}} + + + + + {{end}} + +
    {{.root.locale.Tr "packages.dependency.id"}}{{.root.locale.Tr "packages.dependency.version"}}
    {{.Name}}{{range $i, $v := .Version}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{end}}
    +{{end}} diff --git a/src/templates/package/content/swift.tmpl b/src/templates/package/content/swift.tmpl new file mode 100644 index 0000000..ea87599 --- /dev/null +++ b/src/templates/package/content/swift.tmpl @@ -0,0 +1,40 @@ +{{if eq .PackageDescriptor.Package.Type "swift"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    swift package-registry set 
    +
    +
    + +
    dependencies: [
    +	.package(id: "{{.PackageDescriptor.Package.Name}}", from:"{{.PackageDescriptor.Version.Version}}")
    +]
    +
    +
    + +
    swift package resolve
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{.locale.Tr "packages.keywords"}}

    +
    + {{range .PackageDescriptor.Metadata.Keywords}} + {{.}} + {{end}} +
    + {{end}} +{{end}} diff --git a/src/templates/package/content/vagrant.tmpl b/src/templates/package/content/vagrant.tmpl new file mode 100644 index 0000000..b6ec2ea --- /dev/null +++ b/src/templates/package/content/vagrant.tmpl @@ -0,0 +1,18 @@ +{{if eq .PackageDescriptor.Package.Type "vagrant"}} +

    {{.locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    vagrant box add --box-version {{.PackageDescriptor.Version.Version}} ""
    +
    +
    + +
    +
    +
    + {{if .PackageDescriptor.Metadata.Description}} +

    {{.locale.Tr "packages.about"}}

    +
    {{.PackageDescriptor.Metadata.Description}}
    + {{end}} +{{end}} diff --git a/src/templates/package/metadata/alpine.tmpl b/src/templates/package/metadata/alpine.tmpl new file mode 100644 index 0000000..9011bfc --- /dev/null +++ b/src/templates/package/metadata/alpine.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "alpine"}} + {{if .PackageDescriptor.Metadata.Maintainer}}
    {{svg "octicon-person" 16 "mr-3"}} {{.PackageDescriptor.Metadata.Maintainer}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/cargo.tmpl b/src/templates/package/metadata/cargo.tmpl new file mode 100644 index 0000000..79078b4 --- /dev/null +++ b/src/templates/package/metadata/cargo.tmpl @@ -0,0 +1,7 @@ +{{if eq .PackageDescriptor.Package.Type "cargo"}} + {{range .PackageDescriptor.Metadata.Authors}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.cargo.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.cargo.details.documentation_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/chef.tmpl b/src/templates/package/metadata/chef.tmpl new file mode 100644 index 0000000..b414535 --- /dev/null +++ b/src/templates/package/metadata/chef.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "chef"}} + {{if .PackageDescriptor.Metadata.Author}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Author}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/composer.tmpl b/src/templates/package/metadata/composer.tmpl new file mode 100644 index 0000000..e6f67a1 --- /dev/null +++ b/src/templates/package/metadata/composer.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "composer"}} + {{range .PackageDescriptor.Metadata.Authors}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.Name}}
    {{end}} + {{if .PackageDescriptor.Metadata.Homepage}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{range .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/conan.tmpl b/src/templates/package/metadata/conan.tmpl new file mode 100644 index 0000000..0060f91 --- /dev/null +++ b/src/templates/package/metadata/conan.tmpl @@ -0,0 +1,6 @@ +{{if eq .PackageDescriptor.Package.Type "conan"}} + {{if .PackageDescriptor.Metadata.Author}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Author}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.conan.details.repository"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/conda.tmpl b/src/templates/package/metadata/conda.tmpl new file mode 100644 index 0000000..4021e6b --- /dev/null +++ b/src/templates/package/metadata/conda.tmpl @@ -0,0 +1,6 @@ +{{if eq .PackageDescriptor.Package.Type "conda"}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.conda.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.conda.details.documentation_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/container.tmpl b/src/templates/package/metadata/container.tmpl new file mode 100644 index 0000000..7ff1370 --- /dev/null +++ b/src/templates/package/metadata/container.tmpl @@ -0,0 +1,9 @@ +{{if eq .PackageDescriptor.Package.Type "container"}} +
    {{svg "octicon-package" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Type.Name}}
    + {{if .PackageDescriptor.Metadata.Platform}}
    {{svg "octicon-cpu" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Platform}}
    {{end}} + {{range .PackageDescriptor.Metadata.Authors}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.}}
    {{end}} + {{if .PackageDescriptor.Metadata.Licenses}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Licenses}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.documentation_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/cran.tmpl b/src/templates/package/metadata/cran.tmpl new file mode 100644 index 0000000..7b113ec --- /dev/null +++ b/src/templates/package/metadata/cran.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "cran"}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} + {{range .PackageDescriptor.Metadata.Authors}}
    {{svg "octicon-person" 16 "mr-3"}} {{.}}
    {{end}} + {{range .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "mr-3"}} {{$.locale.Tr "packages.details.project_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/debian.tmpl b/src/templates/package/metadata/debian.tmpl new file mode 100644 index 0000000..93b6db3 --- /dev/null +++ b/src/templates/package/metadata/debian.tmpl @@ -0,0 +1,4 @@ +{{if eq .PackageDescriptor.Package.Type "debian"}} + {{if .PackageDescriptor.Metadata.Maintainer}}
    {{svg "octicon-person" 16 "mr-3"}} {{.PackageDescriptor.Metadata.Maintainer}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/generic.tmpl b/src/templates/package/metadata/generic.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/package/metadata/helm.tmpl b/src/templates/package/metadata/helm.tmpl new file mode 100644 index 0000000..33e603b --- /dev/null +++ b/src/templates/package/metadata/helm.tmpl @@ -0,0 +1,4 @@ +{{if eq .PackageDescriptor.Package.Type "helm"}} + {{range .PackageDescriptor.Metadata.Maintainers}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.Name}}
    {{end}} + {{if .PackageDescriptor.Metadata.Home}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/maven.tmpl b/src/templates/package/metadata/maven.tmpl new file mode 100644 index 0000000..78c0d32 --- /dev/null +++ b/src/templates/package/metadata/maven.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "maven"}} + {{if .PackageDescriptor.Metadata.Name}}
    {{svg "octicon-note" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Name}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{range .PackageDescriptor.Metadata.Licenses}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/npm.tmpl b/src/templates/package/metadata/npm.tmpl new file mode 100644 index 0000000..cbebf99 --- /dev/null +++ b/src/templates/package/metadata/npm.tmpl @@ -0,0 +1,8 @@ +{{if eq .PackageDescriptor.Package.Type "npm"}} + {{if .PackageDescriptor.Metadata.Author}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Author}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} + {{range .PackageDescriptor.VersionProperties}} + {{if eq .Name "npm.tag"}}
    {{svg "octicon-versions" 16 "gt-mr-3"}} {{.Value}}
    {{end}} + {{end}} +{{end}} diff --git a/src/templates/package/metadata/nuget.tmpl b/src/templates/package/metadata/nuget.tmpl new file mode 100644 index 0000000..3b56102 --- /dev/null +++ b/src/templates/package/metadata/nuget.tmpl @@ -0,0 +1,4 @@ +{{if eq .PackageDescriptor.Package.Type "nuget"}} + {{if .PackageDescriptor.Metadata.Authors}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Authors}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/pub.tmpl b/src/templates/package/metadata/pub.tmpl new file mode 100644 index 0000000..8147ba8 --- /dev/null +++ b/src/templates/package/metadata/pub.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "pub"}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.documentation_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/pypi.tmpl b/src/templates/package/metadata/pypi.tmpl new file mode 100644 index 0000000..205487d --- /dev/null +++ b/src/templates/package/metadata/pypi.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "pypi"}} + {{if .PackageDescriptor.Metadata.Author}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Author}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/rpm.tmpl b/src/templates/package/metadata/rpm.tmpl new file mode 100644 index 0000000..1bbc2c8 --- /dev/null +++ b/src/templates/package/metadata/rpm.tmpl @@ -0,0 +1,4 @@ +{{if eq .PackageDescriptor.Package.Type "rpm"}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/rubygems.tmpl b/src/templates/package/metadata/rubygems.tmpl new file mode 100644 index 0000000..7e9af01 --- /dev/null +++ b/src/templates/package/metadata/rubygems.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "rubygems"}} + {{range .PackageDescriptor.Metadata.Authors}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{range .PackageDescriptor.Metadata.Licenses}}
    {{svg "octicon-law" 16 "gt-mr-3"}} {{.}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/swift.tmpl b/src/templates/package/metadata/swift.tmpl new file mode 100644 index 0000000..8a9ab07 --- /dev/null +++ b/src/templates/package/metadata/swift.tmpl @@ -0,0 +1,4 @@ +{{if eq .PackageDescriptor.Package.Type "swift"}} + {{if .PackageDescriptor.Metadata.Author.String}}
    {{svg "octicon-person" 16 "mr-3"}} {{.PackageDescriptor.Metadata.Author}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} +{{end}} diff --git a/src/templates/package/metadata/vagrant.tmpl b/src/templates/package/metadata/vagrant.tmpl new file mode 100644 index 0000000..030da9c --- /dev/null +++ b/src/templates/package/metadata/vagrant.tmpl @@ -0,0 +1,5 @@ +{{if eq .PackageDescriptor.Package.Type "vagrant"}} + {{if .PackageDescriptor.Metadata.Author}}
    {{svg "octicon-person" 16 "gt-mr-3"}} {{.PackageDescriptor.Metadata.Author}}
    {{end}} + {{if .PackageDescriptor.Metadata.ProjectURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external" 16 "gt-mr-3"}} {{.locale.Tr "packages.conan.details.repository"}}
    {{end}} +{{end}} diff --git a/src/templates/package/settings.tmpl b/src/templates/package/settings.tmpl new file mode 100644 index 0000000..205d875 --- /dev/null +++ b/src/templates/package/settings.tmpl @@ -0,0 +1,68 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} +
    + {{template "base/alert" .}} +

    {{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}}) / {{.locale.Tr "repo.settings"}}

    +

    + {{.locale.Tr "packages.settings.link"}} +

    +
    +

    {{.locale.Tr "packages.settings.link.description"}}

    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + +
    +
    + +
    +
    +
    +

    + {{.locale.Tr "repo.settings.danger_zone"}} +

    +
    +
    +
    + +
    +
    +
    {{.locale.Tr "packages.settings.delete"}}
    +

    {{.locale.Tr "packages.settings.delete.description"}}

    +
    + +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/package/shared/cargo.tmpl b/src/templates/package/shared/cargo.tmpl new file mode 100644 index 0000000..687fc84 --- /dev/null +++ b/src/templates/package/shared/cargo.tmpl @@ -0,0 +1,24 @@ +

    + {{.locale.Tr "packages.owner.settings.cargo.title"}} +

    +
    +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + +
    +
    +
    diff --git a/src/templates/package/shared/cleanup_rules/edit.tmpl b/src/templates/package/shared/cleanup_rules/edit.tmpl new file mode 100644 index 0000000..f8525af --- /dev/null +++ b/src/templates/package/shared/cleanup_rules/edit.tmpl @@ -0,0 +1,73 @@ +

    {{if .IsEditRule}}{{.locale.Tr "packages.owner.settings.cleanuprules.edit"}}{{else}}{{.locale.Tr "packages.owner.settings.cleanuprules.add"}}{{end}}

    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    +

    {{.locale.Tr "packages.owner.settings.cleanuprules.keep.title"}}

    +
    + + +
    +
    + + +

    {{.locale.Tr "packages.owner.settings.cleanuprules.keep.pattern.container" | Safe}}

    +
    +
    +

    {{.locale.Tr "packages.owner.settings.cleanuprules.remove.title"}}

    +
    + + +
    +
    + + +
    +
    + {{if .IsEditRule}} + + + {{.locale.Tr "packages.owner.settings.cleanuprules.preview"}} + {{else}} + + {{end}} +
    +
    +
    diff --git a/src/templates/package/shared/cleanup_rules/list.tmpl b/src/templates/package/shared/cleanup_rules/list.tmpl new file mode 100644 index 0000000..485bff5 --- /dev/null +++ b/src/templates/package/shared/cleanup_rules/list.tmpl @@ -0,0 +1,34 @@ +

    + {{.locale.Tr "packages.owner.settings.cleanuprules.title"}} + +

    +
    +
    + {{range .CleanupRules}} +
    + + {{svg .Type.SVGName 36}} +
    + {{.Type.Name}} +
    {{if .Enabled}}{{$.locale.Tr "enabled"}}{{else}}{{$.locale.Tr "disabled"}}{{end}}
    + {{if .KeepCount}}
    {{$.locale.Tr "packages.owner.settings.cleanuprules.keep.count"}}: {{if eq .KeepCount 1}}{{$.locale.Tr "packages.owner.settings.cleanuprules.keep.count.1"}}{{else}}{{$.locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" .KeepCount}}{{end}}
    {{end}} + {{if .KeepPattern}}
    {{$.locale.Tr "packages.owner.settings.cleanuprules.keep.pattern"}}: {{StringUtils.EllipsisString .KeepPattern 100}}
    {{end}} + {{if .RemoveDays}}
    {{$.locale.Tr "packages.owner.settings.cleanuprules.remove.days"}}: {{$.locale.Tr "tool.days" .RemoveDays}}
    {{end}} + {{if .RemovePattern}}
    {{$.locale.Tr "packages.owner.settings.cleanuprules.remove.pattern"}}: {{StringUtils.EllipsisString .RemovePattern 100}}
    {{end}} +
    +
    + {{else}} +
    {{.locale.Tr "packages.owner.settings.cleanuprules.none"}}
    + {{end}} +
    +
    diff --git a/src/templates/package/shared/cleanup_rules/preview.tmpl b/src/templates/package/shared/cleanup_rules/preview.tmpl new file mode 100644 index 0000000..5992ea6 --- /dev/null +++ b/src/templates/package/shared/cleanup_rules/preview.tmpl @@ -0,0 +1,34 @@ +

    {{.locale.Tr "packages.owner.settings.cleanuprules.preview"}}

    +
    +

    {{.locale.Tr "packages.owner.settings.cleanuprules.preview.overview" (len .VersionsToRemove)}}

    +
    +
    + + + + + + + + + + + + + {{range .VersionsToRemove}} + + + + + + + + + {{else}} + + + + {{end}} + +
    {{.locale.Tr "admin.packages.type"}}{{.locale.Tr "admin.packages.name"}}{{.locale.Tr "admin.packages.version"}}{{.locale.Tr "admin.packages.creator"}}{{.locale.Tr "admin.packages.size"}}{{.locale.Tr "admin.packages.published"}}
    {{.Package.Type.Name}}{{.Package.Name}}{{.Version.Version}}{{.Creator.Name}}{{FileSize .CalculateBlobSize}}{{DateTime "short" .Version.CreatedUnix}}
    {{.locale.Tr "packages.owner.settings.cleanuprules.preview.none"}}
    +
    diff --git a/src/templates/package/shared/list.tmpl b/src/templates/package/shared/list.tmpl new file mode 100644 index 0000000..707fbe3 --- /dev/null +++ b/src/templates/package/shared/list.tmpl @@ -0,0 +1,55 @@ +
    + {{template "base/alert" .}} +
    +
    + + + +
    +
    +
    + {{range .PackageDescriptors}} +
  • +
    +
    + {{.Package.Name}} + {{svg .Package.Type.SVGName 16}} {{.Package.Type.Name}} +
    +
    + {{$timeStr := TimeSinceUnix .Version.CreatedUnix $.locale}} + {{$hasRepositoryAccess := false}} + {{if .Repository}} + {{$hasRepositoryAccess = index $.RepositoryAccessMap .Repository.ID}} + {{end}} + {{if $hasRepositoryAccess}} + {{$.locale.Tr "packages.published_by_in" $timeStr .Creator.HomeLink (.Creator.GetDisplayName | Escape) .Repository.Link (.Repository.FullName | Escape) | Safe}} + {{else}} + {{$.locale.Tr "packages.published_by" $timeStr .Creator.HomeLink (.Creator.GetDisplayName | Escape) | Safe}} + {{end}} +
    +
    +
  • + {{else}} + {{if not .HasPackages}} +
    + {{svg "octicon-package" 32}} +

    {{.locale.Tr "packages.empty"}}

    + {{if and .Repository .CanWritePackages}} + {{$packagesUrl := URLJoin .Owner.HomeLink "-" "packages"}} +

    {{.locale.Tr "packages.empty.repo" $packagesUrl | Safe}}

    + {{end}} +

    {{.locale.Tr "packages.empty.documentation" "https://docs.gitea.io/en-us/usage/packages/overview/" | Safe}}

    +
    + {{else}} +

    {{.locale.Tr "packages.filter.no_result"}}

    + {{end}} + {{end}} + {{template "base/paginate" .}} +
    +
    diff --git a/src/templates/package/shared/versionlist.tmpl b/src/templates/package/shared/versionlist.tmpl new file mode 100644 index 0000000..ba48858 --- /dev/null +++ b/src/templates/package/shared/versionlist.tmpl @@ -0,0 +1,39 @@ +
    +

    {{.PackageDescriptor.Package.Name}} / {{.locale.Tr "packages.versions"}}

    +
    +
    + + + {{if eq .PackageDescriptor.Package.Type "container"}} + + {{end}} + +
    +
    +
    + {{range .PackageDescriptors}} +
  • +
    + +
    + {{$.locale.Tr "packages.published_by" (TimeSinceUnix .Version.CreatedUnix $.locale) .Creator.HomeLink (.Creator.GetDisplayName | Escape) | Safe}} +
    +
    +
  • + {{else}} +

    {{.locale.Tr "packages.filter.no_result"}}

    + {{end}} + {{template "base/paginate" .}} +
    +
    diff --git a/src/templates/package/view.tmpl b/src/templates/package/view.tmpl new file mode 100644 index 0000000..755c93f --- /dev/null +++ b/src/templates/package/view.tmpl @@ -0,0 +1,115 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} +
    +
    +
    +

    {{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}})

    +
    +
    + {{$timeStr := TimeSinceUnix .PackageDescriptor.Version.CreatedUnix $.locale}} + {{if .HasRepositoryAccess}} + {{.locale.Tr "packages.published_by_in" $timeStr .PackageDescriptor.Creator.HomeLink (.PackageDescriptor.Creator.GetDisplayName | Escape) .PackageDescriptor.Repository.Link (.PackageDescriptor.Repository.FullName | Escape) | Safe}} + {{else}} + {{.locale.Tr "packages.published_by" $timeStr .PackageDescriptor.Creator.HomeLink (.PackageDescriptor.Creator.GetDisplayName | Escape) | Safe}} + {{end}} +
    +
    +
    +
    + {{template "package/content/alpine" .}} + {{template "package/content/cargo" .}} + {{template "package/content/chef" .}} + {{template "package/content/composer" .}} + {{template "package/content/conan" .}} + {{template "package/content/conda" .}} + {{template "package/content/container" .}} + {{template "package/content/cran" .}} + {{template "package/content/debian" .}} + {{template "package/content/generic" .}} + {{template "package/content/go" .}} + {{template "package/content/helm" .}} + {{template "package/content/maven" .}} + {{template "package/content/npm" .}} + {{template "package/content/nuget" .}} + {{template "package/content/pub" .}} + {{template "package/content/pypi" .}} + {{template "package/content/rpm" .}} + {{template "package/content/rubygems" .}} + {{template "package/content/swift" .}} + {{template "package/content/vagrant" .}} +
    +
    + {{.locale.Tr "packages.details"}} +
    +
    {{svg .PackageDescriptor.Package.Type.SVGName 16 "gt-mr-3"}} {{.PackageDescriptor.Package.Type.Name}}
    + {{if .HasRepositoryAccess}} +
    {{svg "octicon-repo" 16 "gt-mr-3"}} {{.PackageDescriptor.Repository.FullName}}
    + {{end}} +
    {{svg "octicon-calendar" 16 "gt-mr-3"}} {{TimeSinceUnix .PackageDescriptor.Version.CreatedUnix $.locale}}
    +
    {{svg "octicon-download" 16 "gt-mr-3"}} {{.PackageDescriptor.Version.DownloadCount}}
    + {{template "package/metadata/alpine" .}} + {{template "package/metadata/cargo" .}} + {{template "package/metadata/chef" .}} + {{template "package/metadata/composer" .}} + {{template "package/metadata/conan" .}} + {{template "package/metadata/conda" .}} + {{template "package/metadata/container" .}} + {{template "package/metadata/cran" .}} + {{template "package/metadata/debian" .}} + {{template "package/metadata/generic" .}} + {{template "package/metadata/helm" .}} + {{template "package/metadata/maven" .}} + {{template "package/metadata/npm" .}} + {{template "package/metadata/nuget" .}} + {{template "package/metadata/pub" .}} + {{template "package/metadata/pypi" .}} + {{template "package/metadata/rpm" .}} + {{template "package/metadata/rubygems" .}} + {{template "package/metadata/swift" .}} + {{template "package/metadata/vagrant" .}} + {{if not (and (eq .PackageDescriptor.Package.Type "container") .PackageDescriptor.Metadata.Manifests)}} +
    {{svg "octicon-database" 16 "gt-mr-3"}} {{FileSize .PackageDescriptor.CalculateBlobSize}}
    + {{end}} +
    + {{if not (eq .PackageDescriptor.Package.Type "container")}} +
    + {{.locale.Tr "packages.assets"}} ({{len .PackageDescriptor.Files}}) +
    + {{range .PackageDescriptor.Files}} +
    + {{.File.Name}} + {{FileSize .Blob.Size}} +
    + {{end}} +
    + {{end}} + {{if .LatestVersions}} +
    + {{.locale.Tr "packages.versions"}} ({{.TotalVersionCount}}) + {{.locale.Tr "packages.versions.view_all"}} +
    + {{range .LatestVersions}} +
    + {{.Version}} + {{DateTime "short" .CreatedUnix}} +
    + {{end}} +
    + {{end}} + {{if or .CanWritePackages .HasRepositoryAccess}} +
    +
    + {{if .HasRepositoryAccess}} +
    {{svg "octicon-issue-opened" 16 "gt-mr-3"}} {{.locale.Tr "repo.issues"}}
    + {{end}} + {{if .CanWritePackages}} +
    {{svg "octicon-tools" 16 "gt-mr-3"}} {{.locale.Tr "repo.settings"}}
    + {{end}} +
    + {{end}} +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/post-install.tmpl b/src/templates/post-install.tmpl new file mode 100644 index 0000000..5048b91 --- /dev/null +++ b/src/templates/post-install.tmpl @@ -0,0 +1,24 @@ +{{template "base/head" .}} +
    +
    +
    +
    +
    +
    +
    +
    + {{.locale.Tr +
    +
    +
    + +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/projects/list.tmpl b/src/templates/projects/list.tmpl new file mode 100644 index 0000000..f14dc9d --- /dev/null +++ b/src/templates/projects/list.tmpl @@ -0,0 +1,92 @@ +
    +
    + {{if .CanWriteProjects}} + +
    + {{end}} + + {{template "base/alert" .}} + + + +
    + {{range .Projects}} +
  • +

    + {{svg .IconName 16}} + {{.Title}} +

    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{$.locale.PrettyNumber .NumOpenIssues}} {{$.locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{$.locale.PrettyNumber .NumClosedIssues}} {{$.locale.Tr "repo.issues.closed_title"}} +
    +
    + {{if and $.CanWriteProjects (not $.Repository.IsArchived)}} + + {{end}} +
    + {{if .Description}} +
    + {{.RenderedContent|Str2html}} +
    + {{end}} +
  • + {{end}} + + {{template "base/paginate" .}} +
    +
    +
    + +{{if $.CanWriteProjects}} + +{{end}} diff --git a/src/templates/projects/new.tmpl b/src/templates/projects/new.tmpl new file mode 100644 index 0000000..6d1ae04 --- /dev/null +++ b/src/templates/projects/new.tmpl @@ -0,0 +1,70 @@ +
    +

    + {{if .PageIsEditProjects}} + {{.locale.Tr "repo.projects.edit"}} +
    {{.locale.Tr "repo.projects.edit_subheader"}}
    + {{else}} + {{.locale.Tr "repo.projects.new"}} +
    {{.locale.Tr "repo.projects.new_subheader"}}
    + {{end}} +

    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    + +
    + + +
    +
    + + +
    + + {{if not .PageIsEditProjects}} +
    + + +
    + {{end}} + +
    + + +
    +
    +
    +
    +
    + + {{.locale.Tr "repo.milestones.cancel"}} + + +
    +
    +
    +
    diff --git a/src/templates/projects/view.tmpl b/src/templates/projects/view.tmpl new file mode 100644 index 0000000..3549377 --- /dev/null +++ b/src/templates/projects/view.tmpl @@ -0,0 +1,269 @@ +
    +
    +
    +
    +
    +
    + {{if .CanWriteProjects}} + {{.locale.Tr "new_project_column"}} + {{end}} + +
    +
    +
    + +
    +
    +
    + +
    + {{range $board := .Boards}} + +
    +
    +
    +
    + {{.NumIssues}} +
    + {{.Title}} +
    + {{if and $.CanWriteProjects (ne .ID 0)}} + + {{end}} +
    +
    + +
    + + {{range (index $.IssuesMap .ID)}} + + +
    + {{if eq $.Project.CardType 1}}{{/* Images and Text*/}} +
    + {{range (index $.issuesAttachmentMap .ID)}} + {{.Name}} + {{end}} +
    + {{end}} +
    +
    + + {{template "shared/issueicon" .}} + + + {{.Title}} + +
    +
    + + {{.Repo.FullName}}#{{.Index}} + {{$timeStr := TimeSinceUnix .GetLastEventTimestamp $.locale}} + {{if .OriginalAuthor}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}} + {{else if gt .Poster.ID 0}} + {{$.locale.Tr .GetLastEventLabel $timeStr (.Poster.HomeLink|Escape) (.Poster.GetDisplayName | Escape) | Safe}} + {{else}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.Poster.GetDisplayName | Escape) | Safe}} + {{end}} + +
    + {{- if .MilestoneID}} + + {{- end}} + {{- range index $.LinkedPRs .ID}} + + {{- end}} +
    + + {{if or .Labels .Assignees}} +
    + {{range .Labels}} + {{RenderLabel $.Context .}} + {{end}} +
    + {{range .Assignees}} + {{avatar $.Context . 28 "mini gt-mr-3"}} + {{end}} +
    +
    + {{end}} +
    + + + {{end}} +
    +
    + {{end}} +
    + +
    + +
    + +{{if .CanWriteProjects}} + +{{end}} diff --git a/src/templates/repo/actions/list.tmpl b/src/templates/repo/actions/list.tmpl new file mode 100644 index 0000000..ca97b67 --- /dev/null +++ b/src/templates/repo/actions/list.tmpl @@ -0,0 +1,27 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    + +
    + {{template "repo/actions/runs_list" .}} +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/actions/runs_list.tmpl b/src/templates/repo/actions/runs_list.tmpl new file mode 100644 index 0000000..fdef2e6 --- /dev/null +++ b/src/templates/repo/actions/runs_list.tmpl @@ -0,0 +1,32 @@ +
    + {{range .Runs}} +
  • +
    + {{template "repo/actions/status" (dict "status" .Status.String "locale" $.locale)}} +
    +
    + +
    + {{if not $.CurWorkflow}}{{.WorkflowID}} {{end}}#{{.Index}}: {{$.locale.Tr "actions.runs.commit"}} + {{ShortSha .CommitSHA}}{{$.locale.Tr "actions.runs.pushed_by"}} {{.TriggerUser.GetDisplayName}} + + {{if .RefLink}} + {{.PrettyRef}} + {{else}} + {{.PrettyRef}} + {{end}} + +
    +
    +
    +
    {{TimeSinceUnix .Updated $.locale}}
    +
    {{.Duration}}
    +
    +
  • + {{end}} +
    +{{template "base/paginate" .}} diff --git a/src/templates/repo/actions/status.tmpl b/src/templates/repo/actions/status.tmpl new file mode 100644 index 0000000..cdc747a --- /dev/null +++ b/src/templates/repo/actions/status.tmpl @@ -0,0 +1,29 @@ + +{{- $size := 16 -}} +{{- if .size -}} +{{- $size = .size -}} +{{- end -}} + +{{- $className := "" -}} +{{- if .className -}} +{{- $className = .className -}} +{{- end -}} + + +{{if eq .status "success"}} + {{svg "octicon-check-circle-fill" $size (printf "text green %s" $className)}} +{{else if eq .status "skipped"}} + {{svg "octicon-skip" $size (printf "text grey %s" $className)}} +{{else if eq .status "waiting"}} + {{svg "octicon-clock" $size (printf "text yellow %s" $className)}} +{{else if eq .status "blocked"}} + {{svg "octicon-blocked" $size (printf "text yellow %s" $className)}} +{{else if eq .status "running"}} + {{svg "octicon-meter" $size (printf "text yellow job-status-rotate %s" $className)}} +{{else if or (eq .status "failure") or (eq .status "cancelled") or (eq .status "unknown")}} + {{svg "octicon-x-circle-fill" $size (printf "text red %s" $className)}} +{{end}} + diff --git a/src/templates/repo/actions/view.tmpl b/src/templates/repo/actions/view.tmpl new file mode 100644 index 0000000..297232f --- /dev/null +++ b/src/templates/repo/actions/view.tmpl @@ -0,0 +1,29 @@ +{{template "base/head" .}} + +
    + {{template "repo/header" .}} +
    +
    +
    + +{{template "base/footer" .}} diff --git a/src/templates/repo/activity.tmpl b/src/templates/repo/activity.tmpl new file mode 100644 index 0000000..ed29ece --- /dev/null +++ b/src/templates/repo/activity.tmpl @@ -0,0 +1,240 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +

    + {{DateTime "long" .DateFrom}} - {{DateTime "long" .DateUntil}} + + +

    +
    + + {{if (or (.Permission.CanRead $.UnitTypeIssues) (.Permission.CanRead $.UnitTypePullRequests))}} +

    {{.locale.Tr "repo.activity.overview"}}

    +
    + {{if .Permission.CanRead $.UnitTypePullRequests}} +
    + {{if gt .Activity.ActivePRCount 0}} +
    + + +
    + {{else}} +
    + +
    + {{end}} + {{.locale.TrN .Activity.ActivePRCount "repo.activity.active_prs_count_1" "repo.activity.active_prs_count_n" .Activity.ActivePRCount | Safe}} +
    + {{end}} + {{if .Permission.CanRead $.UnitTypeIssues}} +
    + {{if gt .Activity.ActiveIssueCount 0}} +
    + + +
    + {{else}} +
    + +
    + {{end}} + {{.locale.TrN .Activity.ActiveIssueCount "repo.activity.active_issues_count_1" "repo.activity.active_issues_count_n" .Activity.ActiveIssueCount | Safe}} +
    + {{end}} +
    + + {{end}} + + {{if .Permission.CanRead $.UnitTypeCode}} + {{if eq .Activity.Code.CommitCountInAllBranches 0}} +
    +

    {{.locale.Tr "repo.activity.no_git_activity"}}

    +
    + {{end}} + {{if gt .Activity.Code.CommitCountInAllBranches 0}} +
    +
    + {{.locale.Tr "repo.activity.git_stats_exclude_merges"}} + {{.locale.TrN .Activity.Code.AuthorCount "repo.activity.git_stats_author_1" "repo.activity.git_stats_author_n" .Activity.Code.AuthorCount}} + {{.locale.TrN .Activity.Code.AuthorCount "repo.activity.git_stats_pushed_1" "repo.activity.git_stats_pushed_n"}} + {{.locale.TrN .Activity.Code.CommitCount "repo.activity.git_stats_commit_1" "repo.activity.git_stats_commit_n" .Activity.Code.CommitCount}} + {{.locale.Tr "repo.activity.git_stats_push_to_branch" .Repository.DefaultBranch}} + {{.locale.TrN .Activity.Code.CommitCountInAllBranches "repo.activity.git_stats_commit_1" "repo.activity.git_stats_commit_n" .Activity.Code.CommitCountInAllBranches}} + {{.locale.Tr "repo.activity.git_stats_push_to_all_branches"}} + {{.locale.Tr "repo.activity.git_stats_on_default_branch" .Repository.DefaultBranch}} + {{.locale.TrN .Activity.Code.ChangedFiles "repo.activity.git_stats_file_1" "repo.activity.git_stats_file_n" .Activity.Code.ChangedFiles}} + {{.locale.TrN .Activity.Code.ChangedFiles "repo.activity.git_stats_files_changed_1" "repo.activity.git_stats_files_changed_n"}} + {{.locale.Tr "repo.activity.git_stats_additions"}} + {{.locale.TrN .Activity.Code.Additions "repo.activity.git_stats_addition_1" "repo.activity.git_stats_addition_n" .Activity.Code.Additions}} + {{.locale.Tr "repo.activity.git_stats_and_deletions"}} + {{.locale.TrN .Activity.Code.Deletions "repo.activity.git_stats_deletion_1" "repo.activity.git_stats_deletion_n" .Activity.Code.Deletions}}. +
    +
    +
    +
    +
    + {{end}} + {{end}} + + {{if gt .Activity.PublishedReleaseCount 0}} +

    + {{svg "octicon-tag"}} + {{.locale.Tr "repo.activity.title.releases_published_by" + (.locale.TrN .Activity.PublishedReleaseCount "repo.activity.title.releases_1" "repo.activity.title.releases_n" .Activity.PublishedReleaseCount) + (.locale.TrN .Activity.PublishedReleaseAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.PublishedReleaseAuthorCount) + }} +

    +
    + {{range .Activity.PublishedReleases}} +

    + {{$.locale.Tr "repo.activity.published_release_label"}} + {{.TagName}} + {{if not .IsTag}} + {{.Title | RenderEmoji $.Context}} + {{end}} + {{TimeSinceUnix .CreatedUnix $.locale}} +

    + {{end}} +
    + {{end}} + + {{if gt .Activity.MergedPRCount 0}} +

    + {{svg "octicon-git-pull-request"}} + {{.locale.Tr "repo.activity.title.prs_merged_by" + (.locale.TrN .Activity.MergedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.MergedPRCount) + (.locale.TrN .Activity.MergedPRAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.MergedPRAuthorCount) + }} +

    +
    + {{range .Activity.MergedPRs}} +

    + {{$.locale.Tr "repo.activity.merged_prs_label"}} + #{{.Index}} {{.Issue.Title | RenderEmoji $.Context}} + {{TimeSinceUnix .MergedUnix $.locale}} +

    + {{end}} +
    + {{end}} + + {{if gt .Activity.OpenedPRCount 0}} +

    + {{svg "octicon-git-branch"}} + {{.locale.Tr "repo.activity.title.prs_opened_by" + (.locale.TrN .Activity.OpenedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.OpenedPRCount) + (.locale.TrN .Activity.OpenedPRAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.OpenedPRAuthorCount) + }} +

    +
    + {{range .Activity.OpenedPRs}} +

    + {{$.locale.Tr "repo.activity.opened_prs_label"}} + #{{.Index}} {{.Issue.Title | RenderEmoji $.Context}} + {{TimeSinceUnix .Issue.CreatedUnix $.locale}} +

    + {{end}} +
    + {{end}} + + {{if gt .Activity.ClosedIssueCount 0}} +

    + {{svg "octicon-issue-closed"}} + {{.locale.Tr "repo.activity.title.issues_closed_from" + (.locale.TrN .Activity.ClosedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.ClosedIssueCount) + (.locale.TrN .Activity.ClosedIssueAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.ClosedIssueAuthorCount) + }} +

    +
    + {{range .Activity.ClosedIssues}} +

    + {{$.locale.Tr "repo.activity.closed_issue_label"}} + #{{.Index}} {{.Title | RenderEmoji $.Context}} + {{TimeSinceUnix .ClosedUnix $.locale}} +

    + {{end}} +
    + {{end}} + + {{if gt .Activity.OpenedIssueCount 0}} +

    + {{svg "octicon-issue-opened"}} + {{.locale.Tr "repo.activity.title.issues_created_by" + (.locale.TrN .Activity.OpenedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.OpenedIssueCount) + (.locale.TrN .Activity.OpenedIssueAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.OpenedIssueAuthorCount) + }} +

    +
    + {{range .Activity.OpenedIssues}} +

    + {{$.locale.Tr "repo.activity.new_issue_label"}} + #{{.Index}} {{.Title | RenderEmoji $.Context}} + {{TimeSinceUnix .CreatedUnix $.locale}} +

    + {{end}} +
    + {{end}} + + {{if gt .Activity.UnresolvedIssueCount 0}} +

    + {{svg "octicon-comment-discussion"}} + {{.locale.TrN .Activity.UnresolvedIssueCount "repo.activity.title.unresolved_conv_1" "repo.activity.title.unresolved_conv_n" .Activity.UnresolvedIssueCount}} +

    +
    + {{.locale.Tr "repo.activity.unresolved_conv_desc"}} +
    +
    + {{range .Activity.UnresolvedIssues}} +

    + {{$.locale.Tr "repo.activity.unresolved_conv_label"}} + #{{.Index}} + {{if .IsPull}} + {{.Title | RenderEmoji $.Context}} + {{else}} + {{.Title | RenderEmoji $.Context}} + {{end}} + {{TimeSinceUnix .UpdatedUnix $.locale}} +

    + {{end}} +
    + {{end}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/blame.tmpl b/src/templates/repo/blame.tmpl new file mode 100644 index 0000000..c7116a5 --- /dev/null +++ b/src/templates/repo/blame.tmpl @@ -0,0 +1,68 @@ +
    +

    +
    + {{template "repo/file_info" .}} +
    +
    +
    + {{.locale.Tr "repo.file_raw"}} + {{if not .IsViewCommit}} + {{.locale.Tr "repo.file_permalink"}} + {{end}} + {{.locale.Tr "repo.normal_view"}} + {{.locale.Tr "repo.file_history"}} + + +
    +
    +

    +
    +
    + + + {{range $row := .BlameRows}} + + + + + {{if $.EscapeStatus.Escaped}} + + {{end}} + + + {{end}} + +
    +
    +
    +
    + {{$row.Avatar}} +
    + +
    + {{$row.CommitSince}} +
    +
    +
    +
    + {{if $row.PreviousSha}} + + {{svg "octicon-versions"}} + + {{end}} + + + + {{if $row.EscapeStatus.Escaped}} + + {{end}} + + {{$row.Code}} +
    +
    +
    +
    diff --git a/src/templates/repo/branch/list.tmpl b/src/templates/repo/branch/list.tmpl new file mode 100644 index 0000000..8617bca --- /dev/null +++ b/src/templates/repo/branch/list.tmpl @@ -0,0 +1,244 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} + {{template "repo/sub_menu" .}} + {{if .DefaultBranchBranch}} +

    + {{.locale.Tr "repo.default_branch"}} + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}} + + {{svg "octicon-arrow-switch"}} + + {{end}} +

    + +
    + + + + + + + +
    + {{if .DefaultBranchBranch.IsProtected}} + {{svg "octicon-shield-lock"}} + {{end}} + {{.DefaultBranch}} +

    {{svg "octicon-git-commit" 16 "gt-mr-2"}}{{ShortSha .DefaultBranchBranch.Commit.ID.String}} · {{RenderCommitMessage $.Context .DefaultBranchBranch.Commit.CommitMessage .RepoLink .Repository.ComposeMetas}} · {{.locale.Tr "org.repo_updated"}} {{TimeSince .DefaultBranchBranch.Commit.Committer.When .locale}}

    +
    + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}} + + {{end}} + {{if .EnableFeed}} + {{svg "octicon-rss"}} + {{end}} + {{if not $.DisableDownloadSourceArchives}} + + {{end}} + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted) (not $.IsMirror)}} + + {{end}} +
    +
    + {{end}} + + {{if gt (len .Branches) 1}} +

    + {{.locale.Tr "repo.branches"}} +

    +
    + + + {{range .Branches}} + {{if ne .Name $.DefaultBranch}} + + + + + + + {{end}} + {{end}} + +
    + {{if .IsDeleted}} + {{.Name}} +

    {{$.locale.Tr "repo.branch.deleted_by" .DeletedBranch.DeletedBy.Name}} {{TimeSinceUnix .DeletedBranch.DeletedUnix $.locale}}

    + {{else}} + {{if .IsProtected}} + {{svg "octicon-shield-lock"}} + {{end}} + {{.Name}} +

    {{svg "octicon-git-commit" 16 "gt-mr-2"}}{{ShortSha .Commit.ID.String}} · {{RenderCommitMessage $.Context .Commit.CommitMessage $.RepoLink $.Repository.ComposeMetas}} · {{$.locale.Tr "org.repo_updated"}} {{TimeSince .Commit.Committer.When $.locale}}

    + {{end}} +
    + {{if and (not .IsDeleted) $.DefaultBranchBranch}} +
    +
    +
    {{.CommitsBehind}}
    + {{/* old code bears 0/0.0 = NaN output, so it might output invalid "width: NaNpx", it just works and doesn't caues any problem. */}} +
    +
    +
    +
    {{.CommitsAhead}}
    +
    +
    +
    + {{end}} +
    + {{if not .LatestPullRequest}} + {{if .IsIncluded}} + + {{svg "octicon-git-pull-request"}} {{$.locale.Tr "repo.branch.included"}} + + {{else if and (not .IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} + + + + {{end}} + {{else if and .LatestPullRequest.HasMerged .MergeMovedOn}} + {{if and (not .IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} + + + + {{end}} + {{else}} + {{if not .LatestPullRequest.IsSameRepo}}{{.LatestPullRequest.BaseRepo.FullName}}{{end}}#{{.LatestPullRequest.Issue.Index}} + {{if .LatestPullRequest.HasMerged}} + {{svg "octicon-git-merge" 16 "gt-mr-2"}}{{$.locale.Tr "repo.pulls.merged"}} + {{else if .LatestPullRequest.Issue.IsClosed}} + {{svg "octicon-git-pull-request" 16 "gt-mr-2"}}{{$.locale.Tr "repo.issues.closed_title"}} + {{else}} + {{svg "octicon-git-pull-request" 16 "gt-mr-2"}}{{$.locale.Tr "repo.issues.open_title"}} + {{end}} + {{end}} + + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}} + + {{end}} + {{if $.EnableFeed}} + {{svg "octicon-rss"}} + {{end}} + {{if and (not .IsDeleted) (not $.DisableDownloadSourceArchives)}} + + {{end}} + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted) (not $.IsMirror)}} + + {{end}} + {{if and $.IsWriter (not $.IsMirror) (not $.Repository.IsArchived) (not .IsProtected)}} + {{if .IsDeleted}} + + {{else}} + + {{end}} + {{end}} +
    +
    + {{template "base/paginate" .}} + {{end}} +
    +
    + + + + + + +{{template "base/footer" .}} diff --git a/src/templates/repo/branch_dropdown.tmpl b/src/templates/repo/branch_dropdown.tmpl new file mode 100644 index 0000000..9848995 --- /dev/null +++ b/src/templates/repo/branch_dropdown.tmpl @@ -0,0 +1,89 @@ +{{/* Attributes: +* root +* ContainerClasses +* (TODO: search "branch_dropdown" in the template direcotry) +*/}} +{{$defaultBranch := $.root.BranchName}} +{{if and .root.IsViewTag (not .noTag)}} + {{$defaultBranch = .root.TagName}} +{{end}} +{{if eq $defaultBranch ""}} + {{$defaultBranch = $.root.Repository.DefaultBranch}} +{{end}} + +{{$type := ""}} +{{if and .root.IsViewTag (not .noTag)}} + {{$type = "tag"}} +{{else if .root.IsViewBranch}} + {{$type = "branch"}} +{{else}} + {{$type = "tree"}} +{{end}} + +{{$showBranchesInDropdown := not .root.HideBranchesInDropdown}} + + + +
    + {{/* show dummy elements before Vue componment is mounted, this code must match the code in BranchTagSelector.vue */}} + +
    diff --git a/src/templates/repo/cite/cite_buttons.tmpl b/src/templates/repo/cite/cite_buttons.tmpl new file mode 100644 index 0000000..6f93152 --- /dev/null +++ b/src/templates/repo/cite/cite_buttons.tmpl @@ -0,0 +1,11 @@ + + + + + diff --git a/src/templates/repo/cite/cite_modal.tmpl b/src/templates/repo/cite/cite_modal.tmpl new file mode 100644 index 0000000..e296a1d --- /dev/null +++ b/src/templates/repo/cite/cite_modal.tmpl @@ -0,0 +1,22 @@ + diff --git a/src/templates/repo/clone_buttons.tmpl b/src/templates/repo/clone_buttons.tmpl new file mode 100644 index 0000000..e451c0a --- /dev/null +++ b/src/templates/repo/clone_buttons.tmpl @@ -0,0 +1,15 @@ + +{{if $.CloneButtonShowHTTPS}} + +{{end}} +{{if $.CloneButtonShowSSH}} + +{{end}} + + diff --git a/src/templates/repo/clone_script.tmpl b/src/templates/repo/clone_script.tmpl new file mode 100644 index 0000000..0797b40 --- /dev/null +++ b/src/templates/repo/clone_script.tmpl @@ -0,0 +1,42 @@ + diff --git a/src/templates/repo/commit_page.tmpl b/src/templates/repo/commit_page.tmpl new file mode 100644 index 0000000..9fdb123 --- /dev/null +++ b/src/templates/repo/commit_page.tmpl @@ -0,0 +1,290 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{$class := ""}} + {{if .Commit.Signature}} + {{$class = (printf "%s%s" $class " isSigned")}} + {{if .Verification.Verified}} + {{if eq .Verification.TrustStatus "trusted"}} + {{$class = (printf "%s%s" $class " isVerified")}} + {{else if eq .Verification.TrustStatus "untrusted"}} + {{$class = (printf "%s%s" $class " isVerifiedUntrusted")}} + {{else}} + {{$class = (printf "%s%s" $class " isVerifiedUnmatched")}} + {{end}} + {{else if .Verification.Warning}} + {{$class = (printf "%s%s" $class " isWarning")}} + {{end}} + {{end}} +
    +
    +

    {{RenderCommitMessage $.Context .Commit.Message $.RepoLink $.Repository.ComposeMetas}}{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses "root" $}}

    + {{if not $.PageIsWiki}} +
    + + {{.locale.Tr "repo.diff.browse_source"}} + + {{if and ($.Permission.CanWrite $.UnitTypeCode) (not $.Repository.IsArchived) (not .IsDeleted)}}{{- /* */ -}} + + {{end}} +
    + {{end}} +
    + {{if IsMultilineCommitMessage .Commit.Message}} +
    {{RenderCommitBody $.Context .Commit.Message $.RepoLink $.Repository.ComposeMetas}}
    + {{end}} + {{if .BranchName}} + {{svg "octicon-git-branch" 16 "gt-mr-2"}}{{.BranchName}} + {{end}} + {{if .TagName}} + {{svg "octicon-tag" 16 "gt-mr-2"}}{{.TagName}} + {{end}} +
    +
    +
    + {{if .Author}} + {{avatar $.Context .Author 28 "gt-mr-3"}} + {{if .Author.FullName}} + {{.Author.FullName}} + {{else}} + {{.Commit.Author.Name}} + {{end}} + {{else}} + {{avatarByEmail $.Context .Commit.Author.Email .Commit.Author.Email 28 "gt-mr-3"}} + {{.Commit.Author.Name}} + {{end}} + {{TimeSince .Commit.Author.When $.locale}} + {{if or (ne .Commit.Committer.Name .Commit.Author.Name) (ne .Commit.Committer.Email .Commit.Author.Email)}} + {{.locale.Tr "repo.diff.committed_by"}} + {{if ne .Verification.CommittingUser.ID 0}} + {{avatar $.Context .Verification.CommittingUser 28 "gt-mx-3"}} + {{.Commit.Committer.Name}} + {{else}} + {{avatarByEmail $.Context .Commit.Committer.Email .Commit.Committer.Name 28 "gt-mr-3"}} + {{.Commit.Committer.Name}} + {{end}} + {{end}} +
    +
    + {{if .Parents}} +
    + {{.locale.Tr "repo.diff.parent"}} + {{range .Parents}} + {{if $.PageIsWiki}} + {{ShortSha .}} + {{else}} + {{ShortSha .}} + {{end}} + {{end}} +
    + {{end}} +
    + {{.locale.Tr "repo.diff.commit"}} + {{ShortSha .CommitID}} +
    +
    +
    + {{if .Commit.Signature}} +
    +
    + {{if .Verification.Verified}} + {{if ne .Verification.SigningUser.ID 0}} + {{svg "gitea-lock" 16 "gt-mr-3"}} + {{if eq .Verification.TrustStatus "trusted"}} + {{.locale.Tr "repo.commits.signed_by"}}: + {{else if eq .Verification.TrustStatus "untrusted"}} + {{.locale.Tr "repo.commits.signed_by_untrusted_user"}}: + {{else}} + {{.locale.Tr "repo.commits.signed_by_untrusted_user_unmatched"}}: + {{end}} + {{avatar $.Context .Verification.SigningUser 28 "gt-mr-3"}} + {{.Verification.SigningUser.GetDisplayName}} + {{else}} + {{svg "gitea-lock-cog" 16 "gt-mr-3"}} + {{.locale.Tr "repo.commits.signed_by"}}: + {{avatarByEmail $.Context .Verification.SigningEmail "" 28}} + {{.Verification.SigningUser.GetDisplayName}} + {{end}} + {{else}} + {{svg "gitea-unlock" 16 "gt-mr-3"}} + {{.locale.Tr .Verification.Reason}} + {{end}} +
    +
    + {{if .Verification.Verified}} + {{if ne .Verification.SigningUser.ID 0}} + {{svg "octicon-verified" 16 "gt-mr-3"}} + {{if .Verification.SigningSSHKey}} + {{.locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{else}} + {{.locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{else}} + {{svg "octicon-unverified" 16 "gt-mr-3"}} + {{if .Verification.SigningSSHKey}} + {{.locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{else}} + {{.locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{end}} + {{else if .Verification.Warning}} + {{svg "octicon-unverified" 16 "gt-mr-3"}} + {{if .Verification.SigningSSHKey}} + {{.locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{else}} + {{.locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{else}} + {{if .Verification.SigningKey}} + {{if ne .Verification.SigningKey.KeyID ""}} + {{svg "octicon-verified" 16 "gt-mr-3"}} + {{.locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{end}} + {{if .Verification.SigningSSHKey}} + {{if ne .Verification.SigningSSHKey.Fingerprint ""}} + {{svg "octicon-verified" 16 "gt-mr-3"}} + {{.locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{end}} + {{end}} + {{end}} +
    +
    + {{end}} + {{if .Note}} +
    + {{svg "octicon-note" 16 "gt-mr-3"}} + {{.locale.Tr "repo.diff.git-notes"}}: + {{if .NoteAuthor}} + + {{if .NoteAuthor.FullName}} + {{.NoteAuthor.FullName}} + {{else}} + {{.NoteCommit.Author.Name}} + {{end}} + + {{else}} + {{.NoteCommit.Author.Name}} + {{end}} + {{TimeSince .NoteCommit.Author.When $.locale}} +
    +
    +
    {{RenderNote $.Context .Note $.RepoLink $.Repository.ComposeMetas}}
    +
    + {{end}} + {{template "repo/diff/box" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/commit_status.tmpl b/src/templates/repo/commit_status.tmpl new file mode 100644 index 0000000..d52e151 --- /dev/null +++ b/src/templates/repo/commit_status.tmpl @@ -0,0 +1,18 @@ +{{if eq .State "pending"}} + {{svg "octicon-dot-fill" 18 "commit-status icon text grey"}} +{{end}} +{{if eq .State "running"}} + {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}} +{{end}} +{{if eq .State "success"}} + {{svg "octicon-check" 18 "commit-status icon text green"}} +{{end}} +{{if eq .State "error"}} + {{svg "gitea-exclamation" 18 "commit-status icon text red"}} +{{end}} +{{if eq .State "failure"}} + {{svg "octicon-x" 18 "commit-status icon text red"}} +{{end}} +{{if eq .State "warning"}} + {{svg "gitea-exclamation" 18 "commit-status icon text yellow"}} +{{end}} diff --git a/src/templates/repo/commit_statuses.tmpl b/src/templates/repo/commit_statuses.tmpl new file mode 100644 index 0000000..20a59bf --- /dev/null +++ b/src/templates/repo/commit_statuses.tmpl @@ -0,0 +1,22 @@ +{{if .Statuses}} + {{if and (eq (len .Statuses) 1) .Status.TargetURL}} + + {{template "repo/commit_status" .Status}} + + {{else}} + + {{template "repo/commit_status" .Status}} + + {{end}} +
    + {{range .Statuses}} +
    + {{template "repo/commit_status" .}} + {{.Context}} {{.Description}} + {{if .TargetURL}} + {{$.root.locale.Tr "repo.pulls.status_checks_details"}} + {{end}} +
    + {{end}} +
    +{{end}} diff --git a/src/templates/repo/commits.tmpl b/src/templates/repo/commits.tmpl new file mode 100644 index 0000000..3400dbd --- /dev/null +++ b/src/templates/repo/commits.tmpl @@ -0,0 +1,20 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "repo/sub_menu" .}} +
    +
    + {{template "repo/branch_dropdown" dict "root" . "ContainerClasses" "gt-mr-2"}} + + + {{svg "octicon-git-branch"}} + + {{.locale.Tr "repo.commit_graph"}} + +
    +
    + {{template "repo/commits_table" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/commits_list.tmpl b/src/templates/repo/commits_list.tmpl new file mode 100644 index 0000000..36333c5 --- /dev/null +++ b/src/templates/repo/commits_list.tmpl @@ -0,0 +1,87 @@ +
    + + + + + + + + + + + {{$commitRepoLink := $.RepoLink}}{{if $.CommitRepoLink}}{{$commitRepoLink = $.CommitRepoLink}}{{end}} + {{range .Commits}} + + + + + {{if .Committer}} + + {{else}} + + {{end}} + + {{end}} + +
    {{.locale.Tr "repo.commits.author"}}SHA1{{.locale.Tr "repo.commits.message"}}{{.locale.Tr "repo.commits.date"}}
    + {{$userName := .Author.Name}} + {{if .User}} + {{if .User.FullName}} + {{$userName = .User.FullName}} + {{end}} + {{avatar $.Context .User 28 "gt-mr-2"}}{{$userName}} + {{else}} + {{avatarByEmail $.Context .Author.Email .Author.Name 28 "gt-mr-2"}} + {{$userName}} + {{end}} + + + {{$class := "ui sha label"}} + {{if .Signature}} + {{$class = (printf "%s%s" $class " isSigned")}} + {{if .Verification.Verified}} + {{if eq .Verification.TrustStatus "trusted"}} + {{$class = (printf "%s%s" $class " isVerified")}} + {{else if eq .Verification.TrustStatus "untrusted"}} + {{$class = (printf "%s%s" $class " isVerifiedUntrusted")}} + {{else}} + {{$class = (printf "%s%s" $class " isVerifiedUnmatched")}} + {{end}} + {{else if .Verification.Warning}} + {{$class = (printf "%s%s" $class " isWarning")}} + {{end}} + {{end}} + {{if $.PageIsWiki}} + + {{else if $.Reponame}} + + {{else}} + + {{end}} + {{ShortSha .ID.String}} + {{if .Signature}} + {{template "repo/shabox_badge" dict "root" $ "verification" .Verification}} + {{end}} + {{if $.Reponame}} + + {{else}} + + {{end}} + + + {{if $.PageIsWiki}} + {{.Summary | RenderEmoji $.Context}} + {{else}} + {{$commitLink:= printf "%s/commit/%s" $commitRepoLink (PathEscape .ID.String)}} + {{RenderCommitMessageLinkSubject $.Context .Message $commitRepoLink $commitLink $.Repository.ComposeMetas}} + {{end}} + + {{if IsMultilineCommitMessage .Message}} + + {{end}} + {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $}} + {{if IsMultilineCommitMessage .Message}} +
    {{RenderCommitBody $.Context .Message $commitRepoLink $.Repository.ComposeMetas}}
    + {{end}} +
    {{TimeSince .Committer.When $.locale}}{{TimeSince .Author.When $.locale}}
    +
    diff --git a/src/templates/repo/commits_list_small.tmpl b/src/templates/repo/commits_list_small.tmpl new file mode 100644 index 0000000..6bbc195 --- /dev/null +++ b/src/templates/repo/commits_list_small.tmpl @@ -0,0 +1,50 @@ +{{$index := 0}} +
    +{{range .comment.Commits}} + {{$tag := printf "%s-%d" $.comment.HashTag $index}} + {{$index = Eval $index "+" 1}} +
    + {{svg "octicon-git-commit"}} + {{if .User}} + {{avatar $.root.Context .User}} + {{else}} + {{avatarByEmail $.root.Context .Author.Email .Author.Name}} + {{end}} + + {{$commitLink:= printf "%s/commit/%s" $.comment.Issue.PullRequest.BaseRepo.Link (PathEscape .ID.String)}} + + + {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $.root}} + {{$class := "ui sha label"}} + {{if .Signature}} + {{$class = (printf "%s%s" $class " isSigned")}} + {{if .Verification.Verified}} + {{if eq .Verification.TrustStatus "trusted"}} + {{$class = (printf "%s%s" $class " isVerified")}} + {{else if eq .Verification.TrustStatus "untrusted"}} + {{$class = (printf "%s%s" $class " isVerifiedUntrusted")}} + {{else}} + {{$class = (printf "%s%s" $class " isVerifiedUnmatched")}} + {{end}} + {{else if .Verification.Warning}} + {{$class = (printf "%s%s" $class " isWarning")}} + {{end}} + {{end}} + + {{ShortSha .ID.String}} + {{if .Signature}} + {{template "repo/shabox_badge" dict "root" $.root "verification" .Verification}} + {{end}} + + + + {{RenderCommitMessageLinkSubject $.root.Context .Message ($.comment.Issue.PullRequest.BaseRepo.Link|Escape) $commitLink $.comment.Issue.PullRequest.BaseRepo.ComposeMetas}} + {{if IsMultilineCommitMessage .Message}} + + {{end}} + {{if IsMultilineCommitMessage .Message}} +
    {{RenderCommitBody $.root.Context .Message ($.comment.Issue.PullRequest.BaseRepo.Link|Escape) $.comment.Issue.PullRequest.BaseRepo.ComposeMetas}}
    + {{end}} +
    +{{end}} +
    diff --git a/src/templates/repo/commits_table.tmpl b/src/templates/repo/commits_table.tmpl new file mode 100644 index 0000000..eeb50a2 --- /dev/null +++ b/src/templates/repo/commits_table.tmpl @@ -0,0 +1,36 @@ +

    +
    + {{if or .PageIsCommits (gt .CommitCount 0)}} + {{.CommitCount}} {{.locale.Tr "repo.commits.commits"}} {{if .RefName}}({{.RefName}}){{end}} + {{else if .IsNothingToCompare}} + {{.locale.Tr "repo.commits.nothing_to_compare"}} {{if .RefName}}({{.RefName}}){{end}} + {{else}} + {{.locale.Tr "repo.commits.no_commits" $.BaseBranch $.HeadBranch}} {{if .RefName}}({{.RefName}}){{end}} + {{end}} +
    + +

    + +{{if and .Commits (gt .CommitCount 0)}} + {{template "repo/commits_list" .}} +{{end}} + +{{template "base/paginate" .}} diff --git a/src/templates/repo/create.tmpl b/src/templates/repo/create.tmpl new file mode 100644 index 0000000..05e7052 --- /dev/null +++ b/src/templates/repo/create.tmpl @@ -0,0 +1,225 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "new_repo"}} +

    +
    + {{template "base/alert" .}} + {{template "repo/create_helper" .}} + + {{if not .CanCreateRepo}} +
    +

    {{.locale.TrN .MaxCreationLimit "repo.form.reach_limit_of_creation_1" "repo.form.reach_limit_of_creation_n" .MaxCreationLimit}}

    +
    + {{end}} +
    + + + {{.locale.Tr "repo.owner_helper"}} +
    + +
    + + + {{.locale.Tr "repo.repo_name_helper"}} +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    + {{.locale.Tr "repo.visibility_description"}} +
    +
    + + +
    +
    + + +
    + +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + + +
    + +
    + +
    + + + {{.locale.Tr "repo.repo_gitignore_helper_desc"}} +
    +
    + + + {{.locale.Tr "repo.license_helper_desc" "https://choosealicense.com/" | Str2html}} +
    + +
    + + + {{.locale.Tr "repo.readme_helper_desc"}} +
    +
    +
    + + +
    +
    +
    + + + {{.locale.Tr "repo.default_branch_helper"}} +
    +
    + + +
    + {{.locale.Tr "repo.trust_model_helper"}} +
      +
    • {{.locale.Tr "repo.trust_model_helper_collaborator"}}
    • +
    • {{.locale.Tr "repo.trust_model_helper_committer"}}
    • +
    • {{.locale.Tr "repo.trust_model_helper_collaborator_committer"}}
    • +
    • {{.locale.Tr "repo.trust_model_helper_default"}}
    • +
    +
    +
    +
    + +
    + + +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/create_helper.tmpl b/src/templates/repo/create_helper.tmpl new file mode 100644 index 0000000..ec253e9 --- /dev/null +++ b/src/templates/repo/create_helper.tmpl @@ -0,0 +1,3 @@ +{{if not $.DisableMigrations}} +

    {{.locale.Tr "repo.new_repo_helper" ((printf "%s%s" AppSubUrl "/repo/migrate")|Escape) | Safe}}

    +{{end}} diff --git a/src/templates/repo/diff/blob_excerpt.tmpl b/src/templates/repo/diff/blob_excerpt.tmpl new file mode 100644 index 0000000..23149f6 --- /dev/null +++ b/src/templates/repo/diff/blob_excerpt.tmpl @@ -0,0 +1,80 @@ +{{if $.IsSplitStyle}} + {{range $k, $line := $.section.Lines}} + + {{if eq .GetType 4}} + +
    + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} + + {{end}} + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} + + {{end}} + {{if eq $line.GetExpandDirection 2}} + + {{end}} +
    + + {{$inlineDiff := $.section.GetComputedInlineDiffFor $line $.locale}}{{/* + */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.locale}} + {{else}} + {{$inlineDiff := $.section.GetComputedInlineDiffFor $line $.locale}} + + {{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}}{{end}} + {{if $line.LeftIdx}}{{end}} + {{/* + */}}{{if $line.LeftIdx}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.locale}}{{else}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}} + + {{if and $line.RightIdx $inlineDiff.EscapeStatus.Escaped}}{{end}} + {{if $line.RightIdx}}{{end}} + {{/* + */}}{{if $line.RightIdx}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.locale}}{{else}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}} + {{end}} + + {{end}} +{{else}} + {{range $k, $line := $.section.Lines}} + + {{if eq .GetType 4}} + +
    + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} + + {{end}} + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} + + {{end}} + {{if eq $line.GetExpandDirection 2}} + + {{end}} +
    + + {{else}} + + + {{end}} + {{$inlineDiff := $.section.GetComputedInlineDiffFor $line $.locale}} + {{if $inlineDiff.EscapeStatus.Escaped}}{{end}} + + {{$inlineDiff.Content}} + + {{end}} +{{end}} diff --git a/src/templates/repo/diff/box.tmpl b/src/templates/repo/diff/box.tmpl new file mode 100644 index 0000000..67d0434 --- /dev/null +++ b/src/templates/repo/diff/box.tmpl @@ -0,0 +1,228 @@ +{{if .DiffNotAvailable}} +
    +
    +
    + {{template "repo/diff/whitespace_dropdown" .}} + {{template "repo/diff/options_dropdown" .}} + {{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} + {{template "repo/diff/new_review" .}} + {{end}} +
    +
    +
    +

    {{.locale.Tr "repo.diff.data_not_available"}}

    +{{else}} +
    +
    +
    + + +
    + {{svg "octicon-diff" 16 "gt-mr-2"}}{{.locale.Tr "repo.diff.stats_desc" .Diff.NumFiles .Diff.TotalAddition .Diff.TotalDeletion | Str2html}} +
    +
    +
    + {{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} +
    + + +
    + {{end}} + {{template "repo/diff/whitespace_dropdown" .}} + {{template "repo/diff/options_dropdown" .}} + {{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} + {{template "repo/diff/new_review" .}} + {{end}} +
    +
    + +
    +
    +
    + +
    + {{range $i, $file := .Diff.Files}} + {{/*notice: the index of Diff.Files should not be used for element ID, because the index will be restarted from 0 when doing load-more for PRs with a lot of files*/}} + {{$blobBase := call $.GetBlobByPathForCommit $.BeforeCommit $file.OldName}} + {{$blobHead := call $.GetBlobByPathForCommit $.HeadCommit $file.Name}} + {{$isImage := or (call $.IsBlobAnImage $blobBase) (call $.IsBlobAnImage $blobHead)}} + {{$isCsv := (call $.IsCsvFile $file)}} + {{$showFileViewToggle := or $isImage (and (not $file.IsIncomplete) $isCsv)}} + {{$isExpandable := or (gt $file.Addition 0) (gt $file.Deletion 0) $file.IsBin}} + {{$isReviewFile := and $.IsSigned $.PageIsPullFiles (not $.IsArchived)}} +
    +

    +
    + +
    + {{if $file.IsBin}} + + {{$.locale.Tr "repo.diff.bin"}} + + {{else}} + {{template "repo/diff/stats" dict "file" . "root" $}} + {{end}} +
    + {{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}{{if .IsLFSFile}} ({{$.locale.Tr "repo.stored_lfs"}}){{end}} + + {{if $file.IsGenerated}} + {{$.locale.Tr "repo.diff.generated"}} + {{end}} + {{if $file.IsVendored}} + {{$.locale.Tr "repo.diff.vendored"}} + {{end}} + {{if and $file.Mode $file.OldMode}} + {{$file.OldMode}} → {{$file.Mode}} + {{else if $file.Mode}} + {{$file.Mode}} + {{end}} +
    +
    + {{if $showFileViewToggle}} +
    + + +
    + {{end}} + {{if $file.IsProtected}} + {{$.locale.Tr "repo.diff.protected"}} + {{end}} + {{if and $isReviewFile $file.HasChangedSinceLastReview}} + {{$.locale.Tr "repo.pulls.has_changed_since_last_review"}} + {{end}} + {{if not (or $file.IsIncomplete $file.IsBin $file.IsSubmodule)}} + + + {{end}} + {{if and (not $file.IsSubmodule) (not $.PageIsWiki)}} + {{if $file.IsDeleted}} + {{$.locale.Tr "repo.diff.view_file"}} + {{else}} + {{$.locale.Tr "repo.diff.view_file"}} + {{end}} + {{end}} + {{if $isReviewFile}} + + {{end}} +
    +

    +
    +
    + {{if or $file.IsIncomplete $file.IsBin}} +
    + {{if $file.IsIncomplete}} + {{if $file.IsIncompleteLineTooLong}} + {{$.locale.Tr "repo.diff.file_suppressed_line_too_long"}} + {{else}} + {{$.locale.Tr "repo.diff.file_suppressed"}} + {{$.locale.Tr "repo.diff.load"}} + {{end}} + {{else}} + {{$.locale.Tr "repo.diff.bin_not_shown"}} + {{end}} +
    + {{else}} + + {{if $.IsSplitStyle}} + {{template "repo/diff/section_split" dict "file" . "root" $}} + {{else}} + {{template "repo/diff/section_unified" dict "file" . "root" $}} + {{end}} +
    + {{end}} +
    + {{if $showFileViewToggle}} + {{/* for image or CSV, it can have a horizontal scroll bar, there won't be review comment context menu (position absolute) which would be clipped by "overflow" */}} +
    + + {{if $isImage}} + {{template "repo/diff/image_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}} + {{else}} + {{template "repo/diff/csv_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}} + {{end}} +
    +
    + {{end}} +
    +
    + {{end}} + + {{if .Diff.IsIncomplete}} +
    +

    + {{$.locale.Tr "repo.diff.too_many_files"}} + {{.locale.Tr "repo.diff.show_more"}} +

    +
    + {{end}} +
    +
    + + {{if not $.Repository.IsArchived}} + + {{end}} + + {{template "repo/issue/view_content/reference_issue_dialog" .}} +
    +{{end}} diff --git a/src/templates/repo/diff/comment_form.tmpl b/src/templates/repo/diff/comment_form.tmpl new file mode 100644 index 0000000..109f167 --- /dev/null +++ b/src/templates/repo/diff/comment_form.tmpl @@ -0,0 +1,43 @@ +{{if and $.root.SignedUserID (not $.Repository.IsArchived)}} +
    + {{$.root.CsrfTokenHtml}} + + + + + + + + + + {{template "shared/combomarkdowneditor" (dict + "locale" $.root.locale + "MarkdownPreviewUrl" (print $.root.Repository.Link "/markup") + "MarkdownPreviewContext" $.root.RepoLink + "TextareaName" "content" + "TextareaPlaceholder" ($.locale.Tr "repo.diff.comment.placeholder") + "DropzoneParentContainer" "form" + )}} + + +
    +{{end}} diff --git a/src/templates/repo/diff/comment_form_datahandler.tmpl b/src/templates/repo/diff/comment_form_datahandler.tmpl new file mode 100644 index 0000000..d0e4934 --- /dev/null +++ b/src/templates/repo/diff/comment_form_datahandler.tmpl @@ -0,0 +1,7 @@ +{{if $.comment}} + {{template "repo/diff/comment_form" dict "root" $.root "hidden" $.hidden "reply" $.reply "Line" $.comment.UnsignedLine "File" $.comment.TreePath "Side" $.comment.DiffSide "HasComments" true}} +{{else if $.root}} + {{template "repo/diff/comment_form" $}} +{{else}} + {{template "repo/diff/comment_form" dict "root" $}} +{{end}} diff --git a/src/templates/repo/diff/comments.tmpl b/src/templates/repo/diff/comments.tmpl new file mode 100644 index 0000000..d19ac1f --- /dev/null +++ b/src/templates/repo/diff/comments.tmpl @@ -0,0 +1,72 @@ +{{range .comments}} + +{{$createdStr:= TimeSinceUnix .CreatedUnix $.root.locale}} +
    + {{if .OriginalAuthor}} + + {{else}} + {{template "shared/user/avatarlink" dict "Context" $.root.Context "user" .Poster}} + {{end}} +
    +
    +
    + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.root.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + + {{$.root.locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdStr | Safe}} + + + {{if $.root.Repository.OriginalURL}} + ({{$.root.locale.Tr "repo.migrated_from" ($.root.Repository.OriginalURL | Escape) ($.root.Repository.GetOriginalURLHostname | Escape) | Safe}}) + {{end}} + + {{else}} + + {{template "shared/user/namelink" .Poster}} + {{$.root.locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdStr | Safe}} + + {{end}} +
    +
    + {{if .Invalidated}} + {{$referenceUrl := printf "%s#%s" $.root.Issue.Link .HashTag}} + + {{$.root.locale.Tr "repo.issues.review.outdated"}} + + {{end}} + {{if and .Review}} + {{if eq .Review.Type 0}} +
    + {{$.root.locale.Tr "repo.issues.review.pending"}} +
    + {{else}} +
    + {{$.root.locale.Tr "repo.issues.review.review"}} +
    + {{end}} + {{end}} + {{template "repo/issue/view_content/add_reaction" dict "ctxData" $.root "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "ctxData" $.root "item" . "delete" true "issue" false "diff" true "IsCommentPoster" (and $.root.IsSigned (eq $.root.SignedUserID .PosterID))}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent|Str2html}} + {{else}} + {{$.root.locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ctxData" $.root "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    +{{end}} diff --git a/src/templates/repo/diff/compare.tmpl b/src/templates/repo/diff/compare.tmpl new file mode 100644 index 0000000..4efe816 --- /dev/null +++ b/src/templates/repo/diff/compare.tmpl @@ -0,0 +1,244 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} + {{$showDiffBox := false}} +
    +

    + {{if and $.PageIsComparePull $.IsSigned (not .Repository.IsArchived)}} + {{.locale.Tr "repo.pulls.compare_changes"}} +
    {{.locale.Tr "repo.pulls.compare_changes_desc"}}
    + {{else}} + {{.locale.Tr "action.compare_commits_general"}} + {{end}} +

    + {{if .Flash.WarningMsg}} + {{/* + There's already an importing of alert.tmpl in new_form.tmpl, + but only the negative message will be displayed within forms for some reasons, see semantic.css:10659. + To avoid repeated negative messages, the importing here if for .Flash.WarningMsg only. + */}} + {{template "base/alert" .}} + {{end}} + {{$BaseCompareName := $.BaseName -}} + {{- $HeadCompareName := $.HeadRepo.OwnerName -}} + {{- if and (eq $.BaseName $.HeadRepo.OwnerName) (ne $.Repository.Name $.HeadRepo.Name) -}} + {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}} + {{- end -}} + {{- $OwnForkCompareName := "" -}} + {{- if .OwnForkRepo -}} + {{- $OwnForkCompareName = .OwnForkRepo.OwnerName -}} + {{- end -}} + {{- $RootRepoCompareName := "" -}} + {{- if .RootRepo -}} + {{- $RootRepoCompareName = .RootRepo.OwnerName -}} + {{- if eq $.HeadRepo.OwnerName .RootRepo.OwnerName -}} + {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}} + {{- end -}} + {{- end -}} +
    + {{svg "octicon-git-compare"}} + + {{.CompareSeparator}} + +
    + + {{if .IsNothingToCompare}} + {{if and $.IsSigned $.AllowEmptyPr (not .Repository.IsArchived)}} +
    {{.locale.Tr "repo.pulls.nothing_to_compare_and_allow_empty_pr"}}
    +
    + +
    +
    + {{template "repo/issue/new_form" .}} +
    + {{else}} +
    {{.locale.Tr "repo.pulls.nothing_to_compare"}}
    + {{end}} + {{else if and .PageIsComparePull (gt .CommitCount 0)}} + {{if .HasPullRequest}} +
    +
    + {{.locale.Tr "repo.pulls.has_pull_request" (Escape $.RepoLink) (Escape $.RepoRelPath) .PullRequest.Index | Safe}} +

    + {{RenderIssueTitle $.Context .PullRequest.Issue.Title $.RepoLink $.Repository.ComposeMetas}} + #{{.PullRequest.Issue.Index}} +

    +
    + +
    + {{else}} + {{if and $.IsSigned (not .Repository.IsArchived)}} +
    + +
    + {{else if .Repository.IsArchived}} +
    + {{if .Repository.ArchivedUnix.IsZero}} + {{.locale.Tr "repo.archive.title"}} + {{else}} + {{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}} + {{end}} +
    + {{end}} + {{if $.IsSigned}} +
    + {{template "repo/issue/new_form" .}} +
    + {{end}} + {{$showDiffBox = true}} + {{end}} + {{else}} + {{$showDiffBox = true}} + {{end}} +
    + + {{if $showDiffBox}} +
    + {{template "repo/commits_table" .}} + {{template "repo/diff/box" .}} +
    + {{end}} +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/diff/conversation.tmpl b/src/templates/repo/diff/conversation.tmpl new file mode 100644 index 0000000..ce34479 --- /dev/null +++ b/src/templates/repo/diff/conversation.tmpl @@ -0,0 +1,66 @@ +{{$resolved := (index .comments 0).IsResolved}} +{{$invalid := (index .comments 0).Invalidated}} +{{$resolveDoer := (index .comments 0).ResolveDoer}} +{{$isNotPending := (not (eq (index .comments 0).Review.Type 0))}} +{{$referenceUrl := printf "%s#%s" $.Issue.Link (index .comments 0).HashTag}} +
    + {{if $resolved}} +
    +
    + {{svg "octicon-check" 16 "icon gt-mr-2"}} + {{$resolveDoer.Name}} {{$.locale.Tr "repo.issues.review.resolved_by"}} + {{if $invalid}} + + + {{$.locale.Tr "repo.issues.review.outdated"}} + + {{end}} +
    +
    + + +
    +
    + {{end}} +
    +
    + + {{template "repo/diff/comments" dict "root" $ "comments" .comments}} + +
    +
    +
    + + +
    + {{if and $.CanMarkConversation $isNotPending}} + + {{end}} + {{if and $.SignedUserID (not $.Repository.IsArchived)}} + + {{end}} +
    + {{template "repo/diff/comment_form_datahandler" dict "hidden" true "reply" (index .comments 0).ReviewID "root" $ "comment" (index .comments 0)}} +
    +
    diff --git a/src/templates/repo/diff/csv_diff.tmpl b/src/templates/repo/diff/csv_diff.tmpl new file mode 100644 index 0000000..0f46da3 --- /dev/null +++ b/src/templates/repo/diff/csv_diff.tmpl @@ -0,0 +1,58 @@ + + + {{$result := call .root.CreateCsvDiff .file .blobBase .blobHead}} + {{if $result.Error}} +
    {{$result.Error}}
    + {{else if $result.Sections}} + + {{range $i, $section := $result.Sections}} + + {{range $j, $row := $section.Rows}} + + {{if and (eq $i 0) (eq $j 0)}} + + {{range $j, $cell := $row.Cells}} + {{if not $cell}} + + {{else if eq $cell.Type 2}} + + {{else if eq $cell.Type 3}} + + {{else if eq $cell.Type 4}} + + {{else if eq $cell.Type 5}} + + {{else if eq $cell.Type 6}} + + {{else}} + + {{end}} + {{end}} + {{else}} + + {{range $j, $cell := $row.Cells}} + {{if not $cell}} + + {{else if eq $cell.Type 2}} + + {{else if eq $cell.Type 3}} + + {{else if eq $cell.Type 4}} + + {{else if eq $cell.Type 5}} + + {{else if eq $cell.Type 6}} + + {{else}} + + {{end}} + {{end}} + {{end}} + + {{end}} + + {{end}} +
    {{.RowIdx}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}{{.LeftCell}}{{.RightCell}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}{{if .RowIdx}}{{.RowIdx}}{{end}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}{{.LeftCell}}{{.RightCell}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}
    + {{end}} + + diff --git a/src/templates/repo/diff/escape_title.tmpl b/src/templates/repo/diff/escape_title.tmpl new file mode 100644 index 0000000..7aa5af4 --- /dev/null +++ b/src/templates/repo/diff/escape_title.tmpl @@ -0,0 +1,2 @@ +{{if .diff.EscapeStatus.HasInvisible}}{{.locale.Tr "repo.invisible_runes_line"}} {{end}}{{/* +*/}}{{if .diff.EscapeStatus.HasAmbiguous}}{{.locale.Tr "repo.ambiguous_runes_line"}}{{end}} diff --git a/src/templates/repo/diff/image_diff.tmpl b/src/templates/repo/diff/image_diff.tmpl new file mode 100644 index 0000000..ec14ef9 --- /dev/null +++ b/src/templates/repo/diff/image_diff.tmpl @@ -0,0 +1,81 @@ +{{if or .blobBase .blobHead}} + + +
    + +
    +
    +
    + {{if .blobBase}} + +

    {{.root.locale.Tr "repo.diff.file_before"}}

    + +

    + + {{.root.locale.Tr "repo.diff.file_image_width"}}: +  |  + {{.root.locale.Tr "repo.diff.file_image_height"}}: +  |  + + {{.root.locale.Tr "repo.diff.file_byte_size"}}: {{FileSize .blobBase.Size}} +

    +
    + {{end}} + {{if .blobHead}} + +

    {{.root.locale.Tr "repo.diff.file_after"}}

    + +

    + + {{.root.locale.Tr "repo.diff.file_image_width"}}: +  |  + {{.root.locale.Tr "repo.diff.file_image_height"}}: +  |  + + {{.root.locale.Tr "repo.diff.file_byte_size"}}: {{FileSize .blobHead.Size}} +

    +
    + {{end}} +
    +
    + {{if and .blobBase .blobHead}} +
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +
    + {{end}} +
    +
    +
    + + +{{end}} diff --git a/src/templates/repo/diff/new_comment.tmpl b/src/templates/repo/diff/new_comment.tmpl new file mode 100644 index 0000000..6a71539 --- /dev/null +++ b/src/templates/repo/diff/new_comment.tmpl @@ -0,0 +1,5 @@ +
    +
    + {{template "repo/diff/comment_form_datahandler" .}} +
    +
    diff --git a/src/templates/repo/diff/new_review.tmpl b/src/templates/repo/diff/new_review.tmpl new file mode 100644 index 0000000..dc9a82c --- /dev/null +++ b/src/templates/repo/diff/new_review.tmpl @@ -0,0 +1,51 @@ +
    + +
    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    {{$.locale.Tr "repo.diff.review.header"}}
    + {{svg "octicon-x" 16}} +
    +
    + {{template "shared/combomarkdowneditor" (dict + "locale" $.locale + "MarkdownPreviewUrl" (print .Repository.Link "/markup") + "MarkdownPreviewContext" .RepoLink + "TextareaName" "content" + "TextareaPlaceholder" ($.locale.Tr "repo.diff.review.placeholder") + "DropzoneParentContainer" "form" + )}} +
    + {{if .IsAttachmentEnabled}} +
    + {{template "repo/upload" .}} +
    + {{end}} +
    + {{$showSelfTooltip := (and $.IsSigned ($.Issue.IsPoster $.SignedUser.ID))}} + {{if $showSelfTooltip}} + + + + {{else}} + + {{end}} + + {{if $showSelfTooltip}} + + + + {{else}} + + {{end}} +
    +
    +
    +
    diff --git a/src/templates/repo/diff/options_dropdown.tmpl b/src/templates/repo/diff/options_dropdown.tmpl new file mode 100644 index 0000000..172e674 --- /dev/null +++ b/src/templates/repo/diff/options_dropdown.tmpl @@ -0,0 +1,33 @@ + diff --git a/src/templates/repo/diff/section_code.tmpl b/src/templates/repo/diff/section_code.tmpl new file mode 100644 index 0000000..c95ce83 --- /dev/null +++ b/src/templates/repo/diff/section_code.tmpl @@ -0,0 +1,6 @@ +{{.diff.Content}} diff --git a/src/templates/repo/diff/section_split.tmpl b/src/templates/repo/diff/section_split.tmpl new file mode 100644 index 0000000..1c9bfed --- /dev/null +++ b/src/templates/repo/diff/section_split.tmpl @@ -0,0 +1,155 @@ +{{$file := .file}} + + + + + + + + + + +{{range $j, $section := $file.Sections}} + {{range $k, $line := $section.Lines}} + {{$hasmatch := ne $line.Match -1}} + {{if or (ne .GetType 2) (not $hasmatch)}} + + {{if eq .GetType 4}} + +
    + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} + + {{end}} + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} + + {{end}} + {{if eq $line.GetExpandDirection 2}} + + {{end}} +
    + {{$inlineDiff := $section.GetComputedInlineDiffFor $line $.root.locale}} + {{if $inlineDiff.EscapeStatus.Escaped}}{{end}} + {{/* + */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.root.locale}}{{/* + */}} + {{else if and (eq .GetType 3) $hasmatch}}{{/* DEL */}} + {{$match := index $section.Lines $line.Match}} + {{- $leftDiff := ""}}{{if $line.LeftIdx}}{{$leftDiff = $section.GetComputedInlineDiffFor $line $.root.locale}}{{end}} + {{- $rightDiff := ""}}{{if $match.RightIdx}}{{$rightDiff = $section.GetComputedInlineDiffFor $match $.root.locale}}{{end}} + + {{if $line.LeftIdx}}{{if $leftDiff.EscapeStatus.Escaped}}{{end}}{{end}} + {{if $match.RightIdx}}{{end}} + {{/* + */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/* + */}}{{/* + */}}{{svg "octicon-plus"}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}}{{if $match.RightIdx}}{{/* + */}}{{template "repo/diff/section_code" dict "diff" $rightDiff "locale" $.root.locale}}{{/* + */}}{{else}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}} + {{else}} + {{$inlineDiff := $section.GetComputedInlineDiffFor $line $.root.locale}} + + {{if $line.LeftIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}{{end}}{{end}} + {{if $line.LeftIdx}}{{end}} + {{/* + */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles (not (eq .GetType 2))}}{{/* + */}}{{/* + */}}{{svg "octicon-plus"}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}}{{if $line.LeftIdx}}{{/* + */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.root.locale}}{{/* + */}}{{else}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}} + + {{if $line.RightIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}{{end}}{{end}} + {{if $line.RightIdx}}{{end}} + {{/* + */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles (not (eq .GetType 3))}}{{/* + */}}{{/* + */}}{{svg "octicon-plus"}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}}{{if $line.RightIdx}}{{/* + */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.root.locale}}{{/* + */}}{{else}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}} + {{end}} + + {{if and (eq .GetType 3) $hasmatch}} + {{$match := index $section.Lines $line.Match}} + {{if or (gt (len $line.Comments) 0) (gt (len $match.Comments) 0)}} + + + {{if gt (len $line.Comments) 0}} + {{if eq $line.GetCommentSide "previous"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + {{end}} + {{if gt (len $match.Comments) 0}} + {{if eq $match.GetCommentSide "previous"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $match.Comments}} + {{end}} + {{end}} + + + {{if eq $line.GetCommentSide "proposed"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + {{if gt (len $match.Comments) 0}} + {{if eq $match.GetCommentSide "proposed"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $match.Comments}} + {{end}} + {{end}} + + + {{end}} + {{else if gt (len $line.Comments) 0}} + + + {{if gt (len $line.Comments) 0}} + {{if eq $line.GetCommentSide "previous"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + {{end}} + + + {{if eq $line.GetCommentSide "proposed"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + + + {{end}} + {{end}} + {{end}} +{{end}} diff --git a/src/templates/repo/diff/section_unified.tmpl b/src/templates/repo/diff/section_unified.tmpl new file mode 100644 index 0000000..8f9c122 --- /dev/null +++ b/src/templates/repo/diff/section_unified.tmpl @@ -0,0 +1,71 @@ +{{$file := .file}} + + + + + + + +{{range $j, $section := $file.Sections}} + {{range $k, $line := $section.Lines}} + + {{if eq .GetType 4}} + {{if $.root.AfterCommitID}} + +
    + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} + + {{end}} + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} + + {{end}} + {{if eq $line.GetExpandDirection 2}} + + {{end}} +
    + + {{else}} + {{/* for code file preview page or comment diffs on pull comment pages, do not show the expansion arrows */}} + + {{end}} + {{else}} + + + {{end}} + {{$inlineDiff := $section.GetComputedInlineDiffFor $line $.root.locale -}} + + {{- if $inlineDiff.EscapeStatus.Escaped -}} + + {{- end -}} + + + {{if eq .GetType 4}} + {{/* + */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.root.locale}}{{/* + */}} + {{else}} + {{/* + */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/* + */}}{{/* + */}}{{svg "octicon-plus"}}{{/* + */}}{{/* + */}}{{end}}{{/* + */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.root.locale}}{{/* + */}} + {{end}} + + {{if gt (len $line.Comments) 0}} + + + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + + + {{end}} + {{end}} +{{end}} diff --git a/src/templates/repo/diff/stats.tmpl b/src/templates/repo/diff/stats.tmpl new file mode 100644 index 0000000..ff7e90d --- /dev/null +++ b/src/templates/repo/diff/stats.tmpl @@ -0,0 +1,5 @@ +{{Eval .file.Addition "+" .file.Deletion}} + + {{/* if the denominator is zero, then the float result is "width: NaNpx", as before, it just works */}} +
    +
    diff --git a/src/templates/repo/diff/whitespace_dropdown.tmpl b/src/templates/repo/diff/whitespace_dropdown.tmpl new file mode 100644 index 0000000..2bd8f2f --- /dev/null +++ b/src/templates/repo/diff/whitespace_dropdown.tmpl @@ -0,0 +1,30 @@ + +{{if .IsSplitStyle}}{{svg "gitea-join"}}{{else}}{{svg "gitea-split"}}{{end}} diff --git a/src/templates/repo/editor/cherry_pick.tmpl b/src/templates/repo/editor/cherry_pick.tmpl new file mode 100644 index 0000000..4f1937b --- /dev/null +++ b/src/templates/repo/editor/cherry_pick.tmpl @@ -0,0 +1,30 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} + + + +
    + +
    + {{template "repo/editor/commit_form" .}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/editor/commit_form.tmpl b/src/templates/repo/editor/commit_form.tmpl new file mode 100644 index 0000000..6a3f86f --- /dev/null +++ b/src/templates/repo/editor/commit_form.tmpl @@ -0,0 +1,74 @@ +
    + {{avatar $.Context .SignedUser 48 "commit-avatar"}} +
    +

    {{- if .CanCommitToBranch.WillSign}} + {{svg "octicon-lock" 24}} + {{.locale.Tr "repo.editor.commit_signed_changes"}} + {{- else}} + {{svg "octicon-unlock" 24}} + {{.locale.Tr "repo.editor.commit_changes"}} + {{- end}}

    +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    + {{if not .Repository.IsEmpty}} +
    +
    + {{if .CanCreatePullRequest}} + + {{else}} + + {{end}} + +
    +
    +
    +
    + {{svg "octicon-git-branch"}} + + +
    +
    + {{end}} +
    +
    + + {{.locale.Tr "repo.editor.cancel"}} +
    diff --git a/src/templates/repo/editor/delete.tmpl b/src/templates/repo/editor/delete.tmpl new file mode 100644 index 0000000..2c0c2fc --- /dev/null +++ b/src/templates/repo/editor/delete.tmpl @@ -0,0 +1,13 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} + + {{template "repo/editor/commit_form" .}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/editor/diff_preview.tmpl b/src/templates/repo/editor/diff_preview.tmpl new file mode 100644 index 0000000..e2e922b --- /dev/null +++ b/src/templates/repo/editor/diff_preview.tmpl @@ -0,0 +1,11 @@ +
    +
    +
    + + + {{template "repo/diff/section_unified" dict "file" .File "root" $}} + +
    +
    +
    +
    diff --git a/src/templates/repo/editor/edit.tmpl b/src/templates/repo/editor/edit.tmpl new file mode 100644 index 0000000..2f47616 --- /dev/null +++ b/src/templates/repo/editor/edit.tmpl @@ -0,0 +1,78 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} + + +
    + +
    + + {{template "repo/editor/commit_form" .}} +
    +
    + + + + +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/editor/patch.tmpl b/src/templates/repo/editor/patch.tmpl new file mode 100644 index 0000000..4f4032e --- /dev/null +++ b/src/templates/repo/editor/patch.tmpl @@ -0,0 +1,57 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} + + +
    + +
    + + {{template "repo/editor/commit_form" .}} +
    +
    + + +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/editor/upload.tmpl b/src/templates/repo/editor/upload.tmpl new file mode 100644 index 0000000..d9408c9 --- /dev/null +++ b/src/templates/repo/editor/upload.tmpl @@ -0,0 +1,33 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    + +
    +
    + {{template "repo/upload" .}} +
    + {{template "repo/editor/commit_form" .}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/empty.tmpl b/src/templates/repo/empty.tmpl new file mode 100644 index 0000000..50f209b --- /dev/null +++ b/src/templates/repo/empty.tmpl @@ -0,0 +1,82 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    +
    + {{template "base/alert" .}} + {{if .Repository.IsArchived}} +
    + {{if .Repository.ArchivedUnix.IsZero}} + {{.locale.Tr "repo.archive.title"}} + {{else}} + {{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}} + {{end}} +
    + {{end}} + {{if .Repository.IsBroken}} +
    + {{.locale.Tr "repo.broken_message"}} +
    + {{else if .CanWriteCode}} +

    + {{.locale.Tr "repo.quick_guide"}} +

    +
    +
    +

    {{.locale.Tr "repo.clone_this_repo"}} {{.locale.Tr "repo.clone_helper" "http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository" | Str2html}}

    + +
    + {{if and .CanWriteCode (not .Repository.IsArchived)}} + + {{.locale.Tr "repo.editor.new_file"}} + + {{if .RepositoryUploadEnabled}} + + {{.locale.Tr "repo.editor.upload_file"}} + + {{end}} + {{end}} +
    + {{template "repo/clone_buttons" .}} +
    +
    +
    + + {{if not .Repository.IsArchived}} +
    + +
    +

    {{.locale.Tr "repo.create_new_repo_command"}}

    +
    +
    touch README.md
    +git init
    +{{if ne .Repository.DefaultBranch "master"}}git checkout -b {{.Repository.DefaultBranch}}{{end}}
    +git add README.md
    +git commit -m "first commit"
    +git remote add origin {{$.CloneButtonOriginLink.HTTPS}}
    +git push -u origin {{.Repository.DefaultBranch}}
    +
    +
    +
    + +
    +

    {{.locale.Tr "repo.push_exist_repo"}}

    +
    +
    git remote add origin {{$.CloneButtonOriginLink.HTTPS}}
    +git push -u origin {{.Repository.DefaultBranch}}
    +
    +
    + {{end}} + {{else}} +
    + {{.locale.Tr "repo.empty_message"}} +
    + {{end}} + {{template "repo/clone_script" .}} +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/file_info.tmpl b/src/templates/repo/file_info.tmpl new file mode 100644 index 0000000..44256a0 --- /dev/null +++ b/src/templates/repo/file_info.tmpl @@ -0,0 +1,33 @@ +
    + {{if .FileIsSymlink}} +
    + {{.locale.Tr "repo.symbolic_link"}} +
    + {{end}} + {{if .NumLinesSet}}{{/* Explicit attribute needed to show 0 line changes */}} +
    + {{.NumLines}} {{.locale.TrN .NumLines "repo.line" "repo.lines"}} +
    + {{end}} + {{if .FileSize}} +
    + {{FileSize .FileSize}}{{if .IsLFSFile}} ({{.locale.Tr "repo.stored_lfs"}}){{end}} +
    + {{end}} + {{if .LFSLock}} +
    + {{svg "octicon-lock" 16 "gt-mr-2"}} + {{.LFSLockOwner}} +
    + {{end}} + {{if .LexerName}} +
    + {{.LexerName}} +
    + {{end}} + {{if .IsExecutable}} +
    + {{.locale.Tr "repo.executable_file"}} +
    + {{end}} +
    diff --git a/src/templates/repo/find/files.tmpl b/src/templates/repo/find/files.tmpl new file mode 100644 index 0000000..dab46cf --- /dev/null +++ b/src/templates/repo/find/files.tmpl @@ -0,0 +1,21 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    + {{.RepoName}} + / +
    + +
    +
    + + + +
    +
    +

    {{.locale.Tr "repo.find_file.no_matching"}}

    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/forks.tmpl b/src/templates/repo/forks.tmpl new file mode 100644 index 0000000..13810b4 --- /dev/null +++ b/src/templates/repo/forks.tmpl @@ -0,0 +1,18 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +

    + {{.locale.Tr "repo.forks"}} +

    + {{range .Forks}} +
    + {{avatar $.Context .Owner}} + {{.Owner.Name}} / {{.Name}} +
    + {{end}} +
    + + {{template "base/paginate" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/graph.tmpl b/src/templates/repo/graph.tmpl new file mode 100644 index 0000000..b4cfee8 --- /dev/null +++ b/src/templates/repo/graph.tmpl @@ -0,0 +1,62 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    +

    + {{.locale.Tr "repo.commit_graph"}} +
    + + + +
    +

    +
    +
    + {{template "repo/graph/svgcontainer" .}} + {{template "repo/graph/commits" .}} +
    +
    +
    + +{{template "base/footer" .}} diff --git a/src/templates/repo/graph/commits.tmpl b/src/templates/repo/graph/commits.tmpl new file mode 100644 index 0000000..f5fc273 --- /dev/null +++ b/src/templates/repo/graph/commits.tmpl @@ -0,0 +1,79 @@ +
    + +
    diff --git a/src/templates/repo/graph/div.tmpl b/src/templates/repo/graph/div.tmpl new file mode 100644 index 0000000..c0bd4e2 --- /dev/null +++ b/src/templates/repo/graph/div.tmpl @@ -0,0 +1,7 @@ +
    + {{template "repo/graph/svgcontainer" .}} + {{template "repo/graph/commits" .}} + +
    diff --git a/src/templates/repo/graph/svgcontainer.tmpl b/src/templates/repo/graph/svgcontainer.tmpl new file mode 100644 index 0000000..99c3c87 --- /dev/null +++ b/src/templates/repo/graph/svgcontainer.tmpl @@ -0,0 +1,24 @@ +
    + + {{range $flowid, $flow := .Graph.Flows}} + + + {{range $flow.Commits}} + + {{end}} + + {{end}} + +
    diff --git a/src/templates/repo/header.tmpl b/src/templates/repo/header.tmpl new file mode 100644 index 0000000..33791fd --- /dev/null +++ b/src/templates/repo/header.tmpl @@ -0,0 +1,253 @@ +
    +{{with .Repository}} +
    +
    +
    +
    + {{$avatar := (repoAvatar . 32 "gt-mr-3")}} + {{if $avatar}} + {{$avatar}} + {{else}} + {{template "repo/icon" .}} + {{end}} + {{.Owner.Name}} +
    /
    + {{.Name}} +
    + {{if .IsTemplate}} + {{if .IsPrivate}} + {{$.locale.Tr "repo.desc.private_template"}} + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.internal_template"}} + {{end}} + {{end}} + {{else}} + {{if .IsPrivate}} + {{$.locale.Tr "repo.desc.private"}} + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{$.locale.Tr "repo.desc.internal"}} + {{end}} + {{end}} + {{end}} + {{if .IsArchived}} + {{$.locale.Tr "repo.desc.archived"}} + {{end}} +
    + {{if $.EnableFeed}} + {{svg "octicon-rss" 18}} + {{end}} +
    + {{if $.PullMirror}} + {{$address := MirrorRemoteAddress $.Context . $.PullMirror.GetRemoteName false}} +
    {{$.locale.Tr "repo.mirror_from"}} {{$address.Address}}
    + {{end}} + {{if .IsFork}}
    {{$.locale.Tr "repo.forked_from"}} {{.BaseRepo.FullName}}
    {{end}} + {{if .IsGenerated}}
    {{$.locale.Tr "repo.generated_from"}} {{.TemplateRepo.FullName}}
    {{end}} +
    + {{if not (or .IsBeingCreated .IsBroken)}} +
    + {{if $.RepoTransfer}} +
    + {{$.CsrfTokenHtml}} +
    + +
    +
    +
    + {{$.CsrfTokenHtml}} +
    + +
    +
    + {{end}} +
    + {{$.CsrfTokenHtml}} +
    + + + {{CountFmt .NumWatches}} + +
    +
    + {{if not $.DisableStars}} +
    + {{$.CsrfTokenHtml}} +
    + + + {{CountFmt .NumStars}} + +
    +
    + {{end}} + {{if and (not .IsEmpty) ($.Permission.CanRead $.UnitTypeCode)}} +
    + + {{svg "octicon-repo-forked"}}{{$.locale.Tr "repo.fork"}} + + + + {{CountFmt .NumForks}} + +
    + {{end}} +
    + {{end}} +
    +
    +{{end}} +
    + {{if not (or .Repository.IsBeingCreated .Repository.IsBroken)}} + + {{else if .Permission.IsAdmin}} + + {{end}} +
    +
    +
    diff --git a/src/templates/repo/home.tmpl b/src/templates/repo/home.tmpl new file mode 100644 index 0000000..8589574 --- /dev/null +++ b/src/templates/repo/home.tmpl @@ -0,0 +1,164 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} + {{if and (not .HideRepoInfo) (not .IsBlame)}} +
    +
    + {{$description := .Repository.DescriptionHTML $.Context}} + {{if $description}}{{$description}}{{else if .IsRepositoryAdmin}}{{.locale.Tr "repo.no_desc"}}{{end}} + {{.Repository.Website}} +
    + {{if .RepoSearchEnabled}} + + {{end}} +
    +
    + {{range .Topics}}{{.Name}}{{end}} + {{if and .Permission.IsAdmin (not .Repository.IsArchived)}}{{end}} +
    + {{end}} + {{if and .Permission.IsAdmin (not .Repository.IsArchived)}} +
    +
    + +
    +
    + + +
    +
    + {{end}} + {{if .Repository.IsArchived}} +
    + {{if .Repository.ArchivedUnix.IsZero}} + {{.locale.Tr "repo.archive.title"}} + {{else}} + {{.locale.Tr "repo.archive.title_date" (DateTime "long" .Repository.ArchivedUnix) | Safe}} + {{end}} +
    + {{end}} + {{template "repo/sub_menu" .}} +
    +
    + {{template "repo/branch_dropdown" dict "root" . "ContainerClasses" "gt-mr-2"}} + {{if and .CanCompareOrPull .IsViewBranch (not .Repository.IsArchived)}} + {{$cmpBranch := ""}} + {{if ne .Repository.ID .BaseRepo.ID}} + {{$cmpBranch = printf "%s/%s:" (.Repository.OwnerName|PathEscape) (.Repository.Name|PathEscape)}} + {{end}} + {{$cmpBranch = printf "%s%s" $cmpBranch (.BranchName|PathEscapeSegments)}} + {{$compareLink := printf "%s/compare/%s...%s" .BaseRepo.Link (.BaseRepo.DefaultBranch|PathEscapeSegments) $cmpBranch}} + + {{svg "octicon-git-pull-request"}} + + {{end}} + + {{$n := len .TreeNames}} + {{$l := Eval $n "-" 1}} + {{if eq $n 0}} + {{.locale.Tr "repo.find_file.go_to_file"}} + {{end}} + + {{if and .CanWriteCode .IsViewBranch (not .Repository.IsArchived) (not .IsViewFile)}} + + {{end}} + + {{if and (eq $n 0) (.Repository.IsTemplate)}} + + {{.locale.Tr "repo.use_template"}} + + {{end}} + {{if ne $n 0}} + + {{StringUtils.EllipsisString .Repository.Name 30}} + {{- range $i, $v := .TreeNames -}} + / + {{- if eq $i $l -}} + {{StringUtils.EllipsisString $v 30}} + {{- else -}} + {{$p := index $.Paths $i}}{{StringUtils.EllipsisString $v 30}} + {{- end -}} + {{- end -}} + + {{end}} +
    +
    + + {{if eq $n 0}} +
    + {{template "repo/clone_buttons" .}} + + {{template "repo/clone_script" .}}{{/* the script will update `.js-clone-url` and related elements */}} +
    + {{template "repo/cite/cite_modal" .}} + {{end}} + {{if and (ne $n 0) (not .IsViewFile) (not .IsBlame)}} + + {{svg "octicon-history" 16 "gt-mr-3"}}{{.locale.Tr "repo.file_history"}} + + {{end}} +
    +
    + {{if .IsViewFile}} + {{template "repo/view_file" .}} + {{else if .IsBlame}} + {{template "repo/blame" .}} + {{else}} + {{template "repo/view_list" .}} + {{end}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/icon.tmpl b/src/templates/repo/icon.tmpl new file mode 100644 index 0000000..e956745 --- /dev/null +++ b/src/templates/repo/icon.tmpl @@ -0,0 +1,15 @@ +
    + {{if $.IsTemplate}} + {{svg "octicon-repo-template" 32}} + {{else}} + {{if $.IsPrivate}} + {{svg "octicon-lock" 32}} + {{else if $.IsMirror}} + {{svg "octicon-mirror" 32}} + {{else if $.IsFork}} + {{svg "octicon-repo-forked" 32}} + {{else}} + {{svg "octicon-repo" 32}} + {{end}} + {{end}} +
    diff --git a/src/templates/repo/issue/branch_selector_field.tmpl b/src/templates/repo/issue/branch_selector_field.tmpl new file mode 100644 index 0000000..2577a0f --- /dev/null +++ b/src/templates/repo/issue/branch_selector_field.tmpl @@ -0,0 +1,54 @@ +{{if and (not .Issue.IsPull) (not .PageIsComparePull)}} + + +
    + {{$.CsrfTokenHtml}} +
    + + + +
    +{{end}} diff --git a/src/templates/repo/issue/choose.tmpl b/src/templates/repo/issue/choose.tmpl new file mode 100644 index 0000000..b531645 --- /dev/null +++ b/src/templates/repo/issue/choose.tmpl @@ -0,0 +1,59 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} + +
    + {{range .IssueTemplates}} +
    +
    +
    + {{.Name | RenderEmojiPlain}} +
    {{.About | RenderEmojiPlain}} +
    + +
    +
    + {{end}} + {{range .IssueConfig.ContactLinks}} +
    +
    +
    + {{.Name | RenderEmojiPlain}} +
    {{.About | RenderEmojiPlain}} +
    + +
    +
    + {{end}} + {{if .IssueConfig.BlankIssuesEnabled}} +
    +
    +
    + {{.locale.Tr "repo.issues.choose.blank"}} +
    {{.locale.Tr "repo.issues.choose.blank_about"}} +
    + +
    +
    + {{end}} + {{- if .IssueConfigError}}{{/* normal warning flash makes problems here*/}} +
    +
    +
    {{.locale.Tr "repo.issues.choose.invalid_config"}}
    + {{.IssueConfigError}}
    +
    +
    + {{end}} +
    + +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/comment_tab.tmpl b/src/templates/repo/issue/comment_tab.tmpl new file mode 100644 index 0000000..c40e6dd --- /dev/null +++ b/src/templates/repo/issue/comment_tab.tmpl @@ -0,0 +1,22 @@ +{{$textareaContent := .BodyQuery}} +{{if not $textareaContent}}{{$textareaContent = .IssueTemplate}}{{end}} +{{if not $textareaContent}}{{$textareaContent = .PullRequestTemplate}}{{end}} +{{if not $textareaContent}}{{$textareaContent = .content}}{{end}} + +
    + {{template "shared/combomarkdowneditor" (dict + "locale" $.locale + "MarkdownPreviewUrl" (print .Repository.Link "/markup") + "MarkdownPreviewContext" .RepoLink + "TextareaName" "content" + "TextareaContent" $textareaContent + "TextareaPlaceholder" ($.locale.Tr "repo.diff.comment.placeholder") + "DropzoneParentContainer" "form, .ui.form" + )}} +
    + +{{if .IsAttachmentEnabled}} +
    + {{template "repo/upload" .}} +
    +{{end}} diff --git a/src/templates/repo/issue/fields/checkboxes.tmpl b/src/templates/repo/issue/fields/checkboxes.tmpl new file mode 100644 index 0000000..80835b6 --- /dev/null +++ b/src/templates/repo/issue/fields/checkboxes.tmpl @@ -0,0 +1,12 @@ +
    + {{template "repo/issue/fields/header" .}} + {{$field := .}} + {{range $i, $opt := .item.Attributes.options}} +
    +
    + + +
    +
    + {{end}} +
    diff --git a/src/templates/repo/issue/fields/dropdown.tmpl b/src/templates/repo/issue/fields/dropdown.tmpl new file mode 100644 index 0000000..23aa373 --- /dev/null +++ b/src/templates/repo/issue/fields/dropdown.tmpl @@ -0,0 +1,17 @@ +
    + {{template "repo/issue/fields/header" .}} + {{/* FIXME: required validation */}} + +
    diff --git a/src/templates/repo/issue/fields/header.tmpl b/src/templates/repo/issue/fields/header.tmpl new file mode 100644 index 0000000..6034fed --- /dev/null +++ b/src/templates/repo/issue/fields/header.tmpl @@ -0,0 +1,6 @@ +{{if .item.Attributes.label}} +

    {{.item.Attributes.label}}{{if .item.Validations.required}}{{end}}

    +{{end}} +{{if .item.Attributes.description}} + {{RenderMarkdownToHtml .Context .item.Attributes.description}} +{{end}} diff --git a/src/templates/repo/issue/fields/input.tmpl b/src/templates/repo/issue/fields/input.tmpl new file mode 100644 index 0000000..3fc8a86 --- /dev/null +++ b/src/templates/repo/issue/fields/input.tmpl @@ -0,0 +1,4 @@ +
    + {{template "repo/issue/fields/header" .}} + +
    diff --git a/src/templates/repo/issue/fields/markdown.tmpl b/src/templates/repo/issue/fields/markdown.tmpl new file mode 100644 index 0000000..fd5b6af --- /dev/null +++ b/src/templates/repo/issue/fields/markdown.tmpl @@ -0,0 +1,3 @@ +
    +
    {{RenderMarkdownToHtml .Context .item.Attributes.value}}
    +
    diff --git a/src/templates/repo/issue/fields/textarea.tmpl b/src/templates/repo/issue/fields/textarea.tmpl new file mode 100644 index 0000000..49d51eb --- /dev/null +++ b/src/templates/repo/issue/fields/textarea.tmpl @@ -0,0 +1,25 @@ +{{$useMarkdownEditor := not .item.Attributes.render}} +
    + {{template "repo/issue/fields/header" .}} + + {{/* the real form element to provide the value */}} + + + {{if $useMarkdownEditor}} + {{template "shared/combomarkdowneditor" (dict + "locale" .root.locale + "ContainerClasses" "gt-hidden" + "MarkdownPreviewUrl" (print .root.RepoLink "/markup") + "MarkdownPreviewContext" .root.RepoLink + "TextareaContent" .item.Attributes.value + "TextareaPlaceholder" .item.Attributes.placeholder + "DropzoneParentContainer" ".combo-editor-dropzone" + )}} + + {{if .root.IsAttachmentEnabled}} +
    + {{template "repo/upload" .root}} +
    + {{end}} + {{end}} +
    diff --git a/src/templates/repo/issue/label_precolors.tmpl b/src/templates/repo/issue/label_precolors.tmpl new file mode 100644 index 0000000..555595f --- /dev/null +++ b/src/templates/repo/issue/label_precolors.tmpl @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/templates/repo/issue/labels.tmpl b/src/templates/repo/issue/labels.tmpl new file mode 100644 index 0000000..a122333 --- /dev/null +++ b/src/templates/repo/issue/labels.tmpl @@ -0,0 +1,25 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + + {{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}} + {{template "repo/issue/labels/label_new" .}} + {{end}} + {{template "base/alert" .}} + {{template "repo/issue/labels/label_list" .}} +
    +
    + +{{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}} +{{template "repo/issue/labels/edit_delete_label" .}} +{{end}} + +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/labels/edit_delete_label.tmpl b/src/templates/repo/issue/labels/edit_delete_label.tmpl new file mode 100644 index 0000000..b4eb6be --- /dev/null +++ b/src/templates/repo/issue/labels/edit_delete_label.tmpl @@ -0,0 +1,64 @@ + + + diff --git a/src/templates/repo/issue/labels/label.tmpl b/src/templates/repo/issue/labels/label.tmpl new file mode 100644 index 0000000..0101628 --- /dev/null +++ b/src/templates/repo/issue/labels/label.tmpl @@ -0,0 +1,7 @@ + + {{RenderLabel $.Context .label}} + diff --git a/src/templates/repo/issue/labels/label_list.tmpl b/src/templates/repo/issue/labels/label_list.tmpl new file mode 100644 index 0000000..325efd1 --- /dev/null +++ b/src/templates/repo/issue/labels/label_list.tmpl @@ -0,0 +1,83 @@ +

    + {{.locale.Tr "repo.issues.label_count" .NumLabels}} + +

    + +
    + {{if and (not $.PageIsOrgSettingsLabels) (or $.CanWriteIssues $.CanWritePulls) (eq .NumLabels 0) (not $.Repository.IsArchived)}} + {{template "repo/issue/labels/label_load_template" .}} +
    + {{else if and ($.PageIsOrgSettingsLabels) (eq .NumLabels 0)}} + {{template "repo/issue/labels/label_load_template" .}} +
    + {{end}} + + +
    diff --git a/src/templates/repo/issue/labels/label_load_template.tmpl b/src/templates/repo/issue/labels/label_load_template.tmpl new file mode 100644 index 0000000..d883953 --- /dev/null +++ b/src/templates/repo/issue/labels/label_load_template.tmpl @@ -0,0 +1,24 @@ +
    +
    +
    +

    {{.locale.Tr "repo.issues.label_templates.info"}}

    +
    +
    + {{.CsrfTokenHtml}} +
    + +
    + +
    +
    +
    +
    diff --git a/src/templates/repo/issue/labels/label_new.tmpl b/src/templates/repo/issue/labels/label_new.tmpl new file mode 100644 index 0000000..41dced4 --- /dev/null +++ b/src/templates/repo/issue/labels/label_new.tmpl @@ -0,0 +1,50 @@ + diff --git a/src/templates/repo/issue/labels/labels_selector_field.tmpl b/src/templates/repo/issue/labels/labels_selector_field.tmpl new file mode 100644 index 0000000..05580ea --- /dev/null +++ b/src/templates/repo/issue/labels/labels_selector_field.tmpl @@ -0,0 +1,42 @@ + diff --git a/src/templates/repo/issue/labels/labels_sidebar.tmpl b/src/templates/repo/issue/labels/labels_sidebar.tmpl new file mode 100644 index 0000000..89fe26b --- /dev/null +++ b/src/templates/repo/issue/labels/labels_sidebar.tmpl @@ -0,0 +1,11 @@ +
    + {{.root.locale.Tr "repo.issues.new.no_label"}} + + {{range .root.Labels}} + {{template "repo/issue/labels/label" dict "root" $.root "label" .}} + {{end}} + {{range .root.OrgLabels}} + {{template "repo/issue/labels/label" dict "root" $.root "label" .}} + {{end}} + +
    diff --git a/src/templates/repo/issue/list.tmpl b/src/templates/repo/issue/list.tmpl new file mode 100644 index 0000000..023c325 --- /dev/null +++ b/src/templates/repo/issue/list.tmpl @@ -0,0 +1,406 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + + {{if .PinnedIssues}} +
    + {{range .PinnedIssues}} +
    + {{if eq $.Project.CardType 1}} +
    + {{range (index $.issuesAttachmentMap .ID)}} + {{.Name}} + {{end}} +
    + {{end}} +
    +
    +
    + {{template "shared/issueicon" .}} +
    + {{.Title | RenderEmoji $.Context | RenderCodeBlock}} + {{if $.IsRepoAdmin}} + + {{svg "octicon-x" 16}} + + {{end}} +
    +
    + + #{{.Index}} + {{$timeStr := TimeSinceUnix .GetLastEventTimestamp $.locale}} + {{if .OriginalAuthor}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}} + {{else if gt .Poster.ID 0}} + {{$.locale.Tr .GetLastEventLabel $timeStr (.Poster.HomeLink|Escape) (.Poster.GetDisplayName | Escape) | Safe}} + {{else}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.Poster.GetDisplayName | Escape) | Safe}} + {{end}} + +
    + {{- if .MilestoneID}} + + {{- end}} +
    + + {{if or .Labels .Assignees}} +
    + {{range .Labels}} + {{RenderLabel $.Context .}} + {{end}} +
    + {{range .Assignees}} + {{avatar $.Context . 28 "mini gt-mr-3"}} + {{end}} +
    +
    + {{end}} +
    + {{end}} +
    + {{end}} + +
    + {{template "repo/issue/navbar" .}} + {{template "repo/issue/search" .}} + {{if not .Repository.IsArchived}} + {{if .PageIsIssueList}} + {{.locale.Tr "repo.issues.new"}} + {{else}} + {{.locale.Tr "repo.pulls.new"}} + {{end}} + {{else}} + {{if not .PageIsIssueList}} + {{$.locale.Tr "action.compare_commits_general"}} + {{end}} + {{end}} +
    +
    +
    + {{if and ($.CanWriteIssuesOrPulls) (gt (len .Issues) 0)}} + + {{end}} + {{template "repo/issue/openclose" .}} +
    +
    + +
    +
    + +
    +
    + {{template "repo/issue/openclose" .}} +
    +
    + +
    +
    + {{template "shared/issuelist" dict "." . "listType" "repo"}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/milestone/select_menu.tmpl b/src/templates/repo/issue/milestone/select_menu.tmpl new file mode 100644 index 0000000..497313e --- /dev/null +++ b/src/templates/repo/issue/milestone/select_menu.tmpl @@ -0,0 +1,38 @@ +{{if or .OpenMilestones .ClosedMilestones}} + +
    +{{end}} +
    {{.locale.Tr "repo.issues.new.clear_milestone"}}
    +{{if and (not .OpenMilestones) (not .ClosedMilestones)}} +
    + {{.locale.Tr "repo.issues.new.no_items"}} +
    +{{else}} + {{if .OpenMilestones}} +
    +
    + {{.locale.Tr "repo.issues.new.open_milestone"}} +
    + {{range .OpenMilestones}} + + {{svg "octicon-milestone" 16 "gt-mr-2"}} + {{.Name}} + + {{end}} + {{end}} + {{if .ClosedMilestones}} +
    +
    + {{.locale.Tr "repo.issues.new.closed_milestone"}} +
    + {{range .ClosedMilestones}} + + {{svg "octicon-milestone" 16 "gt-mr-2"}} + {{.Name}} + + {{end}} + {{end}} +{{end}} diff --git a/src/templates/repo/issue/milestone_issues.tmpl b/src/templates/repo/issue/milestone_issues.tmpl new file mode 100644 index 0000000..3cd84d5 --- /dev/null +++ b/src/templates/repo/issue/milestone_issues.tmpl @@ -0,0 +1,205 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    +

    {{.Milestone.Name}}

    + {{if not .Repository.IsArchived}} +
    + {{if or .CanWriteIssues .CanWritePulls}} + {{if .Milestone.IsClosed}} + {{$.locale.Tr "repo.milestones.open"}} + + {{else}} + {{$.locale.Tr "repo.milestones.close"}} + + {{end}} + {{.locale.Tr "repo.milestones.edit"}} + {{end}} + {{.locale.Tr "repo.issues.new"}} +
    + {{end}} +
    + {{if .Milestone.RenderedContent}} +
    + {{.Milestone.RenderedContent|Str2html}} +
    + {{end}} +
    + +
    +
    + {{$closedDate:= TimeSinceUnix .Milestone.ClosedDateUnix $.locale}} + {{if .IsClosed}} + {{svg "octicon-clock"}} {{$.locale.Tr "repo.milestones.closed" $closedDate | Safe}} + {{else}} + + {{if .Milestone.DeadlineString}} + + {{svg "octicon-calendar"}} + {{DateTime "short" .Milestone.DeadlineString}} + + {{else}} + {{svg "octicon-calendar"}} + {{$.locale.Tr "repo.milestones.no_due_date"}} + {{end}} + {{end}} +
    +
    {{.locale.Tr "repo.milestones.completeness" .Milestone.Completeness | Safe}}
    +
    +
    +
    + +
    +
    + {{template "repo/issue/openclose" .}} +
    +
    + +
    +
    + +
    +
    + {{template "repo/issue/openclose" .}} +
    +
    + +
    +
    + {{template "shared/issuelist" dict "." . "listType" "milestone"}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/milestone_new.tmpl b/src/templates/repo/issue/milestone_new.tmpl new file mode 100644 index 0000000..ac34fb0 --- /dev/null +++ b/src/templates/repo/issue/milestone_new.tmpl @@ -0,0 +1,63 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + +
    +

    + {{if .PageIsEditMilestone}} + {{.locale.Tr "repo.milestones.edit"}} +
    {{.locale.Tr "repo.milestones.edit_subheader"}}
    + {{else}} + {{.locale.Tr "repo.milestones.new"}} +
    {{.locale.Tr "repo.milestones.new_subheader"}}
    + {{end}} +

    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + {{if .PageIsEditMilestone}} + + {{.locale.Tr "repo.milestones.cancel"}} + + + {{else}} + + {{end}} +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/milestones.tmpl b/src/templates/repo/issue/milestones.tmpl new file mode 100644 index 0000000..c23da11 --- /dev/null +++ b/src/templates/repo/issue/milestones.tmpl @@ -0,0 +1,146 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + + {{template "base/alert" .}} + + + + +
    + {{range .Milestones}} +
  • +
    +

    + {{svg "octicon-milestone" 16}} + {{.Name}} +

    +
    + {{.Completeness}}% + +
    +
    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{$.locale.PrettyNumber .NumOpenIssues}} {{$.locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{$.locale.PrettyNumber .NumClosedIssues}} {{$.locale.Tr "repo.issues.closed_title"}} +
    + {{if .TotalTrackedTime}} +
    + {{svg "octicon-clock"}} + {{.TotalTrackedTime|Sec2Time}} +
    + {{end}} + {{if .UpdatedUnix}} +
    + {{svg "octicon-clock"}} + {{$.locale.Tr "repo.milestones.update_ago" (TimeSinceUnix .UpdatedUnix $.locale) | Safe}} +
    + {{end}} +
    + {{if .IsClosed}} + {{$closedDate:= TimeSinceUnix .ClosedDateUnix $.locale}} + {{svg "octicon-clock" 14}} + {{$.locale.Tr "repo.milestones.closed" $closedDate | Safe}} + {{else}} + {{if .DeadlineString}} + + {{svg "octicon-calendar" 14}} + {{DateTime "short" .DeadlineString}} + + {{else}} + {{svg "octicon-calendar" 14}} + {{$.locale.Tr "repo.milestones.no_due_date"}} + {{end}} + {{end}} +
    +
    + {{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}} + + {{end}} +
    + {{if .Content}} +
    + {{.RenderedContent|Str2html}} +
    + {{end}} +
  • + {{end}} + + {{template "base/paginate" .}} +
    +
    +
    + +{{if or .CanWriteIssues .CanWritePulls}} + +{{end}} +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/navbar.tmpl b/src/templates/repo/issue/navbar.tmpl new file mode 100644 index 0000000..2f1ea7a --- /dev/null +++ b/src/templates/repo/issue/navbar.tmpl @@ -0,0 +1,4 @@ + diff --git a/src/templates/repo/issue/new.tmpl b/src/templates/repo/issue/new.tmpl new file mode 100644 index 0000000..780e874 --- /dev/null +++ b/src/templates/repo/issue/new.tmpl @@ -0,0 +1,16 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{if .Flash.WarningMsg}} + {{/* + There's already an importing of alert.tmpl in new_form.tmpl, + but only the negative message will be displayed within forms for some reasons, see semantic.css:10659. + To avoid repeated negative messages, the importing here if for .Flash.WarningMsg only. + */}} + {{template "base/alert" .}} + {{end}} + {{template "repo/issue/new_form" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/new_form.tmpl b/src/templates/repo/issue/new_form.tmpl new file mode 100644 index 0000000..00da68e --- /dev/null +++ b/src/templates/repo/issue/new_form.tmpl @@ -0,0 +1,190 @@ +
    + {{.CsrfTokenHtml}} + {{if .Flash}} +
    + {{template "base/alert" .}} +
    + {{end}} +
    +
    +
    + {{avatar $.Context .SignedUser 40}} +
    +
    + + {{if .PageIsComparePull}} +
    {{.locale.Tr "repo.pulls.title_wip_desc" (index .PullRequestWorkInProgressPrefixes 0| Escape) | Safe}}
    + {{end}} +
    + {{if .Fields}} + + {{range .Fields}} + {{if eq .Type "input"}} + {{template "repo/issue/fields/input" dict "Context" $.Context "item" .}} + {{else if eq .Type "markdown"}} + {{template "repo/issue/fields/markdown" dict "Context" $.Context "item" .}} + {{else if eq .Type "textarea"}} + {{template "repo/issue/fields/textarea" dict "Context" $.Context "item" . "root" $}} + {{else if eq .Type "dropdown"}} + {{template "repo/issue/fields/dropdown" dict "Context" $.Context "item" .}} + {{else if eq .Type "checkboxes"}} + {{template "repo/issue/fields/checkboxes" dict "Context" $.Context "item" .}} + {{end}} + {{end}} + {{else}} + {{template "repo/issue/comment_tab" .}} + {{end}} +
    + +
    +
    +
    +
    +
    + +
    + {{template "repo/issue/branch_selector_field" .}} + + + {{template "repo/issue/labels/labels_selector_field" .}} + {{template "repo/issue/labels/labels_sidebar" dict "root" $}} + +
    + + + +
    + {{.locale.Tr "repo.issues.new.no_milestone"}} + +
    + + {{if .IsProjectsEnabled}} +
    + + + +
    + {{.locale.Tr "repo.issues.new.no_projects"}} + +
    + {{end}} +
    + + +
    + + {{.locale.Tr "repo.issues.new.no_assignees"}} + + {{range .Assignees}} + + {{avatar $.Context . 28 "gt-mr-3 gt-vm"}}{{.GetDisplayName}} + + {{end}} +
    + {{if and .PageIsComparePull (not (eq .HeadRepo.FullName .BaseCompareRepo.FullName)) .CanWriteToHeadRepo}} +
    +
    +
    + + +
    +
    + {{end}} +
    + +
    diff --git a/src/templates/repo/issue/openclose.tmpl b/src/templates/repo/issue/openclose.tmpl new file mode 100644 index 0000000..a5916ed --- /dev/null +++ b/src/templates/repo/issue/openclose.tmpl @@ -0,0 +1,14 @@ + diff --git a/src/templates/repo/issue/search.tmpl b/src/templates/repo/issue/search.tmpl new file mode 100644 index 0000000..1322468 --- /dev/null +++ b/src/templates/repo/issue/search.tmpl @@ -0,0 +1,16 @@ + diff --git a/src/templates/repo/issue/view.tmpl b/src/templates/repo/issue/view.tmpl new file mode 100644 index 0000000..1ef9e73 --- /dev/null +++ b/src/templates/repo/issue/view.tmpl @@ -0,0 +1,12 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "repo/issue/view_title" .}} + {{if .Issue.IsPull}} + {{template "repo/pulls/tab_menu" .}} + {{end}} + {{template "repo/issue/view_content" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/issue/view_content.tmpl b/src/templates/repo/issue/view_content.tmpl new file mode 100644 index 0000000..e451db1 --- /dev/null +++ b/src/templates/repo/issue/view_content.tmpl @@ -0,0 +1,200 @@ +
    + + + + + + + + {{$createdStr:= TimeSinceUnix .Issue.CreatedUnix $.locale}} +
    +
    +
    + {{if .Issue.OriginalAuthor}} + + + + {{else}} + + {{avatar $.Context .Issue.Poster 40}} + + {{end}} +
    +
    +
    + {{if .Issue.OriginalAuthor}} + + {{svg (MigrationIcon .Repository.GetOriginalURLHostname)}} + {{.Issue.OriginalAuthor}} + + + {{.locale.Tr "repo.issues.commented_at" (.Issue.HashTag|Escape) $createdStr | Safe}} + + + {{if .Repository.OriginalURL}} ({{$.locale.Tr "repo.migrated_from" (.Repository.OriginalURL|Escape) (.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}} + + {{else}} + + {{avatar $.Context .Issue.Poster 24}} + + + {{template "shared/user/authorlink" .Issue.Poster}} + {{.locale.Tr "repo.issues.commented_at" (.Issue.HashTag|Escape) $createdStr | Safe}} + + {{end}} +
    +
    + {{if gt .Issue.ShowRole 0}} + {{if (.Issue.ShowRole.HasRole "Writer")}} +
    + {{$.locale.Tr "repo.issues.collaborator"}} +
    + {{end}} + {{if (.Issue.ShowRole.HasRole "Owner")}} +
    + {{$.locale.Tr "repo.issues.owner"}} +
    + {{end}} + {{end}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index)}} + {{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" .Issue "delete" false "issue" true "diff" false "IsCommentPoster" $.IsIssuePoster}} + {{end}} +
    +
    +
    +
    + {{if .Issue.RenderedContent}} + {{.Issue.RenderedContent|Str2html}} + {{else}} + {{.locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Issue.Content}}
    +
    + {{if .Issue.Attachments}} + {{template "repo/issue/view_content/attachments" dict "ctxData" $ "Attachments" .Issue.Attachments "Content" .Issue.RenderedContent}} + {{end}} +
    + {{$reactions := .Issue.Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index) "Reactions" $reactions}} + {{end}} +
    +
    + + {{template "repo/issue/view_content/comments" .}} + + {{if and .Issue.IsPull (not $.Repository.IsArchived)}} + {{template "repo/issue/view_content/pull".}} + {{end}} + + {{if .IsSigned}} + {{if and (or .IsRepoAdmin .HasIssuesOrPullsWritePermission (not .Issue.IsLocked)) (not .Repository.IsArchived)}} +
    + + {{avatar $.Context .SignedUser 40}} + +
    +
    + {{template "repo/issue/comment_tab" .}} + {{.CsrfTokenHtml}} + + +
    +
    +
    + {{else if .Repository.IsArchived}} +
    + {{if .Issue.IsPull}} + {{.locale.Tr "repo.archive.pull.nocomment"}} + {{else}} + {{.locale.Tr "repo.archive.issue.nocomment"}} + {{end}} +
    + {{end}} + {{else}} {{/* not .IsSigned */}} + {{if .Repository.IsArchived}} +
    + {{if .Issue.IsPull}} + {{.locale.Tr "repo.archive.pull.nocomment"}} + {{else}} + {{.locale.Tr "repo.archive.issue.nocomment"}} + {{end}} +
    + {{else}} +
    + {{.locale.Tr "repo.issues.sign_in_require_desc" (.SignInLink|Escape) | Safe}} +
    + {{end}} + {{end}}{{/* end if: .IsSigned */}} +
    +
    + + {{template "repo/issue/view_content/sidebar" .}} +
    + + + +{{template "repo/issue/view_content/reference_issue_dialog" .}} + +
    + {{.locale.Tr "repo.issues.no_content"}} +
    + + diff --git a/src/templates/repo/issue/view_content/add_reaction.tmpl b/src/templates/repo/issue/view_content/add_reaction.tmpl new file mode 100644 index 0000000..37931f2 --- /dev/null +++ b/src/templates/repo/issue/view_content/add_reaction.tmpl @@ -0,0 +1,12 @@ +{{if .ctxData.IsSigned}} + +{{end}} diff --git a/src/templates/repo/issue/view_content/attachments.tmpl b/src/templates/repo/issue/view_content/attachments.tmpl new file mode 100644 index 0000000..f342340 --- /dev/null +++ b/src/templates/repo/issue/view_content/attachments.tmpl @@ -0,0 +1,42 @@ +
    + {{if .Attachments}} +
    + {{end}} + {{$hasThumbnails := false}} + {{- range .Attachments -}} + + {{end -}} + + {{if $hasThumbnails}} +
    +
    + {{- range .Attachments -}} + {{if FilenameIsImage .Name}} + {{if not (StringUtils.Contains $.Content .UUID)}} + + {{.Name}} + + {{end}} + {{end}} + {{end -}} +
    + {{end}} + +
    diff --git a/src/templates/repo/issue/view_content/comments.tmpl b/src/templates/repo/issue/view_content/comments.tmpl new file mode 100644 index 0000000..0e3fccd --- /dev/null +++ b/src/templates/repo/issue/view_content/comments.tmpl @@ -0,0 +1,843 @@ +{{template "base/alert"}} +{{range .Issue.Comments}} + {{if call $.ShouldShowCommentType .Type}} + {{$createdStr:= TimeSinceUnix .CreatedUnix $.locale}} + + + {{if eq .Type 0}} +
    + {{if .OriginalAuthor}} + + + + {{else}} + + {{avatar $.Context .Poster 40}} + + {{end}} +
    +
    +
    + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + + {{$.locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdStr | Safe}} {{if $.Repository.OriginalURL}} + + + ({{$.locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}} + + {{else}} + {{if gt .Poster.ID 0}} + + {{avatar $.Context .Poster 24}} + + {{end}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdStr | Safe}} + + {{end}} +
    +
    + {{if (.ShowRole.HasRole "Poster")}} +
    + {{$.locale.Tr "repo.issues.poster"}} +
    + {{end}} + {{if (.ShowRole.HasRole "Writer")}} +
    + {{$.locale.Tr "repo.issues.collaborator"}} +
    + {{end}} + {{if (.ShowRole.HasRole "Owner")}} +
    + {{$.locale.Tr "repo.issues.owner"}} +
    + {{end}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} + {{end}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent|Str2html}} + {{else}} + {{$.locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    + {{if .Attachments}} + {{template "repo/issue/view_content/attachments" dict "ctxData" $ "Attachments" .Attachments "Content" .RenderedContent}} + {{end}} +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    + {{else if eq .Type 1}} +
    + {{svg "octicon-dot-fill"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if .Issue.IsPull}} + {{$.locale.Tr "repo.pulls.reopened_at" .EventTag $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.reopened_at" .EventTag $createdStr | Safe}} + {{end}} + +
    + {{else if eq .Type 2}} +
    + {{svg "octicon-circle-slash"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if .Issue.IsPull}} + {{$.locale.Tr "repo.pulls.closed_at" .EventTag $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.closed_at" .EventTag $createdStr | Safe}} + {{end}} + +
    + {{else if eq .Type 28}} +
    + {{svg "octicon-git-merge"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$link := printf "%s/commit/%s" $.Repository.Link ($.Issue.PullRequest.MergedCommitID|PathEscape)}} + {{if eq $.Issue.PullRequest.Status 3}} + {{$.locale.Tr "repo.issues.comment_manually_pull_merged_at" (printf "%[2]s" ($link|Escape) (ShortSha $.Issue.PullRequest.MergedCommitID)) (printf "%[1]s" ($.BaseTarget|Escape)) $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.comment_pull_merged_at" (printf "%[2]s" ($link|Escape) (ShortSha $.Issue.PullRequest.MergedCommitID)) (printf "%[1]s" ($.BaseTarget|Escape)) $createdStr | Safe}} + {{end}} + +
    + {{else if eq .Type 3 5 6}} + {{$refFrom:= ""}} + {{if ne .RefRepoID .Issue.RepoID}} + {{$refFrom = $.locale.Tr "repo.issues.ref_from" (.RefRepo.FullName|Escape)}} + {{end}} + {{$refTr := "repo.issues.ref_issue_from"}} + {{if .Issue.IsPull}} + {{$refTr = "repo.issues.ref_pull_from"}} + {{else if eq .RefAction 1}} + {{$refTr = "repo.issues.ref_closing_from"}} + {{else if eq .RefAction 2}} + {{$refTr = "repo.issues.ref_reopening_from"}} + {{end}} + {{$createdStr:= TimeSinceUnix .CreatedUnix $.locale}} +
    + {{svg "octicon-bookmark"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + {{if eq .RefAction 3}}{{end}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr $refTr (.EventTag|Escape) $createdStr (.RefCommentLink|Escape) $refFrom | Safe}} + + {{if eq .RefAction 3}}{{end}} + + +
    + {{else if eq .Type 4}} +
    + {{svg "octicon-bookmark"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.commit_ref_at" .EventTag $createdStr | Safe}} + +
    + {{svg "octicon-git-commit"}} + {{.Content | Str2html}} +
    +
    + {{else if eq .Type 7}} + {{if or .AddedLabels .RemovedLabels}} +
    + {{svg "octicon-tag"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if and .AddedLabels (not .RemovedLabels)}} + {{$.locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (RenderLabels $.Context .AddedLabels $.RepoLink) $createdStr | Safe}} + {{else if and (not .AddedLabels) .RemovedLabels}} + {{$.locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (RenderLabels $.Context .RemovedLabels $.RepoLink) $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.add_remove_labels" (RenderLabels $.Context .AddedLabels $.RepoLink) (RenderLabels $.Context .RemovedLabels $.RepoLink) $createdStr | Safe}} + {{end}} + +
    + {{end}} + {{else if eq .Type 8}} +
    + {{svg "octicon-milestone"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if gt .OldMilestoneID 0}}{{if gt .MilestoneID 0}}{{$.locale.Tr "repo.issues.change_milestone_at" (.OldMilestone.Name|Escape) (.Milestone.Name|Escape) $createdStr | Safe}}{{else}}{{$.locale.Tr "repo.issues.remove_milestone_at" (.OldMilestone.Name|Escape) $createdStr | Safe}}{{end}}{{else if gt .MilestoneID 0}}{{$.locale.Tr "repo.issues.add_milestone_at" (.Milestone.Name|Escape) $createdStr | Safe}}{{end}} + +
    + {{else if eq .Type 9}} +
    + {{svg "octicon-person"}} + {{if gt .AssigneeID 0}} + {{if .RemovedAssignee}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Assignee}} + + {{template "shared/user/authorlink" .Assignee}} + {{if eq .Poster.ID .Assignee.ID}} + {{$.locale.Tr "repo.issues.remove_self_assignment" $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.remove_assignee_at" (.Poster.GetDisplayName|Escape) $createdStr | Safe}} + {{end}} + + {{else}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Assignee}} + + {{template "shared/user/authorlink" .Assignee}} + {{if eq .Poster.ID .AssigneeID}} + {{$.locale.Tr "repo.issues.self_assign_at" $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.add_assignee_at" (.Poster.GetDisplayName|Escape) $createdStr | Safe}} + {{end}} + + {{end}} + {{end}} +
    + {{else if eq .Type 10}} +
    + {{svg "octicon-pencil"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.change_title_at" (.OldTitle|RenderEmoji $.Context) (.NewTitle|RenderEmoji $.Context) $createdStr | Safe}} + +
    + {{else if eq .Type 11}} +
    + {{svg "octicon-git-branch"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.delete_branch_at" (.OldRef|Escape) $createdStr | Safe}} + +
    + {{else if eq .Type 12}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.start_tracking_history" $createdStr | Safe}} + +
    + {{else if eq .Type 13}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.stop_tracking_history" $createdStr | Safe}} + + {{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}} +
    + {{svg "octicon-clock"}} + {{.Content}} +
    +
    + {{else if eq .Type 14}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.add_time_history" $createdStr | Safe}} + + {{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}} +
    + {{svg "octicon-clock"}} + {{.Content}} +
    +
    + {{else if eq .Type 15}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.cancel_tracking_history" $createdStr | Safe}} + +
    + {{else if eq .Type 16}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.due_date_added" (DateTime "long" .Content) $createdStr | Safe}} + +
    + {{else if eq .Type 17}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$parsedDeadline := StringUtils.Split .Content "|"}} + {{if eq (len $parsedDeadline) 2}} + {{$from := DateTime "long" (index $parsedDeadline 1)}} + {{$to := DateTime "long" (index $parsedDeadline 0)}} + {{$.locale.Tr "repo.issues.due_date_modified" $to $from $createdStr | Safe}} + {{end}} + +
    + {{else if eq .Type 18}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.due_date_remove" (DateTime "long" .Content) $createdStr | Safe}} + +
    + {{else if eq .Type 19}} +
    + {{svg "octicon-package-dependents"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.dependency.added_dependency" $createdStr | Safe}} + + {{if .DependentIssue}} + + {{end}} +
    + {{else if eq .Type 20}} +
    + {{svg "octicon-package-dependents"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.dependency.removed_dependency" $createdStr | Safe}} + + {{if .DependentIssue}} + + {{end}} +
    + {{else if eq .Type 22}} +
    +
    + {{if .OriginalAuthor}} + {{else}} + {{/* Some timeline avatars need a offset to correctly allign with their speech + bubble. The condition depends on review type and for positive reviews whether + there is a comment element or not */}} + + {{avatar $.Context .Poster 40}} + + {{end}} + {{svg (printf "octicon-%s" .Review.Type.Icon)}} + + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + {{if $.Repository.OriginalURL}} + ({{$.locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}} + {{else}} + {{template "shared/user/authorlink" .Poster}} + {{end}} + + {{if eq .Review.Type 1}} + {{$.locale.Tr "repo.issues.review.approve" $createdStr | Safe}} + {{else if eq .Review.Type 2}} + {{$.locale.Tr "repo.issues.review.comment" $createdStr | Safe}} + {{else if eq .Review.Type 3}} + {{$.locale.Tr "repo.issues.review.reject" $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.review.comment" $createdStr | Safe}} + {{end}} + {{if .Review.Dismissed}} +
    {{$.locale.Tr "repo.issues.review.dismissed_label"}}
    + {{end}} +
    +
    + {{if or .Content .Attachments}} +
    +
    +
    +
    + {{if gt .Poster.ID 0}} + + {{avatar $.Context .Poster 24}} + + {{end}} + + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + {{if $.Repository.OriginalURL}} + ({{$.locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}} + {{else}} + {{template "shared/user/authorlink" .Poster}} + {{end}} + + {{$.locale.Tr "repo.issues.review.left_comment" | Safe}} + +
    +
    + {{if (.ShowRole.HasRole "Poster")}} +
    + {{$.locale.Tr "repo.issues.poster"}} +
    + {{end}} + {{if (.ShowRole.HasRole "Writer")}} +
    + {{$.locale.Tr "repo.issues.collaborator"}} +
    + {{end}} + {{if (.ShowRole.HasRole "Owner")}} +
    + {{$.locale.Tr "repo.issues.owner"}} +
    + {{end}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" false "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} + {{end}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent|Str2html}} + {{else}} + {{$.locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    + {{if .Attachments}} + {{template "repo/issue/view_content/attachments" dict "ctxData" $ "Attachments" .Attachments "Content" .RenderedContent}} + {{end}} +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    + {{end}} + + {{if .Review.CodeComments}} +
    + {{range $filename, $lines := .Review.CodeComments}} + {{range $line, $comms := $lines}} +
    +
    + {{$invalid := (index $comms 0).Invalidated}} + {{$resolved := (index $comms 0).IsResolved}} + {{$resolveDoer := (index $comms 0).ResolveDoer}} + {{$isNotPending := (not (eq (index $comms 0).Review.Type 0))}} +
    + {{$filename}} + {{if $invalid}} + + {{$.locale.Tr "repo.issues.review.outdated"}} + + {{end}} +
    +
    + {{if or $invalid $resolved}} + + + {{end}} +
    +
    + {{$diff := (CommentMustAsDiff (index $comms 0))}} + {{if $diff}} + {{$file := (index $diff.Files 0)}} +
    +
    +
    + + + {{template "repo/diff/section_unified" dict "file" $file "root" $}} + +
    +
    +
    +
    + {{end}} +
    +
    + {{range $comms}} + {{$createdSubStr:= TimeSinceUnix .CreatedUnix $.locale}} +
    +
    +
    +
    + {{if not .OriginalAuthor}} + + {{avatar $.Context .Poster 20}} + + {{end}} + + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + {{if $.Repository.OriginalURL}} + ({{$.locale.Tr "repo.migrated_from" ($.Repository.OriginalURL|Escape) ($.Repository.GetOriginalURLHostname|Escape) | Safe}}){{end}} + {{else}} + {{template "shared/user/authorlink" .Poster}} + {{end}} + {{$.locale.Tr "repo.issues.commented_at" (.HashTag|Escape) $createdSubStr | Safe}} + +
    +
    + {{if (.ShowRole.HasRole "Poster")}} +
    + {{$.locale.Tr "repo.issues.poster"}} +
    + {{end}} + {{if (.ShowRole.HasRole "Writer")}} +
    + {{$.locale.Tr "repo.issues.collaborator"}} +
    + {{end}} + {{if (.ShowRole.HasRole "Owner")}} +
    + {{$.locale.Tr "repo.issues.owner"}} +
    + {{end}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" true "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} + {{end}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent|Str2html}} + {{else}} + {{$.locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    + {{end}} +
    +
    +
    + {{if $resolved}} +
    + {{svg "octicon-check" 16 "gt-mr-2"}} + {{$resolveDoer.Name}} {{$.locale.Tr "repo.issues.review.resolved_by"}} +
    + {{end}} +
    +
    + {{if and $.CanMarkConversation $isNotPending}} + + {{end}} + {{if and $.SignedUserID (not $.Repository.IsArchived)}} + + {{end}} +
    +
    + {{template "repo/diff/comment_form_datahandler" dict "hidden" true "reply" (index $comms 0).ReviewID "root" $ "comment" (index $comms 0)}} +
    +
    + {{end}} + {{end}} +
    + {{end}} +
    + {{else if eq .Type 23}} +
    + {{svg "octicon-lock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + {{if .Content}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.lock_with_reason" .Content $createdStr | Safe}} + + {{else}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.lock_no_reason" $createdStr | Safe}} + + {{end}} +
    + {{else if eq .Type 24}} +
    + {{svg "octicon-key"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$.locale.Tr "repo.issues.unlock_comment" $createdStr | Safe}} + +
    + {{else if eq .Type 25}} +
    + {{svg "octicon-git-branch"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{.Poster.Name}} + {{$.locale.Tr "repo.pulls.change_target_branch_at" (.OldRef|Escape) (.NewRef|Escape) $createdStr | Safe}} + +
    + {{else if eq .Type 26}} +
    + {{svg "octicon-clock"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + + {{$.locale.Tr "repo.issues.del_time_history" $createdStr | Safe}} + +
    + {{svg "octicon-clock"}} + {{.Content}} +
    +
    + {{else if eq .Type 27}} +
    + {{svg "octicon-eye"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if (gt .AssigneeID 0)}} + {{if .RemovedAssignee}} + {{if eq .PosterID .AssigneeID}} + {{$.locale.Tr "repo.issues.review.remove_review_request_self" $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.review.remove_review_request" (.Assignee.GetDisplayName|Escape) $createdStr | Safe}} + {{end}} + {{else}} + {{$.locale.Tr "repo.issues.review.add_review_request" (.Assignee.GetDisplayName|Escape) $createdStr | Safe}} + {{end}} + {{else}} + + {{$teamName := "Ghost Team"}} + {{if .AssigneeTeam}} + {{$teamName = .AssigneeTeam.Name}} + {{end}} + {{if .RemovedAssignee}} + {{$.locale.Tr "repo.issues.review.remove_review_request" ($teamName|Escape) $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.review.add_review_request" ($teamName|Escape) $createdStr | Safe}} + {{end}} + {{end}} + +
    + {{else if and (eq .Type 29) (or (gt .CommitsNum 0) .IsForcePush)}} + + {{if and .Issue.IsClosed (gt .ID $.LatestCloseCommentID)}} + {{continue}} + {{end}} +
    + {{svg "octicon-repo-push"}} + + {{template "shared/user/authorlink" .Poster}} + {{if .IsForcePush}} + {{$.locale.Tr "repo.issues.force_push_codes" ($.Issue.PullRequest.HeadBranch|Escape) (ShortSha .OldCommit) (($.Issue.Repo.CommitLink .OldCommit)|Escape) (ShortSha .NewCommit) (($.Issue.Repo.CommitLink .NewCommit)|Escape) $createdStr | Safe}} + {{else}} + {{$.locale.TrN (len .Commits) "repo.issues.push_commit_1" "repo.issues.push_commits_n" (len .Commits) $createdStr | Safe}} + {{end}} + + {{if and .IsForcePush $.Issue.PullRequest.BaseRepo.Name}} + + {{$.locale.Tr "repo.issues.force_push_compare"}} + + {{end}} +
    + {{if not .IsForcePush}} + {{template "repo/commits_list_small" dict "comment" . "root" $}} + {{end}} + {{else if eq .Type 30}} + {{if not $.UnitProjectsGlobalDisabled}} +
    + {{svg "octicon-project"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{$oldProjectDisplayHtml := "Unknown Project"}} + {{if .OldProject}} + {{$trKey := printf "projects.type-%d.display_name" .OldProject.Type}} + {{$oldProjectDisplayHtml = printf `%s` ($.locale.Tr $trKey | Escape) (.OldProject.Title | Escape)}} + {{end}} + {{$newProjectDisplayHtml := "Unknown Project"}} + {{if .Project}} + {{$trKey := printf "projects.type-%d.display_name" .Project.Type}} + {{$newProjectDisplayHtml = printf `%s` ($.locale.Tr $trKey | Escape) (.Project.Title | Escape)}} + {{end}} + {{if and (gt .OldProjectID 0) (gt .ProjectID 0)}} + {{$.locale.Tr "repo.issues.change_project_at" $oldProjectDisplayHtml $newProjectDisplayHtml $createdStr | Safe}} + {{else if gt .OldProjectID 0}} + {{$.locale.Tr "repo.issues.remove_project_at" $oldProjectDisplayHtml $createdStr | Safe}} + {{else if gt .ProjectID 0}} + {{$.locale.Tr "repo.issues.add_project_at" $newProjectDisplayHtml $createdStr | Safe}} + {{end}} + +
    + {{end}} + {{else if eq .Type 32}} +
    +
    + + + + {{svg "octicon-x" 16}} + + {{template "shared/user/authorlink" .Poster}} + {{$reviewerName := ""}} + {{if eq .Review.OriginalAuthor ""}} + {{$reviewerName = .Review.Reviewer.Name}} + {{else}} + {{$reviewerName = .Review.OriginalAuthor}} + {{end}} + {{$.locale.Tr "repo.issues.review.dismissed" $reviewerName $createdStr | Safe}} + +
    + {{if .Content}} +
    +
    +
    + {{if gt .Poster.ID 0}} + + {{avatar $.Context .Poster 24}} + + {{end}} + + {{$.locale.Tr "action.review_dismissed_reason"}} + +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent|Str2html}} + {{else}} + {{$.locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    +
    +
    + {{end}} +
    + {{else if eq .Type 33}} +
    + {{svg "octicon-git-branch"}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if and .OldRef .NewRef}} + {{$.locale.Tr "repo.issues.change_ref_at" (.OldRef|Escape) (.NewRef|Escape) $createdStr | Safe}} + {{else if .OldRef}} + {{$.locale.Tr "repo.issues.remove_ref_at" (.OldRef|Escape) $createdStr | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.add_ref_at" (.NewRef|Escape) $createdStr | Safe}} + {{end}} + +
    + {{else if or (eq .Type 34) (eq .Type 35)}} +
    + {{svg "octicon-git-merge" 16}} + + {{template "shared/user/authorlink" .Poster}} + {{if eq .Type 34}}{{$.locale.Tr "repo.pulls.auto_merge_newly_scheduled_comment" $createdStr | Safe}} + {{else}}{{$.locale.Tr "repo.pulls.auto_merge_canceled_schedule_comment" $createdStr | Safe}}{{end}} + +
    + {{else if or (eq .Type 36) (eq .Type 37)}} +
    + {{svg "octicon-pin" 16}} + {{template "shared/user/avatarlink" dict "Context" $.Context "user" .Poster}} + + {{template "shared/user/authorlink" .Poster}} + {{if eq .Type 36}}{{$.locale.Tr "repo.issues.pin_comment" $createdStr | Safe}} + {{else}}{{$.locale.Tr "repo.issues.unpin_comment" $createdStr | Safe}}{{end}} + +
    + {{end}} + {{end}} +{{end}} diff --git a/src/templates/repo/issue/view_content/comments_delete_time.tmpl b/src/templates/repo/issue/view_content/comments_delete_time.tmpl new file mode 100644 index 0000000..cbfb114 --- /dev/null +++ b/src/templates/repo/issue/view_content/comments_delete_time.tmpl @@ -0,0 +1,18 @@ +{{if .comment.Time}} {{/* compatibility with time comments made before v1.14 */}} + {{if (not .comment.Time.Deleted)}} + {{if (or .ctxData.IsAdmin (and .ctxData.IsSigned (eq .ctxData.SignedUserID .comment.PosterID)))}} + + + + + {{end}} + {{end}} +{{end}} diff --git a/src/templates/repo/issue/view_content/context_menu.tmpl b/src/templates/repo/issue/view_content/context_menu.tmpl new file mode 100644 index 0000000..296668c --- /dev/null +++ b/src/templates/repo/issue/view_content/context_menu.tmpl @@ -0,0 +1,27 @@ +{{if .ctxData.IsSigned}} + +{{end}} diff --git a/src/templates/repo/issue/view_content/pull.tmpl b/src/templates/repo/issue/view_content/pull.tmpl new file mode 100644 index 0000000..fd395c0 --- /dev/null +++ b/src/templates/repo/issue/view_content/pull.tmpl @@ -0,0 +1,381 @@ +{{if and .Issue.PullRequest.HasMerged (not .IsPullBranchDeletable)}} +{{/* Then the merge box will not be displayed because this page already contains enough information */}} +{{else}} +
    + {{svg "octicon-git-merge" 40}} +
    + {{template "repo/pulls/status" .}} + {{$showGeneralMergeForm := false}} +
    + {{if .Issue.PullRequest.HasMerged}} + {{if .IsPullBranchDeletable}} +
    +
    +

    + {{$.locale.Tr "repo.pulls.merged_success"}} +

    + +
    +
    + +
    +
    + {{end}} + {{else if .Issue.IsClosed}} +
    +
    +

    {{$.locale.Tr "repo.pulls.closed"}}

    + +
    + {{if and .IsPullBranchDeletable (not .IsPullRequestBroken)}} +
    + +
    + {{end}} +
    + {{else if .IsPullFilesConflicted}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.files_conflicted"}} +
    +
      + {{range .ConflictedFiles}} +
    • {{.}}
    • + {{end}} +
    + {{else if .IsPullRequestBroken}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.data_broken"}} +
    + {{else if .IsPullWorkInProgress}} +
    +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.cannot_merge_work_in_progress"}} +
    + {{if or .HasIssuesOrPullsWritePermission .IsIssuePoster}} + + {{end}} +
    + {{template "repo/issue/view_content/update_branch_by_merge" $}} + {{else if .Issue.PullRequest.IsChecking}} +
    + {{svg "octicon-sync"}} + {{$.locale.Tr "repo.pulls.is_checking"}} +
    + {{else if .Issue.PullRequest.IsAncestor}} +
    + {{svg "octicon-alert"}} + {{$.locale.Tr "repo.pulls.is_ancestor"}} +
    + {{else if or .Issue.PullRequest.CanAutoMerge .Issue.PullRequest.IsEmpty}} + {{if .IsBlockedByApprovals}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}} +
    + {{else if .IsBlockedByRejection}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_rejection"}} +
    + {{else if .IsBlockedByOfficialReviewRequests}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_official_review_requests"}} +
    + {{else if .IsBlockedByOutdatedBranch}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_outdated_branch"}} +
    + {{else if .IsBlockedByChangedProtectedFiles}} +
    + {{svg "octicon-x"}} + {{$.locale.TrN $.ChangedProtectedFilesNum "repo.pulls.blocked_by_changed_protected_files_1" "repo.pulls.blocked_by_changed_protected_files_n" | Safe}} +
    +
      + {{range .ChangedProtectedFiles}} +
    • {{.}}
    • + {{end}} +
    + {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsError .RequiredStatusCheckState.IsFailure)}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.required_status_check_failed"}} +
    + {{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.required_status_check_missing"}} +
    + {{else if and .AllowMerge .RequireSigned (not .WillSign)}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.require_signed_wont_sign"}} +
    +
    + {{svg "octicon-unlock"}} + {{$.locale.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason)}} +
    + {{end}} + + {{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess))}} + + {{/* admin can merge without checks, writer can merge when checks succeed */}} + {{$canMergeNow := and (or $.IsRepoAdmin (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}} + {{/* admin and writer both can make an auto merge schedule */}} + + {{if $canMergeNow}} + {{if $notAllOverridableChecksOk}} +
    + {{svg "octicon-dot-fill"}} + {{$.locale.Tr "repo.pulls.required_status_check_administrator"}} +
    + {{else}} +
    + {{svg "octicon-check"}} + {{$.locale.Tr "repo.pulls.can_auto_merge_desc"}} +
    + {{end}} + {{if .WillSign}} +
    + {{svg "octicon-lock" 16 "text green"}} + {{$.locale.Tr "repo.signing.will_sign" .SigningKey}} +
    + {{else if .IsSigned}} +
    + {{svg "octicon-unlock"}} + {{$.locale.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason)}} +
    + {{end}} + {{end}} + {{template "repo/issue/view_content/update_branch_by_merge" $}} + {{if .Issue.PullRequest.IsEmpty}} +
    + +
    + {{svg "octicon-alert"}} + {{$.locale.Tr "repo.pulls.is_empty"}} +
    + {{end}} + + {{if .AllowMerge}} {{/* user is allowed to merge */}} + {{$prUnit := .Repository.MustGetUnit $.Context $.UnitTypePullRequests}} + {{$approvers := .Issue.PullRequest.GetApprovers}} + {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash}} + {{$hasPendingPullRequestMergeTip := ""}} + {{if .HasPendingPullRequestMerge}} + {{$createdPRMergeStr := TimeSinceUnix .PendingPullRequestMerge.CreatedUnix $.locale}} + {{$hasPendingPullRequestMergeTip = $.locale.Tr "repo.pulls.auto_merge_has_pending_schedule" .PendingPullRequestMerge.Doer.Name $createdPRMergeStr}} + {{end}} +
    + + + {{$showGeneralMergeForm = true}} +
    + {{else}} + {{/* no merge style was set in repo setting: not or ($prUnit.PullRequestsConfig.AllowMerge ...) */}} +
    +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.no_merge_desc"}} +
    +
    + {{svg "octicon-info"}} + {{$.locale.Tr "repo.pulls.no_merge_helper"}} +
    + {{end}} {{/* end if the repo was set to use any merge style */}} + {{else}} + {{/* user is not allowed to merge */}} +
    +
    + {{svg "octicon-info"}} + {{$.locale.Tr "repo.pulls.no_merge_access"}} +
    + {{end}} {{/* end if user is allowed to merge or not */}} + {{else}} + {{/* Merge conflict without specific file. Suggest manual merge, only if all reviews and status checks OK. */}} + {{if .IsBlockedByApprovals}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}} +
    + {{else if .IsBlockedByRejection}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_rejection"}} +
    + {{else if .IsBlockedByOfficialReviewRequests}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_official_review_requests"}} +
    + {{else if .IsBlockedByOutdatedBranch}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.blocked_by_outdated_branch"}} +
    + {{else if .IsBlockedByChangedProtectedFiles}} +
    + {{svg "octicon-x"}} + {{$.locale.TrN $.ChangedProtectedFilesNum "repo.pulls.blocked_by_changed_protected_files_1" "repo.pulls.blocked_by_changed_protected_files_n" | Safe}} +
    +
      + {{range .ChangedProtectedFiles}} +
    • {{.}}
    • + {{end}} +
    + {{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.required_status_check_failed"}} +
    + {{else if and .RequireSigned (not .WillSign)}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.require_signed_wont_sign"}} +
    + {{else}} +
    + {{svg "octicon-x"}} + {{$.locale.Tr "repo.pulls.cannot_auto_merge_desc"}} +
    +
    + {{svg "octicon-info"}} + {{$.locale.Tr "repo.pulls.cannot_auto_merge_helper"}} +
    + {{end}} + {{end}}{{/* end if: pull request status */}} + + {{/* + Manually Merged is not a well-known feature, it helps repo admins to mark a non-mergeable PR (already merged, conflicted) as merged + To test it: + * Enable "Manually Merged" feature in the Repository Settings + * Create a pull request, either: + * - Merge the pull request branch locally and push the merged commit to Gitea + * - Make some conflicts between the base branch and the pull request branch + * Then the Manually Merged form will be shown to repo admin users + */}} + {{if and $.StillCanManualMerge (not $showGeneralMergeForm)}} +
    +
    +
    + {{.CsrfTokenHtml}} +
    + +
    + +
    +
    + {{end}} + + {{if and .ShowMergeInstructions .Issue.PullRequest.HeadRepo (not .Issue.PullRequest.HasMerged) (not .Issue.IsClosed)}} + {{template "repo/issue/view_content/pull_merge_instruction" (dict "locale" .locale "Issue" .Issue)}} + {{end}} +
    +
    +
    +{{end}} diff --git a/src/templates/repo/issue/view_content/pull_merge_instruction.tmpl b/src/templates/repo/issue/view_content/pull_merge_instruction.tmpl new file mode 100644 index 0000000..78deed9 --- /dev/null +++ b/src/templates/repo/issue/view_content/pull_merge_instruction.tmpl @@ -0,0 +1,19 @@ +
    +
    {{$.locale.Tr "repo.pulls.merge_instruction_hint" | Safe}}
    +
    +

    {{$.locale.Tr "step1"}}

    {{$.locale.Tr "repo.pulls.merge_instruction_step1_desc"}}
    +
    + {{if eq $.Issue.PullRequest.Flow 0}} +
    git checkout -b {{if ne $.Issue.PullRequest.HeadRepo.ID $.Issue.PullRequest.BaseRepo.ID}}{{$.Issue.PullRequest.HeadRepo.OwnerName}}-{{end}}{{$.Issue.PullRequest.HeadBranch}} {{$.Issue.PullRequest.BaseBranch}}
    +
    git pull {{if ne $.Issue.PullRequest.HeadRepo.ID $.Issue.PullRequest.BaseRepo.ID}}{{else}}origin{{end}} {{$.Issue.PullRequest.HeadBranch}}
    + {{else}} +
    git fetch origin {{$.Issue.PullRequest.GetGitRefName}}:{{$.Issue.PullRequest.HeadBranch}}
    + {{end}} +
    +

    {{$.locale.Tr "step2"}}

    {{$.locale.Tr "repo.pulls.merge_instruction_step2_desc"}}
    +
    +
    git checkout {{$.Issue.PullRequest.BaseBranch}}
    +
    git merge --no-ff {{if ne $.Issue.PullRequest.HeadRepo.ID $.Issue.PullRequest.BaseRepo.ID}}{{$.Issue.PullRequest.HeadRepo.OwnerName}}-{{end}}{{$.Issue.PullRequest.HeadBranch}}
    +
    git push origin {{$.Issue.PullRequest.BaseBranch}}
    +
    +
    diff --git a/src/templates/repo/issue/view_content/reactions.tmpl b/src/templates/repo/issue/view_content/reactions.tmpl new file mode 100644 index 0000000..0220278 --- /dev/null +++ b/src/templates/repo/issue/view_content/reactions.tmpl @@ -0,0 +1,15 @@ +
    +{{range $key, $value := .Reactions}} + {{$hasReacted := $value.HasUser $.ctxData.SignedUserID}} + + {{ReactionToEmoji $key}} + {{len $value}} + +{{end}} +{{if AllowedReactions}} + {{template "repo/issue/view_content/add_reaction" dict "ctxData" $.ctxData "ActionURL" .ActionURL}} +{{end}} +
    diff --git a/src/templates/repo/issue/view_content/reference_issue_dialog.tmpl b/src/templates/repo/issue/view_content/reference_issue_dialog.tmpl new file mode 100644 index 0000000..1bb6366 --- /dev/null +++ b/src/templates/repo/issue/view_content/reference_issue_dialog.tmpl @@ -0,0 +1,30 @@ + diff --git a/src/templates/repo/issue/view_content/sidebar.tmpl b/src/templates/repo/issue/view_content/sidebar.tmpl new file mode 100644 index 0000000..2f32639 --- /dev/null +++ b/src/templates/repo/issue/view_content/sidebar.tmpl @@ -0,0 +1,689 @@ +
    + {{template "repo/issue/branch_selector_field" .}} + {{if .Issue.IsPull}} + + + +
    + {{.locale.Tr "repo.issues.new.no_reviewers"}} +
    + {{range .PullReviewers}} +
    +
    + {{if .User}} + {{avatar $.Context .User 20 "gt-mr-3"}}{{.User.GetDisplayName}} + {{else if .Team}} + {{svg "octicon-people" 20 "gt-mr-3"}}{{$.Issue.Repo.OwnerName}}/{{.Team.Name}} + {{end}} +
    +
    + {{if (and $.Permission.IsAdmin (or (eq .Review.Type 1) (eq .Review.Type 3)) (not $.Issue.IsClosed))}} + + {{svg "octicon-x" 20}} + + + {{end}} + {{if .Review.Stale}} + + {{svg "octicon-hourglass" 16}} + + {{end}} + {{if .CanChange}} + {{if .Checked}}{{svg "octicon-trash"}}{{else}}{{svg "octicon-sync"}}{{end}} + {{end}} + {{svg (printf "octicon-%s" .Review.Type.Icon) 16 (printf "text %s" (.Review.HTMLTypeColorName))}} +
    +
    + {{end}} + {{range .OriginalReviews}} +
    + +
    + {{svg (printf "octicon-%s" .Type.Icon) 16 (printf "text %s" (.HTMLTypeColorName))}} +
    +
    + {{end}} +
    +
    + {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed) (not .IsPullWorkInProgress)}} + + {{end}} +
    + {{end}} + + {{template "repo/issue/labels/labels_selector_field" .}} + {{template "repo/issue/labels/labels_sidebar" dict "root" $}} + +
    + + +
    + {{.locale.Tr "repo.issues.new.no_milestone"}} + +
    + + {{if .IsProjectsEnabled}} +
    + + +
    + {{.locale.Tr "repo.issues.new.no_projects"}} + +
    + {{end}} + +
    + + + +
    + {{.locale.Tr "repo.issues.new.no_assignees"}} +
    + {{range .Issue.Assignees}} + + {{end}} +
    +
    + +
    + + {{if .Participants}} + {{.locale.Tr "repo.issues.num_participants" .NumParticipants}} +
    + {{range .Participants}} + + {{avatar $.Context . 28 "gt-my-1 gt-mr-2"}} + + {{end}} +
    + {{end}} + + {{if and $.IssueWatch (not .Repository.IsArchived)}} +
    + +
    + {{.locale.Tr "notification.notifications"}} +
    +
    + + {{$.CsrfTokenHtml}} + +
    +
    +
    + {{end}} + {{if .Repository.IsTimetrackerEnabled $.Context}} + {{if and .CanUseTimetracker (not .Repository.IsArchived)}} +
    +
    + {{.locale.Tr "repo.issues.tracker"}} +
    +
    + {{$.CsrfTokenHtml}} +
    +
    + {{$.CsrfTokenHtml}} +
    + {{if $.IsStopwatchRunning}} + + + {{else}} + {{if .HasUserStopwatch}} +
    + {{.locale.Tr "repo.issues.tracking_already_started" (.OtherStopwatchURL|Escape) | Safe}} +
    + {{end}} + + + + {{end}} +
    +
    + {{end}} + {{if gt (len .WorkingUsers) 0}} +
    +
    + {{.locale.Tr "repo.issues.time_spent_from_all_authors" ($.Issue.TotalTrackedTime | Sec2Time) | Safe}} +
    + {{range $user, $trackedtime := .WorkingUsers}} +
    + + {{avatar $.Context $user}} + +
    + {{template "shared/user/authorlink" $user}} +
    + {{$trackedtime}} +
    +
    +
    + {{end}} +
    +
    + {{end}} + {{end}} + +
    + {{.locale.Tr "repo.issues.due_date"}} +
    +
    + {{svg "octicon-x" 16 "close icon"}} + {{.locale.Tr "repo.issues.due_date_invalid"}} +
    + {{if ne .Issue.DeadlineUnix 0}} +

    +

    +
    + {{svg "octicon-calendar" 16 "gt-mr-3"}} + {{DateTime "long" .Issue.DeadlineUnix}} +
    +
    + {{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}} + {{svg "octicon-pencil" 16 "gt-mr-2"}} + {{svg "octicon-trash"}} + {{end}} +
    +
    +

    + {{else}} +

    {{.locale.Tr "repo.issues.due_date_not_set"}}

    + {{end}} + + {{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}} +
    +
    + {{$.CsrfTokenHtml}} + + +
    +
    + {{end}} +
    + + {{if .Repository.IsDependenciesEnabled $.Context}} +
    + +
    + {{if (and (not .BlockedByDependencies) (not .BlockedByDependenciesNotPermitted) (not .BlockingDependencies) (not .BlockingDependenciesNotPermitted))}} + {{.locale.Tr "repo.issues.dependency.title"}} +
    +

    + {{if .Issue.IsPull}} + {{.locale.Tr "repo.issues.dependency.pr_no_dependencies"}} + {{else}} + {{.locale.Tr "repo.issues.dependency.issue_no_dependencies"}} + {{end}} +

    + {{end}} + + {{if or .BlockingDependencies .BlockingDependenciesNotPermitted}} + + {{.locale.Tr "repo.issues.dependency.blocks_short"}} + +
    + {{range .BlockingDependencies}} +
    +
    + + #{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}} + +
    + {{.Repository.OwnerName}}/{{.Repository.Name}} +
    +
    +
    + {{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}} + + {{svg "octicon-trash" 16}} + + {{end}} +
    +
    + {{end}} + {{if .BlockingDependenciesNotPermitted}} +
    + {{$.locale.TrN (len .BlockingDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockingDependenciesNotPermitted)}} +
    + {{end}} +
    + {{end}} + + {{if or .BlockedByDependencies .BlockedByDependenciesNotPermitted}} + + {{.locale.Tr "repo.issues.dependency.blocked_by_short"}} + +
    + {{range .BlockedByDependencies}} +
    +
    + + #{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}} + +
    + {{.Repository.OwnerName}}/{{.Repository.Name}} +
    +
    +
    + {{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}} + + {{svg "octicon-trash" 16}} + + {{end}} +
    +
    + {{end}} + {{if $.CanCreateIssueDependencies}} + {{range .BlockedByDependenciesNotPermitted}} +
    +
    +
    + {{svg "octicon-lock" 16}} + + #{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}} + +
    +
    + {{.Repository.OwnerName}}/{{.Repository.Name}} +
    +
    +
    + {{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}} + + {{svg "octicon-trash" 16}} + + {{end}} +
    +
    + {{end}} + {{else if .BlockedByDependenciesNotPermitted}} +
    + {{$.locale.TrN (len .BlockedByDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockedByDependenciesNotPermitted)}} +
    + {{end}} +
    + {{end}} + + {{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}} +
    +
    + {{$.CsrfTokenHtml}} +
    + + +
    +
    +
    + {{end}} +
    + + {{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}} + + + + {{end}} + {{end}} + +
    +
    + {{$issueReferenceLink := printf "%s#%d" .Issue.Repo.FullName .Issue.Index}} +
    + {{.locale.Tr "repo.issues.reference_link" $issueReferenceLink}} + +
    +
    + + {{if and .IsRepoAdmin (not .Repository.IsArchived)}} +
    + + {{if or .PinEnabled .Issue.IsPinned}} +
    + {{$.CsrfTokenHtml}} + +
    + {{end}} + + + + + + {{end}} + + {{if and .Issue.IsPull .IsIssuePoster (not .Issue.IsClosed) .Issue.PullRequest.HeadRepo}} + {{if and (not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName)) .CanWriteToHeadRepo}} +
    +
    +
    + + +
    +
    + {{end}} + {{end}} +
    diff --git a/src/templates/repo/issue/view_content/update_branch_by_merge.tmpl b/src/templates/repo/issue/view_content/update_branch_by_merge.tmpl new file mode 100644 index 0000000..d539ece --- /dev/null +++ b/src/templates/repo/issue/view_content/update_branch_by_merge.tmpl @@ -0,0 +1,37 @@ +{{if and (gt $.Issue.PullRequest.CommitsBehind 0) (not $.Issue.IsClosed) (not $.Issue.PullRequest.IsChecking) (not $.IsPullFilesConflicted) (not $.IsPullRequestBroken)}} +
    +
    +
    + {{svg "octicon-alert"}} + {{$.locale.Tr "repo.pulls.outdated_with_base_branch"}} +
    +
    + {{if and $.UpdateAllowed $.UpdateByRebaseAllowed}} +
    +
    + + +
    +
    + {{end}} + {{if and $.UpdateAllowed (not $.UpdateByRebaseAllowed)}} +
    + {{$.CsrfTokenHtml}} + +
    + {{end}} +
    +
    +{{end}} diff --git a/src/templates/repo/issue/view_title.tmpl b/src/templates/repo/issue/view_title.tmpl new file mode 100644 index 0000000..895eaee --- /dev/null +++ b/src/templates/repo/issue/view_title.tmpl @@ -0,0 +1,119 @@ +{{if .Flash}} +
    + {{template "base/alert" .}} +
    +{{end}} +
    +
    +

    + {{RenderIssueTitle $.Context .Issue.Title $.RepoLink $.Repository.ComposeMetas | RenderCodeBlock}} #{{.Issue.Index}} + +
    + +
    +

    +
    + {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}} + + {{end}} + {{if not .Issue.IsPull}} + {{.locale.Tr "repo.issues.new"}} + {{end}} +
    + {{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}} +
    + + +
    + {{end}} +
    +
    + {{if .HasMerged}} +
    {{svg "octicon-git-merge" 16 "gt-mr-2"}} {{if eq .Issue.PullRequest.Status 3}}{{.locale.Tr "repo.pulls.manually_merged"}}{{else}}{{.locale.Tr "repo.pulls.merged"}}{{end}}
    + {{else if .Issue.IsClosed}} +
    {{if .Issue.IsPull}}{{svg "octicon-git-pull-request"}}{{else}}{{svg "octicon-issue-closed"}}{{end}} {{.locale.Tr "repo.issues.closed_title"}}
    + {{else if .Issue.IsPull}} + {{if .IsPullWorkInProgress}} +
    {{svg "octicon-git-pull-request-draft"}} {{.locale.Tr "repo.issues.draft_title"}}
    + {{else}} +
    {{svg "octicon-git-pull-request"}} {{.locale.Tr "repo.issues.open_title"}}
    + {{end}} + {{else}} +
    {{svg "octicon-issue-opened"}} {{.locale.Tr "repo.issues.open_title"}}
    + {{end}} +
    + {{if .Issue.IsPull}} + {{$headHref := .HeadTarget|Escape}} + {{if .HeadBranchLink}} + {{$headHref = printf `%s` (.HeadBranchLink | Escape) $headHref}} + {{end}} + {{$headHref = printf `%s ` $headHref (.locale.Tr "copy_branch") (.HeadTarget | Escape) (svg "octicon-copy" 14)}} + {{$baseHref := .BaseTarget|Escape}} + {{if .BaseBranchLink}} + {{$baseHref = printf `%s` (.BaseBranchLink | Escape) $baseHref}} + {{end}} + {{if .Issue.PullRequest.HasMerged}} + {{$mergedStr:= TimeSinceUnix .Issue.PullRequest.MergedUnix $.locale}} + {{if .Issue.OriginalAuthor}} + {{.Issue.OriginalAuthor}} + {{$.locale.Tr "repo.pulls.merged_title_desc" .NumCommits $headHref $baseHref $mergedStr | Safe}} + {{else}} + {{.Issue.PullRequest.Merger.GetDisplayName}} + {{$.locale.Tr "repo.pulls.merged_title_desc" .NumCommits $headHref $baseHref $mergedStr | Safe}} + {{end}} + {{else}} + {{if .Issue.OriginalAuthor}} + {{.Issue.OriginalAuthor}} {{$.locale.Tr "repo.pulls.title_desc" .NumCommits $headHref $baseHref | Safe}} + {{else}} + + {{.Issue.Poster.GetDisplayName}} + {{$.locale.Tr "repo.pulls.title_desc" .NumCommits $headHref $baseHref | Safe}} + + {{end}} + + + {{svg "octicon-arrow-right"}} + + + {{end}} + {{else}} + {{$createdStr:= TimeSinceUnix .Issue.CreatedUnix $.locale}} + + {{if .Issue.OriginalAuthor}} + {{$.locale.Tr "repo.issues.opened_by_fake" $createdStr (.Issue.OriginalAuthor|Escape) | Safe}} + {{else if gt .Issue.Poster.ID 0}} + {{$.locale.Tr "repo.issues.opened_by" $createdStr (.Issue.Poster.HomeLink|Escape) (.Issue.Poster.GetDisplayName|Escape) | Safe}} + {{else}} + {{$.locale.Tr "repo.issues.opened_by_fake" $createdStr (.Issue.Poster.GetDisplayName|Escape) | Safe}} + {{end}} + · + {{$.locale.Tr "repo.issues.num_comments" .Issue.NumComments}} + + {{end}} +
    +
    +
    diff --git a/src/templates/repo/migrate/codebase.tmpl b/src/templates/repo/migrate/codebase.tmpl new file mode 100644 index 0000000..41e9c27 --- /dev/null +++ b/src/templates/repo/migrate/codebase.tmpl @@ -0,0 +1,116 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/git.tmpl b/src/templates/repo/migrate/git.tmpl new file mode 100644 index 0000000..ba092a3 --- /dev/null +++ b/src/templates/repo/migrate/git.tmpl @@ -0,0 +1,90 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/gitbucket.tmpl b/src/templates/repo/migrate/gitbucket.tmpl new file mode 100644 index 0000000..da14d56 --- /dev/null +++ b/src/templates/repo/migrate/gitbucket.tmpl @@ -0,0 +1,132 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    + +
    + {{.locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/gitea.tmpl b/src/templates/repo/migrate/gitea.tmpl new file mode 100644 index 0000000..daa1205 --- /dev/null +++ b/src/templates/repo/migrate/gitea.tmpl @@ -0,0 +1,128 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + + {{svg "octicon-question"}} +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    + +
    + {{.locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/github.tmpl b/src/templates/repo/migrate/github.tmpl new file mode 100644 index 0000000..e9f2b11 --- /dev/null +++ b/src/templates/repo/migrate/github.tmpl @@ -0,0 +1,130 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}} + +
    + +
    + + + {{svg "octicon-question"}} + + {{.locale.Tr "repo.migrate.github_token_desc"}} + +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    +
    + {{.locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/gitlab.tmpl b/src/templates/repo/migrate/gitlab.tmpl new file mode 100644 index 0000000..656b5c5 --- /dev/null +++ b/src/templates/repo/migrate/gitlab.tmpl @@ -0,0 +1,127 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + + {{svg "octicon-question"}} +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    +
    + {{.locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/gogs.tmpl b/src/templates/repo/migrate/gogs.tmpl new file mode 100644 index 0000000..78700a7 --- /dev/null +++ b/src/templates/repo/migrate/gogs.tmpl @@ -0,0 +1,130 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + + +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    + +
    + {{.locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/helper.tmpl b/src/templates/repo/migrate/helper.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/src/templates/repo/migrate/migrate.tmpl b/src/templates/repo/migrate/migrate.tmpl new file mode 100644 index 0000000..0124532 --- /dev/null +++ b/src/templates/repo/migrate/migrate.tmpl @@ -0,0 +1,32 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/migrating.tmpl b/src/templates/repo/migrate/migrating.tmpl new file mode 100644 index 0000000..58c453f --- /dev/null +++ b/src/templates/repo/migrate/migrating.tmpl @@ -0,0 +1,100 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    +
    + {{template "base/alert" .}} +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    {{.locale.Tr "repo.migrate.migrating" .CloneAddr | Safe}}

    +

    +
    +
    + {{if .CloneAddr}} +

    {{.locale.Tr "repo.migrate.migrating_failed" .CloneAddr | Safe}}

    + {{else}} +

    {{.locale.Tr "repo.migrate.migrating_failed_no_addr" | Safe}}

    + {{end}} +

    +
    + {{if .Permission.IsAdmin}} +
    +
    + {{if .Failed}} + + {{else}} + + {{end}} +
    + {{end}} +
    +
    +
    +
    +
    +
    +
    + + + + + +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/onedev.tmpl b/src/templates/repo/migrate/onedev.tmpl new file mode 100644 index 0000000..50858ed --- /dev/null +++ b/src/templates/repo/migrate/onedev.tmpl @@ -0,0 +1,116 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{.locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/migrate/options.tmpl b/src/templates/repo/migrate/options.tmpl new file mode 100644 index 0000000..d39caf0 --- /dev/null +++ b/src/templates/repo/migrate/options.tmpl @@ -0,0 +1,26 @@ +{{if not .DisableNewPullMirrors}} +
    + +
    + + +
    +
    +{{end}} +{{if .LFSActive}} +
    + +
    + + +
    + ({{.locale.Tr "repo.settings.advanced_settings"}}) +
    +
    + {{.locale.Tr "repo.migrate_options_lfs_endpoint.description" "https://github.com/git-lfs/git-lfs/blob/main/docs/api/server-discovery.md#server-discovery" | Str2html}}{{if .ContextUser.CanImportLocal}} {{.locale.Tr "repo.migrate_options_lfs_endpoint.description.local"}}{{end}} +
    + + +
    +
    +{{end}} diff --git a/src/templates/repo/packages.tmpl b/src/templates/repo/packages.tmpl new file mode 100644 index 0000000..47fa338 --- /dev/null +++ b/src/templates/repo/packages.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} + {{template "package/shared/list" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/projects/list.tmpl b/src/templates/repo/projects/list.tmpl new file mode 100644 index 0000000..674c6bf --- /dev/null +++ b/src/templates/repo/projects/list.tmpl @@ -0,0 +1,93 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + + {{template "base/alert" .}} + +
    + {{range .Projects}} +
  • +

    + {{svg .IconName 16}} + {{.Title}} +

    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{$.locale.PrettyNumber .NumOpenIssues}} {{$.locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{$.locale.PrettyNumber .NumClosedIssues}} {{$.locale.Tr "repo.issues.closed_title"}} +
    +
    + {{if and $.CanWriteProjects (not $.Repository.IsArchived)}} + + {{end}} +
    + {{if .Description}} +
    + {{.RenderedContent|Str2html}} +
    + {{end}} +
  • + {{end}} + + {{template "base/paginate" .}} +
    +
    +
    + +{{if .CanWriteProjects}} + +{{end}} +{{template "base/footer" .}} diff --git a/src/templates/repo/projects/new.tmpl b/src/templates/repo/projects/new.tmpl new file mode 100644 index 0000000..531cae8 --- /dev/null +++ b/src/templates/repo/projects/new.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} + {{template "projects/new" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/projects/view.tmpl b/src/templates/repo/projects/view.tmpl new file mode 100644 index 0000000..2d98c70 --- /dev/null +++ b/src/templates/repo/projects/view.tmpl @@ -0,0 +1,277 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    +
    + {{template "repo/issue/navbar" .}} +
    +
    + {{if and .CanWriteProjects (not .Repository.IsArchived)}} + {{.locale.Tr "repo.issues.new"}} + {{.locale.Tr "new_project_column"}} + {{end}} + +
    +
    +
    +
    +
    +

    {{$.Project.Title}}

    +
    {{$.Project.RenderedContent|Str2html}}
    +
    + {{if and $.CanWriteProjects (not $.Repository.IsArchived)}} + + {{end}} +
    +
    +
    +
    + +
    + {{range $board := .Boards}} + +
    +
    +
    +
    + {{.NumIssues}} +
    + {{.Title}} +
    + {{if and $.CanWriteProjects (not $.Repository.IsArchived) (ne .ID 0)}} + + {{end}} +
    +
    + +
    + + {{range (index $.IssuesMap .ID)}} + + +
    + {{if eq $.Project.CardType 1}}{{/* Images and Text*/}} +
    + {{range (index $.issuesAttachmentMap .ID)}} + {{.Name}} + {{end}} +
    + {{end}} +
    +
    + + {{template "shared/issueicon" .}} + + + {{.Title}} + +
    +
    + + #{{.Index}} + {{$timeStr := TimeSinceUnix .GetLastEventTimestamp $.locale}} + {{if .OriginalAuthor}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}} + {{else if gt .Poster.ID 0}} + {{$.locale.Tr .GetLastEventLabel $timeStr (.Poster.HomeLink|Escape) (.Poster.GetDisplayName | Escape) | Safe}} + {{else}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.Poster.GetDisplayName | Escape) | Safe}} + {{end}} + +
    + {{- if .MilestoneID}} + + {{- end}} + {{- range index $.LinkedPRs .ID}} + + {{- end}} +
    + + {{if or .Labels .Assignees}} +
    + {{range .Labels}} + {{RenderLabel $.Context .}} + {{end}} +
    + {{range .Assignees}} + {{avatar $.Context . 28 "mini gt-mr-3"}} + {{end}} +
    +
    + {{end}} +
    + + + {{end}} +
    +
    + {{end}} +
    + +
    + +
    + +{{if .CanWriteProjects}} + +{{end}} + +{{template "base/footer" .}} diff --git a/src/templates/repo/pulls/commits.tmpl b/src/templates/repo/pulls/commits.tmpl new file mode 100644 index 0000000..bf6e812 --- /dev/null +++ b/src/templates/repo/pulls/commits.tmpl @@ -0,0 +1,10 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "repo/issue/view_title" .}} + {{template "repo/pulls/tab_menu" .}} + {{template "repo/commits_table" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/pulls/files.tmpl b/src/templates/repo/pulls/files.tmpl new file mode 100644 index 0000000..402bec8 --- /dev/null +++ b/src/templates/repo/pulls/files.tmpl @@ -0,0 +1,14 @@ +{{template "base/head" .}} + + + + +
    + {{template "repo/header" .}} +
    + {{template "repo/issue/view_title" .}} + {{template "repo/pulls/tab_menu" .}} + {{template "repo/diff/box" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/pulls/fork.tmpl b/src/templates/repo/pulls/fork.tmpl new file mode 100644 index 0000000..34adc7b --- /dev/null +++ b/src/templates/repo/pulls/fork.tmpl @@ -0,0 +1,70 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "new_fork"}} +

    +
    + {{template "base/alert" .}} +
    + + +
    + +
    + + {{.ForkRepo.FullName}} +
    +
    + + +
    +
    + +
    + + +
    + {{.locale.Tr "repo.fork_visibility_helper"}} +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/pulls/status.tmpl b/src/templates/repo/pulls/status.tmpl new file mode 100644 index 0000000..25d8954 --- /dev/null +++ b/src/templates/repo/pulls/status.tmpl @@ -0,0 +1,34 @@ +{{if $.LatestCommitStatus}} + {{if not $.Issue.PullRequest.HasMerged}} +
    + {{if eq .LatestCommitStatus.State "pending"}} + {{$.locale.Tr "repo.pulls.status_checking"}} + {{else if eq .LatestCommitStatus.State "success"}} + {{$.locale.Tr "repo.pulls.status_checks_success"}} + {{else if eq .LatestCommitStatus.State "warning"}} + {{$.locale.Tr "repo.pulls.status_checks_warning"}} + {{else if eq .LatestCommitStatus.State "failure"}} + {{$.locale.Tr "repo.pulls.status_checks_failure"}} + {{else if eq .LatestCommitStatus.State "error"}} + {{$.locale.Tr "repo.pulls.status_checks_error"}} + {{else}} + {{$.locale.Tr "repo.pulls.status_checking"}} + {{end}} +
    + {{end}} + + {{range $.LatestCommitStatuses}} +
    + {{template "repo/commit_status" .}} +
    + {{.Context}} {{.Description}} +
    + {{if $.is_context_required}} + {{if (call $.is_context_required .Context)}}
    {{$.locale.Tr "repo.pulls.status_checks_requested"}}
    {{end}} + {{end}} + {{if .TargetURL}}{{$.locale.Tr "repo.pulls.status_checks_details"}}{{end}} +
    +
    +
    + {{end}} +{{end}} diff --git a/src/templates/repo/pulls/tab_menu.tmpl b/src/templates/repo/pulls/tab_menu.tmpl new file mode 100644 index 0000000..f44968c --- /dev/null +++ b/src/templates/repo/pulls/tab_menu.tmpl @@ -0,0 +1,17 @@ + diff --git a/src/templates/repo/release/list.tmpl b/src/templates/repo/release/list.tmpl new file mode 100644 index 0000000..fb8534f --- /dev/null +++ b/src/templates/repo/release/list.tmpl @@ -0,0 +1,133 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} + {{template "repo/release_tag_header" .}} + + + {{template "base/paginate" .}} +
    +
    + +{{if (and ($.Permission.CanWrite $.UnitTypeCode) .PageIsTagList)}} + +{{end}} + +{{template "base/footer" .}} diff --git a/src/templates/repo/release/new.tmpl b/src/templates/repo/release/new.tmpl new file mode 100644 index 0000000..c7de004 --- /dev/null +++ b/src/templates/repo/release/new.tmpl @@ -0,0 +1,152 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +

    + {{if .PageIsEditRelease}} + {{.locale.Tr "repo.release.edit_release"}} +
    {{.locale.Tr "repo.release.edit_subheader"}}
    + {{else}} + {{.locale.Tr "repo.release.new_release"}} +
    {{.locale.Tr "repo.release.new_subheader"}}
    + {{end}} +

    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    +
    + {{if .PageIsEditRelease}} + {{.tag_name}}@{{.tag_target}} + {{else}} + + +
    + @ + +
    +
    + {{.locale.Tr "repo.release.tag_helper"}} +
    + {{end}} +
    +
    +
    +
    + +
    +
    + {{template "shared/combomarkdowneditor" (dict + "locale" $.locale + "MarkdownPreviewUrl" (print .Repository.Link "/markup") + "MarkdownPreviewContext" .RepoLink + "TextareaName" "content" + "TextareaContent" .content + "TextareaPlaceholder" (.locale.Tr "repo.release.message") + "TextareaAriaLabel" (.locale.Tr "repo.release.message") + "DropzoneParentContainer" "form" + )}} +
    + {{range .attachments}} +
    + +
    + + + {{.Size | FileSize}} + + {{svg "octicon-info"}} + +
    +
    + {{end}} + {{if .IsAttachmentEnabled}} +
    + {{template "repo/upload" .}} +
    + {{end}} +
    +
    +
    +
    + {{if not .PageIsEditRelease}} +
    +
    + + +
    +
    + {{else}} + + {{end}} +
    +
    + + +
    +
    + {{.locale.Tr "repo.release.prerelease_helper"}} +
    + {{if .PageIsEditRelease}} + + {{.locale.Tr "repo.release.cancel"}} + + + {{$.locale.Tr "repo.release.delete_release"}} + + {{if .IsDraft}} + + + {{else}} + + {{end}} + {{else}} + {{if not .tag_name}} + + {{end}} + + + {{end}} +
    +
    +
    +
    +
    +
    + +{{if .PageIsEditRelease}} + +{{end}} +{{template "base/footer" .}} diff --git a/src/templates/repo/release_tag_header.tmpl b/src/templates/repo/release_tag_header.tmpl new file mode 100644 index 0000000..0af9ba8 --- /dev/null +++ b/src/templates/repo/release_tag_header.tmpl @@ -0,0 +1,27 @@ +{{$canReadReleases := $.Permission.CanRead $.UnitTypeReleases}} +{{$canReadCode := $.Permission.CanRead $.UnitTypeCode}} + +{{if $canReadReleases}} +
    +
    + + {{if .EnableFeed}} + {{svg "octicon-rss" 18}} + {{end}} +
    + {{if and (not .PageIsTagList) .CanCreateRelease}} + + {{.locale.Tr "repo.release.new_release"}} + + {{end}} +
    +
    +{{else if $canReadCode}} + {{/* if the "repo.releases" unit is disabled, only show the "commits / branches / tags" sub menu */}} + {{template "repo/sub_menu" .}} +{{end}} diff --git a/src/templates/repo/search.tmpl b/src/templates/repo/search.tmpl new file mode 100644 index 0000000..816be9d --- /dev/null +++ b/src/templates/repo/search.tmpl @@ -0,0 +1,73 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + + {{if .CodeIndexerUnavailable}} +
    +

    {{$.locale.Tr "repo.search.code_search_unavailable"}}

    +
    + {{else if .Keyword}} +

    + {{.locale.Tr "repo.search.results" (.Keyword|Escape) (.RepoLink|Escape) (.RepoName|Escape) | Str2html}} +

    + {{if .SearchResults}} +
    + {{range $term := .SearchResultLanguages}} + + + {{$term.Language}} +
    {{$term.Count}}
    +
    + {{end}} +
    + + {{template "base/paginate" .}} + {{else}} +
    {{$.locale.Tr "repo.search.code_no_results"}}
    + {{end}} + {{end}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/search_name.tmpl b/src/templates/repo/search_name.tmpl new file mode 100644 index 0000000..951f168 --- /dev/null +++ b/src/templates/repo/search_name.tmpl @@ -0,0 +1 @@ +{{.Name}}{{if DefaultShowFullName}} {{.FullName}}{{end}} diff --git a/src/templates/repo/settings/actions.tmpl b/src/templates/repo/settings/actions.tmpl new file mode 100644 index 0000000..7294423 --- /dev/null +++ b/src/templates/repo/settings/actions.tmpl @@ -0,0 +1,9 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings actions")}} +
    + {{if eq .PageType "runners"}} + {{template "shared/actions/runner_list" .}} + {{else if eq .PageType "secrets"}} + {{template "shared/secrets/add_list" .}} + {{end}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/branches.tmpl b/src/templates/repo/settings/branches.tmpl new file mode 100644 index 0000000..9a8c588 --- /dev/null +++ b/src/templates/repo/settings/branches.tmpl @@ -0,0 +1,77 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings edit")}} +
    + {{if .Repository.IsArchived}} +
    + {{.locale.Tr "repo.settings.archive.branchsettings_unavailable"}} +
    + {{else}} +

    + {{.locale.Tr "repo.default_branch"}} +

    +
    +

    + {{.locale.Tr "repo.settings.default_branch_desc"}} +

    +
    + {{.CsrfTokenHtml}} + + {{if not .Repository.IsEmpty}} + + + {{end}} +
    +
    + +

    + {{.locale.Tr "repo.settings.protected_branch"}} + +

    + +
    +
    +
    + + + {{range .ProtectedBranches}} + + + + + {{else}} + + {{end}} + +
    {{.RuleName}}
    + {{$.locale.Tr "repo.settings.edit_protected_branch"}} + +
    {{.locale.Tr "repo.settings.no_protected_branch"}}
    +
    +
    +
    + {{end}} +
    + + + +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/collaboration.tmpl b/src/templates/repo/settings/collaboration.tmpl new file mode 100644 index 0000000..84f23ee --- /dev/null +++ b/src/templates/repo/settings/collaboration.tmpl @@ -0,0 +1,121 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings collaboration")}} +
    +

    + {{.locale.Tr "repo.settings.collaboration"}} +

    + {{if .Collaborators}} +
    + {{range .Collaborators}} +
    + +
    + {{svg "octicon-shield-lock"}} + +
    +
    + +
    +
    + {{end}} +
    + {{end}} +
    +
    + {{.CsrfTokenHtml}} +
    + +
    + +
    +
    + + {{if .RepoOwnerIsOrganization}} +

    + {{$.locale.Tr "repo.settings.teams"}} +

    + {{$allowedToChangeTeams := (or (.Org.RepoAdminChangeTeamAccess) (.Permission.IsOwner))}} + {{if .Teams}} +
    + {{range $t, $team := .Teams}} +
    + +
    + {{svg "octicon-shield-lock"}} + + {{if or (eq .AccessMode 1) (eq .AccessMode 2)}} + {{$first := true}} +
    + Sections: {{range $u, $unit := $.Units}}{{if and ($.Repo.UnitEnabled $.Context $unit.Type) ($team.UnitEnabled $.Context $unit.Type)}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{$.locale.Tr $unit.NameKey}}{{end}}{{end}} {{if $first}}None{{end}} +
    + {{end}} +
    + {{if $allowedToChangeTeams}} +
    + +
    + {{end}} +
    + {{end}} +
    + {{end}} +
    + {{if $allowedToChangeTeams}} +
    + {{.CsrfTokenHtml}} +
    + +
    + +
    + {{else}} +
    + {{$.locale.Tr "repo.settings.change_team_access_not_allowed"}} +
    + {{end}} +
    + {{end}} +
    + + + +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/deploy_keys.tmpl b/src/templates/repo/settings/deploy_keys.tmpl new file mode 100644 index 0000000..621e1fa --- /dev/null +++ b/src/templates/repo/settings/deploy_keys.tmpl @@ -0,0 +1,86 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings")}} +
    +

    + {{.locale.Tr "repo.settings.deploy_keys"}} +
    + {{if not .DisableSSH}} + + {{else}} + + {{end}} +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + {{.locale.Tr "repo.settings.deploy_key_desc"}} +
    +
    + + +
    +
    + + +
    +
    +
    + + + {{$.locale.Tr "repo.settings.is_writable_info" | Str2html}} +
    +
    + + +
    +
    + {{if .Deploykeys}} +
    + {{range .Deploykeys}} +
    +
    + +
    +
    + {{svg "octicon-key" 32}} +
    +
    + {{.Name}} +
    + {{.Fingerprint}} +
    +
    + {{$.locale.Tr "settings.added_on" (DateTime "short" .CreatedUnix) | Safe}} — {{svg "octicon-info"}} {{if .HasUsed}}{{$.locale.Tr "settings.last_used"}} {{DateTime "short" .UpdatedUnix}}{{else}}{{$.locale.Tr "settings.no_activity"}}{{end}} - {{$.locale.Tr "settings.can_read_info"}}{{if not .IsReadOnly}} / {{$.locale.Tr "settings.can_write_info"}} {{end}} +
    +
    +
    + {{end}} +
    + {{else}} + {{.locale.Tr "repo.settings.no_deploy_keys"}} + {{end}} +
    +
    + + + +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/githook_edit.tmpl b/src/templates/repo/settings/githook_edit.tmpl new file mode 100644 index 0000000..3d212b5 --- /dev/null +++ b/src/templates/repo/settings/githook_edit.tmpl @@ -0,0 +1,27 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings edit githook")}} +
    +

    + {{.locale.Tr "repo.settings.githooks"}} +

    +
    +

    {{.locale.Tr "repo.settings.githook_edit_desc"}}

    +
    + {{.CsrfTokenHtml}} + {{with .Hook}} +
    + + {{.Name}} +
    +
    + + +
    +
    +
    + +
    + {{end}} +
    +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/githooks.tmpl b/src/templates/repo/settings/githooks.tmpl new file mode 100644 index 0000000..c0bf91f --- /dev/null +++ b/src/templates/repo/settings/githooks.tmpl @@ -0,0 +1,23 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings githooks")}} +
    +

    + {{.locale.Tr "repo.settings.githooks"}} +

    +
    +
    +
    + {{.locale.Tr "repo.settings.githooks_desc" | Str2html}} +
    + {{range .Hooks}} +
    + {{svg "octicon-dot-fill" 22}} + {{.Name}} + + {{svg "octicon-pencil"}} + +
    + {{end}} +
    +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/layout_footer.tmpl b/src/templates/repo/settings/layout_footer.tmpl new file mode 100644 index 0000000..60cad3f --- /dev/null +++ b/src/templates/repo/settings/layout_footer.tmpl @@ -0,0 +1,11 @@ +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    + {{/* block: repo-setting-content */}} +{{end}} + +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/settings/layout_head.tmpl b/src/templates/repo/settings/layout_head.tmpl new file mode 100644 index 0000000..3117309 --- /dev/null +++ b/src/templates/repo/settings/layout_head.tmpl @@ -0,0 +1,14 @@ +{{template "base/head" .ctxData}} +
    + {{template "repo/header" .ctxData}} +
    + {{template "repo/settings/navbar" .ctxData}} +
    + {{template "base/alert" .ctxData}} + {{/* block: repo-setting-content */}} + +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    +{{end}} diff --git a/src/templates/repo/settings/lfs.tmpl b/src/templates/repo/settings/lfs.tmpl new file mode 100644 index 0000000..4d469a3 --- /dev/null +++ b/src/templates/repo/settings/lfs.tmpl @@ -0,0 +1,55 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}} +
    +

    + {{.locale.Tr "repo.settings.lfs_filelist"}} ({{.locale.Tr "admin.total" .Total}}) + +

    + + + {{range .LFSFiles}} + + + + + + + {{else}} + + + + {{end}} + +
    + + + {{ShortSha .Oid}} + + + {{FileSize .Size}}{{TimeSince .CreatedUnix.AsTime $.locale}} + {{$.locale.Tr "repo.settings.lfs_findcommits"}} + +
    {{.locale.Tr "repo.settings.lfs_no_lfs_files"}}
    + {{template "base/paginate" .}} + {{range .LFSFiles}} + + {{end}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/lfs_file.tmpl b/src/templates/repo/settings/lfs_file.tmpl new file mode 100644 index 0000000..de6f010 --- /dev/null +++ b/src/templates/repo/settings/lfs_file.tmpl @@ -0,0 +1,57 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}} +
    +
    +

    + {{.locale.Tr "repo.settings.lfs"}} / {{.LFSFile.Oid}} + +

    +
    + {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}} +
    + {{if .IsMarkup}} + {{if .FileContent}}{{.FileContent | Safe}}{{end}} + {{else if .IsPlainText}} +
    {{if .FileContent}}{{.FileContent | Safe}}{{end}}
    + {{else if not .IsTextFile}} +
    + {{if .IsImageFile}} + + {{else if .IsVideoFile}} + + {{else if .IsAudioFile}} + + {{else if .IsPDFFile}} +
    + {{else}} + {{.locale.Tr "repo.file_view_raw"}} + {{end}} +
    + {{else if .FileSize}} + + + + {{if .IsFileTooLarge}} + + {{else}} + + + {{end}} + + +
    {{.locale.Tr "repo.file_too_large"}}{{.LineNums}}
      {{.FileContent}}
    + {{end}} +
    +
    +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/lfs_file_find.tmpl b/src/templates/repo/settings/lfs_file_find.tmpl new file mode 100644 index 0000000..b85f67f --- /dev/null +++ b/src/templates/repo/settings/lfs_file_find.tmpl @@ -0,0 +1,46 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}} +
    +
    +

    + {{.locale.Tr "repo.settings.lfs"}} / {{.Oid}} +

    + + + {{range .Results}} + + + + + + + + {{else}} + + + + {{end}} + +
    + {{svg "octicon-file"}} + {{.Name}} + + + + {{.Summary | RenderEmoji $.Context}} + + + + {{svg "octicon-git-branch"}}{{.BranchName}} + + {{if .ParentHashes}} + {{$.locale.Tr "repo.diff.parent"}} + {{range .ParentHashes}} + {{ShortSha .String}} + {{end}} + {{end}} + {{$.locale.Tr "repo.diff.commit"}} + {{ShortSha .SHA}} + {{TimeSince .When $.locale}}
    {{.locale.Tr "repo.settings.lfs_lfs_file_no_commits"}}
    +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/lfs_locks.tmpl b/src/templates/repo/settings/lfs_locks.tmpl new file mode 100644 index 0000000..8fa3dfd --- /dev/null +++ b/src/templates/repo/settings/lfs_locks.tmpl @@ -0,0 +1,56 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}} +
    +
    +

    + {{.locale.Tr "repo.settings.lfs"}} / {{.locale.Tr "repo.settings.lfs_locks"}} ({{.locale.Tr "admin.total" .Total}}) +

    +
    +
    + {{$.CsrfTokenHtml}} +
    + + +
    +
    +
    + + + {{range $index, $lock := .LFSLocks}} + + + + + + + {{else}} + + + + {{end}} + +
    + {{if index $.Linkable $index}} + {{svg "octicon-file"}} + {{$lock.Path}} + {{else}} + {{svg "octicon-diff"}} + {{$lock.Path}} + {{end}} + {{if not (index $.Lockables $index)}} + {{svg "octicon-alert"}} + {{end}} + + + {{avatar $.Context $.Owner}} + {{$.Owner.DisplayName}} + + {{TimeSince .Created $.locale}} +
    + {{$.CsrfTokenHtml}} + +
    +
    {{.locale.Tr "repo.settings.lfs_locks_no_locks"}}
    + {{template "base/paginate" .}} +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/lfs_pointers.tmpl b/src/templates/repo/settings/lfs_pointers.tmpl new file mode 100644 index 0000000..5f0cf31 --- /dev/null +++ b/src/templates/repo/settings/lfs_pointers.tmpl @@ -0,0 +1,66 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}} +
    +

    + {{.locale.Tr "repo.settings.lfs_pointers.found" .NumPointers .NumAssociated .NumNotAssociated .NumNoExist}} + {{if gt .NumAssociatable 0}} +
    +
    + {{.CsrfTokenHtml}} + {{range .Pointers}} + {{if .Associatable}} + + {{end}} + {{end}} + +
    +
    + {{end}} +

    +
    + + + + + + + + + + + + + {{range .Pointers}} + + + + + + + + + {{end}} + +
    {{.locale.Tr "repo.settings.lfs_pointers.sha"}}{{.locale.Tr "repo.settings.lfs_pointers.oid"}}{{.locale.Tr "repo.settings.lfs_pointers.inRepo"}}{{.locale.Tr "repo.settings.lfs_pointers.exists"}}{{.locale.Tr "repo.settings.lfs_pointers.accessible"}}
    + + + {{ShortSha .SHA}} + + + + + {{if and .Exists .InRepo}} + + {{ShortSha .Oid}} + + {{else}} + + {{end}} + + + {{$.locale.Tr "repo.settings.lfs_findcommits"}} + {{if .InRepo}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{if .Exists}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}{{if .Accessible}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
    +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/nav.tmpl b/src/templates/repo/settings/nav.tmpl new file mode 100644 index 0000000..4a88d69 --- /dev/null +++ b/src/templates/repo/settings/nav.tmpl @@ -0,0 +1,19 @@ + diff --git a/src/templates/repo/settings/navbar.tmpl b/src/templates/repo/settings/navbar.tmpl new file mode 100644 index 0000000..e21f23f --- /dev/null +++ b/src/templates/repo/settings/navbar.tmpl @@ -0,0 +1,50 @@ +
    + +
    diff --git a/src/templates/repo/settings/options.tmpl b/src/templates/repo/settings/options.tmpl new file mode 100644 index 0000000..1e940c5 --- /dev/null +++ b/src/templates/repo/settings/options.tmpl @@ -0,0 +1,1030 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings options")}} +
    +

    + {{.locale.Tr "repo.settings.basic_settings"}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + + +
    +
    + + {{FileSize .Repository.Size}} +
    +
    + +
    + + +
    +
    + {{if not .Repository.IsFork}} +
    + +
    + {{if .IsAdmin}} + + {{else}} + + {{end}} + +
    +
    + {{end}} +
    + + +
    +
    + + +
    + +
    + +
    +
    + +
    + +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    + + {{$.locale.Tr "settings.delete_current_avatar"}} +
    +
    + +
    + + + {{/* These variables exist to make the logic in the Settings window easier to comprehend and are not used later on. */}} + {{$newMirrorsPartiallyEnabled := or (not .DisableNewPullMirrors) (not .DisableNewPushMirrors)}} + {{/* .Repository.IsMirror is not always reliable if the repository is not actively acting as a mirror because of errors. */}} + {{$showMirrorSettings := or $newMirrorsPartiallyEnabled .Repository.IsMirror .PullMirror .PushMirrors}} + {{$newMirrorsEntirelyEnabled := and (not .DisableNewPullMirrors) (not .DisableNewPushMirrors)}} + {{$onlyNewPushMirrorsEnabled := and (not .DisableNewPushMirrors) .DisableNewPullMirrors}} + {{$onlyNewPullMirrorsEnabled := and .DisableNewPushMirrors (not .DisableNewPullMirrors)}} + {{$existingPushMirror := or .Repository.IsMirror .PushMirrors}} + {{$modifyBrokenPullMirror := and .Repository.IsMirror (not .PullMirror)}} + {{$isWorkingPullMirror := .PullMirror}} + + {{if $showMirrorSettings}} +

    + {{.locale.Tr "repo.settings.mirror_settings"}} +

    +
    + {{if $newMirrorsEntirelyEnabled}} + {{$.locale.Tr "repo.settings.mirror_settings.docs"}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}

    + {{$.locale.Tr "repo.settings.mirror_settings.docs.pull_mirror_instructions"}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}
    + {{else if $onlyNewPushMirrorsEnabled}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.disabled_pull_mirror.instructions"}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}
    + {{else if $onlyNewPullMirrorsEnabled}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.instructions"}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning"}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}

    + {{$.locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.info"}} + {{if $existingPushMirror}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.can_still_use"}} + {{end}} + {{else}} + {{$.locale.Tr "repo.settings.mirror_settings.docs.no_new_mirrors"}} {{$.locale.Tr "repo.settings.mirror_settings.docs.can_still_use"}}
    + {{end}} + + {{if $existingPushMirror}} + + + + + + + + + {{end}} + {{if $modifyBrokenPullMirror}} + {{/* even if a repo is a pull mirror (IsMirror=true), the PullMirror might still be nil if the mirror migration is broken */}} + + + + + + {{else if $isWorkingPullMirror}} + + + + + + + + + + + + + {{end}}{{/* end if: IsMirror */}} + + {{range .PushMirrors}} + + {{$address := MirrorRemoteAddress $.Context $.Repository .GetRemoteName true}} + + + + + + {{else}} + + + + {{end}} + {{if (not .DisableNewPushMirrors)}} + + + + {{end}} + +
    {{$.locale.Tr "repo.settings.mirror_settings.mirrored_repository"}}{{$.locale.Tr "repo.settings.mirror_settings.direction"}}{{$.locale.Tr "repo.settings.mirror_settings.last_update"}}
    + {{$.locale.Tr "repo.settings.mirror_settings.direction.pull"}}: {{$.locale.Tr "error.occurred"}} +
    {{(MirrorRemoteAddress $.Context .Repository .PullMirror.GetRemoteName false).Address}}{{$.locale.Tr "repo.settings.mirror_settings.direction.pull"}}{{DateTime "full" .PullMirror.UpdatedUnix}} +
    + {{.CsrfTokenHtml}} + + +
    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + +
    + + +
    +
    +
    + + +
    + {{$address := MirrorRemoteAddress $.Context .Repository .PullMirror.GetRemoteName false}} +
    + + +

    {{.locale.Tr "repo.mirror_address_desc"}}

    +
    +
    + + {{.locale.Tr "repo.need_auth"}} + +
    +
    + + +
    +
    + + +
    +

    {{.locale.Tr "repo.mirror_password_help"}}

    +
    +
    + + {{if .LFSStartServer}} +
    + +
    + + +
    +
    +
    + + +

    {{.locale.Tr "repo.mirror_lfs_endpoint_desc" "https://github.com/git-lfs/git-lfs/blob/main/docs/api/server-discovery.md#server-discovery" | Str2html}}

    +
    + {{end}} +
    + +
    +
    +
    {{$address.Address}}{{$.locale.Tr "repo.settings.mirror_settings.direction.push"}}{{if .LastUpdateUnix}}{{DateTime "full" .LastUpdateUnix}}{{else}}{{$.locale.Tr "never"}}{{end}} {{if .LastError}}
    {{$.locale.Tr "error"}}
    {{end}}
    +
    + {{$.CsrfTokenHtml}} + + + +
    +
    + {{$.CsrfTokenHtml}} + + + +
    +
    {{$.locale.Tr "repo.settings.mirror_settings.push_mirror.none"}}
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + + +

    {{.locale.Tr "repo.mirror_address_desc"}}

    +
    +
    + + {{.locale.Tr "repo.need_auth"}} + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + {{end}} + +

    + {{.locale.Tr "repo.settings.advanced_settings"}} +

    +
    +
    + {{.CsrfTokenHtml}} + + + {{$isCodeEnabled := .Repository.UnitEnabled $.Context $.UnitTypeCode}} +
    + + {{if .UnitTypeCode.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    + + {{$isWikiEnabled := or (.Repository.UnitEnabled $.Context $.UnitTypeWiki) (.Repository.UnitEnabled $.Context $.UnitTypeExternalWiki)}} +
    + + {{if and (.UnitTypeWiki.UnitGlobalDisabled) (.UnitTypeExternalWiki.UnitGlobalDisabled)}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    +
    + {{if .UnitTypeWiki.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    + {{if .UnitTypeExternalWiki.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.external_wiki_url_desc"}}

    +
    +
    + +
    + + {{$isIssuesEnabled := or (.Repository.UnitEnabled $.Context $.UnitTypeIssues) (.Repository.UnitEnabled $.Context $.UnitTypeExternalTracker)}} +
    + + {{if and (.UnitTypeIssues.UnitGlobalDisabled) (.UnitTypeExternalTracker.UnitGlobalDisabled)}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    +
    + {{if .UnitTypeIssues.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    + {{if .Repository.CanEnableTimetracker}} +
    +
    + + +
    +
    +
    +
    + + +
    +
    + {{end}} +
    +
    + + +
    +
    +
    + + +
    +
    +
    + {{if .UnitTypeExternalTracker.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.external_tracker_url_desc"}}

    +
    +
    + + +

    {{.locale.Tr "repo.settings.tracker_url_format_desc" | Str2html}}

    +
    +
    + +
    +
    + {{$externalTracker := (.Repository.MustGetUnit $.Context $.UnitTypeExternalTracker)}} + {{$externalTrackerStyle := $externalTracker.ExternalTrackerConfig.ExternalTrackerStyle}} + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.tracker_issue_style.regexp_pattern_desc" | Str2html}}

    +
    +
    +
    + +
    + + {{$isProjectsEnabled := .Repository.UnitEnabled $.Context $.UnitTypeProjects}} +
    + + {{if .UnitTypeProjects.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    + + {{$isReleasesEnabled := .Repository.UnitEnabled $.Context $.UnitTypeReleases}} +
    + + {{if .UnitTypeReleases.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    + + {{$isPackagesEnabled := .Repository.UnitEnabled $.Context $.UnitTypePackages}} +
    + + {{if .UnitTypePackages.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    + + {{if .EnableActions}} + {{$isActionsEnabled := .Repository.UnitEnabled $.Context $.UnitTypeActions}} +
    + + {{if .UnitTypeActions.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    + {{end}} + + {{if not .IsMirror}} +
    + {{$pullRequestEnabled := .Repository.UnitEnabled $.Context $.UnitTypePullRequests}} + {{$prUnit := .Repository.MustGetUnit $.Context $.UnitTypePullRequests}} +
    + + {{if .UnitTypePullRequests.UnitGlobalDisabled}} +
    + {{else}} +
    + {{end}} + + +
    +
    +
    +
    +

    + {{.locale.Tr "repo.settings.merge_style_desc"}} +

    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +

    + {{.locale.Tr "repo.settings.default_merge_style_desc"}} +

    + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + {{end}} + +
    +
    + +
    + +
    + +

    + {{.locale.Tr "repo.settings.signing_settings"}} +

    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.trust_model.default.desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.trust_model.collaborator.desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.trust_model.committer.desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.trust_model.collaboratorcommitter.desc"}}

    +
    +
    +
    + +
    +
    + +
    +
    +
    + + {{if .IsAdmin}} +

    + {{.locale.Tr "repo.settings.admin_settings"}} +

    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + + +
    +
    + +
    + +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + + {{if .CodeIndexerEnabled}} +

    {{.locale.Tr "repo.settings.admin_code_indexer"}}

    +
    + + + {{if .CodeIndexerStatus}} + + {{ShortSha .CodeIndexerStatus.CommitSha}} + + {{else}} + {{.locale.Tr "repo.settings.admin_indexer_unindexed"}} + {{end}} + +
    + +
    +
    + {{end}} +

    {{.locale.Tr "repo.settings.admin_stats_indexer"}}

    +
    + + + {{if .StatsIndexerStatus}} + + {{ShortSha .StatsIndexerStatus.CommitSha}} + + {{else}} + {{.locale.Tr "repo.settings.admin_indexer_unindexed"}} + {{end}} + +
    + +
    +
    +
    +
    + {{end}} + + {{if .Permission.IsOwner}} +

    + {{.locale.Tr "repo.settings.danger_zone"}} +

    +
    + {{if .Repository.IsMirror}} +
    +
    + +
    +
    +
    {{.locale.Tr "repo.settings.convert"}}
    +

    {{.locale.Tr "repo.settings.convert_desc"}}

    +
    +
    +
    + {{end}} + {{if and .Repository.IsFork .Repository.Owner.CanCreateRepo}} +
    +
    + +
    +
    +
    {{.locale.Tr "repo.settings.convert_fork"}}
    +

    {{.locale.Tr "repo.settings.convert_fork_desc"}}

    +
    +
    +
    + {{end}} +
    +
    + {{if .RepoTransfer}} +
    + {{.CsrfTokenHtml}} + + +
    + {{else}} + + {{end}} +
    +
    +
    {{.locale.Tr "repo.settings.transfer"}}
    + {{if .RepoTransfer}} +

    {{.locale.Tr "repo.settings.transfer_started" .RepoTransfer.Recipient.DisplayName}}

    + {{else}} +

    {{.locale.Tr "repo.settings.transfer_desc"}}

    + {{end}} +
    +
    + + {{if .Permission.CanRead $.UnitTypeWiki}} +
    + +
    +
    + +
    +
    +
    {{.locale.Tr "repo.settings.wiki_delete"}}
    +

    {{.locale.Tr "repo.settings.wiki_delete_desc"}}

    +
    +
    + {{end}} + +
    + +
    +
    + +
    +
    +
    {{.locale.Tr "repo.settings.delete"}}
    +

    {{.locale.Tr "repo.settings.delete_desc"}}

    +
    +
    + + {{if not .Repository.IsMirror}} +
    + +
    +
    + +
    +
    + {{if .Repository.IsArchived}} +
    {{.locale.Tr "repo.settings.unarchive.header"}}
    +

    {{.locale.Tr "repo.settings.unarchive.text"}}

    + {{else}} +
    {{.locale.Tr "repo.settings.archive.header"}}
    +

    {{.locale.Tr "repo.settings.archive.text"}}

    + {{end}} +
    +
    + {{end}} +
    + {{end}} +
    +{{template "repo/settings/layout_footer" .}} + +{{if .Permission.IsOwner}} + {{if .Repository.IsMirror}} + + {{end}} + {{if and .Repository.IsFork .Repository.Owner.CanCreateRepo}} + + {{end}} + + + + + {{if .Repository.UnitEnabled $.Context $.UnitTypeWiki}} + + {{end}} + + {{if not .Repository.IsMirror}} + + {{end}} +{{end}} diff --git a/src/templates/repo/settings/protected_branch.tmpl b/src/templates/repo/settings/protected_branch.tmpl new file mode 100644 index 0000000..42c7819 --- /dev/null +++ b/src/templates/repo/settings/protected_branch.tmpl @@ -0,0 +1,263 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings branches")}} +
    +
    +

    + {{.locale.Tr "repo.settings.branch_protection" (.Rule.RuleName|Escape) | Str2html}} +

    +
    +
    {{.locale.Tr "repo.settings.protect_patterns"}}
    +
    + + + +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_protected_file_patterns_desc" | Safe}}

    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_unprotected_file_patterns_desc" | Safe}}

    +
    + + {{.CsrfTokenHtml}} +
    {{.locale.Tr "repo.settings.event_push"}}
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_disable_push_desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_enable_push_desc"}}

    +
    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_whitelist_committers_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    + + +
    +
    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.require_signed_commits_desc"}}

    +
    +
    +
    {{.locale.Tr "repo.settings.event_pull_request_approvals"}}
    +
    + + +

    {{.locale.Tr "repo.settings.protect_required_approvals_desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_approvals_whitelist_enabled_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.dismiss_stale_approvals_desc"}}

    +
    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_check_status_contexts_desc"}}

    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_status_check_patterns_desc"}}

    + + + + + + + + {{range $.recent_status_checks}} + + + + {{else}} + + {{end}} + +
    {{.locale.Tr "repo.settings.protect_check_status_contexts_list"}}
    + {{.}} + {{$.locale.Tr "repo.settings.protect_status_check_matched"}} +
    -
    +
    +
    +
    {{.locale.Tr "repo.settings.event_pull_request_merge"}}
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_enable_merge_desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.protect_merge_whitelist_committers_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.block_rejected_reviews_desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.block_on_official_review_requests_desc"}}

    +
    +
    +
    +
    + + +

    {{.locale.Tr "repo.settings.block_outdated_branch_desc"}}

    +
    +
    +
    + +
    + +
    +
    +
    +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/runner_edit.tmpl b/src/templates/repo/settings/runner_edit.tmpl new file mode 100644 index 0000000..8b76aea --- /dev/null +++ b/src/templates/repo/settings/runner_edit.tmpl @@ -0,0 +1,5 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings runners")}} +
    + {{template "shared/actions/runner_edit" .}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/secrets.tmpl b/src/templates/repo/settings/secrets.tmpl new file mode 100644 index 0000000..0b89639 --- /dev/null +++ b/src/templates/repo/settings/secrets.tmpl @@ -0,0 +1,5 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings")}} +
    + {{template "shared/secrets/add_list" .}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/tags.tmpl b/src/templates/repo/settings/tags.tmpl new file mode 100644 index 0000000..e618c3f --- /dev/null +++ b/src/templates/repo/settings/tags.tmpl @@ -0,0 +1,126 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings edit")}} +
    + {{if .Repository.IsArchived}} +
    + {{.locale.Tr "repo.settings.archive.tagsettings_unavailable"}} +
    + {{else}} +

    + {{.locale.Tr "repo.settings.tags.protection"}} +

    + +
    +
    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    + {{if .PageIsEditProtectedTag}} + + + {{$.locale.Tr "cancel"}} + + {{else}} + + {{end}} +
    +
    +
    +
    + +
    + + + + + + + + {{range .ProtectedTags}} + + + + + + {{else}} + + {{end}} + +
    {{.locale.Tr "repo.settings.tags.protection.pattern"}}{{.locale.Tr "repo.settings.tags.protection.allowed"}}
    {{.NamePattern}}
    + {{if or .AllowlistUserIDs (and $.Owner.IsOrganization .AllowlistTeamIDs)}} + {{$userIDs := .AllowlistUserIDs}} + {{range $.Users}} + {{if SliceUtils.Contains $userIDs .ID}} + {{avatar $.Context . 26}} {{.GetDisplayName}} + {{end}} + {{end}} + {{if $.Owner.IsOrganization}} + {{$teamIDs := .AllowlistTeamIDs}} + {{range $.Teams}} + {{if SliceUtils.Contains $teamIDs .ID}} + {{.Name}} + {{end}} + {{end}} + {{end}} + {{else}} + {{$.locale.Tr "repo.settings.tags.protection.allowed.noone"}} + {{end}} + + {{$.locale.Tr "edit"}} +
    + {{$.CsrfTokenHtml}} + + +
    +
    {{.locale.Tr "repo.settings.tags.protection.none"}}
    +
    +
    +
    + {{end}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/webhook/base.tmpl b/src/templates/repo/settings/webhook/base.tmpl new file mode 100644 index 0000000..d524722 --- /dev/null +++ b/src/templates/repo/settings/webhook/base.tmpl @@ -0,0 +1,5 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings webhooks")}} +
    + {{template "repo/settings/webhook/list" .}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/webhook/base_list.tmpl b/src/templates/repo/settings/webhook/base_list.tmpl new file mode 100644 index 0000000..663fde1 --- /dev/null +++ b/src/templates/repo/settings/webhook/base_list.tmpl @@ -0,0 +1,58 @@ +

    + {{.Title}} + +

    +
    +
    +
    + {{.Description | Str2html}} +
    + {{range .Webhooks}} +
    + {{svg "octicon-dot-fill" 22}} + {{.URL}} + {{svg "octicon-pencil"}} + {{svg "octicon-trash"}} +
    + {{end}} +
    +
    diff --git a/src/templates/repo/settings/webhook/delete_modal.tmpl b/src/templates/repo/settings/webhook/delete_modal.tmpl new file mode 100644 index 0000000..b78e69e --- /dev/null +++ b/src/templates/repo/settings/webhook/delete_modal.tmpl @@ -0,0 +1,10 @@ + diff --git a/src/templates/repo/settings/webhook/dingtalk.tmpl b/src/templates/repo/settings/webhook/dingtalk.tmpl new file mode 100644 index 0000000..25d5adf --- /dev/null +++ b/src/templates/repo/settings/webhook/dingtalk.tmpl @@ -0,0 +1,11 @@ +{{if eq .HookType "dingtalk"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://dingtalk.com" (.locale.Tr "repo.settings.web_hook_name_dingtalk") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/discord.tmpl b/src/templates/repo/settings/webhook/discord.tmpl new file mode 100644 index 0000000..76c7c6b --- /dev/null +++ b/src/templates/repo/settings/webhook/discord.tmpl @@ -0,0 +1,19 @@ +{{if eq .HookType "discord"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://discord.com" (.locale.Tr "repo.settings.web_hook_name_discord") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/feishu.tmpl b/src/templates/repo/settings/webhook/feishu.tmpl new file mode 100644 index 0000000..7de4430 --- /dev/null +++ b/src/templates/repo/settings/webhook/feishu.tmpl @@ -0,0 +1,12 @@ +{{if eq .HookType "feishu"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://feishu.cn" (.locale.Tr "repo.settings.web_hook_name_feishu") | Str2html}}

    +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://larksuite.com" (.locale.Tr "repo.settings.web_hook_name_larksuite") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/gitea.tmpl b/src/templates/repo/settings/webhook/gitea.tmpl new file mode 100644 index 0000000..062948b --- /dev/null +++ b/src/templates/repo/settings/webhook/gitea.tmpl @@ -0,0 +1,40 @@ +{{if eq .HookType "gitea"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://docs.gitea.io/en-us/webhooks/" (.locale.Tr "repo.settings.web_hook_name_gitea") | Str2html}}

    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/gogs.tmpl b/src/templates/repo/settings/webhook/gogs.tmpl new file mode 100644 index 0000000..f4353fc --- /dev/null +++ b/src/templates/repo/settings/webhook/gogs.tmpl @@ -0,0 +1,28 @@ +{{if eq .HookType "gogs"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://docs.gitea.io/en-us/webhooks/" (.locale.Tr "repo.settings.web_hook_name_gogs") | Str2html}}

    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/history.tmpl b/src/templates/repo/settings/webhook/history.tmpl new file mode 100644 index 0000000..7020bf0 --- /dev/null +++ b/src/templates/repo/settings/webhook/history.tmpl @@ -0,0 +1,81 @@ +{{if .PageIsSettingsHooksEdit}} +

    + {{.locale.Tr "repo.settings.recent_deliveries"}} + {{if .Permission.IsAdmin}} +
    + +
    + {{end}} +

    +
    +
    + {{range .History}} +
    +
    + {{if .IsSucceed}} + {{svg "octicon-check"}} + {{else}} + {{svg "octicon-alert"}} + {{end}} + {{.UUID}} +
    + + {{TimeSince .Delivered.AsTime $.locale}} + +
    +
    +
    + +
    + {{if .RequestInfo}} +
    {{$.locale.Tr "repo.settings.webhook.headers"}}
    +
    Request URL: {{.RequestInfo.URL}}
    +Request method: {{if .RequestInfo.HTTPMethod}}{{.RequestInfo.HTTPMethod}}{{else}}POST{{end}}
    +{{range $key, $val := .RequestInfo.Headers}}{{$key}}: {{$val}}
    +{{end}}
    +
    {{$.locale.Tr "repo.settings.webhook.payload"}}
    +
    {{.PayloadContent}}
    + {{else}} + - + {{end}} +
    +
    + {{if .ResponseInfo}} +
    {{$.locale.Tr "repo.settings.webhook.headers"}}
    +
    {{range $key, $val := .ResponseInfo.Headers}}{{$key}}: {{$val}}
    +{{end}}
    +
    {{$.locale.Tr "repo.settings.webhook.body"}}
    +
    {{.ResponseInfo.Body}}
    + {{else}} + - + {{end}} +
    +
    +
    + {{end}} +
    +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/list.tmpl b/src/templates/repo/settings/webhook/list.tmpl new file mode 100644 index 0000000..b24159f --- /dev/null +++ b/src/templates/repo/settings/webhook/list.tmpl @@ -0,0 +1,4 @@ + +{{template "repo/settings/webhook/base_list" .}} + +{{template "repo/settings/webhook/delete_modal" .}} diff --git a/src/templates/repo/settings/webhook/matrix.tmpl b/src/templates/repo/settings/webhook/matrix.tmpl new file mode 100644 index 0000000..d3ab558 --- /dev/null +++ b/src/templates/repo/settings/webhook/matrix.tmpl @@ -0,0 +1,27 @@ +{{if eq .HookType "matrix"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://matrix.org/" (.locale.Tr "repo.settings.web_hook_name_matrix") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/msteams.tmpl b/src/templates/repo/settings/webhook/msteams.tmpl new file mode 100644 index 0000000..fecb4d9 --- /dev/null +++ b/src/templates/repo/settings/webhook/msteams.tmpl @@ -0,0 +1,11 @@ +{{if eq .HookType "msteams"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://teams.microsoft.com" (.locale.Tr "repo.settings.web_hook_name_msteams") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/new.tmpl b/src/templates/repo/settings/webhook/new.tmpl new file mode 100644 index 0000000..73d6726 --- /dev/null +++ b/src/templates/repo/settings/webhook/new.tmpl @@ -0,0 +1,47 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings new webhook")}} +
    +

    + {{if .PageIsSettingsHooksNew}}{{.locale.Tr "repo.settings.add_webhook"}}{{else}}{{.locale.Tr "repo.settings.update_webhook"}}{{end}} +
    + {{if eq .HookType "gitea"}} + + {{else if eq .HookType "gogs"}} + + {{else if eq .HookType "slack"}} + + {{else if eq .HookType "discord"}} + + {{else if eq .HookType "dingtalk"}} + + {{else if eq .HookType "telegram"}} + + {{else if eq .HookType "msteams"}} + + {{else if eq .HookType "feishu"}} + + {{else if eq .HookType "matrix"}} + {{svg "gitea-matrix" 26}} + {{else if eq .HookType "wechatwork"}} + + {{else if eq .HookType "packagist"}} + + {{end}} +
    +

    +
    + {{template "repo/settings/webhook/gitea" .}} + {{template "repo/settings/webhook/gogs" .}} + {{template "repo/settings/webhook/slack" .}} + {{template "repo/settings/webhook/discord" .}} + {{template "repo/settings/webhook/dingtalk" .}} + {{template "repo/settings/webhook/telegram" .}} + {{template "repo/settings/webhook/msteams" .}} + {{template "repo/settings/webhook/feishu" .}} + {{template "repo/settings/webhook/matrix" .}} + {{template "repo/settings/webhook/wechatwork" .}} + {{template "repo/settings/webhook/packagist" .}} +
    + + {{template "repo/settings/webhook/history" .}} +
    +{{template "repo/settings/layout_footer" .}} diff --git a/src/templates/repo/settings/webhook/packagist.tmpl b/src/templates/repo/settings/webhook/packagist.tmpl new file mode 100644 index 0000000..43c1f17 --- /dev/null +++ b/src/templates/repo/settings/webhook/packagist.tmpl @@ -0,0 +1,19 @@ +{{if eq .HookType "packagist"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://packagist.org" (.locale.Tr "repo.settings.web_hook_name_packagist") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/settings.tmpl b/src/templates/repo/settings/webhook/settings.tmpl new file mode 100644 index 0000000..8b03a3c --- /dev/null +++ b/src/templates/repo/settings/webhook/settings.tmpl @@ -0,0 +1,288 @@ +{{$isNew:=or .PageIsSettingsHooksNew .PageIsAdminDefaultHooksNew .PageIsAdminSystemHooksNew}} +
    +

    {{.locale.Tr "repo.settings.event_desc"}}

    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    + +
    + +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_create_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_delete_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_fork_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_push_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_repository_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_release_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_package_desc"}} +
    +
    +
    + + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_wiki_desc"}} +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_issues_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_issue_assign_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_issue_label_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_issue_milestone_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_issue_comment_desc"}} +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_assign_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_label_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_milestone_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_comment_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_review_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_sync_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{.locale.Tr "repo.settings.event_pull_request_review_request_desc"}} +
    +
    +
    +
    +
    + + +
    + + + {{.locale.Tr "repo.settings.branch_filter_desc" | Str2html}} +
    + + +
    + + + {{if ne .HookType "matrix"}}{{/* Matrix doesn't make the authorization optional but it is implied by the help string, should be changed.*/}} + {{.locale.Tr "repo.settings.authorization_header_desc" "Bearer token123456, Basic YWxhZGRpbjpvcGVuc2VzYW1l" | Str2html}} + {{end}} +
    + +
    + +
    +
    + + + {{.locale.Tr "repo.settings.active_helper"}} +
    +
    +
    + {{if $isNew}} + + {{else}} + + {{.locale.Tr "repo.settings.delete_webhook"}} + {{end}} +
    + +{{template "repo/settings/webhook/delete_modal" .}} diff --git a/src/templates/repo/settings/webhook/slack.tmpl b/src/templates/repo/settings/webhook/slack.tmpl new file mode 100644 index 0000000..762cfb3 --- /dev/null +++ b/src/templates/repo/settings/webhook/slack.tmpl @@ -0,0 +1,28 @@ +{{if eq .HookType "slack"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://slack.com" (.locale.Tr "repo.settings.web_hook_name_slack") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/telegram.tmpl b/src/templates/repo/settings/webhook/telegram.tmpl new file mode 100644 index 0000000..4313980 --- /dev/null +++ b/src/templates/repo/settings/webhook/telegram.tmpl @@ -0,0 +1,15 @@ +{{if eq .HookType "telegram"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://core.telegram.org/bots" (.locale.Tr "repo.settings.web_hook_name_telegram") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/settings/webhook/wechatwork.tmpl b/src/templates/repo/settings/webhook/wechatwork.tmpl new file mode 100644 index 0000000..a84bbfa --- /dev/null +++ b/src/templates/repo/settings/webhook/wechatwork.tmpl @@ -0,0 +1,11 @@ +{{if eq .HookType "wechatwork"}} +

    {{.locale.Tr "repo.settings.add_web_hook_desc" "https://work.weixin.qq.com" (.locale.Tr "repo.settings.web_hook_name_wechatwork") | Str2html}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{template "repo/settings/webhook/settings" .}} +
    +{{end}} diff --git a/src/templates/repo/shabox_badge.tmpl b/src/templates/repo/shabox_badge.tmpl new file mode 100644 index 0000000..2418d95 --- /dev/null +++ b/src/templates/repo/shabox_badge.tmpl @@ -0,0 +1,15 @@ +
    + {{if .verification.Verified}} +
    + {{if ne .verification.SigningUser.ID 0}} + {{svg "gitea-lock"}} + {{avatar $.root.Context .verification.SigningUser 28 "signature"}} + {{else}} + {{svg "gitea-lock-cog"}} + {{avatarByEmail $.root.Context .verification.SigningEmail "" 28 "signature"}} + {{end}} +
    + {{else}} + {{svg "gitea-unlock"}} + {{end}} +
    diff --git a/src/templates/repo/sub_menu.tmpl b/src/templates/repo/sub_menu.tmpl new file mode 100644 index 0000000..bfe5a20 --- /dev/null +++ b/src/templates/repo/sub_menu.tmpl @@ -0,0 +1,50 @@ +{{if and (not .HideRepoInfo) (not .IsBlame)}} +
    + + {{if and (.Permission.CanRead $.UnitTypeCode) (not .IsEmptyRepo) .LanguageStats}} + + + {{range .LanguageStats}} +
     
    + {{end}} +
    + {{end}} +
    +{{end}} diff --git a/src/templates/repo/tag/list.tmpl b/src/templates/repo/tag/list.tmpl new file mode 100644 index 0000000..8651bfe --- /dev/null +++ b/src/templates/repo/tag/list.tmpl @@ -0,0 +1,79 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} + {{template "repo/release_tag_header" .}} +

    +
    + {{svg "octicon-tag" 16 "gt-mr-2"}}{{.locale.Tr "repo.release.tags"}} +
    +

    + {{$canReadReleases := $.Permission.CanRead $.UnitTypeReleases}} +
    + + + {{range $idx, $release := .Releases}} + + + + {{end}} + +
    +

    + {{if $canReadReleases}} + {{.TagName}} + {{else}} + {{.TagName}} + {{end}} +

    +
    + {{if $.Permission.CanRead $.UnitTypeCode}} + {{if .CreatedUnix}} + {{svg "octicon-clock" 16 "gt-mr-2"}}{{TimeSinceUnix .CreatedUnix $.locale}} + {{end}} + + {{svg "octicon-git-commit" 16 "gt-mr-2"}}{{ShortSha .Sha1}} + + {{if not $.DisableDownloadSourceArchives}} + {{svg "octicon-file-zip" 16 "gt-mr-2"}}ZIP + {{svg "octicon-file-zip" 16 "gt-mr-2"}}TAR.GZ + {{end}} + + {{if (and $canReadReleases $.CanCreateRelease $release.IsTag)}} + {{svg "octicon-tag" 16 "gt-mr-2"}}{{$.locale.Tr "repo.release.new_release"}} + {{end}} + + {{if (and ($.Permission.CanWrite $.UnitTypeCode) $release.IsTag)}} + + {{svg "octicon-trash" 16 "gt-mr-2"}}{{$.locale.Tr "repo.release.delete_tag"}} + + {{end}} + + {{if and $canReadReleases (not $release.IsTag)}} + {{svg "octicon-tag" 16 "gt-mr-2"}}{{$.locale.Tr "repo.release.detail"}} + {{end}} + {{end}} +
    +
    +
    + + {{template "base/paginate" .}} +
    +
    + +{{if $.Permission.CanWrite $.UnitTypeCode}} + +{{end}} + + +{{template "base/footer" .}} diff --git a/src/templates/repo/unicode_escape_prompt.tmpl b/src/templates/repo/unicode_escape_prompt.tmpl new file mode 100644 index 0000000..12eff6a --- /dev/null +++ b/src/templates/repo/unicode_escape_prompt.tmpl @@ -0,0 +1,22 @@ +{{if .EscapeStatus}} + {{if .EscapeStatus.HasInvisible}} +
    + +
    + {{$.root.locale.Tr "repo.invisible_runes_header"}} +
    +

    {{$.root.locale.Tr "repo.invisible_runes_description" | Str2html}}

    + {{if .EscapeStatus.HasAmbiguous}} +

    {{$.root.locale.Tr "repo.ambiguous_runes_description" | Str2html}}

    + {{end}} +
    + {{else if .EscapeStatus.HasAmbiguous}} +
    + +
    + {{$.root.locale.Tr "repo.ambiguous_runes_header"}} +
    +

    {{$.root.locale.Tr "repo.ambiguous_runes_description" | Str2html}}

    +
    + {{end}} +{{end}} diff --git a/src/templates/repo/upload.tmpl b/src/templates/repo/upload.tmpl new file mode 100644 index 0000000..6ab4451 --- /dev/null +++ b/src/templates/repo/upload.tmpl @@ -0,0 +1,15 @@ +
    +
    +
    diff --git a/src/templates/repo/user_cards.tmpl b/src/templates/repo/user_cards.tmpl new file mode 100644 index 0000000..e956f65 --- /dev/null +++ b/src/templates/repo/user_cards.tmpl @@ -0,0 +1,29 @@ +
    + {{if .CardsTitle}} +

    + {{.CardsTitle}} +

    + {{end}} +
      + {{range .Cards}} +
    • + + {{avatar $.Context .}} + +

      {{.DisplayName}}

      + +
      + {{if .Website}} + {{svg "octicon-link"}} {{.Website}} + {{else if .Location}} + {{svg "octicon-location"}} {{.Location}} + {{else}} + {{svg "octicon-clock"}} {{$.locale.Tr "user.joined_on" (DateTime "short" .CreatedUnix) | Safe}} + {{end}} +
      +
    • + {{end}} +
    + + {{template "base/paginate" .}} +
    diff --git a/src/templates/repo/view_file.tmpl b/src/templates/repo/view_file.tmpl new file mode 100644 index 0000000..96339c9 --- /dev/null +++ b/src/templates/repo/view_file.tmpl @@ -0,0 +1,128 @@ +
    + {{- if .FileError}} +
    +
    {{.FileError}}
    +
    + {{end}} + {{- if .FileWarning}} +
    +
    {{.FileWarning}}
    +
    + {{end}} +

    +
    + {{if .ReadmeInList}} + {{svg "octicon-book" 16 "gt-mr-3"}} + {{.FileName}} + {{else}} + {{template "repo/file_info" .}} + {{end}} +
    +
    + {{if .HasSourceRenderedToggle}} + + {{end}} + {{if not .ReadmeInList}} +
    + {{.locale.Tr "repo.file_raw"}} + {{if not .IsViewCommit}} + {{.locale.Tr "repo.file_permalink"}} + {{end}} + {{if .IsRepresentableAsText}} + {{.locale.Tr "repo.blame"}} + {{end}} + {{.locale.Tr "repo.file_history"}} + {{if .EscapeStatus.Escaped}} + + + {{end}} +
    + {{svg "octicon-download"}} + {{svg "octicon-copy" 14}} + {{if .EnableFeed}} + {{svg "octicon-rss" 14}} + {{end}} + {{if .Repository.CanEnableEditor}} + {{if .CanEditFile}} + {{svg "octicon-pencil"}} + {{else}} + {{svg "octicon-pencil"}} + {{end}} + {{if .CanDeleteFile}} + {{svg "octicon-trash"}} + {{else}} + {{svg "octicon-trash"}} + {{end}} + {{end}} + {{else if .EscapeStatus.Escaped}} + + + {{end}} +
    +

    +
    + {{if not (or .IsMarkup .IsRenderedHTML)}} + {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}} + {{end}} +
    + {{if .IsMarkup}} + {{if .FileContent}}{{.FileContent | Safe}}{{end}} + {{else if .IsPlainText}} +
    {{if .FileContent}}{{.FileContent | Safe}}{{end}}
    + {{else if not .IsTextSource}} +
    + {{if .IsImageFile}} + + {{else if .IsVideoFile}} + + {{else if .IsAudioFile}} + + {{else if .IsPDFFile}} +
    + {{else}} + {{.locale.Tr "repo.file_view_raw"}} + {{end}} +
    + {{else if .FileSize}} + {{if .IsFileTooLarge}} + + + + + + +
    {{.locale.Tr "repo.file_too_large"}}
    + {{else}} + + + {{range $idx, $code := .FileContent}} + {{$line := Eval $idx "+" 1}} + + + {{if $.EscapeStatus.Escaped}} + + {{end}} + + + {{end}} + +
    {{if (index $.LineEscapeStatus $idx).Escaped}}{{end}}{{$code | Safe}}
    + + {{end}} + {{end}} +
    +
    +
    diff --git a/src/templates/repo/view_list.tmpl b/src/templates/repo/view_list.tmpl new file mode 100644 index 0000000..13b4d3d --- /dev/null +++ b/src/templates/repo/view_list.tmpl @@ -0,0 +1,99 @@ + + + + + + + + + {{if .HasParentPath}} + + + + {{end}} + {{range $item := .Files}} + {{$entry := $item.Entry}} + {{$commit := $item.Commit}} + {{$subModuleFile := $item.SubModuleFile}} + + + + + + {{end}} + +
    + {{if not .LatestCommit}} +
    + {{else}} + {{if .LatestCommitUser}} + {{avatar $.Context .LatestCommitUser 24}} + {{if .LatestCommitUser.FullName}} + {{.LatestCommitUser.FullName}} + {{else}} + {{if .LatestCommit.Author}}{{.LatestCommit.Author.Name}}{{else}}{{.LatestCommitUser.Name}}{{end}} + {{end}} + {{else}} + {{if .LatestCommit.Author}} + {{avatarByEmail $.Context .LatestCommit.Author.Email .LatestCommit.Author.Name 24}} + {{.LatestCommit.Author.Name}} + {{end}} + {{end}} + + {{ShortSha .LatestCommit.ID.String}} + {{if .LatestCommit.Signature}} + {{template "repo/shabox_badge" dict "root" $ "verification" .LatestCommitVerification}} + {{end}} + + {{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses "root" $}} + {{$commitLink:= printf "%s/commit/%s" .RepoLink (PathEscape .LatestCommit.ID.String)}} + {{RenderCommitMessageLinkSubject $.Context .LatestCommit.Message $.RepoLink $commitLink $.Repository.ComposeMetas}} + {{if IsMultilineCommitMessage .LatestCommit.Message}} + +
    {{RenderCommitBody $.Context .LatestCommit.Message $.RepoLink $.Repository.ComposeMetas}}
    + {{end}} +
    + {{end}} +
    {{if .LatestCommit}}{{if .LatestCommit.Committer}}{{TimeSince .LatestCommit.Committer.When $.locale}}{{end}}{{end}}
    {{svg "octicon-reply"}}..
    + + {{if $entry.IsSubModule}} + {{svg "octicon-file-submodule"}} + {{$refURL := $subModuleFile.RefURL AppUrl $.Repository.FullName $.SSHDomain}} {{/* FIXME: the usage of AppUrl seems incorrect, it would be fixed in the future, use AppSubUrl instead */}} + {{if $refURL}} + {{$entry.Name}}@{{ShortSha $subModuleFile.RefID}} + {{else}} + {{$entry.Name}}@{{ShortSha $subModuleFile.RefID}} + {{end}} + {{else}} + {{if $entry.IsDir}} + {{$subJumpablePathName := $entry.GetSubJumpablePathName}} + {{svg "octicon-file-directory-fill"}} + + {{$subJumpablePathFields := StringUtils.Split $subJumpablePathName "/"}} + {{$subJumpablePathFieldLast := (Eval (len $subJumpablePathFields) "-" 1)}} + {{if eq $subJumpablePathFieldLast 0}} + {{$subJumpablePathName}} + {{else}} + {{$subJumpablePathPrefixes := slice $subJumpablePathFields 0 $subJumpablePathFieldLast}} + {{StringUtils.Join $subJumpablePathPrefixes "/"}}/{{index $subJumpablePathFields $subJumpablePathFieldLast}} + {{end}} + + {{else}} + {{svg (printf "octicon-%s" (EntryIcon $entry))}} + {{$entry.Name}} + {{end}} + {{end}} + + + + {{if $commit}} + {{$commitLink := printf "%s/commit/%s" $.RepoLink (PathEscape $commit.ID.String)}} + {{RenderCommitMessageLinkSubject $.Context $commit.Message $.RepoLink $commitLink $.Repository.ComposeMetas}} + {{else}} +
    + {{end}} +
    +
    {{if $commit}}{{TimeSince $commit.Committer.When $.locale}}{{end}}
    +{{if .ReadmeExist}} + {{template "repo/view_file" .}} +{{end}} diff --git a/src/templates/repo/watchers.tmpl b/src/templates/repo/watchers.tmpl new file mode 100644 index 0000000..1828544 --- /dev/null +++ b/src/templates/repo/watchers.tmpl @@ -0,0 +1,8 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "repo/user_cards" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/wiki/new.tmpl b/src/templates/repo/wiki/new.tmpl new file mode 100644 index 0000000..0765cb2 --- /dev/null +++ b/src/templates/repo/wiki/new.tmpl @@ -0,0 +1,48 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    + {{template "base/alert" .}} +
    + {{.locale.Tr "repo.wiki.new_page"}} + {{if .PageIsWikiEdit}} + + {{end}} +
    +
    + {{.CsrfTokenHtml}} +
    + +
    +
    + {{.locale.Tr "repo.wiki.page_name_desc"}} +
    + + {{$content := .content}} + {{if not .PageIsWikiEdit}} + {{$content = .locale.Tr "repo.wiki.welcome"}} + {{end}} + {{template "shared/combomarkdowneditor" (dict + "locale" $.locale + "MarkdownPreviewUrl" (print .Repository.Link "/markup") + "MarkdownPreviewContext" .RepoLink + "TextareaName" "content" + "TextareaPlaceholder" (.locale.Tr "repo.wiki.page_content") + "TextareaAriaLabel" (.locale.Tr "repo.wiki.page_content") + "TextareaContent" $content + )}} + +
    + +
    +
    + +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/wiki/pages.tmpl b/src/templates/repo/wiki/pages.tmpl new file mode 100644 index 0000000..6169109 --- /dev/null +++ b/src/templates/repo/wiki/pages.tmpl @@ -0,0 +1,30 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +

    + {{.locale.Tr "repo.wiki.pages"}} + + {{if and .CanWriteWiki (not .Repository.IsMirror)}} + {{.locale.Tr "repo.wiki.new_page_button"}} + {{end}} + +

    + + + {{range .Pages}} + + + {{$timeSince := TimeSinceUnix .UpdatedUnix $.locale}} + + + {{end}} + +
    + {{svg "octicon-file"}} + {{.Name}} + {{svg "octicon-chevron-right"}} + {{$.locale.Tr "repo.wiki.last_updated" $timeSince | Safe}}
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/wiki/revision.tmpl b/src/templates/repo/wiki/revision.tmpl new file mode 100644 index 0000000..b2d6e63 --- /dev/null +++ b/src/templates/repo/wiki/revision.tmpl @@ -0,0 +1,45 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} + {{$title := .title}} +
    +
    +
    +
    + {{.revision}} {{svg "octicon-home"}} + {{$title}} +
    + {{$timeSince := TimeSince .Author.When $.locale}} + {{.locale.Tr "repo.wiki.last_commit_info" .Author.Name $timeSince | Safe}} +
    +
    +
    +
    +
    + {{template "repo/clone_buttons" .}} + {{template "repo/clone_script" .}} +
    +
    +
    +

    {{.locale.Tr "repo.wiki.wiki_page_revisions"}}

    +
    +

    +
    +
    + {{.CommitCount}} {{.locale.Tr "repo.commits.commits"}} +
    +
    +

    + + {{if and .Commits (gt .CommitCount 0)}} + {{template "repo/commits_list" .}} + {{end}} + + {{template "base/paginate" .}} + +
    +
    +
    + + +{{template "base/footer" .}} diff --git a/src/templates/repo/wiki/start.tmpl b/src/templates/repo/wiki/start.tmpl new file mode 100644 index 0000000..4885042 --- /dev/null +++ b/src/templates/repo/wiki/start.tmpl @@ -0,0 +1,15 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} +
    +
    + {{svg "octicon-book" 48}} +

    {{.locale.Tr "repo.wiki.welcome"}}

    +

    {{.locale.Tr "repo.wiki.welcome_desc"}}

    + {{if and .CanWriteWiki (not .Repository.IsMirror)}} + {{.locale.Tr "repo.wiki.create_first_page"}} + {{end}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/repo/wiki/view.tmpl b/src/templates/repo/wiki/view.tmpl new file mode 100644 index 0000000..c294af3 --- /dev/null +++ b/src/templates/repo/wiki/view.tmpl @@ -0,0 +1,115 @@ +{{template "base/head" .}} +
    + {{template "repo/header" .}} + {{$title := .title}} +
    +
    +
    + +
    +
    + {{template "repo/clone_buttons" .}} + {{template "repo/clone_script" .}} +
    +
    +
    +
    +
    + {{.CommitCount}} {{svg "octicon-history"}} + {{$title}} +
    + {{$timeSince := TimeSince .Author.When $.locale}} + {{.locale.Tr "repo.wiki.last_commit_info" .Author.Name $timeSince | Safe}} +
    +
    + +
    +
    + {{if .FormatWarning}} +
    +

    {{.FormatWarning}}

    +
    + {{end}} + +
    + {{if .sidebarTocContent}} + + {{end}} + +
    + {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}} + {{.content | Safe}} +
    + + {{if .sidebarPresent}} + + {{end}} + +
    + + {{if .footerPresent}} + + {{end}} +
    +
    +
    + + + +{{template "base/footer" .}} diff --git a/src/templates/shared/actions/runner_edit.tmpl b/src/templates/shared/actions/runner_edit.tmpl new file mode 100644 index 0000000..0985bc6 --- /dev/null +++ b/src/templates/shared/actions/runner_edit.tmpl @@ -0,0 +1,101 @@ +
    +

    + {{.locale.Tr "actions.runners.runner_title"}} {{.Runner.ID}} {{.Runner.Name}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    +
    + + {{.Runner.StatusLocaleName $.locale}} +
    +
    + + {{if .Runner.LastOnline}}{{TimeSinceUnix .Runner.LastOnline $.locale}}{{else}}{{$.locale.Tr "never"}}{{end}} +
    +
    + + + {{range .Runner.AgentLabels}} + {{.}} + {{end}} + +
    +
    + + {{.Runner.BelongsToOwnerType.LocaleString $.locale}} +
    +
    + +
    + +
    + + +
    +
    + + +

    {{.locale.Tr "actions.runners.custom_labels_helper"}}

    +
    + +
    + +
    + + +
    +
    +
    + +

    + {{.locale.Tr "actions.runners.task_list"}} +

    +
    + + + + + + + + + + + + {{range .Tasks}} + + + + + + + + {{end}} + {{if not .Tasks}} + + + + {{end}} + +
    {{.locale.Tr "actions.runners.task_list.run"}}{{.locale.Tr "actions.runners.task_list.status"}}{{.locale.Tr "actions.runners.task_list.repository"}}{{.locale.Tr "actions.runners.task_list.commit"}}{{.locale.Tr "actions.runners.task_list.done_at"}}
    {{.ID}}{{.Status.LocaleString $.locale}}{{.GetRepoName}} + {{ShortSha .CommitSHA}} + {{if .IsStopped}} + {{TimeSinceUnix .Stopped $.locale}} + {{else}}-{{end}}
    {{.locale.Tr "runners.task_list.no_tasks"}}
    + {{template "base/paginate" .}} +
    + +
    diff --git a/src/templates/shared/actions/runner_list.tmpl b/src/templates/shared/actions/runner_list.tmpl new file mode 100644 index 0000000..7c786d8 --- /dev/null +++ b/src/templates/shared/actions/runner_list.tmpl @@ -0,0 +1,91 @@ +
    + +

    + {{.locale.Tr "actions.runners.runner_manage_panel"}} ({{.locale.Tr "admin.total" .Total}}) +
    + + +
    +

    +
    +
    + +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + {{if .Runners}} + {{range .Runners}} + + + + + + + + + + + {{end}} + {{else}} + + + + {{end}} + +
    {{.locale.Tr "actions.runners.status"}}{{.locale.Tr "actions.runners.id"}}{{.locale.Tr "actions.runners.name"}}{{.locale.Tr "actions.runners.version"}}{{.locale.Tr "actions.runners.owner_type"}}{{.locale.Tr "actions.runners.labels"}}{{.locale.Tr "actions.runners.last_online"}}{{.locale.Tr "edit"}}
    + {{.StatusLocaleName $.locale}} + {{.ID}}

    {{.Name}}

    {{if .Version}}{{.Version}}{{else}}{{$.locale.Tr "unknown"}}{{end}}{{.BelongsToOwnerType.LocaleString $.locale}} + {{range .AllLabels}}{{.}}{{end}} + {{if .LastOnline}}{{TimeSinceUnix .LastOnline $.locale}}{{else}}{{$.locale.Tr "never"}}{{end}} + {{if .Editable $.RunnerOnwerID $.RunnerRepoID}} + {{svg "octicon-pencil"}} + {{end}} +
    {{.locale.Tr "actions.runners.none"}}
    +
    + + {{template "base/paginate" .}} + +
    diff --git a/src/templates/shared/combomarkdowneditor.tmpl b/src/templates/shared/combomarkdowneditor.tmpl new file mode 100644 index 0000000..26a51b3 --- /dev/null +++ b/src/templates/shared/combomarkdowneditor.tmpl @@ -0,0 +1,59 @@ +{{/* +Template Attributes: +* locale: passed through for localization +* ContainerId: id attribute for the container element +* ContainerClasses: additional classes for the container element +* MarkdownPreviewUrl: preview url for the preview tab +* MarkdownPreviewContext: preview context for the preview tab +* TextareaName: name attribute for the textarea +* TextareaContent: content for the textarea +* TextareaPlaceholder: placeholder attribute for the textarea +* TextareaAriaLabel: aria-label attribute for the textarea +* DropzoneParentContainer: container for file upload (leave it empty if no upload) +*/}} +
    + {{if .MarkdownPreviewUrl}} + + {{end}} +
    + +
    + {{svg "octicon-heading"}} + {{svg "octicon-bold"}} + {{svg "octicon-italic"}} +
    +
    + {{svg "octicon-quote"}} + {{svg "octicon-code"}} + {{svg "octicon-link"}} +
    +
    + {{svg "octicon-list-unordered"}} + {{svg "octicon-list-ordered"}} + {{svg "octicon-tasklist"}} +
    +
    + {{svg "octicon-mention"}} + {{svg "octicon-cross-reference"}} +
    +
    + + +
    +
    + + + + +
    +
    + {{.locale.Tr "loading"}} +
    +
    diff --git a/src/templates/shared/issueicon.tmpl b/src/templates/shared/issueicon.tmpl new file mode 100644 index 0000000..2a2e700 --- /dev/null +++ b/src/templates/shared/issueicon.tmpl @@ -0,0 +1,25 @@ +{{if .IsPull}} + {{if and .PullRequest .PullRequest.HasMerged}} + {{svg "octicon-git-merge" 16 "text purple"}} + {{else if and .GetPullRequest .GetPullRequest.HasMerged}} + {{svg "octicon-git-merge" 16 "text purple"}} + {{else}} + {{if .IsClosed}} + {{svg "octicon-git-pull-request" 16 "text red"}} + {{else}} + {{if and .PullRequest .PullRequest.IsWorkInProgress}} + {{svg "octicon-git-pull-request-draft" 16 "text grey"}} + {{else if and .GetPullRequest .GetPullRequest.IsWorkInProgress}} + {{svg "octicon-git-pull-request-draft" 16 "text grey"}} + {{else}} + {{svg "octicon-git-pull-request" 16 "text green"}} + {{end}} + {{end}} + {{end}} +{{else}} + {{if .IsClosed}} + {{svg "octicon-issue-closed" 16 "text red"}} + {{else}} + {{svg "octicon-issue-opened" 16 "text green"}} + {{end}} +{{end}} diff --git a/src/templates/shared/issuelist.tmpl b/src/templates/shared/issuelist.tmpl new file mode 100644 index 0000000..192911d --- /dev/null +++ b/src/templates/shared/issuelist.tmpl @@ -0,0 +1,158 @@ +
    + {{$approvalCounts := .ApprovalCounts}} + {{range .Issues}} +
  • +
    + {{if $.CanWriteIssuesOrPulls}} + + {{end}} +
    + {{template "shared/issueicon" .}} +
    +
    +
    +
    + {{RenderEmoji $.Context .Title | RenderCodeBlock}} + {{if .IsPull}} + {{if (index $.CommitStatuses .PullRequest.ID)}} + {{template "repo/commit_statuses" dict "Status" (index $.CommitLastStatus .PullRequest.ID) "Statuses" (index $.CommitStatuses .PullRequest.ID) "root" $}} + {{end}} + {{end}} + + {{range .Labels}} + {{RenderLabel $.Context .}} + {{end}} + +
    +
    + + {{if eq $.listType "dashboard"}} + {{.Repo.FullName}}#{{.Index}} + {{else}} + #{{.Index}} + {{end}} + + {{$timeStr := TimeSinceUnix .GetLastEventTimestamp $.locale}} + {{if .OriginalAuthor}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}} + {{else if gt .Poster.ID 0}} + {{$.locale.Tr .GetLastEventLabel $timeStr (.Poster.HomeLink|Escape) (.Poster.GetDisplayName | Escape) | Safe}} + {{else}} + {{$.locale.Tr .GetLastEventLabelFake $timeStr (.Poster.GetDisplayName | Escape) | Safe}} + {{end}} + {{if .IsPull}} + + {{end}} + {{if and .Milestone (ne $.listType "milestone")}} + + {{svg "octicon-milestone" 14 "gt-mr-2"}}{{.Milestone.Name}} + + {{end}} + {{if .Project}} + + {{svg .Project.IconName 14 "gt-mr-2"}}{{.Project.Title}} + + {{end}} + {{if .Ref}} + + {{svg "octicon-git-branch" 14 "gt-mr-2"}}{{index $.IssueRefEndNames .ID}} + + {{end}} + {{$tasks := .GetTasks}} + {{if gt $tasks 0}} + {{$tasksDone := .GetTasksDone}} + + {{svg "octicon-checklist" 14 "gt-mr-2"}}{{$tasksDone}} / {{$tasks}} + + + {{end}} + {{if ne .DeadlineUnix 0}} + + + {{svg "octicon-calendar" 14 "gt-mr-2"}} + {{DateTime "short" .DeadlineUnix}} + + + {{end}} + {{if .IsPull}} + {{$approveOfficial := call $approvalCounts .ID "approve"}} + {{$rejectOfficial := call $approvalCounts .ID "reject"}} + {{$waitingOfficial := call $approvalCounts .ID "waiting"}} + {{if gt $approveOfficial 0}} + + {{svg "octicon-check" 14 "gt-mr-1"}} + {{$.locale.TrN $approveOfficial "repo.pulls.approve_count_1" "repo.pulls.approve_count_n" $approveOfficial}} + + {{end}} + {{if gt $rejectOfficial 0}} + + {{svg "octicon-diff" 14 "gt-mr-2"}} + {{$.locale.TrN $rejectOfficial "repo.pulls.reject_count_1" "repo.pulls.reject_count_n" $rejectOfficial}} + + {{end}} + {{if gt $waitingOfficial 0}} + + {{svg "octicon-eye" 14 "gt-mr-2"}} + {{$.locale.TrN $waitingOfficial "repo.pulls.waiting_count_1" "repo.pulls.waiting_count_n" $waitingOfficial}} + + {{end}} + {{if and (not .PullRequest.HasMerged) (gt (len .PullRequest.ConflictedFiles) 0)}} + + {{svg "octicon-x" 14}} + {{$.locale.TrN (len .PullRequest.ConflictedFiles) "repo.pulls.num_conflicting_files_1" "repo.pulls.num_conflicting_files_n" (len .PullRequest.ConflictedFiles)}} + + {{end}} + {{end}} +
    +
    + {{if or .TotalTrackedTime .Assignees .NumComments}} +
    + {{if .TotalTrackedTime}} +
    + {{svg "octicon-clock" 16 "gt-mr-2"}} + {{.TotalTrackedTime | Sec2Time}} +
    + {{end}} + {{if .Assignees}} +
    + {{range .Assignees}} + + {{avatar $.Context . 20}} + + {{end}} +
    + {{end}} + {{if .NumComments}} + + {{end}} +
    + {{end}} +
  • + {{end}} + {{if .IssueIndexerUnavailable}} +
    +

    {{$.locale.Tr "repo.issues.keyword_search_unavailable"}}

    +
    + {{end}} +
    +{{template "base/paginate" .}} diff --git a/src/templates/shared/searchbottom.tmpl b/src/templates/shared/searchbottom.tmpl new file mode 100644 index 0000000..cce8272 --- /dev/null +++ b/src/templates/shared/searchbottom.tmpl @@ -0,0 +1,12 @@ +
    +
    + {{if .result.Language}} + {{.result.Language}} + {{end}} +
    +
    + {{if not .result.UpdatedUnix.IsZero}} + {{.root.locale.Tr "explore.code_last_indexed_at" (TimeSinceUnix .result.UpdatedUnix .root.locale) | Safe}} + {{end}} +
    +
    diff --git a/src/templates/shared/secrets/add_list.tmpl b/src/templates/shared/secrets/add_list.tmpl new file mode 100644 index 0000000..8a6b7db --- /dev/null +++ b/src/templates/shared/secrets/add_list.tmpl @@ -0,0 +1,67 @@ +

    + {{.locale.Tr "secrets.management"}} +
    + +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + {{.locale.Tr "secrets.description"}} +
    +
    + + +
    +
    + + +
    + + +
    +
    + {{if .Secrets}} +
    + {{range .Secrets}} +
    +
    + +
    +
    + {{svg "octicon-key" 32}} +
    +
    + {{.Name}} +
    ******
    +
    + + {{$.locale.Tr "settings.added_on" (DateTime "short" .CreatedUnix) | Safe}} + +
    +
    +
    + {{end}} +
    + {{else}} + {{.locale.Tr "secrets.none"}} + {{end}} +
    + diff --git a/src/templates/shared/user/authorlink.tmpl b/src/templates/shared/user/authorlink.tmpl new file mode 100644 index 0000000..64ccc62 --- /dev/null +++ b/src/templates/shared/user/authorlink.tmpl @@ -0,0 +1 @@ +{{.GetDisplayName}}{{if .IsBot}}bot{{end}} diff --git a/src/templates/shared/user/avatarlink.tmpl b/src/templates/shared/user/avatarlink.tmpl new file mode 100644 index 0000000..c99f0aa --- /dev/null +++ b/src/templates/shared/user/avatarlink.tmpl @@ -0,0 +1 @@ +{{avatar $.Context .user}} diff --git a/src/templates/shared/user/namelink.tmpl b/src/templates/shared/user/namelink.tmpl new file mode 100644 index 0000000..a122f4f --- /dev/null +++ b/src/templates/shared/user/namelink.tmpl @@ -0,0 +1 @@ +{{.GetDisplayName}} diff --git a/src/templates/status/404.tmpl b/src/templates/status/404.tmpl new file mode 100644 index 0000000..a55e2fb --- /dev/null +++ b/src/templates/status/404.tmpl @@ -0,0 +1,12 @@ +{{template "base/head" .}} +
    + {{if .IsRepo}}{{template "repo/header" .}}{{end}} +
    +

    404

    +
    +
    +

    {{.locale.Tr "error404" | Safe}} + {{if .ShowFooterVersion}}

    {{.locale.Tr "admin.config.app_ver"}}: {{AppVer}}

    {{end}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/status/500.tmpl b/src/templates/status/500.tmpl new file mode 100644 index 0000000..1ceeadb --- /dev/null +++ b/src/templates/status/500.tmpl @@ -0,0 +1,67 @@ +{{/* This page should only depend the minimal template functions/variables, to avoid triggering new panics. +* base template functions: AppName, AssetUrlPrefix, AssetVersion, AppSubUrl, DefaultTheme, Str2html +* locale +* Flash +* ErrorMsg +* SignedUser (optional) +*/}} + + + + + Internal Server Error - {{AppName}} + + + {{template "base/head_style" .}} + + +
    + +
    +
    + + {{template "base/alert" .}} +
    +

    Internal Server Error

    +
    +
    + {{if .ErrorMsg}} +

    {{.locale.Tr "error.occurred"}}:

    +
    {{.ErrorMsg}}
    + {{end}} +
    + {{if or .SignedUser.IsAdmin .ShowFooterVersion}}

    {{.locale.Tr "admin.config.app_ver"}}: {{AppVer}}

    {{end}} + {{if .SignedUser.IsAdmin}}

    {{.locale.Tr "error.report_message" | Str2html}}

    {{end}} +
    +
    +
    +
    + + {{/* When a sub-template triggers an 500 error, its parent template has been partially rendered, then the 500 page + will be rendered after that partially rendered page, the HTML/JS are totally broken. Use this inline script to try to move it to main viewport. + And this page shouldn't include any other JS file, avoid duplicate JS execution (still due to the partial rendering).*/}} + + + diff --git a/src/templates/swagger/ui.tmpl b/src/templates/swagger/ui.tmpl new file mode 100644 index 0000000..e2324f9 --- /dev/null +++ b/src/templates/swagger/ui.tmpl @@ -0,0 +1,12 @@ + + + + Gitea API + + + + {{svg "octicon-reply"}}{{.locale.Tr "return_to_gitea"}} +
    + + + diff --git a/src/templates/swagger/v1_json.tmpl b/src/templates/swagger/v1_json.tmpl new file mode 100644 index 0000000..11abeac --- /dev/null +++ b/src/templates/swagger/v1_json.tmpl @@ -0,0 +1,22926 @@ +{ + "consumes": [ + "application/json", + "text/plain" + ], + "produces": [ + "application/json", + "text/html" + ], + "schemes": [ + "http", + "https" + ], + "swagger": "2.0", + "info": { + "description": "This documentation describes the Gitea API.", + "title": "Gitea API.", + "license": { + "name": "MIT", + "url": "http://opensource.org/licenses/MIT" + }, + "version": "{{AppVer | JSEscape | Safe}}" + }, + "basePath": "{{AppSubUrl | JSEscape | Safe}}/api/v1", + "paths": { + "/activitypub/user-id/{user-id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "activitypub" + ], + "summary": "Returns the Person actor for a user", + "operationId": "activitypubPerson", + "parameters": [ + { + "type": "integer", + "description": "user ID of the user", + "name": "user-id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/ActivityPub" + } + } + } + }, + "/activitypub/user-id/{user-id}/inbox": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "activitypub" + ], + "summary": "Send to the inbox", + "operationId": "activitypubPersonInbox", + "parameters": [ + { + "type": "integer", + "description": "user ID of the user", + "name": "user-id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + } + }, + "/admin/cron": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "List cron tasks", + "operationId": "adminCronList", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CronList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/admin/cron/{task}": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Run cron task", + "operationId": "adminCronRun", + "parameters": [ + { + "type": "string", + "description": "task to run", + "name": "task", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/admin/emails": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "List all emails", + "operationId": "adminGetAllEmails", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/EmailList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/admin/emails/search": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Search all emails", + "operationId": "adminSearchEmails", + "parameters": [ + { + "type": "string", + "description": "keyword", + "name": "q", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/EmailList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/admin/hooks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "List system's webhooks", + "operationId": "adminListHooks", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/HookList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Create a hook", + "operationId": "adminCreateHook", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateHookOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/admin/hooks/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Get a hook", + "operationId": "adminGetHook", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Delete a hook", + "operationId": "adminDeleteHook", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the hook to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Update a hook", + "operationId": "adminEditHook", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the hook to update", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditHookOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/admin/orgs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "List all organizations", + "operationId": "adminGetAllOrgs", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/OrganizationList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/admin/unadopted": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "List unadopted repositories", + "operationId": "adminUnadoptedList", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "pattern of repositories to search for", + "name": "pattern", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/StringSlice" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/admin/unadopted/{owner}/{repo}": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Adopt unadopted files as a repository", + "operationId": "adminAdoptRepository", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Delete unadopted files", + "operationId": "adminDeleteUnadoptedRepository", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/admin/users": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Search users according filter conditions", + "operationId": "adminSearchUsers", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "ID of the user's login source to search for", + "name": "source_id", + "in": "query" + }, + { + "type": "string", + "description": "user's login name to search for", + "name": "login_name", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Create a user", + "operationId": "adminCreateUser", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateUserOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/User" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/admin/users/{username}": { + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Delete a user", + "operationId": "adminDeleteUser", + "parameters": [ + { + "type": "string", + "description": "username of user to delete", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "purge the user from the system completely", + "name": "purge", + "in": "query" + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Edit an existing user", + "operationId": "adminEditUser", + "parameters": [ + { + "type": "string", + "description": "username of user to edit", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditUserOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/User" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/admin/users/{username}/keys": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Add a public key on behalf of a user", + "operationId": "adminCreatePublicKey", + "parameters": [ + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "key", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateKeyOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/PublicKey" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/admin/users/{username}/keys/{id}": { + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Delete a user's public key", + "operationId": "adminDeleteUserPublicKey", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the key to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/admin/users/{username}/orgs": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Create an organization", + "operationId": "adminCreateOrg", + "parameters": [ + { + "type": "string", + "description": "username of the user that will own the created organization", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "organization", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOrgOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Organization" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/admin/users/{username}/rename": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Rename a user", + "operationId": "adminRenameUser", + "parameters": [ + { + "type": "string", + "description": "existing username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RenameUserOption" + } + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/admin/users/{username}/repos": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "admin" + ], + "summary": "Create a repository on behalf of a user", + "operationId": "adminCreateRepo", + "parameters": [ + { + "type": "string", + "description": "username of the user. This user will own the created repository", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "repository", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateRepoOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Repository" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/gitignore/templates": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns a list of all gitignore templates", + "operationId": "listGitignoresTemplates", + "responses": { + "200": { + "$ref": "#/responses/GitignoreTemplateList" + } + } + } + }, + "/gitignore/templates/{name}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns information about a gitignore template", + "operationId": "getGitignoreTemplateInfo", + "parameters": [ + { + "type": "string", + "description": "name of the template", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitignoreTemplateInfo" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/label/templates": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns a list of all label templates", + "operationId": "listLabelTemplates", + "responses": { + "200": { + "$ref": "#/responses/LabelTemplateList" + } + } + } + }, + "/label/templates/{name}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns all labels in a template", + "operationId": "getLabelTemplateInfo", + "parameters": [ + { + "type": "string", + "description": "name of the template", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/LabelTemplateInfo" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/licenses": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns a list of all license templates", + "operationId": "listLicenseTemplates", + "responses": { + "200": { + "$ref": "#/responses/LicenseTemplateList" + } + } + } + }, + "/licenses/{name}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns information about a license template", + "operationId": "getLicenseTemplateInfo", + "parameters": [ + { + "type": "string", + "description": "name of the license", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/LicenseTemplateInfo" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/markdown": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "text/html" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Render a markdown document as HTML", + "operationId": "renderMarkdown", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/MarkdownOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/MarkdownRender" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/markdown/raw": { + "post": { + "consumes": [ + "text/plain" + ], + "produces": [ + "text/html" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Render raw markdown as HTML", + "operationId": "renderMarkdownRaw", + "parameters": [ + { + "description": "Request body to render", + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/MarkdownRender" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/markup": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "text/html" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Render a markup document as HTML", + "operationId": "renderMarkup", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/MarkupOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/MarkupRender" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/nodeinfo": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns the nodeinfo of the Gitea application", + "operationId": "getNodeInfo", + "responses": { + "200": { + "$ref": "#/responses/NodeInfo" + } + } + } + }, + "/notifications": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "notification" + ], + "summary": "List users's notification threads", + "operationId": "notifyGetList", + "parameters": [ + { + "type": "boolean", + "description": "If true, show notifications marked as read. Default value is false", + "name": "all", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "description": "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread \u0026 pinned.", + "name": "status-types", + "in": "query" + }, + { + "type": "array", + "items": { + "enum": [ + "issue", + "pull", + "commit", + "repository" + ], + "type": "string" + }, + "collectionFormat": "multi", + "description": "filter notifications by subject type", + "name": "subject-type", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show notifications updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show notifications updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/NotificationThreadList" + } + } + }, + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "notification" + ], + "summary": "Mark notification threads as read, pinned or unread", + "operationId": "notifyReadList", + "parameters": [ + { + "type": "string", + "format": "date-time", + "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated.", + "name": "last_read_at", + "in": "query" + }, + { + "type": "string", + "description": "If true, mark all notifications on this repo. Default value is false", + "name": "all", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "description": "Mark notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread.", + "name": "status-types", + "in": "query" + }, + { + "type": "string", + "description": "Status to mark notifications as, Defaults to read.", + "name": "to-status", + "in": "query" + } + ], + "responses": { + "205": { + "$ref": "#/responses/NotificationThreadList" + } + } + } + }, + "/notifications/new": { + "get": { + "tags": [ + "notification" + ], + "summary": "Check if unread notifications exist", + "operationId": "notifyNewAvailable", + "responses": { + "200": { + "$ref": "#/responses/NotificationCount" + } + } + } + }, + "/notifications/threads/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "notification" + ], + "summary": "Get notification thread by ID", + "operationId": "notifyGetThread", + "parameters": [ + { + "type": "string", + "description": "id of notification thread", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/NotificationThread" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "notification" + ], + "summary": "Mark notification thread as read by ID", + "operationId": "notifyReadThread", + "parameters": [ + { + "type": "string", + "description": "id of notification thread", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "read", + "description": "Status to mark notifications as", + "name": "to-status", + "in": "query" + } + ], + "responses": { + "205": { + "$ref": "#/responses/NotificationThread" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/org/{org}/repos": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Create a repository in an organization", + "operationId": "createOrgRepoDeprecated", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "name of organization", + "name": "org", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateRepoOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/orgs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Get list of organizations", + "operationId": "orgGetAll", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/OrganizationList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Create an organization", + "operationId": "orgCreate", + "parameters": [ + { + "name": "organization", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOrgOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Organization" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/orgs/{org}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Get an organization", + "operationId": "orgGet", + "parameters": [ + { + "type": "string", + "description": "name of the organization to get", + "name": "org", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Organization" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Delete an organization", + "operationId": "orgDelete", + "parameters": [ + { + "type": "string", + "description": "organization that is to be deleted", + "name": "org", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Edit an organization", + "operationId": "orgEdit", + "parameters": [ + { + "type": "string", + "description": "name of the organization to edit", + "name": "org", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EditOrgOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Organization" + } + } + } + }, + "/orgs/{org}/activities/feeds": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's activity feeds", + "operationId": "orgListActivityFeeds", + "parameters": [ + { + "type": "string", + "description": "name of the org", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "date", + "description": "the date of the activities to be found", + "name": "date", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ActivityFeedsList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/orgs/{org}/hooks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's webhooks", + "operationId": "orgListHooks", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/HookList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Create a hook", + "operationId": "orgCreateHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateHookOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/orgs/{org}/hooks/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Get a hook", + "operationId": "orgGetHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Delete a hook", + "operationId": "orgDeleteHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the hook to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Update a hook", + "operationId": "orgEditHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the hook to update", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditHookOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/orgs/{org}/labels": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's labels", + "operationId": "orgListLabels", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/LabelList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Create a label for an organization", + "operationId": "orgCreateLabel", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateLabelOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Label" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/orgs/{org}/labels/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Get a single label", + "operationId": "orgGetLabel", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Label" + } + } + }, + "delete": { + "tags": [ + "organization" + ], + "summary": "Delete a label", + "operationId": "orgDeleteLabel", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Update a label", + "operationId": "orgEditLabel", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditLabelOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Label" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/orgs/{org}/members": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's members", + "operationId": "orgListMembers", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/orgs/{org}/members/{username}": { + "get": { + "tags": [ + "organization" + ], + "summary": "Check if a user is a member of an organization", + "operationId": "orgIsMember", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "user is a member" + }, + "303": { + "description": "redirection to /orgs/{org}/public_members/{username}" + }, + "404": { + "description": "user is not a member" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Remove a member from an organization", + "operationId": "orgDeleteMember", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "member removed" + } + } + } + }, + "/orgs/{org}/public_members": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's public members", + "operationId": "orgListPublicMembers", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/orgs/{org}/public_members/{username}": { + "get": { + "tags": [ + "organization" + ], + "summary": "Check if a user is a public member of an organization", + "operationId": "orgIsPublicMember", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "user is a public member" + }, + "404": { + "description": "user is not a public member" + } + } + }, + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Publicize a user's membership", + "operationId": "orgPublicizeMember", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "membership publicized" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Conceal a user's membership", + "operationId": "orgConcealMember", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/orgs/{org}/repos": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's repos", + "operationId": "orgListRepos", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Create a repository in an organization", + "operationId": "createOrgRepo", + "parameters": [ + { + "type": "string", + "description": "name of organization", + "name": "org", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateRepoOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Repository" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/orgs/{org}/teams": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List an organization's teams", + "operationId": "orgListTeams", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TeamList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Create a team", + "operationId": "orgCreateTeam", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateTeamOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Team" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/orgs/{org}/teams/search": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Search for teams within an organization", + "operationId": "teamSearch", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "keywords to search", + "name": "q", + "in": "query" + }, + { + "type": "boolean", + "description": "include search within team description (defaults to true)", + "name": "include_desc", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "SearchResults of a successful search", + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/Team" + } + }, + "ok": { + "type": "boolean" + } + } + } + } + } + } + }, + "/packages/{owner}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "package" + ], + "summary": "Gets all packages of an owner", + "operationId": "listPackages", + "parameters": [ + { + "type": "string", + "description": "owner of the packages", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + }, + { + "enum": [ + "alpine", + "cargo", + "chef", + "composer", + "conan", + "conda", + "container", + "cran", + "debian", + "generic", + "go", + "helm", + "maven", + "npm", + "nuget", + "pub", + "pypi", + "rpm", + "rubygems", + "swift", + "vagrant" + ], + "type": "string", + "description": "package type filter", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "name filter", + "name": "q", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/PackageList" + } + } + } + }, + "/packages/{owner}/{type}/{name}/{version}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "package" + ], + "summary": "Gets a package", + "operationId": "getPackage", + "parameters": [ + { + "type": "string", + "description": "owner of the package", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "type of the package", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the package", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "version of the package", + "name": "version", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Package" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "package" + ], + "summary": "Delete a package", + "operationId": "deletePackage", + "parameters": [ + { + "type": "string", + "description": "owner of the package", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "type of the package", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the package", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "version of the package", + "name": "version", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/packages/{owner}/{type}/{name}/{version}/files": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "package" + ], + "summary": "Gets all files of a package", + "operationId": "listPackageFiles", + "parameters": [ + { + "type": "string", + "description": "owner of the package", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "type of the package", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the package", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "version of the package", + "name": "version", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PackageFileList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/issues/search": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Search for issues across the repositories that the user has access to", + "operationId": "issueSearchIssues", + "parameters": [ + { + "type": "string", + "description": "whether issue is open or closed", + "name": "state", + "in": "query" + }, + { + "type": "string", + "description": "comma separated list of labels. Fetch only issues that have any of this labels. Non existent labels are discarded", + "name": "labels", + "in": "query" + }, + { + "type": "string", + "description": "comma separated list of milestone names. Fetch only issues that have any of this milestones. Non existent are discarded", + "name": "milestones", + "in": "query" + }, + { + "type": "string", + "description": "search string", + "name": "q", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "repository to prioritize in the results", + "name": "priority_repo_id", + "in": "query" + }, + { + "type": "string", + "description": "filter by type (issues / pulls) if set", + "name": "type", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show notifications updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show notifications updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + }, + { + "type": "boolean", + "description": "filter (issues / pulls) assigned to you, default is false", + "name": "assigned", + "in": "query" + }, + { + "type": "boolean", + "description": "filter (issues / pulls) created by you, default is false", + "name": "created", + "in": "query" + }, + { + "type": "boolean", + "description": "filter (issues / pulls) mentioning you, default is false", + "name": "mentioned", + "in": "query" + }, + { + "type": "boolean", + "description": "filter pulls requesting your review, default is false", + "name": "review_requested", + "in": "query" + }, + { + "type": "boolean", + "description": "filter pulls reviewed by you, default is false", + "name": "reviewed", + "in": "query" + }, + { + "type": "string", + "description": "filter by owner", + "name": "owner", + "in": "query" + }, + { + "type": "string", + "description": "filter by team (requires organization owner parameter to be provided)", + "name": "team", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/IssueList" + } + } + } + }, + "/repos/migrate": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Migrate a remote git repository", + "operationId": "repoMigrate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/MigrateRepoOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "409": { + "description": "The repository with the same name already exists." + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/search": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Search for repositories", + "operationId": "repoSearch", + "parameters": [ + { + "type": "string", + "description": "keyword", + "name": "q", + "in": "query" + }, + { + "type": "boolean", + "description": "Limit search to repositories with keyword as topic", + "name": "topic", + "in": "query" + }, + { + "type": "boolean", + "description": "include search of keyword within repository description", + "name": "includeDesc", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "search only for repos that the user with the given id owns or contributes to", + "name": "uid", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "repo owner to prioritize in the results", + "name": "priority_owner_id", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "search only for repos that belong to the given team id", + "name": "team_id", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "search only for repos that the user with the given id has starred", + "name": "starredBy", + "in": "query" + }, + { + "type": "boolean", + "description": "include private repositories this user has access to (defaults to true)", + "name": "private", + "in": "query" + }, + { + "type": "boolean", + "description": "show only pubic, private or all repositories (defaults to all)", + "name": "is_private", + "in": "query" + }, + { + "type": "boolean", + "description": "include template repositories this user has access to (defaults to true)", + "name": "template", + "in": "query" + }, + { + "type": "boolean", + "description": "show only archived, non-archived or all repositories (defaults to all)", + "name": "archived", + "in": "query" + }, + { + "type": "string", + "description": "type of repository to search for. Supported values are \"fork\", \"source\", \"mirror\" and \"collaborative\"", + "name": "mode", + "in": "query" + }, + { + "type": "boolean", + "description": "if `uid` is given, search only for repos that the user owns", + "name": "exclusive", + "in": "query" + }, + { + "type": "string", + "description": "sort repos by attribute. Supported values are \"alpha\", \"created\", \"updated\", \"size\", and \"id\". Default is \"alpha\"", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "description": "sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified.", + "name": "order", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/SearchResults" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a repository", + "operationId": "repoGet", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Repository" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a repository", + "operationId": "repoDelete", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to delete", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to delete", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "patch": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Edit a repository's properties. Only fields that are set will be changed.", + "operationId": "repoEdit", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to edit", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to edit", + "name": "repo", + "in": "path", + "required": true + }, + { + "description": "Properties of a repo that you can edit", + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditRepoOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/activities/feeds": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's activity feeds", + "operationId": "repoListActivityFeeds", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "date", + "description": "the date of the activities to be found", + "name": "date", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ActivityFeedsList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/archive/{archive}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get an archive of a repository", + "operationId": "repoGetArchive", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "the git reference for download with attached archive format (e.g. master.zip)", + "name": "archive", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "success" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/assignees": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Return all users that have write access and can be assigned to issues", + "operationId": "repoGetAssignees", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/repos/{owner}/{repo}/branch_protections": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List branch protections for a repository", + "operationId": "repoListBranchProtection", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/BranchProtectionList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a branch protections for a repository", + "operationId": "repoCreateBranchProtection", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateBranchProtectionOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/BranchProtection" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/branch_protections/{name}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a specific branch protection for the repository", + "operationId": "repoGetBranchProtection", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of protected branch", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/BranchProtection" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a specific branch protection for the repository", + "operationId": "repoDeleteBranchProtection", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of protected branch", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Edit a branch protections for a repository. Only fields that are set will be changed", + "operationId": "repoEditBranchProtection", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of protected branch", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditBranchProtectionOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/BranchProtection" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/branches": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's branches", + "operationId": "repoListBranches", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/BranchList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a branch", + "operationId": "repoCreateBranch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateBranchRepoOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Branch" + }, + "404": { + "description": "The old branch does not exist." + }, + "409": { + "description": "The branch with the same name already exists." + } + } + } + }, + "/repos/{owner}/{repo}/branches/{branch}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Retrieve a specific branch from a repository, including its effective branch protection", + "operationId": "repoGetBranch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "branch to get", + "name": "branch", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Branch" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a specific branch from a repository", + "operationId": "repoDeleteBranch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "branch to delete", + "name": "branch", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/collaborators": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's collaborators", + "operationId": "repoListCollaborators", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/repos/{owner}/{repo}/collaborators/{collaborator}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Check if a user is a collaborator of a repository", + "operationId": "repoCheckCollaborator", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the collaborator", + "name": "collaborator", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Add a collaborator to a repository", + "operationId": "repoAddCollaborator", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the collaborator to add", + "name": "collaborator", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/AddCollaboratorOption" + } + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a collaborator from a repository", + "operationId": "repoDeleteCollaborator", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the collaborator to delete", + "name": "collaborator", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/collaborators/{collaborator}/permission": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get repository permissions for a user", + "operationId": "repoGetRepoPermissions", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the collaborator", + "name": "collaborator", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepoCollaboratorPermission" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/commits": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a list of all commits from a repository", + "operationId": "repoGetAllCommits", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "SHA or branch to start listing commits from (usually 'master')", + "name": "sha", + "in": "query" + }, + { + "type": "string", + "description": "filepath of a file/dir", + "name": "path", + "in": "query" + }, + { + "type": "boolean", + "description": "include diff stats for every commit (disable for speedup, default 'true')", + "name": "stat", + "in": "query" + }, + { + "type": "boolean", + "description": "include verification for every commit (disable for speedup, default 'true')", + "name": "verification", + "in": "query" + }, + { + "type": "boolean", + "description": "include a list of affected files for every commit (disable for speedup, default 'true')", + "name": "files", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results (ignored if used with 'path')", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "commits that match the given specifier will not be listed.", + "name": "not", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CommitList" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "$ref": "#/responses/EmptyRepository" + } + } + } + }, + "/repos/{owner}/{repo}/commits/{ref}/status": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a commit's combined status, by branch/tag/commit reference", + "operationId": "repoGetCombinedStatusByRef", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of branch/tag/commit", + "name": "ref", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CombinedStatus" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/commits/{ref}/statuses": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a commit's statuses, by branch/tag/commit reference", + "operationId": "repoListStatusesByRef", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of branch/tag/commit", + "name": "ref", + "in": "path", + "required": true + }, + { + "enum": [ + "oldest", + "recentupdate", + "leastupdate", + "leastindex", + "highestindex" + ], + "type": "string", + "description": "type of sort", + "name": "sort", + "in": "query" + }, + { + "enum": [ + "pending", + "success", + "error", + "failure", + "warning" + ], + "type": "string", + "description": "type of state", + "name": "state", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CommitStatusList" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/contents": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets the metadata of all the entries of the root dir", + "operationId": "repoGetContentsList", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)", + "name": "ref", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ContentsListResponse" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Modify multiple files in a repository", + "operationId": "repoChangeFiles", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ChangeFilesOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/FilesResponse" + }, + "403": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/contents/{filepath}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir", + "operationId": "repoGetContents", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "path of the dir, file, symlink or submodule in the repo", + "name": "filepath", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)", + "name": "ref", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ContentsResponse" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Update a file in a repository", + "operationId": "repoUpdateFile", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "path of the file to update", + "name": "filepath", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateFileOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/FileResponse" + }, + "403": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a file in a repository", + "operationId": "repoCreateFile", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "path of the file to create", + "name": "filepath", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateFileOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/FileResponse" + }, + "403": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a file in a repository", + "operationId": "repoDeleteFile", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "path of the file to delete", + "name": "filepath", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteFileOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/FileDeleteResponse" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/diffpatch": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Apply diff patch to repository", + "operationId": "repoApplyDiffPatch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateFileOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/FileResponse" + } + } + } + }, + "/repos/{owner}/{repo}/editorconfig/{filepath}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get the EditorConfig definitions of a file in a repository", + "operationId": "repoGetEditorConfig", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "filepath of file to get", + "name": "filepath", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)", + "name": "ref", + "in": "query" + } + ], + "responses": { + "200": { + "description": "success" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/forks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's forks", + "operationId": "listForks", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Fork a repository", + "operationId": "createFork", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to fork", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to fork", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateForkOption" + } + } + ], + "responses": { + "202": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "409": { + "description": "The repository with the same name already exists." + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/git/blobs/{sha}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets the blob of a repository.", + "operationId": "GetBlob", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "sha of the commit", + "name": "sha", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitBlobResponse" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/git/commits/{sha}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a single commit from a repository", + "operationId": "repoGetSingleCommit", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "a git ref or commit sha", + "name": "sha", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "include diff stats for every commit (disable for speedup, default 'true')", + "name": "stat", + "in": "query" + }, + { + "type": "boolean", + "description": "include verification for every commit (disable for speedup, default 'true')", + "name": "verification", + "in": "query" + }, + { + "type": "boolean", + "description": "include a list of affected files for every commit (disable for speedup, default 'true')", + "name": "files", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/Commit" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/git/commits/{sha}.{diffType}": { + "get": { + "produces": [ + "text/plain" + ], + "tags": [ + "repository" + ], + "summary": "Get a commit's diff or patch", + "operationId": "repoDownloadCommitDiffOrPatch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "SHA of the commit to get", + "name": "sha", + "in": "path", + "required": true + }, + { + "enum": [ + "diff", + "patch" + ], + "type": "string", + "description": "whether the output is diff or patch", + "name": "diffType", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/string" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/git/notes/{sha}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a note corresponding to a single commit from a repository", + "operationId": "repoGetNote", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "a git ref or commit sha", + "name": "sha", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Note" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/git/refs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get specified ref or filtered repository's refs", + "operationId": "repoListAllGitRefs", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/ReferenceList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/git/refs/{ref}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get specified ref or filtered repository's refs", + "operationId": "repoListGitRefs", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "part or full name of the ref", + "name": "ref", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/ReferenceList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/git/tags/{sha}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets the tag object of an annotated tag (not lightweight tags)", + "operationId": "GetAnnotatedTag", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "sha of the tag. The Git tags API only supports annotated tag objects, not lightweight tags.", + "name": "sha", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/AnnotatedTag" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/git/trees/{sha}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets the tree of a repository.", + "operationId": "GetTree", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "sha of the commit", + "name": "sha", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "show all directories and files", + "name": "recursive", + "in": "query" + }, + { + "type": "integer", + "description": "page number; the 'truncated' field in the response will be true if there are still more items after this page, false if the last page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "number of items per page", + "name": "per_page", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitTreeResponse" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/hooks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List the hooks in a repository", + "operationId": "repoListHooks", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/HookList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a hook", + "operationId": "repoCreateHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateHookOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/repos/{owner}/{repo}/hooks/git": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List the Git hooks in a repository", + "operationId": "repoListGitHooks", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitHookList" + } + } + } + }, + "/repos/{owner}/{repo}/hooks/git/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a Git hook", + "operationId": "repoGetGitHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitHook" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a Git hook in a repository", + "operationId": "repoDeleteGitHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Edit a Git hook in a repository", + "operationId": "repoEditGitHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditGitHookOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitHook" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/hooks/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a hook", + "operationId": "repoGetHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a hook in a repository", + "operationId": "repoDeleteHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the hook to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Edit a hook in a repository", + "operationId": "repoEditHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the hook", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditHookOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/repos/{owner}/{repo}/hooks/{id}/tests": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Test a push webhook", + "operationId": "repoTestHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the hook to test", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The name of the commit/branch/tag, indicates which commit will be loaded to the webhook payload.", + "name": "ref", + "in": "query" + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + } + }, + "/repos/{owner}/{repo}/issue_config": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Returns the issue config for a repo", + "operationId": "repoGetIssueConfig", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepoIssueConfig" + } + } + } + }, + "/repos/{owner}/{repo}/issue_config/validate": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Returns the validation information for a issue config", + "operationId": "repoValidateIssueConfig", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepoIssueConfigValidation" + } + } + } + }, + "/repos/{owner}/{repo}/issue_templates": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get available issue templates for a repository", + "operationId": "repoGetIssueTemplates", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/IssueTemplates" + } + } + } + }, + "/repos/{owner}/{repo}/issues": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List a repository's issues", + "operationId": "issueListIssues", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "enum": [ + "closed", + "open", + "all" + ], + "type": "string", + "description": "whether issue is open or closed", + "name": "state", + "in": "query" + }, + { + "type": "string", + "description": "comma separated list of labels. Fetch only issues that have any of this labels. Non existent labels are discarded", + "name": "labels", + "in": "query" + }, + { + "type": "string", + "description": "search string", + "name": "q", + "in": "query" + }, + { + "enum": [ + "issues", + "pulls" + ], + "type": "string", + "description": "filter by type (issues / pulls) if set", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "comma separated list of milestone names or ids. It uses names and fall back to ids. Fetch only issues that have any of this milestones. Non existent milestones are discarded", + "name": "milestones", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show items updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show items updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + }, + { + "type": "string", + "description": "Only show items which were created by the the given user", + "name": "created_by", + "in": "query" + }, + { + "type": "string", + "description": "Only show items for which the given user is assigned", + "name": "assigned_by", + "in": "query" + }, + { + "type": "string", + "description": "Only show items in which the given user was mentioned", + "name": "mentioned_by", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/IssueList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Create an issue. If using deadline only the date will be taken into account, and time of day ignored.", + "operationId": "issueCreateIssue", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateIssueOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Issue" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "412": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/issues/comments": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List all comments in a repository", + "operationId": "issueGetRepoComments", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "date-time", + "description": "if provided, only comments updated since the provided time are returned.", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "if provided, only comments updated before the provided time are returned.", + "name": "before", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CommentList" + } + } + } + }, + "/repos/{owner}/{repo}/issues/comments/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get a comment", + "operationId": "issueGetComment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Comment" + }, + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete a comment", + "operationId": "issueDeleteComment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of comment to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit a comment", + "operationId": "issueEditComment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditIssueCommentOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Comment" + }, + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/comments/{id}/assets": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List comment's attachments", + "operationId": "issueListIssueCommentAttachments", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/AttachmentList" + }, + "404": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Create a comment attachment", + "operationId": "issueCreateIssueCommentAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the attachment", + "name": "name", + "in": "query" + }, + { + "type": "file", + "description": "attachment to upload", + "name": "attachment", + "in": "formData", + "required": true + } + ], + "responses": { + "201": { + "$ref": "#/responses/Attachment" + }, + "400": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/issues/comments/{id}/assets/{attachment_id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get a comment attachment", + "operationId": "issueGetIssueCommentAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to get", + "name": "attachment_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Attachment" + }, + "404": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Delete a comment attachment", + "operationId": "issueDeleteIssueCommentAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to delete", + "name": "attachment_id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit a comment attachment", + "operationId": "issueEditIssueCommentAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to edit", + "name": "attachment_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditAttachmentOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Attachment" + }, + "404": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/issues/comments/{id}/reactions": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get a list of reactions from a comment of an issue", + "operationId": "issueGetCommentReactions", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/ReactionList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Add a reaction to a comment of an issue", + "operationId": "issuePostCommentReaction", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "content", + "in": "body", + "schema": { + "$ref": "#/definitions/EditReactionOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Reaction" + }, + "201": { + "$ref": "#/responses/Reaction" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Remove a reaction from a comment of an issue", + "operationId": "issueDeleteCommentReaction", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "content", + "in": "body", + "schema": { + "$ref": "#/definitions/EditReactionOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/issues/pinned": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's pinned issues", + "operationId": "repoListPinnedIssues", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/IssueList" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get an issue", + "operationId": "issueGetIssue", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to get", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Issue" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete an issue", + "operationId": "issueDelete", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of issue to delete", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit an issue. If using deadline only the date will be taken into account, and time of day ignored.", + "operationId": "issueEditIssue", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to edit", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditIssueOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Issue" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "412": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/assets": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List issue's attachments", + "operationId": "issueListIssueAttachments", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/AttachmentList" + }, + "404": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Create an issue attachment", + "operationId": "issueCreateIssueAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the attachment", + "name": "name", + "in": "query" + }, + { + "type": "file", + "description": "attachment to upload", + "name": "attachment", + "in": "formData", + "required": true + } + ], + "responses": { + "201": { + "$ref": "#/responses/Attachment" + }, + "400": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/assets/{attachment_id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get an issue attachment", + "operationId": "issueGetIssueAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to get", + "name": "attachment_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Attachment" + }, + "404": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Delete an issue attachment", + "operationId": "issueDeleteIssueAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to delete", + "name": "attachment_id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit an issue attachment", + "operationId": "issueEditIssueAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to edit", + "name": "attachment_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditAttachmentOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Attachment" + }, + "404": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/blocks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List issues that are blocked by this issue", + "operationId": "issueListBlocks", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/IssueList" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Block the issue given in the body by the issue in path", + "operationId": "issueCreateIssueBlocking", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/IssueMeta" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Issue" + }, + "404": { + "description": "the issue does not exist" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Unblock the issue given in the body by the issue in path", + "operationId": "issueRemoveIssueBlocking", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/IssueMeta" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Issue" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/comments": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List all comments on an issue", + "operationId": "issueGetComments", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "date-time", + "description": "if provided, only comments updated since the specified time are returned.", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "if provided, only comments updated before the provided time are returned.", + "name": "before", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CommentList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Add a comment to an issue", + "operationId": "issueCreateComment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateIssueCommentOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Comment" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/comments/{id}": { + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete a comment", + "operationId": "issueDeleteCommentDeprecated", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "this parameter is ignored", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of comment to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Edit a comment", + "operationId": "issueEditCommentDeprecated", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "this parameter is ignored", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the comment to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditIssueCommentOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Comment" + }, + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/deadline": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Set an issue deadline. If set to null, the deadline is deleted. If using deadline only the date will be taken into account, and time of day ignored.", + "operationId": "issueEditIssueDeadline", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to create or update a deadline on", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditDeadlineOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/IssueDeadline" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/dependencies": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List an issue's dependencies, i.e all issues that block this issue.", + "operationId": "issueListIssueDependencies", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/IssueList" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Make the issue in the url depend on the issue in the form.", + "operationId": "issueCreateIssueDependencies", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/IssueMeta" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Issue" + }, + "404": { + "description": "the issue does not exist" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Remove an issue dependency", + "operationId": "issueRemoveIssueDependencies", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/IssueMeta" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Issue" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/labels": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get an issue's labels", + "operationId": "issueGetLabels", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/LabelList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Replace an issue's labels", + "operationId": "issueReplaceLabels", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/IssueLabelsOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/LabelList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Add a label to an issue", + "operationId": "issueAddLabel", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/IssueLabelsOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/LabelList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Remove all labels from an issue", + "operationId": "issueClearLabels", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/labels/{id}": { + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Remove a label from an issue", + "operationId": "issueRemoveLabel", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to remove", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/pin": { + "post": { + "tags": [ + "issue" + ], + "summary": "Pin an Issue", + "operationId": "pinIssue", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of issue to pin", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "issue" + ], + "summary": "Unpin an Issue", + "operationId": "unpinIssue", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of issue to unpin", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/pin/{position}": { + "patch": { + "tags": [ + "issue" + ], + "summary": "Moves the Pin to the given Position", + "operationId": "moveIssuePin", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "the new position", + "name": "position", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/reactions": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get a list reactions of an issue", + "operationId": "issueGetIssueReactions", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ReactionList" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Add a reaction to an issue", + "operationId": "issuePostIssueReaction", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "content", + "in": "body", + "schema": { + "$ref": "#/definitions/EditReactionOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Reaction" + }, + "201": { + "$ref": "#/responses/Reaction" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Remove a reaction from an issue", + "operationId": "issueDeleteIssueReaction", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "content", + "in": "body", + "schema": { + "$ref": "#/definitions/EditReactionOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/stopwatch/delete": { + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Delete an issue's existing stopwatch.", + "operationId": "issueDeleteStopWatch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to stop the stopwatch on", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "description": "Not repo writer, user does not have rights to toggle stopwatch" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "description": "Cannot cancel a non existent stopwatch" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/stopwatch/start": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Start stopwatch on an issue.", + "operationId": "issueStartStopWatch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to create the stopwatch on", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "201": { + "$ref": "#/responses/empty" + }, + "403": { + "description": "Not repo writer, user does not have rights to toggle stopwatch" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "description": "Cannot start a stopwatch again if it already exists" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/stopwatch/stop": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Stop an issue's existing stopwatch.", + "operationId": "issueStopStopWatch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to stop the stopwatch on", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "201": { + "$ref": "#/responses/empty" + }, + "403": { + "description": "Not repo writer, user does not have rights to toggle stopwatch" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "description": "Cannot stop a non existent stopwatch" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/subscriptions": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get users who subscribed on an issue.", + "operationId": "issueSubscriptions", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/subscriptions/check": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Check if user is subscribed to an issue", + "operationId": "issueCheckSubscription", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/WatchInfo" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/subscriptions/{user}": { + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Subscribe user to issue", + "operationId": "issueAddSubscription", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "user to subscribe", + "name": "user", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Already subscribed" + }, + "201": { + "description": "Successfully Subscribed" + }, + "304": { + "description": "User can only subscribe itself if he is no admin" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Unsubscribe user from issue", + "operationId": "issueDeleteSubscription", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "user witch unsubscribe", + "name": "user", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Already unsubscribed" + }, + "201": { + "description": "Successfully Unsubscribed" + }, + "304": { + "description": "User can only subscribe itself if he is no admin" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/timeline": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List all comments and events on an issue", + "operationId": "issueGetCommentsAndTimeline", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "date-time", + "description": "if provided, only comments updated since the specified time are returned.", + "name": "since", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "if provided, only comments updated before the provided time are returned.", + "name": "before", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TimelineList" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/times": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List an issue's tracked times", + "operationId": "issueTrackedTimes", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "optional filter by user (available for issue managers)", + "name": "user", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show times updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show times updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTimeList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Add tracked time to a issue", + "operationId": "issueAddTime", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/AddTimeOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTime" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Reset a tracked time of an issue", + "operationId": "issueResetTime", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue to add tracked time to", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/issues/{index}/times/{id}": { + "delete": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Delete specific tracked time", + "operationId": "issueDeleteTime", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the issue", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of time to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/keys": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's keys", + "operationId": "repoListKeys", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "the key_id to search for", + "name": "key_id", + "in": "query" + }, + { + "type": "string", + "description": "fingerprint of the key", + "name": "fingerprint", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/DeployKeyList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Add a key to a repository", + "operationId": "repoCreateKey", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateKeyOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/DeployKey" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/keys/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a repository's key by id", + "operationId": "repoGetKey", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the key to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/DeployKey" + } + } + }, + "delete": { + "tags": [ + "repository" + ], + "summary": "Delete a key from a repository", + "operationId": "repoDeleteKey", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the key to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/labels": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get all of a repository's labels", + "operationId": "issueListLabels", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/LabelList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Create a label", + "operationId": "issueCreateLabel", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateLabelOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Label" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/labels/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get a single label", + "operationId": "issueGetLabel", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Label" + } + } + }, + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete a label", + "operationId": "issueDeleteLabel", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Update a label", + "operationId": "issueEditLabel", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the label to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditLabelOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Label" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/languages": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get languages and number of bytes of code written", + "operationId": "repoGetLanguages", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/LanguageStatistics" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/media/{filepath}": { + "get": { + "tags": [ + "repository" + ], + "summary": "Get a file or it's LFS object from a repository", + "operationId": "repoGetRawFileOrLFS", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "filepath of the file to get", + "name": "filepath", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)", + "name": "ref", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Returns raw file content." + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/milestones": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get all of a repository's opened milestones", + "operationId": "issueGetMilestonesList", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Milestone state, Recognized values are open, closed and all. Defaults to \"open\"", + "name": "state", + "in": "query" + }, + { + "type": "string", + "description": "filter by milestone name", + "name": "name", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/MilestoneList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Create a milestone", + "operationId": "issueCreateMilestone", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateMilestoneOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Milestone" + } + } + } + }, + "/repos/{owner}/{repo}/milestones/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Get a milestone", + "operationId": "issueGetMilestone", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "the milestone to get, identified by ID and if not available by name", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Milestone" + } + } + }, + "delete": { + "tags": [ + "issue" + ], + "summary": "Delete a milestone", + "operationId": "issueDeleteMilestone", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "the milestone to delete, identified by ID and if not available by name", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Update a milestone", + "operationId": "issueEditMilestone", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "the milestone to edit, identified by ID and if not available by name", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditMilestoneOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Milestone" + } + } + } + }, + "/repos/{owner}/{repo}/mirror-sync": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Sync a mirrored repository", + "operationId": "repoMirrorSync", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to sync", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to sync", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/new_pin_allowed": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Returns if new Issue Pins are allowed", + "operationId": "repoNewPinAllowed", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepoNewIssuePinsAllowed" + } + } + } + }, + "/repos/{owner}/{repo}/notifications": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "notification" + ], + "summary": "List users's notification threads on a specific repo", + "operationId": "notifyGetRepoList", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "If true, show notifications marked as read. Default value is false", + "name": "all", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "description": "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread \u0026 pinned", + "name": "status-types", + "in": "query" + }, + { + "type": "array", + "items": { + "enum": [ + "issue", + "pull", + "commit", + "repository" + ], + "type": "string" + }, + "collectionFormat": "multi", + "description": "filter notifications by subject type", + "name": "subject-type", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show notifications updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show notifications updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/NotificationThreadList" + } + } + }, + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "notification" + ], + "summary": "Mark notification threads as read, pinned or unread on a specific repo", + "operationId": "notifyReadRepoList", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "If true, mark all notifications on this repo. Default value is false", + "name": "all", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "description": "Mark notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread.", + "name": "status-types", + "in": "query" + }, + { + "type": "string", + "description": "Status to mark notifications as. Defaults to read.", + "name": "to-status", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated.", + "name": "last_read_at", + "in": "query" + } + ], + "responses": { + "205": { + "$ref": "#/responses/NotificationThreadList" + } + } + } + }, + "/repos/{owner}/{repo}/pulls": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's pull requests", + "operationId": "repoListPullRequests", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "enum": [ + "closed", + "open", + "all" + ], + "type": "string", + "description": "State of pull request: open or closed (optional)", + "name": "state", + "in": "query" + }, + { + "enum": [ + "oldest", + "recentupdate", + "leastupdate", + "mostcomment", + "leastcomment", + "priority" + ], + "type": "string", + "description": "Type of sort", + "name": "sort", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "ID of the milestone", + "name": "milestone", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "collectionFormat": "multi", + "description": "Label IDs", + "name": "labels", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullRequestList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a pull request", + "operationId": "repoCreatePullRequest", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreatePullRequestOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/PullRequest" + }, + "409": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/pinned": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's pinned pull requests", + "operationId": "repoListPinnedPullRequests", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullRequestList" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a pull request", + "operationId": "repoGetPullRequest", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to get", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullRequest" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Update a pull request. If using deadline only the date will be taken into account, and time of day ignored.", + "operationId": "repoEditPullRequest", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to edit", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditPullRequestOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/PullRequest" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "409": { + "$ref": "#/responses/error" + }, + "412": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}.{diffType}": { + "get": { + "produces": [ + "text/plain" + ], + "tags": [ + "repository" + ], + "summary": "Get a pull request diff or patch", + "operationId": "repoDownloadPullDiffOrPatch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to get", + "name": "index", + "in": "path", + "required": true + }, + { + "enum": [ + "diff", + "patch" + ], + "type": "string", + "description": "whether the output is diff or patch", + "name": "diffType", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "whether to include binary file changes. if true, the diff is applicable with `git apply`", + "name": "binary", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/string" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/commits": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get commits for a pull request", + "operationId": "repoGetPullRequestCommits", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to get", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CommitList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/files": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get changed files for a pull request", + "operationId": "repoGetPullRequestFiles", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to get", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "skip to given file", + "name": "skip-to", + "in": "query" + }, + { + "enum": [ + "ignore-all", + "ignore-change", + "ignore-eol", + "show-all" + ], + "type": "string", + "description": "whitespace behavior", + "name": "whitespace", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ChangedFileList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/merge": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Check if a pull request has been merged", + "operationId": "repoPullRequestIsMerged", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "pull request has been merged" + }, + "404": { + "description": "pull request has not been merged" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Merge a pull request", + "operationId": "repoMergePullRequest", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to merge", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/MergePullRequestOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/empty" + }, + "405": { + "$ref": "#/responses/empty" + }, + "409": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Cancel the scheduled auto merge for the given pull request", + "operationId": "repoCancelScheduledAutoMerge", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to merge", + "name": "index", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/requested_reviewers": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "create review requests for a pull request", + "operationId": "repoCreatePullReviewRequests", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PullReviewRequestOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/PullReviewList" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "cancel review requests for a pull request", + "operationId": "repoDeletePullReviewRequests", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PullReviewRequestOptions" + } + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/reviews": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List all reviews for a pull request", + "operationId": "repoListPullReviews", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReviewList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a review to an pull request", + "operationId": "repoCreatePullReview", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePullReviewOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReview" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a specific review for a pull request", + "operationId": "repoGetPullReview", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the review", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReview" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Submit a pending review to an pull request", + "operationId": "repoSubmitPullReview", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the review", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SubmitPullReviewOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReview" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a specific review from a pull request", + "operationId": "repoDeletePullReview", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the review", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a specific review for a pull request", + "operationId": "repoGetPullReviewComments", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the review", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReviewCommentList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/dismissals": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Dismiss a review for a pull request", + "operationId": "repoDismissPullReview", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the review", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DismissPullReviewOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReview" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/undismissals": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Cancel to dismiss a review for a pull request", + "operationId": "repoUnDismissPullReview", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request", + "name": "index", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the review", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PullReview" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/pulls/{index}/update": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Merge PR's baseBranch into headBranch", + "operationId": "repoUpdatePullRequest", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "index of the pull request to get", + "name": "index", + "in": "path", + "required": true + }, + { + "enum": [ + "merge", + "rebase" + ], + "type": "string", + "description": "how to update pull request", + "name": "style", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/push_mirrors": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get all push mirrors of the repository", + "operationId": "repoListPushMirrors", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/PushMirrorList" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "add a push mirror to the repository", + "operationId": "repoAddPushMirror", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreatePushMirrorOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/PushMirror" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/push_mirrors-sync": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Sync all push mirrored repository", + "operationId": "repoPushMirrorSync", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to sync", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to sync", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/empty" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/push_mirrors/{name}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get push mirror of the repository by remoteName", + "operationId": "repoGetPushMirrorByRemoteName", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "remote name of push mirror", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PushMirror" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "deletes a push mirror from a repository by remoteName", + "operationId": "repoDeletePushMirror", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "remote name of the pushMirror", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "400": { + "$ref": "#/responses/error" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/raw/{filepath}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a file from a repository", + "operationId": "repoGetRawFile", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "filepath of the file to get", + "name": "filepath", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)", + "name": "ref", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Returns raw file content." + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/releases": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's releases", + "operationId": "repoListReleases", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "filter (exclude / include) drafts, if you dont have repo write access none will show", + "name": "draft", + "in": "query" + }, + { + "type": "boolean", + "description": "filter (exclude / include) pre-releases", + "name": "pre-release", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results, deprecated - use limit", + "name": "per_page", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ReleaseList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a release", + "operationId": "repoCreateRelease", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateReleaseOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Release" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/releases/latest": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at", + "operationId": "repoGetLatestRelease", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Release" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/releases/tags/{tag}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a release by tag name", + "operationId": "repoGetReleaseByTag", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name of the release to get", + "name": "tag", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Release" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "repository" + ], + "summary": "Delete a release by tag name", + "operationId": "repoDeleteReleaseByTag", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "tag name of the release to delete", + "name": "tag", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "405": { + "$ref": "#/responses/empty" + } + } + } + }, + "/repos/{owner}/{repo}/releases/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a release", + "operationId": "repoGetRelease", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Release" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "repository" + ], + "summary": "Delete a release", + "operationId": "repoDeleteRelease", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "405": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Update a release", + "operationId": "repoEditRelease", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditReleaseOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Release" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/releases/{id}/assets": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List release's attachments", + "operationId": "repoListReleaseAttachments", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/AttachmentList" + } + } + }, + "post": { + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a release attachment", + "operationId": "repoCreateReleaseAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the attachment", + "name": "name", + "in": "query" + }, + { + "type": "file", + "description": "attachment to upload", + "name": "attachment", + "in": "formData", + "required": true + } + ], + "responses": { + "201": { + "$ref": "#/responses/Attachment" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a release attachment", + "operationId": "repoGetReleaseAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to get", + "name": "attachment_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Attachment" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a release attachment", + "operationId": "repoDeleteReleaseAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to delete", + "name": "attachment_id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Edit a release attachment", + "operationId": "repoEditReleaseAttachment", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the release", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "description": "id of the attachment to edit", + "name": "attachment_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditAttachmentOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Attachment" + } + } + } + }, + "/repos/{owner}/{repo}/reviewers": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Return all users that can be requested to review in this repo", + "operationId": "repoGetReviewers", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/repos/{owner}/{repo}/signing-key.gpg": { + "get": { + "produces": [ + "text/plain" + ], + "tags": [ + "repository" + ], + "summary": "Get signing-key.gpg for given repository", + "operationId": "repoSigningKey", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "GPG armored public key", + "schema": { + "type": "string" + } + } + } + } + }, + "/repos/{owner}/{repo}/stargazers": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's stargazers", + "operationId": "repoListStargazers", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/repos/{owner}/{repo}/statuses/{sha}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a commit's statuses", + "operationId": "repoListStatuses", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "sha of the commit", + "name": "sha", + "in": "path", + "required": true + }, + { + "enum": [ + "oldest", + "recentupdate", + "leastupdate", + "leastindex", + "highestindex" + ], + "type": "string", + "description": "type of sort", + "name": "sort", + "in": "query" + }, + { + "enum": [ + "pending", + "success", + "error", + "failure", + "warning" + ], + "type": "string", + "description": "type of state", + "name": "state", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/CommitStatusList" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a commit status", + "operationId": "repoCreateStatus", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "sha of the commit", + "name": "sha", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateStatusOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/CommitStatus" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/repos/{owner}/{repo}/subscribers": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's watchers", + "operationId": "repoListSubscribers", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/repos/{owner}/{repo}/subscription": { + "get": { + "tags": [ + "repository" + ], + "summary": "Check if the current user is watching a repo", + "operationId": "userCurrentCheckSubscription", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/WatchInfo" + }, + "404": { + "description": "User is not watching this repo or repo do not exist" + } + } + }, + "put": { + "tags": [ + "repository" + ], + "summary": "Watch a repo", + "operationId": "userCurrentPutSubscription", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/WatchInfo" + } + } + }, + "delete": { + "tags": [ + "repository" + ], + "summary": "Unwatch a repo", + "operationId": "userCurrentDeleteSubscription", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + } + }, + "/repos/{owner}/{repo}/tags": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's tags", + "operationId": "repoListTags", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results, default maximum page size is 50", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TagList" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a new git tag in a repository", + "operationId": "repoCreateTag", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateTagOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Tag" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "405": { + "$ref": "#/responses/empty" + }, + "409": { + "$ref": "#/responses/conflict" + } + } + } + }, + "/repos/{owner}/{repo}/tags/{tag}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get the tag of a repository by tag name", + "operationId": "repoGetTag", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of tag", + "name": "tag", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Tag" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a repository's tag by name", + "operationId": "repoDeleteTag", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of tag to delete", + "name": "tag", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "405": { + "$ref": "#/responses/empty" + }, + "409": { + "$ref": "#/responses/conflict" + } + } + } + }, + "/repos/{owner}/{repo}/teams": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repository's teams", + "operationId": "repoListTeams", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/TeamList" + } + } + } + }, + "/repos/{owner}/{repo}/teams/{team}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Check if a team is assigned to a repository", + "operationId": "repoCheckTeam", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "team", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Team" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "405": { + "$ref": "#/responses/error" + } + } + }, + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Add a team to a repository", + "operationId": "repoAddTeam", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "team", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "405": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a team from a repository", + "operationId": "repoDeleteTeam", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "team name", + "name": "team", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "405": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/times": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a repo's tracked times", + "operationId": "repoTrackedTimes", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "optional filter by user (available for issue managers)", + "name": "user", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show times updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show times updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTimeList" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/times/{user}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "List a user's tracked times in a repo", + "operationId": "userTrackedTimes", + "deprecated": true, + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of user", + "name": "user", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTimeList" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/topics": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get list of topics that a repository has", + "operationId": "repoListTopics", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TopicNames" + } + } + }, + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Replace list of topics for a repository", + "operationId": "repoUpdateTopics", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/RepoTopicOptions" + } + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "422": { + "$ref": "#/responses/invalidTopicsError" + } + } + } + }, + "/repos/{owner}/{repo}/topics/{topic}": { + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Add a topic to a repository", + "operationId": "repoAddTopic", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the topic to add", + "name": "topic", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "422": { + "$ref": "#/responses/invalidTopicsError" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a topic from a repository", + "operationId": "repoDeleteTopic", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the topic to delete", + "name": "topic", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "422": { + "$ref": "#/responses/invalidTopicsError" + } + } + } + }, + "/repos/{owner}/{repo}/transfer": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Transfer a repo ownership", + "operationId": "repoTransfer", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to transfer", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to transfer", + "name": "repo", + "in": "path", + "required": true + }, + { + "description": "Transfer Options", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/TransferRepoOption" + } + } + ], + "responses": { + "202": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repos/{owner}/{repo}/transfer/accept": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Accept a repo transfer", + "operationId": "acceptRepoTransfer", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to transfer", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to transfer", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "202": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/transfer/reject": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Reject a repo transfer", + "operationId": "rejectRepoTransfer", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to transfer", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to transfer", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/wiki/new": { + "post": { + "consumes": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a wiki page", + "operationId": "repoCreateWikiPage", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateWikiPageOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/WikiPage" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/wiki/page/{pageName}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a wiki page", + "operationId": "repoGetWikiPage", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the page", + "name": "pageName", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/WikiPage" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "tags": [ + "repository" + ], + "summary": "Delete a wiki page", + "operationId": "repoDeleteWikiPage", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the page", + "name": "pageName", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Edit a wiki page", + "operationId": "repoEditWikiPage", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the page", + "name": "pageName", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateWikiPageOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/WikiPage" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/repos/{owner}/{repo}/wiki/pages": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get all wiki pages", + "operationId": "repoGetWikiPages", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/WikiPageList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/wiki/revisions/{pageName}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get revisions of a wiki page", + "operationId": "repoGetWikiPageRevisions", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the page", + "name": "pageName", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/WikiCommitList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{template_owner}/{template_repo}/generate": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Create a repository using a template", + "operationId": "generateRepo", + "parameters": [ + { + "type": "string", + "description": "name of the template repository owner", + "name": "template_owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the template repository", + "name": "template_repo", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/GenerateRepoOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "409": { + "description": "The repository with the same name already exists." + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/repositories/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Get a repository by id", + "operationId": "repoGetByID", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the repo to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Repository" + } + } + } + }, + "/settings/api": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "settings" + ], + "summary": "Get instance's global settings for api", + "operationId": "getGeneralAPISettings", + "responses": { + "200": { + "$ref": "#/responses/GeneralAPISettings" + } + } + } + }, + "/settings/attachment": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "settings" + ], + "summary": "Get instance's global settings for Attachment", + "operationId": "getGeneralAttachmentSettings", + "responses": { + "200": { + "$ref": "#/responses/GeneralAttachmentSettings" + } + } + } + }, + "/settings/repository": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "settings" + ], + "summary": "Get instance's global settings for repositories", + "operationId": "getGeneralRepositorySettings", + "responses": { + "200": { + "$ref": "#/responses/GeneralRepoSettings" + } + } + } + }, + "/settings/ui": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "settings" + ], + "summary": "Get instance's global settings for ui", + "operationId": "getGeneralUISettings", + "responses": { + "200": { + "$ref": "#/responses/GeneralUISettings" + } + } + } + }, + "/signing-key.gpg": { + "get": { + "produces": [ + "text/plain" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Get default signing-key.gpg", + "operationId": "getSigningKey", + "responses": { + "200": { + "description": "GPG armored public key", + "schema": { + "type": "string" + } + } + } + } + }, + "/teams/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Get a team", + "operationId": "orgGetTeam", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Team" + } + } + }, + "delete": { + "tags": [ + "organization" + ], + "summary": "Delete a team", + "operationId": "orgDeleteTeam", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "team deleted" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Edit a team", + "operationId": "orgEditTeam", + "parameters": [ + { + "type": "integer", + "description": "id of the team to edit", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditTeamOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Team" + } + } + } + }, + "/teams/{id}/activities/feeds": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List a team's activity feeds", + "operationId": "orgListTeamActivityFeeds", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "date", + "description": "the date of the activities to be found", + "name": "date", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ActivityFeedsList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/teams/{id}/members": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List a team's members", + "operationId": "orgListTeamMembers", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/teams/{id}/members/{username}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List a particular member of team", + "operationId": "orgListTeamMember", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the member to list", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/User" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Add a team member", + "operationId": "orgAddTeamMember", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user to add", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Remove a team member", + "operationId": "orgRemoveTeamMember", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of the user to remove", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/teams/{id}/repos": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List a team's repos", + "operationId": "orgListTeamRepos", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + } + }, + "/teams/{id}/repos/{org}/{repo}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List a particular repo of team", + "operationId": "orgListTeamRepo", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "organization that owns the repo to list", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to list", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Repository" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Add a repository to a team", + "operationId": "orgAddTeamRepository", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "organization that owns the repo to add", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to add", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + }, + "delete": { + "description": "This does not delete the repository, it only removes the repository from the team.", + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Remove a repository from a team", + "operationId": "orgRemoveTeamRepository", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the team", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "organization that owns the repo to remove", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to remove", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/topics/search": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "search topics via keyword", + "operationId": "topicSearch", + "parameters": [ + { + "type": "string", + "description": "keywords to search", + "name": "q", + "in": "query", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TopicListResponse" + }, + "403": { + "$ref": "#/responses/forbidden" + } + } + } + }, + "/user": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get the authenticated user", + "operationId": "userGetCurrent", + "responses": { + "200": { + "$ref": "#/responses/User" + } + } + } + }, + "/user/applications/oauth2": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's oauth2 applications", + "operationId": "userGetOauth2Application", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/OAuth2ApplicationList" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "creates a new OAuth2 application", + "operationId": "userCreateOAuth2Application", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOAuth2ApplicationOptions" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/OAuth2Application" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/user/applications/oauth2/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "get an OAuth2 Application", + "operationId": "userGetOAuth2Application", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Application ID to be found", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/OAuth2Application" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "delete an OAuth2 Application", + "operationId": "userDeleteOAuth2Application", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "token to be deleted", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "patch": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "update an OAuth2 Application, this includes regenerating the client secret", + "operationId": "userUpdateOAuth2Application", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "application to be updated", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOAuth2ApplicationOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/OAuth2Application" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/user/emails": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's email addresses", + "operationId": "userListEmails", + "responses": { + "200": { + "$ref": "#/responses/EmailList" + } + } + }, + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Add email addresses", + "operationId": "userAddEmail", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateEmailOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/EmailList" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Delete email addresses", + "operationId": "userDeleteEmail", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/DeleteEmailOption" + } + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/user/followers": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's followers", + "operationId": "userCurrentListFollowers", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/user/following": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the users that the authenticated user is following", + "operationId": "userCurrentListFollowing", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/user/following/{username}": { + "get": { + "tags": [ + "user" + ], + "summary": "Check whether a user is followed by the authenticated user", + "operationId": "userCurrentCheckFollowing", + "parameters": [ + { + "type": "string", + "description": "username of followed user", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "put": { + "tags": [ + "user" + ], + "summary": "Follow a user", + "operationId": "userCurrentPutFollow", + "parameters": [ + { + "type": "string", + "description": "username of user to follow", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "delete": { + "tags": [ + "user" + ], + "summary": "Unfollow a user", + "operationId": "userCurrentDeleteFollow", + "parameters": [ + { + "type": "string", + "description": "username of user to unfollow", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + } + }, + "/user/gpg_key_token": { + "get": { + "produces": [ + "text/plain" + ], + "tags": [ + "user" + ], + "summary": "Get a Token to verify", + "operationId": "getVerificationToken", + "responses": { + "200": { + "$ref": "#/responses/string" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/user/gpg_key_verify": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Verify a GPG key", + "operationId": "userVerifyGPGKey", + "responses": { + "201": { + "$ref": "#/responses/GPGKey" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/user/gpg_keys": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's GPG keys", + "operationId": "userCurrentListGPGKeys", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/GPGKeyList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Create a GPG key", + "operationId": "userCurrentPostGPGKey", + "parameters": [ + { + "name": "Form", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateGPGKeyOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/GPGKey" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/user/gpg_keys/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get a GPG key", + "operationId": "userCurrentGetGPGKey", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of key to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/GPGKey" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Remove a GPG key", + "operationId": "userCurrentDeleteGPGKey", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of key to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/user/hooks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's webhooks", + "operationId": "userListHooks", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/HookList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Create a hook", + "operationId": "userCreateHook", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateHookOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/user/hooks/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get a hook", + "operationId": "userGetHook", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Delete a hook", + "operationId": "userDeleteHook", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the hook to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "patch": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Update a hook", + "operationId": "userEditHook", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of the hook to update", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/EditHookOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Hook" + } + } + } + }, + "/user/keys": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's public keys", + "operationId": "userCurrentListKeys", + "parameters": [ + { + "type": "string", + "description": "fingerprint of the key", + "name": "fingerprint", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/PublicKeyList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Create a public key", + "operationId": "userCurrentPostKey", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateKeyOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/PublicKey" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/user/keys/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get a public key", + "operationId": "userCurrentGetKey", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of key to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/PublicKey" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Delete a public key", + "operationId": "userCurrentDeleteKey", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "id of key to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/user/orgs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List the current user's organizations", + "operationId": "orgListCurrentUserOrgs", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/OrganizationList" + } + } + } + }, + "/user/repos": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the repos that the authenticated user owns", + "operationId": "userCurrentListRepos", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "repository", + "user" + ], + "summary": "Create a repository", + "operationId": "createCurrentUserRepo", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateRepoOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/Repository" + }, + "400": { + "$ref": "#/responses/error" + }, + "409": { + "description": "The repository with the same name already exists." + }, + "422": { + "$ref": "#/responses/validationError" + } + } + } + }, + "/user/settings": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get user settings", + "operationId": "getUserSettings", + "responses": { + "200": { + "$ref": "#/responses/UserSettings" + } + } + }, + "patch": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Update user settings", + "operationId": "updateUserSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/UserSettingsOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserSettings" + } + } + } + }, + "/user/starred": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "The repos that the authenticated user has starred", + "operationId": "userCurrentListStarred", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + } + }, + "/user/starred/{owner}/{repo}": { + "get": { + "tags": [ + "user" + ], + "summary": "Whether the authenticated is starring the repo", + "operationId": "userCurrentCheckStarring", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, + "put": { + "tags": [ + "user" + ], + "summary": "Star the given repo", + "operationId": "userCurrentPutStar", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to star", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to star", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + }, + "delete": { + "tags": [ + "user" + ], + "summary": "Unstar the given repo", + "operationId": "userCurrentDeleteStar", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to unstar", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to unstar", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + } + } + } + }, + "/user/stopwatches": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get list of all existing stopwatches", + "operationId": "userGetStopWatches", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/StopWatchList" + } + } + } + }, + "/user/subscriptions": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List repositories watched by the authenticated user", + "operationId": "userCurrentListSubscriptions", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + } + }, + "/user/teams": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List all the teams a user belongs to", + "operationId": "userListTeams", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TeamList" + } + } + } + }, + "/user/times": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the current user's tracked times", + "operationId": "userCurrentTrackedTimes", + "parameters": [ + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show times updated after the given time. This is a timestamp in RFC 3339 format", + "name": "since", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Only show times updated before the given time. This is a timestamp in RFC 3339 format", + "name": "before", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTimeList" + } + } + } + }, + "/users/search": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Search for users", + "operationId": "userSearch", + "parameters": [ + { + "type": "string", + "description": "keyword", + "name": "q", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "ID of the user to search for", + "name": "uid", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "SearchResults of a successful search", + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + }, + "ok": { + "type": "boolean" + } + } + } + } + } + } + }, + "/users/{username}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get a user", + "operationId": "userGet", + "parameters": [ + { + "type": "string", + "description": "username of user to get", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/User" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/users/{username}/activities/feeds": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List a user's activity feeds", + "operationId": "userListActivityFeeds", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "boolean", + "description": "if true, only show actions performed by the requested user", + "name": "only-performed-by", + "in": "query" + }, + { + "type": "string", + "format": "date", + "description": "the date of the activities to be found", + "name": "date", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/ActivityFeedsList" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/users/{username}/followers": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the given user's followers", + "operationId": "userListFollowers", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/users/{username}/following": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the users that the given user is following", + "operationId": "userListFollowing", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserList" + } + } + } + }, + "/users/{username}/following/{target}": { + "get": { + "tags": [ + "user" + ], + "summary": "Check if one user is following another user", + "operationId": "userCheckFollowing", + "parameters": [ + { + "type": "string", + "description": "username of following user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "username of followed user", + "name": "target", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/users/{username}/gpg_keys": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the given user's GPG keys", + "operationId": "userListGPGKeys", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/GPGKeyList" + } + } + } + }, + "/users/{username}/heatmap": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Get a user's heatmap", + "operationId": "userGetHeatmapData", + "parameters": [ + { + "type": "string", + "description": "username of user to get", + "name": "username", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/UserHeatmapData" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/users/{username}/keys": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the given user's public keys", + "operationId": "userListKeys", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "fingerprint of the key", + "name": "fingerprint", + "in": "query" + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/PublicKeyList" + } + } + } + }, + "/users/{username}/orgs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "List a user's organizations", + "operationId": "orgListUserOrgs", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/OrganizationList" + } + } + } + }, + "/users/{username}/orgs/{org}/permissions": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "organization" + ], + "summary": "Get user permissions in organization", + "operationId": "orgGetUserPermissions", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/OrganizationPermissions" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/users/{username}/repos": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the repos owned by the given user", + "operationId": "userListRepos", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + } + }, + "/users/{username}/starred": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "The repos that the given user has starred", + "operationId": "userListStarred", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + } + }, + "/users/{username}/subscriptions": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the repositories watched by a user", + "operationId": "userListSubscriptions", + "parameters": [ + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/RepositoryList" + } + } + } + }, + "/users/{username}/tokens": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "List the authenticated user's access tokens", + "operationId": "userGetTokens", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "page number of results to return (1-based)", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "page size of results", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "$ref": "#/responses/AccessTokenList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "Create an access token", + "operationId": "userCreateToken", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateAccessTokenOption" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/AccessToken" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/users/{username}/tokens/{token}": { + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "user" + ], + "summary": "delete an access token", + "operationId": "userDeleteAccessToken", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "token to be deleted, identified by ID and if not available by name", + "name": "token", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/error" + } + } + } + }, + "/version": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns the version of the Gitea application", + "operationId": "getVersion", + "responses": { + "200": { + "$ref": "#/responses/ServerVersion" + } + } + } + } + }, + "definitions": { + "APIError": { + "description": "APIError is an api error with a message", + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "AccessToken": { + "type": "object", + "title": "AccessToken represents an API access token.", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Scopes" + }, + "sha1": { + "type": "string", + "x-go-name": "Token" + }, + "token_last_eight": { + "type": "string", + "x-go-name": "TokenLastEight" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Activity": { + "type": "object", + "properties": { + "act_user": { + "$ref": "#/definitions/User" + }, + "act_user_id": { + "type": "integer", + "format": "int64", + "x-go-name": "ActUserID" + }, + "comment": { + "$ref": "#/definitions/Comment" + }, + "comment_id": { + "type": "integer", + "format": "int64", + "x-go-name": "CommentID" + }, + "content": { + "type": "string", + "x-go-name": "Content" + }, + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "is_private": { + "type": "boolean", + "x-go-name": "IsPrivate" + }, + "op_type": { + "type": "string", + "x-go-name": "OpType" + }, + "ref_name": { + "type": "string", + "x-go-name": "RefName" + }, + "repo": { + "$ref": "#/definitions/Repository" + }, + "repo_id": { + "type": "integer", + "format": "int64", + "x-go-name": "RepoID" + }, + "user_id": { + "type": "integer", + "format": "int64", + "x-go-name": "UserID" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ActivityPub": { + "description": "ActivityPub type", + "type": "object", + "properties": { + "@context": { + "type": "string", + "x-go-name": "Context" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "AddCollaboratorOption": { + "description": "AddCollaboratorOption options when adding a user as a collaborator of a repository", + "type": "object", + "properties": { + "permission": { + "type": "string", + "x-go-name": "Permission" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "AddTimeOption": { + "description": "AddTimeOption options for adding time to an issue", + "type": "object", + "required": [ + "time" + ], + "properties": { + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "time": { + "description": "time in seconds", + "type": "integer", + "format": "int64", + "x-go-name": "Time" + }, + "user_name": { + "description": "User who spent the time (optional)", + "type": "string", + "x-go-name": "User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "AnnotatedTag": { + "description": "AnnotatedTag represents an annotated tag", + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "object": { + "$ref": "#/definitions/AnnotatedTagObject" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "tag": { + "type": "string", + "x-go-name": "Tag" + }, + "tagger": { + "$ref": "#/definitions/CommitUser" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "verification": { + "$ref": "#/definitions/PayloadCommitVerification" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "AnnotatedTagObject": { + "description": "AnnotatedTagObject contains meta information of the tag object", + "type": "object", + "properties": { + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "type": { + "type": "string", + "x-go-name": "Type" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Attachment": { + "description": "Attachment a generic attachment", + "type": "object", + "properties": { + "browser_download_url": { + "type": "string", + "x-go-name": "DownloadURL" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "download_count": { + "type": "integer", + "format": "int64", + "x-go-name": "DownloadCount" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "size": { + "type": "integer", + "format": "int64", + "x-go-name": "Size" + }, + "uuid": { + "type": "string", + "x-go-name": "UUID" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Branch": { + "description": "Branch represents a repository branch", + "type": "object", + "properties": { + "commit": { + "$ref": "#/definitions/PayloadCommit" + }, + "effective_branch_protection_name": { + "type": "string", + "x-go-name": "EffectiveBranchProtectionName" + }, + "enable_status_check": { + "type": "boolean", + "x-go-name": "EnableStatusCheck" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "protected": { + "type": "boolean", + "x-go-name": "Protected" + }, + "required_approvals": { + "type": "integer", + "format": "int64", + "x-go-name": "RequiredApprovals" + }, + "status_check_contexts": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "StatusCheckContexts" + }, + "user_can_merge": { + "type": "boolean", + "x-go-name": "UserCanMerge" + }, + "user_can_push": { + "type": "boolean", + "x-go-name": "UserCanPush" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "BranchProtection": { + "description": "BranchProtection represents a branch protection for a repository", + "type": "object", + "properties": { + "approvals_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ApprovalsWhitelistTeams" + }, + "approvals_whitelist_username": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ApprovalsWhitelistUsernames" + }, + "block_on_official_review_requests": { + "type": "boolean", + "x-go-name": "BlockOnOfficialReviewRequests" + }, + "block_on_outdated_branch": { + "type": "boolean", + "x-go-name": "BlockOnOutdatedBranch" + }, + "block_on_rejected_reviews": { + "type": "boolean", + "x-go-name": "BlockOnRejectedReviews" + }, + "branch_name": { + "description": "Deprecated: true", + "type": "string", + "x-go-name": "BranchName" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "dismiss_stale_approvals": { + "type": "boolean", + "x-go-name": "DismissStaleApprovals" + }, + "enable_approvals_whitelist": { + "type": "boolean", + "x-go-name": "EnableApprovalsWhitelist" + }, + "enable_merge_whitelist": { + "type": "boolean", + "x-go-name": "EnableMergeWhitelist" + }, + "enable_push": { + "type": "boolean", + "x-go-name": "EnablePush" + }, + "enable_push_whitelist": { + "type": "boolean", + "x-go-name": "EnablePushWhitelist" + }, + "enable_status_check": { + "type": "boolean", + "x-go-name": "EnableStatusCheck" + }, + "merge_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "MergeWhitelistTeams" + }, + "merge_whitelist_usernames": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "MergeWhitelistUsernames" + }, + "protected_file_patterns": { + "type": "string", + "x-go-name": "ProtectedFilePatterns" + }, + "push_whitelist_deploy_keys": { + "type": "boolean", + "x-go-name": "PushWhitelistDeployKeys" + }, + "push_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "PushWhitelistTeams" + }, + "push_whitelist_usernames": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "PushWhitelistUsernames" + }, + "require_signed_commits": { + "type": "boolean", + "x-go-name": "RequireSignedCommits" + }, + "required_approvals": { + "type": "integer", + "format": "int64", + "x-go-name": "RequiredApprovals" + }, + "rule_name": { + "type": "string", + "x-go-name": "RuleName" + }, + "status_check_contexts": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "StatusCheckContexts" + }, + "unprotected_file_patterns": { + "type": "string", + "x-go-name": "UnprotectedFilePatterns" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ChangeFileOperation": { + "description": "ChangeFileOperation for creating, updating or deleting a file", + "type": "object", + "required": [ + "operation", + "path" + ], + "properties": { + "content": { + "description": "new or updated file content, must be base64 encoded", + "type": "string", + "x-go-name": "Content" + }, + "from_path": { + "description": "old path of the file to move", + "type": "string", + "x-go-name": "FromPath" + }, + "operation": { + "description": "indicates what to do with the file", + "type": "string", + "enum": [ + "create", + "update", + "delete" + ], + "x-go-name": "Operation" + }, + "path": { + "description": "path to the existing or new file", + "type": "string", + "x-go-name": "Path" + }, + "sha": { + "description": "sha is the SHA for the file that already exists, required for update or delete", + "type": "string", + "x-go-name": "SHA" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ChangeFilesOptions": { + "description": "ChangeFilesOptions options for creating, updating or deleting multiple files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)", + "type": "object", + "required": [ + "files" + ], + "properties": { + "author": { + "$ref": "#/definitions/Identity" + }, + "branch": { + "description": "branch (optional) to base this file from. if not given, the default branch is used", + "type": "string", + "x-go-name": "BranchName" + }, + "committer": { + "$ref": "#/definitions/Identity" + }, + "dates": { + "$ref": "#/definitions/CommitDateOptions" + }, + "files": { + "description": "list of file operations", + "type": "array", + "items": { + "$ref": "#/definitions/ChangeFileOperation" + }, + "x-go-name": "Files" + }, + "message": { + "description": "message (optional) for the commit of this file. if not supplied, a default message will be used", + "type": "string", + "x-go-name": "Message" + }, + "new_branch": { + "description": "new_branch (optional) will make a new branch from `branch` before creating the file", + "type": "string", + "x-go-name": "NewBranchName" + }, + "signoff": { + "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.", + "type": "boolean", + "x-go-name": "Signoff" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ChangedFile": { + "description": "ChangedFile store information about files affected by the pull request", + "type": "object", + "properties": { + "additions": { + "type": "integer", + "format": "int64", + "x-go-name": "Additions" + }, + "changes": { + "type": "integer", + "format": "int64", + "x-go-name": "Changes" + }, + "contents_url": { + "type": "string", + "x-go-name": "ContentsURL" + }, + "deletions": { + "type": "integer", + "format": "int64", + "x-go-name": "Deletions" + }, + "filename": { + "type": "string", + "x-go-name": "Filename" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "previous_filename": { + "type": "string", + "x-go-name": "PreviousFilename" + }, + "raw_url": { + "type": "string", + "x-go-name": "RawURL" + }, + "status": { + "type": "string", + "x-go-name": "Status" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CombinedStatus": { + "description": "CombinedStatus holds the combined state of several statuses for a single commit", + "type": "object", + "properties": { + "commit_url": { + "type": "string", + "x-go-name": "CommitURL" + }, + "repository": { + "$ref": "#/definitions/Repository" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "state": { + "$ref": "#/definitions/CommitStatusState" + }, + "statuses": { + "type": "array", + "items": { + "$ref": "#/definitions/CommitStatus" + }, + "x-go-name": "Statuses" + }, + "total_count": { + "type": "integer", + "format": "int64", + "x-go-name": "TotalCount" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Comment": { + "description": "Comment represents a comment on a commit or issue", + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "$ref": "#/definitions/Attachment" + }, + "x-go-name": "Attachments" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "issue_url": { + "type": "string", + "x-go-name": "IssueURL" + }, + "original_author": { + "type": "string", + "x-go-name": "OriginalAuthor" + }, + "original_author_id": { + "type": "integer", + "format": "int64", + "x-go-name": "OriginalAuthorID" + }, + "pull_request_url": { + "type": "string", + "x-go-name": "PRURL" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Commit": { + "type": "object", + "title": "Commit contains information generated from a Git commit.", + "properties": { + "author": { + "$ref": "#/definitions/User" + }, + "commit": { + "$ref": "#/definitions/RepoCommit" + }, + "committer": { + "$ref": "#/definitions/User" + }, + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/definitions/CommitAffectedFiles" + }, + "x-go-name": "Files" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "parents": { + "type": "array", + "items": { + "$ref": "#/definitions/CommitMeta" + }, + "x-go-name": "Parents" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "stats": { + "$ref": "#/definitions/CommitStats" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitAffectedFiles": { + "description": "CommitAffectedFiles store information about files affected by the commit", + "type": "object", + "properties": { + "filename": { + "type": "string", + "x-go-name": "Filename" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitDateOptions": { + "description": "CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE", + "type": "object", + "properties": { + "author": { + "type": "string", + "format": "date-time", + "x-go-name": "Author" + }, + "committer": { + "type": "string", + "format": "date-time", + "x-go-name": "Committer" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitMeta": { + "type": "object", + "title": "CommitMeta contains meta information of a commit in terms of API.", + "properties": { + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitStats": { + "description": "CommitStats is statistics for a RepoCommit", + "type": "object", + "properties": { + "additions": { + "type": "integer", + "format": "int64", + "x-go-name": "Additions" + }, + "deletions": { + "type": "integer", + "format": "int64", + "x-go-name": "Deletions" + }, + "total": { + "type": "integer", + "format": "int64", + "x-go-name": "Total" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitStatus": { + "description": "CommitStatus holds a single status of a single Commit", + "type": "object", + "properties": { + "context": { + "type": "string", + "x-go-name": "Context" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "creator": { + "$ref": "#/definitions/User" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "status": { + "$ref": "#/definitions/CommitStatusState" + }, + "target_url": { + "type": "string", + "x-go-name": "TargetURL" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitStatusState": { + "description": "CommitStatusState holds the state of a CommitStatus\nIt can be \"pending\", \"success\", \"error\", \"failure\", and \"warning\"", + "type": "string", + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CommitUser": { + "type": "object", + "title": "CommitUser contains information of a user in the context of a commit.", + "properties": { + "date": { + "type": "string", + "x-go-name": "Date" + }, + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ContentsResponse": { + "description": "ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content", + "type": "object", + "properties": { + "_links": { + "$ref": "#/definitions/FileLinksResponse" + }, + "content": { + "description": "`content` is populated when `type` is `file`, otherwise null", + "type": "string", + "x-go-name": "Content" + }, + "download_url": { + "type": "string", + "x-go-name": "DownloadURL" + }, + "encoding": { + "description": "`encoding` is populated when `type` is `file`, otherwise null", + "type": "string", + "x-go-name": "Encoding" + }, + "git_url": { + "type": "string", + "x-go-name": "GitURL" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "last_commit_sha": { + "type": "string", + "x-go-name": "LastCommitSHA" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "path": { + "type": "string", + "x-go-name": "Path" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "size": { + "type": "integer", + "format": "int64", + "x-go-name": "Size" + }, + "submodule_git_url": { + "description": "`submodule_git_url` is populated when `type` is `submodule`, otherwise null", + "type": "string", + "x-go-name": "SubmoduleGitURL" + }, + "target": { + "description": "`target` is populated when `type` is `symlink`, otherwise null", + "type": "string", + "x-go-name": "Target" + }, + "type": { + "description": "`type` will be `file`, `dir`, `symlink`, or `submodule`", + "type": "string", + "x-go-name": "Type" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateAccessTokenOption": { + "description": "CreateAccessTokenOption options when create access token", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "x-go-name": "Name" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Scopes" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateBranchProtectionOption": { + "description": "CreateBranchProtectionOption options for creating a branch protection", + "type": "object", + "properties": { + "approvals_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ApprovalsWhitelistTeams" + }, + "approvals_whitelist_username": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ApprovalsWhitelistUsernames" + }, + "block_on_official_review_requests": { + "type": "boolean", + "x-go-name": "BlockOnOfficialReviewRequests" + }, + "block_on_outdated_branch": { + "type": "boolean", + "x-go-name": "BlockOnOutdatedBranch" + }, + "block_on_rejected_reviews": { + "type": "boolean", + "x-go-name": "BlockOnRejectedReviews" + }, + "branch_name": { + "description": "Deprecated: true", + "type": "string", + "x-go-name": "BranchName" + }, + "dismiss_stale_approvals": { + "type": "boolean", + "x-go-name": "DismissStaleApprovals" + }, + "enable_approvals_whitelist": { + "type": "boolean", + "x-go-name": "EnableApprovalsWhitelist" + }, + "enable_merge_whitelist": { + "type": "boolean", + "x-go-name": "EnableMergeWhitelist" + }, + "enable_push": { + "type": "boolean", + "x-go-name": "EnablePush" + }, + "enable_push_whitelist": { + "type": "boolean", + "x-go-name": "EnablePushWhitelist" + }, + "enable_status_check": { + "type": "boolean", + "x-go-name": "EnableStatusCheck" + }, + "merge_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "MergeWhitelistTeams" + }, + "merge_whitelist_usernames": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "MergeWhitelistUsernames" + }, + "protected_file_patterns": { + "type": "string", + "x-go-name": "ProtectedFilePatterns" + }, + "push_whitelist_deploy_keys": { + "type": "boolean", + "x-go-name": "PushWhitelistDeployKeys" + }, + "push_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "PushWhitelistTeams" + }, + "push_whitelist_usernames": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "PushWhitelistUsernames" + }, + "require_signed_commits": { + "type": "boolean", + "x-go-name": "RequireSignedCommits" + }, + "required_approvals": { + "type": "integer", + "format": "int64", + "x-go-name": "RequiredApprovals" + }, + "rule_name": { + "type": "string", + "x-go-name": "RuleName" + }, + "status_check_contexts": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "StatusCheckContexts" + }, + "unprotected_file_patterns": { + "type": "string", + "x-go-name": "UnprotectedFilePatterns" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateBranchRepoOption": { + "description": "CreateBranchRepoOption options when creating a branch in a repository", + "type": "object", + "required": [ + "new_branch_name" + ], + "properties": { + "new_branch_name": { + "description": "Name of the branch to create", + "type": "string", + "uniqueItems": true, + "x-go-name": "BranchName" + }, + "old_branch_name": { + "description": "Deprecated: true\nName of the old branch to create from", + "type": "string", + "uniqueItems": true, + "x-go-name": "OldBranchName" + }, + "old_ref_name": { + "description": "Name of the old branch/tag/commit to create from", + "type": "string", + "uniqueItems": true, + "x-go-name": "OldRefName" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateEmailOption": { + "description": "CreateEmailOption options when creating email addresses", + "type": "object", + "properties": { + "emails": { + "description": "email addresses to add", + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Emails" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateFileOptions": { + "description": "CreateFileOptions options for creating files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)", + "type": "object", + "required": [ + "content" + ], + "properties": { + "author": { + "$ref": "#/definitions/Identity" + }, + "branch": { + "description": "branch (optional) to base this file from. if not given, the default branch is used", + "type": "string", + "x-go-name": "BranchName" + }, + "committer": { + "$ref": "#/definitions/Identity" + }, + "content": { + "description": "content must be base64 encoded", + "type": "string", + "x-go-name": "Content" + }, + "dates": { + "$ref": "#/definitions/CommitDateOptions" + }, + "message": { + "description": "message (optional) for the commit of this file. if not supplied, a default message will be used", + "type": "string", + "x-go-name": "Message" + }, + "new_branch": { + "description": "new_branch (optional) will make a new branch from `branch` before creating the file", + "type": "string", + "x-go-name": "NewBranchName" + }, + "signoff": { + "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.", + "type": "boolean", + "x-go-name": "Signoff" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateForkOption": { + "description": "CreateForkOption options for creating a fork", + "type": "object", + "properties": { + "name": { + "description": "name of the forked repository", + "type": "string", + "x-go-name": "Name" + }, + "organization": { + "description": "organization name, if forking into an organization", + "type": "string", + "x-go-name": "Organization" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateGPGKeyOption": { + "description": "CreateGPGKeyOption options create user GPG key", + "type": "object", + "required": [ + "armored_public_key" + ], + "properties": { + "armored_public_key": { + "description": "An armored GPG key to add", + "type": "string", + "uniqueItems": true, + "x-go-name": "ArmoredKey" + }, + "armored_signature": { + "type": "string", + "x-go-name": "Signature" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateHookOption": { + "description": "CreateHookOption options when create a hook", + "type": "object", + "required": [ + "type", + "config" + ], + "properties": { + "active": { + "type": "boolean", + "default": false, + "x-go-name": "Active" + }, + "authorization_header": { + "type": "string", + "x-go-name": "AuthorizationHeader" + }, + "branch_filter": { + "type": "string", + "x-go-name": "BranchFilter" + }, + "config": { + "$ref": "#/definitions/CreateHookOptionConfig" + }, + "events": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Events" + }, + "type": { + "type": "string", + "enum": [ + "dingtalk", + "discord", + "gitea", + "gogs", + "msteams", + "slack", + "telegram", + "feishu", + "wechatwork", + "packagist" + ], + "x-go-name": "Type" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateHookOptionConfig": { + "description": "CreateHookOptionConfig has all config options in it\nrequired are \"content_type\" and \"url\" Required", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateIssueCommentOption": { + "description": "CreateIssueCommentOption options for creating a comment on an issue", + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateIssueOption": { + "description": "CreateIssueOption options to create one issue", + "type": "object", + "required": [ + "title" + ], + "properties": { + "assignee": { + "description": "deprecated", + "type": "string", + "x-go-name": "Assignee" + }, + "assignees": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Assignees" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "closed": { + "type": "boolean", + "x-go-name": "Closed" + }, + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "labels": { + "description": "list of label ids", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-go-name": "Labels" + }, + "milestone": { + "description": "milestone id", + "type": "integer", + "format": "int64", + "x-go-name": "Milestone" + }, + "ref": { + "type": "string", + "x-go-name": "Ref" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateKeyOption": { + "description": "CreateKeyOption options when creating a key", + "type": "object", + "required": [ + "title", + "key" + ], + "properties": { + "key": { + "description": "An armored SSH key to add", + "type": "string", + "uniqueItems": true, + "x-go-name": "Key" + }, + "read_only": { + "description": "Describe if the key has only read access or read/write", + "type": "boolean", + "x-go-name": "ReadOnly" + }, + "title": { + "description": "Title of the key to add", + "type": "string", + "uniqueItems": true, + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateLabelOption": { + "description": "CreateLabelOption options for creating a label", + "type": "object", + "required": [ + "name", + "color" + ], + "properties": { + "color": { + "type": "string", + "x-go-name": "Color", + "example": "#00aabb" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "exclusive": { + "type": "boolean", + "x-go-name": "Exclusive", + "example": false + }, + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateMilestoneOption": { + "description": "CreateMilestoneOption options for creating a milestone", + "type": "object", + "properties": { + "description": { + "type": "string", + "x-go-name": "Description" + }, + "due_on": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "state": { + "type": "string", + "enum": [ + "open", + "closed" + ], + "x-go-name": "State" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateOAuth2ApplicationOptions": { + "description": "CreateOAuth2ApplicationOptions holds options to create an oauth2 application", + "type": "object", + "properties": { + "confidential_client": { + "type": "boolean", + "x-go-name": "ConfidentialClient" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "RedirectURIs" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateOrgOption": { + "description": "CreateOrgOption options for creating an organization", + "type": "object", + "required": [ + "username" + ], + "properties": { + "description": { + "type": "string", + "x-go-name": "Description" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "location": { + "type": "string", + "x-go-name": "Location" + }, + "repo_admin_change_team_access": { + "type": "boolean", + "x-go-name": "RepoAdminChangeTeamAccess" + }, + "username": { + "type": "string", + "x-go-name": "UserName" + }, + "visibility": { + "description": "possible values are `public` (default), `limited` or `private`", + "type": "string", + "enum": [ + "public", + "limited", + "private" + ], + "x-go-name": "Visibility" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreatePullRequestOption": { + "description": "CreatePullRequestOption options when creating a pull request", + "type": "object", + "properties": { + "assignee": { + "type": "string", + "x-go-name": "Assignee" + }, + "assignees": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Assignees" + }, + "base": { + "type": "string", + "x-go-name": "Base" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "head": { + "type": "string", + "x-go-name": "Head" + }, + "labels": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-go-name": "Labels" + }, + "milestone": { + "type": "integer", + "format": "int64", + "x-go-name": "Milestone" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreatePullReviewComment": { + "description": "CreatePullReviewComment represent a review comment for creation api", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + }, + "new_position": { + "description": "if comment to new file line or 0", + "type": "integer", + "format": "int64", + "x-go-name": "NewLineNum" + }, + "old_position": { + "description": "if comment to old file line or 0", + "type": "integer", + "format": "int64", + "x-go-name": "OldLineNum" + }, + "path": { + "description": "the tree path", + "type": "string", + "x-go-name": "Path" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreatePullReviewOptions": { + "description": "CreatePullReviewOptions are options to create a pull review", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + }, + "comments": { + "type": "array", + "items": { + "$ref": "#/definitions/CreatePullReviewComment" + }, + "x-go-name": "Comments" + }, + "commit_id": { + "type": "string", + "x-go-name": "CommitID" + }, + "event": { + "$ref": "#/definitions/ReviewStateType" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreatePushMirrorOption": { + "type": "object", + "title": "CreatePushMirrorOption represents need information to create a push mirror of a repository.", + "properties": { + "interval": { + "type": "string", + "x-go-name": "Interval" + }, + "remote_address": { + "type": "string", + "x-go-name": "RemoteAddress" + }, + "remote_password": { + "type": "string", + "x-go-name": "RemotePassword" + }, + "remote_username": { + "type": "string", + "x-go-name": "RemoteUsername" + }, + "sync_on_commit": { + "type": "boolean", + "x-go-name": "SyncOnCommit" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateReleaseOption": { + "description": "CreateReleaseOption options when creating a release", + "type": "object", + "required": [ + "tag_name" + ], + "properties": { + "body": { + "type": "string", + "x-go-name": "Note" + }, + "draft": { + "type": "boolean", + "x-go-name": "IsDraft" + }, + "name": { + "type": "string", + "x-go-name": "Title" + }, + "prerelease": { + "type": "boolean", + "x-go-name": "IsPrerelease" + }, + "tag_name": { + "type": "string", + "x-go-name": "TagName" + }, + "target_commitish": { + "type": "string", + "x-go-name": "Target" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateRepoOption": { + "description": "CreateRepoOption options when creating repository", + "type": "object", + "required": [ + "name" + ], + "properties": { + "auto_init": { + "description": "Whether the repository should be auto-initialized?", + "type": "boolean", + "x-go-name": "AutoInit" + }, + "default_branch": { + "description": "DefaultBranch of the repository (used when initializes and in template)", + "type": "string", + "x-go-name": "DefaultBranch" + }, + "description": { + "description": "Description of the repository to create", + "type": "string", + "x-go-name": "Description" + }, + "gitignores": { + "description": "Gitignores to use", + "type": "string", + "x-go-name": "Gitignores" + }, + "issue_labels": { + "description": "Label-Set to use", + "type": "string", + "x-go-name": "IssueLabels" + }, + "license": { + "description": "License to use", + "type": "string", + "x-go-name": "License" + }, + "name": { + "description": "Name of the repository to create", + "type": "string", + "uniqueItems": true, + "x-go-name": "Name" + }, + "private": { + "description": "Whether the repository is private", + "type": "boolean", + "x-go-name": "Private" + }, + "readme": { + "description": "Readme of the repository to create", + "type": "string", + "x-go-name": "Readme" + }, + "template": { + "description": "Whether the repository is template", + "type": "boolean", + "x-go-name": "Template" + }, + "trust_model": { + "description": "TrustModel of the repository", + "type": "string", + "enum": [ + "default", + "collaborator", + "committer", + "collaboratorcommitter" + ], + "x-go-name": "TrustModel" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateStatusOption": { + "description": "CreateStatusOption holds the information needed to create a new CommitStatus for a Commit", + "type": "object", + "properties": { + "context": { + "type": "string", + "x-go-name": "Context" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "state": { + "$ref": "#/definitions/CommitStatusState" + }, + "target_url": { + "type": "string", + "x-go-name": "TargetURL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateTagOption": { + "description": "CreateTagOption options when creating a tag", + "type": "object", + "required": [ + "tag_name" + ], + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "tag_name": { + "type": "string", + "x-go-name": "TagName" + }, + "target": { + "type": "string", + "x-go-name": "Target" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateTeamOption": { + "description": "CreateTeamOption options for creating a team", + "type": "object", + "required": [ + "name" + ], + "properties": { + "can_create_org_repo": { + "type": "boolean", + "x-go-name": "CanCreateOrgRepo" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "includes_all_repositories": { + "type": "boolean", + "x-go-name": "IncludesAllRepositories" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "permission": { + "type": "string", + "enum": [ + "read", + "write", + "admin" + ], + "x-go-name": "Permission" + }, + "units": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Units", + "example": [ + "repo.code", + "repo.issues", + "repo.ext_issues", + "repo.wiki", + "repo.pulls", + "repo.releases", + "repo.projects", + "repo.ext_wiki" + ] + }, + "units_map": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-go-name": "UnitsMap", + "example": { + "repo.code": "read", + "repo.ext_issues": "none", + "repo.ext_wiki": "none", + "repo.issues": "write", + "repo.projects": "none", + "repo.pulls": "owner", + "repo.releases": "none", + "repo.wiki": "admin" + } + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateUserOption": { + "description": "CreateUserOption create user options", + "type": "object", + "required": [ + "username", + "email", + "password" + ], + "properties": { + "created_at": { + "description": "For explicitly setting the user creation timestamp. Useful when users are\nmigrated from other systems. When omitted, the user's creation timestamp\nwill be set to \"now\".", + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "login_name": { + "type": "string", + "x-go-name": "LoginName" + }, + "must_change_password": { + "type": "boolean", + "x-go-name": "MustChangePassword" + }, + "password": { + "type": "string", + "x-go-name": "Password" + }, + "restricted": { + "type": "boolean", + "x-go-name": "Restricted" + }, + "send_notify": { + "type": "boolean", + "x-go-name": "SendNotify" + }, + "source_id": { + "type": "integer", + "format": "int64", + "x-go-name": "SourceID" + }, + "username": { + "type": "string", + "x-go-name": "Username" + }, + "visibility": { + "type": "string", + "x-go-name": "Visibility" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "CreateWikiPageOptions": { + "description": "CreateWikiPageOptions form for creating wiki", + "type": "object", + "properties": { + "content_base64": { + "description": "content must be base64 encoded", + "type": "string", + "x-go-name": "ContentBase64" + }, + "message": { + "description": "optional commit message summarizing the change", + "type": "string", + "x-go-name": "Message" + }, + "title": { + "description": "page title. leave empty to keep unchanged", + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Cron": { + "description": "Cron represents a Cron task", + "type": "object", + "properties": { + "exec_times": { + "type": "integer", + "format": "int64", + "x-go-name": "ExecTimes" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "next": { + "type": "string", + "format": "date-time", + "x-go-name": "Next" + }, + "prev": { + "type": "string", + "format": "date-time", + "x-go-name": "Prev" + }, + "schedule": { + "type": "string", + "x-go-name": "Schedule" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "DeleteEmailOption": { + "description": "DeleteEmailOption options when deleting email addresses", + "type": "object", + "properties": { + "emails": { + "description": "email addresses to delete", + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Emails" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "DeleteFileOptions": { + "description": "DeleteFileOptions options for deleting files (used for other File structs below)\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)", + "type": "object", + "required": [ + "sha" + ], + "properties": { + "author": { + "$ref": "#/definitions/Identity" + }, + "branch": { + "description": "branch (optional) to base this file from. if not given, the default branch is used", + "type": "string", + "x-go-name": "BranchName" + }, + "committer": { + "$ref": "#/definitions/Identity" + }, + "dates": { + "$ref": "#/definitions/CommitDateOptions" + }, + "message": { + "description": "message (optional) for the commit of this file. if not supplied, a default message will be used", + "type": "string", + "x-go-name": "Message" + }, + "new_branch": { + "description": "new_branch (optional) will make a new branch from `branch` before creating the file", + "type": "string", + "x-go-name": "NewBranchName" + }, + "sha": { + "description": "sha is the SHA for the file that already exists", + "type": "string", + "x-go-name": "SHA" + }, + "signoff": { + "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.", + "type": "boolean", + "x-go-name": "Signoff" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "DeployKey": { + "description": "DeployKey a deploy key", + "type": "object", + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "fingerprint": { + "type": "string", + "x-go-name": "Fingerprint" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "key": { + "type": "string", + "x-go-name": "Key" + }, + "key_id": { + "type": "integer", + "format": "int64", + "x-go-name": "KeyID" + }, + "read_only": { + "type": "boolean", + "x-go-name": "ReadOnly" + }, + "repository": { + "$ref": "#/definitions/Repository" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "DismissPullReviewOptions": { + "description": "DismissPullReviewOptions are options to dismiss a pull review", + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "priors": { + "type": "boolean", + "x-go-name": "Priors" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditAttachmentOptions": { + "description": "EditAttachmentOptions options for editing attachments", + "type": "object", + "properties": { + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditBranchProtectionOption": { + "description": "EditBranchProtectionOption options for editing a branch protection", + "type": "object", + "properties": { + "approvals_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ApprovalsWhitelistTeams" + }, + "approvals_whitelist_username": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "ApprovalsWhitelistUsernames" + }, + "block_on_official_review_requests": { + "type": "boolean", + "x-go-name": "BlockOnOfficialReviewRequests" + }, + "block_on_outdated_branch": { + "type": "boolean", + "x-go-name": "BlockOnOutdatedBranch" + }, + "block_on_rejected_reviews": { + "type": "boolean", + "x-go-name": "BlockOnRejectedReviews" + }, + "dismiss_stale_approvals": { + "type": "boolean", + "x-go-name": "DismissStaleApprovals" + }, + "enable_approvals_whitelist": { + "type": "boolean", + "x-go-name": "EnableApprovalsWhitelist" + }, + "enable_merge_whitelist": { + "type": "boolean", + "x-go-name": "EnableMergeWhitelist" + }, + "enable_push": { + "type": "boolean", + "x-go-name": "EnablePush" + }, + "enable_push_whitelist": { + "type": "boolean", + "x-go-name": "EnablePushWhitelist" + }, + "enable_status_check": { + "type": "boolean", + "x-go-name": "EnableStatusCheck" + }, + "merge_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "MergeWhitelistTeams" + }, + "merge_whitelist_usernames": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "MergeWhitelistUsernames" + }, + "protected_file_patterns": { + "type": "string", + "x-go-name": "ProtectedFilePatterns" + }, + "push_whitelist_deploy_keys": { + "type": "boolean", + "x-go-name": "PushWhitelistDeployKeys" + }, + "push_whitelist_teams": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "PushWhitelistTeams" + }, + "push_whitelist_usernames": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "PushWhitelistUsernames" + }, + "require_signed_commits": { + "type": "boolean", + "x-go-name": "RequireSignedCommits" + }, + "required_approvals": { + "type": "integer", + "format": "int64", + "x-go-name": "RequiredApprovals" + }, + "status_check_contexts": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "StatusCheckContexts" + }, + "unprotected_file_patterns": { + "type": "string", + "x-go-name": "UnprotectedFilePatterns" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditDeadlineOption": { + "description": "EditDeadlineOption options for creating a deadline", + "type": "object", + "required": [ + "due_date" + ], + "properties": { + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditGitHookOption": { + "description": "EditGitHookOption options when modifying one Git hook", + "type": "object", + "properties": { + "content": { + "type": "string", + "x-go-name": "Content" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditHookOption": { + "description": "EditHookOption options when modify one hook", + "type": "object", + "properties": { + "active": { + "type": "boolean", + "x-go-name": "Active" + }, + "authorization_header": { + "type": "string", + "x-go-name": "AuthorizationHeader" + }, + "branch_filter": { + "type": "string", + "x-go-name": "BranchFilter" + }, + "config": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-go-name": "Config" + }, + "events": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Events" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditIssueCommentOption": { + "description": "EditIssueCommentOption options for editing a comment", + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditIssueOption": { + "description": "EditIssueOption options for editing an issue", + "type": "object", + "properties": { + "assignee": { + "description": "deprecated", + "type": "string", + "x-go-name": "Assignee" + }, + "assignees": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Assignees" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "milestone": { + "type": "integer", + "format": "int64", + "x-go-name": "Milestone" + }, + "ref": { + "type": "string", + "x-go-name": "Ref" + }, + "state": { + "type": "string", + "x-go-name": "State" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "unset_due_date": { + "type": "boolean", + "x-go-name": "RemoveDeadline" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditLabelOption": { + "description": "EditLabelOption options for editing a label", + "type": "object", + "properties": { + "color": { + "type": "string", + "x-go-name": "Color", + "example": "#00aabb" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "exclusive": { + "type": "boolean", + "x-go-name": "Exclusive", + "example": false + }, + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditMilestoneOption": { + "description": "EditMilestoneOption options for editing a milestone", + "type": "object", + "properties": { + "description": { + "type": "string", + "x-go-name": "Description" + }, + "due_on": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "state": { + "type": "string", + "x-go-name": "State" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditOrgOption": { + "description": "EditOrgOption options for editing an organization", + "type": "object", + "properties": { + "description": { + "type": "string", + "x-go-name": "Description" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "location": { + "type": "string", + "x-go-name": "Location" + }, + "repo_admin_change_team_access": { + "type": "boolean", + "x-go-name": "RepoAdminChangeTeamAccess" + }, + "visibility": { + "description": "possible values are `public`, `limited` or `private`", + "type": "string", + "enum": [ + "public", + "limited", + "private" + ], + "x-go-name": "Visibility" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditPullRequestOption": { + "description": "EditPullRequestOption options when modify pull request", + "type": "object", + "properties": { + "allow_maintainer_edit": { + "type": "boolean", + "x-go-name": "AllowMaintainerEdit" + }, + "assignee": { + "type": "string", + "x-go-name": "Assignee" + }, + "assignees": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Assignees" + }, + "base": { + "type": "string", + "x-go-name": "Base" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "labels": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-go-name": "Labels" + }, + "milestone": { + "type": "integer", + "format": "int64", + "x-go-name": "Milestone" + }, + "state": { + "type": "string", + "x-go-name": "State" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "unset_due_date": { + "type": "boolean", + "x-go-name": "RemoveDeadline" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditReactionOption": { + "description": "EditReactionOption contain the reaction type", + "type": "object", + "properties": { + "content": { + "type": "string", + "x-go-name": "Reaction" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditReleaseOption": { + "description": "EditReleaseOption options when editing a release", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Note" + }, + "draft": { + "type": "boolean", + "x-go-name": "IsDraft" + }, + "name": { + "type": "string", + "x-go-name": "Title" + }, + "prerelease": { + "type": "boolean", + "x-go-name": "IsPrerelease" + }, + "tag_name": { + "type": "string", + "x-go-name": "TagName" + }, + "target_commitish": { + "type": "string", + "x-go-name": "Target" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditRepoOption": { + "description": "EditRepoOption options when editing a repository's properties", + "type": "object", + "properties": { + "allow_manual_merge": { + "description": "either `true` to allow mark pr as merged manually, or `false` to prevent it.", + "type": "boolean", + "x-go-name": "AllowManualMerge" + }, + "allow_merge_commits": { + "description": "either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.", + "type": "boolean", + "x-go-name": "AllowMerge" + }, + "allow_rebase": { + "description": "either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.", + "type": "boolean", + "x-go-name": "AllowRebase" + }, + "allow_rebase_explicit": { + "description": "either `true` to allow rebase with explicit merge commits (--no-ff), or `false` to prevent rebase with explicit merge commits.", + "type": "boolean", + "x-go-name": "AllowRebaseMerge" + }, + "allow_rebase_update": { + "description": "either `true` to allow updating pull request branch by rebase, or `false` to prevent it.", + "type": "boolean", + "x-go-name": "AllowRebaseUpdate" + }, + "allow_squash_merge": { + "description": "either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.", + "type": "boolean", + "x-go-name": "AllowSquash" + }, + "archived": { + "description": "set to `true` to archive this repository.", + "type": "boolean", + "x-go-name": "Archived" + }, + "autodetect_manual_merge": { + "description": "either `true` to enable AutodetectManualMerge, or `false` to prevent it. Note: In some special cases, misjudgments can occur.", + "type": "boolean", + "x-go-name": "AutodetectManualMerge" + }, + "default_allow_maintainer_edit": { + "description": "set to `true` to allow edits from maintainers by default", + "type": "boolean", + "x-go-name": "DefaultAllowMaintainerEdit" + }, + "default_branch": { + "description": "sets the default branch for this repository.", + "type": "string", + "x-go-name": "DefaultBranch" + }, + "default_delete_branch_after_merge": { + "description": "set to `true` to delete pr branch after merge by default", + "type": "boolean", + "x-go-name": "DefaultDeleteBranchAfterMerge" + }, + "default_merge_style": { + "description": "set to a merge style to be used by this repository: \"merge\", \"rebase\", \"rebase-merge\", or \"squash\".", + "type": "string", + "x-go-name": "DefaultMergeStyle" + }, + "description": { + "description": "a short description of the repository.", + "type": "string", + "x-go-name": "Description" + }, + "enable_prune": { + "description": "enable prune - remove obsolete remote-tracking references", + "type": "boolean", + "x-go-name": "EnablePrune" + }, + "external_tracker": { + "$ref": "#/definitions/ExternalTracker" + }, + "external_wiki": { + "$ref": "#/definitions/ExternalWiki" + }, + "has_actions": { + "description": "either `true` to enable actions unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasActions" + }, + "has_issues": { + "description": "either `true` to enable issues for this repository or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasIssues" + }, + "has_packages": { + "description": "either `true` to enable packages unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasPackages" + }, + "has_projects": { + "description": "either `true` to enable project unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasProjects" + }, + "has_pull_requests": { + "description": "either `true` to allow pull requests, or `false` to prevent pull request.", + "type": "boolean", + "x-go-name": "HasPullRequests" + }, + "has_releases": { + "description": "either `true` to enable releases unit, or `false` to disable them.", + "type": "boolean", + "x-go-name": "HasReleases" + }, + "has_wiki": { + "description": "either `true` to enable the wiki for this repository or `false` to disable it.", + "type": "boolean", + "x-go-name": "HasWiki" + }, + "ignore_whitespace_conflicts": { + "description": "either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace.", + "type": "boolean", + "x-go-name": "IgnoreWhitespaceConflicts" + }, + "internal_tracker": { + "$ref": "#/definitions/InternalTracker" + }, + "mirror_interval": { + "description": "set to a string like `8h30m0s` to set the mirror interval time", + "type": "string", + "x-go-name": "MirrorInterval" + }, + "name": { + "description": "name of the repository", + "type": "string", + "uniqueItems": true, + "x-go-name": "Name" + }, + "private": { + "description": "either `true` to make the repository private or `false` to make it public.\nNote: you will get a 422 error if the organization restricts changing repository visibility to organization\nowners and a non-owner tries to change the value of private.", + "type": "boolean", + "x-go-name": "Private" + }, + "template": { + "description": "either `true` to make this repository a template or `false` to make it a normal repository", + "type": "boolean", + "x-go-name": "Template" + }, + "website": { + "description": "a URL with more information about the repository.", + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditTeamOption": { + "description": "EditTeamOption options for editing a team", + "type": "object", + "required": [ + "name" + ], + "properties": { + "can_create_org_repo": { + "type": "boolean", + "x-go-name": "CanCreateOrgRepo" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "includes_all_repositories": { + "type": "boolean", + "x-go-name": "IncludesAllRepositories" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "permission": { + "type": "string", + "enum": [ + "read", + "write", + "admin" + ], + "x-go-name": "Permission" + }, + "units": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Units", + "example": [ + "repo.code", + "repo.issues", + "repo.ext_issues", + "repo.wiki", + "repo.pulls", + "repo.releases", + "repo.projects", + "repo.ext_wiki" + ] + }, + "units_map": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-go-name": "UnitsMap", + "example": { + "repo.code": "read", + "repo.ext_issues": "none", + "repo.ext_wiki": "none", + "repo.issues": "write", + "repo.projects": "none", + "repo.pulls": "owner", + "repo.releases": "none", + "repo.wiki": "admin" + } + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "EditUserOption": { + "description": "EditUserOption edit user options", + "type": "object", + "required": [ + "source_id", + "login_name" + ], + "properties": { + "active": { + "type": "boolean", + "x-go-name": "Active" + }, + "admin": { + "type": "boolean", + "x-go-name": "Admin" + }, + "allow_create_organization": { + "type": "boolean", + "x-go-name": "AllowCreateOrganization" + }, + "allow_git_hook": { + "type": "boolean", + "x-go-name": "AllowGitHook" + }, + "allow_import_local": { + "type": "boolean", + "x-go-name": "AllowImportLocal" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "location": { + "type": "string", + "x-go-name": "Location" + }, + "login_name": { + "type": "string", + "x-go-name": "LoginName" + }, + "max_repo_creation": { + "type": "integer", + "format": "int64", + "x-go-name": "MaxRepoCreation" + }, + "must_change_password": { + "type": "boolean", + "x-go-name": "MustChangePassword" + }, + "password": { + "type": "string", + "x-go-name": "Password" + }, + "prohibit_login": { + "type": "boolean", + "x-go-name": "ProhibitLogin" + }, + "restricted": { + "type": "boolean", + "x-go-name": "Restricted" + }, + "source_id": { + "type": "integer", + "format": "int64", + "x-go-name": "SourceID" + }, + "visibility": { + "type": "string", + "x-go-name": "Visibility" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Email": { + "description": "Email an email address belonging to a user", + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "primary": { + "type": "boolean", + "x-go-name": "Primary" + }, + "user_id": { + "type": "integer", + "format": "int64", + "x-go-name": "UserID" + }, + "username": { + "type": "string", + "x-go-name": "UserName" + }, + "verified": { + "type": "boolean", + "x-go-name": "Verified" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ExternalTracker": { + "description": "ExternalTracker represents settings for external tracker", + "type": "object", + "properties": { + "external_tracker_format": { + "description": "External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index.", + "type": "string", + "x-go-name": "ExternalTrackerFormat" + }, + "external_tracker_regexp_pattern": { + "description": "External Issue Tracker issue regular expression", + "type": "string", + "x-go-name": "ExternalTrackerRegexpPattern" + }, + "external_tracker_style": { + "description": "External Issue Tracker Number Format, either `numeric`, `alphanumeric`, or `regexp`", + "type": "string", + "x-go-name": "ExternalTrackerStyle" + }, + "external_tracker_url": { + "description": "URL of external issue tracker.", + "type": "string", + "x-go-name": "ExternalTrackerURL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ExternalWiki": { + "description": "ExternalWiki represents setting for external wiki", + "type": "object", + "properties": { + "external_wiki_url": { + "description": "URL of external wiki.", + "type": "string", + "x-go-name": "ExternalWikiURL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "FileCommitResponse": { + "type": "object", + "title": "FileCommitResponse contains information generated from a Git commit for a repo's file.", + "properties": { + "author": { + "$ref": "#/definitions/CommitUser" + }, + "committer": { + "$ref": "#/definitions/CommitUser" + }, + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "message": { + "type": "string", + "x-go-name": "Message" + }, + "parents": { + "type": "array", + "items": { + "$ref": "#/definitions/CommitMeta" + }, + "x-go-name": "Parents" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "tree": { + "$ref": "#/definitions/CommitMeta" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "FileDeleteResponse": { + "description": "FileDeleteResponse contains information about a repo's file that was deleted", + "type": "object", + "properties": { + "commit": { + "$ref": "#/definitions/FileCommitResponse" + }, + "content": { + "x-go-name": "Content" + }, + "verification": { + "$ref": "#/definitions/PayloadCommitVerification" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "FileLinksResponse": { + "description": "FileLinksResponse contains the links for a repo's file", + "type": "object", + "properties": { + "git": { + "type": "string", + "x-go-name": "GitURL" + }, + "html": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "self": { + "type": "string", + "x-go-name": "Self" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "FileResponse": { + "description": "FileResponse contains information about a repo's file", + "type": "object", + "properties": { + "commit": { + "$ref": "#/definitions/FileCommitResponse" + }, + "content": { + "$ref": "#/definitions/ContentsResponse" + }, + "verification": { + "$ref": "#/definitions/PayloadCommitVerification" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "FilesResponse": { + "description": "FilesResponse contains information about multiple files from a repo", + "type": "object", + "properties": { + "commit": { + "$ref": "#/definitions/FileCommitResponse" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/definitions/ContentsResponse" + }, + "x-go-name": "Files" + }, + "verification": { + "$ref": "#/definitions/PayloadCommitVerification" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GPGKey": { + "description": "GPGKey a user GPG key to sign commit and tag in repository", + "type": "object", + "properties": { + "can_certify": { + "type": "boolean", + "x-go-name": "CanCertify" + }, + "can_encrypt_comms": { + "type": "boolean", + "x-go-name": "CanEncryptComms" + }, + "can_encrypt_storage": { + "type": "boolean", + "x-go-name": "CanEncryptStorage" + }, + "can_sign": { + "type": "boolean", + "x-go-name": "CanSign" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/definitions/GPGKeyEmail" + }, + "x-go-name": "Emails" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Expires" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "key_id": { + "type": "string", + "x-go-name": "KeyID" + }, + "primary_key_id": { + "type": "string", + "x-go-name": "PrimaryKeyID" + }, + "public_key": { + "type": "string", + "x-go-name": "PublicKey" + }, + "subkeys": { + "type": "array", + "items": { + "$ref": "#/definitions/GPGKey" + }, + "x-go-name": "SubsKey" + }, + "verified": { + "type": "boolean", + "x-go-name": "Verified" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GPGKeyEmail": { + "description": "GPGKeyEmail an email attached to a GPGKey", + "type": "object", + "properties": { + "email": { + "type": "string", + "x-go-name": "Email" + }, + "verified": { + "type": "boolean", + "x-go-name": "Verified" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GeneralAPISettings": { + "description": "GeneralAPISettings contains global api settings exposed by it", + "type": "object", + "properties": { + "default_git_trees_per_page": { + "type": "integer", + "format": "int64", + "x-go-name": "DefaultGitTreesPerPage" + }, + "default_max_blob_size": { + "type": "integer", + "format": "int64", + "x-go-name": "DefaultMaxBlobSize" + }, + "default_paging_num": { + "type": "integer", + "format": "int64", + "x-go-name": "DefaultPagingNum" + }, + "max_response_items": { + "type": "integer", + "format": "int64", + "x-go-name": "MaxResponseItems" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GeneralAttachmentSettings": { + "description": "GeneralAttachmentSettings contains global Attachment settings exposed by API", + "type": "object", + "properties": { + "allowed_types": { + "type": "string", + "x-go-name": "AllowedTypes" + }, + "enabled": { + "type": "boolean", + "x-go-name": "Enabled" + }, + "max_files": { + "type": "integer", + "format": "int64", + "x-go-name": "MaxFiles" + }, + "max_size": { + "type": "integer", + "format": "int64", + "x-go-name": "MaxSize" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GeneralRepoSettings": { + "description": "GeneralRepoSettings contains global repository settings exposed by API", + "type": "object", + "properties": { + "http_git_disabled": { + "type": "boolean", + "x-go-name": "HTTPGitDisabled" + }, + "lfs_disabled": { + "type": "boolean", + "x-go-name": "LFSDisabled" + }, + "migrations_disabled": { + "type": "boolean", + "x-go-name": "MigrationsDisabled" + }, + "mirrors_disabled": { + "type": "boolean", + "x-go-name": "MirrorsDisabled" + }, + "stars_disabled": { + "type": "boolean", + "x-go-name": "StarsDisabled" + }, + "time_tracking_disabled": { + "type": "boolean", + "x-go-name": "TimeTrackingDisabled" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GeneralUISettings": { + "description": "GeneralUISettings contains global ui settings exposed by API", + "type": "object", + "properties": { + "allowed_reactions": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "AllowedReactions" + }, + "custom_emojis": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "CustomEmojis" + }, + "default_theme": { + "type": "string", + "x-go-name": "DefaultTheme" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GenerateRepoOption": { + "description": "GenerateRepoOption options when creating repository using a template", + "type": "object", + "required": [ + "owner", + "name" + ], + "properties": { + "avatar": { + "description": "include avatar of the template repo", + "type": "boolean", + "x-go-name": "Avatar" + }, + "default_branch": { + "description": "Default branch of the new repository", + "type": "string", + "x-go-name": "DefaultBranch" + }, + "description": { + "description": "Description of the repository to create", + "type": "string", + "x-go-name": "Description" + }, + "git_content": { + "description": "include git content of default branch in template repo", + "type": "boolean", + "x-go-name": "GitContent" + }, + "git_hooks": { + "description": "include git hooks in template repo", + "type": "boolean", + "x-go-name": "GitHooks" + }, + "labels": { + "description": "include labels in template repo", + "type": "boolean", + "x-go-name": "Labels" + }, + "name": { + "description": "Name of the repository to create", + "type": "string", + "uniqueItems": true, + "x-go-name": "Name" + }, + "owner": { + "description": "The organization or person who will own the new repository", + "type": "string", + "x-go-name": "Owner" + }, + "private": { + "description": "Whether the repository is private", + "type": "boolean", + "x-go-name": "Private" + }, + "topics": { + "description": "include topics in template repo", + "type": "boolean", + "x-go-name": "Topics" + }, + "webhooks": { + "description": "include webhooks in template repo", + "type": "boolean", + "x-go-name": "Webhooks" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GitBlobResponse": { + "description": "GitBlobResponse represents a git blob", + "type": "object", + "properties": { + "content": { + "type": "string", + "x-go-name": "Content" + }, + "encoding": { + "type": "string", + "x-go-name": "Encoding" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "size": { + "type": "integer", + "format": "int64", + "x-go-name": "Size" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GitEntry": { + "description": "GitEntry represents a git tree", + "type": "object", + "properties": { + "mode": { + "type": "string", + "x-go-name": "Mode" + }, + "path": { + "type": "string", + "x-go-name": "Path" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "size": { + "type": "integer", + "format": "int64", + "x-go-name": "Size" + }, + "type": { + "type": "string", + "x-go-name": "Type" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GitHook": { + "description": "GitHook represents a Git repository hook", + "type": "object", + "properties": { + "content": { + "type": "string", + "x-go-name": "Content" + }, + "is_active": { + "type": "boolean", + "x-go-name": "IsActive" + }, + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GitObject": { + "type": "object", + "title": "GitObject represents a Git object.", + "properties": { + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "type": { + "type": "string", + "x-go-name": "Type" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GitTreeResponse": { + "description": "GitTreeResponse returns a git tree", + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int64", + "x-go-name": "Page" + }, + "sha": { + "type": "string", + "x-go-name": "SHA" + }, + "total_count": { + "type": "integer", + "format": "int64", + "x-go-name": "TotalCount" + }, + "tree": { + "type": "array", + "items": { + "$ref": "#/definitions/GitEntry" + }, + "x-go-name": "Entries" + }, + "truncated": { + "type": "boolean", + "x-go-name": "Truncated" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "GitignoreTemplateInfo": { + "description": "GitignoreTemplateInfo name and text of a gitignore template", + "type": "object", + "properties": { + "name": { + "type": "string", + "x-go-name": "Name" + }, + "source": { + "type": "string", + "x-go-name": "Source" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Hook": { + "description": "Hook a hook is a web hook when one repository changed", + "type": "object", + "properties": { + "active": { + "type": "boolean", + "x-go-name": "Active" + }, + "authorization_header": { + "type": "string", + "x-go-name": "AuthorizationHeader" + }, + "config": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-go-name": "Config" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "events": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Events" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "type": { + "type": "string", + "x-go-name": "Type" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Identity": { + "description": "Identity for a person's identity like an author or committer", + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "InternalTracker": { + "description": "InternalTracker represents settings for internal tracker", + "type": "object", + "properties": { + "allow_only_contributors_to_track_time": { + "description": "Let only contributors track time (Built-in issue tracker)", + "type": "boolean", + "x-go-name": "AllowOnlyContributorsToTrackTime" + }, + "enable_issue_dependencies": { + "description": "Enable dependencies for issues and pull requests (Built-in issue tracker)", + "type": "boolean", + "x-go-name": "EnableIssueDependencies" + }, + "enable_time_tracker": { + "description": "Enable time tracking (Built-in issue tracker)", + "type": "boolean", + "x-go-name": "EnableTimeTracker" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Issue": { + "description": "Issue represents an issue in a repository", + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "$ref": "#/definitions/Attachment" + }, + "x-go-name": "Attachments" + }, + "assignee": { + "$ref": "#/definitions/User" + }, + "assignees": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + }, + "x-go-name": "Assignees" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "closed_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Closed" + }, + "comments": { + "type": "integer", + "format": "int64", + "x-go-name": "Comments" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "is_locked": { + "type": "boolean", + "x-go-name": "IsLocked" + }, + "labels": { + "type": "array", + "items": { + "$ref": "#/definitions/Label" + }, + "x-go-name": "Labels" + }, + "milestone": { + "$ref": "#/definitions/Milestone" + }, + "number": { + "type": "integer", + "format": "int64", + "x-go-name": "Index" + }, + "original_author": { + "type": "string", + "x-go-name": "OriginalAuthor" + }, + "original_author_id": { + "type": "integer", + "format": "int64", + "x-go-name": "OriginalAuthorID" + }, + "pin_order": { + "type": "integer", + "format": "int64", + "x-go-name": "PinOrder" + }, + "pull_request": { + "$ref": "#/definitions/PullRequestMeta" + }, + "ref": { + "type": "string", + "x-go-name": "Ref" + }, + "repository": { + "$ref": "#/definitions/RepositoryMeta" + }, + "state": { + "$ref": "#/definitions/StateType" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueConfig": { + "type": "object", + "properties": { + "blank_issues_enabled": { + "type": "boolean", + "x-go-name": "BlankIssuesEnabled" + }, + "contact_links": { + "type": "array", + "items": { + "$ref": "#/definitions/IssueConfigContactLink" + }, + "x-go-name": "ContactLinks" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueConfigContactLink": { + "type": "object", + "properties": { + "about": { + "type": "string", + "x-go-name": "About" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueConfigValidation": { + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "valid": { + "type": "boolean", + "x-go-name": "Valid" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueDeadline": { + "description": "IssueDeadline represents an issue deadline", + "type": "object", + "properties": { + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueFormField": { + "description": "IssueFormField represents a form field", + "type": "object", + "properties": { + "attributes": { + "type": "object", + "additionalProperties": {}, + "x-go-name": "Attributes" + }, + "id": { + "type": "string", + "x-go-name": "ID" + }, + "type": { + "$ref": "#/definitions/IssueFormFieldType" + }, + "validations": { + "type": "object", + "additionalProperties": {}, + "x-go-name": "Validations" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueFormFieldType": { + "type": "string", + "title": "IssueFormFieldType defines issue form field type, can be \"markdown\", \"textarea\", \"input\", \"dropdown\" or \"checkboxes\"", + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueLabelsOption": { + "description": "IssueLabelsOption a collection of labels", + "type": "object", + "properties": { + "labels": { + "description": "list of label IDs", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-go-name": "Labels" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueMeta": { + "description": "IssueMeta basic issue information", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int64", + "x-go-name": "Index" + }, + "owner": { + "type": "string", + "x-go-name": "Owner" + }, + "repo": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueTemplate": { + "description": "IssueTemplate represents an issue template for a repository", + "type": "object", + "properties": { + "about": { + "type": "string", + "x-go-name": "About" + }, + "body": { + "type": "array", + "items": { + "$ref": "#/definitions/IssueFormField" + }, + "x-go-name": "Fields" + }, + "content": { + "type": "string", + "x-go-name": "Content" + }, + "file_name": { + "type": "string", + "x-go-name": "FileName" + }, + "labels": { + "$ref": "#/definitions/IssueTemplateLabels" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "ref": { + "type": "string", + "x-go-name": "Ref" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "IssueTemplateLabels": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Label": { + "description": "Label a label to an issue or a pr", + "type": "object", + "properties": { + "color": { + "type": "string", + "x-go-name": "Color", + "example": "00aabb" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "exclusive": { + "type": "boolean", + "x-go-name": "Exclusive", + "example": false + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "LabelTemplate": { + "description": "LabelTemplate info of a Label template", + "type": "object", + "properties": { + "color": { + "type": "string", + "x-go-name": "Color", + "example": "00aabb" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "exclusive": { + "type": "boolean", + "x-go-name": "Exclusive", + "example": false + }, + "name": { + "type": "string", + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "LicenseTemplateInfo": { + "description": "LicensesInfo contains information about a License", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + }, + "implementation": { + "type": "string", + "x-go-name": "Implementation" + }, + "key": { + "type": "string", + "x-go-name": "Key" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "LicensesTemplateListEntry": { + "description": "LicensesListEntry is used for the API", + "type": "object", + "properties": { + "key": { + "type": "string", + "x-go-name": "Key" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "MarkdownOption": { + "description": "MarkdownOption markdown options", + "type": "object", + "properties": { + "Context": { + "description": "Context to render\n\nin: body", + "type": "string" + }, + "Mode": { + "description": "Mode to render (comment, gfm, markdown)\n\nin: body", + "type": "string" + }, + "Text": { + "description": "Text markdown to render\n\nin: body", + "type": "string" + }, + "Wiki": { + "description": "Is it a wiki page ?\n\nin: body", + "type": "boolean" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "MarkupOption": { + "description": "MarkupOption markup options", + "type": "object", + "properties": { + "Context": { + "description": "Context to render\n\nin: body", + "type": "string" + }, + "FilePath": { + "description": "File path for detecting extension in file mode\n\nin: body", + "type": "string" + }, + "Mode": { + "description": "Mode to render (comment, gfm, markdown, file)\n\nin: body", + "type": "string" + }, + "Text": { + "description": "Text markup to render\n\nin: body", + "type": "string" + }, + "Wiki": { + "description": "Is it a wiki page ?\n\nin: body", + "type": "boolean" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "MergePullRequestOption": { + "description": "MergePullRequestForm form for merging Pull Request", + "type": "object", + "required": [ + "Do" + ], + "properties": { + "Do": { + "type": "string", + "enum": [ + "merge", + "rebase", + "rebase-merge", + "squash", + "manually-merged" + ] + }, + "MergeCommitID": { + "type": "string" + }, + "MergeMessageField": { + "type": "string" + }, + "MergeTitleField": { + "type": "string" + }, + "delete_branch_after_merge": { + "type": "boolean", + "x-go-name": "DeleteBranchAfterMerge" + }, + "force_merge": { + "type": "boolean", + "x-go-name": "ForceMerge" + }, + "head_commit_id": { + "type": "string", + "x-go-name": "HeadCommitID" + }, + "merge_when_checks_succeed": { + "type": "boolean", + "x-go-name": "MergeWhenChecksSucceed" + } + }, + "x-go-name": "MergePullRequestForm", + "x-go-package": "code.gitea.io/gitea/services/forms" + }, + "MigrateRepoOptions": { + "description": "MigrateRepoOptions options for migrating repository's\nthis is used to interact with api v1", + "type": "object", + "required": [ + "clone_addr", + "repo_name" + ], + "properties": { + "auth_password": { + "type": "string", + "x-go-name": "AuthPassword" + }, + "auth_token": { + "type": "string", + "x-go-name": "AuthToken" + }, + "auth_username": { + "type": "string", + "x-go-name": "AuthUsername" + }, + "clone_addr": { + "type": "string", + "x-go-name": "CloneAddr" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "issues": { + "type": "boolean", + "x-go-name": "Issues" + }, + "labels": { + "type": "boolean", + "x-go-name": "Labels" + }, + "lfs": { + "type": "boolean", + "x-go-name": "LFS" + }, + "lfs_endpoint": { + "type": "string", + "x-go-name": "LFSEndpoint" + }, + "milestones": { + "type": "boolean", + "x-go-name": "Milestones" + }, + "mirror": { + "type": "boolean", + "x-go-name": "Mirror" + }, + "mirror_interval": { + "type": "string", + "x-go-name": "MirrorInterval" + }, + "private": { + "type": "boolean", + "x-go-name": "Private" + }, + "pull_requests": { + "type": "boolean", + "x-go-name": "PullRequests" + }, + "releases": { + "type": "boolean", + "x-go-name": "Releases" + }, + "repo_name": { + "type": "string", + "x-go-name": "RepoName" + }, + "repo_owner": { + "description": "Name of User or Organisation who will own Repo after migration", + "type": "string", + "x-go-name": "RepoOwner" + }, + "service": { + "type": "string", + "enum": [ + "git", + "github", + "gitea", + "gitlab" + ], + "x-go-name": "Service" + }, + "uid": { + "description": "deprecated (only for backwards compatibility)", + "type": "integer", + "format": "int64", + "x-go-name": "RepoOwnerID" + }, + "wiki": { + "type": "boolean", + "x-go-name": "Wiki" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Milestone": { + "description": "Milestone milestone is a collection of issues on one repository", + "type": "object", + "properties": { + "closed_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Closed" + }, + "closed_issues": { + "type": "integer", + "format": "int64", + "x-go-name": "ClosedIssues" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "due_on": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "open_issues": { + "type": "integer", + "format": "int64", + "x-go-name": "OpenIssues" + }, + "state": { + "$ref": "#/definitions/StateType" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NewIssuePinsAllowed": { + "description": "NewIssuePinsAllowed represents an API response that says if new Issue Pins are allowed", + "type": "object", + "properties": { + "issues": { + "type": "boolean", + "x-go-name": "Issues" + }, + "pull_requests": { + "type": "boolean", + "x-go-name": "PullRequests" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NodeInfo": { + "description": "NodeInfo contains standardized way of exposing metadata about a server running one of the distributed social networks", + "type": "object", + "properties": { + "metadata": { + "type": "object", + "x-go-name": "Metadata" + }, + "openRegistrations": { + "type": "boolean", + "x-go-name": "OpenRegistrations" + }, + "protocols": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Protocols" + }, + "services": { + "$ref": "#/definitions/NodeInfoServices" + }, + "software": { + "$ref": "#/definitions/NodeInfoSoftware" + }, + "usage": { + "$ref": "#/definitions/NodeInfoUsage" + }, + "version": { + "type": "string", + "x-go-name": "Version" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NodeInfoServices": { + "description": "NodeInfoServices contains the third party sites this server can connect to via their application API", + "type": "object", + "properties": { + "inbound": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Inbound" + }, + "outbound": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Outbound" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NodeInfoSoftware": { + "description": "NodeInfoSoftware contains Metadata about server software in use", + "type": "object", + "properties": { + "homepage": { + "type": "string", + "x-go-name": "Homepage" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "repository": { + "type": "string", + "x-go-name": "Repository" + }, + "version": { + "type": "string", + "x-go-name": "Version" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NodeInfoUsage": { + "description": "NodeInfoUsage contains usage statistics for this server", + "type": "object", + "properties": { + "localComments": { + "type": "integer", + "format": "int64", + "x-go-name": "LocalComments" + }, + "localPosts": { + "type": "integer", + "format": "int64", + "x-go-name": "LocalPosts" + }, + "users": { + "$ref": "#/definitions/NodeInfoUsageUsers" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NodeInfoUsageUsers": { + "description": "NodeInfoUsageUsers contains statistics about the users of this server", + "type": "object", + "properties": { + "activeHalfyear": { + "type": "integer", + "format": "int64", + "x-go-name": "ActiveHalfyear" + }, + "activeMonth": { + "type": "integer", + "format": "int64", + "x-go-name": "ActiveMonth" + }, + "total": { + "type": "integer", + "format": "int64", + "x-go-name": "Total" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Note": { + "description": "Note contains information related to a git note", + "type": "object", + "properties": { + "commit": { + "$ref": "#/definitions/Commit" + }, + "message": { + "type": "string", + "x-go-name": "Message" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NotificationCount": { + "description": "NotificationCount number of unread notifications", + "type": "object", + "properties": { + "new": { + "type": "integer", + "format": "int64", + "x-go-name": "New" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NotificationSubject": { + "description": "NotificationSubject contains the notification subject (Issue/Pull/Commit)", + "type": "object", + "properties": { + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "latest_comment_html_url": { + "type": "string", + "x-go-name": "LatestCommentHTMLURL" + }, + "latest_comment_url": { + "type": "string", + "x-go-name": "LatestCommentURL" + }, + "state": { + "$ref": "#/definitions/StateType" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "type": { + "$ref": "#/definitions/NotifySubjectType" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NotificationThread": { + "description": "NotificationThread expose Notification on API", + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "pinned": { + "type": "boolean", + "x-go-name": "Pinned" + }, + "repository": { + "$ref": "#/definitions/Repository" + }, + "subject": { + "$ref": "#/definitions/NotificationSubject" + }, + "unread": { + "type": "boolean", + "x-go-name": "Unread" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "UpdatedAt" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "NotifySubjectType": { + "description": "NotifySubjectType represent type of notification subject", + "type": "string", + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "OAuth2Application": { + "type": "object", + "title": "OAuth2Application represents an OAuth2 application.", + "properties": { + "client_id": { + "type": "string", + "x-go-name": "ClientID" + }, + "client_secret": { + "type": "string", + "x-go-name": "ClientSecret" + }, + "confidential_client": { + "type": "boolean", + "x-go-name": "ConfidentialClient" + }, + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "RedirectURIs" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Organization": { + "description": "Organization represents an organization", + "type": "object", + "properties": { + "avatar_url": { + "type": "string", + "x-go-name": "AvatarURL" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "location": { + "type": "string", + "x-go-name": "Location" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "repo_admin_change_team_access": { + "type": "boolean", + "x-go-name": "RepoAdminChangeTeamAccess" + }, + "username": { + "description": "deprecated", + "type": "string", + "x-go-name": "UserName" + }, + "visibility": { + "type": "string", + "x-go-name": "Visibility" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "OrganizationPermissions": { + "description": "OrganizationPermissions list different users permissions on an organization", + "type": "object", + "properties": { + "can_create_repository": { + "type": "boolean", + "x-go-name": "CanCreateRepository" + }, + "can_read": { + "type": "boolean", + "x-go-name": "CanRead" + }, + "can_write": { + "type": "boolean", + "x-go-name": "CanWrite" + }, + "is_admin": { + "type": "boolean", + "x-go-name": "IsAdmin" + }, + "is_owner": { + "type": "boolean", + "x-go-name": "IsOwner" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PRBranchInfo": { + "description": "PRBranchInfo information about a branch", + "type": "object", + "properties": { + "label": { + "type": "string", + "x-go-name": "Name" + }, + "ref": { + "type": "string", + "x-go-name": "Ref" + }, + "repo": { + "$ref": "#/definitions/Repository" + }, + "repo_id": { + "type": "integer", + "format": "int64", + "x-go-name": "RepoID" + }, + "sha": { + "type": "string", + "x-go-name": "Sha" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Package": { + "description": "Package represents a package", + "type": "object", + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "CreatedAt" + }, + "creator": { + "$ref": "#/definitions/User" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "owner": { + "$ref": "#/definitions/User" + }, + "repository": { + "$ref": "#/definitions/Repository" + }, + "type": { + "type": "string", + "x-go-name": "Type" + }, + "version": { + "type": "string", + "x-go-name": "Version" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PackageFile": { + "description": "PackageFile represents a package file", + "type": "object", + "properties": { + "Size": { + "type": "integer", + "format": "int64" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "md5": { + "type": "string", + "x-go-name": "HashMD5" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "sha1": { + "type": "string", + "x-go-name": "HashSHA1" + }, + "sha256": { + "type": "string", + "x-go-name": "HashSHA256" + }, + "sha512": { + "type": "string", + "x-go-name": "HashSHA512" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PayloadCommit": { + "description": "PayloadCommit represents a commit", + "type": "object", + "properties": { + "added": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Added" + }, + "author": { + "$ref": "#/definitions/PayloadUser" + }, + "committer": { + "$ref": "#/definitions/PayloadUser" + }, + "id": { + "description": "sha1 hash of the commit", + "type": "string", + "x-go-name": "ID" + }, + "message": { + "type": "string", + "x-go-name": "Message" + }, + "modified": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Modified" + }, + "removed": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Removed" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "x-go-name": "Timestamp" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "verification": { + "$ref": "#/definitions/PayloadCommitVerification" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PayloadCommitVerification": { + "description": "PayloadCommitVerification represents the GPG verification of a commit", + "type": "object", + "properties": { + "payload": { + "type": "string", + "x-go-name": "Payload" + }, + "reason": { + "type": "string", + "x-go-name": "Reason" + }, + "signature": { + "type": "string", + "x-go-name": "Signature" + }, + "signer": { + "$ref": "#/definitions/PayloadUser" + }, + "verified": { + "type": "boolean", + "x-go-name": "Verified" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PayloadUser": { + "description": "PayloadUser represents the author or committer of a commit", + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "name": { + "description": "Full name of the commit author", + "type": "string", + "x-go-name": "Name" + }, + "username": { + "type": "string", + "x-go-name": "UserName" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Permission": { + "description": "Permission represents a set of permissions", + "type": "object", + "properties": { + "admin": { + "type": "boolean", + "x-go-name": "Admin" + }, + "pull": { + "type": "boolean", + "x-go-name": "Pull" + }, + "push": { + "type": "boolean", + "x-go-name": "Push" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PublicKey": { + "description": "PublicKey publickey is a user key to push code to repository", + "type": "object", + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "fingerprint": { + "type": "string", + "x-go-name": "Fingerprint" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "key": { + "type": "string", + "x-go-name": "Key" + }, + "key_type": { + "type": "string", + "x-go-name": "KeyType" + }, + "read_only": { + "type": "boolean", + "x-go-name": "ReadOnly" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PullRequest": { + "description": "PullRequest represents a pull request", + "type": "object", + "properties": { + "allow_maintainer_edit": { + "type": "boolean", + "x-go-name": "AllowMaintainerEdit" + }, + "assignee": { + "$ref": "#/definitions/User" + }, + "assignees": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + }, + "x-go-name": "Assignees" + }, + "base": { + "$ref": "#/definitions/PRBranchInfo" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "closed_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Closed" + }, + "comments": { + "type": "integer", + "format": "int64", + "x-go-name": "Comments" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "diff_url": { + "type": "string", + "x-go-name": "DiffURL" + }, + "due_date": { + "type": "string", + "format": "date-time", + "x-go-name": "Deadline" + }, + "head": { + "$ref": "#/definitions/PRBranchInfo" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "is_locked": { + "type": "boolean", + "x-go-name": "IsLocked" + }, + "labels": { + "type": "array", + "items": { + "$ref": "#/definitions/Label" + }, + "x-go-name": "Labels" + }, + "merge_base": { + "type": "string", + "x-go-name": "MergeBase" + }, + "merge_commit_sha": { + "type": "string", + "x-go-name": "MergedCommitID" + }, + "mergeable": { + "type": "boolean", + "x-go-name": "Mergeable" + }, + "merged": { + "type": "boolean", + "x-go-name": "HasMerged" + }, + "merged_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Merged" + }, + "merged_by": { + "$ref": "#/definitions/User" + }, + "milestone": { + "$ref": "#/definitions/Milestone" + }, + "number": { + "type": "integer", + "format": "int64", + "x-go-name": "Index" + }, + "patch_url": { + "type": "string", + "x-go-name": "PatchURL" + }, + "pin_order": { + "type": "integer", + "format": "int64", + "x-go-name": "PinOrder" + }, + "requested_reviewers": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + }, + "x-go-name": "RequestedReviewers" + }, + "state": { + "$ref": "#/definitions/StateType" + }, + "title": { + "type": "string", + "x-go-name": "Title" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PullRequestMeta": { + "description": "PullRequestMeta PR info if an issue is a PR", + "type": "object", + "properties": { + "merged": { + "type": "boolean", + "x-go-name": "HasMerged" + }, + "merged_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Merged" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PullReview": { + "description": "PullReview represents a pull request review", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + }, + "comments_count": { + "type": "integer", + "format": "int64", + "x-go-name": "CodeCommentsCount" + }, + "commit_id": { + "type": "string", + "x-go-name": "CommitID" + }, + "dismissed": { + "type": "boolean", + "x-go-name": "Dismissed" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "official": { + "type": "boolean", + "x-go-name": "Official" + }, + "pull_request_url": { + "type": "string", + "x-go-name": "HTMLPullURL" + }, + "stale": { + "type": "boolean", + "x-go-name": "Stale" + }, + "state": { + "$ref": "#/definitions/ReviewStateType" + }, + "submitted_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Submitted" + }, + "team": { + "$ref": "#/definitions/Team" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PullReviewComment": { + "description": "PullReviewComment represents a comment on a pull request review", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + }, + "commit_id": { + "type": "string", + "x-go-name": "CommitID" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "diff_hunk": { + "type": "string", + "x-go-name": "DiffHunk" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "original_commit_id": { + "type": "string", + "x-go-name": "OrigCommitID" + }, + "original_position": { + "type": "integer", + "format": "uint64", + "x-go-name": "OldLineNum" + }, + "path": { + "type": "string", + "x-go-name": "Path" + }, + "position": { + "type": "integer", + "format": "uint64", + "x-go-name": "LineNum" + }, + "pull_request_review_id": { + "type": "integer", + "format": "int64", + "x-go-name": "ReviewID" + }, + "pull_request_url": { + "type": "string", + "x-go-name": "HTMLPullURL" + }, + "resolver": { + "$ref": "#/definitions/User" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PullReviewRequestOptions": { + "description": "PullReviewRequestOptions are options to add or remove pull review requests", + "type": "object", + "properties": { + "reviewers": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Reviewers" + }, + "team_reviewers": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "TeamReviewers" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "PushMirror": { + "description": "PushMirror represents information of a push mirror", + "type": "object", + "properties": { + "created": { + "type": "string", + "x-go-name": "CreatedUnix" + }, + "interval": { + "type": "string", + "x-go-name": "Interval" + }, + "last_error": { + "type": "string", + "x-go-name": "LastError" + }, + "last_update": { + "type": "string", + "x-go-name": "LastUpdateUnix" + }, + "remote_address": { + "type": "string", + "x-go-name": "RemoteAddress" + }, + "remote_name": { + "type": "string", + "x-go-name": "RemoteName" + }, + "repo_name": { + "type": "string", + "x-go-name": "RepoName" + }, + "sync_on_commit": { + "type": "boolean", + "x-go-name": "SyncOnCommit" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Reaction": { + "description": "Reaction contain one reaction", + "type": "object", + "properties": { + "content": { + "type": "string", + "x-go-name": "Reaction" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Reference": { + "type": "object", + "title": "Reference represents a Git reference.", + "properties": { + "object": { + "$ref": "#/definitions/GitObject" + }, + "ref": { + "type": "string", + "x-go-name": "Ref" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Release": { + "description": "Release represents a repository release", + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "$ref": "#/definitions/Attachment" + }, + "x-go-name": "Attachments" + }, + "author": { + "$ref": "#/definitions/User" + }, + "body": { + "type": "string", + "x-go-name": "Note" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "CreatedAt" + }, + "draft": { + "type": "boolean", + "x-go-name": "IsDraft" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Title" + }, + "prerelease": { + "type": "boolean", + "x-go-name": "IsPrerelease" + }, + "published_at": { + "type": "string", + "format": "date-time", + "x-go-name": "PublishedAt" + }, + "tag_name": { + "type": "string", + "x-go-name": "TagName" + }, + "tarball_url": { + "type": "string", + "x-go-name": "TarURL" + }, + "target_commitish": { + "type": "string", + "x-go-name": "Target" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "zipball_url": { + "type": "string", + "x-go-name": "ZipURL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "RenameUserOption": { + "description": "RenameUserOption options when renaming a user", + "type": "object", + "required": [ + "new_username" + ], + "properties": { + "new_username": { + "description": "New username for this user. This name cannot be in use yet by any other user.", + "type": "string", + "uniqueItems": true, + "x-go-name": "NewName" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "RepoCollaboratorPermission": { + "description": "RepoCollaboratorPermission to get repository permission for a collaborator", + "type": "object", + "properties": { + "permission": { + "type": "string", + "x-go-name": "Permission" + }, + "role_name": { + "type": "string", + "x-go-name": "RoleName" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "RepoCommit": { + "type": "object", + "title": "RepoCommit contains information of a commit in the context of a repository.", + "properties": { + "author": { + "$ref": "#/definitions/CommitUser" + }, + "committer": { + "$ref": "#/definitions/CommitUser" + }, + "message": { + "type": "string", + "x-go-name": "Message" + }, + "tree": { + "$ref": "#/definitions/CommitMeta" + }, + "url": { + "type": "string", + "x-go-name": "URL" + }, + "verification": { + "$ref": "#/definitions/PayloadCommitVerification" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "RepoTopicOptions": { + "description": "RepoTopicOptions a collection of repo topic names", + "type": "object", + "properties": { + "topics": { + "description": "list of topic names", + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Topics" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "RepoTransfer": { + "description": "RepoTransfer represents a pending repo transfer", + "type": "object", + "properties": { + "doer": { + "$ref": "#/definitions/User" + }, + "recipient": { + "$ref": "#/definitions/User" + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/definitions/Team" + }, + "x-go-name": "Teams" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Repository": { + "description": "Repository represents a repository", + "type": "object", + "properties": { + "allow_merge_commits": { + "type": "boolean", + "x-go-name": "AllowMerge" + }, + "allow_rebase": { + "type": "boolean", + "x-go-name": "AllowRebase" + }, + "allow_rebase_explicit": { + "type": "boolean", + "x-go-name": "AllowRebaseMerge" + }, + "allow_rebase_update": { + "type": "boolean", + "x-go-name": "AllowRebaseUpdate" + }, + "allow_squash_merge": { + "type": "boolean", + "x-go-name": "AllowSquash" + }, + "archived": { + "type": "boolean", + "x-go-name": "Archived" + }, + "archived_at": { + "type": "string", + "format": "date-time", + "x-go-name": "ArchivedAt" + }, + "avatar_url": { + "type": "string", + "x-go-name": "AvatarURL" + }, + "clone_url": { + "type": "string", + "x-go-name": "CloneURL" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "default_allow_maintainer_edit": { + "type": "boolean", + "x-go-name": "DefaultAllowMaintainerEdit" + }, + "default_branch": { + "type": "string", + "x-go-name": "DefaultBranch" + }, + "default_delete_branch_after_merge": { + "type": "boolean", + "x-go-name": "DefaultDeleteBranchAfterMerge" + }, + "default_merge_style": { + "type": "string", + "x-go-name": "DefaultMergeStyle" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "empty": { + "type": "boolean", + "x-go-name": "Empty" + }, + "external_tracker": { + "$ref": "#/definitions/ExternalTracker" + }, + "external_wiki": { + "$ref": "#/definitions/ExternalWiki" + }, + "fork": { + "type": "boolean", + "x-go-name": "Fork" + }, + "forks_count": { + "type": "integer", + "format": "int64", + "x-go-name": "Forks" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "has_actions": { + "type": "boolean", + "x-go-name": "HasActions" + }, + "has_issues": { + "type": "boolean", + "x-go-name": "HasIssues" + }, + "has_packages": { + "type": "boolean", + "x-go-name": "HasPackages" + }, + "has_projects": { + "type": "boolean", + "x-go-name": "HasProjects" + }, + "has_pull_requests": { + "type": "boolean", + "x-go-name": "HasPullRequests" + }, + "has_releases": { + "type": "boolean", + "x-go-name": "HasReleases" + }, + "has_wiki": { + "type": "boolean", + "x-go-name": "HasWiki" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "ignore_whitespace_conflicts": { + "type": "boolean", + "x-go-name": "IgnoreWhitespaceConflicts" + }, + "internal": { + "type": "boolean", + "x-go-name": "Internal" + }, + "internal_tracker": { + "$ref": "#/definitions/InternalTracker" + }, + "language": { + "type": "string", + "x-go-name": "Language" + }, + "languages_url": { + "type": "string", + "x-go-name": "LanguagesURL" + }, + "link": { + "type": "string", + "x-go-name": "Link" + }, + "mirror": { + "type": "boolean", + "x-go-name": "Mirror" + }, + "mirror_interval": { + "type": "string", + "x-go-name": "MirrorInterval" + }, + "mirror_updated": { + "type": "string", + "format": "date-time", + "x-go-name": "MirrorUpdated" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "open_issues_count": { + "type": "integer", + "format": "int64", + "x-go-name": "OpenIssues" + }, + "open_pr_counter": { + "type": "integer", + "format": "int64", + "x-go-name": "OpenPulls" + }, + "original_url": { + "type": "string", + "x-go-name": "OriginalURL" + }, + "owner": { + "$ref": "#/definitions/User" + }, + "parent": { + "$ref": "#/definitions/Repository" + }, + "permissions": { + "$ref": "#/definitions/Permission" + }, + "private": { + "type": "boolean", + "x-go-name": "Private" + }, + "release_counter": { + "type": "integer", + "format": "int64", + "x-go-name": "Releases" + }, + "repo_transfer": { + "$ref": "#/definitions/RepoTransfer" + }, + "size": { + "type": "integer", + "format": "int64", + "x-go-name": "Size" + }, + "ssh_url": { + "type": "string", + "x-go-name": "SSHURL" + }, + "stars_count": { + "type": "integer", + "format": "int64", + "x-go-name": "Stars" + }, + "template": { + "type": "boolean", + "x-go-name": "Template" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "watchers_count": { + "type": "integer", + "format": "int64", + "x-go-name": "Watchers" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "RepositoryMeta": { + "description": "RepositoryMeta basic repository information", + "type": "object", + "properties": { + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "owner": { + "type": "string", + "x-go-name": "Owner" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ReviewStateType": { + "description": "ReviewStateType review state type", + "type": "string", + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "SearchResults": { + "description": "SearchResults results of a successful search", + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/Repository" + }, + "x-go-name": "Data" + }, + "ok": { + "type": "boolean", + "x-go-name": "OK" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "ServerVersion": { + "description": "ServerVersion wraps the version of the server", + "type": "object", + "properties": { + "version": { + "type": "string", + "x-go-name": "Version" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "StateType": { + "description": "StateType issue state type", + "type": "string", + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "StopWatch": { + "description": "StopWatch represent a running stopwatch", + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "duration": { + "type": "string", + "x-go-name": "Duration" + }, + "issue_index": { + "type": "integer", + "format": "int64", + "x-go-name": "IssueIndex" + }, + "issue_title": { + "type": "string", + "x-go-name": "IssueTitle" + }, + "repo_name": { + "type": "string", + "x-go-name": "RepoName" + }, + "repo_owner_name": { + "type": "string", + "x-go-name": "RepoOwnerName" + }, + "seconds": { + "type": "integer", + "format": "int64", + "x-go-name": "Seconds" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "SubmitPullReviewOptions": { + "description": "SubmitPullReviewOptions are options to submit a pending pull review", + "type": "object", + "properties": { + "body": { + "type": "string", + "x-go-name": "Body" + }, + "event": { + "$ref": "#/definitions/ReviewStateType" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Tag": { + "description": "Tag represents a repository tag", + "type": "object", + "properties": { + "commit": { + "$ref": "#/definitions/CommitMeta" + }, + "id": { + "type": "string", + "x-go-name": "ID" + }, + "message": { + "type": "string", + "x-go-name": "Message" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "tarball_url": { + "type": "string", + "x-go-name": "TarballURL" + }, + "zipball_url": { + "type": "string", + "x-go-name": "ZipballURL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "Team": { + "description": "Team represents a team in an organization", + "type": "object", + "properties": { + "can_create_org_repo": { + "type": "boolean", + "x-go-name": "CanCreateOrgRepo" + }, + "description": { + "type": "string", + "x-go-name": "Description" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "includes_all_repositories": { + "type": "boolean", + "x-go-name": "IncludesAllRepositories" + }, + "name": { + "type": "string", + "x-go-name": "Name" + }, + "organization": { + "$ref": "#/definitions/Organization" + }, + "permission": { + "type": "string", + "enum": [ + "none", + "read", + "write", + "admin", + "owner" + ], + "x-go-name": "Permission" + }, + "units": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Units", + "example": [ + "repo.code", + "repo.issues", + "repo.ext_issues", + "repo.wiki", + "repo.pulls", + "repo.releases", + "repo.projects", + "repo.ext_wiki" + ] + }, + "units_map": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-go-name": "UnitsMap", + "example": { + "repo.code": "read", + "repo.ext_issues": "none", + "repo.ext_wiki": "none", + "repo.issues": "write", + "repo.projects": "none", + "repo.pulls": "owner", + "repo.releases": "none", + "repo.wiki": "admin" + } + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "TimeStamp": { + "description": "TimeStamp defines a timestamp", + "type": "integer", + "format": "int64", + "x-go-package": "code.gitea.io/gitea/modules/timeutil" + }, + "TimelineComment": { + "description": "TimelineComment represents a timeline comment (comment of any type) on a commit or issue", + "type": "object", + "properties": { + "assignee": { + "$ref": "#/definitions/User" + }, + "assignee_team": { + "$ref": "#/definitions/Team" + }, + "body": { + "type": "string", + "x-go-name": "Body" + }, + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "dependent_issue": { + "$ref": "#/definitions/Issue" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "issue_url": { + "type": "string", + "x-go-name": "IssueURL" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "milestone": { + "$ref": "#/definitions/Milestone" + }, + "new_ref": { + "type": "string", + "x-go-name": "NewRef" + }, + "new_title": { + "type": "string", + "x-go-name": "NewTitle" + }, + "old_milestone": { + "$ref": "#/definitions/Milestone" + }, + "old_project_id": { + "type": "integer", + "format": "int64", + "x-go-name": "OldProjectID" + }, + "old_ref": { + "type": "string", + "x-go-name": "OldRef" + }, + "old_title": { + "type": "string", + "x-go-name": "OldTitle" + }, + "project_id": { + "type": "integer", + "format": "int64", + "x-go-name": "ProjectID" + }, + "pull_request_url": { + "type": "string", + "x-go-name": "PRURL" + }, + "ref_action": { + "type": "string", + "x-go-name": "RefAction" + }, + "ref_comment": { + "$ref": "#/definitions/Comment" + }, + "ref_commit_sha": { + "description": "commit SHA where issue/PR was referenced", + "type": "string", + "x-go-name": "RefCommitSHA" + }, + "ref_issue": { + "$ref": "#/definitions/Issue" + }, + "removed_assignee": { + "description": "whether the assignees were removed or added", + "type": "boolean", + "x-go-name": "RemovedAssignee" + }, + "resolve_doer": { + "$ref": "#/definitions/User" + }, + "review_id": { + "type": "integer", + "format": "int64", + "x-go-name": "ReviewID" + }, + "tracked_time": { + "$ref": "#/definitions/TrackedTime" + }, + "type": { + "type": "string", + "x-go-name": "Type" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + }, + "user": { + "$ref": "#/definitions/User" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "TopicName": { + "description": "TopicName a list of repo topic names", + "type": "object", + "properties": { + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "TopicNames" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "TopicResponse": { + "description": "TopicResponse for returning topics", + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "repo_count": { + "type": "integer", + "format": "int64", + "x-go-name": "RepoCount" + }, + "topic_name": { + "type": "string", + "x-go-name": "Name" + }, + "updated": { + "type": "string", + "format": "date-time", + "x-go-name": "Updated" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "TrackedTime": { + "description": "TrackedTime worked time for an issue / pr", + "type": "object", + "properties": { + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "id": { + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "issue": { + "$ref": "#/definitions/Issue" + }, + "issue_id": { + "description": "deprecated (only for backwards compatibility)", + "type": "integer", + "format": "int64", + "x-go-name": "IssueID" + }, + "time": { + "description": "Time in seconds", + "type": "integer", + "format": "int64", + "x-go-name": "Time" + }, + "user_id": { + "description": "deprecated (only for backwards compatibility)", + "type": "integer", + "format": "int64", + "x-go-name": "UserID" + }, + "user_name": { + "type": "string", + "x-go-name": "UserName" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "TransferRepoOption": { + "description": "TransferRepoOption options when transfer a repository's ownership", + "type": "object", + "required": [ + "new_owner" + ], + "properties": { + "new_owner": { + "type": "string", + "x-go-name": "NewOwner" + }, + "team_ids": { + "description": "ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-go-name": "TeamIDs" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "UpdateFileOptions": { + "description": "UpdateFileOptions options for updating files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)", + "type": "object", + "required": [ + "sha", + "content" + ], + "properties": { + "author": { + "$ref": "#/definitions/Identity" + }, + "branch": { + "description": "branch (optional) to base this file from. if not given, the default branch is used", + "type": "string", + "x-go-name": "BranchName" + }, + "committer": { + "$ref": "#/definitions/Identity" + }, + "content": { + "description": "content must be base64 encoded", + "type": "string", + "x-go-name": "Content" + }, + "dates": { + "$ref": "#/definitions/CommitDateOptions" + }, + "from_path": { + "description": "from_path (optional) is the path of the original file which will be moved/renamed to the path in the URL", + "type": "string", + "x-go-name": "FromPath" + }, + "message": { + "description": "message (optional) for the commit of this file. if not supplied, a default message will be used", + "type": "string", + "x-go-name": "Message" + }, + "new_branch": { + "description": "new_branch (optional) will make a new branch from `branch` before creating the file", + "type": "string", + "x-go-name": "NewBranchName" + }, + "sha": { + "description": "sha is the SHA for the file that already exists", + "type": "string", + "x-go-name": "SHA" + }, + "signoff": { + "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.", + "type": "boolean", + "x-go-name": "Signoff" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "User": { + "description": "User represents a user", + "type": "object", + "properties": { + "active": { + "description": "Is user active", + "type": "boolean", + "x-go-name": "IsActive" + }, + "avatar_url": { + "description": "URL to the user's avatar", + "type": "string", + "x-go-name": "AvatarURL" + }, + "created": { + "type": "string", + "format": "date-time", + "x-go-name": "Created" + }, + "description": { + "description": "the user's description", + "type": "string", + "x-go-name": "Description" + }, + "email": { + "type": "string", + "format": "email", + "x-go-name": "Email" + }, + "followers_count": { + "description": "user counts", + "type": "integer", + "format": "int64", + "x-go-name": "Followers" + }, + "following_count": { + "type": "integer", + "format": "int64", + "x-go-name": "Following" + }, + "full_name": { + "description": "the user's full name", + "type": "string", + "x-go-name": "FullName" + }, + "id": { + "description": "the user's id", + "type": "integer", + "format": "int64", + "x-go-name": "ID" + }, + "is_admin": { + "description": "Is the user an administrator", + "type": "boolean", + "x-go-name": "IsAdmin" + }, + "language": { + "description": "User locale", + "type": "string", + "x-go-name": "Language" + }, + "last_login": { + "type": "string", + "format": "date-time", + "x-go-name": "LastLogin" + }, + "location": { + "description": "the user's location", + "type": "string", + "x-go-name": "Location" + }, + "login": { + "description": "the user's username", + "type": "string", + "x-go-name": "UserName" + }, + "login_name": { + "description": "the user's authentication sign-in name.", + "type": "string", + "default": "empty", + "x-go-name": "LoginName" + }, + "prohibit_login": { + "description": "Is user login prohibited", + "type": "boolean", + "x-go-name": "ProhibitLogin" + }, + "restricted": { + "description": "Is user restricted", + "type": "boolean", + "x-go-name": "Restricted" + }, + "starred_repos_count": { + "type": "integer", + "format": "int64", + "x-go-name": "StarredRepos" + }, + "visibility": { + "description": "User visibility level option: public, limited, private", + "type": "string", + "x-go-name": "Visibility" + }, + "website": { + "description": "the user's website", + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "UserHeatmapData": { + "description": "UserHeatmapData represents the data needed to create a heatmap", + "type": "object", + "properties": { + "contributions": { + "type": "integer", + "format": "int64", + "x-go-name": "Contributions" + }, + "timestamp": { + "$ref": "#/definitions/TimeStamp" + } + }, + "x-go-package": "code.gitea.io/gitea/models/activities" + }, + "UserSettings": { + "description": "UserSettings represents user settings", + "type": "object", + "properties": { + "description": { + "type": "string", + "x-go-name": "Description" + }, + "diff_view_style": { + "type": "string", + "x-go-name": "DiffViewStyle" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "hide_activity": { + "type": "boolean", + "x-go-name": "HideActivity" + }, + "hide_email": { + "description": "Privacy", + "type": "boolean", + "x-go-name": "HideEmail" + }, + "language": { + "type": "string", + "x-go-name": "Language" + }, + "location": { + "type": "string", + "x-go-name": "Location" + }, + "theme": { + "type": "string", + "x-go-name": "Theme" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "UserSettingsOptions": { + "description": "UserSettingsOptions represents options to change user settings", + "type": "object", + "properties": { + "description": { + "type": "string", + "x-go-name": "Description" + }, + "diff_view_style": { + "type": "string", + "x-go-name": "DiffViewStyle" + }, + "full_name": { + "type": "string", + "x-go-name": "FullName" + }, + "hide_activity": { + "type": "boolean", + "x-go-name": "HideActivity" + }, + "hide_email": { + "description": "Privacy", + "type": "boolean", + "x-go-name": "HideEmail" + }, + "language": { + "type": "string", + "x-go-name": "Language" + }, + "location": { + "type": "string", + "x-go-name": "Location" + }, + "theme": { + "type": "string", + "x-go-name": "Theme" + }, + "website": { + "type": "string", + "x-go-name": "Website" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "WatchInfo": { + "description": "WatchInfo represents an API watch status of one repository", + "type": "object", + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "x-go-name": "CreatedAt" + }, + "ignored": { + "type": "boolean", + "x-go-name": "Ignored" + }, + "reason": { + "x-go-name": "Reason" + }, + "repository_url": { + "type": "string", + "x-go-name": "RepositoryURL" + }, + "subscribed": { + "type": "boolean", + "x-go-name": "Subscribed" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "WikiCommit": { + "description": "WikiCommit page commit/revision", + "type": "object", + "properties": { + "author": { + "$ref": "#/definitions/CommitUser" + }, + "commiter": { + "$ref": "#/definitions/CommitUser" + }, + "message": { + "type": "string", + "x-go-name": "Message" + }, + "sha": { + "type": "string", + "x-go-name": "ID" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "WikiCommitList": { + "description": "WikiCommitList commit/revision list", + "type": "object", + "properties": { + "commits": { + "type": "array", + "items": { + "$ref": "#/definitions/WikiCommit" + }, + "x-go-name": "WikiCommits" + }, + "count": { + "type": "integer", + "format": "int64", + "x-go-name": "Count" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "WikiPage": { + "description": "WikiPage a wiki page", + "type": "object", + "properties": { + "commit_count": { + "type": "integer", + "format": "int64", + "x-go-name": "CommitCount" + }, + "content_base64": { + "description": "Page content, base64 encoded", + "type": "string", + "x-go-name": "ContentBase64" + }, + "footer": { + "type": "string", + "x-go-name": "Footer" + }, + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "last_commit": { + "$ref": "#/definitions/WikiCommit" + }, + "sidebar": { + "type": "string", + "x-go-name": "Sidebar" + }, + "sub_url": { + "type": "string", + "x-go-name": "SubURL" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, + "WikiPageMetaData": { + "description": "WikiPageMetaData wiki page meta information", + "type": "object", + "properties": { + "html_url": { + "type": "string", + "x-go-name": "HTMLURL" + }, + "last_commit": { + "$ref": "#/definitions/WikiCommit" + }, + "sub_url": { + "type": "string", + "x-go-name": "SubURL" + }, + "title": { + "type": "string", + "x-go-name": "Title" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + } + }, + "responses": { + "AccessToken": { + "description": "AccessToken represents an API access token.", + "schema": { + "$ref": "#/definitions/AccessToken" + } + }, + "AccessTokenList": { + "description": "AccessTokenList represents a list of API access token.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AccessToken" + } + } + }, + "ActivityFeedsList": { + "description": "ActivityFeedsList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Activity" + } + } + }, + "ActivityPub": { + "description": "ActivityPub", + "schema": { + "$ref": "#/definitions/ActivityPub" + } + }, + "AnnotatedTag": { + "description": "AnnotatedTag", + "schema": { + "$ref": "#/definitions/AnnotatedTag" + } + }, + "Attachment": { + "description": "Attachment", + "schema": { + "$ref": "#/definitions/Attachment" + } + }, + "AttachmentList": { + "description": "AttachmentList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Attachment" + } + } + }, + "Branch": { + "description": "Branch", + "schema": { + "$ref": "#/definitions/Branch" + } + }, + "BranchList": { + "description": "BranchList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Branch" + } + } + }, + "BranchProtection": { + "description": "BranchProtection", + "schema": { + "$ref": "#/definitions/BranchProtection" + } + }, + "BranchProtectionList": { + "description": "BranchProtectionList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/BranchProtection" + } + } + }, + "ChangedFileList": { + "description": "ChangedFileList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ChangedFile" + } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } + } + }, + "CombinedStatus": { + "description": "CombinedStatus", + "schema": { + "$ref": "#/definitions/CombinedStatus" + } + }, + "Comment": { + "description": "Comment", + "schema": { + "$ref": "#/definitions/Comment" + } + }, + "CommentList": { + "description": "CommentList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Comment" + } + } + }, + "Commit": { + "description": "Commit", + "schema": { + "$ref": "#/definitions/Commit" + } + }, + "CommitList": { + "description": "CommitList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Commit" + } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } + } + }, + "CommitStatus": { + "description": "CommitStatus", + "schema": { + "$ref": "#/definitions/CommitStatus" + } + }, + "CommitStatusList": { + "description": "CommitStatusList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/CommitStatus" + } + } + }, + "ContentsListResponse": { + "description": "ContentsListResponse", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ContentsResponse" + } + } + }, + "ContentsResponse": { + "description": "ContentsResponse", + "schema": { + "$ref": "#/definitions/ContentsResponse" + } + }, + "CronList": { + "description": "CronList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Cron" + } + } + }, + "DeployKey": { + "description": "DeployKey", + "schema": { + "$ref": "#/definitions/DeployKey" + } + }, + "DeployKeyList": { + "description": "DeployKeyList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DeployKey" + } + } + }, + "EmailList": { + "description": "EmailList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Email" + } + } + }, + "EmptyRepository": { + "description": "EmptyRepository", + "schema": { + "$ref": "#/definitions/APIError" + } + }, + "FileDeleteResponse": { + "description": "FileDeleteResponse", + "schema": { + "$ref": "#/definitions/FileDeleteResponse" + } + }, + "FileResponse": { + "description": "FileResponse", + "schema": { + "$ref": "#/definitions/FileResponse" + } + }, + "FilesResponse": { + "description": "FilesResponse", + "schema": { + "$ref": "#/definitions/FilesResponse" + } + }, + "GPGKey": { + "description": "GPGKey", + "schema": { + "$ref": "#/definitions/GPGKey" + } + }, + "GPGKeyList": { + "description": "GPGKeyList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/GPGKey" + } + } + }, + "GeneralAPISettings": { + "description": "GeneralAPISettings", + "schema": { + "$ref": "#/definitions/GeneralAPISettings" + } + }, + "GeneralAttachmentSettings": { + "description": "GeneralAttachmentSettings", + "schema": { + "$ref": "#/definitions/GeneralAttachmentSettings" + } + }, + "GeneralRepoSettings": { + "description": "GeneralRepoSettings", + "schema": { + "$ref": "#/definitions/GeneralRepoSettings" + } + }, + "GeneralUISettings": { + "description": "GeneralUISettings", + "schema": { + "$ref": "#/definitions/GeneralUISettings" + } + }, + "GitBlobResponse": { + "description": "GitBlobResponse", + "schema": { + "$ref": "#/definitions/GitBlobResponse" + } + }, + "GitHook": { + "description": "GitHook", + "schema": { + "$ref": "#/definitions/GitHook" + } + }, + "GitHookList": { + "description": "GitHookList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/GitHook" + } + } + }, + "GitTreeResponse": { + "description": "GitTreeResponse", + "schema": { + "$ref": "#/definitions/GitTreeResponse" + } + }, + "GitignoreTemplateInfo": { + "description": "GitignoreTemplateInfo", + "schema": { + "$ref": "#/definitions/GitignoreTemplateInfo" + } + }, + "GitignoreTemplateList": { + "description": "GitignoreTemplateList", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Hook": { + "description": "Hook", + "schema": { + "$ref": "#/definitions/Hook" + } + }, + "HookList": { + "description": "HookList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + } + } + }, + "Issue": { + "description": "Issue", + "schema": { + "$ref": "#/definitions/Issue" + } + }, + "IssueDeadline": { + "description": "IssueDeadline", + "schema": { + "$ref": "#/definitions/IssueDeadline" + } + }, + "IssueList": { + "description": "IssueList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Issue" + } + } + }, + "IssueTemplates": { + "description": "IssueTemplates", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/IssueTemplate" + } + } + }, + "Label": { + "description": "Label", + "schema": { + "$ref": "#/definitions/Label" + } + }, + "LabelList": { + "description": "LabelList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Label" + } + } + }, + "LabelTemplateInfo": { + "description": "LabelTemplateInfo", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/LabelTemplate" + } + } + }, + "LabelTemplateList": { + "description": "LabelTemplateList", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "LanguageStatistics": { + "description": "LanguageStatistics", + "schema": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + } + }, + "LicenseTemplateInfo": { + "description": "LicenseTemplateInfo", + "schema": { + "$ref": "#/definitions/LicenseTemplateInfo" + } + }, + "LicenseTemplateList": { + "description": "LicenseTemplateList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/LicensesTemplateListEntry" + } + } + }, + "MarkdownRender": { + "description": "MarkdownRender is a rendered markdown document", + "schema": { + "type": "string" + } + }, + "MarkupRender": { + "description": "MarkupRender is a rendered markup document", + "schema": { + "type": "string" + } + }, + "Milestone": { + "description": "Milestone", + "schema": { + "$ref": "#/definitions/Milestone" + } + }, + "MilestoneList": { + "description": "MilestoneList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Milestone" + } + } + }, + "NodeInfo": { + "description": "NodeInfo", + "schema": { + "$ref": "#/definitions/NodeInfo" + } + }, + "Note": { + "description": "Note", + "schema": { + "$ref": "#/definitions/Note" + } + }, + "NotificationCount": { + "description": "Number of unread notifications", + "schema": { + "$ref": "#/definitions/NotificationCount" + } + }, + "NotificationThread": { + "description": "NotificationThread", + "schema": { + "$ref": "#/definitions/NotificationThread" + } + }, + "NotificationThreadList": { + "description": "NotificationThreadList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/NotificationThread" + } + } + }, + "OAuth2Application": { + "description": "OAuth2Application", + "schema": { + "$ref": "#/definitions/OAuth2Application" + } + }, + "OAuth2ApplicationList": { + "description": "OAuth2ApplicationList represents a list of OAuth2 applications.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/OAuth2Application" + } + } + }, + "Organization": { + "description": "Organization", + "schema": { + "$ref": "#/definitions/Organization" + } + }, + "OrganizationList": { + "description": "OrganizationList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Organization" + } + } + }, + "OrganizationPermissions": { + "description": "OrganizationPermissions", + "schema": { + "$ref": "#/definitions/OrganizationPermissions" + } + }, + "Package": { + "description": "Package", + "schema": { + "$ref": "#/definitions/Package" + } + }, + "PackageFileList": { + "description": "PackageFileList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PackageFile" + } + } + }, + "PackageList": { + "description": "PackageList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Package" + } + } + }, + "PublicKey": { + "description": "PublicKey", + "schema": { + "$ref": "#/definitions/PublicKey" + } + }, + "PublicKeyList": { + "description": "PublicKeyList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PublicKey" + } + } + }, + "PullRequest": { + "description": "PullRequest", + "schema": { + "$ref": "#/definitions/PullRequest" + } + }, + "PullRequestList": { + "description": "PullRequestList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PullRequest" + } + } + }, + "PullReview": { + "description": "PullReview", + "schema": { + "$ref": "#/definitions/PullReview" + } + }, + "PullReviewComment": { + "description": "PullComment", + "schema": { + "$ref": "#/definitions/PullReviewComment" + } + }, + "PullReviewCommentList": { + "description": "PullCommentList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PullReviewComment" + } + } + }, + "PullReviewList": { + "description": "PullReviewList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PullReview" + } + } + }, + "PushMirror": { + "description": "PushMirror", + "schema": { + "$ref": "#/definitions/PushMirror" + } + }, + "PushMirrorList": { + "description": "PushMirrorList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PushMirror" + } + } + }, + "Reaction": { + "description": "Reaction", + "schema": { + "$ref": "#/definitions/Reaction" + } + }, + "ReactionList": { + "description": "ReactionList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Reaction" + } + } + }, + "Reference": { + "description": "Reference", + "schema": { + "$ref": "#/definitions/Reference" + } + }, + "ReferenceList": { + "description": "ReferenceList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Reference" + } + } + }, + "Release": { + "description": "Release", + "schema": { + "$ref": "#/definitions/Release" + } + }, + "ReleaseList": { + "description": "ReleaseList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Release" + } + } + }, + "RepoCollaboratorPermission": { + "description": "RepoCollaboratorPermission", + "schema": { + "$ref": "#/definitions/RepoCollaboratorPermission" + } + }, + "RepoIssueConfig": { + "description": "RepoIssueConfig", + "schema": { + "$ref": "#/definitions/IssueConfig" + } + }, + "RepoIssueConfigValidation": { + "description": "RepoIssueConfigValidation", + "schema": { + "$ref": "#/definitions/IssueConfigValidation" + } + }, + "RepoNewIssuePinsAllowed": { + "description": "RepoNewIssuePinsAllowed", + "schema": { + "$ref": "#/definitions/NewIssuePinsAllowed" + } + }, + "Repository": { + "description": "Repository", + "schema": { + "$ref": "#/definitions/Repository" + } + }, + "RepositoryList": { + "description": "RepositoryList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Repository" + } + } + }, + "SearchResults": { + "description": "SearchResults", + "schema": { + "$ref": "#/definitions/SearchResults" + } + }, + "ServerVersion": { + "description": "ServerVersion", + "schema": { + "$ref": "#/definitions/ServerVersion" + } + }, + "StopWatch": { + "description": "StopWatch", + "schema": { + "$ref": "#/definitions/StopWatch" + } + }, + "StopWatchList": { + "description": "StopWatchList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/StopWatch" + } + } + }, + "StringSlice": { + "description": "StringSlice", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Tag": { + "description": "Tag", + "schema": { + "$ref": "#/definitions/Tag" + } + }, + "TagList": { + "description": "TagList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "Team": { + "description": "Team", + "schema": { + "$ref": "#/definitions/Team" + } + }, + "TeamList": { + "description": "TeamList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Team" + } + } + }, + "TimelineList": { + "description": "TimelineList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TimelineComment" + } + } + }, + "TopicListResponse": { + "description": "TopicListResponse", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TopicResponse" + } + } + }, + "TopicNames": { + "description": "TopicNames", + "schema": { + "$ref": "#/definitions/TopicName" + } + }, + "TrackedTime": { + "description": "TrackedTime", + "schema": { + "$ref": "#/definitions/TrackedTime" + } + }, + "TrackedTimeList": { + "description": "TrackedTimeList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/TrackedTime" + } + } + }, + "User": { + "description": "User", + "schema": { + "$ref": "#/definitions/User" + } + }, + "UserHeatmapData": { + "description": "UserHeatmapData", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserHeatmapData" + } + } + }, + "UserList": { + "description": "UserList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + } + }, + "UserSettings": { + "description": "UserSettings", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserSettings" + } + } + }, + "WatchInfo": { + "description": "WatchInfo", + "schema": { + "$ref": "#/definitions/WatchInfo" + } + }, + "WikiCommitList": { + "description": "WikiCommitList", + "schema": { + "$ref": "#/definitions/WikiCommitList" + } + }, + "WikiPage": { + "description": "WikiPage", + "schema": { + "$ref": "#/definitions/WikiPage" + } + }, + "WikiPageList": { + "description": "WikiPageList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/WikiPageMetaData" + } + } + }, + "conflict": { + "description": "APIConflict is a conflict empty response" + }, + "empty": { + "description": "APIEmpty is an empty response" + }, + "error": { + "description": "APIError is error format response", + "headers": { + "message": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "forbidden": { + "description": "APIForbiddenError is a forbidden error response", + "headers": { + "message": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "invalidTopicsError": { + "description": "APIInvalidTopicsError is error format response to invalid topics", + "headers": { + "invalidTopics": { + "type": "array", + "items": { + "type": "string" + } + }, + "message": { + "type": "string" + } + } + }, + "notFound": { + "description": "APINotFound is a not found empty response" + }, + "parameterBodies": { + "description": "parameterBodies", + "schema": { + "$ref": "#/definitions/CreatePushMirrorOption" + } + }, + "redirect": { + "description": "APIRedirect is a redirect response" + }, + "string": { + "description": "APIString is a string response", + "schema": { + "type": "string" + } + }, + "validationError": { + "description": "APIValidationError is error format response related to input validation", + "headers": { + "message": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "AccessToken": { + "type": "apiKey", + "name": "access_token", + "in": "query" + }, + "AuthorizationHeaderToken": { + "description": "API tokens must be prepended with \"token\" followed by a space.", + "type": "apiKey", + "name": "Authorization", + "in": "header" + }, + "BasicAuth": { + "type": "basic" + }, + "SudoHeader": { + "description": "Sudo API request as the user provided as the key. Admin privileges are required.", + "type": "apiKey", + "name": "Sudo", + "in": "header" + }, + "SudoParam": { + "description": "Sudo API request as the user provided as the key. Admin privileges are required.", + "type": "apiKey", + "name": "sudo", + "in": "query" + }, + "TOTPHeader": { + "description": "Must be used in combination with BasicAuth if two-factor authentication is enabled.", + "type": "apiKey", + "name": "X-GITEA-OTP", + "in": "header" + }, + "Token": { + "type": "apiKey", + "name": "token", + "in": "query" + } + }, + "security": [ + { + "BasicAuth": [] + }, + { + "Token": [] + }, + { + "AccessToken": [] + }, + { + "AuthorizationHeaderToken": [] + }, + { + "SudoParam": [] + }, + { + "SudoHeader": [] + }, + { + "TOTPHeader": [] + } + ] +} diff --git a/src/templates/user/auth/activate.tmpl b/src/templates/user/auth/activate.tmpl new file mode 100644 index 0000000..5a44529 --- /dev/null +++ b/src/templates/user/auth/activate.tmpl @@ -0,0 +1,52 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "auth.active_your_account"}} +

    +
    + {{template "base/alert" .}} + {{if .IsActivatePage}} + {{if .ServiceNotEnabled}} +

    {{.locale.Tr "auth.disable_register_mail"}}

    + {{else if .ResendLimited}} +

    {{.locale.Tr "auth.resent_limit_prompt"}}

    + {{else}} +

    {{.locale.Tr "auth.confirmation_mail_sent_prompt" (.SignedUser.Email|Escape) .ActiveCodeLives | Str2html}}

    + {{end}} + {{else}} + {{if .NeedsPassword}} +
    + + +
    +
    + + +
    + + {{else if .IsSendRegisterMail}} +

    {{.locale.Tr "auth.confirmation_mail_sent_prompt" (.Email|Escape) .ActiveCodeLives | Str2html}}

    + {{else if .IsCodeInvalid}} +

    {{.locale.Tr "auth.invalid_code"}}

    + {{else if .IsPasswordInvalid}} +

    {{.locale.Tr "auth.invalid_password"}}

    + {{else if .ManualActivationOnly}} +

    {{.locale.Tr "auth.manual_activation_only"}}

    + {{else}} +

    {{.locale.Tr "auth.has_unconfirmed_mail" (.SignedUser.Name|Escape) (.SignedUser.Email|Escape) | Str2html}}

    +
    +
    + +
    + {{end}} + {{end}} +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/captcha.tmpl b/src/templates/user/auth/captcha.tmpl new file mode 100644 index 0000000..62a3779 --- /dev/null +++ b/src/templates/user/auth/captcha.tmpl @@ -0,0 +1,28 @@ +{{if .EnableCaptcha}}{{if eq .CaptchaType "image"}} +
    + + {{.Captcha.CreateHTML}} +
    +
    + + +
    +{{else if eq .CaptchaType "recaptcha"}} +
    +
    +
    +{{else if eq .CaptchaType "hcaptcha"}} +
    +
    +
    +{{else if eq .CaptchaType "mcaptcha"}} +
    + {{.locale.Tr "captcha"}} +
    +
    +
    +{{else if eq .CaptchaType "cfturnstile"}} +
    +
    +
    +{{end}}{{end}} diff --git a/src/templates/user/auth/change_passwd.tmpl b/src/templates/user/auth/change_passwd.tmpl new file mode 100644 index 0000000..e05f46f --- /dev/null +++ b/src/templates/user/auth/change_passwd.tmpl @@ -0,0 +1,7 @@ +{{template "base/head" .}} +
    +
    + {{template "user/auth/change_passwd_inner" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/change_passwd_inner.tmpl b/src/templates/user/auth/change_passwd_inner.tmpl new file mode 100644 index 0000000..4b18ac9 --- /dev/null +++ b/src/templates/user/auth/change_passwd_inner.tmpl @@ -0,0 +1,26 @@ + {{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn)}} + {{template "base/alert" .}} + {{end}} +

    + {{.locale.Tr "settings.change_password"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + + +
    + + +
    + +
    + + +
    +
    +
    diff --git a/src/templates/user/auth/finalize_openid.tmpl b/src/templates/user/auth/finalize_openid.tmpl new file mode 100644 index 0000000..2b833d9 --- /dev/null +++ b/src/templates/user/auth/finalize_openid.tmpl @@ -0,0 +1,47 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/forgot_passwd.tmpl b/src/templates/user/auth/forgot_passwd.tmpl new file mode 100644 index 0000000..f80e289 --- /dev/null +++ b/src/templates/user/auth/forgot_passwd.tmpl @@ -0,0 +1,40 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +

    + {{.locale.Tr "auth.forgot_password_title"}} +

    +
    + {{template "base/alert" .}} + {{if .IsResetSent}} +

    {{.locale.Tr "auth.reset_password_mail_sent_prompt" (Escape .Email) .ResetPwdCodeLives | Str2html}}

    + {{else if .IsResetRequest}} +
    + + +
    +
    +
    + + +
    + {{else if .IsResetDisable}} +

    + {{if $.IsAdmin}} + {{.locale.Tr "auth.disable_forgot_password_mail_admin"}} + {{else}} + {{.locale.Tr "auth.disable_forgot_password_mail"}} + {{end}} +

    + {{else if .ResendLimited}} +

    {{.locale.Tr "auth.resent_limit_prompt"}}

    + {{end}} +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/grant.tmpl b/src/templates/user/auth/grant.tmpl new file mode 100644 index 0000000..28c5740 --- /dev/null +++ b/src/templates/user/auth/grant.tmpl @@ -0,0 +1,33 @@ +{{template "base/head" .}} +
    +
    +
    +

    + {{.locale.Tr "auth.authorize_title" .Application.Name}} +

    +
    + {{template "base/alert" .}} +

    + {{.locale.Tr "auth.authorize_application_description"}}
    + {{.locale.Tr "auth.authorize_application_created_by" .ApplicationCreatorLinkHTML | Str2html}} +

    +
    +
    +

    {{.locale.Tr "auth.authorize_redirect_notice" .ApplicationRedirectDomainHTML | Str2html}}

    +
    +
    +
    + {{.CsrfTokenHtml}} + + + + + + + Cancel +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/grant_error.tmpl b/src/templates/user/auth/grant_error.tmpl new file mode 100644 index 0000000..cfb7e86 --- /dev/null +++ b/src/templates/user/auth/grant_error.tmpl @@ -0,0 +1,16 @@ +{{template "base/head" .}} +
    + {{if .IsRepo}}{{template "repo/header" .}}{{end}} +
    +
    +

    + {{.locale.Tr "auth.authorization_failed"}} +

    +

    {{.Error.ErrorDescription}}

    +
    +

    {{.locale.Tr "auth.authorization_failed_desc"}}

    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/link_account.tmpl b/src/templates/user/auth/link_account.tmpl new file mode 100644 index 0000000..1e059f6 --- /dev/null +++ b/src/templates/user/auth/link_account.tmpl @@ -0,0 +1,34 @@ +{{template "base/head" .}} + + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/oidc_wellknown.tmpl b/src/templates/user/auth/oidc_wellknown.tmpl new file mode 100644 index 0000000..38e6900 --- /dev/null +++ b/src/templates/user/auth/oidc_wellknown.tmpl @@ -0,0 +1,49 @@ +{ + "issuer": "{{AppUrl | JSEscape | Safe}}", + "authorization_endpoint": "{{AppUrl | JSEscape | Safe}}login/oauth/authorize", + "token_endpoint": "{{AppUrl | JSEscape | Safe}}login/oauth/access_token", + "jwks_uri": "{{AppUrl | JSEscape | Safe}}login/oauth/keys", + "userinfo_endpoint": "{{AppUrl | JSEscape | Safe}}login/oauth/userinfo", + "introspection_endpoint": "{{AppUrl | JSEscape | Safe}}login/oauth/introspect", + "response_types_supported": [ + "code", + "id_token" + ], + "id_token_signing_alg_values_supported": [ + "{{.SigningKey.SigningMethod.Alg | JSEscape | Safe}}" + ], + "subject_types_supported": [ + "public" + ], + "scopes_supported": [ + "openid", + "profile", + "email", + "groups" + ], + "claims_supported": [ + "aud", + "exp", + "iat", + "iss", + "sub", + "name", + "preferred_username", + "profile", + "picture", + "website", + "locale", + "updated_at", + "email", + "email_verified", + "groups" + ], + "code_challenge_methods_supported": [ + "plain", + "S256" + ], + "grant_types_supported": [ + "authorization_code", + "refresh_token" + ] +} diff --git a/src/templates/user/auth/prohibit_login.tmpl b/src/templates/user/auth/prohibit_login.tmpl new file mode 100644 index 0000000..ddb16a7 --- /dev/null +++ b/src/templates/user/auth/prohibit_login.tmpl @@ -0,0 +1,16 @@ +{{template "base/head" .}} +
    +
    +
    +
    +

    + {{.locale.Tr "auth.prohibit_login"}} +

    +
    +

    {{.locale.Tr "auth.prohibit_login_desc"}}

    +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/reset_passwd.tmpl b/src/templates/user/auth/reset_passwd.tmpl new file mode 100644 index 0000000..4493778 --- /dev/null +++ b/src/templates/user/auth/reset_passwd.tmpl @@ -0,0 +1,67 @@ +{{template "base/head" .}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} + +

    + {{.locale.Tr "auth.reset_password"}} +

    +
    + {{template "base/alert" .}} + {{if .user_email}} +
    + + +
    + {{end}} + {{if .IsResetForm}} +
    + + +
    + {{if not .user_signed_in}} +
    + +
    + + +
    +
    + {{end}} + {{if .has_two_factor}} +

    + {{.locale.Tr "twofa"}} +

    +
    {{.locale.Tr "settings.twofa_is_enrolled" | Str2html}}
    + {{if .scratch_code}} +
    + + +
    + + {{else}} +
    + + +
    + {{end}} + {{end}} +
    +
    + + + {{if and .has_two_factor (not .scratch_code)}} + {{.locale.Tr "auth.use_scratch_code" | Str2html}} + {{end}} +
    + {{else}} +

    {{.locale.Tr "auth.invalid_code"}}

    + {{end}} +
    +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/signin.tmpl b/src/templates/user/auth/signin.tmpl new file mode 100644 index 0000000..b0e9ce8 --- /dev/null +++ b/src/templates/user/auth/signin.tmpl @@ -0,0 +1,10 @@ +{{template "base/head" .}} +
    + {{template "user/auth/signin_navbar" .}} +
    +
    + {{template "user/auth/signin_inner" .}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/signin_inner.tmpl b/src/templates/user/auth/signin_inner.tmpl new file mode 100644 index 0000000..504457f --- /dev/null +++ b/src/templates/user/auth/signin_inner.tmpl @@ -0,0 +1,74 @@ +{{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn)}} +{{template "base/alert" .}} +{{end}} +

    + {{if .LinkAccountMode}} + {{.locale.Tr "auth.oauth_signin_title"}} + {{else}} + {{.locale.Tr "auth.login_userpass"}} + {{end}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{if or (not .DisablePassword) .LinkAccountMode}} +
    + + +
    + {{end}} + {{if not .LinkAccountMode}} +
    + +
    + + +
    +
    + {{end}} + + {{template "user/auth/captcha" .}} + +
    + + + {{.locale.Tr "auth.forgot_password"}} +
    + + {{if .ShowRegistrationButton}} + + {{end}} + + {{if and .OrderedOAuth2Names .OAuth2Providers}} +
    + {{.locale.Tr "sign_in_or"}} +
    +
    +
    +
    + {{range $key := .OrderedOAuth2Names}} + {{$provider := index $.OAuth2Providers $key}} + + {{end}} +
    +
    +
    + {{end}} +
    +
    diff --git a/src/templates/user/auth/signin_navbar.tmpl b/src/templates/user/auth/signin_navbar.tmpl new file mode 100644 index 0000000..40f34cc --- /dev/null +++ b/src/templates/user/auth/signin_navbar.tmpl @@ -0,0 +1,21 @@ +{{if or .EnableOpenIDSignIn .EnableSSPI}} + +{{end}} diff --git a/src/templates/user/auth/signin_openid.tmpl b/src/templates/user/auth/signin_openid.tmpl new file mode 100644 index 0000000..7a54589 --- /dev/null +++ b/src/templates/user/auth/signin_openid.tmpl @@ -0,0 +1,38 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/signup.tmpl b/src/templates/user/auth/signup.tmpl new file mode 100644 index 0000000..1d03f61 --- /dev/null +++ b/src/templates/user/auth/signup.tmpl @@ -0,0 +1,7 @@ +{{template "base/head" .}} +
    +
    + {{template "user/auth/signup_inner" .}} +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/auth/signup_inner.tmpl b/src/templates/user/auth/signup_inner.tmpl new file mode 100644 index 0000000..8dfcb7b --- /dev/null +++ b/src/templates/user/auth/signup_inner.tmpl @@ -0,0 +1,60 @@ +
    +

    + {{if .LinkAccountMode}} + {{.locale.Tr "auth.oauth_signup_title"}} + {{else}} + {{.locale.Tr "sign_up"}} + {{end}} +

    +
    +
    + {{.CsrfTokenHtml}} + {{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeRegister)}} + {{template "base/alert" .}} + {{end}} + {{if .DisableRegistration}} +

    {{.locale.Tr "auth.disable_register_prompt"}}

    + {{else}} +
    + + +
    +
    + + +
    + + {{if not .DisablePassword}} +
    + + +
    +
    + + +
    + {{end}} + + {{template "user/auth/captcha" .}} + +
    + + +
    + + {{if not .LinkAccountMode}} + + {{end}} + {{end}} +
    +
    +
    diff --git a/src/templates/user/auth/signup_openid_connect.tmpl b/src/templates/user/auth/signup_openid_connect.tmpl new file mode 100644 index 0000000..89a2e41 --- /dev/null +++ b/src/templates/user/auth/signup_openid_connect.tmpl @@ -0,0 +1,36 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/signup_openid_navbar.tmpl b/src/templates/user/auth/signup_openid_navbar.tmpl new file mode 100644 index 0000000..f52c3ed --- /dev/null +++ b/src/templates/user/auth/signup_openid_navbar.tmpl @@ -0,0 +1,12 @@ + diff --git a/src/templates/user/auth/signup_openid_register.tmpl b/src/templates/user/auth/signup_openid_register.tmpl new file mode 100644 index 0000000..a490ea5 --- /dev/null +++ b/src/templates/user/auth/signup_openid_register.tmpl @@ -0,0 +1,38 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/twofa.tmpl b/src/templates/user/auth/twofa.tmpl new file mode 100644 index 0000000..4002266 --- /dev/null +++ b/src/templates/user/auth/twofa.tmpl @@ -0,0 +1,27 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/twofa_scratch.tmpl b/src/templates/user/auth/twofa_scratch.tmpl new file mode 100644 index 0000000..4ed7fce --- /dev/null +++ b/src/templates/user/auth/twofa_scratch.tmpl @@ -0,0 +1,26 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/webauthn.tmpl b/src/templates/user/auth/webauthn.tmpl new file mode 100644 index 0000000..ef04886 --- /dev/null +++ b/src/templates/user/auth/webauthn.tmpl @@ -0,0 +1,23 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/auth/webauthn_error.tmpl b/src/templates/user/auth/webauthn_error.tmpl new file mode 100644 index 0000000..59029bb --- /dev/null +++ b/src/templates/user/auth/webauthn_error.tmpl @@ -0,0 +1,13 @@ +
    +
    {{.locale.Tr "webauthn_error"}}
    +
    +
    +
    {{.locale.Tr "webauthn_unsupported_browser"}}
    +
    {{.locale.Tr "webauthn_error_unknown"}}
    +
    {{.locale.Tr "webauthn_error_insecure"}}
    +
    {{.locale.Tr "webauthn_error_unable_to_process"}}
    +
    {{.locale.Tr "webauthn_error_duplicated"}}
    +
    {{.locale.Tr "webauthn_error_empty"}}
    +
    {{.locale.Tr "webauthn_error_timeout"}}
    +
    +
    diff --git a/src/templates/user/code.tmpl b/src/templates/user/code.tmpl new file mode 100644 index 0000000..338aae2 --- /dev/null +++ b/src/templates/user/code.tmpl @@ -0,0 +1,25 @@ +{{template "base/head" .}} + +{{template "base/footer" .}} diff --git a/src/templates/user/dashboard/dashboard.tmpl b/src/templates/user/dashboard/dashboard.tmpl new file mode 100644 index 0000000..d4553ea --- /dev/null +++ b/src/templates/user/dashboard/dashboard.tmpl @@ -0,0 +1,15 @@ +{{template "base/head" .}} +
    + {{template "user/dashboard/navbar" .}} +
    + {{template "base/alert" .}} +
    +
    + {{template "user/heatmap" .}} + {{template "user/dashboard/feeds" .}} +
    + {{template "user/dashboard/repolist" .}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/dashboard/feeds.tmpl b/src/templates/user/dashboard/feeds.tmpl new file mode 100644 index 0000000..64daf4b --- /dev/null +++ b/src/templates/user/dashboard/feeds.tmpl @@ -0,0 +1,128 @@ +{{range .Feeds}} +
    +
    + {{avatarByAction $.Context .}} +
    +
    +
    +
    +

    + {{if gt .ActUser.ID 0}} + {{.GetDisplayName}} + {{else}} + {{.ShortActUserName}} + {{end}} + {{if eq .GetOpType 1}} + {{$.locale.Tr "action.create_repo" (.GetRepoLink|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 2}} + {{$.locale.Tr "action.rename_repo" (.GetContent|Escape) (.GetRepoLink|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 5}} + {{if .Content}} + {{$.locale.Tr "action.commit_repo" (.GetRepoLink|Escape) (.GetRefLink|Escape) (Escape .GetBranch) (.ShortRepoPath|Escape) | Str2html}} + {{else}} + {{$.locale.Tr "action.create_branch" (.GetRepoLink|Escape) (.GetRefLink|Escape) (Escape .GetBranch) (.ShortRepoPath|Escape) | Str2html}} + {{end}} + {{else if eq .GetOpType 6}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.create_issue" ((printf "%s/issues/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 7}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.create_pull_request" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 8}} + {{$.locale.Tr "action.transfer_repo" .GetContent (.GetRepoLink|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 9}} + {{$.locale.Tr "action.push_tag" (.GetRepoLink|Escape) (.GetRefLink|Escape) (.GetTag|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 10}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.comment_issue" ((printf "%s/issues/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 11}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.merge_pull_request" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 12}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.close_issue" ((printf "%s/issues/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 13}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.reopen_issue" ((printf "%s/issues/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 14}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.close_pull_request" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 15}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.reopen_pull_request" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 16}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.delete_tag" (.GetRepoLink|Escape) (.GetTag|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 17}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.delete_branch" (.GetRepoLink|Escape) (.GetBranch|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 18}} + {{$.locale.Tr "action.mirror_sync_push" (.GetRepoLink|Escape) (.GetRefLink|Escape) (.GetBranch|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 19}} + {{$.locale.Tr "action.mirror_sync_create" (.GetRepoLink|Escape) (.GetRefLink|Escape) (.GetBranch|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 20}} + {{$.locale.Tr "action.mirror_sync_delete" (.GetRepoLink|Escape) (.GetBranch|Escape) (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 21}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.approve_pull_request" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 22}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.reject_pull_request" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 23}} + {{$index := index .GetIssueInfos 0}} + {{$.locale.Tr "action.comment_pull" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) | Str2html}} + {{else if eq .GetOpType 24}} + {{$linkText := .Content | RenderEmoji $.Context}} + {{$.locale.Tr "action.publish_release" (.GetRepoLink|Escape) ((printf "%s/releases/tag/%s" .GetRepoLink .GetTag)|Escape) (.ShortRepoPath|Escape) $linkText | Str2html}} + {{else if eq .GetOpType 25}} + {{$index := index .GetIssueInfos 0}} + {{$reviewer := index .GetIssueInfos 1}} + {{$.locale.Tr "action.review_dismissed" ((printf "%s/pulls/%s" .GetRepoLink $index) |Escape) $index (.ShortRepoPath|Escape) $reviewer | Str2html}} + {{end}} +

    + {{if or (eq .GetOpType 5) (eq .GetOpType 18)}} +
    +
      + {{$push := ActionContent2Commits .}} + {{$repoLink := .GetRepoLink}} + {{range $push.Commits}} + {{$commitLink := printf "%s/commit/%s" $repoLink .Sha1}} +
    • + {{avatarHTML ($push.AvatarLink $.Context .AuthorEmail) 16 "gt-mr-2" .AuthorName}} + {{ShortSha .Sha1}} + + {{RenderCommitMessage $.Context .Message $repoLink $.ComposeMetas}} + +
    • + {{end}} + {{if and (gt $push.Len 1) $push.CompareURL}}
    • {{$.locale.Tr "action.compare_commits" $push.Len}} »
    • {{end}} +
    +
    + {{else if eq .GetOpType 6}} + {{index .GetIssueInfos 1 | RenderEmoji $.Context | RenderCodeBlock}} + {{else if eq .GetOpType 7}} + {{index .GetIssueInfos 1 | RenderEmoji $.Context | RenderCodeBlock}} + {{else if or (eq .GetOpType 10) (eq .GetOpType 21) (eq .GetOpType 22) (eq .GetOpType 23)}} + {{.GetIssueTitle | RenderEmoji $.Context | RenderCodeBlock}} + {{$comment := index .GetIssueInfos 1}} + {{if gt (len $comment) 0}}

    {{$comment | RenderEmoji $.Context}}

    {{end}} + {{else if eq .GetOpType 11}} +

    {{index .GetIssueInfos 1}}

    + {{else if or (eq .GetOpType 12) (eq .GetOpType 13) (eq .GetOpType 14) (eq .GetOpType 15)}} + {{.GetIssueTitle | RenderEmoji $.Context | RenderCodeBlock}} + {{else if eq .GetOpType 25}} +

    {{$.locale.Tr "action.review_dismissed_reason"}}

    +

    {{index .GetIssueInfos 2 | RenderEmoji $.Context}}

    + {{end}} +

    {{TimeSince .GetCreate $.locale}}

    +
    +
    +
    + {{svg (printf "octicon-%s" (ActionIcon .GetOpType)) 32}} +
    +
    +
    +
    +{{end}} + +{{template "base/paginate" .}} diff --git a/src/templates/user/dashboard/issues.tmpl b/src/templates/user/dashboard/issues.tmpl new file mode 100644 index 0000000..e7762c5 --- /dev/null +++ b/src/templates/user/dashboard/issues.tmpl @@ -0,0 +1,115 @@ +{{template "base/head" .}} +
    + {{template "user/dashboard/navbar" .}} +
    +
    + + +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/dashboard/milestones.tmpl b/src/templates/user/dashboard/milestones.tmpl new file mode 100644 index 0000000..ab5f02e --- /dev/null +++ b/src/templates/user/dashboard/milestones.tmpl @@ -0,0 +1,157 @@ +{{template "base/head" .}} +
    + {{template "user/dashboard/navbar" .}} +
    +
    +
    + +
    +
    + +
    + {{range .Milestones}} +
  • +
    +

    + + {{.Repo.FullName}} + + {{svg "octicon-milestone" 16}} + {{.Name}} +

    +
    + {{.Completeness}}% + +
    +
    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{$.locale.PrettyNumber .NumOpenIssues}} {{$.locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{$.locale.PrettyNumber .NumClosedIssues}} {{$.locale.Tr "repo.issues.closed_title"}} +
    + {{if .TotalTrackedTime}} +
    + {{svg "octicon-clock"}} + {{.TotalTrackedTime|Sec2Time}} +
    + {{end}} + {{if .UpdatedUnix}} +
    + {{svg "octicon-clock"}} + {{$.locale.Tr "repo.milestones.update_ago" (TimeSinceUnix .UpdatedUnix $.locale) | Safe}} +
    + {{end}} +
    + {{if .IsClosed}} + {{$closedDate:= TimeSinceUnix .ClosedDateUnix $.locale}} + {{svg "octicon-clock" 14}} + {{$.locale.Tr "repo.milestones.closed" $closedDate | Safe}} + {{else}} + {{if .DeadlineString}} + + {{svg "octicon-calendar" 14}} + {{DateTime "short" .DeadlineString}} + + {{else}} + {{svg "octicon-calendar" 14}} + {{$.locale.Tr "repo.milestones.no_due_date"}} + {{end}} + {{end}} +
    +
    + {{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}} + + {{end}} +
    + {{if .Content}} +
    + {{.RenderedContent|Str2html}} +
    + {{end}} +
  • + {{end}} + + {{template "base/paginate" .}} +
    + +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/dashboard/navbar.tmpl b/src/templates/user/dashboard/navbar.tmpl new file mode 100644 index 0000000..79212d8 --- /dev/null +++ b/src/templates/user/dashboard/navbar.tmpl @@ -0,0 +1,108 @@ +
    + +
    +
    diff --git a/src/templates/user/dashboard/repolist.tmpl b/src/templates/user/dashboard/repolist.tmpl new file mode 100644 index 0000000..44542d5 --- /dev/null +++ b/src/templates/user/dashboard/repolist.tmpl @@ -0,0 +1,59 @@ + + +
    diff --git a/src/templates/user/heatmap.tmpl b/src/templates/user/heatmap.tmpl new file mode 100644 index 0000000..b0ee0ee --- /dev/null +++ b/src/templates/user/heatmap.tmpl @@ -0,0 +1,14 @@ +{{if .HeatmapData}} +
    +
    +
    {{.locale.Tr "user.heatmap.loading"}}
    +
    +
    +
    +{{end}} diff --git a/src/templates/user/notification/notification.tmpl b/src/templates/user/notification/notification.tmpl new file mode 100644 index 0000000..b483c15 --- /dev/null +++ b/src/templates/user/notification/notification.tmpl @@ -0,0 +1,3 @@ +{{template "base/head" .}} +{{template "user/notification/notification_div" .}} +{{template "base/footer" .}} diff --git a/src/templates/user/notification/notification_div.tmpl b/src/templates/user/notification/notification_div.tmpl new file mode 100644 index 0000000..0b46e43 --- /dev/null +++ b/src/templates/user/notification/notification_div.tmpl @@ -0,0 +1,126 @@ +
    +
    + {{$notificationUnreadCount := call .NotificationUnreadCount}} +
    + + {{if and (eq .Status 1)}} +
    + {{$.CsrfTokenHtml}} +
    + +
    +
    + {{end}} +
    +
    +
    + {{if eq (len .Notifications) 0}} +
    + {{svg "octicon-inbox" 56 "gt-mb-4"}} + {{if eq .Status 1}} + {{.locale.Tr "notification.no_unread"}} + {{else}} + {{.locale.Tr "notification.no_read"}} + {{end}} +
    + {{else}} + {{$locale := .locale}} + {{range $notification := .Notifications}} +
    +
    + {{if .Issue}} + {{template "shared/issueicon" .Issue}} + {{else}} + {{svg "octicon-repo" 16 "text grey"}} + {{end}} +
    + +
    + {{.Repository.FullName}} {{if .Issue}}#{{.Issue.Index}}{{end}} + {{if eq .Status 3}} + {{svg "octicon-pin" 13 "text blue gt-mt-1 gt-ml-2"}} + {{end}} +
    +
    + + {{if .Issue}} + {{.Issue.Title | RenderEmoji $.Context | RenderCodeBlock}} + {{else}} + {{.Repository.FullName}} + {{end}} + +
    +
    +
    + {{if .Issue}} + {{TimeSinceUnix .Issue.UpdatedUnix $locale}} + {{else}} + {{TimeSinceUnix .UpdatedUnix $locale}} + {{end}} +
    +
    + {{if ne .Status 3}} +
    + {{$.CsrfTokenHtml}} + + + +
    + {{end}} + {{if or (eq .Status 1) (eq .Status 3)}} +
    + {{$.CsrfTokenHtml}} + + + + +
    + {{else if eq .Status 2}} +
    + {{$.CsrfTokenHtml}} + + + + +
    + {{end}} +
    +
    + {{end}} + {{end}} +
    +
    + {{template "base/paginate" .}} +
    +
    diff --git a/src/templates/user/notification/notification_subscriptions.tmpl b/src/templates/user/notification/notification_subscriptions.tmpl new file mode 100644 index 0000000..df69a4d --- /dev/null +++ b/src/templates/user/notification/notification_subscriptions.tmpl @@ -0,0 +1,79 @@ +{{template "base/head" .}} +
    +
    + +
    + {{if eq .Status 1}} + + {{if eq (len .Issues) 0}} +
    + {{.locale.Tr "notification.no_subscriptions"}} + {{else}} + {{template "shared/issuelist" dict "." . "listType" "dashboard"}} + {{end}} + {{else}} + {{template "explore/repo_search" .}} + {{template "explore/repo_list" .}} + {{template "base/paginate" .}} + {{end}} +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/overview/header.tmpl b/src/templates/user/overview/header.tmpl new file mode 100644 index 0000000..6016aca --- /dev/null +++ b/src/templates/user/overview/header.tmpl @@ -0,0 +1,92 @@ + +{{if or (.IsPackagesPage) (.PageIsViewProjects)}} + {{with .ContextUser}} +
    +
    +
    +
    + {{avatar $.Context . 100}} + {{.DisplayName}} + + {{if .Visibility.IsLimited}}
    {{$.locale.Tr "org.settings.visibility.limited_shortname"}}
    {{end}} + {{if .Visibility.IsPrivate}}
    {{$.locale.Tr "org.settings.visibility.private_shortname"}}
    {{end}} +
    +
    +
    +
    +
    + {{end}} +{{end}} + +
    + +
    diff --git a/src/templates/user/overview/package_versions.tmpl b/src/templates/user/overview/package_versions.tmpl new file mode 100644 index 0000000..0bab740 --- /dev/null +++ b/src/templates/user/overview/package_versions.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} + {{template "package/shared/versionlist" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/user/overview/packages.tmpl b/src/templates/user/overview/packages.tmpl new file mode 100644 index 0000000..8f8597c --- /dev/null +++ b/src/templates/user/overview/packages.tmpl @@ -0,0 +1,6 @@ +{{template "base/head" .}} +
    + {{template "user/overview/header" .}} + {{template "package/shared/list" .}} +
    +{{template "base/footer" .}} diff --git a/src/templates/user/profile.tmpl b/src/templates/user/profile.tmpl new file mode 100644 index 0000000..51d4a46 --- /dev/null +++ b/src/templates/user/profile.tmpl @@ -0,0 +1,159 @@ +{{template "base/head" .}} +
    +
    +
    +
    +
    + +
    + {{if .ContextUser.FullName}}{{.ContextUser.FullName}}{{end}} + {{.ContextUser.Name}} + {{if .EnableFeed}} + {{svg "octicon-rss" 18}} + {{end}} + +
    +
    +
      + {{if .ContextUser.Location}} +
    • {{svg "octicon-location"}} {{.ContextUser.Location}}
    • + {{end}} + {{if (eq .SignedUserID .ContextUser.ID)}} +
    • + {{svg "octicon-mail"}} + {{.ContextUser.Email}} + + {{if .ShowUserEmail}} + + {{svg "octicon-unlock"}} + + {{else}} + + {{svg "octicon-lock"}} + + {{end}} + +
    • + {{else}} + {{if .ShowUserEmail}} +
    • + {{svg "octicon-mail"}} + {{.ContextUser.Email}} +
    • + {{end}} + {{end}} + {{if .ContextUser.Website}} +
    • + {{svg "octicon-link"}} + {{.ContextUser.Website}} +
    • + {{end}} + {{if $.RenderedDescription}} +
    • +
      {{$.RenderedDescription|Str2html}}
      +
    • + {{end}} + {{range .OpenIDs}} + {{if .Show}} +
    • + {{svg "fontawesome-openid"}} + {{.URI}} +
    • + {{end}} + {{end}} +
    • {{svg "octicon-clock"}} {{.locale.Tr "user.joined_on" (DateTime "short" .ContextUser.CreatedUnix) | Safe}}
    • + {{if and .Orgs .HasOrgsVisible}} +
    • +
        + {{range .Orgs}} + {{if (or .Visibility.IsPublic (and ($.SignedUser) (or .Visibility.IsLimited (and (.HasMemberWithUserID $.SignedUserID) .Visibility.IsPrivate) ($.IsAdmin))))}} +
      • + + {{avatar $.Context .}} + +
      • + {{end}} + {{end}} +
      +
    • + {{end}} + {{if .Badges}} +
    • +
        + {{range .Badges}} +
      • + {{.Description}} +
      • + {{end}} +
      +
    • + {{end}} + {{if and .IsSigned (ne .SignedUserID .ContextUser.ID)}} + + {{end}} +
    +
    +
    +
    +
    +
    + {{template "user/overview/header" .}} +
    + + {{if eq .TabName "activity"}} + {{if .ContextUser.KeepActivityPrivate}} +
    +

    {{.locale.Tr "user.disabled_public_activity"}}

    +
    + {{end}} + {{template "user/heatmap" .}} +
    + {{template "user/dashboard/feeds" .}} +
    + {{else if eq .TabName "stars"}} +
    + {{template "explore/repo_search" .}} + {{template "explore/repo_list" .}} + {{template "base/paginate" .}} +
    + {{else if eq .TabName "following"}} + {{template "repo/user_cards" .}} + {{else if eq .TabName "followers"}} + {{template "repo/user_cards" .}} + {{else if or (eq .TabName "repositories") (not .ProfileReadme)}} + {{template "explore/repo_search" .}} + {{template "explore/repo_list" .}} + {{template "base/paginate" .}} + {{else if .ProfileReadme}} +
    {{$.ProfileReadme|Str2html}}
    + {{end}} +
    +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/settings/account.tmpl b/src/templates/user/settings/account.tmpl new file mode 100644 index 0000000..01f70e4 --- /dev/null +++ b/src/templates/user/settings/account.tmpl @@ -0,0 +1,186 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings account")}} +
    +

    + {{.locale.Tr "settings.password"}} +

    +
    + {{if or (.SignedUser.IsLocal) (.SignedUser.IsOAuth2)}} +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + {{if .SignedUser.IsPasswordSet}} +
    + + +
    + {{end}} +
    + + +
    +
    + + +
    + +
    + + {{.locale.Tr "auth.forgot_password"}} +
    +
    + {{else}} +
    +

    {{$.locale.Tr "settings.password_change_disabled"}}

    +
    + {{end}} +
    + +

    + {{.locale.Tr "settings.manage_emails"}} +

    +
    + +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    + {{/* if ActivationsPending is false, then CanAddEmails must be true, so if CanAddEmails is false, ActivationsPending must be true */}} + {{if not .CanAddEmails}} +
    {{.locale.Tr "settings.can_not_add_email_activations_pending"}}
    + {{end}} +
    + +

    + {{.locale.Tr "settings.delete_account"}} +

    +
    +
    +

    {{svg "octicon-alert"}} {{.locale.Tr "settings.delete_prompt" | Str2html}}

    + {{if .UserDeleteWithComments}} +

    {{.locale.Tr "settings.delete_with_all_comments" .UserDeleteWithCommentsMaxTime | Str2html}}

    + {{end}} +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    + + +
    +
    + + {{.locale.Tr "auth.forgot_password"}} +
    +
    +
    +
    + + + + + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/actions.tmpl b/src/templates/user/settings/actions.tmpl new file mode 100644 index 0000000..57cdae4 --- /dev/null +++ b/src/templates/user/settings/actions.tmpl @@ -0,0 +1,10 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings actions")}} +
    + {{if eq .PageType "secrets"}} + {{template "shared/secrets/add_list" .}} + {{else if eq .PageType "runners"}} + {{template "shared/actions/runner_list" .}} + {{end}} +
    + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/appearance.tmpl b/src/templates/user/settings/appearance.tmpl new file mode 100644 index 0000000..129fca2 --- /dev/null +++ b/src/templates/user/settings/appearance.tmpl @@ -0,0 +1,170 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings sshkeys")}} +
    + + +

    + {{.locale.Tr "settings.manage_themes"}} +

    +
    + +
    + + +

    + {{.locale.Tr "settings.language"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + +
    +
    + +
    +
    +
    + + +

    + {{.locale.Tr "settings.hidden_comment_types"}} +

    +
    +

    + {{.locale.Tr "settings.hidden_comment_types_description"}} +

    +
    + {{.CsrfTokenHtml}} +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/applications.tmpl b/src/templates/user/settings/applications.tmpl new file mode 100644 index 0000000..b889f9c --- /dev/null +++ b/src/templates/user/settings/applications.tmpl @@ -0,0 +1,110 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings applications")}} +
    +

    + {{.locale.Tr "settings.manage_access_token"}} +

    +
    +
    +
    + {{.locale.Tr "settings.tokens_desc"}} +
    + {{range .Tokens}} +
    +
    + +
    + {{svg "fontawesome-send" 36}} +
    +
    {{.Name}} +

    + {{$.locale.Tr "settings.repo_and_org_access"}}: + {{if .DisplayPublicOnly}} + {{$.locale.Tr "settings.permissions_public_only"}} + {{else}} + {{$.locale.Tr "settings.permissions_access_all"}} + {{end}} +

    +

    {{$.locale.Tr "settings.permissions_list"}}

    +
      + {{range .Scope.StringSlice}} + {{if (ne . $.AccessTokenScopePublicOnly)}} +
    • {{.}}
    • + {{end}} + {{end}} +
    +
    +
    + {{$.locale.Tr "settings.added_on" (DateTime "short" .CreatedUnix) | Safe}} — {{svg "octicon-info"}} {{if .HasUsed}}{{$.locale.Tr "settings.last_used"}} {{DateTime "short" .UpdatedUnix}}{{else}}{{$.locale.Tr "settings.no_activity"}}{{end}} +
    +
    +
    + {{end}} +
    +
    +
    +
    + {{.locale.Tr "settings.generate_new_token"}} +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + + +
    +
    + + {{.locale.Tr "settings.select_permissions"}} + +

    + {{$.locale.Tr "settings.access_token_desc" (printf `href="/api/swagger" target="_blank"`) (printf `href="https://docs.gitea.com/development/oauth2-provider#scopes" target="_blank"`) | Str2html}} +

    +
    + +
    +
    +
    + {{.locale.Tr "settings.at_least_one_permission"}} +
    + +
    +
    + + {{if .EnableOAuth2}} + {{template "user/settings/grants_oauth2" .}} + {{template "user/settings/applications_oauth2" .}} + {{end}} +
    + + + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/applications_oauth2.tmpl b/src/templates/user/settings/applications_oauth2.tmpl new file mode 100644 index 0000000..47d8dfc --- /dev/null +++ b/src/templates/user/settings/applications_oauth2.tmpl @@ -0,0 +1,6 @@ +

    + {{.locale.Tr "settings.manage_oauth2_applications"}} +

    + +{{template "user/settings/applications_oauth2_list" .}} + diff --git a/src/templates/user/settings/applications_oauth2_edit.tmpl b/src/templates/user/settings/applications_oauth2_edit.tmpl new file mode 100644 index 0000000..2858ecd --- /dev/null +++ b/src/templates/user/settings/applications_oauth2_edit.tmpl @@ -0,0 +1,6 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings applications")}} +
    + + {{template "user/settings/applications_oauth2_edit_form" .}} +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/applications_oauth2_edit_form.tmpl b/src/templates/user/settings/applications_oauth2_edit_form.tmpl new file mode 100644 index 0000000..74a0e13 --- /dev/null +++ b/src/templates/user/settings/applications_oauth2_edit_form.tmpl @@ -0,0 +1,52 @@ +

    + {{.locale.Tr "settings.edit_oauth2_application"}} +

    +
    +

    {{.locale.Tr "settings.oauth2_application_create_description"}}

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{if .ClientSecret}} +
    + + +
    + {{else}} +
    + + +
    + {{end}} +
    + +
    + {{.CsrfTokenHtml}} + {{.locale.Tr "settings.oauth2_regenerate_secret_hint"}} + +
    +
    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    diff --git a/src/templates/user/settings/applications_oauth2_list.tmpl b/src/templates/user/settings/applications_oauth2_list.tmpl new file mode 100644 index 0000000..e18c7f5 --- /dev/null +++ b/src/templates/user/settings/applications_oauth2_list.tmpl @@ -0,0 +1,59 @@ +
    +
    +
    + {{.locale.Tr "settings.oauth2_application_create_description"}} +
    + {{range $app := .Applications}} +
    +
    + + {{svg "octicon-pencil" 16 "gt-mr-2"}} + {{$.locale.Tr "settings.oauth2_application_edit"}} + + +
    +
    + {{$app.Name}} +
    +
    + {{end}} +
    +
    +
    +
    + {{.locale.Tr "settings.create_oauth2_application"}} +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    + + diff --git a/src/templates/user/settings/grants_oauth2.tmpl b/src/templates/user/settings/grants_oauth2.tmpl new file mode 100644 index 0000000..8dd9ca2 --- /dev/null +++ b/src/templates/user/settings/grants_oauth2.tmpl @@ -0,0 +1,40 @@ +

    + {{.locale.Tr "settings.authorized_oauth2_applications"}} +

    +
    +
    +
    + {{.locale.Tr "settings.authorized_oauth2_applications_description"}} +
    + {{range $grant := .Grants}} +
    +
    + +
    +
    + {{svg "octicon-key"}} +
    +
    + {{$grant.Application.Name}} +
    + {{$.locale.Tr "settings.added_on" (DateTime "short" $grant.CreatedUnix) | Safe}} +
    +
    +
    + {{end}} +
    +
    + + diff --git a/src/templates/user/settings/hook_new.tmpl b/src/templates/user/settings/hook_new.tmpl new file mode 100644 index 0000000..ac32cdd --- /dev/null +++ b/src/templates/user/settings/hook_new.tmpl @@ -0,0 +1,49 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings new webhook")}} +
    +
    +

    + {{if .PageIsSettingsHooksNew}}{{.locale.Tr "repo.settings.add_webhook"}}{{else}}{{.locale.Tr "repo.settings.update_webhook"}}{{end}} +
    + {{if eq .HookType "gitea"}} + + {{else if eq .HookType "gogs"}} + + {{else if eq .HookType "slack"}} + + {{else if eq .HookType "discord"}} + + {{else if eq .HookType "dingtalk"}} + + {{else if eq .HookType "telegram"}} + + {{else if eq .HookType "msteams"}} + + {{else if eq .HookType "feishu"}} + + {{else if eq .HookType "matrix"}} + + {{else if eq .HookType "wechatwork"}} + + {{else if eq .HookType "packagist"}} + + {{end}} +
    +

    +
    + {{template "repo/settings/webhook/gitea" .}} + {{template "repo/settings/webhook/gogs" .}} + {{template "repo/settings/webhook/slack" .}} + {{template "repo/settings/webhook/discord" .}} + {{template "repo/settings/webhook/dingtalk" .}} + {{template "repo/settings/webhook/telegram" .}} + {{template "repo/settings/webhook/msteams" .}} + {{template "repo/settings/webhook/feishu" .}} + {{template "repo/settings/webhook/matrix" .}} + {{template "repo/settings/webhook/wechatwork" .}} + {{template "repo/settings/webhook/packagist" .}} +
    + + {{template "repo/settings/webhook/history" .}} +
    +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/hooks.tmpl b/src/templates/user/settings/hooks.tmpl new file mode 100644 index 0000000..477c333 --- /dev/null +++ b/src/templates/user/settings/hooks.tmpl @@ -0,0 +1,5 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings webhooks")}} +
    + {{template "repo/settings/webhook/list" .}} +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/keys.tmpl b/src/templates/user/settings/keys.tmpl new file mode 100644 index 0000000..93037e7 --- /dev/null +++ b/src/templates/user/settings/keys.tmpl @@ -0,0 +1,7 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings sshkeys")}} +
    + {{template "user/settings/keys_ssh" .}} + {{template "user/settings/keys_principal" .}} + {{template "user/settings/keys_gpg" .}} +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/keys_gpg.tmpl b/src/templates/user/settings/keys_gpg.tmpl new file mode 100644 index 0000000..f442e8b --- /dev/null +++ b/src/templates/user/settings/keys_gpg.tmpl @@ -0,0 +1,123 @@ +

    + {{.locale.Tr "settings.manage_gpg_keys"}} +
    + +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} + +
    + + +
    + {{if .Err_Signature}} +
    +

    {{.locale.Tr "settings.gpg_token_required"}}

    +
    +
    +
    +
    + + +
    + {{end}} + + + +
    +
    +
    +
    + {{.locale.Tr "settings.gpg_desc"}} +
    + {{range .GPGKeys}} +
    +
    + + {{if and (not .Verified) (ne $.VerifyingID .KeyID)}} + {{$.locale.Tr "settings.gpg_key_verify"}} + {{end}} +
    +
    + {{svg "octicon-key" 32}} +
    +
    + {{if .Verified}} + {{svg "octicon-verified"}} {{$.locale.Tr "settings.gpg_key_verified"}} + {{end}} + {{if gt (len .Emails) 0}} + {{svg "octicon-mail"}} {{$.locale.Tr "settings.gpg_key_matched_identities"}} {{range .Emails}}{{.Email}} {{end}} + {{end}} +
    + {{$.locale.Tr "settings.key_id"}}: {{.PaddedKeyID}} + {{$.locale.Tr "settings.subkeys"}}: {{range .SubsKey}} {{.PaddedKeyID}} {{end}} +
    +
    + {{$.locale.Tr "settings.added_on" (DateTime "short" .AddedUnix) | Safe}} + - + {{if not .ExpiredUnix.IsZero}}{{$.locale.Tr "settings.valid_until_date" (DateTime "short" .ExpiredUnix) | Safe}}{{else}}{{$.locale.Tr "settings.valid_forever"}}{{end}} +
    +
    +
    + {{if and (not .Verified) (eq $.VerifyingID .KeyID)}} +
    +

    {{$.locale.Tr "settings.gpg_token_required"}}

    +
    + {{$.CsrfTokenHtml}} + + + +
    + + +
    +

    {{$.locale.Tr "settings.gpg_token_help"}}

    +

    {{$.locale.Tr "settings.gpg_token_code" $.TokenToSign .PaddedKeyID}}

    +
    +
    +
    +
    + + +
    + + + + {{$.locale.Tr "settings.cancel"}} + +
    +
    + {{end}} + {{end}} +
    +
    +
    +

    {{.locale.Tr "settings.gpg_helper" "https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/about-commit-signature-verification#gpg-commit-signature-verification" | Str2html}}

    + + diff --git a/src/templates/user/settings/keys_principal.tmpl b/src/templates/user/settings/keys_principal.tmpl new file mode 100644 index 0000000..7dda666 --- /dev/null +++ b/src/templates/user/settings/keys_principal.tmpl @@ -0,0 +1,67 @@ +{{if .AllowPrincipals}} +

    + {{.locale.Tr "settings.manage_ssh_principals"}} +
    + {{if not .DisableSSH}} + + {{else}} + + {{end}} +
    +

    +
    +
    +
    + {{.locale.Tr "settings.principal_desc"}} +
    + {{range .Principals}} +
    +
    + +
    + {{svg "octicon-key" 36}} +
    + {{.Name}} +
    + {{$.locale.Tr "settings.added_on" (DateTime "short" .CreatedUnix) | Safe}} — {{svg "octicon-info" 16}} {{if .HasUsed}}{{$.locale.Tr "settings.last_used"}} {{DateTime "short" .UpdatedUnix}}{{else}}{{$.locale.Tr "settings.no_activity"}}{{end}} +
    +
    +
    + {{end}} +
    +
    +
    + +
    +

    + {{.locale.Tr "settings.add_new_principal"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + + + +
    +
    +
    + + +{{end}} diff --git a/src/templates/user/settings/keys_ssh.tmpl b/src/templates/user/settings/keys_ssh.tmpl new file mode 100644 index 0000000..0a47c44 --- /dev/null +++ b/src/templates/user/settings/keys_ssh.tmpl @@ -0,0 +1,112 @@ +

    + {{.locale.Tr "settings.manage_ssh_keys"}} +
    + +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + + + +
    +
    +
    +
    + {{.locale.Tr "settings.ssh_desc"}} +
    + {{if .DisableSSH}} +
    + {{.locale.Tr "settings.ssh_signonly"}} +
    + {{end}} + {{range $index, $key := .Keys}} +
    +
    + + {{if and (not .Verified) (ne $.VerifyingFingerprint .Fingerprint)}} + {{$.locale.Tr "settings.ssh_key_verify"}} + {{end}} + +
    +
    + {{svg "octicon-key" 32}} +
    +
    + {{if .Verified}} + {{svg "octicon-verified"}} {{$.locale.Tr "settings.ssh_key_verified"}} + {{end}} + {{.Name}} +
    + {{.Fingerprint}} +
    +
    + {{$.locale.Tr "settings.added_on" (DateTime "short" .CreatedUnix) | Safe}} — {{svg "octicon-info"}} {{if .HasUsed}}{{$.locale.Tr "settings.last_used"}} {{DateTime "short" .UpdatedUnix}}{{else}}{{$.locale.Tr "settings.no_activity"}}{{end}} +
    +
    +
    + {{if and (not .Verified) (eq $.VerifyingFingerprint .Fingerprint)}} +
    +

    {{$.locale.Tr "settings.ssh_token_required"}}

    +
    + {{$.CsrfTokenHtml}} + + + +
    + + +
    +

    {{$.locale.Tr "settings.ssh_token_help"}}

    +

    {{printf "echo -n '%s' | ssh-keygen -Y sign -n gitea -f /path_to_your_privkey" $.TokenToSign}}

    +
    +
    +
    +
    + + +
    + + + + {{$.locale.Tr "settings.cancel"}} + +
    +
    + {{end}} + {{end}} +
    +
    +
    +

    {{.locale.Tr "settings.ssh_helper" "https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh" "https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/troubleshooting-ssh" | Str2html}}

    + + diff --git a/src/templates/user/settings/layout_footer.tmpl b/src/templates/user/settings/layout_footer.tmpl new file mode 100644 index 0000000..46120d5 --- /dev/null +++ b/src/templates/user/settings/layout_footer.tmpl @@ -0,0 +1,11 @@ +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    + {{/* block: user-setting-content */}} +{{end}} + +
    +
    +
    +{{template "base/footer" .}} diff --git a/src/templates/user/settings/layout_head.tmpl b/src/templates/user/settings/layout_head.tmpl new file mode 100644 index 0000000..26d1653 --- /dev/null +++ b/src/templates/user/settings/layout_head.tmpl @@ -0,0 +1,13 @@ +{{template "base/head" .ctxData}} +
    +
    + {{template "user/settings/navbar" .ctxData}} +
    + {{template "base/alert" .ctxData}} + {{/* block: user-setting-content */}} + +{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}} +
    +
    +
    +{{end}} diff --git a/src/templates/user/settings/navbar.tmpl b/src/templates/user/settings/navbar.tmpl new file mode 100644 index 0000000..4ef2abe --- /dev/null +++ b/src/templates/user/settings/navbar.tmpl @@ -0,0 +1,52 @@ + diff --git a/src/templates/user/settings/organization.tmpl b/src/templates/user/settings/organization.tmpl new file mode 100644 index 0000000..9b6d0f6 --- /dev/null +++ b/src/templates/user/settings/organization.tmpl @@ -0,0 +1,50 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings organization")}} +
    +

    + {{.locale.Tr "settings.orgs"}} + {{if .SignedUser.CanCreateOrganization}} + + {{end}} +

    +
    + {{if .Orgs}} +
    + {{range .Orgs}} +
    +
    +
    + {{$.CsrfTokenHtml}} + +
    +
    +
    + {{avatar $.Context . 28 "mini"}} + {{.Name}} +
    +
    + {{end}} +
    + {{template "base/paginate" .}} + {{else}} + {{.locale.Tr "settings.orgs_none"}} + {{end}} +
    +
    + + + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/packages.tmpl b/src/templates/user/settings/packages.tmpl new file mode 100644 index 0000000..4f70b9e --- /dev/null +++ b/src/templates/user/settings/packages.tmpl @@ -0,0 +1,25 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings packages")}} +
    + {{template "package/shared/cleanup_rules/list" .}} + {{template "package/shared/cargo" .}} + +

    + {{.locale.Tr "packages.owner.settings.chef.title"}} +

    +
    +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + +
    +
    +
    +
    +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/packages_cleanup_rules_edit.tmpl b/src/templates/user/settings/packages_cleanup_rules_edit.tmpl new file mode 100644 index 0000000..522b524 --- /dev/null +++ b/src/templates/user/settings/packages_cleanup_rules_edit.tmpl @@ -0,0 +1,5 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings packages")}} +
    + {{template "package/shared/cleanup_rules/edit" .}} +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/packages_cleanup_rules_preview.tmpl b/src/templates/user/settings/packages_cleanup_rules_preview.tmpl new file mode 100644 index 0000000..d99aee4 --- /dev/null +++ b/src/templates/user/settings/packages_cleanup_rules_preview.tmpl @@ -0,0 +1,5 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user packages admin")}} +
    + {{template "package/shared/cleanup_rules/preview" .}} +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/profile.tmpl b/src/templates/user/settings/profile.tmpl new file mode 100644 index 0000000..a581b13 --- /dev/null +++ b/src/templates/user/settings/profile.tmpl @@ -0,0 +1,133 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings profile")}} +
    +

    + {{.locale.Tr "settings.public_profile"}} +

    +
    +

    {{.locale.Tr "settings.profile_desc"}}

    +
    + {{.CsrfTokenHtml}} +
    + + + {{if or (not .SignedUser.IsLocal) .IsReverseProxy}} +

    {{$.locale.Tr "settings.password_username_disabled"}}

    + {{end}} +
    +
    + + +
    +
    + +

    {{.SignedUser.Email}}

    +
    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    + + +
    + +
    + +
    + + +
    + +
    +
    + + +
    +
    + +
    + +
    + +
    +
    +
    + +

    + {{.locale.Tr "settings.avatar"}} +

    +
    +
    + {{.CsrfTokenHtml}} + {{if not (DisableGravatar $.Context)}} +
    +
    + + +
    +
    +
    + + +
    + {{end}} + +
    +
    + + +
    +
    + +
    + + +
    + +
    + + +
    +
    +
    +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/repos.tmpl b/src/templates/user/settings/repos.tmpl new file mode 100644 index 0000000..4738f5b --- /dev/null +++ b/src/templates/user/settings/repos.tmpl @@ -0,0 +1,130 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings repos")}} +
    +

    + {{.locale.Tr "settings.repos"}} +

    +
    + {{if or .allowAdopt .allowDelete}} + {{if .Dirs}} +
    + {{range $dirI, $dir := .Dirs}} + {{$repo := index $.ReposMap $dir}} +
    {{/* if not repo, then there are "adapt" buttons, so the padding shouldn't be that default large*/}} +
    + {{if $repo}} + {{if $repo.IsPrivate}} + {{svg "octicon-lock"}} + {{else if $repo.IsFork}} + {{svg "octicon-repo-forked"}} + {{else if $repo.IsMirror}} + {{svg "octicon-mirror"}} + {{else if $repo.IsTemplate}} + {{svg "octicon-repo-template"}} + {{else}} + {{svg "octicon-repo"}} + {{end}} + {{$repo.OwnerName}}/{{$repo.Name}} + {{FileSize $repo.Size}} + {{if $repo.IsFork}} + {{$.locale.Tr "repo.forked_from"}} + {{$repo.BaseRepo.OwnerName}}/{{$repo.BaseRepo.Name}} + {{end}} + {{else}} + {{svg "octicon-file-directory-fill"}} + {{$.ContextUser.Name}}/{{$dir}} +
    + {{if $.allowAdopt}} + + + {{end}} + {{if $.allowDelete}} + + + {{end}} +
    + {{end}} +
    +
    + {{end}} +
    + {{template "base/paginate" .}} + {{else}} +
    + {{.locale.Tr "settings.repos_none"}} +
    + {{end}} + {{else}} + {{if .Repos}} +
    + {{range .Repos}} +
    +
    + {{if .IsPrivate}} + {{svg "octicon-lock" 16 "gt-mr-2 iconFloat text gold"}} + {{else if .IsFork}} + {{svg "octicon-repo-forked" 16 "gt-mr-2 iconFloat"}} + {{else if .IsMirror}} + {{svg "octicon-mirror" 16 "gt-mr-2 iconFloat"}} + {{else if .IsTemplate}} + {{svg "octicon-repo-template" 16 "gt-mr-2 iconFloat"}} + {{else}} + {{svg "octicon-repo" 16 "gt-mr-2 iconFloat"}} + {{end}} + {{.OwnerName}}/{{.Name}} + {{FileSize .Size}} + {{if .IsFork}} + {{$.locale.Tr "repo.forked_from"}} + {{.BaseRepo.OwnerName}}/{{.BaseRepo.Name}} + {{end}} +
    +
    + {{end}} +
    + {{template "base/paginate" .}} + {{else}} +
    + {{.locale.Tr "settings.repos_none"}} +
    + {{end}} + {{end}} +
    +
    + + + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/runner_edit.tmpl b/src/templates/user/settings/runner_edit.tmpl new file mode 100644 index 0000000..90c58c1 --- /dev/null +++ b/src/templates/user/settings/runner_edit.tmpl @@ -0,0 +1,5 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings runners")}} +
    + {{template "shared/actions/runner_edit" .}} +
    +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/security/accountlinks.tmpl b/src/templates/user/settings/security/accountlinks.tmpl new file mode 100644 index 0000000..bcf432f --- /dev/null +++ b/src/templates/user/settings/security/accountlinks.tmpl @@ -0,0 +1,53 @@ +

    + {{.locale.Tr "settings.manage_account_links"}} + {{if .OrderedOAuth2Names}} +
    + +
    + {{end}} +

    + +
    +
    +
    + {{.locale.Tr "settings.manage_account_links_desc"}} +
    + {{if .AccountLinks}} + {{range $loginSource, $provider := .AccountLinks}} +
    +
    + + {{$loginSource.Name}} + {{if $loginSource.IsActive}}{{$.locale.Tr "repo.settings.active"}}{{end}} + +
    + +
    + {{end}} + {{end}} +
    +
    + + diff --git a/src/templates/user/settings/security/openid.tmpl b/src/templates/user/settings/security/openid.tmpl new file mode 100644 index 0000000..2719b3b --- /dev/null +++ b/src/templates/user/settings/security/openid.tmpl @@ -0,0 +1,63 @@ +

    + {{.locale.Tr "settings.manage_openid"}} +

    +
    +
    +
    + {{.locale.Tr "settings.openid_desc"}} +
    + {{range .OpenIDs}} +
    +
    + +
    +
    +
    + {{$.CsrfTokenHtml}} + + {{if .Show}} + + {{else}} + + {{end}} + +
    +
    +
    + {{.URI}} +
    +
    + {{end}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    +
    + + diff --git a/src/templates/user/settings/security/security.tmpl b/src/templates/user/settings/security/security.tmpl new file mode 100644 index 0000000..aee0456 --- /dev/null +++ b/src/templates/user/settings/security/security.tmpl @@ -0,0 +1,11 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings security")}} +
    + {{template "user/settings/security/twofa" .}} + {{template "user/settings/security/webauthn" .}} + {{template "user/settings/security/accountlinks" .}} + {{if .EnableOpenIDSignIn}} + {{template "user/settings/security/openid" .}} + {{end}} +
    + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/security/twofa.tmpl b/src/templates/user/settings/security/twofa.tmpl new file mode 100644 index 0000000..43f324f --- /dev/null +++ b/src/templates/user/settings/security/twofa.tmpl @@ -0,0 +1,35 @@ +

    + {{.locale.Tr "settings.twofa"}} +

    +
    +

    {{.locale.Tr "settings.twofa_desc"}}

    + {{if .TOTPEnrolled}} +

    {{$.locale.Tr "settings.twofa_is_enrolled" | Str2html}}

    +
    + {{.CsrfTokenHtml}} +

    {{.locale.Tr "settings.regenerate_scratch_token_desc"}}

    + +
    +
    + {{.CsrfTokenHtml}} +

    {{.locale.Tr "settings.twofa_disable_note"}}

    + +
    + {{else}} +

    {{.locale.Tr "settings.twofa_not_enrolled"}}

    + + {{end}} +
    + + diff --git a/src/templates/user/settings/security/twofa_enroll.tmpl b/src/templates/user/settings/security/twofa_enroll.tmpl new file mode 100644 index 0000000..0ff0beb --- /dev/null +++ b/src/templates/user/settings/security/twofa_enroll.tmpl @@ -0,0 +1,25 @@ +{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings twofa")}} +
    +

    + {{.locale.Tr "settings.twofa_enroll"}} +

    +
    +

    {{.locale.Tr "settings.scan_this_image"}}

    + {{.TwofaSecret}} +

    {{.locale.Tr "settings.or_enter_secret" .TwofaSecret}} +

    {{.locale.Tr "settings.then_enter_passcode"}} +

    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    +
    +
    + +{{template "user/settings/layout_footer" .}} diff --git a/src/templates/user/settings/security/webauthn.tmpl b/src/templates/user/settings/security/webauthn.tmpl new file mode 100644 index 0000000..ec1df7c --- /dev/null +++ b/src/templates/user/settings/security/webauthn.tmpl @@ -0,0 +1,38 @@ +

    {{.locale.Tr "settings.webauthn"}}

    +
    +

    {{.locale.Tr "settings.webauthn_desc" | Str2html}}

    + {{template "user/auth/webauthn_error" .}} +
    + {{range .WebAuthnCredentials}} +
    +
    + +
    +
    + {{.Name}} +
    + {{TimeSinceUnix .CreatedUnix $.locale}} +
    + {{end}} +
    +
    +
    + + +
    + +
    +
    + + diff --git a/src/themes/fonts/KaTeX_AMS-Regular.73ea273a.woff2 b/src/themes/fonts/KaTeX_AMS-Regular.73ea273a.woff2 new file mode 100644 index 0000000..0acaaff Binary files /dev/null and b/src/themes/fonts/KaTeX_AMS-Regular.73ea273a.woff2 differ diff --git a/src/themes/fonts/KaTeX_Caligraphic-Bold.a1abf90d.woff2 b/src/themes/fonts/KaTeX_Caligraphic-Bold.a1abf90d.woff2 new file mode 100644 index 0000000..f390922 Binary files /dev/null and b/src/themes/fonts/KaTeX_Caligraphic-Bold.a1abf90d.woff2 differ diff --git a/src/themes/fonts/KaTeX_Caligraphic-Regular.d6484fce.woff2 b/src/themes/fonts/KaTeX_Caligraphic-Regular.d6484fce.woff2 new file mode 100644 index 0000000..75344a1 Binary files /dev/null and b/src/themes/fonts/KaTeX_Caligraphic-Regular.d6484fce.woff2 differ diff --git a/src/themes/fonts/KaTeX_Fraktur-Bold.931d67ea.woff2 b/src/themes/fonts/KaTeX_Fraktur-Bold.931d67ea.woff2 new file mode 100644 index 0000000..395f28b Binary files /dev/null and b/src/themes/fonts/KaTeX_Fraktur-Bold.931d67ea.woff2 differ diff --git a/src/themes/fonts/KaTeX_Fraktur-Regular.172d3529.woff2 b/src/themes/fonts/KaTeX_Fraktur-Regular.172d3529.woff2 new file mode 100644 index 0000000..735f694 Binary files /dev/null and b/src/themes/fonts/KaTeX_Fraktur-Regular.172d3529.woff2 differ diff --git a/src/themes/fonts/KaTeX_Main-Bold.39890742.woff2 b/src/themes/fonts/KaTeX_Main-Bold.39890742.woff2 new file mode 100644 index 0000000..ab2ad21 Binary files /dev/null and b/src/themes/fonts/KaTeX_Main-Bold.39890742.woff2 differ diff --git a/src/themes/fonts/KaTeX_Main-BoldItalic.20f389c4.woff2 b/src/themes/fonts/KaTeX_Main-BoldItalic.20f389c4.woff2 new file mode 100644 index 0000000..5931794 Binary files /dev/null and b/src/themes/fonts/KaTeX_Main-BoldItalic.20f389c4.woff2 differ diff --git a/src/themes/fonts/KaTeX_Main-Italic.fe2176f7.woff2 b/src/themes/fonts/KaTeX_Main-Italic.fe2176f7.woff2 new file mode 100644 index 0000000..b50920e Binary files /dev/null and b/src/themes/fonts/KaTeX_Main-Italic.fe2176f7.woff2 differ diff --git a/src/themes/fonts/KaTeX_Main-Regular.f650f111.woff2 b/src/themes/fonts/KaTeX_Main-Regular.f650f111.woff2 new file mode 100644 index 0000000..eb24a7b Binary files /dev/null and b/src/themes/fonts/KaTeX_Main-Regular.f650f111.woff2 differ diff --git a/src/themes/fonts/KaTeX_Math-BoldItalic.dcbcbd93.woff2 b/src/themes/fonts/KaTeX_Math-BoldItalic.dcbcbd93.woff2 new file mode 100644 index 0000000..2965702 Binary files /dev/null and b/src/themes/fonts/KaTeX_Math-BoldItalic.dcbcbd93.woff2 differ diff --git a/src/themes/fonts/KaTeX_Math-Italic.6d3d25f4.woff2 b/src/themes/fonts/KaTeX_Math-Italic.6d3d25f4.woff2 new file mode 100644 index 0000000..215c143 Binary files /dev/null and b/src/themes/fonts/KaTeX_Math-Italic.6d3d25f4.woff2 differ diff --git a/src/themes/fonts/KaTeX_SansSerif-Bold.95591a92.woff2 b/src/themes/fonts/KaTeX_SansSerif-Bold.95591a92.woff2 new file mode 100644 index 0000000..cfaa3bd Binary files /dev/null and b/src/themes/fonts/KaTeX_SansSerif-Bold.95591a92.woff2 differ diff --git a/src/themes/fonts/KaTeX_SansSerif-Italic.7d393d38.woff2 b/src/themes/fonts/KaTeX_SansSerif-Italic.7d393d38.woff2 new file mode 100644 index 0000000..349c06d Binary files /dev/null and b/src/themes/fonts/KaTeX_SansSerif-Italic.7d393d38.woff2 differ diff --git a/src/themes/fonts/KaTeX_SansSerif-Regular.cd5e231e.woff2 b/src/themes/fonts/KaTeX_SansSerif-Regular.cd5e231e.woff2 new file mode 100644 index 0000000..a90eea8 Binary files /dev/null and b/src/themes/fonts/KaTeX_SansSerif-Regular.cd5e231e.woff2 differ diff --git a/src/themes/fonts/KaTeX_Script-Regular.c81d1b2a.woff2 b/src/themes/fonts/KaTeX_Script-Regular.c81d1b2a.woff2 new file mode 100644 index 0000000..b3048fc Binary files /dev/null and b/src/themes/fonts/KaTeX_Script-Regular.c81d1b2a.woff2 differ diff --git a/src/themes/fonts/KaTeX_Size1-Regular.6eec866c.woff2 b/src/themes/fonts/KaTeX_Size1-Regular.6eec866c.woff2 new file mode 100644 index 0000000..c5a8462 Binary files /dev/null and b/src/themes/fonts/KaTeX_Size1-Regular.6eec866c.woff2 differ diff --git a/src/themes/fonts/KaTeX_Size2-Regular.2960900c.woff2 b/src/themes/fonts/KaTeX_Size2-Regular.2960900c.woff2 new file mode 100644 index 0000000..e1bccfe Binary files /dev/null and b/src/themes/fonts/KaTeX_Size2-Regular.2960900c.woff2 differ diff --git a/src/themes/fonts/KaTeX_Size3-Regular.e1951519.woff2 b/src/themes/fonts/KaTeX_Size3-Regular.e1951519.woff2 new file mode 100644 index 0000000..249a286 Binary files /dev/null and b/src/themes/fonts/KaTeX_Size3-Regular.e1951519.woff2 differ diff --git a/src/themes/fonts/KaTeX_Size4-Regular.e418bf25.woff2 b/src/themes/fonts/KaTeX_Size4-Regular.e418bf25.woff2 new file mode 100644 index 0000000..680c130 Binary files /dev/null and b/src/themes/fonts/KaTeX_Size4-Regular.e418bf25.woff2 differ diff --git a/src/themes/fonts/KaTeX_Typewriter-Regular.c295e7f7.woff2 b/src/themes/fonts/KaTeX_Typewriter-Regular.c295e7f7.woff2 new file mode 100644 index 0000000..771f1af Binary files /dev/null and b/src/themes/fonts/KaTeX_Typewriter-Regular.c295e7f7.woff2 differ diff --git a/src/themes/fonts/codicon.4a477f66.ttf b/src/themes/fonts/codicon.4a477f66.ttf new file mode 100644 index 0000000..c4a33a4 Binary files /dev/null and b/src/themes/fonts/codicon.4a477f66.ttf differ diff --git a/src/themes/img/favicon.svg b/src/themes/img/favicon.svg new file mode 100644 index 0000000..d791256 --- /dev/null +++ b/src/themes/img/favicon.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/themes/img/loading.svg b/src/themes/img/loading.svg new file mode 100644 index 0000000..52bfa69 --- /dev/null +++ b/src/themes/img/loading.svg @@ -0,0 +1,15 @@ + + + + + + + diff --git a/src/themes/img/logo.svg b/src/themes/img/logo.svg new file mode 100644 index 0000000..bb8b597 --- /dev/null +++ b/src/themes/img/logo.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/themes/scss/dark.scss b/src/themes/scss/dark.scss new file mode 100644 index 0000000..e8e1439 --- /dev/null +++ b/src/themes/scss/dark.scss @@ -0,0 +1,66 @@ +@use '@lucas-labs/lui-micro' as lui; +@use './utils/color-utils' as c; +@use './gitea'; + +$is-dark: true; + +$colors: ( + theme: ( + 'rosewater': c.variants(#f5e0dc, $is-dark, $dark: false), + 'flamingo': c.variants(#f2cdcd, $is-dark, $dark: false), + 'pink': c.variants(#f5c2e7, $is-dark, $dark: false), + 'mauve': c.variants(#cba6f7, $is-dark, $dark: false), + 'red': c.variants(#f38ba8, $is-dark, $dark: false), + 'maroon': c.variants(#eba0ac, $is-dark, $dark: false), + 'peach': c.variants(#fab387, $is-dark, $dark: false), + 'yellow': c.variants(#f9e2af, $is-dark, $dark: false), + 'green': c.variants(#a6e3a1, $is-dark, $dark: false), + 'teal': c.variants(#94e2d5, $is-dark, $dark: false), + 'sky': c.variants(#89dceb, $is-dark, $dark: false), + 'sapphire': c.variants(#74c7ec, $is-dark, $dark: false), + 'blue': c.variants(#89b4fa, $is-dark, $dark: false), + 'lavender': c.variants(#b4befe, $is-dark, $dark: false), + 'black': c.variants(#181825, $is-dark, $dark: false), + 'white': c.variants(#cdd6f4, $is-dark, $dark: false), + ), + text: #cdd6f4, + primary: c.variants(#cba6f7, $is-dark), + secondary: c.variants(#313244, $is-dark), + elevation: ( + '1': #11111b, // crust + '2': #181825, // mantle + '3': #1e1e2e, // base + '4': #313244, // surface0 + '5': #45475a, // surface1 + '6': #585b70, // surface2 + '7': #6c7086, // overlay0 + '8': #7f849c, // overlay1 + '9': #9399b2, // overlay2 + '10': #a6adc8, // subtext0 + '11': #bac2de, // subtext1 + '12': #cdd6f4, // text + ) +); + +// init lui-micro, css-vars only (no reboot, no basic) +@include lui.init( + $theme: ( + colors: $colors, + variables: ( + 'base-font-size': 16px, + 'font-family': 'Inter, Roboto, sans-serif', + 'code-font-family': '"Source Code Pro", "Roboto Mono", Consolas, monospace', + ), + ), + + $options: ( + reboot: false, + basic: false, + fg-var-name: 'text', + bg-var-name: 'elevation/1', + ), +); + +@include gitea.make-theme( + $is-dark: $is-dark, +); \ No newline at end of file diff --git a/src/themes/scss/gitea/index.scss b/src/themes/scss/gitea/index.scss new file mode 100644 index 0000000..51bbc68 --- /dev/null +++ b/src/themes/scss/gitea/index.scss @@ -0,0 +1,295 @@ +@use '@lucas-labs/lui-micro/color' as color; +@use './modules/chroma' as chroma; +@use './modules/codemirror' as codemirror; + +@use '@lucas-labs/lui-micro/var' as var; + +@mixin make-theme($is-dark: true) { + $lvl1: if($is-dark, #{color.get('elevation/1')}, #{color.get('elevation/3')}); + $lvl1-rgb: if($is-dark, #{color.get('elevation/1', 'rgb')}, #{color.get('elevation/3', 'rgb')}); + $lvl2: #{color.get('elevation/2')}; + $lvl2-rgb: #{color.get('elevation/2', 'rgb')}; + $lvl3: if($is-dark, #{color.get('elevation/3')}, #{color.get('elevation/1')}); + $lvl3-rgb: if($is-dark, #{color.get('elevation/3', 'rgb')}, #{color.get('elevation/1', 'rgb')}); + + :root { + * { + --fonts-regular: #{var.get('font-family')}; + --fonts-monospace: #{var.get('code-font-family')}; + } + + @if $is-dark { + color-scheme: dark; + --is-dark-theme: true; + } @else { + color-scheme: light; + --is-dark-theme: false; + } + + accent-color: #{color.get('primary/base')}; + + --color-primary: #{color.get('primary/base')}; + --color-primary-contrast: #{color.get('primary/base', 'contrast')}; + + --color-primary-dark-1: #{color.get('primary/dark/3%')}; + --color-primary-dark-2: #{color.get('primary/dark/6%')}; + --color-primary-dark-3: #{color.get('primary/dark/9%')}; + --color-primary-dark-4: #{color.get('primary/dark/12%')}; + --color-primary-dark-5: #{color.get('primary/dark/15%')}; + --color-primary-dark-6: #{color.get('primary/dark/18%')}; + --color-primary-dark-7: #{color.get('primary/dark/21%')}; + + --color-primary-light-1: #{color.get('primary/light/3%')}; + --color-primary-light-2: #{color.get('primary/light/6%')}; + --color-primary-light-3: #{color.get('primary/light/9%')}; + --color-primary-light-4: #{color.get('primary/light/12%')}; + --color-primary-light-5: #{color.get('primary/light/15%')}; + --color-primary-light-6: #{color.get('primary/light/18%')}; + --color-primary-light-7: #{color.get('primary/light/21%')}; + + --color-primary-alpha-10: rgba(#{color.get('primary/base', 'rgb')}, 0.1); + --color-primary-alpha-20: rgba(#{color.get('primary/base', 'rgb')}, 0.2); + --color-primary-alpha-30: rgba(#{color.get('primary/base', 'rgb')}, 0.3); + --color-primary-alpha-40: rgba(#{color.get('primary/base', 'rgb')}, 0.4); + --color-primary-alpha-50: rgba(#{color.get('primary/base', 'rgb')}, 0.5); + --color-primary-alpha-60: rgba(#{color.get('primary/base', 'rgb')}, 0.6); + --color-primary-alpha-70: rgba(#{color.get('primary/base', 'rgb')}, 0.7); + --color-primary-alpha-80: rgba(#{color.get('primary/base', 'rgb')}, 0.8); + --color-primary-alpha-90: rgba(#{color.get('primary/base', 'rgb')}, 0.9); + + --color-secondary: #{color.get('elevation/5')}; + + --color-secondary-dark-1: #{color.get('secondary/light/3%')}; + --color-secondary-dark-2: #{color.get('secondary/light/6%')}; + --color-secondary-dark-3: #{color.get('secondary/light/9%')}; + --color-secondary-dark-4: #{color.get('secondary/light/12%')}; + --color-secondary-dark-5: #{color.get('secondary/light/15%')}; + --color-secondary-dark-6: #{color.get('secondary/light/18%')}; + --color-secondary-dark-7: #{color.get('secondary/light/21%')}; + --color-secondary-dark-8: #{color.get('secondary/light/24%')}; + --color-secondary-dark-9: #{color.get('secondary/light/27%')}; + --color-secondary-dark-10: #{color.get('secondary/light/30%')}; + --color-secondary-dark-11: #{color.get('secondary/light/33%')}; + --color-secondary-dark-12: #{color.get('secondary/light/36%')}; + --color-secondary-dark-13: #{color.get('secondary/light/39%')}; + + --color-secondary-light-1: #{color.get('secondary/dark/3%')}; + --color-secondary-light-2: #{color.get('secondary/dark/6%')}; + --color-secondary-light-3: #{color.get('secondary/dark/9%')}; + --color-secondary-light-4: #{color.get('secondary/dark/12%')}; + + --color-secondary-alpha-10: rgba(#{color.get('secondary/base', 'rgb')}, 0.1); + --color-secondary-alpha-20: rgba(#{color.get('secondary/base', 'rgb')}, 0.2); + --color-secondary-alpha-30: rgba(#{color.get('secondary/base', 'rgb')}, 0.3); + --color-secondary-alpha-40: rgba(#{color.get('secondary/base', 'rgb')}, 0.4); + --color-secondary-alpha-50: rgba(#{color.get('secondary/base', 'rgb')}, 0.5); + --color-secondary-alpha-60: rgba(#{color.get('secondary/base', 'rgb')}, 0.6); + --color-secondary-alpha-70: rgba(#{color.get('secondary/base', 'rgb')}, 0.7); + --color-secondary-alpha-80: rgba(#{color.get('secondary/base', 'rgb')}, 0.8); + --color-secondary-alpha-90: rgba(#{color.get('secondary/base', 'rgb')}, 0.9); + + /* colors */ + --color-red: #{color.get('theme/red/base')}; + --color-orange: #{color.get('theme/peach/base')}; + --color-yellow: #{color.get('theme/yellow/base')}; + --color-olive: #{color.get('theme/green/base')}; + --color-green: #{color.get('theme/green/base')}; + --color-teal: #{color.get('theme/teal/base')}; + --color-blue: #{color.get('theme/blue/base')}; + --color-violet: #{color.get('theme/lavender/base')}; + --color-purple: #{color.get('theme/mauve/base')}; + --color-pink: #{color.get('theme/pink/base')}; + --color-brown: #{color.get('theme/flamingo/base')}; + --color-grey: #{color.get('elevation/9')}; + --color-black: #{color.get('elevation/1')}; + + /* light variants */ + --color-red-light: #{color.get('theme/red/light/12%')}; + --color-orange-light: #{color.get('theme/peach/light/12%')}; + --color-yellow-light: #{color.get('theme/yellow/light/12%')}; + --color-olive-light: #{color.get('theme/green/light/12%')}; + --color-green-light: #{color.get('theme/green/light/12%')}; + --color-teal-light: #{color.get('theme/teal/light/12%')}; + --color-blue-light: #{color.get('theme/blue/light/12%')}; + --color-violet-light: #{color.get('theme/lavender/light/12%')}; + --color-purple-light: #{color.get('theme/mauve/light/12%')}; + --color-pink-light: #{color.get('theme/pink/light/12%')}; + --color-brown-light: #{color.get('theme/flamingo/light/12%')}; + --color-grey-light: #{color.get('elevation/11')}; + --color-black-light: #{if( + is-dark, + color.get('theme/black/light/12%'), + color.get('theme/white/light/12%') + )}; + + /* other colors */ + --color-gold: #{color.get('theme/rosewater/base')}; + --color-white: #{color.get('text')}; + --color-diff-removed-word-bg: rgba(#{color.get('theme/red/base', 'rgb')}, 0.15); + --color-diff-added-word-bg: rgba(#{color.get('theme/green/base', 'rgb')}, 0.15); + --color-diff-removed-row-bg: rgba(#{color.get('theme/red/base', 'rgb')}, 0.07); + --color-diff-moved-row-bg: rgba(#{color.get('theme/yellow/base', 'rgb')}, 0.07); + --color-diff-added-row-bg: rgba(#{color.get('theme/green/base', 'rgb')}, 0.07); + --color-diff-removed-row-border: rgba(#{color.get('theme/red/base', 'rgb')}, 0.07); + --color-diff-moved-row-border: rgba(#{color.get('theme/yellow/base', 'rgb')}, 0.07); + --color-diff-added-row-border: rgba(#{color.get('theme/green/base', 'rgb')}, 0.07); + --color-diff-inactive: #{color.get('elevation/9')}; + --color-error-border: #{color.get('theme/red/base')}; + --color-error-bg: #{color.get('theme/red/base')}; + --color-error-bg-active: #{color.get('theme/red/light/6%')}; + --color-error-bg-hover: #{color.get('theme/red/light/12%')}; + --color-error-text: #{$lvl1}; + --color-success-border: #{color.get('theme/green/light/12%')}; + --color-success-bg: #{color.get('theme/green/base')}; + --color-success-text: #{$lvl1}; + --color-warning-border: #{color.get('theme/yellow/light/12%')}; + --color-warning-bg: #{color.get('theme/yellow/base')}; + --color-warning-text: #{$lvl1}; + --color-info-border: #{color.get('theme/blue/light/12%')}; + --color-info-bg: #{$lvl1}; + --color-info-text: #{color.get('text')}; + --color-red-badge: #{color.get('theme/red/light/12%')}; + --color-red-badge-bg: #{$lvl1}; + --color-red-badge-hover-bg: #{color.get('theme/red/light/6%')}; + --color-green-badge: #{color.get('theme/green/base')}; + --color-green-badge-bg: #{$lvl1}; + --color-green-badge-hover-bg: #{color.get('theme/green/light/6%')}; + --color-yellow-badge: #{color.get('theme/yellow/base')}; + --color-yellow-badge-bg: #{$lvl1}; + --color-yellow-badge-hover-bg: #{color.get('theme/yellow/light/6%')}; + --color-orange-badge: #{color.get('theme/peach/base')}; + --color-orange-badge-bg: #{$lvl1}; + --color-orange-badge-hover-bg: #{color.get('theme/peach/light/6%')}; + --color-git: #{color.get('theme/peach/base')}; + + /* target-based colors */ + --color-body: #{$lvl1}; + --color-box-header: #{$lvl2}; + --color-box-body: #{$lvl2}; + --color-box-body-highlight: #{color.get('elevation/4')}; + --color-text-dark: #{color.get('elevation/10')}; + --color-text: #{color.get('text')}; + --color-text-light: #{color.get('elevation/11')}; + --color-text-light-1: #{color.get('elevation/11')}; + --color-text-light-2: #{color.get('elevation/11')}; + --color-text-light-3: #{color.get('elevation/11')}; + --color-footer: #{$lvl2}; + --color-timeline: #{color.get('elevation/4')}; + --color-input-text: #{color.get('text')}; + --color-input-background: #{color.get('elevation/4')}; + --color-input-toggle-background: #{color.get('elevation/4')}; + --color-input-border: #{color.get('elevation/5')}; + --color-input-border-hover: #{color.get('elevation/6')}; + --color-header-wrapper: #{$lvl2}; + --color-header-wrapper-transparent: #00000000; + --color-light: #{color.get('elevation/6')}; + --color-light-mimic-enabled: rgba( + 0, + 0, + 0, + calc(40 / 255 * 222 / 255 / var(--opacity-disabled)) + ); + --color-light-border: #{color.get('elevation/6')}; + --color-hover: rgba(#{color.get('elevation/6', 'rgb')}, 0.1); + --color-active: rgba(#{color.get('text', 'rgb')}, 0.1); + --color-menu: #{color.get('elevation/4')}; + --color-card: #{color.get('elevation/4')}; + --color-markup-table-row: rgba(#{color.get('text', 'rgb')}, 0.02); + --color-markup-code-block: rgba(#{color.get('text', 'rgb')}, 0.05); + --color-button: #{color.get('elevation/4')}; + --color-code-bg: #{color.get('elevation/3')}; + --color-code-sidebar-bg: #{color.get('elevation/4')}; + --color-shadow: rgba(#{$lvl1-rgb}, 0.1); + --color-secondary-bg: #{color.get('elevation/4')}; + --color-text-focus: #{color.get('text')}; + --color-expand-button: #{color.get('elevation/6')}; + --color-placeholder-text: #{color.get('elevation/6')}; + --color-editor-line-highlight: var(--color-primary-light-5); + --color-project-board-bg: var(--color-secondary-light-2); + --color-caret: var(--color-text); + --color-reaction-bg: rgba(#{color.get('text', 'rgb')}, 0.07); + --color-reaction-active-bg: var(--color-primary-alpha-40); + --color-nav-bg: #{$lvl2}; + --color-nav-hover-bg: #{color.get('elevation/6')}; + --color-label-active-bg: #{color.get('elevation/6')}; + --color-accent: var(--color-primary-light-1); + --color-small-accent: var(--color-primary-light-5); + --color-active-line: #{color.get('elevation/5')}; + } + + @if $is-dark { + /* invert emojis that are hard to read otherwise */ + .emoji[aria-label='check mark'], + .emoji[aria-label='currency exchange'], + .emoji[aria-label='TOP arrow'], + .emoji[aria-label='END arrow'], + .emoji[aria-label='ON! arrow'], + .emoji[aria-label='SOON arrow'], + .emoji[aria-label='heavy dollar sign'], + .emoji[aria-label='copyright'], + .emoji[aria-label='registered'], + .emoji[aria-label='trade mark'], + .emoji[aria-label='multiply'], + .emoji[aria-label='plus'], + .emoji[aria-label='minus'], + .emoji[aria-label='divide'], + .emoji[aria-label='curly loop'], + .emoji[aria-label='double curly loop'], + .emoji[aria-label='wavy dash'], + .emoji[aria-label='paw prints'], + .emoji[aria-label='musical note'], + .emoji[aria-label='musical notes'] { + filter: invert(100%) hue-rotate(180deg); + } + } + + .ui.ui.ui.button:not(.inverted, .basic), + .ui.ui.ui.label:not(.inverted, .basic) { + &.primary, + &.green, + &.red, + &.teal { + color: $lvl1; + &:hover { + color: $lvl3; + } + } + } + + .ui.basic.modal { + background-color: $lvl3; + } + + // link color for signed commits + .ui.commit-header-row .svg.gitea-lock ~ a { + color: $lvl1; + } + + // most recent commit hover when signed + .ui.sha.isSigned.isVerified:hover { + .shortsha { + color: $lvl1; + } + svg.gitea-lock { + fill: $lvl1; + } + } + + // modal text color for the "Remove GPG Key" modal + .ui.basic.modal, + .ui.basic.modal > .header, + .ui.inverted.button { + color: color.get('text') !important; + } + + ::selection { + background: rgba(#{color.get('theme/rosewater/base', 'rgb')}, 0.3) !important; + } + + body { + font-size: var.get('base-font-size'); + } + + @include chroma.make-chroma-styles; + @include codemirror.make-code-mirror-styles; +} diff --git a/src/themes/scss/gitea/modules/_chroma.scss b/src/themes/scss/gitea/modules/_chroma.scss new file mode 100644 index 0000000..a496bc1 --- /dev/null +++ b/src/themes/scss/gitea/modules/_chroma.scss @@ -0,0 +1,310 @@ +@use '@lucas-labs/lui-micro/color' as color; +@use '@lucas-labs/lui-micro/var' as var; + + +// variables: ( +// 'base-font-size': 16px, +// 'font-family': 'Roboto, sans-serif', +// 'code-font-family': '"Source Code Pro", "Roboto Mono", Consolas, monospace', +// ), + +@mixin make-chroma-styles { + .chroma .code-inner{ + font: 14px var.get('code-font-family'); + } + + /* NameBuiltinPseudo */ + .chroma .bp { + color: color.get('theme/peach/base'); + } + /* Comment */ + .chroma .c { + color: color.get('elevated/7'); + } + /* CommentSingle */ + .chroma .c1 { + color: color.get('elevated/7'); + } + /* CommentHashbang */ + .chroma .ch { + color: color.get('elevated/7'); + } + /* CommentMultiline */ + .chroma .cm { + color: color.get('elevated/7'); + } + /* CommentPreproc */ + .chroma .cp { + color: color.get('theme/blue/base'); + } + /* CommentPreprocFile */ + .chroma .cpf { + color: color.get('theme/blue/base'); + } + /* CommentSpecial */ + .chroma .cs { + color: color.get('elevated/7'); + } + /* LiteralStringDelimiter */ + .chroma .dl { + color: color.get('theme/blue/base'); + } + /* NameFunctionMagic */ + .chroma .fm { + } + /* Generic */ + .chroma .g { + } + /* GenericDeleted */ + .chroma .gd { + color: color.get('theme'); + background-color: rgba(#{color.get('theme/red/base', 'rgb')}, 0.15); + } + /* GenericEmph */ + .chroma .ge { + font-style: italic; + } + /* GenericHeading */ + .chroma .gh { + color: color.get('theme/sky/base'); + } + /* GenericInserted */ + .chroma .gi { + color: color.get('theme'); + background-color: rgba(#{color.get('theme/green/base', 'rgb')}, 0.15); + } + /* GenericUnderline */ + .chroma .gl { + } + /* GenericOutput */ + .chroma .go { + color: color.get('theme/peach/base'); + } + /* GenericPrompt */ + .chroma .gp { + color: color.get('elevated/7'); + font-weight: bold; + } + /* GenericError */ + .chroma .gr { + color: color.get('theme/maroon/base'); + } + /* GenericStrong */ + .chroma .gs { + font-weight: bold; + } + /* GenericTraceback */ + .chroma .gt { + color: color.get('theme/maroon/base'); + } + /* GenericSubheading */ + .chroma .gu { + color: color.get('theme/sky/base'); + } + /* LiteralNumberIntegerLong */ + .chroma .il { + color: color.get('theme/peach/base'); + } + /* Keyword */ + .chroma .k { + color: color.get('theme/mauve/base'); + } + /* KeywordConstant */ + .chroma .kc { + color: color.get('theme/yellow/base'); + } + /* KeywordDeclaration */ + .chroma .kd { + color: color.get('theme/mauve/base'); + } + /* KeywordNamespace */ + .chroma .kn { + color: color.get('theme/yellow/base'); + } + /* KeywordPseudo */ + .chroma .kp { + color: color.get('theme/mauve/base'); + font-weight: bold; + } + /* KeywordReserved */ + .chroma .kr { + color: color.get('theme/mauve/base'); + } + /* KeywordType */ + .chroma .kt { + color: color.get('theme/yellow/base'); + } + /* Literal */ + .chroma .l { + } + /* LiteralDate */ + .chroma .ld { + } + /* LiteralNumber */ + .chroma .m { + color: color.get('theme/peach/base'); + } + /* LiteralNumberBin */ + .chroma .mb { + color: color.get('theme/peach/base'); + } + /* LiteralNumberFloat */ + .chroma .mf { + color: color.get('theme/peach/base'); + } + /* LiteralNumberHex */ + .chroma .mh { + color: color.get('theme/peach/base'); + } + /* LiteralNumberInteger */ + .chroma .mi { + color: color.get('theme/peach/base'); + } + /* LiteralNumberOct */ + .chroma .mo { + color: color.get('theme/peach/base'); + } + /* Name */ + .chroma .n { + color: color.get('theme/lavender/base'); + } + /* NameAttribute */ + .chroma .na { + color: color.get('theme/yellow/base'); + } + /* NameBuiltin */ + .chroma .nb { + color: color.get('theme/peach/base'); + } + /* NameClass */ + .chroma .nc { + color: color.get('theme/yellow/base'); + } + /* NameDecorator */ + .chroma .nd { + color: color.get('theme/pink/base'); + } + /* NameException */ + .chroma .ne { + color: color.get('theme/maroon/base'); + } + /* NameFunction */ + .chroma .nf { + color: color.get('theme/blue/base'); + } + /* NameEntity */ + .chroma .ni { + color: color.get('theme/pink/base'); + } + /* NameLabel */ + .chroma .nl { + color: color.get('theme/yellow/base'); + } + /* NameNamespace */ + .chroma .nn { + color: color.get('theme/yellow/base'); + } + /* NameConstant */ + .chroma .no { + color: color.get('theme/yellow/base'); + } + /* NameTag */ + .chroma .nt { + color: color.get('theme/mauve/base'); + } + /* NameVariable */ + .chroma .nv { + color: color.get('theme/peach/base'); + } + /* NameOther */ + .chroma .nx { + color: color.get('theme/peach/base'); + } + /* Operator */ + .chroma .o { + color: color.get('theme/sky/base'); + } + /* OperatorWord */ + .chroma .ow { + color: color.get('theme/sky/base'); + font-weight: bold; + } + /* Punctuation */ + .chroma .p { + color: color.get('elevated/9'); + } + /* NameProperty */ + .chroma .py { + } + /* LiteralString */ + .chroma .s { + color: color.get('theme/green/base'); + } + /* LiteralStringSingle */ + .chroma .s1 { + color: color.get('theme/green/base'); + } + /* LiteralStringDouble */ + .chroma .s2 { + color: color.get('theme/green/base'); + } + /* LiteralStringAffix */ + .chroma .sa { + color: color.get('theme/green/base'); + } + /* LiteralStringBacktick */ + .chroma .sb { + color: color.get('theme/green/base'); + } + /* LiteralStringChar */ + .chroma .sc { + color: color.get('theme/green/base'); + } + /* LiteralStringDoc */ + .chroma .sd { + color: color.get('theme/green/base'); + } + /* LiteralStringEscape */ + .chroma .se { + color: color.get('theme/blue/base'); + } + /* LiteralStringHeredoc */ + .chroma .sh { + color: color.get('theme/green/base'); + } + /* LiteralStringInterpol */ + .chroma .si { + color: color.get('theme/green/base'); + } + /* LiteralStringRegex */ + .chroma .sr { + color: color.get('theme/blue/base'); + } + /* LiteralStringSymbol */ + .chroma .ss { + color: color.get('theme/green/base'); + } + /* LiteralStringOther */ + .chroma .sx { + color: color.get('theme/green/base'); + } + /* NameVariableClass */ + .chroma .vc { + color: color.get('theme/yellow/base'); + } + /* NameVariableGlobal */ + .chroma .vg { + color: color.get('theme/peach/base'); + } + /* NameVariableInstance */ + .chroma .vi { + color: color.get('theme/yellow/base'); + } + /* NameVariableMagic */ + .chroma .vm { + } + /* TextWhitespace */ + .chroma .w { + color: color.get('elevated/4'); + } +} diff --git a/src/themes/scss/gitea/modules/_codemirror.scss b/src/themes/scss/gitea/modules/_codemirror.scss new file mode 100644 index 0000000..ae47773 --- /dev/null +++ b/src/themes/scss/gitea/modules/_codemirror.scss @@ -0,0 +1,95 @@ +@use '@lucas-labs/lui-micro/color' as color; + +@mixin make-code-mirror-styles { + .CodeMirror, + .CodeMirror.cm-s-default, + .CodeMirror.cm-s-paper { + .cm-property { + color: color.get('text') + } + + .cm-header { + color: color.get('text') + } + + .cm-quote { + color: color.get('theme/green/base') + } + + .cm-keyword { + color: color.get('theme/mauve/base'); + } + + .cm-atom { + color: color.get('theme/red/base'); + } + + .cm-number { + color: color.get('theme/peach/base'); + } + + .cm-def { + color: color.get('text') + } + + .cm-variable-2 { + color: color.get('theme/sky/base'); + } + + .cm-variable-3 { + color: color.get('theme/teal/base'); + } + + .cm-comment { + color: color.get('elevation/6') + } + + .cm-string { + color: color.get('theme/green') + } + + .cm-string-2 { + color: color.get('theme/green') + } + + .cm-meta { + color: color.get('theme/peach/base'); + } + + .cm-qualifier { + color: color.get('theme/peach/base'); + } + + .cm-builtin { + color: color.get('theme/peach/base'); + } + + .cm-bracket { + color: color.get('text') + } + + .cm-tag { + color: color.get('theme/yellow/base'); + } + + .cm-attribute { + color: color.get('theme/yellow/base'); + } + + .cm-hr { + color: color.get('elevation/9'); + } + + .cm-url { + color: color.get('theme/blue/base'); + } + + .cm-link { + color: color.get('theme/blue/base'); + } + + .cm-error { + color: color.get('theme/red/base'); + } + } +} diff --git a/src/themes/scss/utils/_color-utils.scss b/src/themes/scss/utils/_color-utils.scss new file mode 100644 index 0000000..c8ade23 --- /dev/null +++ b/src/themes/scss/utils/_color-utils.scss @@ -0,0 +1,85 @@ +@use 'sass:color'; +@use 'sass:map'; + +@function light-change($color, $amount, $isDark) { + $multiplier: if($isDark, -1, 1); + @return color.adjust($color, $lightness: $amount * $multiplier); +} + +@function alpha-change($color, $alpha) { + @return color.change($color, $alpha: $alpha); +} + +@function color-variants-light($color, $is-dark, $with-base: false) { + $set: ( + '3%': light-change($color, -3%, $is-dark), + '6%': light-change($color, -6%, $is-dark), + '9%': light-change($color, -9%, $is-dark), + '12%': light-change($color, -12%, $is-dark), + '15%': light-change($color, -15%, $is-dark), + '18%': light-change($color, -18%, $is-dark), + '21%': light-change($color, -21%, $is-dark), + '24%': light-change($color, -24%, $is-dark), + '27%': light-change($color, -27%, $is-dark), + '30%': light-change($color, -30%, $is-dark), + '33%': light-change($color, -33%, $is-dark), + '36%': light-change($color, -36%, $is-dark), + '39%': light-change($color, -39%, $is-dark) + ); + + @if $with-base { + $set: map.merge((base: $color), $set); + } + + @return $set; +} + +@function color-variants-dark($color, $is-dark, $with-base: false) { + $set: ( + '3%': light-change($color, 3%, $is-dark), + '6%': light-change($color, 6%, $is-dark), + '9%': light-change($color, 9%, $is-dark), + '12%': light-change($color, 12%, $is-dark), + '15%': light-change($color, 15%, $is-dark), + '18%': light-change($color, 18%, $is-dark), + '21%': light-change($color, 21%, $is-dark), + '24%': light-change($color, 24%, $is-dark), + '27%': light-change($color, 27%, $is-dark), + '30%': light-change($color, 30%, $is-dark), + '33%': light-change($color, 33%, $is-dark), + '36%': light-change($color, 36%, $is-dark), + '39%': light-change($color, 39%, $is-dark), + ); + + @if $with-base { + $set: map.merge((base: $color), $set); + } + + @return $set; +} + +@function variants($color, $is-dark, $light: true, $dark: true, $base: true, $override-base-with: null) { + $set: (); + + // base: $color, + // light: color-variants-light($color, $is-dark), + // dark: color-variants-dark($color, $is-dark), + + @if $light { + $set: map.merge($set, (light: color-variants-light($color, $is-dark))); + } + + @if $dark { + $set: map.merge($set, (dark: color-variants-dark($color, $is-dark))); + } + + @if $base { + @if $override-base-with { + $set: map.merge($set, (base: $override-base-with)); + } @else { + $set: map.merge($set, (base: $color)); + } + } + + @return $set; +} \ No newline at end of file diff --git a/tools/build.js b/tools/build.js new file mode 100644 index 0000000..91c3702 --- /dev/null +++ b/tools/build.js @@ -0,0 +1,43 @@ +import { join } from 'path'; +import { cwd } from 'process'; +import { mkdirSync, rmSync, existsSync } from 'fs'; +import { buildScss } from './tasks/scss.js'; +import { buildImg } from './tasks/img.js'; +import { buildTemplates } from './tasks/templates.js'; +import { Logger } from './utils/logger.js'; +import { buildFonts } from './tasks/fonts.js'; +const srcPath = join(cwd(), 'src'); +const distPath = join(cwd(), 'dist'); + +const logger = new Logger('build', 'info', 'brightMagenta'); + +function exit(err) { + if (err) { + console.error(err); + } else { + console.log('') + logger.info('Build completed successfully'); + } + + process.exit(err ? 1 : 0); +} + +async function build() { + // cleaning, remove dist folder + if (existsSync(distPath)) { + rmSync(distPath, { recursive: true }); + } + + // recreate dist folder + mkdirSync(distPath, { recursive: true }); + + // start building tasks + await Promise.all([ + buildScss(srcPath, distPath), + buildImg(srcPath, distPath), + buildFonts(srcPath, distPath), + buildTemplates(srcPath, distPath), + ]); +} + +build().then(exit).catch(exit); diff --git a/tools/deploy.js b/tools/deploy.js new file mode 100644 index 0000000..71e4c92 --- /dev/null +++ b/tools/deploy.js @@ -0,0 +1,34 @@ +import { Logger } from './utils/logger.js'; +import { getArg } from './utils/funcs.js'; +import { resolve } from 'path'; +import { cwd } from 'process'; +import { deploy } from './tasks/deploy.js'; + +const logger = new Logger('deploy', 'info', 'brightMagenta'); + +const src = './src'; +const dist = './dist'; +const serviceName = getArg('--service', 'gitea'); +const srcPath = resolve(cwd(), src); +const distPath = resolve(cwd(), dist); +const serverPath = resolve( + cwd(), + getArg('--sever', 'D:/users/lucas/Desktop/dev/server/gitea') +); + +logger.info('Deploy started!'); +logger.info(`Service name: '${serviceName}'`); +logger.info(`Src path: ${srcPath}`); +logger.info(`Dist path: ${distPath}`); +logger.info(`Server path: ${serverPath}`); + +function exit(err) { + err && logger.error(err); + process.exit(err ? 1 : 0); +} + +async function executeDeployTask() { + await deploy(srcPath, distPath, serverPath, serviceName); +} + +executeDeployTask().then(exit).catch(exit); diff --git a/tools/restart.js b/tools/restart.js new file mode 100644 index 0000000..ad9f34b --- /dev/null +++ b/tools/restart.js @@ -0,0 +1,19 @@ +import { getArg } from './utils/funcs.js'; +import { restartService } from './tasks/restart-service.js'; +import { Logger } from './utils/logger.js'; + +const logger = new Logger('restart', 'info', 'brightMagenta'); +const serviceName = getArg('--service', 'gitea'); + +function exit(err) { + if (err) { + console.error(err); + } else { + console.log(''); + logger.info('Build completed successfully'); + } + + process.exit(err ? 1 : 0); +} + +restartService(serviceName).then(exit).catch(exit); diff --git a/tools/serve.js b/tools/serve.js new file mode 100644 index 0000000..a327f50 --- /dev/null +++ b/tools/serve.js @@ -0,0 +1,40 @@ +import { watch } from 'chokidar'; +import { TaskDebouncer } from './utils/task-debouncer.js'; +import { Logger } from './utils/logger.js'; +import { getArg } from './utils/funcs.js'; +import { resolve } from 'path'; +import { cwd } from 'process'; +import { deploy } from './tasks/deploy.js'; + +const src = './src'; +const dist = './dist'; +const serviceName = getArg('--service', 'gitea'); +const srcPath = resolve(cwd(), src); +const distPath = resolve(cwd(), dist); +const serverPath = resolve( + cwd(), + getArg('--sever', 'D:/users/lucas/Desktop/dev/server/gitea') +); +const debouncer = new TaskDebouncer(300); +const logger = new Logger('serve', 'info', 'brightMagenta'); + +logger.info('Serve task started!'); +logger.info('Watching for changes...'); +logger.info(`Service name: '${serviceName}'`); +logger.info(`Src path: ${srcPath}`); +logger.info(`Dist path: ${distPath}`); +logger.info(`Server path: ${serverPath}`); + +const watcher = watch([`${src}/**/*`], { + persistent: true, + ignoreInitial: true, +}); + +watcher.on('change', (file) => debouncer.add( + deploy, + srcPath, + distPath, + serverPath, + serviceName, + file, +)); diff --git a/tools/tasks/copy-to.js b/tools/tasks/copy-to.js new file mode 100644 index 0000000..1cbbf50 --- /dev/null +++ b/tools/tasks/copy-to.js @@ -0,0 +1,34 @@ +import fs from 'fs'; +import path from 'path'; +import { Logger } from '../utils/logger.js'; + +const logger = new Logger(copyTo.name, 'info', 'brightYellow'); + +export async function copyTo(sourcePath, targetPath) { + logger.info(`Copying ${sourcePath} to ${targetPath}`); + await recursiveCopy(sourcePath, targetPath); + logger.info(`Copy has finished!`); +} + +async function recursiveCopy(sourcePath, targetPath) { + // Create the target directory if it doesn't exist + if (!fs.existsSync(targetPath)) { + fs.mkdirSync(targetPath, { recursive: true }); + } + + // Get all files and directories in the source path + const files = fs.readdirSync(sourcePath, { withFileTypes: true }); + + for (const file of files) { + const sourceFile = path.join(sourcePath, file.name); + const targetFile = path.join(targetPath, file.name); + + if (file.isDirectory()) { + // Recursively copy directories + await recursiveCopy(sourceFile, targetFile); + } else { + // Copy files + fs.copyFileSync(sourceFile, targetFile); + } + } +} diff --git a/tools/tasks/deploy.js b/tools/tasks/deploy.js new file mode 100644 index 0000000..dc2ce13 --- /dev/null +++ b/tools/tasks/deploy.js @@ -0,0 +1,33 @@ +import { Logger } from '../utils/logger.js'; +import { buildScss } from './scss.js'; +import { buildFonts } from './fonts.js'; +import { buildTemplates } from './templates.js'; +import { copyTo } from './copy-to.js'; +import { restartService } from './restart-service.js'; +import { extname } from 'path'; + +const logger = new Logger('deploy', 'info', 'brightMagenta'); + +export async function deploy(srcPath, distPath, serverPath, serviceName, file = null) { + logger.info('Deploying...'); + + let shouldRestart = true; + + // check if it's an scss + if (file !== null && file !== undefined && extname(file) === '.scss') { + shouldRestart = false; + } + + + try { + await buildScss(srcPath, distPath); + await buildFonts(srcPath, distPath); + await buildTemplates(srcPath, distPath); + await copyTo(distPath, serverPath); + shouldRestart && await restartService(serviceName); + + logger.info('Deployment successful!'); + } catch (error) { + logger.error(`Deployment failed: ${error}`); + } +} diff --git a/tools/tasks/fonts.js b/tools/tasks/fonts.js new file mode 100644 index 0000000..d95ee16 --- /dev/null +++ b/tools/tasks/fonts.js @@ -0,0 +1,32 @@ +import { copyFileSync, mkdirSync } from 'fs'; +import { join } from 'path'; +import { readFiles } from '../utils/funcs.js'; +import { Logger } from '../utils/logger.js'; + +const logger = new Logger(buildFonts.name, 'info', 'brightCyan'); +const imgSrc = 'themes/fonts'; +const imgDest = '/public/fonts'; + +export async function buildFonts(srcHome, distHome) { + logger.info('Fonts build has started'); + const fontsSrcPath = join(srcHome, imgSrc); + const fontsDestPath = join(distHome, imgDest); + + mkdirSync(fontsDestPath, { recursive: true }); + + const files = readFiles(fontsSrcPath, [ + '.woff', + '.woff2', + '.ttf', + '.eot', + '.svg', + '.otf', + ]); + + for (const file of files) { + // just copy the file + copyFileSync(join(fontsSrcPath, file), join(fontsDestPath, file)); + } + + logger.info('Fonts build has finished'); +} diff --git a/tools/tasks/img.js b/tools/tasks/img.js new file mode 100644 index 0000000..92f7165 --- /dev/null +++ b/tools/tasks/img.js @@ -0,0 +1,129 @@ +import { fabric } from 'fabric'; +import imageminZopfli from 'imagemin-zopfli'; +import { readFile, writeFile } from 'node:fs/promises'; +import { join, basename } from 'path'; +import { optimize } from 'svgo'; +import { readFiles } from '../utils/funcs.js'; +import { Logger } from '../utils/logger.js'; +import { mkdirSync, copyFileSync } from 'fs'; + +const logger = new Logger(buildImg.name, 'info', 'brightGreen'); +const imgSrc = 'themes/img'; +const imgDest = '/public/img'; + +export async function buildImg(srcHome, distHome) { + logger.info('Images build has started'); + const imgSrcPath = join(srcHome, imgSrc); + const imgDestPath = join(distHome, imgDest); + const images = { logos: { logo: undefined, favicon: undefined }, others: [] }; + mkdirSync(imgDestPath, { recursive: true }); + + const files = readFiles(imgSrcPath, ['.svg', '.png', '.jpg', '.webp', '.gif']); + + // Separate logo.svg and favicon.svg from the rest + files.forEach((file) => { + if (file === 'logo.svg') { + images.logos.logo = join(imgSrcPath, file); + } else if (file === 'favicon.svg') { + images.logos.favicon = join(imgSrcPath, file); + } else { + images.others.push(join(imgSrcPath, file)); + } + }); + + await Promise.all([ + processLogos(images.logos, imgDestPath), + processOthers(images.others, imgDestPath), + ]) + + logger.info('Images build has finished'); +} + +async function processLogos(logos, distHome) { + const promises = []; + + if (logos.logo) { + const svg = await readFile(logos.logo, 'utf8'); + promises.push(generate(svg, join(distHome, 'logo.svg'), { size: 32 })); + promises.push(generate(svg, join(distHome, 'logo.png'), { size: 512 })); + } + + if (logos.favicon) { + const svg = await readFile(logos.favicon, 'utf8'); + promises.push( + generate(svg, join(distHome, 'favicon.svg'), { size: 32 }), + generate(svg, join(distHome, 'favicon.png'), { size: 180 }), + generate(svg, join(distHome, 'apple-touch-icon.png'), { size: 180, bg: true }), + generate(svg, join(distHome, 'avatar_default.png'), { size: 200, bg: true }) + ); + } + + await Promise.all(promises); +} + +function loadSvg(svg) { + return new Promise((resolve) => { + fabric.loadSVGFromString(svg, (objects, options) => { + resolve({ objects, options }); + }); + }); +} + +async function generate(svg, path, { size, bg }) { + if (String(path).endsWith('.svg')) { + const { data } = optimize(svg, { + plugins: [ + 'preset-default', + 'removeDimensions', + { + name: 'addAttributesToSVGElement', + params: { attributes: [{ height: size }] }, + }, + ], + }); + await writeFile(path, data); + return; + } + + const { objects, options } = await loadSvg(svg); + const canvas = new fabric.Canvas(); + + + const newWidth = size * options.width / options.height; + canvas.setDimensions({ width: newWidth, height: size }); + const ctx = canvas.getContext('2d'); + ctx.scale( + options.width ? newWidth / options.width : 1, + options.height ? size / options.height : 1 + ); + + if (bg) { + canvas.add( + new fabric.Rect({ + left: 0, + top: 0, + height: size * (1 / (size / options.height)), + width: size * (1 / (size / options.width)), + fill: 'black', + }) + ); + } + + canvas.add(fabric.util.groupSVGElements(objects, options)); + canvas.renderAll(); + + let png = Buffer.from([]); + for await (const chunk of canvas.createPNGStream()) { + png = Buffer.concat([png, chunk]); + } + + png = await imageminZopfli({ more: true })(png); + await writeFile(path, png); +} + +async function processOthers(others, distHome) { + // just copy the rest of the images to dist + for (const img of others) { + copyFileSync(img, join(distHome, basename(img))); + } +} \ No newline at end of file diff --git a/tools/tasks/restart-service.js b/tools/tasks/restart-service.js new file mode 100644 index 0000000..6967657 --- /dev/null +++ b/tools/tasks/restart-service.js @@ -0,0 +1,31 @@ +import { exec } from 'child_process'; + +import { Logger } from '../utils/logger.js'; +const logger = new Logger(restartService.name, 'info', 'brightRed'); + +export async function restartService(serviceName) { + return new Promise((resolve, reject) => { + logger.info(`Restarting '${serviceName}' service...`); + + let command; + let args; + + if (process.platform === 'win32') { + command = 'cmd.exe'; + args = ['/c', 'net', 'stop', serviceName, '&&', 'net', 'start', serviceName]; + } else { + command = 'sudo'; + args = ['systemctl', 'restart', serviceName]; + } + + exec(`${command} ${args.join(' ')}`, (error, stdout) => { + if (error) { + logger.error(`Failed to restart '${serviceName}' service: ${error}`); + reject(error); + } else { + logger.info(`'${serviceName}' service restarted!`); + resolve(stdout); + } + }); + }); +} diff --git a/tools/tasks/scss.js b/tools/tasks/scss.js new file mode 100644 index 0000000..98d5185 --- /dev/null +++ b/tools/tasks/scss.js @@ -0,0 +1,64 @@ +import { mkdirSync, readdirSync, writeFileSync } from 'fs'; +import { join } from 'path'; +import { Logger } from '../utils/logger.js'; +import { compile } from 'sass'; + +const logger = new Logger(buildScss.name, 'debug', 'pink'); +const scss_home = 'themes/scss'; +const css_home = '/public/css'; + +export async function buildScss(src_home, dist_home) { + logger.info('SCSS build has started'); + const themes = get_themes(src_home); + mkdirSync(join(dist_home, css_home), { recursive: true }); + + for (const theme of themes) { + logger.debug(`Building ${theme.name} theme`); + + const result = compile(theme.path, { + loadPaths: [join(src_home, scss_home), join(src_home, '../node_modules')], + quietDeps: true, + logger: { + debug: logger.simpleDebug.bind(logger), + info: logger.simpleInfo.bind(logger), + warn: logger.simpleWarn.bind(logger), + error: logger.simpleError.bind(logger), + } + }); + + logger.debug(`Writing ${theme.name} theme to disk`); + + writeFileSync( + join(dist_home, css_home, `theme-${theme.name}.css`), + result.css + ); + } + + logger.info('SCSS build has finished'); +} + + +function get_themes(src_home) { + return readdirSync(join(src_home, scss_home)).filter( + (fn) => fn.endsWith('.scss') && !fn.startsWith('_') + ).map((file) => ({ + name: file.replace('.scss', ''), + path: join(src_home, scss_home, file), + })) +} + + +// for (const flavor of Object.keys(variants)) { +// for (const accent of accents) { +// const input = builder(flavor, accent); +// const result = compileString(input, { +// loadPaths: [join(__dirname, 'src'), join(__dirname, 'node_modules')], +// }); + +// mkdirSync(join(__dirname, 'dist'), { recursive: true }); +// writeFileSync( +// join(__dirname, 'dist', `theme-catppuccin-${flavor}-${accent}.css`), +// result.css +// ); +// } +// } diff --git a/tools/tasks/templates.js b/tools/tasks/templates.js new file mode 100644 index 0000000..e1f4575 --- /dev/null +++ b/tools/tasks/templates.js @@ -0,0 +1,17 @@ +import { join } from 'path'; +import { copyFolderRecursiveSync } from '../utils/funcs.js'; +import { Logger } from '../utils/logger.js'; + +const logger = new Logger(buildTemplates.name, 'info', 'blue'); +const imgSrc = 'templates'; +const imgDest = '/'; + +export async function buildTemplates(srcHome, distHome) { + logger.info('Fonts build has started'); + const tmplSrcPath = join(srcHome, imgSrc); + const tmplDestPath = join(distHome, imgDest); + + // just copy the entire tmplSrcPath to tmplDestPath + copyFolderRecursiveSync(tmplSrcPath, tmplDestPath); + logger.info('Templates build has finished'); +} diff --git a/tools/utils/funcs.js b/tools/utils/funcs.js new file mode 100644 index 0000000..8403d45 --- /dev/null +++ b/tools/utils/funcs.js @@ -0,0 +1,162 @@ +import { + existsSync, + lstatSync, + mkdirSync, + readFileSync, + readdirSync, + writeFileSync, +} from 'fs'; +import { basename, join } from 'path'; + +export function readFiles(path, extensions) { + return readdirSync(path).filter((file) => + extensions.some((ext) => file.endsWith(ext)) + ); +} + +function copyFileSync(source, target) { + var targetFile = target; + + // If target is a directory, a new file with the same name will be created + if (existsSync(target)) { + if (lstatSync(target).isDirectory()) { + targetFile = join(target, basename(source)); + } + } + + writeFileSync(targetFile, readFileSync(source)); +} + +export function copyFolderRecursiveSync(source, target) { + var files = []; + + var targetFolder = join(target, basename(source)); + if (!existsSync(targetFolder)) { + mkdirSync(targetFolder); + } + + // Copy + if (lstatSync(source).isDirectory()) { + files = readdirSync(source); + files.forEach(function (file) { + var curSource = join(source, file); + if (lstatSync(curSource).isDirectory()) { + copyFolderRecursiveSync(curSource, targetFolder); + } else { + copyFileSync(curSource, targetFolder); + } + }); + } +} + +// https://github.com/bjoerge/debounce-promise/blob/master/index.js +export function debounce(fn, wait = 0, options = {}) { + let lastCallAt; + let deferred; + let timer; + let pendingArgs = []; + return function debounced(...args) { + const currentWait = getWait(wait); + const currentTime = new Date().getTime(); + + const isCold = !lastCallAt || currentTime - lastCallAt > currentWait; + + lastCallAt = currentTime; + + if (isCold && options.leading) { + return options.accumulate + ? Promise.resolve(fn.call(this, [args])).then((result) => result[0]) + : Promise.resolve(fn.call(this, ...args)); + } + + if (deferred) { + clearTimeout(timer); + } else { + deferred = defer(); + } + + pendingArgs.push(args); + timer = setTimeout(flush.bind(this), currentWait); + + if (options.accumulate) { + const argsIndex = pendingArgs.length - 1; + return deferred.promise.then((results) => results[argsIndex]); + } + + return deferred.promise; + }; + + function flush() { + const thisDeferred = deferred; + clearTimeout(timer); + + Promise.resolve( + options.accumulate + ? fn.call(this, pendingArgs) + : fn.apply(this, pendingArgs[pendingArgs.length - 1]) + ).then(thisDeferred.resolve, thisDeferred.reject); + + pendingArgs = []; + deferred = null; + } +} + +function getWait(wait) { + return typeof wait === 'function' ? wait() : wait; +} + +function defer() { + const deferred = {}; + deferred.promise = new Promise((resolve, reject) => { + deferred.resolve = resolve; + deferred.reject = reject; + }); + return deferred; +} + +export async function sequence(tasks) { + const results = []; + for (const task of tasks) { + results.push(await task()); + } + return results; +} + + +async function tasksRunner(tasks, abort) { + let result = null; + for (const task of tasks) { + if (abort.signal.aborted) { + break; + } + + result = await task(result); + } +} + +// each task should return a promise +// each task takes the result of the previous task as an argument +// the output of the last task is the output of the sequence +export async function sequenceStream(tasks) { + const abort = new AbortController(); + + abort.signal.addEventListener('abort', () => { + console.log('sequenceStream aborted'); + }); + + return [ + tasksRunner(tasks, abort), + abort, + ] +} + +export const getArg = (flag, def) => { + const args = process.argv.slice(2); + const flagIndex = args.findIndex(arg => arg === flag); + + if (flagIndex !== -1 && flagIndex + 1 < args.length) { + return args[flagIndex + 1]; + } + + return def || null; +}; \ No newline at end of file diff --git a/tools/utils/logger.js b/tools/utils/logger.js new file mode 100644 index 0000000..95daa45 --- /dev/null +++ b/tools/utils/logger.js @@ -0,0 +1,105 @@ +const LOG_LEVEL_MAP = { + debug: 0, + info: 1, + warn: 2, + error: 3, +}; + +const ANSI_COLORS = { + reset: '\x1b[0m', + black: '\x1b[30m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + magenta: '\x1b[35m', + cyan: '\x1b[36m', + white: '\x1b[37m', + gray: '\x1b[90m', + brightRed: '\x1b[91m', + brightGreen: '\x1b[92m', + brightYellow: '\x1b[93m', + brightBlue: '\x1b[94m', + brightMagenta: '\x1b[95m', + brightCyan: '\x1b[96m', + pink: '\x1b[38;2;255;182;193m' +}; + +export class Logger { + /** + * @param {string} ctx + * @param {'debug'|'info'|'warn'|'error'} log_level - default: 'debug' + * @param {'red'|'green'|'yellow'|'blue'|'magenta'|'cyan'|'white'|'gray'|'brightRed'| + * 'brightGreen'|'brightYellow'|'brightBlue'|'brightMagenta'|'brightCyan'|'pink'} color - default: 'magenta' + */ + constructor(ctx, log_level, color = 'magenta') { + this.ctx = ctx; + this.log_level = LOG_LEVEL_MAP[log_level || 'debug']; + this.color = ANSI_COLORS[color] || ANSI_COLORS.reset; + + if (this.log_level === undefined) { + throw new Error(`Invalid log level: ${log_level}`); + } + } + + debug(...args) { + if (!this.#canLog('debug')) return; + this.log('DEBUG', false, ...args); + } + + info(...args) { + if (!this.#canLog('info')) return; + this.log('INFO', false, ...args); + } + + warn(...args) { + if (!this.#canLog('warn')) return; + this.log('WARN', false, ...args); + + } + + error(...args) { + if (!this.#canLog('error')) return; + this.log('ERROR', false, ...args); + } + + log(level, simple, ...args) { + if (simple) { + args = [args[0]]; + } + + if (level === 'ERROR') { + console.error( + `${this.color}[${level}] [${this.ctx}]${ANSI_COLORS.reset}`, + ...args + ); + } else { + console.log('🍵', `${this.color}[${this.ctx}]${ANSI_COLORS.reset}`, ...args); + } + } + + simpleDebug(...args) { + if (!this.#canLog('debug')) return; + this.log('DEBUG', true, ...args); + } + + simpleInfo(...args) { + if (!this.#canLog('info')) return; + this.log('INFO', true, ...args); + } + + simpleWarn(...args) { + if (!this.#canLog('warn')) return; + this.log('WARN', true, ...args); + + } + + simpleError(...args) { + if (!this.#canLog('error')) return; + this.log('ERROR', true, ...args); + } + + #canLog(level) { + return this.log_level <= LOG_LEVEL_MAP[level]; + } +} diff --git a/tools/utils/task-debouncer.js b/tools/utils/task-debouncer.js new file mode 100644 index 0000000..ec939c7 --- /dev/null +++ b/tools/utils/task-debouncer.js @@ -0,0 +1,67 @@ +/** + * #### TaskDebouncer + * + * Executes a task after a certain delay, but cancels the execution if + * a new task is sent before the delay expires. Also, if a task is + * already being executed, the new task is queued and executed after + * the current one finishes. It will only execute the task that was + * sent last. + */ +export class TaskDebouncer { + constructor(debounceDelay) { + this.debounceDelay = debounceDelay; + this.queued = undefined; + this.isProcessing = false; + this.timerId = null; + } + + #clearQueue() { + this.queued = undefined; + } + + #enqueue(executor, args) { + this.queued = { executor, args }; + this.#processQueue(); + } + + #setProcessing(value) { + this.isProcessing = value; + } + + async #processQueue() { + if (this.isProcessing || !this.queued) { + return; + } + const { executor, args } = this.queued; + this.#clearQueue(); + + // execute the task + this.#setProcessing(true); + await executor(...args); + this.#setProcessing(false); + + // continue with the next task + this.#continue(); + } + + #continue() { + if (this.queued) { + this.#processQueue(); + } + } + + /** + * Adds a task to the queue. If a task is already being executed, + * the new task is queued and executed after the current one finishes. + * It will only execute the task if no other task is sent before the + * delay expires or before the current task finishes. + * + * IOW, it will only execute the task that was sent last. + */ + add(executor, ...args) { + clearTimeout(this.timerId); + this.timerId = setTimeout(() => { + this.#enqueue(executor, args); + }, this.debounceDelay); + } +} diff --git a/🍵 lugit-theme.code-workspace b/🍵 lugit-theme.code-workspace new file mode 100644 index 0000000..4f76887 --- /dev/null +++ b/🍵 lugit-theme.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + + } +} \ No newline at end of file