forked from mirror/gitea
Compare commits
9 Commits
c77e8140bc
...
9946353282
Author | SHA1 | Date | |
---|---|---|---|
silverwind | 9946353282 | ||
wxiaoguang | 4c6e2da088 | ||
Lunny Xiao | e20428d8f6 | ||
silverwind | f3267548ab | ||
silverwind | 044cc169e7 | ||
silverwind | 4b1063f3db | ||
silverwind | 6999a88fd9 | ||
silverwind | ce130ae8da | ||
Jonathan Tran | b18c04ebde |
|
@ -318,7 +318,7 @@ rules:
|
|||
jquery/no-serialize: [2]
|
||||
jquery/no-show: [2]
|
||||
jquery/no-size: [2]
|
||||
jquery/no-sizzle: [0]
|
||||
jquery/no-sizzle: [2]
|
||||
jquery/no-slide: [0]
|
||||
jquery/no-submit: [0]
|
||||
jquery/no-text: [0]
|
||||
|
@ -470,7 +470,7 @@ rules:
|
|||
no-jquery/no-selector-prop: [2]
|
||||
no-jquery/no-serialize: [2]
|
||||
no-jquery/no-size: [2]
|
||||
no-jquery/no-sizzle: [0]
|
||||
no-jquery/no-sizzle: [2]
|
||||
no-jquery/no-slide: [2]
|
||||
no-jquery/no-sub: [2]
|
||||
no-jquery/no-support: [2]
|
||||
|
|
|
@ -36,6 +36,7 @@ var microcmdUserChangePassword = &cli.Command{
|
|||
&cli.BoolFlag{
|
||||
Name: "must-change-password",
|
||||
Usage: "User must change password",
|
||||
Value: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -57,23 +58,18 @@ func runChangePassword(c *cli.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
var mustChangePassword optional.Option[bool]
|
||||
if c.IsSet("must-change-password") {
|
||||
mustChangePassword = optional.Some(c.Bool("must-change-password"))
|
||||
}
|
||||
|
||||
opts := &user_service.UpdateAuthOptions{
|
||||
Password: optional.Some(c.String("password")),
|
||||
MustChangePassword: mustChangePassword,
|
||||
MustChangePassword: optional.Some(c.Bool("must-change-password")),
|
||||
}
|
||||
if err := user_service.UpdateAuth(ctx, user, opts); err != nil {
|
||||
switch {
|
||||
case errors.Is(err, password.ErrMinLength):
|
||||
return fmt.Errorf("Password is not long enough. Needs to be at least %d", setting.MinPasswordLength)
|
||||
return fmt.Errorf("password is not long enough, needs to be at least %d characters", setting.MinPasswordLength)
|
||||
case errors.Is(err, password.ErrComplexity):
|
||||
return errors.New("Password does not meet complexity requirements")
|
||||
return errors.New("password does not meet complexity requirements")
|
||||
case errors.Is(err, password.ErrIsPwned):
|
||||
return errors.New("The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password.\nFor more details, see https://haveibeenpwned.com/Passwords")
|
||||
return errors.New("the password is in a list of stolen passwords previously exposed in public data breaches, please try again with a different password, to see more details: https://haveibeenpwned.com/Passwords")
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
auth_model "code.gitea.io/gitea/models/auth"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
pwd "code.gitea.io/gitea/modules/auth/password"
|
||||
"code.gitea.io/gitea/modules/optional"
|
||||
|
@ -46,8 +47,9 @@ var microcmdUserCreate = &cli.Command{
|
|||
Usage: "Generate a random password for the user",
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "must-change-password",
|
||||
Usage: "Set this option to false to prevent forcing the user to change their password after initial login, (Default: true)",
|
||||
Name: "must-change-password",
|
||||
Usage: "Set to false to prevent forcing the user to change their password after initial login",
|
||||
DisableDefaultText: true,
|
||||
},
|
||||
&cli.IntFlag{
|
||||
Name: "random-password-length",
|
||||
|
@ -71,10 +73,10 @@ func runCreateUser(c *cli.Context) error {
|
|||
}
|
||||
|
||||
if c.IsSet("name") && c.IsSet("username") {
|
||||
return errors.New("Cannot set both --name and --username flags")
|
||||
return errors.New("cannot set both --name and --username flags")
|
||||
}
|
||||
if !c.IsSet("name") && !c.IsSet("username") {
|
||||
return errors.New("One of --name or --username flags must be set")
|
||||
return errors.New("one of --name or --username flags must be set")
|
||||
}
|
||||
|
||||
if c.IsSet("password") && c.IsSet("random-password") {
|
||||
|
@ -110,17 +112,21 @@ func runCreateUser(c *cli.Context) error {
|
|||
return errors.New("must set either password or random-password flag")
|
||||
}
|
||||
|
||||
// always default to true
|
||||
changePassword := true
|
||||
|
||||
// If this is the first user being created.
|
||||
// Take it as the admin and don't force a password update.
|
||||
if n := user_model.CountUsers(ctx, nil); n == 0 {
|
||||
changePassword = false
|
||||
}
|
||||
|
||||
isAdmin := c.Bool("admin")
|
||||
mustChangePassword := true // always default to true
|
||||
if c.IsSet("must-change-password") {
|
||||
changePassword = c.Bool("must-change-password")
|
||||
// if the flag is set, use the value provided by the user
|
||||
mustChangePassword = c.Bool("must-change-password")
|
||||
} else {
|
||||
// check whether there are users in the database
|
||||
hasUserRecord, err := db.IsTableNotEmpty(&user_model.User{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("IsTableNotEmpty: %w", err)
|
||||
}
|
||||
if !hasUserRecord && isAdmin {
|
||||
// if this is the first admin being created, don't force to change password (keep the old behavior)
|
||||
mustChangePassword = false
|
||||
}
|
||||
}
|
||||
|
||||
restricted := optional.None[bool]()
|
||||
|
@ -136,8 +142,8 @@ func runCreateUser(c *cli.Context) error {
|
|||
Name: username,
|
||||
Email: c.String("email"),
|
||||
Passwd: password,
|
||||
IsAdmin: c.Bool("admin"),
|
||||
MustChangePassword: changePassword,
|
||||
IsAdmin: isAdmin,
|
||||
MustChangePassword: mustChangePassword,
|
||||
Visibility: visibility,
|
||||
}
|
||||
|
||||
|
|
|
@ -83,8 +83,7 @@ Admin operations:
|
|||
- `--email value`: Email. Required.
|
||||
- `--admin`: If provided, this makes the user an admin. Optional.
|
||||
- `--access-token`: If provided, an access token will be created for the user. Optional. (default: false).
|
||||
- `--must-change-password`: If provided, the created user will be required to choose a newer password after the
|
||||
initial login. Optional. (default: true).
|
||||
- `--must-change-password`: The created user will be required to set a new password after the initial login, default: true. It could be disabled by `--must-change-password=false`.
|
||||
- `--random-password`: If provided, a randomly generated password will be used as the password of the created
|
||||
user. The value of `--password` will be discarded. Optional.
|
||||
- `--random-password-length`: If provided, it will be used to configure the length of the randomly generated
|
||||
|
@ -95,7 +94,7 @@ Admin operations:
|
|||
- Options:
|
||||
- `--username value`, `-u value`: Username. Required.
|
||||
- `--password value`, `-p value`: New password. Required.
|
||||
- `--must-change-password`: If provided, the user is required to choose a new password after the login. Optional.
|
||||
- `--must-change-password`: The user is required to set a new password after the login, default: true. It could be disabled by `--must-change-password=false`.
|
||||
- Examples:
|
||||
- `gitea admin user change-password --username myname --password asecurepassword`
|
||||
- `must-change-password`:
|
||||
|
|
|
@ -284,8 +284,8 @@ func MaxBatchInsertSize(bean any) int {
|
|||
}
|
||||
|
||||
// IsTableNotEmpty returns true if table has at least one record
|
||||
func IsTableNotEmpty(tableName string) (bool, error) {
|
||||
return x.Table(tableName).Exist()
|
||||
func IsTableNotEmpty(beanOrTableName any) (bool, error) {
|
||||
return x.Table(beanOrTableName).Exist()
|
||||
}
|
||||
|
||||
// DeleteAllRecords will delete all the records of this table
|
||||
|
|
|
@ -15,10 +15,11 @@ import (
|
|||
|
||||
// CommitStatusSummary holds the latest commit Status of a single Commit
|
||||
type CommitStatusSummary struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
RepoID int64 `xorm:"INDEX UNIQUE(repo_id_sha)"`
|
||||
SHA string `xorm:"VARCHAR(64) NOT NULL INDEX UNIQUE(repo_id_sha)"`
|
||||
State api.CommitStatusState `xorm:"VARCHAR(7) NOT NULL"`
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
RepoID int64 `xorm:"INDEX UNIQUE(repo_id_sha)"`
|
||||
SHA string `xorm:"VARCHAR(64) NOT NULL INDEX UNIQUE(repo_id_sha)"`
|
||||
State api.CommitStatusState `xorm:"VARCHAR(7) NOT NULL"`
|
||||
TargetURL string `xorm:"TEXT"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
@ -44,9 +45,10 @@ func GetLatestCommitStatusForRepoAndSHAs(ctx context.Context, repoSHAs []RepoSHA
|
|||
commitStatuses := make([]*CommitStatus, 0, len(repoSHAs))
|
||||
for _, summary := range summaries {
|
||||
commitStatuses = append(commitStatuses, &CommitStatus{
|
||||
RepoID: summary.RepoID,
|
||||
SHA: summary.SHA,
|
||||
State: summary.State,
|
||||
RepoID: summary.RepoID,
|
||||
SHA: summary.SHA,
|
||||
State: summary.State,
|
||||
TargetURL: summary.TargetURL,
|
||||
})
|
||||
}
|
||||
return commitStatuses, nil
|
||||
|
@ -61,22 +63,24 @@ func UpdateCommitStatusSummary(ctx context.Context, repoID int64, sha string) er
|
|||
// mysql will return 0 when update a record which state hasn't been changed which behaviour is different from other database,
|
||||
// so we need to use insert in on duplicate
|
||||
if setting.Database.Type.IsMySQL() {
|
||||
_, err := db.GetEngine(ctx).Exec("INSERT INTO commit_status_summary (repo_id,sha,state) VALUES (?,?,?) ON DUPLICATE KEY UPDATE state=?",
|
||||
repoID, sha, state.State, state.State)
|
||||
_, err := db.GetEngine(ctx).Exec("INSERT INTO commit_status_summary (repo_id,sha,state,target_url) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE state=?",
|
||||
repoID, sha, state.State, state.TargetURL, state.State)
|
||||
return err
|
||||
}
|
||||
|
||||
if cnt, err := db.GetEngine(ctx).Where("repo_id=? AND sha=?", repoID, sha).
|
||||
Cols("state").
|
||||
Cols("state, target_url").
|
||||
Update(&CommitStatusSummary{
|
||||
State: state.State,
|
||||
State: state.State,
|
||||
TargetURL: state.TargetURL,
|
||||
}); err != nil {
|
||||
return err
|
||||
} else if cnt == 0 {
|
||||
_, err = db.GetEngine(ctx).Insert(&CommitStatusSummary{
|
||||
RepoID: repoID,
|
||||
SHA: sha,
|
||||
State: state.State,
|
||||
RepoID: repoID,
|
||||
SHA: sha,
|
||||
State: state.State,
|
||||
TargetURL: state.TargetURL,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -580,6 +580,8 @@ var migrations = []Migration{
|
|||
NewMigration("Add unique index for project issue table", v1_23.AddUniqueIndexForProjectIssue),
|
||||
// v295 -> v296
|
||||
NewMigration("Add commit status summary table", v1_23.AddCommitStatusSummary),
|
||||
// v296 -> v297
|
||||
NewMigration("Add missing field of commit status summary table", v1_23.AddCommitStatusSummary2),
|
||||
}
|
||||
|
||||
// GetCurrentDBVersion returns the current db version
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package v1_23 //nolint
|
||||
|
||||
import "xorm.io/xorm"
|
||||
|
||||
func AddCommitStatusSummary2(x *xorm.Engine) error {
|
||||
type CommitStatusSummary struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
TargetURL string `xorm:"TEXT"`
|
||||
}
|
||||
// there is no migrations because if there is no data on this table, it will fall back to get data
|
||||
// from commit status
|
||||
return x.Sync(new(CommitStatusSummary))
|
||||
}
|
|
@ -6,6 +6,9 @@ package session
|
|||
import (
|
||||
"net/http"
|
||||
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/web/middleware"
|
||||
|
||||
"gitea.com/go-chi/session"
|
||||
)
|
||||
|
||||
|
@ -18,6 +21,10 @@ type Store interface {
|
|||
|
||||
// RegenerateSession regenerates the underlying session and returns the new store
|
||||
func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
|
||||
// Ensure that a cookie with a trailing slash does not take precedence over
|
||||
// the cookie written by the middleware.
|
||||
middleware.DeleteLegacySiteCookie(resp, setting.SessionConfig.CookieName)
|
||||
|
||||
s, err := session.RegenerateSession(resp, req)
|
||||
return s, err
|
||||
}
|
||||
|
|
|
@ -45,10 +45,32 @@ func SetSiteCookie(resp http.ResponseWriter, name, value string, maxAge int) {
|
|||
SameSite: setting.SessionConfig.SameSite,
|
||||
}
|
||||
resp.Header().Add("Set-Cookie", cookie.String())
|
||||
if maxAge < 0 {
|
||||
// There was a bug in "setting.SessionConfig.CookiePath" code, the old default value of it was empty "".
|
||||
// So we have to delete the cookie on path="" again, because some old code leaves cookies on path="".
|
||||
cookie.Path = strings.TrimSuffix(setting.SessionConfig.CookiePath, "/")
|
||||
resp.Header().Add("Set-Cookie", cookie.String())
|
||||
}
|
||||
// Previous versions would use a cookie path with a trailing /.
|
||||
// These are more specific than cookies without a trailing /, so
|
||||
// we need to delete these if they exist.
|
||||
DeleteLegacySiteCookie(resp, name)
|
||||
}
|
||||
|
||||
// DeleteLegacySiteCookie deletes the cookie with the given name at the cookie
|
||||
// path with a trailing /, which would unintentionally override the cookie.
|
||||
func DeleteLegacySiteCookie(resp http.ResponseWriter, name string) {
|
||||
if setting.SessionConfig.CookiePath == "" || strings.HasSuffix(setting.SessionConfig.CookiePath, "/") {
|
||||
// If the cookie path ends with /, no legacy cookies will take
|
||||
// precedence, so do nothing. The exception is that cookies with no
|
||||
// path could override other cookies, but it's complicated and we don't
|
||||
// currently handle that.
|
||||
return
|
||||
}
|
||||
|
||||
cookie := &http.Cookie{
|
||||
Name: name,
|
||||
Value: "",
|
||||
MaxAge: -1,
|
||||
Path: setting.SessionConfig.CookiePath + "/",
|
||||
Domain: setting.SessionConfig.Domain,
|
||||
Secure: setting.SessionConfig.Secure,
|
||||
HttpOnly: true,
|
||||
SameSite: setting.SessionConfig.SameSite,
|
||||
}
|
||||
resp.Header().Add("Set-Cookie", cookie.String())
|
||||
}
|
||||
|
|
|
@ -3318,7 +3318,6 @@ func ChangeIssueReaction(ctx *context.Context) {
|
|||
}
|
||||
|
||||
html, err := ctx.RenderToHTML(tplReactions, map[string]any{
|
||||
"ctxData": ctx.Data,
|
||||
"ActionURL": fmt.Sprintf("%s/issues/%d/reactions", ctx.Repo.RepoLink, issue.Index),
|
||||
"Reactions": issue.Reactions.GroupByType(),
|
||||
})
|
||||
|
@ -3425,7 +3424,6 @@ func ChangeCommentReaction(ctx *context.Context) {
|
|||
}
|
||||
|
||||
html, err := ctx.RenderToHTML(tplReactions, map[string]any{
|
||||
"ctxData": ctx.Data,
|
||||
"ActionURL": fmt.Sprintf("%s/comments/%d/reactions", ctx.Repo.RepoLink, comment.ID),
|
||||
"Reactions": comment.Reactions.GroupByType(),
|
||||
})
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"net/http"
|
||||
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
session_module "code.gitea.io/gitea/modules/session"
|
||||
|
||||
chiSession "gitea.com/go-chi/session"
|
||||
"github.com/gorilla/sessions"
|
||||
|
@ -65,7 +66,7 @@ func (st *SessionsStore) Save(r *http.Request, w http.ResponseWriter, session *s
|
|||
chiStore := chiSession.GetSession(r)
|
||||
|
||||
if session.IsNew {
|
||||
_, _ = chiSession.RegenerateSession(w, r)
|
||||
_, _ = session_module.RegenerateSession(w, r)
|
||||
session.IsNew = false
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,7 @@ func NewTemplateContextForWeb(ctx *Context) TemplateContext {
|
|||
tmplCtx := NewTemplateContext(ctx)
|
||||
tmplCtx["Locale"] = ctx.Base.Locale
|
||||
tmplCtx["AvatarUtils"] = templates.NewAvatarUtils(ctx)
|
||||
tmplCtx["RootData"] = ctx.Data
|
||||
return tmplCtx
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="ui small teal button" id="delete-selection" data-link="{{.Link}}/delete" data-redirect="?page={{.Page.Paginater.Current}}">
|
||||
<button class="ui small button" id="delete-selection" data-link="{{.Link}}/delete" data-redirect="?page={{.Page.Paginater.Current}}">
|
||||
<span class="text">{{ctx.Locale.Tr "admin.notices.delete_selected"}}</span>
|
||||
</button>
|
||||
</th>
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<input type="hidden" name="action" value="delete">
|
||||
<input type="hidden" name="q" value="{{$.Keyword}}">
|
||||
<input type="hidden" name="page" value="{{$.CurrentPage}}">
|
||||
{{template "base/modal_actions_confirm" (dict "ModalButtonColors" "yellow")}}
|
||||
{{template "base/modal_actions_confirm"}}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{{/*
|
||||
Two buttons (negative, positive):
|
||||
* ModalButtonTypes: "yes" (default) or "confirm"
|
||||
* ModalButtonColors: "primary" (default) / "blue" / "yellow"
|
||||
* ModalButtonCancelText
|
||||
* ModalButtonOkText
|
||||
|
||||
|
@ -22,14 +21,7 @@ The ".ok.button" and ".cancel.button" selectors are also used by Fomantic Modal
|
|||
{{end}}
|
||||
{{if .ModalButtonCancelText}}{{$textNegitive = .ModalButtonCancelText}}{{end}}
|
||||
{{if .ModalButtonOkText}}{{$textPositive = .ModalButtonOkText}}{{end}}
|
||||
|
||||
{{$stylePositive := "primary"}}
|
||||
{{if eq .ModalButtonColors "blue"}}
|
||||
{{$stylePositive = "blue"}}
|
||||
{{else if eq .ModalButtonColors "yellow"}}
|
||||
{{$stylePositive = "yellow"}}
|
||||
{{end}}
|
||||
<button class="ui cancel button">{{svg "octicon-x"}} {{$textNegitive}}</button>
|
||||
<button class="ui {{$stylePositive}} ok button">{{svg "octicon-check"}} {{$textPositive}}</button>
|
||||
<button class="ui primary ok button">{{svg "octicon-check"}} {{$textPositive}}</button>
|
||||
{{end}}
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
{{template "base/head" .}}
|
||||
<div class="page-content devtest ui container">
|
||||
{{template "base/alert" .}}
|
||||
<div class="modal-buttons flex-text-block tw-flex-wrap"></div>
|
||||
<script type="module">
|
||||
for (const el of $('.ui.modal')) {
|
||||
const $btn = $('<button class="ui button">').text(`${el.id}`).on('click', () => {
|
||||
$(el).modal({onApprove() {alert('confirmed')}}).modal('show');
|
||||
});
|
||||
$('.modal-buttons').append($btn);
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="test-modal-form-1" class="ui mini modal">
|
||||
<div class="header">Form dialog (layout 1)</div>
|
||||
|
@ -54,33 +63,11 @@
|
|||
{{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
|
||||
</div>
|
||||
|
||||
<div class="ui g-modal-confirm modal" id="test-modal-blue">
|
||||
<div class="header">Blue dialog</div>
|
||||
<div class="content">hello, this is the modal dialog content</div>
|
||||
{{template "base/modal_actions_confirm" (dict "ModalButtonColors" "blue")}}
|
||||
</div>
|
||||
|
||||
<div class="ui g-modal-confirm modal" id="test-modal-yellow">
|
||||
<div class="header">yellow dialog</div>
|
||||
<div class="content">hello, this is the modal dialog content</div>
|
||||
{{template "base/modal_actions_confirm" (dict "ModalButtonColors" "yellow")}}
|
||||
</div>
|
||||
|
||||
<div class="ui g-modal-confirm modal" id="test-modal-danger">
|
||||
{{svg "octicon-x" 16 "inside close"}}
|
||||
<div class="header">dangerous action dialog</div>
|
||||
<div class="content">hello, this is the modal dialog content, this is a dangerous operation</div>
|
||||
{{template "base/modal_actions_confirm" (dict "ModalButtonDangerText" "I know and must do this is dangerous operation")}}
|
||||
</div>
|
||||
|
||||
<div class="modal-buttons flex-text-block tw-flex-wrap"></div>
|
||||
<script type="module">
|
||||
for (const el of $('.ui.modal')) {
|
||||
const $btn = $('<button>').text(`${el.id}`).on('click', () => {
|
||||
$(el).modal({onApprove() {alert('confirmed')}}).modal('show');
|
||||
});
|
||||
$('.modal-buttons').append($btn);
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
{{template "base/footer" .}}
|
||||
|
|
|
@ -29,41 +29,13 @@
|
|||
<button class="ui basic button">Basic Unclassed</button>
|
||||
<button class="ui primary button">Primary</button>
|
||||
<button class="ui basic primary button">Basic Primary</button>
|
||||
<button class="ui negative button">Negative</button>
|
||||
<button class="ui basic negative button">Basic Negative</button>
|
||||
<button class="ui positive button">Positive</button>
|
||||
<button class="ui basic positive button">Basic Positive</button>
|
||||
</li>
|
||||
<li class="sample-group">
|
||||
<h2>Recommended colors:</h2>
|
||||
<button class="ui red button">Red</button>
|
||||
<button class="ui basic red button">Basic Red</button>
|
||||
<button class="ui primary button">Green</button>
|
||||
<button class="ui basic primary button">Basic Green</button>
|
||||
<button class="ui blue button">Blue</button>
|
||||
<button class="ui basic blue button">Basic Blue</button>
|
||||
<button class="ui orange button">Orange</button>
|
||||
<button class="ui basic orange button">Basic Orange</button>
|
||||
<button class="ui yellow button">Yellow</button>
|
||||
<button class="ui basic yellow button">Basic Yellow</button>
|
||||
</li>
|
||||
<li class="sample-group">
|
||||
<h2>Supported but not recommended:</h2>
|
||||
<p>Do not use if there is no strong requirement. Do not use grey/black buttons, they don't work well with dark theme.</p>
|
||||
<button class="ui secondary button">Secondary</button>
|
||||
<button class="ui basic secondary button">Basic Secondary</button>
|
||||
<button class="ui olive button">Olive</button>
|
||||
<button class="ui basic olive button">Basic Olive</button>
|
||||
<button class="ui teal button">Teal</button>
|
||||
<button class="ui basic teal button">Basic Teal</button>
|
||||
<button class="ui violet button">Violet</button>
|
||||
<button class="ui basic violet button">Basic Violet</button>
|
||||
<button class="ui purple button">Purple</button>
|
||||
<button class="ui basic purple button">Basic Purple</button>
|
||||
<button class="ui pink button">Pink</button>
|
||||
<button class="ui basic pink button">Basic Pink</button>
|
||||
<button class="ui brown button">Brown</button>
|
||||
<button class="ui basic brown button">Basic Brown</button>
|
||||
<button class="ui green button">Green</button>
|
||||
<button class="ui basic green button">Basic Green</button>
|
||||
</li>
|
||||
<li class="sample-group">
|
||||
<h2>Inline / Plain:</h2>
|
||||
|
@ -198,7 +170,7 @@
|
|||
<button class="ui basic button">labeled button</button>
|
||||
<a class="ui basic label">123</a>
|
||||
</div>
|
||||
<button class="ui yellow button">{{svg "octicon-x" 16}} button with very very very very very very very very long text</button>
|
||||
<button class="ui button">{{svg "octicon-x" 16}} button with very very very very very very very very long text</button>
|
||||
</div>
|
||||
|
||||
<h2>Input with SVG</h2>
|
||||
|
@ -271,10 +243,6 @@
|
|||
<span class="text">button dropdown</span>
|
||||
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
||||
</div>
|
||||
<div class="ui dropdown large button">
|
||||
<span class="text">large dropdown</span>
|
||||
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
@ -290,10 +258,6 @@
|
|||
<span class="text">button compact</span>
|
||||
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
||||
</div>
|
||||
<div class="ui dropdown large compact button">
|
||||
<span class="text">large compact</span>
|
||||
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
</div>
|
||||
{{if .IsOrganizationOwner}}
|
||||
<div class="ui bottom attached segment">
|
||||
<a class="ui teal small button" href="{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/edit">{{svg "octicon-gear"}} {{ctx.Locale.Tr "org.teams.settings"}}</a>
|
||||
<a class="ui small button" href="{{.OrgLink}}/teams/{{.Team.LowerName | PathEscape}}/edit">{{svg "octicon-gear"}} {{ctx.Locale.Tr "org.teams.settings"}}</a>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{{$branchLink := HTMLFormat `<a href="%s/src/branch/%s">%s</a>` $.RepoLink (PathEscapeSegments .Name) .Name}}
|
||||
{{ctx.Locale.Tr "repo.pulls.recently_pushed_new_branches" $branchLink $timeSince}}
|
||||
</div>
|
||||
<a role="button" class="ui compact positive button tw-m-0" href="{{$.Repository.ComposeBranchCompareURL $.Repository.BaseRepo .Name}}">
|
||||
<a role="button" class="ui compact green button tw-m-0" href="{{$.Repository.ComposeBranchCompareURL $.Repository.BaseRepo .Name}}">
|
||||
{{ctx.Locale.Tr "repo.pulls.compare_changes"}}
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
</div>
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ctxData" $.root "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/context_menu" dict "ctxData" $.root "item" . "delete" true "issue" false "diff" true "IsCommentPoster" (and $.root.IsSigned (eq $.root.SignedUserID .PosterID))}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -68,7 +68,7 @@
|
|||
</div>
|
||||
{{$reactions := .Reactions.GroupByType}}
|
||||
{{if $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ctxData" $.root "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -184,23 +184,15 @@
|
|||
{{end}}
|
||||
{{else if and .PageIsComparePull (gt .CommitCount 0)}}
|
||||
{{if .HasPullRequest}}
|
||||
<div class="ui segment grid title">
|
||||
<div class="twelve wide column issue-title">
|
||||
{{ctx.Locale.Tr "repo.pulls.has_pull_request" (print $.RepoLink "/pulls/" .PullRequest.Issue.Index) $.RepoRelPath .PullRequest.Index}}
|
||||
<h1>
|
||||
<span id="issue-title">{{RenderIssueTitle $.Context .PullRequest.Issue.Title ($.Repository.ComposeMetas ctx)}}</span>
|
||||
<span class="index">#{{.PullRequest.Issue.Index}}</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="four wide column middle aligned text right">
|
||||
{{- if .PullRequest.HasMerged -}}
|
||||
<a href="{{$.RepoLink}}/pulls/{{.PullRequest.Issue.Index}}" class="ui button purple show-form">{{svg "octicon-git-merge" 16}} {{ctx.Locale.Tr "repo.pulls.view"}}</a>
|
||||
{{else if .Issue.IsClosed}}
|
||||
<a href="{{$.RepoLink}}/pulls/{{.PullRequest.Issue.Index}}" class="ui button red show-form">{{svg "octicon-issue-closed" 16}} {{ctx.Locale.Tr "repo.pulls.view"}}</a>
|
||||
{{else}}
|
||||
<a href="{{$.RepoLink}}/pulls/{{.PullRequest.Issue.Index}}" class="ui button primary show-form">{{svg "octicon-git-pull-request" 16}} {{ctx.Locale.Tr "repo.pulls.view"}}</a>
|
||||
{{end}}
|
||||
<div class="ui segment flex-text-block tw-gap-4">
|
||||
{{template "shared/issueicon" .}}
|
||||
<div class="issue-title tw-break-anywhere">
|
||||
{{RenderIssueTitle $.Context .PullRequest.Issue.Title ($.Repository.ComposeMetas ctx) | RenderCodeBlock}}
|
||||
<span class="index">#{{.PullRequest.Issue.Index}}</span>
|
||||
</div>
|
||||
<a href="{{$.RepoLink}}/pulls/{{.PullRequest.Issue.Index}}" class="ui compact button primary">
|
||||
{{ctx.Locale.Tr "repo.pulls.view"}}
|
||||
</a>
|
||||
</div>
|
||||
{{else}}
|
||||
{{if and $.IsSigned (not .Repository.IsArchived)}}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<div class="comment-header-right actions tw-flex tw-items-center">
|
||||
{{template "repo/issue/view_content/show_role" dict "ShowRole" .Issue.ShowRole "IgnorePoster" true}}
|
||||
{{if not $.Repository.IsArchived}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index)}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index)}}
|
||||
{{end}}
|
||||
{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" .Issue "delete" false "issue" true "diff" false "IsCommentPoster" $.IsIssuePoster}}
|
||||
</div>
|
||||
|
@ -67,7 +67,7 @@
|
|||
</div>
|
||||
{{$reactions := .Issue.Reactions.GroupByType}}
|
||||
{{if $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index) "Reactions" $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index) "Reactions" $reactions}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
{{if .ctxData.IsSigned}}
|
||||
{{if ctx.RootData.IsSigned}}
|
||||
<div class="item action ui dropdown jump pointing top right select-reaction" data-action-url="{{.ActionURL}}">
|
||||
<a class="add-reaction muted">
|
||||
{{svg "octicon-smiley"}}
|
||||
</a>
|
||||
<div class="menu reactions-menu">
|
||||
<a class="muted">{{svg "octicon-smiley"}}</a>
|
||||
<div class="menu">
|
||||
{{range $value := AllowedReactions}}
|
||||
<a class="item reaction" data-tooltip-content="{{$value}}" aria-label="{{$value}}" data-reaction-content="{{$value}}">{{ReactionToEmoji $value}}</a>
|
||||
<a class="item emoji comment-reaction-button" data-tooltip-content="{{$value}}" aria-label="{{$value}}" data-reaction-content="{{$value}}">{{ReactionToEmoji $value}}</a>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
<div class="comment-header-right actions tw-flex tw-items-center">
|
||||
{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}}
|
||||
{{if not $.Repository.IsArchived}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||
{{end}}
|
||||
{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
|
||||
</div>
|
||||
|
@ -74,7 +74,7 @@
|
|||
</div>
|
||||
{{$reactions := .Reactions.GroupByType}}
|
||||
{{if $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -427,7 +427,7 @@
|
|||
<div class="comment-header-right actions tw-flex tw-items-center">
|
||||
{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}}
|
||||
{{if not $.Repository.IsArchived}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" false "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
|
||||
{{end}}
|
||||
</div>
|
||||
|
@ -448,7 +448,7 @@
|
|||
</div>
|
||||
{{$reactions := .Reactions.GroupByType}}
|
||||
{{if $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -55,8 +55,8 @@
|
|||
<div class="ui comments tw-mb-0">
|
||||
{{range .comments}}
|
||||
{{$createdSubStr:= TimeSinceUnix .CreatedUnix ctx.Locale}}
|
||||
<div class="comment code-comment tw-pb-4" id="{{.HashTag}}">
|
||||
<div class="content">
|
||||
<div class="comment code-comment" id="{{.HashTag}}">
|
||||
<div class="content comment-container">
|
||||
<div class="header comment-header">
|
||||
<div class="comment-header-left tw-flex tw-items-center">
|
||||
{{if not .OriginalAuthor}}
|
||||
|
@ -82,7 +82,7 @@
|
|||
<div class="comment-header-right actions tw-flex tw-items-center">
|
||||
{{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}}
|
||||
{{if not $.Repository.IsArchived}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}}
|
||||
{{template "repo/issue/view_content/context_menu" dict "ctxData" $ "item" . "delete" true "issue" true "diff" true "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}}
|
||||
{{end}}
|
||||
</div>
|
||||
|
@ -103,7 +103,7 @@
|
|||
</div>
|
||||
{{$reactions := .Reactions.GroupByType}}
|
||||
{{if $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ctxData" $ "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="ui attached segment reactions" data-action-url="{{$.ActionURL}}">
|
||||
<div class="bottom-reactions" data-action-url="{{$.ActionURL}}">
|
||||
{{range $key, $value := .Reactions}}
|
||||
{{$hasReacted := $value.HasUser $.ctxData.SignedUserID}}
|
||||
<a role="button" class="ui label basic{{if $hasReacted}} primary{{end}}{{if not $.ctxData.IsSigned}} disabled{{end}} comment-reaction-button"
|
||||
{{$hasReacted := $value.HasUser ctx.RootData.SignedUserID}}
|
||||
<a role="button" class="ui label basic{{if $hasReacted}} primary{{end}}{{if not ctx.RootData.IsSigned}} disabled{{end}} comment-reaction-button"
|
||||
data-tooltip-content
|
||||
title="{{$value.GetFirstUsers}}{{if gt ($value.GetMoreUserCount) 0}} {{ctx.Locale.Tr "repo.reactions_more" $value.GetMoreUserCount}}{{end}}"
|
||||
aria-label="{{$value.GetFirstUsers}}{{if gt ($value.GetMoreUserCount) 0}} {{ctx.Locale.Tr "repo.reactions_more" $value.GetMoreUserCount}}{{end}}"
|
||||
|
@ -12,6 +12,6 @@
|
|||
</a>
|
||||
{{end}}
|
||||
{{if AllowedReactions}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ctxData" $.ctxData "ActionURL" .ActionURL}}
|
||||
{{template "repo/issue/view_content/add_reaction" dict "ActionURL" .ActionURL}}
|
||||
{{end}}
|
||||
</div>
|
||||
|
|
|
@ -572,7 +572,7 @@
|
|||
</form>
|
||||
{{end}}
|
||||
|
||||
<button class="tw-mt-1 fluid ui show-modal button {{if .Issue.IsLocked}} negative {{end}}" data-modal="#lock">
|
||||
<button class="tw-mt-1 fluid ui show-modal button{{if .Issue.IsLocked}} red{{end}}" data-modal="#lock">
|
||||
{{if .Issue.IsLocked}}
|
||||
{{svg "octicon-key"}}
|
||||
{{ctx.Locale.Tr "repo.issues.unlock"}}
|
||||
|
|
|
@ -25,12 +25,14 @@
|
|||
<div class="column">
|
||||
{{if gt .Activity.ActivePRCount 0}}
|
||||
<div class="stats-table">
|
||||
<a href="#merged-pull-requests" class="table-cell tiny background purple" style="width: {{.Activity.MergedPRPerc}}{{if ne .Activity.MergedPRPerc 0}}%{{end}}"></a>
|
||||
<a href="#proposed-pull-requests" class="table-cell tiny background green"></a>
|
||||
{{if gt .Activity.MergedPRPerc 0}}
|
||||
<a href="#merged-pull-requests" class="table-cell tiny tw-bg-purple" style="width: {{.Activity.MergedPRPerc}}%"></a>
|
||||
{{end}}
|
||||
<a href="#proposed-pull-requests" class="table-cell tiny tw-bg-green"></a>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="stats-table">
|
||||
<a class="table-cell tiny background light grey"></a>
|
||||
<a class="table-cell tiny tw-bg-grey"></a>
|
||||
</div>
|
||||
{{end}}
|
||||
{{ctx.Locale.TrN .Activity.ActivePRCount "repo.activity.active_prs_count_1" "repo.activity.active_prs_count_n" .Activity.ActivePRCount}}
|
||||
|
@ -40,8 +42,10 @@
|
|||
<div class="column">
|
||||
{{if gt .Activity.ActiveIssueCount 0}}
|
||||
<div class="stats-table">
|
||||
<a href="#closed-issues" class="table-cell tiny background red" style="width: {{.Activity.ClosedIssuePerc}}{{if ne .Activity.ClosedIssuePerc 0}}%{{end}}"></a>
|
||||
<a href="#new-issues" class="table-cell tiny background green"></a>
|
||||
{{if gt .Activity.ClosedIssuePerc 0}}
|
||||
<a href="#closed-issues" class="table-cell tiny tw-bg-red" style="width: {{.Activity.ClosedIssuePerc}}%"></a>
|
||||
{{end}}
|
||||
<a href="#new-issues" class="table-cell tiny tw-bg-green"></a>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="stats-table">
|
||||
|
@ -108,7 +112,7 @@
|
|||
{{end}}
|
||||
|
||||
{{if gt .Activity.PublishedReleaseCount 0}}
|
||||
<h4 class="divider divider-text tw-normal-case" id="published-releases">
|
||||
<h4 class="divider divider-text" id="published-releases">
|
||||
{{svg "octicon-tag" 16 "tw-mr-2"}}
|
||||
{{ctx.Locale.Tr "repo.activity.title.releases_published_by"
|
||||
(ctx.Locale.TrN .Activity.PublishedReleaseCount "repo.activity.title.releases_1" "repo.activity.title.releases_n" .Activity.PublishedReleaseCount)
|
||||
|
@ -130,7 +134,7 @@
|
|||
{{end}}
|
||||
|
||||
{{if gt .Activity.MergedPRCount 0}}
|
||||
<h4 class="divider divider-text tw-normal-case" id="merged-pull-requests">
|
||||
<h4 class="divider divider-text" id="merged-pull-requests">
|
||||
{{svg "octicon-git-pull-request" 16 "tw-mr-2"}}
|
||||
{{ctx.Locale.Tr "repo.activity.title.prs_merged_by"
|
||||
(ctx.Locale.TrN .Activity.MergedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.MergedPRCount)
|
||||
|
@ -149,7 +153,7 @@
|
|||
{{end}}
|
||||
|
||||
{{if gt .Activity.OpenedPRCount 0}}
|
||||
<h4 class="divider divider-text tw-normal-case" id="proposed-pull-requests">
|
||||
<h4 class="divider divider-text" id="proposed-pull-requests">
|
||||
{{svg "octicon-git-branch" 16 "tw-mr-2"}}
|
||||
{{ctx.Locale.Tr "repo.activity.title.prs_opened_by"
|
||||
(ctx.Locale.TrN .Activity.OpenedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.OpenedPRCount)
|
||||
|
@ -168,7 +172,7 @@
|
|||
{{end}}
|
||||
|
||||
{{if gt .Activity.ClosedIssueCount 0}}
|
||||
<h4 class="divider divider-text tw-normal-case" id="closed-issues">
|
||||
<h4 class="divider divider-text" id="closed-issues">
|
||||
{{svg "octicon-issue-closed" 16 "tw-mr-2"}}
|
||||
{{ctx.Locale.Tr "repo.activity.title.issues_closed_from"
|
||||
(ctx.Locale.TrN .Activity.ClosedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.ClosedIssueCount)
|
||||
|
@ -187,7 +191,7 @@
|
|||
{{end}}
|
||||
|
||||
{{if gt .Activity.OpenedIssueCount 0}}
|
||||
<h4 class="divider divider-text tw-normal-case" id="new-issues">
|
||||
<h4 class="divider divider-text" id="new-issues">
|
||||
{{svg "octicon-issue-opened" 16 "tw-mr-2"}}
|
||||
{{ctx.Locale.Tr "repo.activity.title.issues_created_by"
|
||||
(ctx.Locale.TrN .Activity.OpenedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.OpenedIssueCount)
|
||||
|
@ -206,7 +210,7 @@
|
|||
{{end}}
|
||||
|
||||
{{if gt .Activity.UnresolvedIssueCount 0}}
|
||||
<h4 class="divider divider-text tw-normal-case" id="unresolved-conversations" data-tooltip-content="{{ctx.Locale.Tr "repo.activity.unresolved_conv_desc"}}">
|
||||
<h4 class="divider divider-text" id="unresolved-conversations" data-tooltip-content="{{ctx.Locale.Tr "repo.activity.unresolved_conv_desc"}}">
|
||||
{{svg "octicon-comment-discussion" 16 "tw-mr-2"}}
|
||||
{{ctx.Locale.TrN .Activity.UnresolvedIssueCount "repo.activity.title.unresolved_conv_1" "repo.activity.title.unresolved_conv_n" .Activity.UnresolvedIssueCount}}
|
||||
</h4>
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
</p>
|
||||
<form class="ui form" action="{{$.Link}}/delete/{{.Oid}}" method="post">
|
||||
{{$.CsrfTokenHtml}}
|
||||
{{template "base/modal_actions_confirm" (dict "ModalButtonColors" "yellow")}}
|
||||
{{template "base/modal_actions_confirm"}}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a {{if and .Exists .InRepo}}href="{{$.LFSFilesLink}}/show/{{.Oid}}" rel="nofollow" target="_blank"{{end}} title="{{.Oid}}" class="ui brown button tw-font-mono">
|
||||
<a {{if and .Exists .InRepo}}href="{{$.LFSFilesLink}}/show/{{.Oid}}" rel="nofollow" target="_blank"{{end}} title="{{.Oid}}" class="ui button tw-font-mono">
|
||||
{{ShortSha .Oid}}
|
||||
</a>
|
||||
</td>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<div class="ui right">
|
||||
<!-- the button is wrapped with a span because the tooltip doesn't show on hover if we put data-tooltip-content directly on the button -->
|
||||
<span data-tooltip-content="{{if or $isNew .Webhook.IsActive}}{{ctx.Locale.Tr "repo.settings.webhook.test_delivery_desc"}}{{else}}{{ctx.Locale.Tr "repo.settings.webhook.test_delivery_desc_disabled"}}{{end}}">
|
||||
<button class="ui teal tiny button{{if not (or $isNew .Webhook.IsActive)}} disabled{{end}}" id="test-delivery" data-link="{{.Link}}/test" data-redirect="{{.Link}}">
|
||||
<button class="ui tiny button{{if not (or $isNew .Webhook.IsActive)}} disabled{{end}}" id="test-delivery" data-link="{{.Link}}/test" data-redirect="{{.Link}}">
|
||||
<span class="text">{{ctx.Locale.Tr "repo.settings.webhook.test_delivery"}}</span>
|
||||
</button>
|
||||
</span>
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
{{template "base/head" .}}
|
||||
<div role="main" aria-label="{{.Title}}" class="page-content dashboard feeds">
|
||||
{{template "user/dashboard/navbar" .}}
|
||||
<div class="ui container">
|
||||
<div class="ui container flex-container">
|
||||
{{template "base/alert" .}}
|
||||
<div class="ui mobile reversed stackable grid">
|
||||
<div class="ui container ten wide column">
|
||||
{{template "user/heatmap" .}}
|
||||
{{template "user/dashboard/feeds" .}}
|
||||
</div>
|
||||
{{template "user/dashboard/repolist" .}}
|
||||
<div class="flex-container-main">
|
||||
{{template "user/heatmap" .}}
|
||||
{{template "user/dashboard/feeds" .}}
|
||||
</div>
|
||||
{{template "user/dashboard/repolist" .}}
|
||||
</div>
|
||||
</div>
|
||||
{{template "base/footer" .}}
|
||||
|
|
|
@ -56,4 +56,4 @@ data.organizationId = {{.ContextUser.ID}};
|
|||
window.config.pageData.dashboardRepoList = data;
|
||||
</script>
|
||||
|
||||
<div id="dashboard-repo-list" class="six wide column"></div>
|
||||
<div id="dashboard-repo-list" class="flex-container-sidebar"></div>
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
<div class="content">
|
||||
<p>{{ctx.Locale.Tr "settings.access_token_deletion_desc"}}</p>
|
||||
</div>
|
||||
{{template "base/modal_actions_confirm" (dict "ModalButtonColors" "yellow")}}
|
||||
{{template "base/modal_actions_confirm"}}
|
||||
</div>
|
||||
|
||||
{{template "user/settings/layout_footer" .}}
|
||||
|
|
|
@ -319,27 +319,6 @@ a.label,
|
|||
background-color: var(--color-label-bg);
|
||||
}
|
||||
|
||||
.ui.menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.ui.menu,
|
||||
.ui.vertical.menu {
|
||||
background: var(--color-menu);
|
||||
border-color: var(--color-secondary);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.ui.menu .item {
|
||||
color: var(--color-text);
|
||||
user-select: auto;
|
||||
line-height: var(--line-height-default); /* fomantic uses "1" which causes overflow problems because "1" doesn't consider the descent part */
|
||||
}
|
||||
|
||||
.ui.menu .item > .svg {
|
||||
margin-right: 0.35em;
|
||||
}
|
||||
|
||||
.ui.menu .dropdown.item:hover,
|
||||
.ui.menu a.item:hover,
|
||||
.ui.menu details.item summary:hover {
|
||||
|
@ -347,42 +326,6 @@ a.label,
|
|||
background: var(--color-hover);
|
||||
}
|
||||
|
||||
.ui.menu .active.item,
|
||||
.ui.menu .active.item:hover,
|
||||
.ui.vertical.menu .active.item,
|
||||
.ui.vertical.menu .active.item:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
}
|
||||
|
||||
.ui.menu a.item:active {
|
||||
color: var(--color-text);
|
||||
background: none;
|
||||
}
|
||||
|
||||
.ui.ui.menu .item.disabled {
|
||||
color: var(--color-text-light-3);
|
||||
}
|
||||
|
||||
.ui.menu .item::before, .ui.vertical.menu .item::before {
|
||||
background: var(--color-secondary);
|
||||
}
|
||||
|
||||
/* sub menu of vertical menu */
|
||||
.ui.vertical.menu .item .menu .item {
|
||||
color: var(--color-text-light-2);
|
||||
text-indent: 16px;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item .menu .item:hover,
|
||||
.ui.vertical.menu .item .menu a.item:hover {
|
||||
color: var(--color-text-light-1);
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item .menu .active.item {
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
/* slightly more contrast for filters on issue list */
|
||||
.ui.ui.menu .dropdown.item.disabled {
|
||||
color: var(--color-text-light-2);
|
||||
|
@ -441,11 +384,6 @@ a.label,
|
|||
background: var(--color-hover);
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown .menu > .selected.item {
|
||||
color: var(--color-text) !important;
|
||||
background: var(--color-hover) !important;
|
||||
}
|
||||
|
||||
.ui.dropdown .menu > .message:not(.ui) {
|
||||
color: var(--color-text-light-2);
|
||||
}
|
||||
|
@ -462,58 +400,6 @@ a.label,
|
|||
color: var(--color-text-light-2);
|
||||
}
|
||||
|
||||
/* replace item margin on secondary menu items with gap and remove both the
|
||||
negative margins on the menu as well as margin on the items */
|
||||
.ui.secondary.menu {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
gap: .35714286em;
|
||||
}
|
||||
.ui.secondary.menu .item {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .dropdown.item:hover,
|
||||
.ui.secondary.menu a.item:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-hover);
|
||||
}
|
||||
|
||||
.ui.secondary.menu .active.item,
|
||||
.ui.secondary.menu .active.item:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
}
|
||||
|
||||
.ui.secondary.menu.tight .item {
|
||||
padding-left: 0.85714286em;
|
||||
padding-right: 0.85714286em;
|
||||
}
|
||||
|
||||
/* remove the menu clearfix so that it won't add undesired gaps when using "gap" */
|
||||
.ui.menu::after {
|
||||
content: normal;
|
||||
}
|
||||
|
||||
.ui.menu .dropdown.item .menu {
|
||||
background: var(--color-body);
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown .menu > .item {
|
||||
color: var(--color-text) !important;
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown .menu > .item:hover {
|
||||
color: var(--color-text) !important;
|
||||
background: var(--color-hover) !important;
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown .menu > .active.item {
|
||||
color: var(--color-text) !important;
|
||||
background: var(--color-active) !important;
|
||||
}
|
||||
|
||||
.ui.form textarea:not([rows]) {
|
||||
height: var(--min-height-textarea); /* override fomantic default 12em */
|
||||
min-height: var(--min-height-textarea); /* override fomantic default 8em */
|
||||
|
@ -606,11 +492,6 @@ img.ui.avatar,
|
|||
margin-top: calc(var(--page-spacing) - 1rem);
|
||||
}
|
||||
|
||||
.ui.pagination.menu .active.item {
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
}
|
||||
|
||||
.ui.form .fields.error .field textarea,
|
||||
.ui.form .fields.error .field select,
|
||||
.ui.form .fields.error .field input:not([type]),
|
||||
|
@ -782,11 +663,7 @@ input:-webkit-autofill:active,
|
|||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
.ui.form .ui.button {
|
||||
font-weight: var(--font-weight-normal);
|
||||
}
|
||||
|
||||
/* replace fomantic popover box shadows */
|
||||
/* popover box shadows */
|
||||
.ui.dropdown .menu,
|
||||
.ui.upward.dropdown > .menu,
|
||||
.ui.menu .dropdown.item .menu,
|
||||
|
@ -804,22 +681,6 @@ input:-webkit-autofill:active,
|
|||
background: var(--color-overlay-backdrop);
|
||||
}
|
||||
|
||||
/* Override semantic selector '.ui.menu:not(.vertical) .item > .button' */
|
||||
/* This fixes the commit graph button on the commits page */
|
||||
/* modal svg icons, copied from fomantic except width and height */
|
||||
/* center text in fomantic modal dialogs */
|
||||
.ui .menu:not(.vertical) .item > .button.compact {
|
||||
padding: 0.58928571em 1.125em;
|
||||
}
|
||||
|
||||
.ui .menu:not(.vertical) .item > .button.small {
|
||||
font-size: 0.92857143rem;
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown.item .menu .item {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ui.dropdown .menu > .header {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
@ -1010,24 +871,6 @@ input:-webkit-autofill:active,
|
|||
border-color: var(--color-gold) !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.ui.pagination.menu .item:not(.active,.navigation),
|
||||
.ui.pagination.menu .item.navigation span.navigation_label {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.pagination.menu.narrow .item {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
min-width: 1em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ui.pagination.menu.narrow .item .icon {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ui.floating.dropdown .overflow.menu .scrolling.menu.items {
|
||||
border-radius: 0 !important;
|
||||
box-shadow: none !important;
|
||||
|
@ -1149,11 +992,6 @@ overflow-menu .ui.label {
|
|||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.ui.menu .item > .label {
|
||||
background: var(--color-label-bg);
|
||||
color: var(--color-label-text);
|
||||
}
|
||||
|
||||
.lines-blame-btn {
|
||||
padding: 0 0 0 5px;
|
||||
display: flex;
|
||||
|
@ -1366,8 +1204,7 @@ table th[data-sortt-desc] .svg {
|
|||
box-shadow: 0 0 0 1px var(--color-secondary) inset;
|
||||
}
|
||||
|
||||
.emoji,
|
||||
.reaction {
|
||||
.emoji {
|
||||
font-size: 1.25em;
|
||||
line-height: var(--line-height-default);
|
||||
font-style: normal !important;
|
||||
|
@ -1375,8 +1212,7 @@ table th[data-sortt-desc] .svg {
|
|||
vertical-align: -0.075em;
|
||||
}
|
||||
|
||||
.emoji img,
|
||||
.reaction img {
|
||||
.emoji img {
|
||||
border-width: 0 !important;
|
||||
margin: 0 !important;
|
||||
width: 1em !important;
|
||||
|
@ -1384,26 +1220,6 @@ table th[data-sortt-desc] .svg {
|
|||
vertical-align: -0.15em;
|
||||
}
|
||||
|
||||
.ui.tabular.menu {
|
||||
border-color: var(--color-secondary);
|
||||
}
|
||||
|
||||
.ui.tabular.menu .active.item,
|
||||
.ui.tabular.menu .active.item:hover {
|
||||
background: var(--color-body);
|
||||
border-color: var(--color-secondary);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.ui.segment .ui.tabular.menu .active.item,
|
||||
.ui.segment .ui.tabular.menu .active.item:hover {
|
||||
background: var(--color-box-body);
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu {
|
||||
border-color: var(--color-secondary);
|
||||
}
|
||||
|
||||
.ui.tabular.menu .item,
|
||||
.ui.secondary.pointing.menu .item {
|
||||
padding: 11.55px 12px !important; /* match .dashboard-navbar in height */
|
||||
|
@ -1415,12 +1231,6 @@ table th[data-sortt-desc] .svg {
|
|||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .active.item,
|
||||
.ui.secondary.pointing.menu .active.item:hover,
|
||||
.ui.secondary.pointing.menu .dropdown.item:hover {
|
||||
color: var(--color-text-dark);
|
||||
}
|
||||
|
||||
.ui.tabular.menu .active.item,
|
||||
.ui.secondary.pointing.menu .active.item,
|
||||
.resize-for-semibold::before {
|
||||
|
@ -1533,10 +1343,6 @@ table th[data-sortt-desc] .svg {
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.ui.ui.button {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.ui.dropdown .ui.label .svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
.dashboard.feeds .context.user.menu .ui.header,
|
||||
.dashboard.issues .context.user.menu .ui.header {
|
||||
font-size: 1rem;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.dashboard.feeds .filter.menu,
|
||||
|
|
|
@ -52,6 +52,9 @@ only use:
|
|||
*/
|
||||
.tw-hidden.tw-hidden { display: none !important; }
|
||||
|
||||
/* proposed class from https://github.com/tailwindlabs/tailwindcss/pull/12128 */
|
||||
.tw-break-anywhere { overflow-wrap: anywhere !important; }
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
/* double selector so it wins over .tw-flex (old .gt-df) etc */
|
||||
.not-mobile.not-mobile {
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
@import "./modules/list.css";
|
||||
@import "./modules/segment.css";
|
||||
@import "./modules/grid.css";
|
||||
@import "./modules/menu.css";
|
||||
@import "./modules/message.css";
|
||||
@import "./modules/table.css";
|
||||
@import "./modules/card.css";
|
||||
|
@ -62,6 +63,7 @@
|
|||
@import "./repo/linebutton.css";
|
||||
@import "./repo/wiki.css";
|
||||
@import "./repo/header.css";
|
||||
@import "./repo/reactions.css";
|
||||
|
||||
@import "./editor/fileeditor.css";
|
||||
@import "./editor/combomarkdowneditor.css";
|
||||
|
|
|
@ -1,11 +1,33 @@
|
|||
/* this contains override styles for buttons and related elements */
|
||||
/* based on Fomantic UI checkbox module, with just the parts extracted that we use. If you find any
|
||||
unused rules here after refactoring, please remove them. */
|
||||
|
||||
/* these styles changed the Fomantic UI's rules, Fomantic UI expects only "basic" buttons have borders */
|
||||
.ui.button,
|
||||
.ui.button:focus {
|
||||
.ui.button {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
min-height: 1em;
|
||||
outline: none;
|
||||
vertical-align: baseline;
|
||||
font-family: var(--fonts-regular);
|
||||
margin: 0 0.25em 0 0;
|
||||
padding: 0.78571429em 1.5em;
|
||||
font-weight: var(--font-weight-normal);
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
line-height: 1;
|
||||
border-radius: 0.28571429rem;
|
||||
user-select: none;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
justify-content: center;
|
||||
background: var(--color-button);
|
||||
border: 1px solid var(--color-light-border);
|
||||
color: var(--color-text);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.ui.button {
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.button:hover {
|
||||
|
@ -13,10 +35,6 @@
|
|||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.page-content .ui.button {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.ui.active.button,
|
||||
.ui.button:active,
|
||||
.ui.active.button:active,
|
||||
|
@ -25,6 +43,286 @@
|
|||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.ui.buttons .disabled.button:not(.basic),
|
||||
.ui.disabled.button,
|
||||
.ui.button:disabled,
|
||||
.ui.disabled.button:hover,
|
||||
.ui.disabled.active.button {
|
||||
cursor: default;
|
||||
opacity: var(--opacity-disabled) !important;
|
||||
background-image: none;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
.ui.labeled.button:not(.icon) {
|
||||
display: inline-flex;
|
||||
flex-direction: row;
|
||||
background: none;
|
||||
padding: 0 !important;
|
||||
border: none;
|
||||
}
|
||||
.ui.labeled.button > .button {
|
||||
margin: 0;
|
||||
}
|
||||
.ui.labeled.button > .label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0 0 0 -1px !important;
|
||||
font-size: 1em;
|
||||
border-color: var(--color-light-border);
|
||||
}
|
||||
|
||||
.ui.button > .icon:not(.button) {
|
||||
height: auto;
|
||||
opacity: 0.8;
|
||||
}
|
||||
.ui.button:not(.icon) > .icon:not(.button):not(.dropdown),
|
||||
.ui.button:not(.icon) > .icons:not(.button):not(.dropdown) {
|
||||
margin: 0 0.42857143em 0 -0.21428571em;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
.ui.button:not(.icon) > .icons:not(.button):not(.dropdown) > .icon {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {
|
||||
margin: 0 -0.21428571em 0 0.42857143em;
|
||||
}
|
||||
|
||||
.ui.compact.buttons .button,
|
||||
.ui.compact.button {
|
||||
padding: 0.58928571em 1.125em;
|
||||
}
|
||||
.ui.compact.icon.buttons .button,
|
||||
.ui.compact.icon.button {
|
||||
padding: 0.58928571em;
|
||||
}
|
||||
.ui.compact.labeled.icon.button {
|
||||
padding: 0.58928571em 3.69642857em;
|
||||
}
|
||||
.ui.compact.labeled.icon.button > .icon {
|
||||
padding: 0.58928571em 0;
|
||||
}
|
||||
|
||||
.ui.buttons .button,
|
||||
.ui.button {
|
||||
font-size: 1rem;
|
||||
}
|
||||
.ui.mini.buttons .dropdown,
|
||||
.ui.mini.buttons .dropdown .menu > .item,
|
||||
.ui.mini.buttons .button,
|
||||
.ui.ui.ui.ui.mini.button {
|
||||
font-size: 0.78571429rem;
|
||||
}
|
||||
.ui.tiny.buttons .dropdown,
|
||||
.ui.tiny.buttons .dropdown .menu > .item,
|
||||
.ui.tiny.buttons .button,
|
||||
.ui.ui.ui.ui.tiny.button {
|
||||
font-size: 0.85714286rem;
|
||||
}
|
||||
.ui.small.buttons .dropdown,
|
||||
.ui.small.buttons .dropdown .menu > .item,
|
||||
.ui.small.buttons .button,
|
||||
.ui.ui.ui.ui.small.button {
|
||||
font-size: 0.92857143rem;
|
||||
}
|
||||
|
||||
.ui.icon.buttons .button,
|
||||
.ui.icon.button:not(.compact) {
|
||||
padding: 0.78571429em;
|
||||
}
|
||||
.ui.icon.buttons .button > .icon,
|
||||
.ui.icon.button > .icon {
|
||||
margin: 0 !important;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.ui.basic.buttons .button,
|
||||
.ui.basic.button {
|
||||
border-radius: 0.28571429rem;
|
||||
background: none;
|
||||
}
|
||||
.ui.basic.buttons {
|
||||
border: 1px solid var(--color-secondary);
|
||||
border-radius: 0.28571429rem;
|
||||
}
|
||||
.ui.basic.buttons .button {
|
||||
border-radius: 0;
|
||||
border-left: 1px solid var(--color-secondary);
|
||||
}
|
||||
|
||||
.ui.labeled.button.disabled > .button,
|
||||
.ui.basic.buttons .button,
|
||||
.ui.basic.button {
|
||||
color: var(--color-text-light);
|
||||
background: var(--color-button);
|
||||
}
|
||||
|
||||
.ui.basic.buttons .button:hover,
|
||||
.ui.basic.button:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-hover);
|
||||
border-color: var(--color-secondary-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.buttons .button:active,
|
||||
.ui.basic.button:active,
|
||||
.ui.basic.buttons .active.button,
|
||||
.ui.basic.active.button,
|
||||
.ui.basic.buttons .active.button:hover,
|
||||
.ui.basic.active.button:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
}
|
||||
|
||||
.ui.labeled.icon.button {
|
||||
position: relative;
|
||||
padding-left: 4.07142857em !important;
|
||||
padding-right: 1.5em !important;
|
||||
}
|
||||
|
||||
.ui.labeled.icon.button > .icon {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
line-height: 1;
|
||||
border-radius: 0;
|
||||
border-top-left-radius: inherit;
|
||||
border-bottom-left-radius: inherit;
|
||||
text-align: center;
|
||||
animation: none;
|
||||
padding: 0.78571429em 0;
|
||||
margin: 0;
|
||||
width: 2.57142857em;
|
||||
background: var(--color-hover);
|
||||
}
|
||||
|
||||
.ui.button.toggle.active {
|
||||
background-color: var(--color-green);
|
||||
color: var(--color-white);
|
||||
}
|
||||
.ui.button.toggle.active:hover {
|
||||
background-color: var(--color-green-dark-1);
|
||||
color: var(--color-white);
|
||||
}
|
||||
|
||||
.ui.fluid.button {
|
||||
width: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ui.primary.button,
|
||||
.ui.primary.buttons .button {
|
||||
background: var(--color-primary);
|
||||
color: var(--color-primary-contrast);
|
||||
}
|
||||
|
||||
.ui.primary.button:hover,
|
||||
.ui.primary.buttons .button:hover {
|
||||
background: var(--color-primary-hover);
|
||||
color: var(--color-primary-contrast);
|
||||
}
|
||||
|
||||
.ui.primary.button:active,
|
||||
.ui.primary.buttons .button:active {
|
||||
background: var(--color-primary-active);
|
||||
}
|
||||
|
||||
.ui.basic.primary.buttons .button,
|
||||
.ui.basic.primary.button {
|
||||
color: var(--color-primary);
|
||||
border-color: var(--color-primary);
|
||||
background: none;
|
||||
}
|
||||
|
||||
.ui.basic.primary.buttons .button:hover,
|
||||
.ui.basic.primary.button:hover {
|
||||
color: var(--color-primary-hover);
|
||||
border-color: var(--color-primary-hover);
|
||||
}
|
||||
|
||||
.ui.basic.primary.buttons .button:active,
|
||||
.ui.basic.primary.button:active {
|
||||
color: var(--color-primary-active);
|
||||
border-color: var(--color-primary-active);
|
||||
}
|
||||
|
||||
.ui.red.button,
|
||||
.ui.red.buttons .button {
|
||||
background: var(--color-red);
|
||||
}
|
||||
|
||||
.ui.red.button:hover,
|
||||
.ui.red.buttons .button:hover {
|
||||
background: var(--color-red-dark-1);
|
||||
}
|
||||
|
||||
.ui.red.button:active,
|
||||
.ui.red.buttons .button:active {
|
||||
background: var(--color-red-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.red.buttons .button,
|
||||
.ui.basic.red.button {
|
||||
color: var(--color-red);
|
||||
border-color: var(--color-red);
|
||||
background: none;
|
||||
}
|
||||
|
||||
.ui.basic.red.buttons .button:hover,
|
||||
.ui.basic.red.button:hover {
|
||||
color: var(--color-red-dark-1);
|
||||
border-color: var(--color-red-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.red.buttons .button:active,
|
||||
.ui.basic.red.button:active {
|
||||
color: var(--color-red-dark-2);
|
||||
border-color: var(--color-red-dark-2);
|
||||
}
|
||||
|
||||
.ui.green.button,
|
||||
.ui.green.buttons .button {
|
||||
background: var(--color-green);
|
||||
}
|
||||
|
||||
.ui.green.button:hover,
|
||||
.ui.green.buttons .button:hover {
|
||||
background: var(--color-green-dark-1);
|
||||
}
|
||||
|
||||
.ui.green.button:active,
|
||||
.ui.green.buttons .button:active {
|
||||
background: var(--color-green-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.green.buttons .button,
|
||||
.ui.basic.green.button {
|
||||
color: var(--color-green);
|
||||
border-color: var(--color-green);
|
||||
background: none;
|
||||
}
|
||||
|
||||
.ui.basic.green.buttons .button:hover,
|
||||
.ui.basic.green.button:hover {
|
||||
color: var(--color-green-dark-1);
|
||||
border-color: var(--color-green-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.green.buttons .button:active,
|
||||
.ui.basic.green.button:active {
|
||||
color: var(--color-green-dark-2);
|
||||
border-color: var(--color-green-dark-2);
|
||||
}
|
||||
|
||||
.ui.buttons {
|
||||
display: inline-flex;
|
||||
flex-direction: row;
|
||||
font-size: 0;
|
||||
vertical-align: baseline;
|
||||
margin: 0 0.25em 0 0;
|
||||
}
|
||||
|
||||
.delete-button,
|
||||
.delete-button:hover {
|
||||
color: var(--color-red);
|
||||
|
@ -42,8 +340,7 @@
|
|||
}
|
||||
|
||||
.btn:hover,
|
||||
.btn:active,
|
||||
.btn:focus {
|
||||
.btn:active {
|
||||
background: none;
|
||||
border: none;
|
||||
}
|
||||
|
@ -59,6 +356,19 @@ It needs some tricks to tweak the left/right borders with active state */
|
|||
|
||||
.ui.buttons .button {
|
||||
border-right: none;
|
||||
flex: 1 0 auto;
|
||||
border-radius: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.ui.buttons .button:first-child {
|
||||
border-left: none;
|
||||
margin-left: 0;
|
||||
border-top-left-radius: 0.28571429rem;
|
||||
border-bottom-left-radius: 0.28571429rem;
|
||||
}
|
||||
.ui.buttons .button:last-child {
|
||||
border-top-right-radius: 0.28571429rem;
|
||||
border-bottom-right-radius: 0.28571429rem;
|
||||
}
|
||||
|
||||
.ui.buttons .button:hover {
|
||||
|
@ -89,664 +399,9 @@ It needs some tricks to tweak the left/right borders with active state */
|
|||
border-left: none;
|
||||
}
|
||||
|
||||
.ui.basic.buttons .button,
|
||||
.ui.basic.button,
|
||||
.ui.basic.buttons .button:hover,
|
||||
.ui.basic.button:hover {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* apply the vertical padding of .compact to non-compact buttons when they contain a svg as they
|
||||
would otherwise appear too large. Seen on "RSS Feed" button on repo releases tab. */
|
||||
.ui.small.button:not(.compact):has(.svg) {
|
||||
padding-top: 0.58928571em;
|
||||
padding-bottom: 0.58928571em;
|
||||
}
|
||||
|
||||
.ui.labeled.button.disabled > .button,
|
||||
.ui.basic.buttons .button,
|
||||
.ui.basic.button,
|
||||
.ui.basic.buttons .button:focus,
|
||||
.ui.basic.button:focus {
|
||||
color: var(--color-text-light);
|
||||
background: var(--color-button);
|
||||
}
|
||||
|
||||
.ui.basic.buttons .button:hover,
|
||||
.ui.basic.button:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-hover);
|
||||
border-color: var(--color-secondary-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.buttons .button:active,
|
||||
.ui.basic.button:active,
|
||||
.ui.basic.buttons .active.button,
|
||||
.ui.basic.active.button,
|
||||
.ui.basic.buttons .active.button:hover,
|
||||
.ui.basic.active.button:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
}
|
||||
|
||||
.ui.labeled.button > .label {
|
||||
border-color: var(--color-light-border);
|
||||
}
|
||||
|
||||
.ui.labeled.icon.buttons > .button > .icon,
|
||||
.ui.labeled.icon.button > .icon {
|
||||
background: var(--color-hover);
|
||||
}
|
||||
|
||||
/* primary */
|
||||
|
||||
.ui.primary.labels .label,
|
||||
.ui.ui.ui.primary.label,
|
||||
.ui.primary.button,
|
||||
.ui.primary.buttons .button,
|
||||
.ui.primary.button:focus,
|
||||
.ui.primary.buttons .button:focus {
|
||||
background: var(--color-primary);
|
||||
color: var(--color-primary-contrast);
|
||||
}
|
||||
|
||||
.ui.primary.button:hover,
|
||||
.ui.primary.buttons .button:hover {
|
||||
background: var(--color-primary-hover);
|
||||
color: var(--color-primary-contrast);
|
||||
}
|
||||
|
||||
.ui.primary.button:active,
|
||||
.ui.primary.buttons .button:active {
|
||||
background: var(--color-primary-active);
|
||||
}
|
||||
|
||||
.ui.basic.primary.buttons .button,
|
||||
.ui.basic.primary.button,
|
||||
.ui.basic.primary.buttons .button:focus,
|
||||
.ui.basic.primary.button:focus {
|
||||
color: var(--color-primary);
|
||||
border-color: var(--color-primary);
|
||||
}
|
||||
|
||||
.ui.basic.primary.buttons .button:hover,
|
||||
.ui.basic.primary.button:hover {
|
||||
color: var(--color-primary-hover);
|
||||
border-color: var(--color-primary-hover);
|
||||
}
|
||||
|
||||
.ui.basic.primary.buttons .button:active,
|
||||
.ui.basic.primary.button:active {
|
||||
color: var(--color-primary-active);
|
||||
border-color: var(--color-primary-active);
|
||||
}
|
||||
|
||||
/* secondary */
|
||||
|
||||
.ui.secondary.labels .label,
|
||||
.ui.ui.ui.secondary.label,
|
||||
.ui.secondary.button,
|
||||
.ui.secondary.buttons .button,
|
||||
.ui.secondary.button:focus,
|
||||
.ui.secondary.buttons .button:focus {
|
||||
background: var(--color-secondary-button);
|
||||
}
|
||||
|
||||
.ui.secondary.button:hover,
|
||||
.ui.secondary.buttons .button:hover {
|
||||
background: var(--color-secondary-hover);
|
||||
}
|
||||
|
||||
.ui.secondary.button:active,
|
||||
.ui.secondary.buttons .button:active {
|
||||
background: var(--color-secondary-active);
|
||||
}
|
||||
|
||||
.ui.basic.secondary.buttons .button,
|
||||
.ui.basic.secondary.button,
|
||||
.ui.basic.secondary.button:focus,
|
||||
.ui.basic.secondary.buttons .button:focus {
|
||||
color: var(--color-secondary-button);
|
||||
border-color: var(--color-secondary-button);
|
||||
}
|
||||
|
||||
.ui.basic.secondary.buttons .button:hover,
|
||||
.ui.basic.secondary.button:hover {
|
||||
color: var(--color-secondary-hover);
|
||||
border-color: var(--color-secondary-hover);
|
||||
}
|
||||
|
||||
.ui.basic.secondary.buttons .button:active,
|
||||
.ui.basic.secondary.button:active {
|
||||
color: var(--color-secondary-active);
|
||||
border-color: var(--color-secondary-active);
|
||||
}
|
||||
|
||||
/* red */
|
||||
|
||||
.ui.red.labels .label,
|
||||
.ui.ui.ui.red.label,
|
||||
.ui.red.button,
|
||||
.ui.red.buttons .button,
|
||||
.ui.red.button:focus,
|
||||
.ui.red.buttons .button:focus {
|
||||
background: var(--color-red);
|
||||
}
|
||||
|
||||
.ui.red.button:hover,
|
||||
.ui.red.buttons .button:hover {
|
||||
background: var(--color-red-dark-1);
|
||||
}
|
||||
|
||||
.ui.red.button:active,
|
||||
.ui.red.buttons .button:active {
|
||||
background: var(--color-red-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.red.buttons .button,
|
||||
.ui.basic.red.button,
|
||||
.ui.basic.red.buttons .button:focus,
|
||||
.ui.basic.red.button:focus {
|
||||
color: var(--color-red);
|
||||
border-color: var(--color-red);
|
||||
}
|
||||
|
||||
.ui.basic.red.buttons .button:hover,
|
||||
.ui.basic.red.button:hover {
|
||||
color: var(--color-red-dark-1);
|
||||
border-color: var(--color-red-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.red.buttons .button:active,
|
||||
.ui.basic.red.button:active {
|
||||
color: var(--color-red-dark-2);
|
||||
border-color: var(--color-red-dark-2);
|
||||
}
|
||||
|
||||
/* orange */
|
||||
|
||||
.ui.orange.labels .label,
|
||||
.ui.ui.ui.orange.label,
|
||||
.ui.orange.button,
|
||||
.ui.orange.buttons .button,
|
||||
.ui.orange.button:focus,
|
||||
.ui.orange.buttons .button:focus {
|
||||
background: var(--color-orange);
|
||||
}
|
||||
|
||||
.ui.orange.button:hover,
|
||||
.ui.orange.buttons .button:hover {
|
||||
background: var(--color-orange-dark-1);
|
||||
}
|
||||
|
||||
.ui.orange.button:active,
|
||||
.ui.orange.buttons .button:active {
|
||||
background: var(--color-orange-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.orange.buttons .button,
|
||||
.ui.basic.orange.button,
|
||||
.ui.basic.orange.buttons .button:focus,
|
||||
.ui.basic.orange.button:focus {
|
||||
color: var(--color-orange);
|
||||
border-color: var(--color-orange);
|
||||
}
|
||||
|
||||
.ui.basic.orange.buttons .button:hover,
|
||||
.ui.basic.orange.button:hover {
|
||||
color: var(--color-orange-dark-1);
|
||||
border-color: var(--color-orange-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.orange.buttons .button:active,
|
||||
.ui.basic.orange.button:active {
|
||||
color: var(--color-orange-dark-2);
|
||||
border-color: var(--color-orange-dark-2);
|
||||
}
|
||||
|
||||
/* yellow */
|
||||
|
||||
.ui.yellow.labels .label,
|
||||
.ui.ui.ui.yellow.label,
|
||||
.ui.yellow.button,
|
||||
.ui.yellow.buttons .button,
|
||||
.ui.yellow.button:focus,
|
||||
.ui.yellow.buttons .button:focus {
|
||||
background: var(--color-yellow);
|
||||
}
|
||||
|
||||
.ui.yellow.button:hover,
|
||||
.ui.yellow.buttons .button:hover {
|
||||
background: var(--color-yellow-dark-1);
|
||||
}
|
||||
|
||||
.ui.yellow.button:active,
|
||||
.ui.yellow.buttons .button:active {
|
||||
background: var(--color-yellow-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.yellow.buttons .button,
|
||||
.ui.basic.yellow.button,
|
||||
.ui.basic.yellow.buttons .button:focus,
|
||||
.ui.basic.yellow.button:focus {
|
||||
color: var(--color-yellow);
|
||||
border-color: var(--color-yellow);
|
||||
}
|
||||
|
||||
.ui.basic.yellow.buttons .button:hover,
|
||||
.ui.basic.yellow.button:hover {
|
||||
color: var(--color-yellow-dark-1);
|
||||
border-color: var(--color-yellow-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.yellow.buttons .button:active,
|
||||
.ui.basic.yellow.button:active {
|
||||
color: var(--color-yellow-dark-2);
|
||||
border-color: var(--color-yellow-dark-2);
|
||||
}
|
||||
|
||||
/* olive */
|
||||
|
||||
.ui.olive.labels .label,
|
||||
.ui.ui.ui.olive.label,
|
||||
.ui.olive.button,
|
||||
.ui.olive.buttons .button,
|
||||
.ui.olive.button:focus,
|
||||
.ui.olive.buttons .button:focus {
|
||||
background: var(--color-olive);
|
||||
}
|
||||
|
||||
.ui.olive.button:hover,
|
||||
.ui.olive.buttons .button:hover {
|
||||
background: var(--color-olive-dark-1);
|
||||
}
|
||||
|
||||
.ui.olive.button:active,
|
||||
.ui.olive.buttons .button:active {
|
||||
background: var(--color-olive-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.olive.buttons .button,
|
||||
.ui.basic.olive.button,
|
||||
.ui.basic.olive.buttons .button:focus,
|
||||
.ui.basic.olive.button:focus {
|
||||
color: var(--color-olive);
|
||||
border-color: var(--color-olive);
|
||||
}
|
||||
|
||||
.ui.basic.olive.buttons .button:hover,
|
||||
.ui.basic.olive.button:hover {
|
||||
color: var(--color-olive-dark-1);
|
||||
border-color: var(--color-olive-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.olive.buttons .button:active,
|
||||
.ui.basic.olive.button:active {
|
||||
color: var(--color-olive-dark-2);
|
||||
border-color: var(--color-olive-dark-2);
|
||||
}
|
||||
|
||||
/* green */
|
||||
|
||||
.ui.green.labels .label,
|
||||
.ui.ui.ui.green.label,
|
||||
.ui.green.button,
|
||||
.ui.green.buttons .button,
|
||||
.ui.green.button:focus,
|
||||
.ui.green.buttons .button:focus {
|
||||
background: var(--color-green);
|
||||
}
|
||||
|
||||
.ui.green.button:hover,
|
||||
.ui.green.buttons .button:hover {
|
||||
background: var(--color-green-dark-1);
|
||||
}
|
||||
|
||||
.ui.green.button:active,
|
||||
.ui.green.buttons .button:active {
|
||||
background: var(--color-green-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.green.buttons .button,
|
||||
.ui.basic.green.button,
|
||||
.ui.basic.green.buttons .button:focus,
|
||||
.ui.basic.green.button:focus {
|
||||
color: var(--color-green);
|
||||
border-color: var(--color-green);
|
||||
}
|
||||
|
||||
.ui.basic.green.buttons .button:hover,
|
||||
.ui.basic.green.button:hover {
|
||||
color: var(--color-green-dark-1);
|
||||
border-color: var(--color-green-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.green.buttons .button:active,
|
||||
.ui.basic.green.button:active {
|
||||
color: var(--color-green-dark-2);
|
||||
border-color: var(--color-green-dark-2);
|
||||
}
|
||||
|
||||
/* teal */
|
||||
|
||||
.ui.teal.labels .label,
|
||||
.ui.ui.ui.teal.label,
|
||||
.ui.teal.button,
|
||||
.ui.teal.buttons .button,
|
||||
.ui.teal.button:focus,
|
||||
.ui.teal.buttons .button:focus {
|
||||
background: var(--color-teal);
|
||||
}
|
||||
|
||||
.ui.teal.button:hover,
|
||||
.ui.teal.buttons .button:hover {
|
||||
background: var(--color-teal-dark-1);
|
||||
}
|
||||
|
||||
.ui.teal.button:active,
|
||||
.ui.teal.buttons .button:active {
|
||||
background: var(--color-teal-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.teal.buttons .button,
|
||||
.ui.basic.teal.button,
|
||||
.ui.basic.teal.buttons .button:focus,
|
||||
.ui.basic.teal.button:focus {
|
||||
color: var(--color-teal);
|
||||
border-color: var(--color-teal);
|
||||
}
|
||||
|
||||
.ui.basic.teal.buttons .button:hover,
|
||||
.ui.basic.teal.button:hover {
|
||||
color: var(--color-teal-dark-1);
|
||||
border-color: var(--color-teal-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.teal.buttons .button:active,
|
||||
.ui.basic.teal.button:active {
|
||||
color: var(--color-teal-dark-2);
|
||||
border-color: var(--color-teal-dark-2);
|
||||
}
|
||||
|
||||
/* blue */
|
||||
|
||||
.ui.blue.labels .label,
|
||||
.ui.ui.ui.blue.label,
|
||||
.ui.blue.button,
|
||||
.ui.blue.buttons .button,
|
||||
.ui.blue.button:focus,
|
||||
.ui.blue.buttons .button:focus {
|
||||
background: var(--color-blue);
|
||||
}
|
||||
|
||||
.ui.blue.button:hover,
|
||||
.ui.blue.buttons .button:hover {
|
||||
background: var(--color-blue-dark-1);
|
||||
}
|
||||
|
||||
.ui.blue.button:active,
|
||||
.ui.blue.buttons .button:active {
|
||||
background: var(--color-blue-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.blue.buttons .button,
|
||||
.ui.basic.blue.button,
|
||||
.ui.basic.blue.buttons .button:focus,
|
||||
.ui.basic.blue.button:focus {
|
||||
color: var(--color-blue);
|
||||
border-color: var(--color-blue);
|
||||
}
|
||||
|
||||
.ui.basic.blue.buttons .button:hover,
|
||||
.ui.basic.blue.button:hover {
|
||||
color: var(--color-blue-dark-1);
|
||||
border-color: var(--color-blue-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.blue.buttons .button:active,
|
||||
.ui.basic.blue.button:active {
|
||||
color: var(--color-blue-dark-2);
|
||||
border-color: var(--color-blue-dark-2);
|
||||
}
|
||||
|
||||
/* violet */
|
||||
|
||||
.ui.violet.labels .label,
|
||||
.ui.ui.ui.violet.label,
|
||||
.ui.violet.button,
|
||||
.ui.violet.buttons .button,
|
||||
.ui.violet.button:focus,
|
||||
.ui.violet.buttons .button:focus {
|
||||
background: var(--color-violet);
|
||||
}
|
||||
|
||||
.ui.violet.button:hover,
|
||||
.ui.violet.buttons .button:hover {
|
||||
background: var(--color-violet-dark-1);
|
||||
}
|
||||
|
||||
.ui.violet.button:active,
|
||||
.ui.violet.buttons .button:active {
|
||||
background: var(--color-violet-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.violet.buttons .button,
|
||||
.ui.basic.violet.button,
|
||||
.ui.basic.violet.buttons .button:focus,
|
||||
.ui.basic.violet.button:focus {
|
||||
color: var(--color-violet);
|
||||
border-color: var(--color-violet);
|
||||
}
|
||||
|
||||
.ui.basic.violet.buttons .button:hover,
|
||||
.ui.basic.violet.button:hover {
|
||||
color: var(--color-violet-dark-1);
|
||||
border-color: var(--color-violet-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.violet.buttons .button:active,
|
||||
.ui.basic.violet.button:active {
|
||||
color: var(--color-violet-dark-2);
|
||||
border-color: var(--color-violet-dark-2);
|
||||
}
|
||||
|
||||
/* purple */
|
||||
|
||||
.ui.purple.labels .label,
|
||||
.ui.ui.ui.purple.label,
|
||||
.ui.purple.button,
|
||||
.ui.purple.buttons .button,
|
||||
.ui.purple.button:focus,
|
||||
.ui.purple.buttons .button:focus {
|
||||
background: var(--color-purple);
|
||||
}
|
||||
|
||||
.ui.purple.button:hover,
|
||||
.ui.purple.buttons .button:hover {
|
||||
background: var(--color-purple-dark-1);
|
||||
}
|
||||
|
||||
.ui.purple.button:active,
|
||||
.ui.purple.buttons .button:active {
|
||||
background: var(--color-purple-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.purple.buttons .button,
|
||||
.ui.basic.purple.button,
|
||||
.ui.basic.purple.buttons .button:focus,
|
||||
.ui.basic.purple.button:focus {
|
||||
color: var(--color-purple);
|
||||
border-color: var(--color-purple);
|
||||
}
|
||||
|
||||
.ui.basic.purple.buttons .button:hover,
|
||||
.ui.basic.purple.button:hover {
|
||||
color: var(--color-purple-dark-1);
|
||||
border-color: var(--color-purple-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.purple.buttons .button:active,
|
||||
.ui.basic.purple.button:active {
|
||||
color: var(--color-purple-dark-2);
|
||||
border-color: var(--color-purple-dark-2);
|
||||
}
|
||||
|
||||
/* pink */
|
||||
|
||||
.ui.pink.labels .label,
|
||||
.ui.ui.ui.pink.label,
|
||||
.ui.pink.button,
|
||||
.ui.pink.buttons .button,
|
||||
.ui.pink.button:focus,
|
||||
.ui.pink.buttons .button:focus {
|
||||
background: var(--color-pink);
|
||||
}
|
||||
|
||||
.ui.pink.button:hover,
|
||||
.ui.pink.buttons .button:hover {
|
||||
background: var(--color-pink-dark-1);
|
||||
}
|
||||
|
||||
.ui.pink.button:active,
|
||||
.ui.pink.buttons .button:active {
|
||||
background: var(--color-pink-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.pink.buttons .button,
|
||||
.ui.basic.pink.button,
|
||||
.ui.basic.pink.buttons .button:focus,
|
||||
.ui.basic.pink.button:focus {
|
||||
color: var(--color-pink);
|
||||
border-color: var(--color-pink);
|
||||
}
|
||||
|
||||
.ui.basic.pink.buttons .button:hover,
|
||||
.ui.basic.pink.button:hover {
|
||||
color: var(--color-pink-dark-1);
|
||||
border-color: var(--color-pink-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.pink.buttons .button:active,
|
||||
.ui.basic.pink.button:active {
|
||||
color: var(--color-pink-dark-2);
|
||||
border-color: var(--color-pink-dark-2);
|
||||
}
|
||||
|
||||
/* brown */
|
||||
|
||||
.ui.brown.labels .label,
|
||||
.ui.ui.ui.brown.label,
|
||||
.ui.brown.button,
|
||||
.ui.brown.buttons .button,
|
||||
.ui.brown.button:focus,
|
||||
.ui.brown.buttons .button:focus {
|
||||
background: var(--color-brown);
|
||||
}
|
||||
|
||||
.ui.brown.button:hover,
|
||||
.ui.brown.buttons .button:hover {
|
||||
background: var(--color-brown-dark-1);
|
||||
}
|
||||
|
||||
.ui.brown.button:active,
|
||||
.ui.brown.buttons .button:active {
|
||||
background: var(--color-brown-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.brown.buttons .button,
|
||||
.ui.basic.brown.button,
|
||||
.ui.basic.brown.buttons .button:focus,
|
||||
.ui.basic.brown.button:focus {
|
||||
color: var(--color-brown);
|
||||
border-color: var(--color-brown);
|
||||
}
|
||||
|
||||
.ui.basic.brown.buttons .button:hover,
|
||||
.ui.basic.brown.button:hover {
|
||||
color: var(--color-brown-dark-1);
|
||||
border-color: var(--color-brown-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.brown.buttons .button:active,
|
||||
.ui.basic.brown.button:active {
|
||||
color: var(--color-brown-dark-2);
|
||||
border-color: var(--color-brown-dark-2);
|
||||
}
|
||||
|
||||
/* negative */
|
||||
|
||||
.ui.negative.buttons .button,
|
||||
.ui.negative.button,
|
||||
.ui.negative.buttons .button:focus,
|
||||
.ui.negative.button:focus {
|
||||
background: var(--color-red);
|
||||
}
|
||||
|
||||
.ui.negative.buttons .button:hover,
|
||||
.ui.negative.button:hover {
|
||||
background: var(--color-red-dark-1);
|
||||
}
|
||||
|
||||
.ui.negative.buttons .button:active,
|
||||
.ui.negative.button:active {
|
||||
background: var(--color-red-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.negative.buttons .button,
|
||||
.ui.basic.negative.button,
|
||||
.ui.basic.negative.buttons .button:focus,
|
||||
.ui.basic.negative.button:focus {
|
||||
color: var(--color-red);
|
||||
border-color: var(--color-red);
|
||||
}
|
||||
|
||||
.ui.basic.negative.buttons .button:hover,
|
||||
.ui.basic.negative.button:hover {
|
||||
color: var(--color-red-dark-1);
|
||||
border-color: var(--color-red-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.negative.buttons .button:active,
|
||||
.ui.basic.negative.button:active {
|
||||
color: var(--color-red-dark-2);
|
||||
border-color: var(--color-red-dark-2);
|
||||
}
|
||||
|
||||
/* positive */
|
||||
|
||||
.ui.positive.buttons .button,
|
||||
.ui.positive.button,
|
||||
.ui.positive.buttons .button:focus,
|
||||
.ui.positive.button:focus {
|
||||
background: var(--color-green);
|
||||
}
|
||||
|
||||
.ui.positive.buttons .button:hover,
|
||||
.ui.positive.button:hover {
|
||||
background: var(--color-green-dark-1);
|
||||
}
|
||||
|
||||
.ui.positive.buttons .button:active,
|
||||
.ui.positive.button:active {
|
||||
background: var(--color-green-dark-2);
|
||||
}
|
||||
|
||||
.ui.basic.positive.buttons .button,
|
||||
.ui.basic.positive.button,
|
||||
.ui.basic.positive.buttons .button:focus,
|
||||
.ui.basic.positive.button:focus {
|
||||
color: var(--color-green);
|
||||
border-color: var(--color-green);
|
||||
}
|
||||
|
||||
.ui.basic.positive.buttons .button:hover,
|
||||
.ui.basic.positive.button:hover {
|
||||
color: var(--color-green-dark-1);
|
||||
border-color: var(--color-green-dark-1);
|
||||
}
|
||||
|
||||
.ui.basic.positive.buttons .button:active,
|
||||
.ui.basic.positive.button:active {
|
||||
color: var(--color-green-dark-2);
|
||||
border-color: var(--color-green-dark-2);
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
.ui.comments .comment {
|
||||
position: relative;
|
||||
background: none;
|
||||
margin: 0.5em 0 0;
|
||||
margin: 3px 0 0;
|
||||
padding: 0.5em 0 0;
|
||||
border: none;
|
||||
border-top: none;
|
||||
|
|
|
@ -2,12 +2,16 @@
|
|||
margin: 10px 0;
|
||||
height: 0;
|
||||
font-weight: var(--font-weight-medium);
|
||||
text-transform: uppercase;
|
||||
color: var(--color-text);
|
||||
font-size: 1rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
h4.divider {
|
||||
margin-top: 1.25rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.divider:not(.divider-text) {
|
||||
border-top: 1px solid var(--color-secondary);
|
||||
}
|
||||
|
|
|
@ -6,10 +6,16 @@
|
|||
margin-top: var(--page-spacing);
|
||||
}
|
||||
|
||||
/* small options menu on the left, used in settings/admin pages */
|
||||
.flex-container-nav {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
/* wide sidebar on the right, used in frontpage */
|
||||
.flex-container-sidebar {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.flex-container-main {
|
||||
flex: 1;
|
||||
min-width: 0; /* make the "text truncate" work, otherwise the flex axis is not limited and the text just overflows */
|
||||
|
@ -19,7 +25,9 @@
|
|||
.flex-container {
|
||||
flex-direction: column;
|
||||
}
|
||||
.flex-container-nav {
|
||||
.flex-container-nav,
|
||||
.flex-container-sidebar {
|
||||
order: -1;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
font-family: var(--fonts-regular);
|
||||
font-weight: var(--font-weight-medium);
|
||||
line-height: 1.28571429;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.ui.header:first-child {
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
background: var(--color-label-bg);
|
||||
color: var(--color-label-text);
|
||||
padding: 0.3em 0.5em;
|
||||
text-transform: none;
|
||||
font-size: 0.85714286rem;
|
||||
font-weight: var(--font-weight-medium);
|
||||
border: 0 solid transparent;
|
||||
|
|
|
@ -0,0 +1,802 @@
|
|||
.ui.menu {
|
||||
display: flex;
|
||||
margin: 1rem 0;
|
||||
font-family: var(--fonts-regular);
|
||||
font-weight: var(--font-weight-normal);
|
||||
background: var(--color-menu);
|
||||
border: 1px solid var(--color-secondary);
|
||||
border-radius: 0.28571429rem;
|
||||
min-height: 2.85714286em;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.ui.menu:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
.ui.menu:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.ui.menu .menu {
|
||||
margin: 0;
|
||||
}
|
||||
.ui.menu:not(.vertical) > .menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.ui.menu:not(.vertical) .item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.ui.menu .item {
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
line-height: var(--line-height-default);
|
||||
text-decoration: none;
|
||||
flex: 0 0 auto;
|
||||
background: none;
|
||||
padding: 0.92857143em 1.14285714em;
|
||||
color: var(--color-text);
|
||||
font-weight: var(--font-weight-normal);
|
||||
}
|
||||
.ui.menu > .item:first-child {
|
||||
border-radius: 0.28571429rem 0 0 0.28571429rem;
|
||||
}
|
||||
|
||||
.ui.menu .item::before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
top: 0;
|
||||
right: 0;
|
||||
height: 100%;
|
||||
width: 1px;
|
||||
background: var(--color-secondary);
|
||||
}
|
||||
|
||||
.ui.menu .item > .svg {
|
||||
margin-right: 0.35em;
|
||||
}
|
||||
|
||||
.ui.menu .item > a:not(.ui),
|
||||
.ui.menu .item > p:only-child {
|
||||
line-height: 1.3;
|
||||
}
|
||||
.ui.menu .item > p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
.ui.menu .item > p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.ui.menu .item > i.icon {
|
||||
opacity: 0.9;
|
||||
float: none;
|
||||
margin: 0 0.35714286em 0 0;
|
||||
}
|
||||
|
||||
.ui.menu:not(.vertical) .item > .button {
|
||||
position: relative;
|
||||
top: 0;
|
||||
margin: -0.5em 0;
|
||||
padding: 0.58928571em 1.125em;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.ui.menu > .grid,
|
||||
.ui.menu > .container {
|
||||
display: flex;
|
||||
align-items: inherit;
|
||||
flex-direction: inherit;
|
||||
}
|
||||
|
||||
.ui.menu .item > .input {
|
||||
width: 100%;
|
||||
}
|
||||
.ui.menu:not(.vertical) .item > .input {
|
||||
position: relative;
|
||||
top: 0;
|
||||
margin: -0.5em 0;
|
||||
}
|
||||
.ui.menu .item > .input input {
|
||||
font-size: 1em;
|
||||
padding-top: 0.57142857em;
|
||||
padding-bottom: 0.57142857em;
|
||||
}
|
||||
|
||||
.ui.menu .header.item,
|
||||
.ui.vertical.menu .header.item {
|
||||
margin: 0;
|
||||
font-size: 1.1em;
|
||||
background: var(--color-box-header);
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
.ui.vertical.menu .item > .header:not(.ui) {
|
||||
margin: 0 0 0.5em;
|
||||
font-size: 1em;
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
|
||||
.ui.menu .item > i.dropdown.icon {
|
||||
padding: 0;
|
||||
float: right;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
|
||||
.ui.menu .dropdown.item .menu {
|
||||
min-width: calc(100% - 1px);
|
||||
border-radius: 0 0 0.28571429rem 0.28571429rem;
|
||||
background: var(--color-body);
|
||||
margin: 0;
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown .menu > .item {
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
font-size: 1em !important;
|
||||
padding: 0.78571429em 1.14285714em !important;
|
||||
background: transparent !important;
|
||||
color: var(--color-text) !important;
|
||||
font-weight: var(--font-weight-normal) !important;
|
||||
}
|
||||
.ui.menu .ui.dropdown .menu > .item:hover {
|
||||
color: var(--color-text) !important;
|
||||
background: var(--color-hover) !important;
|
||||
}
|
||||
.ui.menu .ui.dropdown .menu > .selected.item {
|
||||
color: var(--color-text) !important;
|
||||
background: var(--color-hover) !important;
|
||||
}
|
||||
.ui.menu .ui.dropdown .menu > .active.item {
|
||||
color: var(--color-text) !important;
|
||||
background: var(--color-active) !important;
|
||||
font-weight: var(--font-weight-medium) !important;
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown.item .menu .item {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {
|
||||
display: block;
|
||||
}
|
||||
.ui.menu .ui.dropdown .menu > .item > i.icon:not(.dropdown) {
|
||||
display: inline-block;
|
||||
font-size: 1em !important;
|
||||
float: none;
|
||||
margin: 0 0.75em 0 0 !important;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .dropdown.item > .menu {
|
||||
border-radius: 0.28571429rem;
|
||||
margin-top: 0.35714286em;
|
||||
}
|
||||
|
||||
.ui.menu .pointing.dropdown.item .menu {
|
||||
margin-top: 0.75em;
|
||||
}
|
||||
|
||||
.ui.menu .item > .label:not(.floating) {
|
||||
margin-left: 1em;
|
||||
padding: 0.3em 0.78571429em;
|
||||
}
|
||||
.ui.vertical.menu .item > .label {
|
||||
margin-top: -0.15em;
|
||||
margin-bottom: -0.15em;
|
||||
padding: 0.3em 0.78571429em;
|
||||
float: right;
|
||||
text-align: center;
|
||||
}
|
||||
.ui.menu .item > .floating.label {
|
||||
padding: 0.3em 0.78571429em;
|
||||
}
|
||||
.ui.menu .item > .label {
|
||||
background: var(--color-label-bg);
|
||||
color: var(--color-label-text);
|
||||
}
|
||||
.ui.menu .item > .image.label img {
|
||||
margin: -0.2833em 0.8em -0.2833em -0.8em;
|
||||
height: 1.5666em;
|
||||
}
|
||||
|
||||
.ui.menu .item > img:not(.ui) {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin: -0.3em 0;
|
||||
width: 2.5em;
|
||||
}
|
||||
.ui.vertical.menu .item > img:not(.ui):only-child {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.ui.menu .list .item::before {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767.98px) {
|
||||
.ui.menu > .ui.container {
|
||||
width: 100% !important;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.menu .dropdown.item:hover,
|
||||
.ui.menu a.item:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ui.menu a.item:active {
|
||||
color: var(--color-text);
|
||||
background: none;
|
||||
}
|
||||
|
||||
.ui.menu .active.item {
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
font-weight: var(--font-weight-normal);
|
||||
}
|
||||
.ui.menu .active.item > i.icon {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.ui.ui.menu .item.disabled {
|
||||
cursor: default;
|
||||
background-color: transparent;
|
||||
pointer-events: none;
|
||||
opacity: var(--opacity-disabled);
|
||||
}
|
||||
|
||||
.ui.menu:not(.vertical) .left.item,
|
||||
.ui.menu:not(.vertical) .left.menu {
|
||||
display: flex;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
|
||||
.ui.menu:not(.vertical) .right.item,
|
||||
.ui.menu:not(.vertical) .right.menu {
|
||||
display: flex;
|
||||
margin-left: auto !important;
|
||||
}
|
||||
.ui.menu:not(.vertical) :not(.dropdown) > .left.menu,
|
||||
.ui.menu:not(.vertical) :not(.dropdown) > .right.menu {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
.ui.menu:not(.vertical) .center.item {
|
||||
display: flex;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
|
||||
.ui.menu .right.item::before,
|
||||
.ui.menu .right.menu > .item::before {
|
||||
right: auto;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.ui.menu .center.item:last-child::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.vertical.menu {
|
||||
display: block;
|
||||
flex-direction: column;
|
||||
background: var(--color-menu);
|
||||
width: 15rem;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item {
|
||||
display: block;
|
||||
background: none;
|
||||
border-top: none;
|
||||
border-right: none;
|
||||
}
|
||||
.ui.vertical.menu > .item:first-child {
|
||||
border-radius: 0.28571429rem 0.28571429rem 0 0;
|
||||
}
|
||||
.ui.vertical.menu > .item:last-child {
|
||||
border-radius: 0 0 0.28571429rem 0.28571429rem;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item > i.icon {
|
||||
width: 1.18em;
|
||||
float: right;
|
||||
margin: 0 0 0 0.5em;
|
||||
}
|
||||
.ui.vertical.menu .item > .label + i.icon {
|
||||
float: none;
|
||||
margin: 0 0.5em 0 0;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item::before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background: var(--color-secondary);
|
||||
}
|
||||
.ui.vertical.menu .item:first-child::before {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item > .menu {
|
||||
margin: 0.5em -1.14285714em 0;
|
||||
}
|
||||
.ui.vertical.menu .menu .item {
|
||||
background: none;
|
||||
padding: 0.5em 1.33333333em;
|
||||
font-size: 0.85714286em;
|
||||
color: var(--color-text-light-2);
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item .menu .item {
|
||||
color: var(--color-text-light-2);
|
||||
text-indent: 16px;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item .menu .item:hover,
|
||||
.ui.vertical.menu .item .menu a.item:hover {
|
||||
color: var(--color-text-light-1);
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item .menu .active.item {
|
||||
background-color: transparent;
|
||||
font-weight: var(--font-weight-medium);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.ui.vertical.menu .item .menu a.item:hover {
|
||||
color: var(--color-text);
|
||||
}
|
||||
.ui.vertical.menu .menu .item::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .active.item {
|
||||
border-radius: 0;
|
||||
}
|
||||
.ui.vertical.menu > .active.item:first-child {
|
||||
border-radius: 0.28571429rem 0.28571429rem 0 0;
|
||||
}
|
||||
.ui.vertical.menu > .active.item:last-child {
|
||||
border-radius: 0 0 0.28571429rem 0.28571429rem;
|
||||
}
|
||||
.ui.vertical.menu > .active.item:only-child {
|
||||
border-radius: 0.28571429rem;
|
||||
}
|
||||
.ui.vertical.menu .active.item .menu .active.item {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.ui.tabular.menu {
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background: none transparent;
|
||||
border-bottom: 1px solid var(--color-secondary);
|
||||
}
|
||||
.ui.tabular.fluid.menu {
|
||||
width: calc(100% + 2px) !important;
|
||||
}
|
||||
.ui.tabular.menu .item {
|
||||
background: transparent;
|
||||
border-bottom: none;
|
||||
border-left: 1px solid transparent;
|
||||
border-right: 1px solid transparent;
|
||||
border-top: 2px solid transparent;
|
||||
color: var(--color-text-light-2);
|
||||
}
|
||||
.ui.tabular.menu .item::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.tabular.menu .item:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.ui.tabular.menu .active.item,
|
||||
.ui.tabular.menu .active.item:hover {
|
||||
background: var(--color-body);
|
||||
border-top-width: 1px;
|
||||
border-color: var(--color-secondary);
|
||||
font-weight: var(--font-weight-medium);
|
||||
margin-bottom: -1px;
|
||||
border-radius: 0.28571429rem 0.28571429rem 0 0 !important;
|
||||
}
|
||||
|
||||
.ui.tabular.menu + .attached:not(.top).segment,
|
||||
.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {
|
||||
border-top: none;
|
||||
margin-left: 0;
|
||||
margin-top: 0;
|
||||
margin-right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ui.tabular.menu .active.dropdown.item {
|
||||
margin-bottom: 0;
|
||||
border-left: 1px solid transparent;
|
||||
border-right: 1px solid transparent;
|
||||
border-top: 2px solid transparent;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.ui.pagination.menu {
|
||||
margin: 0;
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.ui.pagination.menu .item:last-child {
|
||||
border-radius: 0 0.28571429rem 0.28571429rem 0;
|
||||
}
|
||||
.ui.compact.menu .item:last-child {
|
||||
border-radius: 0 0.28571429rem 0.28571429rem 0;
|
||||
}
|
||||
.ui.pagination.menu .item:last-child::before {
|
||||
display: none;
|
||||
}
|
||||
.ui.pagination.menu .item {
|
||||
min-width: 3em;
|
||||
text-align: center;
|
||||
}
|
||||
.ui.pagination.menu .icon.item i.icon {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.ui.pagination.menu .active.item,
|
||||
.ui.pagination.menu .active.item:hover {
|
||||
border-top: none;
|
||||
padding-top: 0.92857143em;
|
||||
color: var(--color-text);
|
||||
background: var(--color-active);
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.ui.pagination.menu .item:not(.active,.navigation),
|
||||
.ui.pagination.menu .item.navigation span.navigation_label {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.pagination.menu.narrow .item {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
min-width: 1em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ui.pagination.menu.narrow .item .icon {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ui.secondary.menu {
|
||||
background: none;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
gap: .35714286em;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .item {
|
||||
align-self: center;
|
||||
border: none;
|
||||
padding: 0.78571429em 0.92857143em;
|
||||
margin: 0;
|
||||
background: none;
|
||||
border-radius: 0.28571429rem;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .item::before {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .header.item {
|
||||
border-radius: 0;
|
||||
border-right: none;
|
||||
background: none transparent;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .item > img:not(.ui) {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.ui.secondary.menu .dropdown.item:hover,
|
||||
.ui.secondary.menu a.item:hover {
|
||||
color: var(--color-text);
|
||||
background: var(--color-hover);
|
||||
}
|
||||
|
||||
.ui.secondary.menu .active.item,
|
||||
.ui.secondary.menu .active.item:hover {
|
||||
color: var(--color-text-dark);
|
||||
background: var(--color-active);
|
||||
border-radius: 0.28571429rem;
|
||||
}
|
||||
|
||||
.ui.secondary.item.menu {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
.ui.secondary.item.menu .item:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {
|
||||
margin: 0 -0.92857143em;
|
||||
}
|
||||
.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {
|
||||
margin: 0;
|
||||
padding: 0.5em 1.33333333em;
|
||||
}
|
||||
.ui.secondary.vertical.menu > .item {
|
||||
border: none;
|
||||
margin: 0 0 0.35714286em;
|
||||
border-radius: 0.28571429rem !important;
|
||||
}
|
||||
.ui.secondary.vertical.menu > .header.item {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.ui.vertical.secondary.menu .item > .menu .item {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
border-bottom: 2px solid var(--color-secondary);
|
||||
}
|
||||
.ui.secondary.pointing.menu .item {
|
||||
border-bottom-color: transparent;
|
||||
border-bottom-style: solid;
|
||||
border-radius: 0;
|
||||
align-self: flex-end;
|
||||
margin: 0 0 -2px;
|
||||
padding: 0.85714286em 1.14285714em;
|
||||
border-bottom-width: 2px;
|
||||
}
|
||||
.ui.secondary.pointing.menu .ui.dropdown .menu .item {
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
.ui.secondary.pointing.menu .item > .label:not(.floating) {
|
||||
margin-top: -0.3em;
|
||||
margin-bottom: -0.3em;
|
||||
}
|
||||
.ui.secondary.pointing.menu .item > .circular.label {
|
||||
margin-top: -0.5em;
|
||||
margin-bottom: -0.5em;
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .header.item {
|
||||
color: var(--color-text) !important;
|
||||
}
|
||||
.ui.secondary.pointing.menu .item::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .dropdown.item:hover,
|
||||
.ui.secondary.pointing.menu a.item:hover {
|
||||
background-color: transparent;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .dropdown.item:active,
|
||||
.ui.secondary.pointing.menu a.item:active {
|
||||
background-color: transparent;
|
||||
border-color: var(--color-secondary);
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .active.item {
|
||||
background-color: transparent;
|
||||
border-color: currentcolor;
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .active.item,
|
||||
.ui.secondary.pointing.menu .active.item:hover,
|
||||
.ui.secondary.pointing.menu .dropdown.item:hover {
|
||||
color: var(--color-text-dark);
|
||||
}
|
||||
|
||||
.ui.secondary.pointing.menu .active.dropdown.item {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767.98px) {
|
||||
.ui.stackable.menu {
|
||||
flex-direction: column;
|
||||
}
|
||||
.ui.stackable.menu .item {
|
||||
width: 100% !important;
|
||||
}
|
||||
.ui.stackable.menu .left.menu,
|
||||
.ui.stackable.menu .left.item {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
.ui.stackable.menu .right.menu,
|
||||
.ui.stackable.menu .right.item {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
.ui.stackable.menu .center.item {
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
.ui.stackable.menu .right.menu,
|
||||
.ui.stackable.menu .left.menu {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
.ui.floated.menu {
|
||||
float: left;
|
||||
margin: 0 0.5rem 0 0;
|
||||
}
|
||||
.ui.floated.menu .item:last-child::before {
|
||||
display: none;
|
||||
}
|
||||
.ui.right.floated.menu {
|
||||
float: right;
|
||||
margin: 0 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.ui.borderless.menu .item::before,
|
||||
.ui.borderless.menu .item .menu .item::before,
|
||||
.ui.menu .borderless.item::before {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
.ui.compact.menu {
|
||||
display: inline-flex;
|
||||
margin: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.ui.compact.vertical.menu {
|
||||
display: inline-block;
|
||||
width: auto !important;
|
||||
}
|
||||
.ui.compact.menu:not(.secondary) .item:last-child {
|
||||
border-radius: 0 0.28571429rem 0.28571429rem 0;
|
||||
}
|
||||
.ui.compact.menu .item:last-child::before {
|
||||
display: none;
|
||||
}
|
||||
.ui.compact.vertical.menu .item:last-child::before {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ui.menu.fluid,
|
||||
.ui.vertical.menu.fluid {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.ui.item.menu,
|
||||
.ui.item.menu .item {
|
||||
width: 100%;
|
||||
padding-left: 0 !important;
|
||||
padding-right: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.ui.attached.item.menu:not(.tabular) {
|
||||
margin: 0 -1px !important;
|
||||
}
|
||||
.ui.item.menu .item:last-child::before {
|
||||
display: none;
|
||||
}
|
||||
.ui.menu.two.item .item {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.ui.pointing.menu .item::after {
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
content: "";
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) translateY(-50%) rotate(45deg);
|
||||
background: none;
|
||||
margin: 0.5px 0 0;
|
||||
width: 0.57142857em;
|
||||
height: 0.57142857em;
|
||||
border: none;
|
||||
border-bottom: 1px solid var(--color-secondary);
|
||||
border-right: 1px solid var(--color-secondary);
|
||||
z-index: 2;
|
||||
}
|
||||
.ui.pointing.menu .ui.dropdown .menu .item::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.pointing.menu .active.item::after {
|
||||
visibility: visible;
|
||||
}
|
||||
.ui.pointing.menu .active.dropdown.item::after {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.ui.pointing.menu .dropdown.active.item::after,
|
||||
.ui.pointing.menu .active.item .menu .active.item::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.pointing.menu .active.item::after,
|
||||
.ui.pointing.menu .active.item:hover::after {
|
||||
background-color: var(--color-active);
|
||||
}
|
||||
|
||||
.ui.attached.menu {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
border-radius: 0;
|
||||
margin: 0 -1px;
|
||||
width: calc(100% + 2px);
|
||||
max-width: calc(100% + 2px);
|
||||
}
|
||||
.ui.attached + .ui.attached.menu:not(.top) {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.ui[class*="top attached"].menu {
|
||||
bottom: 0;
|
||||
margin-bottom: 0;
|
||||
top: 0;
|
||||
margin-top: 1rem;
|
||||
border-radius: 0.28571429rem 0.28571429rem 0 0;
|
||||
}
|
||||
.ui.menu[class*="top attached"]:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.ui.top.attached.menu > .item:first-child {
|
||||
border-radius: 0.28571429rem 0 0;
|
||||
}
|
||||
|
||||
.ui.attached.menu:not(.tabular) {
|
||||
border: 1px solid var(--color-secondary);
|
||||
}
|
||||
.ui.attached.tabular.menu {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ui.mini.menu,
|
||||
.ui.mini.menu .dropdown,
|
||||
.ui.mini.menu .dropdown .menu > .item {
|
||||
font-size: 0.78571429rem;
|
||||
}
|
||||
.ui.mini.vertical.menu:not(.icon) {
|
||||
width: 9rem;
|
||||
}
|
||||
.ui.tiny.menu,
|
||||
.ui.tiny.menu .dropdown,
|
||||
.ui.tiny.menu .dropdown .menu > .item {
|
||||
font-size: 0.85714286rem;
|
||||
}
|
||||
.ui.tiny.vertical.menu:not(.icon) {
|
||||
width: 11rem;
|
||||
}
|
||||
.ui.small.menu,
|
||||
.ui.small.menu .dropdown,
|
||||
.ui.small.menu .dropdown .menu > .item {
|
||||
font-size: 0.92857143rem;
|
||||
}
|
||||
.ui.small.vertical.menu:not(.icon) {
|
||||
width: 13rem;
|
||||
}
|
||||
|
||||
.ui .menu:not(.vertical) .item > .button.small {
|
||||
font-size: 0.92857143rem;
|
||||
}
|
||||
|
||||
.ui.segment .ui.tabular.menu .active.item,
|
||||
.ui.segment .ui.tabular.menu .active.item:hover {
|
||||
background: var(--color-box-body);
|
||||
}
|
|
@ -10,6 +10,10 @@
|
|||
top: 1.2em;
|
||||
}
|
||||
|
||||
.ui.modal > .close.inside {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.ui.modal > .close.icon[height="16"] {
|
||||
top: 0.7em; /* fomantic uses absolute layout, so if we have special icon size, it needs this trick to align vertically */
|
||||
color: var(--color-text-dark);
|
||||
|
|
|
@ -654,15 +654,15 @@ td .commit-summary {
|
|||
padding: 2px .5rem;
|
||||
}
|
||||
|
||||
.repository.view.issue .issue-title .index {
|
||||
.issue-title .index {
|
||||
color: var(--color-text-light-2);
|
||||
}
|
||||
|
||||
.repository.view.issue .issue-title .label {
|
||||
.issue-title .label {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.repository.view.issue .issue-title .edit-zone {
|
||||
.issue-title .edit-zone {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
|
@ -913,6 +913,9 @@ td .commit-summary {
|
|||
|
||||
.repository.view.issue .comment-list .ui.comments {
|
||||
max-width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 3px;
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .comment > .content > div:first-child {
|
||||
|
@ -928,6 +931,11 @@ td .commit-summary {
|
|||
.repository.view.issue .comment-list .comment .comment-container {
|
||||
border: 1px solid var(--color-secondary);
|
||||
border-radius: var(--border-radius);
|
||||
background: var(--color-box-body);
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .conversation-holder .comment .comment-container {
|
||||
border: none;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
|
@ -1042,30 +1050,6 @@ td .commit-summary {
|
|||
margin-left: 42px;
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .comment-code-cloud .segment.reactions {
|
||||
margin-top: 16px !important;
|
||||
margin-bottom: -8px !important;
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .comment-code-cloud .segment.reactions .ui.label {
|
||||
border: 1px solid;
|
||||
padding: 5px 8px !important;
|
||||
margin: 0 2px;
|
||||
border-radius: var(--border-radius);
|
||||
border-color: var(--color-secondary-dark-1) !important;
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .comment-code-cloud .segment.reactions .ui.label.basic.primary {
|
||||
background-color: var(--color-reaction-active-bg) !important;
|
||||
border-color: var(--color-primary-alpha-80) !important;
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .comment-code-cloud .segment.reactions .ui.label.basic.primary:hover {
|
||||
background-color: var(--color-reaction-hover-bg) !important;
|
||||
border-color: var(--color-primary-alpha-80) !important;
|
||||
}
|
||||
|
||||
.repository.view.issue .comment-list .comment-code-cloud button.comment-form-reply {
|
||||
margin: 0;
|
||||
}
|
||||
|
@ -1180,14 +1164,6 @@ td .commit-summary {
|
|||
font-size: 14px;
|
||||
}
|
||||
|
||||
.repository.compare.pull .title .issue-title {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.repository.compare.pull .title .issue-title .index {
|
||||
color: var(--color-text-light-2);
|
||||
}
|
||||
|
||||
.repository .ui.dropdown.filter > .menu {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
@ -1902,98 +1878,6 @@ td .commit-summary {
|
|||
border-bottom: 1px solid var(--color-warning-border);
|
||||
}
|
||||
|
||||
.repository .segment.reactions.dropdown .menu,
|
||||
.repository .select-reaction.dropdown .menu {
|
||||
right: 0 !important;
|
||||
left: auto !important;
|
||||
min-width: 170px;
|
||||
}
|
||||
|
||||
.repository .segment.reactions.dropdown .menu > .header,
|
||||
.repository .select-reaction.dropdown .menu > .header {
|
||||
margin: 0.75rem 0 0.5rem;
|
||||
}
|
||||
|
||||
.repository .segment.reactions.dropdown .menu > .item,
|
||||
.repository .select-reaction.dropdown .menu > .item {
|
||||
float: left;
|
||||
margin: 4px;
|
||||
font-size: 20px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
min-height: 0 !important;
|
||||
border-radius: var(--border-radius);
|
||||
display: flex !important;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.repository .segment.reactions {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
border: none !important;
|
||||
border-top: 1px solid var(--color-secondary) !important;
|
||||
width: 100% !important;
|
||||
max-width: 100% !important;
|
||||
margin: 0 !important;
|
||||
border-radius: 0 0 var(--border-radius) var(--border-radius);
|
||||
}
|
||||
|
||||
.repository .segment.reactions .ui.label {
|
||||
max-height: 40px;
|
||||
padding: 8px 16px !important;
|
||||
display: flex !important;
|
||||
align-items: center;
|
||||
border: 0;
|
||||
border-right: 1px solid;
|
||||
border-radius: 0;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
font-weight: var(--font-weight-normal);
|
||||
border-color: var(--color-secondary) !important;
|
||||
background: var(--color-reaction-bg);
|
||||
}
|
||||
|
||||
.repository .segment.reactions .ui.label:first-of-type {
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .ui.label.disabled {
|
||||
cursor: default;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .ui.label.basic.primary {
|
||||
color: var(--color-primary) !important;
|
||||
background-color: var(--color-reaction-active-bg) !important;
|
||||
border-color: var(--color-secondary-dark-1) !important;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .ui.label.basic:hover {
|
||||
background-color: var(--color-reaction-hover-bg) !important;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .reaction-count {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .select-reaction {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .select-reaction a {
|
||||
padding: 0 14px;
|
||||
}
|
||||
|
||||
.repository .segment.reactions .select-reaction:not(.active) a {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.repository .segment.reactions:hover .select-reaction a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.repository .ui.fluid.action.input .ui.search.action.input {
|
||||
flex: auto;
|
||||
}
|
||||
|
@ -2187,11 +2071,6 @@ td .commit-summary {
|
|||
padding: 10px 0 0;
|
||||
}
|
||||
|
||||
.ui.vertical.menu .header.item {
|
||||
font-size: 1.1em;
|
||||
background: var(--color-box-header);
|
||||
}
|
||||
|
||||
.comment:target .comment-container {
|
||||
border-color: var(--color-primary) !important;
|
||||
box-shadow: 0 0 0 3px var(--color-primary-alpha-30) !important;
|
||||
|
@ -2304,6 +2183,8 @@ td .commit-summary {
|
|||
.stats-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
margin: 6px 0;
|
||||
border-spacing: 2px;
|
||||
}
|
||||
|
||||
.stats-table .table-cell {
|
||||
|
@ -2311,7 +2192,17 @@ td .commit-summary {
|
|||
}
|
||||
|
||||
.stats-table .table-cell.tiny {
|
||||
height: 0.5em;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
.stats-table .table-cell:first-child {
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
.stats-table .table-cell:last-child {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.labels-list {
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
.bottom-reactions {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
margin: 0 1em 1em;
|
||||
}
|
||||
|
||||
.timeline-item .conversation-holder .bottom-reactions {
|
||||
margin: 1em 0 0 36px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.bottom-reactions .ui.label {
|
||||
padding: 5px 8px;
|
||||
font-weight: var(--font-weight-normal);
|
||||
}
|
||||
|
||||
.bottom-reactions .ui.label.primary {
|
||||
background-color: var(--color-reaction-active-bg) !important;
|
||||
}
|
||||
|
||||
.bottom-reactions .ui.label:hover {
|
||||
background-color: var(--color-reaction-hover-bg) !important;
|
||||
}
|
||||
|
||||
.bottom-reactions .ui.label.disabled {
|
||||
cursor: default;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.bottom-reactions .ui.label .reaction {
|
||||
font-size: 16px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.bottom-reactions .ui.label .reaction img {
|
||||
height: 16px;
|
||||
aspect-ratio: 1;
|
||||
}
|
||||
|
||||
.bottom-reactions .reaction-count {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.ui.dropdown.select-reaction .menu {
|
||||
min-width: 170px; /* item-outer-width * 4 */
|
||||
}
|
||||
|
||||
.ui.dropdown.select-reaction .menu > .item {
|
||||
float: left;
|
||||
margin: 4px;
|
||||
font-size: 20px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: var(--border-radius);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.bottom-reactions .select-reaction {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.bottom-reactions .select-reaction:not(.active) {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.bottom-reactions:hover .select-reaction {
|
||||
visibility: visible;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -22,11 +22,9 @@
|
|||
"admin": false,
|
||||
"components": [
|
||||
"api",
|
||||
"button",
|
||||
"dimmer",
|
||||
"dropdown",
|
||||
"form",
|
||||
"menu",
|
||||
"modal",
|
||||
"search",
|
||||
"tab"
|
||||
|
|
|
@ -138,7 +138,7 @@ export default {
|
|||
|
||||
<div v-if="!showActionForm" class="tw-flex">
|
||||
<!-- the merge button -->
|
||||
<div class="ui buttons merge-button" :class="[mergeForm.emptyCommit ? 'grey' : mergeForm.allOverridableChecksOk ? 'primary' : 'red']" @click="toggleActionForm(true)">
|
||||
<div class="ui buttons merge-button" :class="[mergeForm.emptyCommit ? '' : mergeForm.allOverridableChecksOk ? 'primary' : 'red']" @click="toggleActionForm(true)">
|
||||
<button class="ui button">
|
||||
<svg-icon name="octicon-git-merge"/>
|
||||
<span class="button-text">
|
||||
|
|
|
@ -1,38 +1,36 @@
|
|||
import $ from 'jquery';
|
||||
import {POST} from '../../modules/fetch.js';
|
||||
|
||||
export function initCompReactionSelector($parent) {
|
||||
$parent.find(`.select-reaction .item.reaction, .comment-reaction-button`).on('click', async function (e) {
|
||||
e.preventDefault();
|
||||
export function initCompReactionSelector() {
|
||||
for (const container of document.querySelectorAll('.issue-content, .diff-file-body')) {
|
||||
container.addEventListener('click', async (e) => {
|
||||
// there are 2 places for the "reaction" buttons, one is the top-right reaction menu, one is the bottom of the comment
|
||||
const target = e.target.closest('.comment-reaction-button');
|
||||
if (!target) return;
|
||||
e.preventDefault();
|
||||
|
||||
if (this.classList.contains('disabled')) return;
|
||||
if (target.classList.contains('disabled')) return;
|
||||
|
||||
const actionUrl = this.closest('[data-action-url]')?.getAttribute('data-action-url');
|
||||
const reactionContent = this.getAttribute('data-reaction-content');
|
||||
const hasReacted = this.closest('.ui.segment.reactions')?.querySelector(`a[data-reaction-content="${reactionContent}"]`)?.getAttribute('data-has-reacted') === 'true';
|
||||
const actionUrl = target.closest('[data-action-url]').getAttribute('data-action-url');
|
||||
const reactionContent = target.getAttribute('data-reaction-content');
|
||||
|
||||
const res = await POST(`${actionUrl}/${hasReacted ? 'unreact' : 'react'}`, {
|
||||
data: new URLSearchParams({content: reactionContent}),
|
||||
const commentContainer = target.closest('.comment-container');
|
||||
|
||||
const bottomReactions = commentContainer.querySelector('.bottom-reactions'); // may not exist if there is no reaction
|
||||
const bottomReactionBtn = bottomReactions?.querySelector(`a[data-reaction-content="${CSS.escape(reactionContent)}"]`);
|
||||
const hasReacted = bottomReactionBtn?.getAttribute('data-has-reacted') === 'true';
|
||||
|
||||
const res = await POST(`${actionUrl}/${hasReacted ? 'unreact' : 'react'}`, {
|
||||
data: new URLSearchParams({content: reactionContent}),
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
bottomReactions?.remove();
|
||||
if (data.html) {
|
||||
commentContainer.insertAdjacentHTML('beforeend', data.html);
|
||||
const bottomReactionsDropdowns = commentContainer.querySelectorAll('.bottom-reactions .dropdown.select-reaction');
|
||||
$(bottomReactionsDropdowns).dropdown(); // re-init the dropdown
|
||||
}
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
if (data && (data.html || data.empty)) {
|
||||
const $content = $(this).closest('.content');
|
||||
let $react = $content.find('.segment.reactions');
|
||||
if ((!data.empty || data.html === '') && $react.length > 0) {
|
||||
$react.remove();
|
||||
}
|
||||
if (!data.empty) {
|
||||
const $attachments = $content.find('.segment.bottom:first');
|
||||
$react = $(data.html);
|
||||
if ($attachments.length > 0) {
|
||||
$react.insertBefore($attachments);
|
||||
} else {
|
||||
$react.appendTo($content);
|
||||
}
|
||||
$react.find('.dropdown').dropdown();
|
||||
initCompReactionSelector($react);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,7 +87,6 @@ function initRepoDiffConversationForm() {
|
|||
el.classList.add('tw-invisible');
|
||||
}
|
||||
$newConversationHolder.find('.dropdown').dropdown();
|
||||
initCompReactionSelector($newConversationHolder);
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
showErrorToast(i18n.network_error);
|
||||
|
|
|
@ -449,12 +449,10 @@ export function initRepoPullRequestReview() {
|
|||
offset += $('.diff-detail-box').outerHeight() + $(diffHeader).outerHeight();
|
||||
}
|
||||
|
||||
document.getElementById(`show-outdated-${id}`).classList.add('tw-hidden');
|
||||
document.getElementById(`code-comments-${id}`).classList.remove('tw-hidden');
|
||||
document.getElementById(`code-preview-${id}`).classList.remove('tw-hidden');
|
||||
document.getElementById(`hide-outdated-${id}`).classList.remove('tw-hidden');
|
||||
hideElem(`#show-outdated-${id}`);
|
||||
showElem(`#code-comments-${id}, #code-preview-${id}, #hide-outdated-${id}`);
|
||||
// if the comment box is folded, expand it
|
||||
if (ancestorDiffBox.getAttribute('data-folded') === 'true') {
|
||||
if (ancestorDiffBox?.getAttribute('data-folded') === 'true') {
|
||||
setFileFolding(ancestorDiffBox, ancestorDiffBox.querySelector('.fold-file'), false);
|
||||
}
|
||||
|
||||
|
|
|
@ -393,7 +393,7 @@ export function initRepository() {
|
|||
initRepoIssueDependencyDelete();
|
||||
initRepoIssueCodeCommentCancel();
|
||||
initRepoPullRequestUpdate();
|
||||
initCompReactionSelector($(document));
|
||||
initCompReactionSelector();
|
||||
|
||||
initRepoPullRequestMergeForm();
|
||||
initRepoPullRequestCommitStatus();
|
||||
|
|
Loading…
Reference in New Issue