From 65233432b44bc3dc2b3eb3ce9d442b9ed7db0843 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Sun, 21 May 2017 20:31:54 +0800 Subject: [PATCH 1/4] Use sass for styles Scss files under `styles` folder are compiled from `public/less`. --- config/webpack.config.dev.js | 5 + package.json | 13 +- src-react/containers/path.js | 2 + src-react/styles/d2h.scss | 206 ++++++++++++++++++ src-react/styles/fonts/OpenSans.woff | Bin 0 -> 21956 bytes .../styles/fonts/SourceCodePro-Medium.woff | Bin 0 -> 20376 bytes src-react/styles/generic.scss | 194 +++++++++++++++++ src-react/styles/images/branchIcon.svg | 103 +++++++++ src-react/styles/images/remoteIcon.svg | 65 ++++++ src-react/styles/images/tagIcon.svg | 64 ++++++ src-react/styles/styles.scss | 119 ++++++++++ src-react/styles/variables.scss | 32 +++ 12 files changed, 798 insertions(+), 5 deletions(-) create mode 100644 src-react/styles/d2h.scss create mode 100644 src-react/styles/fonts/OpenSans.woff create mode 100644 src-react/styles/fonts/SourceCodePro-Medium.woff create mode 100644 src-react/styles/generic.scss create mode 100644 src-react/styles/images/branchIcon.svg create mode 100644 src-react/styles/images/remoteIcon.svg create mode 100644 src-react/styles/images/tagIcon.svg create mode 100644 src-react/styles/styles.scss create mode 100644 src-react/styles/variables.scss diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index 109b5e2..bb8712a 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -111,6 +111,7 @@ module.exports = { // Webpack 2 fixes this, but for now we include this hack. // https://github.com/facebookincubator/create-react-app/issues/1713 /\.(js|jsx)(\?.*)?$/, + /\.scss$/, /\.css$/, /\.json$/, /\.svg$/ @@ -143,6 +144,10 @@ module.exports = { test: /\.css$/, loader: 'style!css?importLoaders=1!postcss' }, + { + test: /\.scss$/, + loader: 'style!css!sass' + }, // JSON is not enabled by default in Webpack but both Node and Browserify // allow it implicitly so we also enable it. { diff --git a/package.json b/package.json index 0443646..8b439c2 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "bluebird": "~3.5.0", "blueimp-md5": "~2.7.0", "body-parser": "~1.17.1", + "bootstrap-sass": "^3.3.7", "color": "~1.0.3", "cookie-parser": "~1.4.3", "crossroads": "~0.12.2", @@ -55,6 +56,10 @@ "passport-local": "~1.0.0", "raven": "~1.2.1", "rc": "~1.2.1", + "react": "^15.5.4", + "react-dom": "^15.5.4", + "react-redux": "^5.0.4", + "redux": "^3.6.0", "rimraf": "~2.6.1", "semver": "~5.3.0", "serve-static": "~1.12.2", @@ -64,11 +69,7 @@ "superagent": "^0.21.0", "temp": "~0.8.3", "winston": "~2.3.1", - "yargs": "~8.0.0-candidate.0", - "react": "^15.5.4", - "react-dom": "^15.5.4", - "react-redux": "^5.0.4", - "redux": "^3.6.0" + "yargs": "~8.0.0-candidate.0" }, "devDependencies": { "ansi-color": "~0.2.1", @@ -122,11 +123,13 @@ "jest": "18.1.0", "json-loader": "0.5.4", "mocha": "~3.3.0", + "node-sass": "^4.5.3", "object-assign": "4.1.1", "phantomjs-prebuilt": "~2.1.14", "postcss-loader": "1.2.2", "promise": "7.1.1", "react-dev-utils": "^0.5.2", + "sass-loader": "^6.0.5", "style-loader": "0.13.1", "supertest": "~3.0.0", "url-loader": "0.5.7", diff --git a/src-react/containers/path.js b/src-react/containers/path.js index cb2c1b0..9977ce0 100644 --- a/src-react/containers/path.js +++ b/src-react/containers/path.js @@ -1,6 +1,8 @@ import React, { Component } from 'react'; import { connect } from 'react-redux' +import "../styles/styles.scss"; + @connect(state => { return { ...state } }) class Path extends Component { render() { diff --git a/src-react/styles/d2h.scss b/src-react/styles/d2h.scss new file mode 100644 index 0000000..199347a --- /dev/null +++ b/src-react/styles/d2h.scss @@ -0,0 +1,206 @@ +/* +* +* Diff to HTML (diff2html.css) +* Author: rtfpessoa +* Modified by: codingtwinky +* Date: Friday 29 August 2014 +* Last Update: Saturday 27 September 2014 +* +*/ + +.d2h-wrapper { + display: block; + margin: 0 auto; + text-align: left; + width: 100%; +} + +.d2h-file-wrapper { + border-radius: 3px; +} + +.d2h-file-header { + display: none; +} + +.d2h-file-stats { + display: inline; + font-size: 12px; + text-align: center; + max-width: 15%; +} + +.d2h-lines-added { + background-color: #ceffce; + border: 1px solid #b4e2b4; + color: #FFFFFF; + border-radius: 5px 0 0 5px; + padding: 2px; + width: 25px; +} + +.d2h-lines-deleted { + background-color: #f7c8c8; + border: 1px solid #e9aeae; + color: #000000; + border-radius: 0 5px 5px 0; + padding: 2px; + width: 25px; +} + +.d2h-file-name { + display: inline; + height: 33px; + max-width: 80%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.d2h-diff-table { + border-collapse: collapse; + font-family: 'Source Code Pro'; + font-size: 12px; + height: 19px; + width: 100%; + tbody > tr > td { + padding: 0px; + border-spacing: 0px; + height: 105%; + } +} + +.d2h-files-diff { + width: 100%; + display: flex; +} + +.d2h-file-diff { + overflow-x: auto; + overflow-y: hidden; +} + +.d2h-file-side-diff { + display: inline-block; + overflow-x: auto; + width: 50%; +} + +.d2h-code-line { + white-space: pre; + padding-left: 10px; + padding-right: 10px; + display: inline-flex; +} + +.d2h-code-side-line { + white-space: pre; + padding-left: 5px; + padding-right: 5px; + display: inline-flex; +} + +.d2h-code-line del, +.d2h-code-side-line del { + display: inline-block; + margin-top: -1px; + text-decoration: none; + background-color: rgba(255, 255, 255, 0.2); +} + +.d2h-code-line ins, +.d2h-code-side-line ins { + display: inline-block; + margin-top: -1px; + text-decoration: none; + background-color: rgba(255, 255, 255, 0.6); +} + +.d2h-code-line-prefix { + display: inline-flex; + margin-right: 10px; +} + +.line-num1 { + display: inline-block; + float: left; + width: 30px; + overflow: hidden; + text-overflow: ellipsis; +} + +.line-num2 { + display: inline-block; + float: right; + width: 30px; + overflow: hidden; + text-overflow: ellipsis; +} + +.d2h-code-linenumber { + position: static; + width: 52px; + min-width: 65px; + text-align: center; + background-color: #727a83; + color: rgba(0, 0, 0, 0.5); + border-width: 0 1px 0 1px; + cursor: pointer; + overflow: hidden; + text-overflow: ellipsis; + border-left: 1px solid rgba(0, 0, 0, 0.34); + border-right: 1px solid rgba(0, 0, 0, 0.34); +} + +.d2h-cntx { + color: rgba(255, 255, 255, 0.3); +} + +.d2h-code-side-linenumber { + position: static; + display: table-cell; + width: 52px; + min-width: 65px; + text-align: center; + height: 100%; + background-color: rgba(114, 122, 131, 1); + color: rgba(0, 0, 0, 0.5); + border-width: 0 1px 0 1px; + cursor: pointer; + overflow: hidden; + text-overflow: ellipsis; + border-left: 1px solid rgba(0, 0, 0, 0.34); + border-right: 1px solid rgba(0, 0, 0, 0.34); +} + +.d2h-del { + background-color: #E86756; + color: #FFFFFF; + + &.d2h-code-side-linenumber { + color: rgba(0, 0, 0, 0.5); + } +} + +.d2h-ins { + background-color: #66F27B; + color: #000000; + + &.d2h-code-side-linenumber { + color: rgba(0, 0, 0, 0.5); + } +} + +.d2h-info { + color: rgba(255, 255, 255, 0.3); +} + +.d2h-code-line-ctn { + .word-wrap & { + white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ + white-space: -webkit-pre-wrap; /*Chrome & Safari */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* css-3 */ + } +} diff --git a/src-react/styles/fonts/OpenSans.woff b/src-react/styles/fonts/OpenSans.woff new file mode 100644 index 0000000000000000000000000000000000000000..55b25f867099eb26c436b1c9fecff14a51290d46 GIT binary patch literal 21956 zcmYg%V~{946YlD)ZJTFp>#S|twr$(CZQHhO+uptVe)s;ksd_5uXS&l}>8Y7aGI5a+ z76t$W_$^9<0Pz3S(UHIM|Cs-z|Gx+eD@p+X09yWX*#AMZ(hWyOftKNy3;mU~exaMk z-2-c2rDyxgo&Lh~7xj^+n`s8lj`#ooz_PzOYQM;blR_^vwl%T(C5CDLO{8xwZ7c6fq z$m^!RcHozD&eZ>Fj zt5sdsOaooxJA=&L-tpc(j)cj{P9%neLq$h0E&dX2QiA-05zC7W!%e)U?3n{5tuse_dT; zUtJ7PVNiHg;6r-#B!+&Ca@ZNdveD-#Je0Dy)zH~1Fq~KV1R9|$51HQo^ z;F$875B@}2LfaZeO7i(bXaUYrQdL@BVrOb@a&>xs0{Q>zC(PI1M~s)BXQ;QohYS}V z|66W;j+w5$&e87v4jL>xOj>MwjGC;x%+l=q3>z&yO;c@sjhn5#&C~7u4d}<;N06tt zhY%+>M_*@m2N4Esb(OW1U^1!EX*yP4G@(+h-DG_A?u5l+z1?oK5q;(1e6uwon;4(& zmZz`B&my3PDlkG7tPdLeXkU9_Z;q~fX)ZYpT<2hc5udJJg2!XOf4JsQB7I}XHfsBJ zJ|w}HHqLm0q3)jU(eX|ud6~fxr8l10)&PgYtv%XnTM0=H15hI25&b*PNP6%lw+36F z#1d*Pb=gLIfK<59gwRMB=-)knckqY22=EY#B%dbZKP^A%KRxd)h~$KKHgLddzQF&S z7?~J0jZ*t&XJ$v}67mA_;^K1hpa7(}@qYf7Lnoyfg$-fkZ4^*wbV7x3x+Q`N>&t%K z6vy~xJ_<{#u~nx9eP~9?Q+`5H1NZ$zf#R&Ysz}kF6f%2y_M>%ypAhVI4R+F%$F3wP ze8weki=7wm>z8dB^N(Bn*$tMMUY_^7H?M+jt%ol2BhIF#x2s{+3yTUJpQj_V z7Zo1b6jWYH)ax;stqv#$w~y(`$HhZIXHQEeMtwVF#9jeBVMs!qh(g)|_cr3splTJG zw|Z3nP>@|Rg~X?JKSK~gWZ6L(M_^d~yrTp-Dkbx>YU(y>mQ~QASfKCw!qbO<b{$w%aO~ z;D1h=9RET&A8OJy)nogj#2+uoKHTw`xeH7+d63t&Of^RnD404H#zf|b%yRahy$4|u zS*5yNv@&E*MKmS#u0mFp&#@!WsSC!>UK9gQ!?X=HBN%TN=TL$nAwM+eOX;JBA4u?G zcgl1?q4VL-Jsmm1KQocTq5Z{loRqn)$rVA?ACTr+kW`H;p(CSQ*($34OlW4I0cK6D z0D{7U>(m`$JrRGkJ1ruSrCOU$x$Ns$857v+bnV5h?EP3ww5zKtQ4fhY{N^Es1-}a>Dq6uLc%U3mj~OkUeS@Uki>6~xaf)@qz5%*;y#+7$f`+pvCCoE(Gr2BS4Jc z2mYF8YcbZ*f9a_a=XrdF|E$*9#AqzB-qb67a;>442&c!5Ig5Ag;bZlVV04-K&6#gf zJA7dq2Rl?&T??oDqLGSD>0DMQLMexfGEEXKl9}BcYUFA5mXyVac`Zo7 zbDH2Di>6Z9HWtuOTgvrFM6dItbs&cm`KkXw5c9|K#W~B3VtSm&(=RiwM*>EEw$7yW z)eA&6jCfHFT{6kd5z9~hlOkOz&2s{+vkZTNHqH)2FfzASG+GKAS6fIl{TLffJ#z!ZT{hT`u6jVGdMN&rk4xC#ZC#LVZr*Tdd(LI zxVM;%8t{e1${1PRo$#BGvP{?<{5Nb*M-f9wM?x8BgV3F{Zx9%B5PI(xea(IO1#6q` zD{!?Rhn(|yHu#L<^tV@nr1^*92aMu{fa1TG8Xy2L05||701N=w&kq2cYi5uqn69GG z`)i^~^Gm$c4%JvZ2>6(>f~lH1c-|0ttdM&`{-bYbs4pO)l=>-nC<1T@b}(TG_+NZN z!hFIJ3ZJ2YgG06_E-1s0pO@_oDHigViTX7Xo9)S!4bKO7eynS)k)=-p!8kx8P)o%s zQfw0@y-FgEJRR8+d}I_9qjc(0I?@Ttz98eAnac_52<}A@2QPNm4yoJ1!oB^wZYUk@ zwQ6$N)D4)LJua8?6l52ONAiE6xqsCqo+m6q$tiM06c5Qux$>Dq2QqnT(Wsb(a& z7h!BP7wtVc#w77lrtu)XWF+S`(kDXTUl=D*LgHtK`Fxb*JF^629cMs|8?dZ8^S3#mOhB?e4NlDkL_8r}|c67Ox$p{kG7Fkd0Gd|Ajco~;7o{YE6 ziZF4F-oibT`}->^2?PMPBpKsvVSUDPIrbESSNEwBckWvnvJD(^RLl6QFi z_FSQVOYmO#AFRHGpF=v=d5U3l1SGWA-Pjtx&D&>c)s+HOV17q8wAV&B5^QkhBprCo zd+=1JhFqxGoN>oo4WaPO1-+EBXX)~fk;60z8vuLPurv3K*L{1+=s51g4vgziUE17FA96lIx*X9iBN!2+O4#BMo(q z;U$^6kQwB0z`C57nt1uRge^%uW+p?VN8`D#o!Voz5S%XbMbl=zx|vz(N6O* zl(}w~(r8Is{*%*%_^v;DC}(gtM&jfAeUMIOCSi`sGw*g2AJjn|a{hJ=wPB&Qld0!0 zoCu;(#~!A5$<2mC%LKz8DsphWg{b~;5{tPOhebCdyah}h8@9rxK3r1RXjW!sfoSik zn3Gr*qOxI`XBA1gM4~PP&*q9Ub}DYlyk9bk7aBu5VtHQ(-buCUiviA_{GEO>Bh_(p zV}9Ako6OT`u`*Ef`W0o7Vx`^UzJ#i&p)MzvuWMhezK(U-FR}8@}k+}_Azn6+FdZ_BF^8r7m{E0VttqL`XCC$ z_C6=z*Q^XC4$p;=X2qc40c}Qpor8F@%0QQyv#I+>R* zi40t7%nrp*MM7;ITrrp{t=c!9o)7~wXzfr4M7aU~hkMov!KMF=hfqIe#g{~ANBMsA zlRgFpTzdO+Afj^Ru&;`xfi-#g_Vj#ns|wTP`ztDqcS-Xbt)=*5 z)3588d(&j_wnKw;Z)?lnfKx?zN9}fdRgZ`adHK@YXlpP)VD(bECQ@Ig#z+S{mF^WO zu-1^#HqMgKG6bOrTZUM}PP>jTJS|o#P#=fbT~Bd38i94QK;#ZEE0hU)A6mFdrM-@P zd{9*?*)s>ARXsDCNxs|dX&OzrN~_&#iZniI>2<)1Ol?|br=gSe;?~S)JDRSBhJm)k zFDyupNZZ1k zM`o;CvXd~G`qSy=`|88TFaqgzU$SrbFBzV=zDUSEM5Qq~jWh=n25r(ZPDr)G*(N8x z3N^6upq+X4%2`<{;)MTbY5(6uX5#$!sAJsAv^4`zPUGjeBUdP_uEeOJjAZ$f2TOoz z58Rs|w}{o6R|rR}ve-BLm_=Ptx#UTD0JbHH(Z#V5fv7s7FNXt;3mZ<62A$%l0rr5s zZAi}`SJ>~wBd8sVr;aO>S58l(0njw-`k8;cK%ex0Rlc#(HN{{4=3wz8 zn#nPrp`ZSv)~Bkg)eb5DbXFj=I$Unn+ge4_2SBF}%c*ph2SDt&iUtw&Oq?~uYQ~mk zo7Ba!`ys_2}KlS)@KRsOKSpUr5Dos_dJ6)K&EXC5QqIlrW3@qF-x?*|+R~eJ7p{+)23{WO% z0k_5g;-3KE!k8n_l_4nWRYfaA5Gq5lfr>f9M7p}Vscv1-pB!V=o(}QYTbGPye~j^U z+G3cf(G6@H-!NrTEI2T|E-Ka*(S!nI(yKNSQl?(5vLzI&%o6XXZu6U+gX>Sz>7T8} za3T!3hiV6H>XKbr(=_FQ&+PCP=?*c*bThf{ezfp@o+Qt#Lfn6eci#2}qv2LpUeDT` zUrT@`*Wd8!n<$1y!~9tv287mLWS%92RTDyx6A9NgO_R=oEh$i$JzFd+CVhr14##w; z$t@0>m)9lq5$q%7EETkDvAeEK5NFBQ#PumaKB zsm-IU+;4}A56m;TWY^p)BT!MveaB@nHkMYxk8)%s%U+ehzr+6 zH14;R*jb2d{_Nu2p*;LVrQI&_r;KOe1@4JuyM|WMlx2v3Ku_3LWHv~RfU8xrS zn5Y&@(v(=+D;vn*KhfF^zX)gk*(XTI9wIHIHG8%W7&m#taKJLjYvehLq-_+?PXuZ-@4$w&#ugCcFqNhlUn9wZd4$qM5nu>qu!&jl(`;7@g^}FIYN6f%T z5znC{vdI42=}lw$o`tm{z6_8kaK2zXZPjpW6>gMN|2&U5Ju`k=4=pcMfG&YdEXS6; zGIx%&&kt4CFL>Da+`@E3eDu7$S5%lwpds@*>t+%r^sY$emI26BKs;~}>Jn3&!T2GE z%jN51(8)4FC(lLO0b#7$W@W=I-9cbgTx$Yc0NFvN&>ZCWujlgkIhN2*Er*kqE-BJ& zME+CO=*!H`%-*C-&8`+`U*+M?f^vHYiF@?`r0v}Cp~O{>cOW4aOCqAjgi!7^I6&^h zy}K_w?DC;ecgPL)x|;#beE3Y*nQ}M!YG0?esnH1Bn9`zu7)okTzB`G&cK_s?`SwY3 zI30g8a7lUMW;+^Uy;f?L_8HVBcHk!*@jL$eF1h$tsH}G{px^FyPBW7 zHxYMh8ql^l+lsL@KJ5LYQ$_PL+t|{>|H7m0awTT0(RLKX9Ak~G+8vC_y11@9>|gzk z>wSoa=M|uYwWhTBJX(#WP2<(<`sr84a9NMHCp>Y7vg&|T3ic1Sq;H+pl#aPQF_at5 zqu+E!KN#ec2anM~y0IkBN3B!Uo=xyMN~ty((ozsoG(mf&Vu__{uI~SPU_$cs9@~UdiZ@X%2JK$a-Dt;&4Q&tWkUKrx=0v4kYw_`k zqODkVs=JslY=9yr_1E!n67E!)3pK`qAFRBd7f3cYCc}~4#NfD6HGYe%B(P`A_FDpc5e7X-$%{*}Z-3#2o%+Kod5iPnsbd%#%+kdUp> ze;ZJ>)5O@Bs2eEu0zoFxvJ#nu&+A!SiNpc*0tdvdSkz|3pkyFLF5|T(TcENHLHdND zTwqQ5Y`I}2P9a4=t?^iOiYy%1eaj&`5o3n1tJ|DoyQZD#HACGry7Y;5Ls;)d`0}B9dj$1o%jsyv(2oSC4VhxI z`KfK__~3)tA`)}PVC%&?6EoMTm;ThsMD;a-+g{uXS&CA=sMvVH#z@{$alG2&fM~gt)f5az>GFq|nn(_|XbQlgKou7(!O&GXD7`tB8 z&C4vdBr}hR-0u9Pjz)aM*o7e;Cx6dIiqcV8v z1g=i#5+yTK;aWP*UyiCu!Y9b7NgkWXlqpr<@8sE|f4hk+JRO1O41ONEBaQ|x`iLkW zUpHaTSq%)DnX)M?2Ijh0`K!Q%n!D5~Xt=gSls!;gtcY%TzhXg`4TXfl7o|H)FKs7i zwlS<&YlN?S@bH&e5aZv(7Vw^Fb<1#VS@{5TwGwtvuH|*6+$J zAT!FPm2-gCG|%I13(DpjaoTjZuLKN>){q_7{u2kv6^3G&YZM=WeNqHTZj@a6YA9D= zInV3WLBctvsum83lc7&3^!?qEA!7I}noNoV)dPWO9i31dGG#{<)7%;dMO*yHHrDj< zo}GPk7W}M*(%%3%DFixze$q6KxWVYZcl_CS*DVn3d2ZbAk?xh(AQ@;aVUu&}5>`lavu(`=% zJTOYk2{^d=0>Eslu=-A+uYkG|NWBb$h{e_)YaC*)*PabxZ7Kk=aVUp0!b1;0gT3zj zHVp<*X^^q(=&|^IWPK-8ojH%I2elGrK)t7o5@%Up3k=5c7|r^Dw57Ks$|kb(I5z8# zVgs_@vs?18p^`6GT;3-mbUQ`u;Sfy_t4lz9R!shSEE9=(l{11VVa%EQ$<@UJ2vM#VUi*vTf$qiFg(QZ% zYpYI%>mn|Pw>h{%8o|w2y}!Qi8b;W+Qhs0oN&eYYxKyem6a#ONEcAh+60ic4H39qP zVb+2x(w=K^2e?Z&`qTR!cAPpEu!lDPAuR(B8R9LTSi#%x>#4nXgDaeBu~b7-4v-l8 z$(3Eb4wzvNbc9Dr0g-<~N6K2KGH1q=lVS@|r~*TwhBG6>9Rj6H!;de zu!jL+X$lhT6Ql&WpjXb8kXj&-4*|X`4=6Y{1`2}AK>NccV^7=^#MDn|A`z~YbRQvj zDLII(_w$;~OojD0*4o~Mqf-67%j|qt6Y>T2LbWX`tK@Yc(|Ue*qUBQ5l+N4r5_-Rx zeRJjd)K%ZqWx}=WF(|NhG=kh=0*DCOpWbPgt9W-2NN4U$?BeT>c>ta+PucUp=s24k>N&{!YyqrelqMZ~C6o8iI!mJ(RYeSpk37 zi&=s4_J;g!G5A}@U<~>CuFjy9pq@nty|PCSZHOPvA~!tl~2iaEk&FBIhZ!e&BC24$f4Wq4L zx%}6`M}7go>n~jc%0F0xq++ES_(BJcm{IK@N>9N#E}?_w1t&!A84he!d1wkbXA#Ptuesv z;XC@h16NAE##5kJnoYM;wIp`lo;Mg*XuO~62$2^2h9%ni#Jvqcd z9wQQZ3D4%GhW>pW_m)=CN&>c3nEm}S@$>!NVA1eMsM3*YRk6|9X8m+5Wue_?whCUO z%=z)uH{#R5d=Ul5%{rsmb9-kJWvlMXql_G}4i>M^Bu!nU8+34xxxSyf5C+mmiZn4B zsXC_?N}Fz(404&=Y0|yrYZi{*?&tCFJGh(;wI4S=xwjPz3xvYGAS*ia zcs`3z^Q1^J<<%Xch;++*Z^#`jjrn2vm!c=lIxiNxu!p=xzJAu{o`P%))gV#T#! z=ad$7cKf0Cf4s#8g2&DxQiV+VUZjDGt zqh@gT*`7dUy*yT2aopOSn8j?RSFdQi8 zHX-YKk@Th1sMTzy^k(q#8zc(b=yk%4I`yi?LZMT7Q*arS?N?=geBA4rm5auB*bXk$ z?9JyKMtGpQfYr0NdvbRQY`l=~CGI9M+1JwUuD_1Gk$hYa^ z6vyWh<+2dQ@*p3ZTQ&$)%0ZM;xHnDeU3IuzZ8Vq(89PunKlub&v|8wo3=+f*p`?=n zNJ){yF#!I4HY}BcM61{tLk%{PCWs3ORb^o&p%X$W)5r^!(n%^)4T;X<7NL_;RgYqa zie&3=-7Ym)UT9E^>|)E+oLEUzb11z|B(6#u_;gb5xe#E zYNJA{)tSHg{-rzf*Qj%=lsxuw-afxnyuOr*0#`aBQrN?8)>Ix#$&S2xY!!`}L@Y|2 za>K)RIhve76jzhsRZd#NezkplNLne^dS2(}Y2a#$*-&9C9Ea2LYdi!_7bj>lo!{t^ z@fmN-Z{b2@rpVjlc=+R_=C3z|?o`TI(I9#;2v}5X=?GGvU zU)b}X6ksJTQ|W9(_^}MFsBR`+O*{nAopqScWEB;gZMK($jUAuoB}=Ete)THv_e$Ut zd7Dn3ul^uP2?B`ae>CgG)yFMxwDJgJ0V z%v0@rgl~p{o`xzj&ePUyN;b>N8cH}X_5n^AkvTWuOAaI_q|>2?O^zIu3qY6ro$)L8 z%fp?`Y^QV(id*DDYCef;kWv}VZD!lHKhh0@$xuN6@Z9OEY| zAJN+#Fs^QBw4lO`WUX!pP(JN*bz!^^O^mnyBuv3gVKDRO&(X}*{i_B!kS@gWb8RR9`O?0=n#=*i$Ua~)8TT(&ETLRm^-68C8#)2tV6Zs{_EiwefhwA zJchg|4__n|t4bw?YB)NdpG8MCZj{w@T&_;4&DO`W#i~~?UNqI5S>@BxTfEO@b7h1! z*8hyAgN2$tl2j{KS*fze&szpfy`{01AN(l=3blI=l>HZDCec^z@K0!e;WB3B{5m^d zt6O`e;kfW@$N^>pJNraqyUR3wQ$X&Pzl2Bis&K?|j5heW8n)cMCT+ zCs3SA3L*G{@#rt-zm@= zi=!`enmE{G&WZDC?Vj8DFFgZOG$U3aD=zh;Fib2qJOnRp+oi0Zn48 zE?ui@daB_IBopRw@sx;cl4gyLeK6u1-lUunU$?yf_Z>ln~(PPDO$S}j59`B(u?KxDhkO= z;v=TuwDXk4kD#Zzr)F-gaXcqGyYTjni3C9n9_E=7DK?l}`Wy&ieu77q6w?u$M;1Rk zx3Y%8!iiGZlACh~tWZ$5e*McebN9XJ0w&G+m3l(;>VVZ6Q1 zCxc@8hH!7a#s*7DEPd?G8?!oy-$?+!3c0bsFyT!N=tI@3#6~K@($6hHJ5D3#(4q6? zYE{YW*Q1t+De2XtlyRD&+R;fOQ`*M}2$MYqe@r8E%HhQwEiD@pwO2*NZ!^6t*-%$G zTZueO&^*vwd|CAkU}G%~?SV5?SYy5doo@Ld2<2G#%Xu?rmTY75}`~{SZlIH&UUTpmQY*ggUzL1fcnvs!u zdQfoKXdIgwo1TX75qAomd$EStO62xV1Y=KLxhNd2EF{iYKRtYa0>Pk%p2e3<{ji z>Tuoe2XxqorttnKpxt(NHtra~TJ8x6>89=4G3MlL?{)5G^v1L9a>1K+wZiM@^uhbM zWS(xYS-8%s%4r_@xqTbT;hcP|Bf96dJozY5y%IsY&0X-(Px)?yE4hK&AsthuZ;C7X z#OUROI0D-5;Kvh+?1Q1B*o5YKW?z7MX$fOT6gegTH^>yo6ei% z!q(E!i)Do3smoqb?Bdjp7@u1lPPGg`IAfuFDN}nFS{SD$-aVng+r=J$b4hiuY+QsL zmrmku&Wyg3D+R9VSa-izk|pci{?pc)baMfiHr~o3^CeOpq-Q?T9XU-dQR;yIsDlx| z_Fo4P`H@@W^c;yAYu6YK0p8v6lesRBxNoxv-$G;8YPo7fy)jJ0TemFmdlzY#`687I zDrtfqJ`?{r(2BnNdQ56DRG{Y_aVq7ACqH>o`aJgIa0G~zQrB6-ijeV)LiXq%iQUnn zkqKdFbOu1Y)18y&Yp947{ch)nEsLL$(Kt>xFn1?yc^0xbrTsWdtgHs#toNQk*qsg{ zzE6ruH{Gusr0eg&Gms6gSU)#Mx;B`{1bcUv-dwPa5D=A0F^7JBlKMgK*o8?9q4hC7 z{DQ8T&HyM>?7uo%b-TNd<00e4GSoh<94*Fuc>z$A%F2thR5>h9d*NjZ#A#R|wVMgF zOYO4V*zPP&n=u7sYp2D<9-p5NiwH|DIa1<2Y+w6a6qVRS?x{Au+M@cC4V0r&%ji9_rJ*V^GD3 zRX*QFstZz(N6g%%bg}w}Zi3Wdn0Z3wMxjp-lxJ2$>K2(vs#WExF7et&(M<8s7z~AG z2S_4mUTw8$VLmH)QpG7Q8$O0F!59|Dn(xi_%LWDG?apcPvt6cZvm_dAHWRoG##f%s zMtzyqoGMb6D^&(9k~6u>ZVlHPJ#qq_Gu#!?+dXlxO}=)>+^y|bhlej3S5T72-j|I% z4P6g+nnl-t+QeB$v9N!C)j49uOoC9WVo9PNrdW+?X5)@KM?4qp$7qUKS{++Yv=#>! zb|(X^<)&Sx30so<_L$;}DsD!dF>=}d6qIJy!O*PB%7RaPDyavxW_z_Gx(B7gh7%*N zDI#qUA5tKSAre`v&wu+%ku^eO72Z-;L1Oc89cxU(bKZ%DSG0ck znw`E>bFJO8cLeX@xcS-_Fv81{n$dZ2JBLGy!`1je@tVfyP~2&Z@tUxu=L3XUuH@hw zD#~QO7tq?$Pnas(m@1SqTXbi2qH$tg*G(^ z4V>-S9_5wBh93$gF+SH2AP>Wi)j3<;3MrlxY7g8^&HDdpc>WZW6gO#ceVS_Bz3RFx z_hJad+aB*hpFfoq>w!A z4ogdzaZ0D+)d#LVeI1f>V{r&0{#y}i>G++}OSUnyZhD6Cl7f+R9{Wdi_2vMlE*Pff z5DE^fTvsKWEi*{|3@}L5c88I^#H59VC(=KI#jrcwR5Or1f76#m8Ia;fNNV_RMKvDv ztyaaJm=*O7WGf%v4K$0Q?hBaYHX`fiA_RkMMonK2Y5F`ju>1SgxY6D_zWhuH*YFq zDlN|JQaiC$UAg8w-B=u_EV{Snv}xT~N|{Ue#~P93%L#U>c1ndqXWAY-YlYdB&;)EMEmnt{FCo@*;` zQ@lvkcEa6Q7{@9_8 z5NerpeTUbWv^_U6%;Ppy!SpxzZ~r&>xiETK_re=e*3n!tA-C#lQ%($({r_5mfZ-rXV^hMBo0zj1r2LL&r5Ob?Gvj(I4~~G zKEIo5FTA~%!CKpA5tlb#-`J6ebD`t(>?Va!{MGHFoFZ~1hVe(->SHzb)k(lm`|gig zEYDXfF;Z0P^7e0gVh_PCH*=J=hPWL{A1$=JpWz>NcaQtk*N2h+c515(ns3g!$1N z`B!ATXmnnfJEnc+T)!qWd~A7r%I@9+YvL-mt|r5sS^HFf9{`WEo*~h8Rb5pP0o9f?9U`^4K`WDX!N@fOH4LTU z0W1L!LYSI|Ti>^Hvma9RMRbTsXnUu}v?ZPV8NOSnE`~8vSV_U-LGYDK7tmixIBE13 zK`HhUGm)CN_U%41g-Ac(PD*>uG1gV+wbsxbEH8Nq5!&tsJA-}|&NiIw5#8(_Wyzs4 z`;|B~6^X%hjz2^Lps*%CU-pC*kFG1lZ8p;xvMt`Kw@Xq5f=fumCC(ekTjAL7EvkxCWM55S-wB?3X(}y?x z>BShh{!`ZrME0?cetjsD{{c8GpMPtf=PTBj9U37L6~_i`SRyX%qFxdk;-_{>)dD3N zv@}0&)LYLltKvh%s=espl?>ye5ar=No0NID*S+p~gI!zIC@tI>&n9P$-}*X|a7K#o z`EYM6zvcSKJDKVe=&-@?=y(Z&p}ncz>DTtKI;!VSS}b+m5Lj0qFy=8F_4ptlPg znCFRJ3K#0al{g`&OQa9D7B{M^EQN``jT|3!&eR}!%RcYDq)8h0ZT1`RAG2i%NG*j8@izr<@PlPA_kLHmAc?G-6e7khAeaS8z_2b5XE-d} z_R=^Z(fIrfnCS2n9Vj+60nw~=`B|0^s9BhK)#7~weyI>%MJMtIP1gLYl)BDsB{Es) z;SPAw>0S+tiEQwn2@HUoPK&z7zW&%3$NcDarP<_n@!3I(gvi-I=subu!V>=n2ev*4 zE?mJ3cs2zAlyk|Vj(^NVScQ5oNDY&76n248h-zrX0k~92#PF`05zhq~H()tk49#Hg zJ(o%9iS^F_tbuhk!j%p-5=Rh*VD@$vWxgbD!{!oqxJT0M5CN-t80nU+bF_>&c~jZh zPb*HkskLok+O|S{@^GATHggWu&CM6d{i#&uKF=I#rYy}gZ6>2A;yrh}tpVd&iAl8nl; z<<_&rnJk;#gY!^nZ$6I`7o&Br+GBu{)@t+9{)(e|q*I9_{xkEc1Eax~MVUW(&V0F% zqG63zC&r|q7tA9;Y_F&yNBeVsVTO07$!de9>?^h7--{nFy=d1xAp=I!W&^0%#b1_A z7Ze)be*mU0q9JD7s;oAZ4a;|fn`*!n$y{7nAKqgPXBbLQnQu^NN8=|cw}z<=O|mF! zNDbf|Mb^d53aPIFU?`J=o5NZcTN^sKQYiLzh~<77gW)>!#c)J@TfxQYUGJ%?$L?NYFTC6k>gU!9U`ex7f6z_ z9ijUmPqd4@zPP1It{`|y~l_JH>HOCX6@ta@u0lnFZz2tkoBCMg7s z$@=HhdWP0LN9NcFV=@6gEks;IW%T9*Vg*99A5X^$R?TqM)d*Kj~J^4g+d7!M81dn*sWBaoFUYr-4(HFZ$%%G%uH=Zn73;`Ea>s1eg0tcqr_b58p&>dzkV1t##G;hCLhzLq`H_}iad)_mNanTwf_ z9n?bXgct*|4?WcPFnCWtCuwe#7Ndi6?jQY?^+juZ!vPvv>${o;+LzL!ugkEvAiw2@ z3mK=fGb$Y2%$&J$OP*u92m}eRPoF_3tg!!`A2$3wL7bRrRQRk;pS^QT8NdYw44&!f zK?ErLQ}IdG+a2A7K6<393ls(fV6y__{{L)tPro{VL>WFSK2@f=qXEhNfvN!k5@$er zf3I7`%NT0PArJSs+_?EDqACd#%F*Z7gGbTVhtda^{=Fg;Hc~3kUqsiBltVFalxrAe z_-B|TB-qp;Qd&M*tUsA=K1g0vL6fhjq=ZIv|DLrWCPfsJ<8agVviULnvIXwLD+VZ> zHr$*gvXLXC%yP%I`funbwB04JnIcd0UVeyS(>--qfLN@_#Q%Uww>e5!qgm-z9d9$UJ29j<*oxF(b13=Gbc>`6E_SuaV4 zAa!59pauf!rl~8f1eB?JS#=P#7XF3;_14%SPJ`(w-5YooQC(B-xF1}@$Sco-0DVBi zBm<0u=pLc@QKbe$AJeWXAG|Bs2Lk!)Ok;`HdOuR%8=kj_Mhhc2oP2XjvK~_q@qSuE zj42oR0`t`=I-y@&=jAOc15(E~8oF^$68yL?qty0U>n2&(De#%3Cg(v9dLZw+30?^j z930P_shlr+gzunCMMEl%>fdV_99+KoNGSJVGQ8#75Bsb%0n9R~+ zSjgW1r72T6zxM;lT89m>iSwV^Z9XyfRI6S;gA76`Knb8K&{B%{XeLBzz$grP>ahRQ z%XvmMm34ib-V>z+2$0Z0KspE`1XPL;sz3lSAjJ|zDT9O(I!ZHug+Y)ef*?&m5tJ4n z2ucZ{l!&xYL;)f6$b|3)XJ*Ya^FE`W=DGWD{?B z+F)LA7G;o>QQRKS6jR7H7%OAi>Vp`$Hg#;T-4rMmy0tjTrhh1`9Me}4Q06mIQE7XK zT4YNpj#}C6GZf%DwSl{_%@wdhlb(Wms81OQt zj7g`$_a|DL|Iq3^vbS^RP?Qxh<|;9obD~&7A5Rl&j#4ElQ2^B8OnI_EZfig=XXTVO z71|u9LuMb1xNg{*M^Yu>cq64~#?(X#|Em17O?zH~;lBbRohYuPK+1J^yV!8uC?nk%uNSI#M*Zt2)o#yQ>CV?hFE*UGeMd^x z1fG;8prBx9S6FCf{#~Hq6s+pk3zE_mr|Ai8^pJyaoZI%c+IlK@(7ZlR*L+Man6S~q z3VXJ<O-8=R}??GzG^JX2m-A?@ti>Pyu%$^XX@qF zQtfa2f!GsU{xBIoPdV=AtFA^Mi{mGyCQN=3nnR`qoFaS^Jnt`@dKYCO<~-fP$DXcR z)gCPiJnZkD$owY~Th1Pj;?1sGV?5ldfs7Wvq2vN2^rU#b5Nvemc!Bi?&uDa<$94;vr^VhnIqNj|PwA?e-H0I8Cb*J4^P_=hUr!Vlp z7JorSjg}#qYoMS(IH@k>X3E9wp`^*%AZ^!E?|ySQRVC8MIh`qa0#(4LrEhA+&vhTf zWjWT0MUq}DP%N-#^(N9o*oUW7s5+wy4@Igt&r|{Q{QADai1Ez2*QIsiY;yLnw0SaX z80Xnm->Eu+esnRJCl_xK%vwp>CTllF8@{L)C)toM23x!lrQFoqn}zT3$Y*E5D#UMy z?9%^%oj<{9$mK)dGWuJ-Af&MC!y-ww|*pS$$ zJ(1#gdB1l%=`*TgPLN1WTwEX$K)kL@jDx(G?}0Ai8O7Ro#qh<>xvhUb8kr@xO*0s% zN&+>;P2xw$Y_zD=lN5d`xH%f9d$DckQcFgkdY+d-XIRQtvGt!m2K3DTZ-Lv;J;%*Q zi115@vo1r7j)74Kh&zJa`42f1K;LCq@fqX2@LX^~TQ7He@_;*MI;k@{TzSwtF0Tzh z$=oAMOm zU_L8tzpeFtk5>LLu~FOf`RbzK2aPKjqYvp9KVU{v9z#y)JwzLSNf_mQE`9mrV9H~W zdzX=={v{oGB9WJ=B`>$`dsqIGn|$PVug#S!NMYzee~i{ zKYFhdJ#6)W9&(K@U%V9vdHTd?IPi5n@brk}qFjGH6!9$%5E0SRLZSNmALJi5ij89f zd>`D6lLJ_Z+}F~&gnHXwm~U?Meef{f#OP+6AV68fMXLsd8tDH%xP*GwUzBfUlofXb za8+bftLD1^B63vg8tPMje}2A^QG6T_@Lhn9yuY(uwc;^}Z-@`Fp~1dx&raTr{6l=j zo%_|7!cI9!+^j*vDqPnuj5NO2_C@z*eNS!<2EkTf$RArc^2f%E{IMA!e{9moADb8Q z$M)-mg>cQy=FHGZ%O>BV2_5^Dtdi~C!9VcMu{dTh@SN@~(%(fI$u`ai3_P#{(L?F20LRp6>9U6hun zL*@6S$WM@M8cBHxFkXz}mcvpB(Z0Ia)8+g$OZ#A+ zz6BxoCQJyUvV~lFNeuV~+!C4&VkEatEZrb-R||QnwtoW(TXsv2h!)lNJXK%0B{d0P z_Q5YirD`Y7%67NJCO(Yp7W^9+@vMC1cC$$kqrBy^^qlBjy$_m!)i^e+JKH2% zh0ee_FxYM374-?P#!gB{*4wvF zmkO6L*A=d8u6iyCw;DH^yM~8@$C0O$hX7y#C<1%{xquG98c-0Z26OSE%7*xzw zELiNR*aCzBA_zGQNrGfUo>6VWo1V zs-)Va6{U|#!=+uMFH46?W2N89=*pPMILn}9LS>Ra; z-%ZA?;max?>~Yh{jt58L@1ox;15udaVDxP6=^Q1%%&TLj&WAL1o z>D+J`yHWvvx!{e#_EOAXA;?*Wl+#*y0BX9}A~Jv$N--=*(;bL|r=9B5xKOPYV{+PH zSn)F$-R9z@2YMYxEX{?d_=t3YmJ*fhKFuc&KMs+gB zsCbZ6ea&A=7r{!n#}et)t72xEOy2k*GP}MwO3cvLo7#T&3}TcEVl6y5fa5_uN!#2Z!NhcmHhq~ z_I>j?7r9b3J1-`OE~%2_mUX|!2;Q>Sa947fLqq680_c7Q=x6-psYW;;?BsGcFZ#CD zTH07XqkhRn%jQuO)>K+WKY+y(dOo&e@0~~uEC`V9BgRKbFKC6#Go0Afeh!}3NWTHM zvjnbWGEy6?IX^obdM;{R(;Y=D9W(W0#I0RZ@1R|Y%o`Adw^^b=iiaKy^lOi7$av37 zwc&B6J&KLSrb&5v0lC=?Ph^5W;B1W|Hh&hR6_N*kb6VOXa$XJ31#xCBYGv{<3Kf z@Jr{@5Y{0e2M6=>2nU2!p!T4H#nr$;giSa=YtYQgN^8h6K)LWz$uGmBsIr``qn{q% zCDeZ^%~}pM8?jdfYitgmJiEK0({e19=SaIPo=2z6tN?qY!+8d)(`tOz^2jTPcVdD4 zE{n+OZoS2;&t5^}AzZRVF?daf_2h2VkdLVA_OK2Hvf6EfgZTA8>cn(h)4yDJAwON) z0DZX<9X}y7hFPeVx6b%n24S7d4e?1&HTZC@RxF@L)9Fe0!;jtk35jPUCQpbTe%kJ7 zpa&L#=Y^$3M*7#!wO@bP&A3As?R3)@P*ZuB) zao#ajuxyJ7&bU2o3^%dyus4cLlS@diB-eMJB})o~#rQwgeKiEDuP^9Z9*~*lI8l^% zj*AiR;T*R%%JZoUrD1Lv8<6T1-nHvy1*t2lE&u#;>7~&tu%>S1TT2Tcl^N%3)9u`3 z!gs8vjK$aU4cyPJtO6x4BH&dvNSo@lgWlIhfgEhg6!XReJ1WNrKY783`w00ItPq}Q zRotvoi)pB;dg@=_J1{<0>*PodQ!itfcviRRf@SvVdz+aY(?jem3O+t}(?5M4uDm{d V`l^D1+v7dzXWE*Ozus}S{{vS5Z1n&D literal 0 HcmV?d00001 diff --git a/src-react/styles/fonts/SourceCodePro-Medium.woff b/src-react/styles/fonts/SourceCodePro-Medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..653d5ddca3297e8ca8114372debb5d74f43813d4 GIT binary patch literal 20376 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 .progress { + position: absolute; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + background: transparent; + pointer-events:none; + .progress-bar { + pointer-events:none; + } + } +} +.btn-group { + .btn > .progress { + border-radius: 0px; + .progress-bar { + border-radius: 0px; + } + } +} + +.panel { + border: 0px; +} + +.form-control { + border: 0px; + color: rgba(255, 255, 255, 0.8); +} + +.list-group-item { + background: rgba(0, 0, 0, 0.09); + border: 0px; + margin-bottom: 3px; +} +div.list-group-item { + &:hover { + background: $list-group-hover-bg; + } + a:hover { + text-decoration: none; + } +} + +// -- New generic classes ---- + +.container.container-wide { + width: 100%; + padding-left: 40px; + padding-right: 40px; +} + +hr { + border: 0px; + border-top: 1px solid rgba(255, 255, 255, 0.1); + background: transparent; + height: 0px; +} + +a.disabled { + pointer-events: none; + opacity: 0.5; +} + +.list-group-item .list-item-remove { + position: absolute; + right: 0px; + top: 0px; + background: transparent; + border: 0px; + opacity: 0.3; + &:hover { + opacity: 1; + } +} + +.arrowContainer { + position: relative; + &.arrowRight .arrow, + &.arrowRight .shadow, + &.arrowLeft .arrow, + &.arrowLeft .shadow { + width: 15px; + height: 30px; + margin-top: 22px; + } + &.arrowUp .arrow, + &.arrowUp .shadow, + &.arrowDown .arrow, + &.arrowDown .shadow { + width: 30px; + height: 15px; + } + .shadow { + position: absolute; + left: 5px; + top: 5px; + } + .arrow { + position: absolute; + left: 0px; + top: 0px; + } +} + +.droparea { + position: relative; + border-radius: 3px; + padding: 0.3em; + display: inline-block; + background: #2B4C5C; + padding: 5px; + padding-left: 10px; + padding-right: 10px; + .dropmask { + position: absolute; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + } + .progress { + position: absolute; + width: 100%; + height: 100%; + left: 0px; + top: 0px; + background: transparent; + } +} + + +.text-dimmed { + opacity: 0.6; +} + +::-webkit-scrollbar { + width: 15px; +} +::-webkit-scrollbar-track { + background-color: #2B3844; +} +::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.2); +} +::-webkit-scrollbar-button { + background-color: rgba(0, 0, 0, 0.2); +} +::-webkit-scrollbar-corner { + background-color: black; +} + +.create-dir { + margin-top: 50px; +} diff --git a/src-react/styles/images/branchIcon.svg b/src-react/styles/images/branchIcon.svg new file mode 100644 index 0000000..8a3c760 --- /dev/null +++ b/src-react/styles/images/branchIcon.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src-react/styles/images/remoteIcon.svg b/src-react/styles/images/remoteIcon.svg new file mode 100644 index 0000000..269c91d --- /dev/null +++ b/src-react/styles/images/remoteIcon.svg @@ -0,0 +1,65 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src-react/styles/images/tagIcon.svg b/src-react/styles/images/tagIcon.svg new file mode 100644 index 0000000..36b6d00 --- /dev/null +++ b/src-react/styles/images/tagIcon.svg @@ -0,0 +1,64 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src-react/styles/styles.scss b/src-react/styles/styles.scss new file mode 100644 index 0000000..42abdf9 --- /dev/null +++ b/src-react/styles/styles.scss @@ -0,0 +1,119 @@ +// Styles.less +// This file contains styling that's only used in this app + +@import "generic.scss"; + + +// -- Application specific layout ---- +// Needed to properly layout this specific page regardless of the specific bootstrap configuration/styling + +.glyphicon-circled { + margin-right: 18px; + border: 5px solid #686868; + border-radius: 100%; + padding-bottom: 7px; + padding-top: 6px; + padding-right: 20px; + padding-left: 7px; +} + +.repository-actions { + position: absolute; + margin-top: 20px; + right: 0px; + z-index: 30; +} + +.crash { + margin-top: 20px; +} + +// -- Application specific styling ---- +.btn-load-more { + padding-top: 10px; + padding-bottom: 10px; + .btn { + margin-right: auto; + margin-left: auto; + display: table; + } +} + +.ui-autocomplete { + background: rgba(200, 210, 230, 1); + box-shadow: 13px 13px 0px rgba(0, 0, 0, 0.2); + border-radius: 5px; + margin-top: 3px; + position: absolute; + display: block; + left: 0px; + top: 0px; + z-index: 100; + list-style: none; + padding-left: 0px; + margin-left: 0px; + padding: 3px; + .ui-menu-item { + list-style-type: none; + a { + padding: 2px; + padding-left: 4px; + border-radius: 3px; + display: block; + color: rgba(0, 0, 0, 0.6); + cursor: pointer; + text-decoration: none; + &.ui-state-focus, &.ui-state-active { + background: rgba(11, 26, 51, 1); + color: #fff; + } + } + } +} + +.app-top-margin { + margin-top: 15px +} + +.list-link { + float: right; + display: inline; + margin-top: -23px; +} + +.dropdown-menu { + li { + a { + &.list-url { + padding: 0px 4px 0px 4px; + margin-right: 30px; + } + + &.list-remove { + padding: 0px 4px 0px 4px; + margin-right: 10px; + } + } + } +} + +.remote-icon { + background: url('./images/remoteIcon.svg'); + width: 12px; + height: 10px; + display: inline-block; +} + +.branch-icon { + background: url('./images/branchIcon.svg'); + width: 9px; + height: 10px; + display: inline-block; +} + +.tag-icon { + background: url('./images/tagIcon.svg'); + width: 5px; + height: 10px; + display: inline-block; +} diff --git a/src-react/styles/variables.scss b/src-react/styles/variables.scss new file mode 100644 index 0000000..43a2d40 --- /dev/null +++ b/src-react/styles/variables.scss @@ -0,0 +1,32 @@ +@import "~bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss"; + +// -- Application specific variables ---- +$log-width-small: 400px; +$log-width-large: 550px; + +// -- Bootstrap variables --- +$navbar-default-bg: #2B3844; +$font-family-sans-serif: 'Open Sans'; +$font-family-monospace: 'Source Code Pro'; +$body-bg: #252833; +$progress-bg: rgba(0, 0, 0, 0.2); +$progress-bar-bg: rgba(0, 0, 0, 0.2); +$text-color: #D8D8D8; +$text-muted: #707A85; +$panel-bg: #3C4653; +$panel-default-text: $text-color; +$panel-default-heading-bg: #2C3541; +$panel-default-border: #362C36; +$list-group-bg: transparent; +$list-group-hover-bg: rgba(0, 0, 0, 0.2); +$list-group-border: #435158; +$list-group-link-heading-color: rgba(255, 255, 255, 0.8); +$list-group-link-color: rgba(255, 255, 255, 0.5); +$modal-content-bg: $panel-bg; +$modal-header-border-color: $list-group-border; +$input-bg: rgba(255, 255, 255, 0.1); +$input-color-placeholder: rgba(255, 255, 255, 0.3); +$btn-default-bg: #556666; +$btn-default-color: $text-color; +$btn-default-border: rgba(0, 0, 0, 0.1); +$link-hover-color: lighten($link-color, 15%); From ab5e2fe373ce335b2b13b72ef3c5ce94034cf077 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Sun, 21 May 2017 23:13:19 +0800 Subject: [PATCH 2/4] Use single quote --- src-react/containers/path.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-react/containers/path.js b/src-react/containers/path.js index 9977ce0..051ccdc 100644 --- a/src-react/containers/path.js +++ b/src-react/containers/path.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux' -import "../styles/styles.scss"; +import '../styles/styles.scss'; @connect(state => { return { ...state } }) class Path extends Component { From 1a2b5b1b562a17dec3d2f94735a67c9919cf08d2 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Sun, 21 May 2017 23:21:06 +0800 Subject: [PATCH 3/4] Set webpack alias for styles --- config/webpack.config.dev.js | 5 +++-- config/webpack.config.prod.js | 4 +++- src-react/containers/path.js | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index bb8712a..e8d6757 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -1,5 +1,6 @@ 'use strict'; +var path = require('path'); var autoprefixer = require('autoprefixer'); var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -10,7 +11,6 @@ var getClientEnvironment = require('./env'); var paths = require('./paths'); - // Webpack uses `publicPath` to determine where the app is being served from. // In development, we always serve from the root. This makes config easier. var publicPath = '/'; @@ -78,7 +78,8 @@ module.exports = { alias: { // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ - 'react-native': 'react-native-web' + 'react-native': 'react-native-web', + 'styles': path.resolve(__dirname, '../src-react/styles'), } }, diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index 74a54b6..3c51765 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -1,5 +1,6 @@ 'use strict'; +var path = require('path'); var autoprefixer = require('autoprefixer'); var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -82,7 +83,8 @@ module.exports = { alias: { // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ - 'react-native': 'react-native-web' + 'react-native': 'react-native-web', + 'styles': path.resolve(__dirname, '../src-react/styles'), } }, diff --git a/src-react/containers/path.js b/src-react/containers/path.js index 051ccdc..499d4e9 100644 --- a/src-react/containers/path.js +++ b/src-react/containers/path.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux' -import '../styles/styles.scss'; +import 'styles/styles.scss'; @connect(state => { return { ...state } }) class Path extends Component { From da8848623bfb49430d5b45095b4a1cd1f8303196 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Mon, 22 May 2017 22:30:41 +0800 Subject: [PATCH 4/4] Use resolve.modulesDirectories for require relative path --- config/webpack.config.dev.js | 3 +-- config/webpack.config.prod.js | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index e8d6757..9425ee9 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -1,6 +1,5 @@ 'use strict'; -var path = require('path'); var autoprefixer = require('autoprefixer'); var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -75,11 +74,11 @@ module.exports = { // some tools, although we do not recommend using it, see: // https://github.com/facebookincubator/create-react-app/issues/290 extensions: ['.js', '.json', '.jsx', ''], + modulesDirectories: [ 'src-react', 'node_modules' ], alias: { // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 'react-native': 'react-native-web', - 'styles': path.resolve(__dirname, '../src-react/styles'), } }, diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index 3c51765..54398da 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -1,6 +1,5 @@ 'use strict'; -var path = require('path'); var autoprefixer = require('autoprefixer'); var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -80,11 +79,11 @@ module.exports = { // some tools, although we do not recommend using it, see: // https://github.com/facebookincubator/create-react-app/issues/290 extensions: ['.js', '.json', '.jsx', ''], + modulesDirectories: [ 'src-react', 'node_modules' ], alias: { // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 'react-native': 'react-native-web', - 'styles': path.resolve(__dirname, '../src-react/styles'), } },