17 Commits 1da2d8fe89 ... a2f08dc442

Author SHA1 Message Date
  Ivan Arkhipov a2f08dc442 Updated nickname 2 years ago
  root 30caa09c0c Added support for template and assets overriding 2 years ago
  Ivan Arkhipov 29dca242af Small template fixes 2 years ago
  Ivan Arkhipov da1f8fa771 Fixed bug caused by gogs update 2 years ago
  Ivan Arkhipov 909304f942 Removed old unused styles 2 years ago
  Ivan Arkhipov e23540757e Changed option: merges can be provided only by repository admin 5 years ago
  Ivan Arkhipov d0d4c1b058 Fixed bug with building merge diff for files with different charset 6 years ago
  Ivan Arkhipov 3fe9998e32 Appearance modifications 6 years ago
  Ivan Arkhipov f09d17930e Change visual style 6 years ago
  Ivan Arkhipov 1da2d8fe89 Changed option: merges can be provided only by repository admin 5 years ago
  Ivan Arkhipov 90a0f190d0 Fixed bug with building merge diff for files with different charset 6 years ago
  Ivan Arkhipov 8ab0a275b5 Appearance modifications 6 years ago
  Ivan Arkhipov 614a42cdf6 Change visual style 6 years ago
  ᴜɴᴋɴᴡᴏɴ f0e3cd90f8 release: update version to 0.12.3 3 years ago
  ᴜɴᴋɴᴡᴏɴ fbe34c8c61 lfs: ask client to always send the same value for the HTTP header (#6369) 3 years ago
  Jeff e6b4c467e8 markup: render SHA links without branch prefix (#6350) 3 years ago
  ᴜɴᴋɴᴡᴏɴ 6b6bfe8bb0 cmd/serv: use different log files for ORMs in hook mode (#6361) 3 years ago

+ 0 - 3
CHANGELOG.md

@@ -20,9 +20,6 @@ All notable changes to Gogs are documented in this file.
 - _Regression:_ Submodule with a relative path is linked correctly. [#6319](https://github.com/gogs/gogs/issues/6319)
 - Backup can be processed when `--target` is specified on Windows. [#6339](https://github.com/gogs/gogs/issues/6339)
 - Commit message contains keywords look like an issue reference no longer fails the push entirely. [#6289](https://github.com/gogs/gogs/issues/6289)
-- _Regression:_ When running Gogs on Windows, push commits no longer fail on a daily basis with the error "pre-receive hook declined". [#6316](https://github.com/gogs/gogs/issues/6316)
-- Auto-linked commit SHAs now have correct links. [#6300](https://github.com/gogs/gogs/issues/6300)
-- Git LFS client (with version >= 2.5.0) wasn't able to upload files with known format (e.g. PNG, JPEG), and the server is expecting the HTTP Header `Content-Type` to be `application/octet-stream`. The server now tells the LFS client to always use `Content-Type: application/octet-stream` when upload files.
 
 ### Removed
 

+ 3 - 2
Dockerfile

@@ -6,8 +6,9 @@ RUN apk --no-cache --no-progress add --virtual \
   linux-pam-dev
 
 WORKDIR /gogs.io/gogs
-COPY . .
-RUN make build-no-gen TAGS="cert pam"
+COPY . .  
+RUN  go get -u github.com/kevinburke/go-bindata/...
+RUN make build TAGS="cert pam"
 
 FROM alpine:3.11
 ADD https://github.com/tianon/gosu/releases/download/1.11/gosu-amd64 /usr/sbin/gosu

+ 7 - 0
go.sum

@@ -354,6 +354,7 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f h1:gWF768j/LaZugp8dyS4UwsslY
 golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -400,6 +401,7 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE=
 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
 gopkg.in/ini.v1 v1.46.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.55.0 h1:E8yzL5unfpW3M6fz/eB7Cb5MQAYSZ7GKo4Qth+N2sgQ=
 gopkg.in/ini.v1 v1.55.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y=
 gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
@@ -407,6 +409,10 @@ gopkg.in/ldap.v2 v2.5.1 h1:wiu0okdNfjlBzg6UWvd1Hn8Y+Ux17/u/4nlk4CQr6tU=
 gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk=
 gopkg.in/macaron.v1 v1.3.4/go.mod h1:/RoHTdC8ALpyJ3+QR36mKjwnT1F1dyYtsGM9Ate6ZFI=
 gopkg.in/macaron.v1 v1.3.5/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4=
+gopkg.in/macaron.v1 v1.3.6 h1:mHw5qRGj2f86sCjBV/S5OOPvPbiZpu0OEs1F5l66fYI=
+gopkg.in/macaron.v1 v1.3.6/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4=
+gopkg.in/macaron.v1 v1.3.8 h1:45bQT4dDF+5SLd75qlj+dulQsuFQ9aFyLlvZX6YUJWE=
+gopkg.in/macaron.v1 v1.3.8/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4=
 gopkg.in/macaron.v1 v1.3.9 h1:Dw+DDRYdXgQyEsPlfAfKz+UA5qVUrH3KPD7JhmZ9MFc=
 gopkg.in/macaron.v1 v1.3.9/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4=
 gopkg.in/redis.v2 v2.3.2 h1:GPVIIB/JnL1wvfULefy3qXmPu1nfNu2d0yA09FHgwfs=
@@ -416,6 +422,7 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 1 - 1
gogs.go

@@ -18,7 +18,7 @@ import (
 )
 
 func init() {
-	conf.App.Version = "0.12.3"
+	conf.App.Version = "0.12.2"
 }
 
 func main() {

File diff suppressed because it is too large
+ 0 - 1408
internal/assets/public/public_gen.go


File diff suppressed because it is too large
+ 0 - 219
internal/assets/templates/templates_gen.go


+ 3 - 3
internal/cmd/hook.go

@@ -66,7 +66,7 @@ func runHookPreReceive(c *cli.Context) error {
 	if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
 		return nil
 	}
-	setup(c, "pre-receive.log", true)
+	setup(c, "hooks/pre-receive.log", true)
 
 	isWiki := strings.Contains(os.Getenv(db.ENV_REPO_CUSTOM_HOOKS_PATH), ".wiki.git/")
 
@@ -159,7 +159,7 @@ func runHookUpdate(c *cli.Context) error {
 	if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
 		return nil
 	}
-	setup(c, "update.log", false)
+	setup(c, "hooks/update.log", false)
 
 	args := c.Args()
 	if len(args) != 3 {
@@ -193,7 +193,7 @@ func runHookPostReceive(c *cli.Context) error {
 	if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
 		return nil
 	}
-	setup(c, "post-receive.log", true)
+	setup(c, "hooks/post-receive.log", true)
 
 	// Post-receive hook does more than just gather Git information,
 	// so we need to setup additional services for email notifications.

+ 3 - 4
internal/cmd/serv.go

@@ -38,7 +38,7 @@ var Serv = cli.Command{
 // logs error message on the server side. When not in "prod" mode,
 // error message is also printed to the client for easier debugging.
 func fail(userMessage, errMessage string, args ...interface{}) {
-	_, _ = fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
+	fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
 
 	if len(errMessage) > 0 {
 		if !conf.IsProdMode() {
@@ -47,11 +47,10 @@ func fail(userMessage, errMessage string, args ...interface{}) {
 		log.Error(errMessage, args...)
 	}
 
-	log.Stop()
 	os.Exit(1)
 }
 
-func setup(c *cli.Context, logFile string, connectDB bool) {
+func setup(c *cli.Context, logPath string, connectDB bool) {
 	conf.HookMode = true
 
 	var customConf string
@@ -74,7 +73,7 @@ func setup(c *cli.Context, logFile string, connectDB bool) {
 
 	err = log.NewFile(log.FileConfig{
 		Level:    level,
-		Filename: filepath.Join(conf.Log.RootPath, "hooks", logFile),
+		Filename: filepath.Join(conf.Log.RootPath, logPath),
 		FileRotationConfig: log.FileRotationConfig{
 			Rotate:  true,
 			Daily:   true,

+ 5 - 1
internal/db/db.go

@@ -128,7 +128,7 @@ var tables = []interface{}{
 	new(LFSObject), new(LoginSource),
 }
 
-func Init(w io.Writer) (*gorm.DB, error) {
+func Init() (*gorm.DB, error) {
 	db, err := openDB(conf.Database)
 	if err != nil {
 		return nil, errors.Wrap(err, "open database")
@@ -138,6 +138,10 @@ func Init(w io.Writer) (*gorm.DB, error) {
 	db.DB().SetMaxIdleConns(conf.Database.MaxIdleConns)
 	db.DB().SetConnMaxLifetime(time.Minute)
 
+	w, err := getLogWriter()
+	if err != nil {
+		return nil, errors.Wrap(err, "get log writer")
+	}
 	db.SetLogger(&dbutil.Writer{Writer: w})
 	if !conf.IsProdMode() {
 		db = db.LogMode(true)

+ 7 - 25
internal/db/models.go

@@ -7,16 +7,13 @@ package db
 import (
 	"database/sql"
 	"fmt"
-	"io"
 	"net/url"
 	"os"
 	"path"
-	"path/filepath"
 	"strings"
 	"time"
 
 	"github.com/jinzhu/gorm"
-	"github.com/pkg/errors"
 	log "unknwon.dev/clog/v2"
 	"xorm.io/core"
 	"xorm.io/xorm"
@@ -133,21 +130,16 @@ func SetEngine() (*gorm.DB, error) {
 
 	x.SetMapper(core.GonicMapper{})
 
-	var logPath string
-	if conf.HookMode {
-		logPath = filepath.Join(conf.Log.RootPath, "hooks", "xorm.log")
-	} else {
-		logPath = filepath.Join(conf.Log.RootPath, "xorm.log")
-	}
+	// WARNING: for serv command, MUST remove the output to os.stdout,
+	// so use log file to instead print to stdout.
 	sec := conf.File.Section("log.xorm")
-	fileWriter, err := log.NewFileWriter(logPath,
+	logger, err := log.NewFileWriter(path.Join(conf.Log.RootPath, "xorm.log"),
 		log.FileRotationConfig{
 			Rotate:  sec.Key("ROTATE").MustBool(true),
 			Daily:   sec.Key("ROTATE_DAILY").MustBool(true),
 			MaxSize: sec.Key("MAX_SIZE").MustInt64(100) * 1024 * 1024,
 			MaxDays: sec.Key("MAX_DAYS").MustInt64(3),
-		},
-	)
+		})
 	if err != nil {
 		return nil, fmt.Errorf("create 'xorm.log': %v", err)
 	}
@@ -157,22 +149,12 @@ func SetEngine() (*gorm.DB, error) {
 	x.SetConnMaxLifetime(time.Second)
 
 	if conf.IsProdMode() {
-		x.SetLogger(xorm.NewSimpleLogger3(fileWriter, xorm.DEFAULT_LOG_PREFIX, xorm.DEFAULT_LOG_FLAG, core.LOG_WARNING))
+		x.SetLogger(xorm.NewSimpleLogger3(logger, xorm.DEFAULT_LOG_PREFIX, xorm.DEFAULT_LOG_FLAG, core.LOG_WARNING))
 	} else {
-		x.SetLogger(xorm.NewSimpleLogger(fileWriter))
+		x.SetLogger(xorm.NewSimpleLogger(logger))
 	}
 	x.ShowSQL(true)
-
-	var w io.Writer
-	if conf.HookMode {
-		w = fileWriter
-	} else {
-		w, err = getLogWriter()
-		if err != nil {
-			return nil, errors.Wrap(err, "get log writer")
-		}
-	}
-	return Init(w)
+	return Init()
 }
 
 func NewEngine() (err error) {

+ 10 - 15
internal/db/repo.go

@@ -426,29 +426,24 @@ func (repo *Repository) UpdateSize() error {
 	return nil
 }
 
-// ComposeMetas composes a map of metas for rendering SHA1 URL and external issue tracker URL.
+// ComposeMetas composes a map of metas for rendering external issue tracker URL.
 func (repo *Repository) ComposeMetas() map[string]string {
-	if repo.ExternalMetas != nil {
-		return repo.ExternalMetas
-	}
-
-	repo.ExternalMetas = map[string]string{
-		"repoLink": repo.Link(),
-	}
-
-	if repo.EnableExternalTracker {
-		repo.ExternalMetas["user"] = repo.MustOwner().Name
-		repo.ExternalMetas["repo"] = repo.Name
-		repo.ExternalMetas["format"] = repo.ExternalTrackerFormat
-
+	if !repo.EnableExternalTracker {
+		return nil
+	} else if repo.ExternalMetas == nil {
+		repo.ExternalMetas = map[string]string{
+			"format": repo.ExternalTrackerFormat,
+			"user":   repo.MustOwner().Name,
+			"repo":   repo.Name,
+		}
 		switch repo.ExternalTrackerStyle {
 		case markup.ISSUE_NAME_STYLE_ALPHANUMERIC:
 			repo.ExternalMetas["style"] = markup.ISSUE_NAME_STYLE_ALPHANUMERIC
 		default:
 			repo.ExternalMetas["style"] = markup.ISSUE_NAME_STYLE_NUMERIC
 		}
-	}
 
+	}
 	return repo.ExternalMetas
 }
 

+ 4 - 9
internal/db/repo_test.go

@@ -19,19 +19,14 @@ func TestRepository_ComposeMetas(t *testing.T) {
 
 	t.Run("no external tracker is configured", func(t *testing.T) {
 		repo.EnableExternalTracker = false
+		assert.Equal(t, map[string]string(nil), repo.ComposeMetas())
 
-		metas := repo.ComposeMetas()
-		assert.Equal(t, metas["repoLink"], repo.Link())
-
-		// Should no format and style if no external tracker is configured
-		_, ok := metas["format"]
-		assert.False(t, ok)
-		_, ok = metas["style"]
-		assert.False(t, ok)
+		// Should be nil even if other settings are present
+		repo.ExternalTrackerStyle = markup.ISSUE_NAME_STYLE_NUMERIC
+		assert.Equal(t, map[string]string(nil), repo.ComposeMetas())
 	})
 
 	t.Run("an external issue tracker is configured", func(t *testing.T) {
-		repo.ExternalMetas = nil
 		repo.EnableExternalTracker = true
 
 		// Default to numeric issue style

+ 2 - 3
internal/markup/markup.go

@@ -145,8 +145,7 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte {
 		if com.StrTo(m).MustInt() > 0 {
 			return m
 		}
-
-		return fmt.Sprintf(`<a href="%s/commit/%s"><code>%s</code></a>`, urlPrefix, m, tool.ShortSHA1(m))
+		return fmt.Sprintf(`<a href="%s/commit/%s"><code>%s</code></a>`, urlPrefix, m, tool.ShortSHA1(string(m)))
 	}))
 }
 
@@ -161,7 +160,7 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string, metas map[string]strin
 
 	rawBytes = RenderIssueIndexPattern(rawBytes, urlPrefix, metas)
 	rawBytes = RenderCrossReferenceIssueIndexPattern(rawBytes, urlPrefix, metas)
-	rawBytes = RenderSha1CurrentPattern(rawBytes, metas["repoLink"])
+	rawBytes = RenderSha1CurrentPattern(rawBytes, urlPrefix)
 	return rawBytes
 }
 

+ 0 - 38
internal/markup/markup_test.go

@@ -215,41 +215,3 @@ func Test_RenderIssueIndexPattern(t *testing.T) {
 		})
 	})
 }
-
-func TestRenderSha1CurrentPattern(t *testing.T) {
-	metas := map[string]string{
-		"repoLink": "/someuser/somerepo",
-	}
-
-	tests := []struct {
-		desc   string
-		input  string
-		prefix string
-		expVal string
-	}{
-		{
-			desc:   "Full SHA (40 symbols)",
-			input:  "ad8ced4f57d9068cb2874557245be3c7f341149d",
-			prefix: metas["repoLink"],
-			expVal: `<a href="/someuser/somerepo/commit/ad8ced4f57d9068cb2874557245be3c7f341149d"><code>ad8ced4f57</code></a>`,
-		},
-		{
-			desc:   "Short SHA (8 symbols)",
-			input:  "ad8ced4f",
-			prefix: metas["repoLink"],
-			expVal: `<a href="/someuser/somerepo/commit/ad8ced4f"><code>ad8ced4f</code></a>`,
-		},
-		{
-			desc:   "9 digits",
-			input:  "123456789",
-			prefix: metas["repoLink"],
-			expVal: "123456789",
-		},
-	}
-
-	for _, test := range tests {
-		t.Run(test.desc, func(t *testing.T) {
-			assert.Equal(t, test.expVal, string(RenderSha1CurrentPattern([]byte(test.input), test.prefix)))
-		})
-	}
-}

+ 1 - 7
internal/route/lfs/batch.go

@@ -44,11 +44,6 @@ func serveBatch(c *macaron.Context, owner *db.User, repo *db.Repository) {
 				actions = batchActions{
 					Upload: &batchAction{
 						Href: fmt.Sprintf("%s/%s", baseHref, obj.Oid),
-						Header: map[string]string{
-							// NOTE: git-lfs v2.5.0 sets the Content-Type based on the uploaded file.
-							// This ensures that the client always uses the designated value for the header.
-							"Content-Type": "application/octet-stream",
-						},
 					},
 					Verify: &batchAction{
 						Href: fmt.Sprintf("%s/verify", baseHref),
@@ -141,8 +136,7 @@ type batchError struct {
 }
 
 type batchAction struct {
-	Href   string            `json:"href"`
-	Header map[string]string `json:"header,omitempty"`
+	Href string `json:"href"`
 }
 
 type batchActions struct {

+ 4 - 55
internal/route/lfs/batch_test.go

@@ -6,7 +6,6 @@ package lfs
 
 import (
 	"bytes"
-	"encoding/json"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
@@ -43,7 +42,7 @@ func Test_serveBatch(t *testing.T) {
 			name:          "unrecognized operation",
 			body:          `{"operation": "update"}`,
 			expStatusCode: http.StatusBadRequest,
-			expBody:       `{"message": "Operation not recognized"}` + "\n",
+			expBody:       `{"message":"Operation not recognized"}` + "\n",
 		},
 		{
 			name: "upload: contains invalid oid",
@@ -54,25 +53,7 @@ func Test_serveBatch(t *testing.T) {
 	{"oid": "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f", "size": 123}
 ]}`,
 			expStatusCode: http.StatusOK,
-			expBody: `{
-	"transfer": "basic",
-	"objects": [
-		{"oid": "bad_oid", "size":123, "actions": {"error": {"code": 422, "message": "Object has invalid oid"}}},
-		{
-			"oid": "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
-			"size": 123,
-			"actions": {
-				"upload": {
-					"href": "https://gogs.example.com/owner/repo.git/info/lfs/objects/basic/ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
-					"header": {"Content-Type": "application/octet-stream"}
-				},
-				"verify": {
-					"href": "https://gogs.example.com/owner/repo.git/info/lfs/objects/basic/verify"
-				}
-			}
-		}
-	]
-}` + "\n",
+			expBody:       `{"transfer":"basic","objects":[{"oid":"bad_oid","size":123,"actions":{"error":{"code":422,"message":"Object has invalid oid"}}},{"oid":"ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f","size":123,"actions":{"upload":{"href":"https://gogs.example.com/owner/repo.git/info/lfs/objects/basic/ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f"},"verify":{"href":"https://gogs.example.com/owner/repo.git/info/lfs/objects/basic/verify"}}}]}` + "\n",
 		},
 		{
 			name: "download: contains non-existent oid and mismatched size",
@@ -97,26 +78,7 @@ func Test_serveBatch(t *testing.T) {
 				},
 			},
 			expStatusCode: http.StatusOK,
-			expBody: `{
-	"transfer": "basic",
-	"objects": [
-		{"oid": "bad_oid", "size": 123, "actions": {"error": {"code": 404, "message": "Object does not exist"}}},
-		{
-			"oid": "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
-			"size": 123,
-			"actions": {"error": {"code": 422, "message": "Object size mismatch"}}
-		},
-		{
-			"oid": "5cac0a318669fadfee734fb340a5f5b70b428ac57a9f4b109cb6e150b2ba7e57",
-			"size": 456,
-			"actions": {
-				"download": {
-					"href": "https://gogs.example.com/owner/repo.git/info/lfs/objects/basic/5cac0a318669fadfee734fb340a5f5b70b428ac57a9f4b109cb6e150b2ba7e57"
-				}
-			}
-		}
-	]
-}` + "\n",
+			expBody:       `{"transfer":"basic","objects":[{"oid":"bad_oid","size":123,"actions":{"error":{"code":404,"message":"Object does not exist"}}},{"oid":"ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f","size":123,"actions":{"error":{"code":422,"message":"Object size mismatch"}}},{"oid":"5cac0a318669fadfee734fb340a5f5b70b428ac57a9f4b109cb6e150b2ba7e57","size":456,"actions":{"download":{"href":"https://gogs.example.com/owner/repo.git/info/lfs/objects/basic/5cac0a318669fadfee734fb340a5f5b70b428ac57a9f4b109cb6e150b2ba7e57"}}}]}` + "\n",
 		},
 	}
 	for _, test := range tests {
@@ -138,20 +100,7 @@ func Test_serveBatch(t *testing.T) {
 			if err != nil {
 				t.Fatal(err)
 			}
-
-			var expBody bytes.Buffer
-			err = json.Indent(&expBody, []byte(test.expBody), "", "  ")
-			if err != nil {
-				t.Fatal(err)
-			}
-
-			var gotBody bytes.Buffer
-			err = json.Indent(&gotBody, body, "", "  ")
-			if err != nil {
-				t.Fatal(err)
-			}
-
-			assert.Equal(t, expBody.String(), gotBody.String())
+			assert.Equal(t, test.expBody, string(body))
 		})
 	}
 }

+ 3 - 10
internal/route/lfs/route.go

@@ -135,8 +135,6 @@ func authorize(mode db.AccessMode) macaron.Handler {
 			return
 		}
 
-		log.Trace("[LFS] Authorized user %q to %q", actor.Name, username+"/"+reponame)
-
 		c.Map(owner) // NOTE: Override actor
 		c.Map(repo)
 	}
@@ -146,15 +144,10 @@ func authorize(mode db.AccessMode) macaron.Handler {
 // When not, response given "failCode" as status code.
 func verifyHeader(key, value string, failCode int) macaron.Handler {
 	return func(c *macaron.Context) {
-		vals := c.Req.Header.Values(key)
-		for _, val := range vals {
-			if strings.Contains(val, value) {
-				return
-			}
+		if !strings.Contains(c.Req.Header.Get(key), value) {
+			c.Status(failCode)
+			return
 		}
-
-		log.Trace("[LFS] HTTP header %q does not contain value %q", key, value)
-		c.Status(failCode)
 	}
 }
 

+ 3 - 3
internal/tool/tool.go

@@ -45,9 +45,9 @@ func DetectEncoding(content []byte) (string, error) {
 		return "UTF-8", err
 	}
 
-	if result.Charset != "UTF-8" && len(setting.Repository.AnsiCharset) > 0 {
-		log.Trace("Using default AnsiCharset: %s", setting.Repository.AnsiCharset)
-		return setting.Repository.AnsiCharset, err
+	if result.Charset != "UTF-8" && len(conf.Repository.ANSICharset) > 0 {
+		log.Trace("Using default ANSICharset: %s", conf.Repository.ANSICharset)
+		return conf.Repository.ANSICharset, err
 	}
 
 	log.Trace("Detected encoding: %s", result.Charset)

+ 0 - 3210
public/css/gogs_overrides.css

@@ -1,3210 +0,0 @@
-.emoji {
-  width: 1.5em;
-  height: 1.5em;
-  display: inline-block;
-  background-size: contain;
-}
-body:not(.full-width) {
-  font-family: "PingFang SC", "Helvetica Neue", "Microsoft YaHei", Arial, Helvetica, sans-serif !important;
-  background-color: #fff;
-  overflow-y: scroll;
-  overflow-x: auto;
-  min-width: 1020px;
-}
-.ui.container:not(.fluid) {
-  width: 980px !important;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-.ui.header,
-.ui.menu,
-.ui.input input,
-.ui.button:not(.label) {
-  font-family: "PingFang SC", 'Hiragino Sans GB', "Helvetica Neue", "Microsoft YaHei", Arial, Helvetica, sans-serif !important;
-}
-img {
-  border-radius: 3px;
-}
-pre,
-code {
-  font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
-}
-pre.raw,
-code.raw {
-  padding: 7px 12px;
-  margin: 10px 0;
-  background-color: #f8f8f8;
-  border: 1px solid #ddd;
-  border-radius: 3px;
-  font-size: 13px;
-  line-height: 1.5;
-  overflow: auto;
-}
-pre.wrap,
-code.wrap {
-  white-space: pre-wrap;
-  word-break: break-word;
-}
-.dont-break-out {
-  /* These are technically the same, but use both */
-  overflow-wrap: break-word;
-  word-wrap: break-word;
-  -ms-word-break: break-all;
-  /* This is the dangerous one in WebKit, as it breaks things wherever */
-  word-break: break-all;
-  /* Instead use this non-standard one: */
-  word-break: break-word;
-  /* Adds a hyphen where the word breaks, if supported (No Blink) */
-  -ms-hyphens: auto;
-  -moz-hyphens: auto;
-  -webkit-hyphens: auto;
-  hyphens: auto;
-}
-.full.height {
-  padding: 0;
-  margin: 0 0 -80px 0;
-  min-height: 100%;
-}
-.following.bar {
-  z-index: 900;
-  left: 0;
-  width: 100%;
-}
-.following.bar.light {
-  background-color: white;
-  border-bottom: 1px solid #DDDDDD;
-  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.04);
-}
-.following.bar .column .menu {
-  margin-top: 0;
-}
-.following.bar .top.menu a.item.brand {
-  padding-left: 0;
-}
-.following.bar .brand .ui.mini.image {
-  width: 30px;
-}
-.following.bar .top.menu a.item:hover,
-.following.bar .top.menu .dropdown.item:hover,
-.following.bar .top.menu .dropdown.item.active {
-  background-color: transparent;
-}
-.following.bar .top.menu a.item:hover {
-  color: rgba(0, 0, 0, 0.45);
-}
-.following.bar .top.menu .menu {
-  z-index: 900;
-}
-.following.bar .icon,
-.following.bar .octicon {
-  margin-right: 5px !important;
-}
-.following.bar .head.link.item {
-  padding-right: 0 !important;
-}
-.following.bar .avatar > .ui.image {
-  margin-right: 0;
-}
-.following.bar .avatar .octicon-triangle-down {
-  margin-top: 6.5px;
-}
-.following.bar .searchbox {
-  background-color: #f4f4f4 !important;
-}
-.following.bar .searchbox:focus {
-  background-color: #e9e9e9 !important;
-}
-.following.bar .text .octicon {
-  width: 16px;
-  text-align: center;
-}
-.following.bar .right.menu .menu {
-  left: auto;
-  right: 0;
-}
-.following.bar .right.menu .dropdown .menu {
-  margin-top: 0;
-}
-.ui.left {
-  float: left;
-}
-.ui.right {
-  float: right;
-}
-.ui.container.fluid.padded {
-  padding: 0 10px 0 10px;
-}
-.ui.form .ui.button {
-  font-weight: normal;
-}
-.ui.form .box.field {
-  padding-left: 27px;
-}
-.ui.menu,
-.ui.vertical.menu,
-.ui.segment {
-  box-shadow: none;
-}
-.ui .text.red {
-  color: #d95c5c !important;
-}
-.ui .text.red a {
-  color: #d95c5c !important;
-}
-.ui .text.red a:hover {
-  color: #E67777 !important;
-}
-.ui .text.blue {
-  color: #428bca !important;
-}
-.ui .text.blue a {
-  color: #15c !important;
-}
-.ui .text.blue a:hover {
-  color: #428bca !important;
-}
-.ui .text.black {
-  color: #444;
-}
-.ui .text.black:hover {
-  color: #000;
-}
-.ui .text.grey {
-  color: #767676 !important;
-}
-.ui .text.grey a {
-  color: #444 !important;
-}
-.ui .text.grey a:hover {
-  color: #000 !important;
-}
-.ui .text.light.grey {
-  color: #888 !important;
-}
-.ui .text.green {
-  color: #6cc644 !important;
-}
-.ui .text.purple {
-  color: #6e5494 !important;
-}
-.ui .text.yellow {
-  color: #FBBD08 !important;
-}
-.ui .text.gold {
-  color: #a1882b !important;
-}
-.ui .text.left {
-  text-align: left !important;
-}
-.ui .text.right {
-  text-align: right !important;
-}
-.ui .text.small {
-  font-size: 0.75em;
-}
-.ui .text.normal {
-  font-weight: normal;
-}
-.ui .text.bold {
-  font-weight: bold;
-}
-.ui .text.italic {
-  font-style: italic;
-}
-.ui .text.truncate {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  display: inline-block;
-}
-.ui .text.thin {
-  font-weight: normal;
-}
-.ui .text.middle {
-  vertical-align: middle;
-}
-.ui .message {
-  text-align: center;
-}
-.ui .header > i + .content {
-  padding-left: 0.75rem;
-  vertical-align: middle;
-}
-.ui .warning.header {
-  background-color: #F9EDBE !important;
-  border-color: #F0C36D;
-}
-.ui .warning.segment {
-  border-color: #F0C36D;
-}
-.ui .info.segment {
-  border: 1px solid #c5d5dd;
-}
-.ui .info.segment.top {
-  background-color: #e6f1f6 !important;
-}
-.ui .info.segment.top h3,
-.ui .info.segment.top h4 {
-  margin-top: 0;
-}
-.ui .info.segment.top h3:last-child {
-  margin-top: 4px;
-}
-.ui .info.segment.top > :last-child {
-  margin-bottom: 0;
-}
-.ui .normal.header {
-  font-weight: normal;
-}
-.ui .avatar.image {
-  border-radius: 3px;
-}
-.ui .form .fake {
-  display: none !important;
-}
-.ui .form .sub.field {
-  margin-left: 25px;
-}
-.ui .sha.label {
-  font-family: Consolas, Menlo, Monaco, "Lucida Console", monospace;
-  font-size: 13px;
-  padding: 6px 10px 4px 10px;
-  font-weight: normal;
-  margin: 0 6px;
-}
-.ui.status.buttons .octicon {
-  margin-right: 4px;
-}
-.ui.inline.delete-button {
-  padding: 8px 15px;
-  font-weight: normal;
-}
-.overflow.menu .items {
-  max-height: 300px;
-  overflow-y: auto;
-}
-.overflow.menu .items .item {
-  position: relative;
-  cursor: pointer;
-  display: block;
-  border: none;
-  height: auto;
-  border-top: none;
-  line-height: 0.9em;
-  color: rgba(0, 0, 0, 0.8);
-  padding: .71428571em 1.14285714em !important;
-  font-size: 1rem;
-  text-transform: none;
-  font-weight: 400;
-  box-shadow: none;
-  -webkit-touch-callout: none;
-}
-.overflow.menu .items .item.active {
-  font-weight: 700;
-}
-.overflow.menu .items .item:hover {
-  background: rgba(0, 0, 0, 0.05);
-  color: rgba(0, 0, 0, 0.8);
-  z-index: 13;
-}
-.scrolling.menu .item.selected {
-  font-weight: 700 !important;
-}
-footer {
-  margin-top: 54px !important;
-  height: 40px;
-  background-color: white;
-  border-top: 1px solid #d6d6d6;
-  clear: both;
-  width: 100%;
-  color: #888888;
-}
-footer .container {
-  padding-top: 10px;
-}
-footer .container .fa {
-  width: 16px;
-  text-align: center;
-  color: #428bca;
-}
-footer .container .links > * {
-  border-left: 1px solid #d6d6d6;
-  padding-left: 8px;
-  margin-left: 5px;
-}
-footer .container .links > *:first-child {
-  border-left: none;
-}
-footer .ui.language .menu {
-  max-height: 500px;
-  overflow-y: auto;
-  margin-bottom: 7px;
-}
-.hide {
-  display: none;
-}
-.center {
-  text-align: center;
-}
-.img-1 {
-  width: 2px !important;
-  height: 2px !important;
-}
-.img-2 {
-  width: 4px !important;
-  height: 4px !important;
-}
-.img-3 {
-  width: 6px !important;
-  height: 6px !important;
-}
-.img-4 {
-  width: 8px !important;
-  height: 8px !important;
-}
-.img-5 {
-  width: 10px !important;
-  height: 10px !important;
-}
-.img-6 {
-  width: 12px !important;
-  height: 12px !important;
-}
-.img-7 {
-  width: 14px !important;
-  height: 14px !important;
-}
-.img-8 {
-  width: 16px !important;
-  height: 16px !important;
-}
-.img-9 {
-  width: 18px !important;
-  height: 18px !important;
-}
-.img-10 {
-  width: 20px !important;
-  height: 20px !important;
-}
-.img-11 {
-  width: 22px !important;
-  height: 22px !important;
-}
-.img-12 {
-  width: 24px !important;
-  height: 24px !important;
-}
-.img-13 {
-  width: 26px !important;
-  height: 26px !important;
-}
-.img-14 {
-  width: 28px !important;
-  height: 28px !important;
-}
-.img-15 {
-  width: 30px !important;
-  height: 30px !important;
-}
-.img-16 {
-  width: 32px !important;
-  height: 32px !important;
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto;
-}
-@media only screen and (max-width: 991px) and (min-width: 768px) {
-  .ui.container {
-    width: 95%;
-  }
-}
-/* Overrides some styles of the Highlight.js plugin */
-.hljs {
-  background: inherit !important;
-  padding: 0 !important;
-}
-.ui.dropdown .menu > .item > .image,
-.ui.dropdown .menu > .item > img,
-.ui.dropdown > .text > .image,
-.ui.dropdown > .text > img {
-  vertical-align: middle;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.markdown:not(code) {
-  overflow: hidden;
-  font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
-  font-size: 16px;
-  line-height: 1.6 !important;
-  word-wrap: break-word;
-}
-.markdown:not(code).file-view {
-  padding: 2em 2em 2em !important;
-}
-.markdown:not(code) > *:first-child {
-  margin-top: 0 !important;
-}
-.markdown:not(code) > *:last-child {
-  margin-bottom: 0 !important;
-}
-.markdown:not(code) a:not([href]) {
-  color: inherit;
-  text-decoration: none;
-}
-.markdown:not(code) .absent {
-  color: #c00;
-}
-.markdown:not(code) .anchor {
-  position: absolute;
-  top: 0;
-  left: 0;
-  display: block;
-  padding-right: 6px;
-  padding-left: 30px;
-  margin-left: -30px;
-}
-.markdown:not(code) .anchor:focus {
-  outline: none;
-}
-.markdown:not(code) h1,
-.markdown:not(code) h2,
-.markdown:not(code) h3,
-.markdown:not(code) h4,
-.markdown:not(code) h5,
-.markdown:not(code) h6 {
-  position: relative;
-  margin-top: 0.9em;
-  margin-bottom: 16px;
-  font-weight: bold;
-  line-height: 1.4;
-}
-.markdown:not(code) h1:first-of-type,
-.markdown:not(code) h2:first-of-type,
-.markdown:not(code) h3:first-of-type,
-.markdown:not(code) h4:first-of-type,
-.markdown:not(code) h5:first-of-type,
-.markdown:not(code) h6:first-of-type {
-  margin-top: 0 !important;
-}
-.markdown:not(code) h1 .octicon-link,
-.markdown:not(code) h2 .octicon-link,
-.markdown:not(code) h3 .octicon-link,
-.markdown:not(code) h4 .octicon-link,
-.markdown:not(code) h5 .octicon-link,
-.markdown:not(code) h6 .octicon-link {
-  display: none;
-  color: #000;
-  vertical-align: middle;
-}
-.markdown:not(code) h1:hover .anchor,
-.markdown:not(code) h2:hover .anchor,
-.markdown:not(code) h3:hover .anchor,
-.markdown:not(code) h4:hover .anchor,
-.markdown:not(code) h5:hover .anchor,
-.markdown:not(code) h6:hover .anchor {
-  padding-left: 8px;
-  margin-left: -30px;
-  text-decoration: none;
-}
-.markdown:not(code) h1:hover .anchor .octicon-link,
-.markdown:not(code) h2:hover .anchor .octicon-link,
-.markdown:not(code) h3:hover .anchor .octicon-link,
-.markdown:not(code) h4:hover .anchor .octicon-link,
-.markdown:not(code) h5:hover .anchor .octicon-link,
-.markdown:not(code) h6:hover .anchor .octicon-link {
-  display: inline-block;
-}
-.markdown:not(code) h1 tt,
-.markdown:not(code) h1 code,
-.markdown:not(code) h2 tt,
-.markdown:not(code) h2 code,
-.markdown:not(code) h3 tt,
-.markdown:not(code) h3 code,
-.markdown:not(code) h4 tt,
-.markdown:not(code) h4 code,
-.markdown:not(code) h5 tt,
-.markdown:not(code) h5 code,
-.markdown:not(code) h6 tt,
-.markdown:not(code) h6 code {
-  font-size: inherit;
-}
-.markdown:not(code) h1 {
-  padding-bottom: 0.3em;
-  font-size: 2.25em;
-  line-height: 1.2;
-  border-bottom: 1px solid #eee;
-}
-.markdown:not(code) h1 .anchor {
-  line-height: 1;
-}
-.markdown:not(code) h2 {
-  padding-bottom: 0.3em;
-  font-size: 1.75em;
-  line-height: 1.225;
-  border-bottom: 1px solid #eee;
-}
-.markdown:not(code) h2 .anchor {
-  line-height: 1;
-}
-.markdown:not(code) h3 {
-  font-size: 1.5em;
-  line-height: 1.43;
-}
-.markdown:not(code) h3 .anchor {
-  line-height: 1.2;
-}
-.markdown:not(code) h4 {
-  font-size: 1.25em;
-}
-.markdown:not(code) h4 .anchor {
-  line-height: 1.2;
-}
-.markdown:not(code) h5 {
-  font-size: 0.9em;
-}
-.markdown:not(code) h5 .anchor {
-  line-height: 1.1;
-}
-.markdown:not(code) h6 {
-  font-size: 0.9em;
-  color: #777;
-}
-.markdown:not(code) h6 .anchor {
-  line-height: 1.1;
-}
-.markdown:not(code) p,
-.markdown:not(code) blockquote,
-.markdown:not(code) ul,
-.markdown:not(code) ol,
-.markdown:not(code) dl,
-.markdown:not(code) table,
-.markdown:not(code) pre {
-  margin-top: 0;
-  margin-bottom: 16px;
-}
-.markdown:not(code) blockquote {
-  margin-left: 0;
-}
-.markdown:not(code) hr {
-  height: 4px;
-  padding: 0;
-  margin: 16px 0;
-  background-color: #e7e7e7;
-  border: 0 none;
-}
-.markdown:not(code) ul,
-.markdown:not(code) ol {
-  padding-left: 2em;
-}
-.markdown:not(code) ul.no-list,
-.markdown:not(code) ol.no-list {
-  padding: 0;
-  list-style-type: none;
-}
-.markdown:not(code) ul ul,
-.markdown:not(code) ul ol,
-.markdown:not(code) ol ol,
-.markdown:not(code) ol ul {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.markdown:not(code) ol ol,
-.markdown:not(code) ul ol {
-  list-style-type: lower-roman;
-}
-.markdown:not(code) li > p {
-  margin-top: 16px;
-}
-.markdown:not(code) dl {
-  padding: 0;
-}
-.markdown:not(code) dl dt {
-  padding: 0;
-  margin-top: 16px;
-  font-size: 0.9em;
-  font-style: italic;
-  font-weight: bold;
-}
-.markdown:not(code) dl dd {
-  padding: 0 16px;
-  margin-bottom: 16px;
-}
-.markdown:not(code) blockquote {
-  padding: 0 15px;
-  color: #777;
-  border-left: 4px solid #ddd;
-}
-.markdown:not(code) blockquote > :first-child {
-  margin-top: 0;
-}
-.markdown:not(code) blockquote > :last-child {
-  margin-bottom: 0;
-}
-.markdown:not(code) table {
-  display: block;
-  width: 100%;
-  overflow: auto;
-  word-break: normal;
-  word-break: keep-all;
-}
-.markdown:not(code) table th {
-  font-weight: bold;
-}
-.markdown:not(code) table th,
-.markdown:not(code) table td {
-  padding: 6px 13px !important;
-  border: 1px solid #ddd !important;
-}
-.markdown:not(code) table tr {
-  background-color: #fff;
-  border-top: 1px solid #ccc;
-}
-.markdown:not(code) table tr:nth-child(2n) {
-  background-color: #f8f8f8;
-}
-.markdown:not(code) img {
-  max-width: 100%;
-  box-sizing: border-box;
-}
-.markdown:not(code) .emoji {
-  max-width: none;
-}
-.markdown:not(code) span.frame {
-  display: block;
-  overflow: hidden;
-}
-.markdown:not(code) span.frame > span {
-  display: block;
-  float: left;
-  width: auto;
-  padding: 7px;
-  margin: 13px 0 0;
-  overflow: hidden;
-  border: 1px solid #ddd;
-}
-.markdown:not(code) span.frame span img {
-  display: block;
-  float: left;
-}
-.markdown:not(code) span.frame span span {
-  display: block;
-  padding: 5px 0 0;
-  clear: both;
-  color: #333;
-}
-.markdown:not(code) span.align-center {
-  display: block;
-  overflow: hidden;
-  clear: both;
-}
-.markdown:not(code) span.align-center > span {
-  display: block;
-  margin: 13px auto 0;
-  overflow: hidden;
-  text-align: center;
-}
-.markdown:not(code) span.align-center span img {
-  margin: 0 auto;
-  text-align: center;
-}
-.markdown:not(code) span.align-right {
-  display: block;
-  overflow: hidden;
-  clear: both;
-}
-.markdown:not(code) span.align-right > span {
-  display: block;
-  margin: 13px 0 0;
-  overflow: hidden;
-  text-align: right;
-}
-.markdown:not(code) span.align-right span img {
-  margin: 0;
-  text-align: right;
-}
-.markdown:not(code) span.float-left {
-  display: block;
-  float: left;
-  margin-right: 13px;
-  overflow: hidden;
-}
-.markdown:not(code) span.float-left span {
-  margin: 13px 0 0;
-}
-.markdown:not(code) span.float-right {
-  display: block;
-  float: right;
-  margin-left: 13px;
-  overflow: hidden;
-}
-.markdown:not(code) span.float-right > span {
-  display: block;
-  margin: 13px auto 0;
-  overflow: hidden;
-  text-align: right;
-}
-.markdown:not(code) code,
-.markdown:not(code) tt {
-  padding: 0;
-  padding-top: 0.2em;
-  padding-bottom: 0.2em;
-  margin: 0;
-  font-size: 85%;
-  background-color: rgba(0, 0, 0, 0.04);
-  border-radius: 3px;
-}
-.markdown:not(code) code:before,
-.markdown:not(code) code:after,
-.markdown:not(code) tt:before,
-.markdown:not(code) tt:after {
-  letter-spacing: -0.2em;
-  content: "\00a0";
-}
-.markdown:not(code) code br,
-.markdown:not(code) tt br {
-  display: none;
-}
-.markdown:not(code) del code {
-  text-decoration: inherit;
-}
-.markdown:not(code) pre > code {
-  padding: 0;
-  margin: 0;
-  font-size: 100%;
-  word-break: normal;
-  white-space: pre;
-  background: transparent;
-  border: 0;
-}
-.markdown:not(code) .highlight {
-  margin-bottom: 16px;
-}
-.markdown:not(code) .highlight pre,
-.markdown:not(code) pre {
-  padding: 16px;
-  overflow: auto;
-  font-size: 85%;
-  line-height: 1.45;
-  background-color: #f7f7f7;
-  border-radius: 3px;
-}
-.markdown:not(code) .highlight pre {
-  margin-bottom: 0;
-  word-break: normal;
-}
-.markdown:not(code) pre {
-  word-wrap: normal;
-}
-.markdown:not(code) pre code,
-.markdown:not(code) pre tt {
-  display: inline;
-  max-width: initial;
-  padding: 0;
-  margin: 0;
-  overflow: initial;
-  line-height: inherit;
-  word-wrap: normal;
-  background-color: transparent;
-  border: 0;
-}
-.markdown:not(code) pre code:before,
-.markdown:not(code) pre code:after,
-.markdown:not(code) pre tt:before,
-.markdown:not(code) pre tt:after {
-  content: normal;
-}
-.markdown:not(code) kbd {
-  display: inline-block;
-  padding: 3px 5px;
-  font-size: 11px;
-  line-height: 10px;
-  color: #555;
-  vertical-align: middle;
-  background-color: #fcfcfc;
-  border: solid 1px #ccc;
-  border-bottom-color: #bbb;
-  border-radius: 3px;
-  box-shadow: inset 0 -1px 0 #bbb;
-}
-.markdown:not(code) input[type="checkbox"] {
-  vertical-align: middle !important;
-}
-.markdown:not(code) .csv-data td,
-.markdown:not(code) .csv-data th {
-  padding: 5px;
-  overflow: hidden;
-  font-size: 12px;
-  line-height: 1;
-  text-align: left;
-  white-space: nowrap;
-}
-.markdown:not(code) .csv-data .blob-num {
-  padding: 10px 8px 9px;
-  text-align: right;
-  background: #fff;
-  border: 0;
-}
-.markdown:not(code) .csv-data tr {
-  border-top: 0;
-}
-.markdown:not(code) .csv-data th {
-  font-weight: bold;
-  background: #f8f8f8;
-  border-top: 0;
-}
-.home {
-  padding-bottom: 80px;
-}
-.home .logo {
-  margin-bottom: 20px;
-}
-.home .hero h1 {
-  font-size: 4.5em;
-}
-.home .hero h2 {
-  margin-top: 0;
-  font-size: 2em;
-}
-.home .hero .octicon {
-  color: #d9453d;
-  font-size: 40px;
-  width: 50px;
-}
-.home .hero.header {
-  font-size: 20px;
-}
-.home p.large {
-  font-size: 16px;
-}
-.home .stackable {
-  padding-top: 30px;
-}
-.home a {
-  color: #d9453d;
-}
-.signup {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.install {
-  padding-top: 45px;
-  padding-bottom: 80px;
-}
-.install form label {
-  text-align: right;
-  width: 320px !important;
-}
-.install form input {
-  width: 300px !important;
-}
-.install form .field {
-  text-align: left;
-}
-.install form .field .help {
-  margin-left: 335px !important;
-}
-.install form .field.optional .title {
-  margin-left: 320px !important;
-}
-.install .ui.checkbox {
-  margin-left: 335px !important;
-}
-.install .ui.checkbox label {
-  width: auto !important;
-}
-.install .inline.checkbox {
-  margin-top: -1em;
-  margin-bottom: 2em;
-}
-.form .help {
-  color: #999999;
-  padding-top: .6em;
-  padding-bottom: .6em;
-  display: inline-block;
-  word-break: break-word;
-}
-.ui.attached.header {
-  background: #f0f0f0;
-}
-.ui.attached.header .right {
-  margin-top: -5px;
-}
-.ui.attached.header .right .button {
-  padding: 8px 10px;
-  font-weight: normal;
-}
-#create-page-form form {
-  margin: auto;
-  width: 800px!important;
-}
-#create-page-form form .ui.message {
-  text-align: center;
-}
-#create-page-form form .header {
-  padding-left: 280px !important;
-}
-#create-page-form form .inline.field > label {
-  text-align: right;
-  width: 250px !important;
-  word-wrap: break-word;
-}
-#create-page-form form .help {
-  margin-left: 265px !important;
-}
-#create-page-form form .optional .title {
-  margin-left: 250px !important;
-}
-#create-page-form form input,
-#create-page-form form textarea {
-  width: 50% !important;
-}
-.user.activate form,
-.user.forgot.password form,
-.user.reset.password form,
-.user.signin form,
-.user.signup form {
-  margin: auto;
-  width: 800px!important;
-}
-.user.activate form .ui.message,
-.user.forgot.password form .ui.message,
-.user.reset.password form .ui.message,
-.user.signin form .ui.message,
-.user.signup form .ui.message {
-  text-align: center;
-}
-.user.activate form .header,
-.user.forgot.password form .header,
-.user.reset.password form .header,
-.user.signin form .header,
-.user.signup form .header {
-  padding-left: 280px !important;
-}
-.user.activate form .inline.field > label,
-.user.forgot.password form .inline.field > label,
-.user.reset.password form .inline.field > label,
-.user.signin form .inline.field > label,
-.user.signup form .inline.field > label {
-  text-align: right;
-  width: 250px !important;
-  word-wrap: break-word;
-}
-.user.activate form .help,
-.user.forgot.password form .help,
-.user.reset.password form .help,
-.user.signin form .help,
-.user.signup form .help {
-  margin-left: 265px !important;
-}
-.user.activate form .optional .title,
-.user.forgot.password form .optional .title,
-.user.reset.password form .optional .title,
-.user.signin form .optional .title,
-.user.signup form .optional .title {
-  margin-left: 250px !important;
-}
-.user.activate form input,
-.user.forgot.password form input,
-.user.reset.password form input,
-.user.signin form input,
-.user.signup form input,
-.user.activate form textarea,
-.user.forgot.password form textarea,
-.user.reset.password form textarea,
-.user.signin form textarea,
-.user.signup form textarea {
-  width: 50% !important;
-}
-.user.activate form,
-.user.forgot.password form,
-.user.reset.password form,
-.user.signin form,
-.user.signup form {
-  width: 700px !important;
-}
-.user.activate form .header,
-.user.forgot.password form .header,
-.user.reset.password form .header,
-.user.signin form .header,
-.user.signup form .header {
-  padding-left: 230px !important;
-}
-.user.activate form .inline.field > label,
-.user.forgot.password form .inline.field > label,
-.user.reset.password form .inline.field > label,
-.user.signin form .inline.field > label,
-.user.signup form .inline.field > label {
-  width: 200px !important;
-}
-.user.signin.two-factor form {
-  width: 300px !important;
-}
-.user.signin.two-factor form .header {
-  padding-left: inherit !important;
-}
-.repository.new.repo form,
-.repository.new.migrate form,
-.repository.new.fork form {
-  margin: auto;
-  width: 800px!important;
-}
-.repository.new.repo form .ui.message,
-.repository.new.migrate form .ui.message,
-.repository.new.fork form .ui.message {
-  text-align: center;
-}
-.repository.new.repo form .header,
-.repository.new.migrate form .header,
-.repository.new.fork form .header {
-  padding-left: 280px !important;
-}
-.repository.new.repo form .inline.field > label,
-.repository.new.migrate form .inline.field > label,
-.repository.new.fork form .inline.field > label {
-  text-align: right;
-  width: 250px !important;
-  word-wrap: break-word;
-}
-.repository.new.repo form .help,
-.repository.new.migrate form .help,
-.repository.new.fork form .help {
-  margin-left: 265px !important;
-}
-.repository.new.repo form .optional .title,
-.repository.new.migrate form .optional .title,
-.repository.new.fork form .optional .title {
-  margin-left: 250px !important;
-}
-.repository.new.repo form input,
-.repository.new.migrate form input,
-.repository.new.fork form input,
-.repository.new.repo form textarea,
-.repository.new.migrate form textarea,
-.repository.new.fork form textarea {
-  width: 50% !important;
-}
-.repository.new.repo form .dropdown .dropdown.icon,
-.repository.new.migrate form .dropdown .dropdown.icon,
-.repository.new.fork form .dropdown .dropdown.icon {
-  margin-top: -7px !important;
-}
-.repository.new.repo form .dropdown .text,
-.repository.new.migrate form .dropdown .text,
-.repository.new.fork form .dropdown .text {
-  margin-right: 0!important;
-}
-.repository.new.repo form .dropdown .text i,
-.repository.new.migrate form .dropdown .text i,
-.repository.new.fork form .dropdown .text i {
-  margin-right: 0!important;
-}
-.repository.new.repo .ui.form .selection.dropdown:not(.owner) {
-  width: 50%!important;
-}
-.repository.new.repo .ui.form #auto-init {
-  margin-left: 265px !important;
-}
-.new.webhook form .help {
-  margin-left: 25px;
-}
-.new.webhook .events.fields .column {
-  padding-left: 40px;
-}
-.repository {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.repository .head .column {
-  padding-top: 5px !important;
-  padding-bottom: 5px !important;
-}
-.repository .head .ui.compact.menu {
-  margin-left: 1rem;
-}
-.repository .head .ui.header {
-  margin-top: 0;
-}
-.repository .head .mega-octicon {
-  width: 30px;
-  font-size: 30px;
-}
-.repository .head .ui.huge.breadcrumb {
-  font-weight: 400;
-  font-size: 1.5rem;
-}
-.repository .head .fork-flag {
-  margin-left: 38px;
-  margin-top: 3px;
-  display: block;
-  font-size: 12px;
-  white-space: nowrap;
-}
-.repository .head .octicon.octicon-repo-forked {
-  margin-top: -1px;
-  font-size: 15px;
-}
-.repository .navbar .ui.label {
-  margin-top: -2px;
-  margin-left: 7px;
-  padding: 3px 5px;
-}
-.repository .owner.dropdown {
-  min-width: 40% !important;
-}
-.repository .metas .menu {
-  max-height: 300px;
-  overflow-x: auto;
-}
-.repository .metas .ui.list .hide {
-  display: none!important;
-}
-.repository .metas .ui.list .item {
-  padding: 0px;
-}
-.repository .metas .ui.list .label.color {
-  padding: 0 8px;
-  margin-right: 5px;
-}
-.repository .metas .ui.list a {
-  margin: 2px 0;
-}
-.repository .metas .ui.list a .text {
-  color: #444;
-}
-.repository .metas .ui.list a .text:hover {
-  color: #000;
-}
-.repository .header-wrapper {
-  background-color: #FAFAFA;
-  margin-top: -15px;
-  padding-top: 15px;
-}
-.repository .header-wrapper .ui.tabs.divider {
-  border-bottom: none;
-}
-.repository .header-wrapper .ui.tabular .octicon {
-  margin-right: 5px;
-}
-.repository .filter.menu .label.color {
-  border-radius: 3px;
-  margin-left: 15px;
-  padding: 0 8px;
-}
-.repository .filter.menu .octicon {
-  float: left;
-  margin-left: -5px;
-  margin-right: -7px;
-  width: 16px;
-}
-.repository .filter.menu .menu {
-  max-height: 300px;
-  overflow-x: auto;
-  right: 0!important;
-  left: auto!important;
-}
-.repository .filter.menu .dropdown.item {
-  margin: 1px;
-  padding-right: 0;
-}
-.repository .ui.tabs.container {
-  margin-top: 14px;
-  margin-bottom: 0px;
-}
-.repository .ui.tabs.container .ui.menu {
-  border-bottom: none;
-}
-.repository .ui.tabs.divider {
-  margin-top: 0;
-  margin-bottom: 20px;
-}
-.repository #clone-panel {
-  margin-top: -8px;
-  margin-left: 5px;
-  width: 350px;
-}
-.repository #clone-panel input {
-  border-radius: 0;
-  padding: 5px 10px;
-}
-.repository #clone-panel .clone.button {
-  font-size: 13px;
-  padding: 0 5px;
-}
-.repository #clone-panel .clone.button:first-child {
-  border-radius: .28571429rem 0 0 .28571429rem;
-}
-.repository #clone-panel .icon.button {
-  padding: 0 10px;
-}
-.repository #clone-panel .dropdown .menu {
-  right: 0!important;
-  left: auto!important;
-}
-.repository.branches:not(.settings) .ui.list {
-  padding: 0;
-}
-.repository.branches:not(.settings) .ui.list > .item {
-  margin: 0;
-  line-height: 31px;
-}
-.repository.branches:not(.settings) .ui.list > .item:not(:last-child) {
-  border-bottom: 1px solid #DDD;
-}
-.repository.branches:not(.settings) .ui.list > .item .column {
-  padding: 5px 15px;
-}
-.repository.branches:not(.settings) .ui.list > .item .column .octicon {
-  vertical-align: text-bottom;
-}
-.repository.branches:not(.settings) .ui.list > .item .column code {
-  padding: 4px 0;
-  font-size: 12px;
-}
-.repository.branches:not(.settings) .ui.list > .item .column .ui.text:not(i) {
-  font-size: 12px;
-}
-.repository.branches:not(.settings) .ui.list > .item .column .ui.button {
-  font-size: 12px;
-  padding: 8px 10px;
-}
-.repository.file.list #repo-desc {
-  font-size: 1.2em;
-}
-.repository.file.list .choose.reference .header .icon {
-  font-size: 1.4em;
-}
-.repository.file.list #file-buttons {
-  font-weight: normal;
-}
-.repository.file.list #file-buttons .ui.button {
-  padding: 8px 10px;
-  font-weight: normal;
-}
-.repository.file.list #git-stats {
-  padding: 10px;
-  line-height: 0;
-}
-.repository.file.list #git-stats .list {
-  width: 100%;
-}
-.repository.file.list #git-stats .list .item {
-  margin-left: 0;
-  width: 33.33%;
-}
-.repository.file.list #git-stats .list .item .text b {
-  font-size: 15px;
-}
-.repository.file.list #repo-files-table thead th {
-  padding-top: 8px;
-  padding-bottom: 5px;
-  font-weight: normal;
-}
-.repository.file.list #repo-files-table thead th:first-child {
-  display: block;
-  position: relative;
-  width: 325%;
-}
-.repository.file.list #repo-files-table thead .ui.avatar {
-  margin-bottom: 5px;
-}
-.repository.file.list #repo-files-table tbody .octicon {
-  margin-left: 3px;
-  margin-right: 5px;
-  color: #777;
-}
-.repository.file.list #repo-files-table tbody .octicon.octicon-mail-reply {
-  margin-right: 10px;
-}
-.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory,
-.repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule {
-  color: #1e70bf;
-}
-.repository.file.list #repo-files-table td {
-  padding-top: 8px;
-  padding-bottom: 8px;
-}
-.repository.file.list #repo-files-table tr:hover {
-  background-color: #ffffEE;
-}
-.repository.file.list #file-content .header .icon {
-  font-size: 0.9em;
-  margin-top: -2px;
-}
-.repository.file.list #file-content .header .file-actions {
-  padding-left: 20px;
-}
-.repository.file.list #file-content .header .file-actions .btn-octicon {
-  display: inline-block;
-  padding: 5px;
-  margin-left: 5px;
-  line-height: 1;
-  color: #767676;
-  vertical-align: middle;
-  background: transparent;
-  border: 0;
-  outline: none;
-}
-.repository.file.list #file-content .header .file-actions .btn-octicon:hover {
-  color: #4078c0;
-}
-.repository.file.list #file-content .header .file-actions .btn-octicon-danger:hover {
-  color: #bd2c00;
-}
-.repository.file.list #file-content .header .file-actions .btn-octicon.disabled {
-  color: #bbb;
-  cursor: default;
-}
-.repository.file.list #file-content .header .file-actions #delete-file-form {
-  display: inline-block;
-}
-.repository.file.list #file-content .view-raw {
-  padding: 5px;
-}
-.repository.file.list #file-content .view-raw * {
-  max-width: 100%;
-}
-.repository.file.list #file-content .view-raw img {
-  margin-bottom: -5px;
-}
-.repository.file.list #file-content #ipython-notebook {
-  margin-left: 95px;
-  padding-top: 1px;
-}
-.repository.file.list #file-content #ipython-notebook .nb-notebook {
-  line-height: 1.5;
-}
-.repository.file.list #file-content #ipython-notebook .nb-stdout,
-.repository.file.list #file-content #ipython-notebook .nb-stderr {
-  white-space: pre-wrap;
-  margin: 0.9em 0;
-  padding: 0.1em 0.5em;
-}
-.repository.file.list #file-content #ipython-notebook .nb-stderr {
-  background-color: #FAA;
-}
-.repository.file.list #file-content #ipython-notebook .nb-cell + .nb-cell {
-  margin-top: 0.5em;
-}
-.repository.file.list #file-content #ipython-notebook .nb-cell {
-  position: relative;
-}
-.repository.file.list #file-content #ipython-notebook .nb-cell.nb-heading-cell {
-  margin-top: 0.5em;
-}
-.repository.file.list #file-content #ipython-notebook .nb-cell img {
-  max-width: 100%;
-}
-.repository.file.list #file-content #ipython-notebook .nb-raw-cell {
-  white-space: pre-wrap;
-  background-color: #f5f2f0;
-  font-family: Consolas, Monaco, 'Andale Mono', monospace;
-  padding: 0.9em;
-  margin: .5em 0;
-}
-.repository.file.list #file-content #ipython-notebook .nb-input:before,
-.repository.file.list #file-content #ipython-notebook .nb-output:before {
-  position: absolute;
-  font-family: monospace;
-  color: #999;
-  left: -7.5em;
-  width: 7em;
-  text-align: right;
-}
-.repository.file.list #file-content #ipython-notebook .nb-input:before {
-  content: "In [" attr(data-prompt-number) "]:";
-}
-.repository.file.list #file-content #ipython-notebook .nb-input pre {
-  background-color: #f7f7f7;
-  margin-right: 10px;
-  padding: 5px 10px;
-}
-.repository.file.list #file-content #ipython-notebook .nb-input pre code {
-  min-height: 18px;
-  line-height: 18px;
-  font-size: 14px;
-}
-.repository.file.list #file-content #ipython-notebook .nb-output:before {
-  content: "Out [" attr(data-prompt-number) "]:";
-}
-.repository.file.list #file-content #ipython-notebook .nb-output pre {
-  padding: 5px 10px;
-  font-size: 14px;
-}
-.repository.file.list #file-content #ipython-notebook .nb-output img {
-  max-width: 100%;
-}
-.repository.file.list #file-content #ipython-notebook .nb-output table {
-  border: 1px solid #000;
-  border-collapse: collapse;
-}
-.repository.file.list #file-content #ipython-notebook .nb-output th {
-  font-weight: bold;
-}
-.repository.file.list #file-content #ipython-notebook .nb-output th,
-.repository.file.list #file-content #ipython-notebook .nb-output td {
-  border: 1px solid #000;
-  padding: 0.25em;
-  text-align: left;
-  vertical-align: middle;
-  border-collapse: collapse;
-}
-.repository.file.list #file-content #ipython-notebook .nb-markdown-cell {
-  margin-top: 10px;
-  margin-right: 10px;
-  padding: 10px;
-}
-.repository.file.list #file-content #ipython-notebook div[style="max-height:1000px;max-width:1500px;overflow:auto;"] {
-  max-height: none !important;
-}
-.repository.file.list #file-content .plain-text {
-  font-size: 14px;
-  padding: 15px 15px 10px 15px;
-  font-family: Consolas;
-}
-.repository.file.list #file-content .code-view * {
-  font-size: 12px;
-  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
-  line-height: 20px;
-}
-.repository.file.list #file-content .code-view table {
-  width: 100%;
-}
-.repository.file.list #file-content .code-view .lines-num {
-  vertical-align: top;
-  text-align: right;
-  color: #999;
-  background: #f5f5f5;
-  width: 1%;
-}
-.repository.file.list #file-content .code-view .lines-num span {
-  line-height: 20px;
-  padding: 0 10px;
-  cursor: pointer;
-  display: block;
-}
-.repository.file.list #file-content .code-view .lines-num,
-.repository.file.list #file-content .code-view .lines-code {
-  padding: 0;
-}
-.repository.file.list #file-content .code-view .lines-num pre,
-.repository.file.list #file-content .code-view .lines-code pre,
-.repository.file.list #file-content .code-view .lines-num ol,
-.repository.file.list #file-content .code-view .lines-code ol,
-.repository.file.list #file-content .code-view .lines-num .hljs,
-.repository.file.list #file-content .code-view .lines-code .hljs {
-  background-color: white;
-  margin: 0;
-  padding: 0 !important;
-}
-.repository.file.list #file-content .code-view .lines-num pre li,
-.repository.file.list #file-content .code-view .lines-code pre li,
-.repository.file.list #file-content .code-view .lines-num ol li,
-.repository.file.list #file-content .code-view .lines-code ol li,
-.repository.file.list #file-content .code-view .lines-num .hljs li,
-.repository.file.list #file-content .code-view .lines-code .hljs li {
-  display: inline-block;
-  width: 100%;
-}
-.repository.file.list #file-content .code-view .lines-num pre li.active,
-.repository.file.list #file-content .code-view .lines-code pre li.active,
-.repository.file.list #file-content .code-view .lines-num ol li.active,
-.repository.file.list #file-content .code-view .lines-code ol li.active,
-.repository.file.list #file-content .code-view .lines-num .hljs li.active,
-.repository.file.list #file-content .code-view .lines-code .hljs li.active {
-  background: #ffffdd;
-}
-.repository.file.list #file-content .code-view .lines-num pre li:before,
-.repository.file.list #file-content .code-view .lines-code pre li:before,
-.repository.file.list #file-content .code-view .lines-num ol li:before,
-.repository.file.list #file-content .code-view .lines-code ol li:before,
-.repository.file.list #file-content .code-view .lines-num .hljs li:before,
-.repository.file.list #file-content .code-view .lines-code .hljs li:before {
-  content: ' ';
-}
-.repository.file.list .sidebar {
-  padding-left: 0;
-}
-.repository.file.list .sidebar .octicon {
-  width: 16px;
-}
-.repository.file.editor .treepath {
-  width: 100%;
-}
-.repository.file.editor .treepath input {
-  vertical-align: middle;
-  box-shadow: rgba(0, 0, 0, 0.0745098) 0px 1px 2px inset;
-  width: inherit;
-  padding: 7px 8px;
-  margin-right: 5px;
-}
-.repository.file.editor .tabular.menu .octicon {
-  margin-right: 5px;
-}
-.repository.file.editor .commit-form-wrapper {
-  padding-left: 64px;
-}
-.repository.file.editor .commit-form-wrapper .commit-avatar {
-  float: left;
-  margin-left: -64px;
-  width: 3em;
-  height: auto;
-}
-.repository.file.editor .commit-form-wrapper .commit-form {
-  position: relative;
-  padding: 15px;
-  margin-bottom: 10px;
-  border: 1px solid #ddd;
-  border-radius: 3px;
-}
-.repository.file.editor .commit-form-wrapper .commit-form:before,
-.repository.file.editor .commit-form-wrapper .commit-form:after {
-  right: 100%;
-  top: 20px;
-  border: solid transparent;
-  content: " ";
-  height: 0;
-  width: 0;
-  position: absolute;
-  pointer-events: none;
-}
-.repository.file.editor .commit-form-wrapper .commit-form:before {
-  border-right-color: #D4D4D5;
-  border-width: 9px;
-  margin-top: -9px;
-}
-.repository.file.editor .commit-form-wrapper .commit-form:after {
-  border-right-color: #f7f7f7;
-  border-width: 8px;
-  margin-top: -8px;
-}
-.repository.file.editor .commit-form-wrapper .commit-form:after {
-  border-right-color: #fff;
-}
-.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name {
-  display: inline-block;
-  padding: 3px 6px;
-  font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
-  color: rgba(0, 0, 0, 0.65);
-  background-color: rgba(209, 227, 237, 0.45);
-  border-radius: 3px;
-}
-.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input {
-  position: relative;
-  margin-left: 25px;
-}
-.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input {
-  width: 240px !important;
-  padding-left: 26px !important;
-}
-.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch {
-  position: absolute;
-  top: 9px;
-  left: 10px;
-  color: #b0c4ce;
-}
-.repository.options #interval {
-  width: 100px!important;
-  min-width: 100px;
-}
-.repository.options .danger .item {
-  padding: 20px 15px;
-}
-.repository.options .danger .ui.divider {
-  margin: 0;
-}
-.repository.new.issue .comment.form .comment .avatar {
-  width: 3em;
-}
-.repository.new.issue .comment.form .content {
-  margin-left: 4em;
-}
-.repository.new.issue .comment.form .content:before,
-.repository.new.issue .comment.form .content:after {
-  right: 100%;
-  top: 20px;
-  border: solid transparent;
-  content: " ";
-  height: 0;
-  width: 0;
-  position: absolute;
-  pointer-events: none;
-}
-.repository.new.issue .comment.form .content:before {
-  border-right-color: #D4D4D5;
-  border-width: 9px;
-  margin-top: -9px;
-}
-.repository.new.issue .comment.form .content:after {
-  border-right-color: #f7f7f7;
-  border-width: 8px;
-  margin-top: -8px;
-}
-.repository.new.issue .comment.form .content:after {
-  border-right-color: #fff;
-}
-.repository.new.issue .comment.form .content .markdown {
-  font-size: 14px;
-}
-.repository.new.issue .comment.form .metas {
-  min-width: 220px;
-}
-.repository.new.issue .comment.form .metas .filter.menu {
-  max-height: 300px;
-  overflow-x: auto;
-}
-.repository.view.issue .title {
-  padding-bottom: 0!important;
-}
-.repository.view.issue .title h1 {
-  font-weight: 300;
-  font-size: 2.3rem;
-  margin-bottom: 5px;
-}
-.repository.view.issue .title h1 .ui.input {
-  font-size: 0.5em;
-  vertical-align: top;
-  width: 50%;
-  min-width: 600px;
-}
-.repository.view.issue .title h1 .ui.input input {
-  font-size: 1.5em;
-  padding: 6px 10px;
-}
-.repository.view.issue .title .index {
-  font-weight: 300;
-  color: #aaa;
-  letter-spacing: -1px;
-}
-.repository.view.issue .title .label {
-  margin-right: 10px;
-}
-.repository.view.issue .title .edit-zone {
-  margin-top: 10px;
-}
-.repository.view.issue .pull-desc code {
-  color: #0166E6;
-}
-.repository.view.issue .pull.tabular.menu {
-  margin-bottom: 10px;
-}
-.repository.view.issue .pull.tabular.menu .octicon {
-  margin-right: 5px;
-}
-.repository.view.issue .pull.tab.segment {
-  border: none;
-  padding: 0;
-  padding-top: 10px;
-  box-shadow: none;
-  background-color: inherit;
-}
-.repository.view.issue .pull .merge.box .avatar {
-  margin-left: 10px;
-  margin-top: 10px;
-}
-.repository.view.issue .comment-list:before {
-  display: block;
-  content: "";
-  position: absolute;
-  margin-top: 12px;
-  margin-bottom: 14px;
-  top: 0;
-  bottom: 0;
-  left: 96px;
-  width: 2px;
-  background-color: #f3f3f3;
-  z-index: -1;
-}
-.repository.view.issue .comment-list .comment .avatar {
-  width: 3em;
-}
-.repository.view.issue .comment-list .comment .tag {
-  color: #767676;
-  margin-top: 3px;
-  padding: 2px 5px;
-  font-size: 12px;
-  border: 1px solid rgba(0, 0, 0, 0.1);
-  border-radius: 3px;
-}
-.repository.view.issue .comment-list .comment .actions .item {
-  float: left;
-}
-.repository.view.issue .comment-list .comment .actions .item.tag {
-  margin-right: 5px;
-}
-.repository.view.issue .comment-list .comment .actions .item.action {
-  margin-top: 6px;
-  margin-left: 10px;
-}
-.repository.view.issue .comment-list .comment .content {
-  margin-left: 4em;
-}
-.repository.view.issue .comment-list .comment .content .header {
-  font-weight: normal;
-  padding: auto 15px;
-  position: relative;
-  color: #767676;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #eee;
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.repository.view.issue .comment-list .comment .content .header:before,
-.repository.view.issue .comment-list .comment .content .header:after {
-  right: 100%;
-  top: 20px;
-  border: solid transparent;
-  content: " ";
-  height: 0;
-  width: 0;
-  position: absolute;
-  pointer-events: none;
-}
-.repository.view.issue .comment-list .comment .content .header:before {
-  border-right-color: #D4D4D5;
-  border-width: 9px;
-  margin-top: -9px;
-}
-.repository.view.issue .comment-list .comment .content .header:after {
-  border-right-color: #f7f7f7;
-  border-width: 8px;
-  margin-top: -8px;
-}
-.repository.view.issue .comment-list .comment .content .header .text {
-  max-width: 78%;
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
-.repository.view.issue .comment-list .comment .content .markdown {
-  font-size: 14px;
-}
-.repository.view.issue .comment-list .comment .content .no-content {
-  color: #767676;
-  font-style: italic;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment {
-  background: #f3f4f5;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment .ui.images::after {
-  clear: both;
-  content: ' ';
-  display: block;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment a {
-  display: block;
-  float: left;
-  margin: 5px;
-  padding: 5px;
-  height: 150px;
-  border: solid 1px #eee;
-  border-radius: 3px;
-  max-width: 150px;
-  background-color: #fff;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment a:before {
-  content: ' ';
-  display: inline-block;
-  height: 100%;
-  vertical-align: middle;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment .ui.image {
-  max-height: 100%;
-  width: auto;
-  margin: 0;
-  vertical-align: middle;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment span.ui.image {
-  font-size: 8vw;
-  color: #000000;
-}
-.repository.view.issue .comment-list .comment .content > .bottom.segment span.ui.image:hover {
-  color: #000000;
-}
-.repository.view.issue .comment-list .comment .ui.form .field:first-child {
-  clear: none;
-}
-.repository.view.issue .comment-list .comment .ui.form .tab.segment {
-  border: none;
-  padding: 0;
-  padding-top: 10px;
-}
-.repository.view.issue .comment-list .comment .ui.form textarea {
-  height: 200px;
-  font-family: "Consolas", monospace;
-}
-.repository.view.issue .comment-list .comment .edit.buttons {
-  margin-top: 10px;
-}
-.repository.view.issue .comment-list .event {
-  position: relative;
-  margin: 15px 0 15px 79px;
-  padding-left: 25px;
-}
-.repository.view.issue .comment-list .event .octicon {
-  width: 30px;
-  float: left;
-  text-align: center;
-}
-.repository.view.issue .comment-list .event .octicon.octicon-circle-slash {
-  margin-top: 5px;
-  margin-left: -34.5px;
-  font-size: 20px;
-  color: #bd2c00;
-}
-.repository.view.issue .comment-list .event .octicon.octicon-primitive-dot {
-  margin-left: -28.5px;
-  margin-right: -1px;
-  font-size: 30px;
-  color: #6cc644;
-}
-.repository.view.issue .comment-list .event .octicon.octicon-bookmark {
-  margin-top: 3px;
-  margin-left: -31px;
-  margin-right: -1px;
-  font-size: 25px;
-}
-.repository.view.issue .comment-list .event .detail {
-  font-size: 0.9rem;
-  margin-top: 5px;
-  margin-left: 35px;
-}
-.repository.view.issue .comment-list .event .detail .octicon.octicon-git-commit {
-  margin-top: 2px;
-}
-.repository.view.issue .ui.segment.metas {
-  margin-top: -3px;
-}
-.repository.view.issue .ui.participants img {
-  margin-top: 5px;
-  margin-right: 5px;
-}
-.repository .comment.form .ui.comments {
-  margin-top: -12px;
-  max-width: 100%;
-}
-.repository .comment.form .content .field:first-child {
-  clear: none;
-}
-.repository .comment.form .content .form:before,
-.repository .comment.form .content .form:after {
-  right: 100%;
-  top: 20px;
-  border: solid transparent;
-  content: " ";
-  height: 0;
-  width: 0;
-  position: absolute;
-  pointer-events: none;
-}
-.repository .comment.form .content .form:before {
-  border-right-color: #D4D4D5;
-  border-width: 9px;
-  margin-top: -9px;
-}
-.repository .comment.form .content .form:after {
-  border-right-color: #f7f7f7;
-  border-width: 8px;
-  margin-top: -8px;
-}
-.repository .comment.form .content .form:after {
-  border-right-color: #fff;
-}
-.repository .comment.form .content .tab.segment {
-  border: none;
-  padding: 0;
-  padding-top: 10px;
-}
-.repository .comment.form .content textarea {
-  height: 200px;
-  font-family: "Consolas", monospace;
-}
-.repository .label.list {
-  list-style: none;
-  padding-top: 15px;
-}
-.repository .label.list > .item {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  border-bottom: 1px dashed #AAA;
-}
-.repository .label.list > .item a {
-  font-size: 15px;
-  padding-top: 5px;
-  padding-right: 10px;
-  color: #666;
-}
-.repository .label.list > .item a:hover {
-  color: #000;
-}
-.repository .label.list > .item a.open-issues {
-  margin-right: 30px;
-}
-.repository .label.list > .item .ui.label {
-  font-size: 0.9em;
-}
-.repository .milestone.list {
-  list-style: none;
-  padding-top: 15px;
-}
-.repository .milestone.list > .item {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  border-bottom: 1px dashed #AAA;
-}
-.repository .milestone.list > .item > a {
-  padding-top: 5px;
-  padding-right: 10px;
-  color: #000;
-}
-.repository .milestone.list > .item > a:hover {
-  color: #4078c0;
-}
-.repository .milestone.list > .item .ui.progress {
-  width: 40%;
-  padding: 0;
-  border: 0;
-  margin: 0;
-}
-.repository .milestone.list > .item .ui.progress .bar {
-  height: 20px;
-}
-.repository .milestone.list > .item .meta {
-  color: #999;
-  padding-top: 5px;
-}
-.repository .milestone.list > .item .meta .issue-stats .octicon {
-  padding-left: 5px;
-}
-.repository .milestone.list > .item .meta .overdue {
-  color: red;
-}
-.repository .milestone.list > .item .operate {
-  margin-top: -15px;
-}
-.repository .milestone.list > .item .operate > a {
-  font-size: 15px;
-  padding-top: 5px;
-  padding-right: 10px;
-  color: #666;
-}
-.repository .milestone.list > .item .operate > a:hover {
-  color: #000;
-}
-.repository .milestone.list > .item .content {
-  padding-top: 10px;
-}
-.repository.new.milestone textarea {
-  height: 200px;
-}
-.repository.new.milestone #deadline {
-  width: 150px;
-}
-.repository.compare.pull .choose.branch .octicon {
-  padding-right: 10px;
-}
-.repository.compare.pull .comment.form .content:before,
-.repository.compare.pull .comment.form .content:after {
-  right: 100%;
-  top: 20px;
-  border: solid transparent;
-  content: " ";
-  height: 0;
-  width: 0;
-  position: absolute;
-  pointer-events: none;
-}
-.repository.compare.pull .comment.form .content:before {
-  border-right-color: #D4D4D5;
-  border-width: 9px;
-  margin-top: -9px;
-}
-.repository.compare.pull .comment.form .content:after {
-  border-right-color: #f7f7f7;
-  border-width: 8px;
-  margin-top: -8px;
-}
-.repository.compare.pull .comment.form .content:after {
-  border-right-color: #fff;
-}
-.repository .filter.dropdown .menu {
-  margin-top: 1px!important;
-}
-.repository.commits .header .ui.right .search input {
-  font-weight: normal;
-  padding: 5px 10px;
-}
-.repository #commits-table thead th:first-of-type {
-  padding-left: 15px;
-}
-.repository #commits-table thead .sha {
-  font-size: 13px;
-  padding: 6px 40px 4px 35px;
-}
-.repository #commits-table.ui.basic.striped.table tbody tr:nth-child(2n) {
-  background-color: rgba(0, 0, 0, 0.02) !important;
-}
-.repository .diff-detail-box {
-  margin: 15px 0;
-  line-height: 30px;
-}
-.repository .diff-detail-box ol {
-  clear: both;
-  padding-left: 0;
-  margin-top: 5px;
-  margin-bottom: 28px;
-}
-.repository .diff-detail-box ol li {
-  list-style: none;
-  padding-bottom: 4px;
-  margin-bottom: 4px;
-  border-bottom: 1px dashed #DDD;
-  padding-left: 6px;
-}
-.repository .diff-detail-box span.status {
-  display: inline-block;
-  width: 12px;
-  height: 12px;
-  margin-right: 8px;
-  vertical-align: middle;
-}
-.repository .diff-detail-box span.status.modify {
-  background-color: #f0db88;
-}
-.repository .diff-detail-box span.status.add {
-  background-color: #b4e2b4;
-}
-.repository .diff-detail-box span.status.del {
-  background-color: #e9aeae;
-}
-.repository .diff-detail-box span.status.rename {
-  background-color: #dad8ff;
-}
-.repository .diff-box .count {
-  margin-right: 12px;
-  font-size: 13px;
-}
-.repository .diff-box .count .bar {
-  background-color: #bd2c00;
-  height: 12px;
-  width: 40px;
-  display: inline-block;
-  margin: 2px 4px 0 4px;
-  vertical-align: text-top;
-}
-.repository .diff-box .count .bar .add {
-  background-color: #55a532;
-  height: 12px;
-}
-.repository .diff-box .file {
-  color: #888;
-}
-.repository .diff-file-box .header {
-  background-color: #f7f7f7;
-}
-.repository .diff-file-box .file-body.file-code .lines-num {
-  text-align: right;
-  color: #A7A7A7;
-  background: #fafafa;
-  width: 1%;
-}
-.repository .diff-file-box .file-body.file-code .lines-num span.fold {
-  display: block;
-  text-align: center;
-}
-.repository .diff-file-box .file-body.file-code .lines-num-old {
-  border-right: 1px solid #DDD;
-}
-.repository .diff-file-box .code-diff {
-  font-size: 12px;
-}
-.repository .diff-file-box .code-diff td {
-  padding: 0;
-  padding-left: 10px;
-  border-top: none;
-}
-.repository .diff-file-box .code-diff pre {
-  margin: 0;
-}
-.repository .diff-file-box .code-diff .lines-num {
-  border-right: 1px solid #d4d4d5;
-  padding: 0 5px;
-  user-select: none;
-}
-.repository .diff-file-box .code-diff .lines-num::before {
-  content: attr(data-line-number);
-}
-.repository .diff-file-box .code-diff .lines-num.lines-num-old,
-.repository .diff-file-box .code-diff .lines-num.lines-num-new {
-  cursor: pointer;
-}
-.repository .diff-file-box .code-diff .lines-num.lines-num-old:hover,
-.repository .diff-file-box .code-diff .lines-num.lines-num-new:hover {
-  color: #383636;
-}
-.repository .diff-file-box .code-diff tbody tr.tag-code td {
-  background-color: #F0F0F0 !important;
-  border-color: #D2CECE!important;
-  padding-top: 4px;
-  padding-bottom: 4px;
-}
-.repository .diff-file-box .code-diff tbody tr.tag-code td.halfwidth {
-  width: 50%;
-}
-.repository .diff-file-box .code-diff tbody tr.same-code td.active {
-  background-color: #ffffdd !important;
-}
-.repository .diff-file-box .code-diff tbody tr.del-code td.add-code {
-  background-color: #eaffea !important;
-  border-color: #c1e9c1 !important;
-}
-.repository .diff-file-box .code-diff tbody tr.del-code td.add-code pre {
-  background-color: #eaffea !important;
-  border-color: #c1e9c1 !important;
-}
-.repository .diff-file-box .code-diff tbody tr.del-code td {
-  background-color: #ffecec !important;
-  border-color: #f1c0c0 !important;
-}
-.repository .diff-file-box .code-diff tbody tr.del-code td.active {
-  background-color: #ffffdd !important;
-}
-.repository .diff-file-box .code-diff tbody tr.del-code td.halfwidth {
-  width: 50%;
-}
-.repository .diff-file-box .code-diff tbody tr.add-code td {
-  background-color: #eaffea !important;
-  border-color: #c1e9c1 !important;
-}
-.repository .diff-file-box .code-diff tbody tr.add-code td.halfwidth {
-  width: 50%;
-}
-.repository .diff-file-box .code-diff tbody tr.add-code td.active {
-  background-color: #ffffdd !important;
-}
-.repository .diff-file-box .code-diff tbody tr .removed-code {
-  background-color: #ff9999;
-}
-.repository .diff-file-box .code-diff tbody tr .added-code {
-  background-color: #99ff99;
-}
-.repository .diff-file-box.file-content img {
-  max-width: 100%;
-  padding: 5px 5px 0 5px;
-}
-.repository .code-view {
-  overflow: auto;
-  overflow-x: auto;
-  overflow-y: hidden;
-}
-.repository .code-view table {
-  width: 100%;
-  border-spacing: 0;
-}
-.repository.quickstart .guide .item {
-  padding: 0.9em;
-}
-.repository.quickstart .guide .item small {
-  font-weight: normal;
-}
-.repository.quickstart .guide .clone.button:first-child {
-  border-radius: .28571429rem 0 0 .28571429rem;
-}
-.repository.quickstart .guide .ui.action.small.input {
-  width: 100%;
-}
-.repository.quickstart .guide #repo-clone-url {
-  border-radius: 0;
-  padding: 5px 10px;
-  font-size: 1.2em;
-}
-.repository.release #release-list {
-  border-top: 1px solid #DDD;
-  margin-top: 20px;
-  padding-top: 15px;
-}
-.repository.release #release-list > li {
-  list-style: none;
-}
-.repository.release #release-list > li .meta,
-.repository.release #release-list > li .detail {
-  padding-top: 30px;
-  padding-bottom: 40px;
-}
-.repository.release #release-list > li .meta {
-  text-align: right;
-  position: relative;
-}
-.repository.release #release-list > li .meta .tag:not(.icon) {
-  display: block;
-  margin-top: 6px;
-}
-.repository.release #release-list > li .meta .commit {
-  display: block;
-  margin-top: 6px;
-}
-.repository.release #release-list > li .detail {
-  border-left: 1px solid #DDD;
-}
-.repository.release #release-list > li .detail .author img {
-  margin-bottom: -3px;
-}
-.repository.release #release-list > li .detail .download {
-  margin-top: 20px;
-}
-.repository.release #release-list > li .detail .download > a .octicon {
-  margin-left: 5px;
-  margin-right: 5px;
-}
-.repository.release #release-list > li .detail .download .list {
-  padding-left: 0;
-  border-top: 1px solid #eee;
-}
-.repository.release #release-list > li .detail .download .list li {
-  list-style: none;
-  display: block;
-  padding-top: 8px;
-  padding-bottom: 8px;
-  border-bottom: 1px solid #eee;
-}
-.repository.release #release-list > li .detail .dot {
-  width: 9px;
-  height: 9px;
-  background-color: #ccc;
-  z-index: 999;
-  position: absolute;
-  display: block;
-  left: -5px;
-  top: 40px;
-  border-radius: 6px;
-  border: 1px solid #FFF;
-}
-.repository.new.release .target {
-  min-width: 500px;
-}
-.repository.new.release .target #tag-name {
-  margin-top: -4px;
-}
-.repository.new.release .target .at {
-  margin-left: -5px;
-  margin-right: 5px;
-}
-.repository.new.release .target .dropdown.icon {
-  margin: 0;
-  padding-top: 3px;
-}
-.repository.new.release .target .selection.dropdown {
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
-.repository.new.release .prerelease.field {
-  margin-bottom: 0;
-}
-.repository.forks .list {
-  margin-top: 0;
-}
-.repository.forks .list .item {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  border-bottom: 1px solid #DDD;
-}
-.repository.forks .list .item .ui.avatar {
-  float: left;
-  margin-right: 5px;
-}
-.repository.forks .list .item .link {
-  padding-top: 5px;
-}
-.repository.wiki.start .ui.segment {
-  padding-top: 70px;
-  padding-bottom: 100px;
-}
-.repository.wiki.start .ui.segment .mega-octicon {
-  font-size: 48px;
-}
-.repository.wiki.new .CodeMirror .CodeMirror-code {
-  font-family: "Consolas", monospace;
-}
-.repository.wiki.new .CodeMirror .CodeMirror-code .cm-comment {
-  background: inherit;
-}
-.repository.wiki.new .editor-preview {
-  background-color: white;
-}
-.repository.wiki.view .choose.page {
-  margin-top: -5px;
-}
-.repository.wiki.view .ui.sub.header {
-  text-transform: none;
-}
-.repository.wiki.view .markdown {
-  padding-left: 25px;
-  margin-left: -25px;
-}
-.repository.wiki.view .markdown h1:first-of-type,
-.repository.wiki.view .markdown h2:first-of-type,
-.repository.wiki.view .markdown h3:first-of-type,
-.repository.wiki.view .markdown h4:first-of-type,
-.repository.wiki.view .markdown h5:first-of-type,
-.repository.wiki.view .markdown h6:first-of-type {
-  margin-top: 0;
-}
-.repository.settings.collaboration .collaborator.list {
-  padding: 0;
-}
-.repository.settings.collaboration .collaborator.list > .item {
-  margin: 0;
-  line-height: 2em;
-}
-.repository.settings.collaboration .collaborator.list > .item:not(:last-child) {
-  border-bottom: 1px solid #DDD;
-}
-.repository.settings.collaboration #repo-collab-form #search-user-box .results {
-  left: 7px;
-}
-.repository.settings.collaboration #repo-collab-form .ui.button {
-  margin-left: 5px;
-  margin-top: -3px;
-}
-.repository.settings.settings.branches .protected-branches .selection.dropdown {
-  width: 300px;
-}
-.repository.settings.settings.branches .protected-branches .item {
-  border: 1px solid #eaeaea;
-  padding: 10px 15px;
-}
-.repository.settings.settings.branches .protected-branches .item:not(:last-child) {
-  border-bottom: 0;
-}
-.repository.settings.settings.branches .branch-protection .help {
-  margin-left: 26px;
-  padding-top: 0;
-}
-.repository.settings.settings.branches .branch-protection .fields {
-  margin-left: 20px;
-  display: block;
-}
-.repository.settings.settings.branches .branch-protection .whitelist {
-  margin-left: 26px;
-}
-.repository.settings.settings.branches .branch-protection .whitelist .dropdown img {
-  display: inline-block;
-}
-.repository.settings.webhooks .types .menu .item {
-  padding: 10px !important;
-}
-.repository.settings.webhooks .logo.item img {
-  margin-top: -4px;
-}
-.repository.settings.webhook .text.desc {
-  margin-top: 5px;
-}
-.repository.settings.webhook .events .column {
-  padding-bottom: 0;
-}
-.repository.settings.webhook .events .help {
-  font-size: 13px;
-  margin-left: 26px;
-  padding-top: 0;
-}
-.webhook .hook.history.list .right.menu .redelivery.button {
-  font-size: 12px;
-  margin-top: 6px;
-  height: 30px;
-}
-.webhook .hook.history.list .right.menu .redelivery.button .octicon {
-  font: normal normal normal 13px/1 Octicons;
-  width: 12px;
-}
-.user-cards .list {
-  padding: 0;
-}
-.user-cards .list .item {
-  list-style: none;
-  width: 32%;
-  margin: 10px 10px 10px 0;
-  padding-bottom: 14px;
-  float: left;
-}
-.user-cards .list .item .avatar {
-  width: 48px;
-  height: 48px;
-  float: left;
-  display: block;
-  margin-right: 10px;
-}
-.user-cards .list .item .name {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-weight: normal;
-}
-.user-cards .list .item .meta {
-  margin-top: 5px;
-}
-#search-repo-box .results,
-#search-user-box .results {
-  padding: 0;
-  position: absolute;
-}
-#search-repo-box .results .item,
-#search-user-box .results .item {
-  padding: 10px 15px;
-  border-bottom: 1px solid #DDD;
-  cursor: pointer;
-}
-#search-repo-box .results .item:hover,
-#search-user-box .results .item:hover {
-  background: rgba(0, 0, 0, 0.05) !important;
-  color: rgba(0, 0, 0, 0.95) !important;
-}
-#search-repo-box .results .item img,
-#search-user-box .results .item img {
-  margin-right: 8px;
-}
-.issue.list {
-  list-style: none;
-  padding-top: 15px;
-}
-.issue.list > .item {
-  padding-top: 15px;
-  padding-bottom: 10px;
-  border-bottom: 1px dashed #AAA;
-}
-.issue.list > .item .title {
-  color: #444;
-  font-size: 15px;
-  font-weight: bold;
-  margin: 0 6px;
-}
-.issue.list > .item .title:hover {
-  color: #000;
-}
-.issue.list > .item .comment {
-  padding-right: 10px;
-  color: #666;
-}
-.issue.list > .item .desc {
-  padding-top: 5px;
-  color: #999;
-}
-.issue.list > .item .desc a.milestone {
-  padding-left: 5px;
-  color: #999!important;
-}
-.issue.list > .item .desc a.milestone:hover {
-  color: #000!important;
-}
-.issue.list > .item .desc .assignee {
-  margin-top: -5px;
-  margin-right: 5px;
-}
-.page.buttons {
-  padding-top: 15px;
-}
-.ui.form .dropzone {
-  width: 100%;
-  margin-bottom: 10px;
-  border: 2px dashed #0087F7;
-  box-shadow: none!important;
-}
-.ui.form .dropzone .dz-error-message {
-  top: 140px;
-}
-.settings .content {
-  margin-top: 2px;
-}
-.settings .key.list .item:not(:first-child) {
-  border-top: 1px solid #eaeaea;
-}
-.settings .key.list .ssh-key-state-indicator {
-  float: left;
-  color: gray;
-  padding-left: 10px;
-  padding-top: 10px;
-}
-.settings .key.list .ssh-key-state-indicator.active {
-  color: #6cc644;
-}
-.settings .key.list .meta {
-  padding-top: 5px;
-}
-.settings .key.list .print {
-  color: #767676;
-}
-.settings .key.list .activity {
-  color: #666;
-}
-.settings .hook.list > .item:not(:first-child) {
-  border-top: 1px solid #eaeaea;
-}
-.settings .hook.list .item {
-  padding: 10px 20px;
-}
-.settings .hook.list .item .octicon,
-.settings .hook.list .item .fa {
-  width: 20px;
-  text-align: center;
-}
-.settings .hook.list .item a {
-  /* These are technically the same, but use both */
-  overflow-wrap: break-word;
-  word-wrap: break-word;
-  -ms-word-break: break-all;
-  /* This is the dangerous one in WebKit, as it breaks things wherever */
-  word-break: break-all;
-  /* Instead use this non-standard one: */
-  word-break: break-word;
-  /* Adds a hyphen where the word breaks, if supported (No Blink) */
-  -ms-hyphens: auto;
-  -moz-hyphens: auto;
-  -webkit-hyphens: auto;
-  hyphens: auto;
-}
-.settings .hook.history.list .item {
-  padding-left: 13px;
-}
-.settings .hook.history.list .item .meta .ui.right {
-  margin-top: 5px;
-}
-.settings .hook.history.list .item .meta .ui.right .time {
-  font-size: 12px;
-}
-.settings .hook.history.list .item .info {
-  margin-top: 10px;
-}
-.settings .hook.history.list .item .info .tabular.menu .item {
-  font-weight: 500;
-}
-.settings .hook.history.list .item .info .tab.segment {
-  border: none;
-  padding: 0;
-  padding-top: 10px;
-  box-shadow: none;
-}
-.settings .hook.history.list .item .info .tab.segment > * {
-  color: #666;
-}
-.settings .hook.history.list .item .info .tab.segment pre {
-  word-wrap: break-word;
-}
-.settings .hook.history.list .item .info .tab.segment pre .hljs {
-  padding: 0;
-  background-color: inherit;
-}
-.ui.vertical.menu .header.item {
-  font-size: 1em;
-  background: #f0f0f0;
-}
-.edit-label.modal .form .column,
-.new-label.segment .form .column {
-  padding-right: 0;
-}
-.edit-label.modal .form .buttons,
-.new-label.segment .form .buttons {
-  margin-left: auto;
-  padding-top: 15px;
-}
-.edit-label.modal .form .color.picker.column,
-.new-label.segment .form .color.picker.column {
-  width: auto;
-}
-.edit-label.modal .form .color.picker.column .color-picker,
-.new-label.segment .form .color.picker.column .color-picker {
-  height: 35px;
-  width: auto;
-  padding-left: 30px;
-}
-.edit-label.modal .form .minicolors-swatch.minicolors-sprite,
-.new-label.segment .form .minicolors-swatch.minicolors-sprite {
-  top: 10px;
-  left: 10px;
-  width: 15px;
-  height: 15px;
-}
-.edit-label.modal .form .precolors,
-.new-label.segment .form .precolors {
-  padding-left: 0;
-  padding-right: 0;
-  margin: 3px 10px auto 10px;
-  width: 120px;
-}
-.edit-label.modal .form .precolors .color,
-.new-label.segment .form .precolors .color {
-  float: left;
-  width: 15px;
-  height: 15px;
-}
-#avatar-arrow:before,
-#avatar-arrow:after {
-  right: 100%;
-  top: 20px;
-  border: solid transparent;
-  content: " ";
-  height: 0;
-  width: 0;
-  position: absolute;
-  pointer-events: none;
-}
-#avatar-arrow:before {
-  border-right-color: #D4D4D5;
-  border-width: 9px;
-  margin-top: -9px;
-}
-#avatar-arrow:after {
-  border-right-color: #f7f7f7;
-  border-width: 8px;
-  margin-top: -8px;
-}
-#transfer-repo-modal .ui.message,
-#delete-repo-modal .ui.message {
-  width: 100%!important;
-}
-.tab-size-1 {
-  tab-size: 1 !important;
-  -moz-tab-size: 1 !important;
-}
-.tab-size-2 {
-  tab-size: 2 !important;
-  -moz-tab-size: 2 !important;
-}
-.tab-size-3 {
-  tab-size: 3 !important;
-  -moz-tab-size: 3 !important;
-}
-.tab-size-4 {
-  tab-size: 4 !important;
-  -moz-tab-size: 4 !important;
-}
-.tab-size-5 {
-  tab-size: 5 !important;
-  -moz-tab-size: 5 !important;
-}
-.tab-size-6 {
-  tab-size: 6 !important;
-  -moz-tab-size: 6 !important;
-}
-.tab-size-7 {
-  tab-size: 7 !important;
-  -moz-tab-size: 7 !important;
-}
-.tab-size-8 {
-  tab-size: 8 !important;
-  -moz-tab-size: 8 !important;
-}
-.tab-size-9 {
-  tab-size: 9 !important;
-  -moz-tab-size: 9 !important;
-}
-.tab-size-10 {
-  tab-size: 10 !important;
-  -moz-tab-size: 10 !important;
-}
-.tab-size-11 {
-  tab-size: 11 !important;
-  -moz-tab-size: 11 !important;
-}
-.tab-size-12 {
-  tab-size: 12 !important;
-  -moz-tab-size: 12 !important;
-}
-.tab-size-13 {
-  tab-size: 13 !important;
-  -moz-tab-size: 13 !important;
-}
-.tab-size-14 {
-  tab-size: 14 !important;
-  -moz-tab-size: 14 !important;
-}
-.tab-size-15 {
-  tab-size: 15 !important;
-  -moz-tab-size: 15 !important;
-}
-.tab-size-16 {
-  tab-size: 16 !important;
-  -moz-tab-size: 16 !important;
-}
-.CodeMirror {
-  font: 14px Consolas, "Liberation Mono", Menlo, Courier, monospace;
-}
-.CodeMirror.cm-s-default {
-  border-radius: 3px;
-  padding: 0 !important;
-}
-.CodeMirror .cm-comment {
-  background: inherit !important;
-}
-.organization {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.organization .head .ui.header .text {
-  vertical-align: middle;
-  font-size: 1.6rem;
-  margin-left: 15px;
-}
-.organization .head .ui.header .ui.right {
-  margin-top: 5px;
-}
-.organization.new.org form {
-  margin: auto;
-  width: 800px!important;
-}
-.organization.new.org form .ui.message {
-  text-align: center;
-}
-.organization.new.org form .header {
-  padding-left: 280px !important;
-}
-.organization.new.org form .inline.field > label {
-  text-align: right;
-  width: 250px !important;
-  word-wrap: break-word;
-}
-.organization.new.org form .help {
-  margin-left: 265px !important;
-}
-.organization.new.org form .optional .title {
-  margin-left: 250px !important;
-}
-.organization.new.org form input,
-.organization.new.org form textarea {
-  width: 50% !important;
-}
-.organization.options input {
-  min-width: 300px;
-}
-.organization.profile #org-avatar {
-  width: 100px;
-  height: 100px;
-  margin-right: 15px;
-}
-.organization.profile #org-info .ui.header {
-  font-size: 36px;
-  margin-bottom: 0;
-}
-.organization.profile #org-info .desc {
-  font-size: 16px;
-  margin-bottom: 10px;
-}
-.organization.profile #org-info .meta .item {
-  display: inline-block;
-  margin-right: 10px;
-}
-.organization.profile #org-info .meta .item .icon {
-  margin-right: 5px;
-}
-.organization.profile .ui.top.header .ui.right {
-  margin-top: 0;
-}
-.organization.profile .teams .item {
-  padding: 10px 15px;
-}
-.organization.teams .members .ui.avatar,
-.organization.profile .members .ui.avatar {
-  width: 48px;
-  height: 48px;
-  margin-right: 5px;
-}
-.organization.invite #invite-box {
-  margin: auto;
-  margin-top: 50px;
-  width: 500px !important;
-}
-.organization.invite #invite-box #search-user-box input {
-  margin-left: 0;
-  width: 300px;
-}
-.organization.invite #invite-box .ui.button {
-  margin-left: 5px;
-  margin-top: -3px;
-}
-.organization.members .list .item {
-  margin-left: 0;
-  margin-right: 0;
-  border-bottom: 1px solid #eee;
-}
-.organization.members .list .item .ui.avatar {
-  width: 48px;
-  height: 48px;
-}
-.organization.members .list .item .meta {
-  line-height: 24px;
-}
-.organization.teams .detail .item {
-  padding: 10px 15px;
-}
-.organization.teams .detail .item:not(:last-child) {
-  border-bottom: 1px solid #eee;
-}
-.organization.teams .repositories .item,
-.organization.teams .members .item {
-  padding: 10px 20px;
-  line-height: 32px;
-}
-.organization.teams .repositories .item:not(:last-child),
-.organization.teams .members .item:not(:last-child) {
-  border-bottom: 1px solid #DDD;
-}
-.organization.teams .repositories .item .button,
-.organization.teams .members .item .button {
-  padding: 9px 10px;
-}
-.organization.teams #add-repo-form input,
-.organization.teams #add-member-form input {
-  margin-left: 0;
-}
-.organization.teams #add-repo-form .ui.button,
-.organization.teams #add-member-form .ui.button {
-  margin-left: 5px;
-  margin-top: -3px;
-}
-.user:not(.icon) {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.user.settings .list .item.ui.grid {
-  margin-top: 15px;
-}
-.user.settings .email.list .item:not(:first-child) {
-  border-top: 1px solid #eaeaea;
-  height: 50px;
-}
-.user.settings .email.list .item:not(:first-child) .button {
-  margin-top: -10px;
-}
-.user.settings .email.list .item .ui.primary.label {
-  margin-top: -5px;
-}
-.user.settings.sshkeys .right.floated.button,
-.user.settings.applications .right.floated.button {
-  padding-top: 1rem;
-  padding-bottom: 1rem;
-}
-.user.settings.security .two-factor .toggle.button {
-  margin-top: -5px;
-}
-.user.settings.repositories .repos {
-  padding: 0;
-}
-.user.settings.repositories .repos .item {
-  padding: 15px;
-  height: 46px;
-}
-.user.settings.repositories .repos .item .button {
-  margin-top: -5px;
-}
-.user.settings.organizations .orgs.non-empty {
-  padding: 0;
-}
-.user.settings.organizations .orgs .item {
-  padding: 10px;
-}
-.user.settings.organizations .orgs .item .button {
-  margin-top: 5px;
-  margin-right: 8px;
-}
-.user.profile .ui.card .header {
-  word-break: break-all;
-}
-.user.profile .ui.card .username {
-  display: block;
-}
-.user.profile .ui.card .extra.content {
-  padding: 0;
-}
-.user.profile .ui.card .extra.content ul {
-  margin: 0;
-  padding: 0;
-}
-.user.profile .ui.card .extra.content ul li {
-  padding: 10px;
-  list-style: none;
-}
-.user.profile .ui.card .extra.content ul li:not(:last-child) {
-  border-bottom: 1px solid #eaeaea;
-}
-.user.profile .ui.card .extra.content ul li .octicon {
-  margin-left: 1px;
-  margin-right: 5px;
-}
-.user.profile .ui.card .extra.content ul li.follow .ui.button {
-  width: 100%;
-}
-.user.profile .ui.repository.list {
-  margin-top: 25px;
-}
-.user.followers .header.name {
-  font-size: 20px;
-  line-height: 24px;
-  vertical-align: middle;
-}
-.user.followers .follow .ui.button {
-  padding: 8px 15px;
-}
-.dashboard {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.dashboard.feeds .context.user.menu,
-.dashboard.issues .context.user.menu {
-  z-index: 101;
-  min-width: 200px;
-}
-.dashboard.feeds .context.user.menu .ui.header,
-.dashboard.issues .context.user.menu .ui.header {
-  font-size: 1rem;
-  text-transform: none;
-}
-.dashboard.feeds .filter.menu .item,
-.dashboard.issues .filter.menu .item {
-  text-align: left;
-}
-.dashboard.feeds .filter.menu .item .text,
-.dashboard.issues .filter.menu .item .text {
-  height: 16px;
-  vertical-align: middle;
-}
-.dashboard.feeds .filter.menu .item .text.truncate,
-.dashboard.issues .filter.menu .item .text.truncate {
-  width: 85%;
-}
-.dashboard.feeds .filter.menu .item .floating.label,
-.dashboard.issues .filter.menu .item .floating.label {
-  top: 7px;
-  left: 90%;
-  width: 15%;
-}
-.dashboard.feeds .filter.menu .jump.item,
-.dashboard.issues .filter.menu .jump.item {
-  margin: 1px;
-  padding-right: 0;
-}
-.dashboard.feeds .filter.menu .menu,
-.dashboard.issues .filter.menu .menu {
-  max-height: 300px;
-  overflow-x: auto;
-  right: 0!important;
-  left: auto!important;
-}
-.dashboard.feeds .ui.right .head.menu,
-.dashboard.issues .ui.right .head.menu {
-  margin-top: -5px;
-}
-.dashboard.feeds .ui.right .head.menu .item.active,
-.dashboard.issues .ui.right .head.menu .item.active {
-  color: #d9453d;
-}
-.feeds .news > .ui.grid {
-  margin-left: auto;
-  margin-right: auto;
-}
-.feeds .news .ui.avatar {
-  margin-top: 13px;
-}
-.feeds .news p {
-  line-height: 0.9em;
-}
-.feeds .news .time-since {
-  font-size: 13px;
-}
-.feeds .news .issue.title {
-  line-height: 1em;
-  width: 80%;
-}
-.feeds .news .push.news .content ul {
-  font-size: 13px;
-  list-style: none;
-  padding-left: 10px;
-}
-.feeds .news .push.news .content ul img {
-  margin-bottom: -2px;
-}
-.feeds .news .push.news .content ul .text.truncate {
-  width: 60%;
-  margin-bottom: -5px;
-}
-.feeds .news .commit-id {
-  font-family: Consolas, monospace;
-}
-.feeds .news code {
-  padding: 3px;
-  font-size: 85%;
-  background-color: rgba(0, 0, 0, 0.04);
-  border-radius: 3px;
-  word-break: break-all;
-}
-.feeds .list .header .ui.label {
-  margin-top: -4px;
-  padding: 4px 5px;
-  font-weight: normal;
-}
-.feeds .list .header .plus.icon {
-  margin-top: 5px;
-}
-.feeds .list ul {
-  list-style: none;
-  margin: 0;
-  padding-left: 0;
-}
-.feeds .list ul li:not(:last-child) {
-  border-bottom: 1px solid #EAEAEA;
-}
-.feeds .list ul li.private {
-  background-color: #fcf8e9;
-}
-.feeds .list ul li a {
-  padding: 6px 1.2em;
-  display: block;
-}
-.feeds .list ul li a .octicon {
-  color: #888;
-}
-.feeds .list ul li a .octicon.rear {
-  font-size: 15px;
-}
-.feeds .list ul li a .star-num {
-  font-size: 12px;
-}
-.feeds .list .repo-owner-name-list .item-name {
-  max-width: 70%;
-  margin-bottom: -4px;
-}
-.feeds .list #collaborative-repo-list .owner-and-repo {
-  max-width: 80%;
-  margin-bottom: -5px;
-}
-.feeds .list #collaborative-repo-list .owner-name {
-  max-width: 120px;
-  margin-bottom: -5px;
-}
-.admin {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.admin .table.segment {
-  padding: 0;
-  font-size: 13px;
-}
-.admin .table.segment:not(.striped) {
-  padding-top: 5px;
-}
-.admin .table.segment:not(.striped) thead th:last-child {
-  padding-right: 5px !important;
-}
-.admin .table.segment th {
-  padding-top: 5px;
-  padding-bottom: 5px;
-}
-.admin .table.segment:not(.select) th:first-of-type,
-.admin .table.segment:not(.select) td:first-of-type {
-  padding-left: 15px !important;
-}
-.admin.user .email {
-  max-width: 200px;
-}
-.admin dl.admin-dl-horizontal {
-  padding: 20px;
-  margin: 0;
-}
-.admin dl.admin-dl-horizontal dd {
-  margin-left: 240px;
-}
-.admin dl.admin-dl-horizontal dt {
-  font-weight: bolder;
-  float: left;
-  width: 250px;
-  clear: left;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.admin.config #test-mail-btn {
-  margin-left: 5px;
-}
-.admin.config table tbody tr td:first-child {
-  font-weight: bold;
-}
-.admin.config pre {
-  background-color: #f7f7f7;
-  padding: 5px;
-}
-.admin.config code {
-  color: #db2828;
-}
-.admin.config .log-config table tbody tr td:first-child {
-  width: 100px;
-}
-.explore {
-  padding-top: 15px;
-  padding-bottom: 80px;
-}
-.explore .navbar .octicon {
-  width: 16px;
-  text-align: center;
-}
-.ui.repository.list .item {
-  padding-bottom: 25px;
-}
-.ui.repository.list .item:not(:first-child) {
-  border-top: 1px solid #eee;
-  padding-top: 25px;
-}
-.ui.repository.list .item .ui.header {
-  font-size: 1.5rem;
-  padding-bottom: 10px;
-}
-.ui.repository.list .item .ui.header .name {
-  word-break: break-all;
-}
-.ui.repository.list .item .ui.header .metas {
-  color: #888;
-  font-size: 14px;
-  font-weight: normal;
-}
-.ui.repository.list .item .ui.header .metas span:not(:last-child) {
-  margin-right: 5px;
-}
-.ui.repository.list .item .time {
-  font-size: 12px;
-  color: #808080;
-}
-.ui.user.list .item {
-  padding-bottom: 25px;
-}
-.ui.user.list .item:not(:first-child) {
-  border-top: 1px solid #eee;
-  padding-top: 25px;
-}
-.ui.user.list .item .ui.avatar.image {
-  width: 40px;
-  height: 40px;
-}
-.ui.user.list .item .description {
-  margin-top: 5px;
-}
-.ui.user.list .item .description .octicon:not(:first-child) {
-  margin-left: 5px;
-}
-.ui.user.list .item .description a {
-  color: #333;
-}
-.ui.user.list .item .description a:hover {
-  text-decoration: underline;
-}

File diff suppressed because it is too large
+ 0 - 18
public/css/semantic-2.2.13.min.css


+ 4 - 3
templates/base/head.tmpl

@@ -30,9 +30,9 @@
 		<meta property="og:url" content="{{AppURL}}" />
 		<meta property="og:type" content="website" />
 		<meta property="og:title" content="{{AppName}}">
-		<meta property="og:description" content="Gogs is a painless self-hosted Git service.">
+		<meta property="og:description" content="Endevirion git repositories server.">
 		<meta property="og:image" content="{{AppURL}}img/favicon.png" />
-		<meta property="og:site_name" content="Gogs">
+		<meta property="og:site_name" content="Endevirion.Git">
 	{{end}}
 
 	<link rel="shortcut icon" href="{{AppSubURL}}/img/favicon.png" />
@@ -69,7 +69,8 @@
 	</noscript>
 
 	<!-- Endevir's stylesheet overrides -->
-	<link rel="stylesheet" href="{{AppSubURL}}/css/gogs-overrides.css">
+	<link rel="stylesheet" href="{{AppSubURL}}/css/custom.css">
+	<link rel="stylesheet" href="{{AppSubURL}}/css/custom-1.css">
 
 	<!-- JavaScript -->
 	<script src="{{AppSubURL}}/js/semantic-2.4.2.min.js"></script>

+ 24 - 23
templates/home.tmpl

@@ -7,7 +7,7 @@
 			</div>
 			<div class="hero">
 				<h1 class="ui icon header title">
-					Gi1dor's git server
+					Endevir's git server
 				</h1>
 				{{if eq .Lang "ru-RU"}}
 				<h2>Добро пожаловать на открытый сервер Git репозиториев!</h2>
@@ -17,37 +17,38 @@
 			</div>
 		</div>
 	</div>
-	
+
 	{{if eq .Lang "ru-RU"}}
 		<div class="ui stackable middle very relaxed page grid">
 			<div class="twenty wide center aligned centered column">
-				<p class="large">На этом сервере вы можете просмотреть все проекты, в которых я участвовал и которые находятся в открытом доступе, 
-				а также зарегистрироваться и использовать сервер как хранилище своих проектов. 
-				<br><br>
-				Ограничений на размер проекта и их количество, а также количество публичных и приватных репозиториев пока нет.
-				<br> 
-				Ввиду того, что сервер разрабатывается и поддерживается мной исключительно в образовательных целях, гарантия 100% работоспособности и аптайма не даётся.
-				<br><br><br>
-				За основу был взят проект Gogs (<a href="http://gogs.io/">gogs.io</a>), значительно схожий по интерфейсу и возможностям 
-				с сайтом <a href="github.com" target="blank">github.com.</a>.
+				<p class="large">
+					На этом сервере вы можете просмотреть все проекты, в которых я участвовал и которые находятся в открытом доступе, а также зарегистрироваться и использовать сервер как хранилище своих проектов. 
+				</p>
+				<p class="large">
+					Ограничений на размер проекта и их количество, а также количество публичных и приватных репозиториев пока нет.
+				</p>
+				<p class="large"> 
+					Ввиду того, что сервер разрабатывается и поддерживается мной исключительно в образовательных целях, гарантия 100% работоспособности и аптайма не даётся.
+				</p>
+				<p class="large"> 
+					За основу был взят проект Gogs (<a href="http://gogs.io/">gogs.io</a>), значительно схожий по интерфейсу и возможностям с сайтом <a href="github.com" target="blank">github.com.</a>.
 				</p>
 			</div>
 		</div> 
 	{{else}}
 		<div class="ui stackable middle very relaxed page grid">
 			<div class="twenty wide center aligned centered column">
-				<p class="large">On this server you can see and follow all my open-source projects, or register and use this 
-				platform to place and maintain your own projects.
-				<br><br>
-				There are still no limitations on public/private repositories number, neither on their size.
-				<br> 
-				According to the fact, that this site (as well as all other sites on gi1dor.ru domain) is developed and maintained by me mostly in educational purposes,
-				I cannot guarantee 100% uptime and stability of this server. By the way, backups of all repositories (and whole hard drive) are created frequently, so 
-				there's a very little chance that your data could be destroyed or corrupted. Any questions or suggestions you can send me by e-mail: 
-				<a href="mailto:e1.gi1dor@gmail.com">e1.gi1dor@gmail.com</a> 
-				<br><br><br>
-				This site is based on Gogs project (<a href="http://gogs.io/">gogs.io</a>), which has similar UI and features as 
-				<a href="github.com" target="blank">github.com</a> site has.
+				<p class="large">
+					On this server you can see and follow all my open-source projects, or register and use this platform to place and maintain your own projects.
+				</p>
+				<p class="large">
+					There are still no limitations on public/private repositories number, neither on their size.
+				</p>
+				<p>
+					According to the fact, that this site (as well as all other sites on gi1dor.ru domain) is developed and maintained by me mostly in educational purposes, I cannot guarantee 100% uptime and stability of this server. By the way, backups of all repositories (and whole hard drive) are created frequently, so there's a very little chance that your data could be destroyed or corrupted. Any questions or suggestions you can send me by e-mail: <a href="mailto:e1.gi1dor@gmail.com">e1.gi1dor@gmail.com</a> 
+				</p> 
+				<p>
+					This site is based on Gogs project (<a href="http://gogs.io/">gogs.io</a>), which has similar UI and features as <a href="github.com" target="blank">github.com</a> site has.
 				</p>
 			</div>
 		</div> 

Some files were not shown because too many files changed in this diff