From 3b129aaa80e752dd2e0e007fc28c0db652af6b5c Mon Sep 17 00:00:00 2001 From: Jason Song Date: Wed, 16 Aug 2023 23:40:13 +0800 Subject: [PATCH 01/75] Explain SearchOptions and fix ToSearchOptions (#26542) Follow #26012 #26490. A detailed description has been added to the comment. --- modules/indexer/issues/db/options.go | 1 + modules/indexer/issues/dboptions.go | 40 +++++++++++------------- modules/indexer/issues/internal/model.go | 16 +++++++++- 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/modules/indexer/issues/db/options.go b/modules/indexer/issues/db/options.go index ebd672a6954a..0d6a8406d3b2 100644 --- a/modules/indexer/issues/db/options.go +++ b/modules/indexer/issues/db/options.go @@ -14,6 +14,7 @@ import ( ) func ToDBOptions(ctx context.Context, options *internal.SearchOptions) (*issue_model.IssuesOptions, error) { + // See the comment of issues_model.SearchOptions for the reason why we need to convert convertID := func(id *int64) int64 { if id == nil { return 0 diff --git a/modules/indexer/issues/dboptions.go b/modules/indexer/issues/dboptions.go index d0ef1c96b448..a3b18fdcd17b 100644 --- a/modules/indexer/issues/dboptions.go +++ b/modules/indexer/issues/dboptions.go @@ -17,10 +17,6 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp IsClosed: opts.IsClosed, } - if opts.ProjectID != 0 { - searchOpt.ProjectID = &opts.ProjectID - } - if len(opts.LabelIDs) == 1 && opts.LabelIDs[0] == 0 { searchOpt.NoLabelOnly = true } else { @@ -41,25 +37,27 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp searchOpt.MilestoneIDs = opts.MilestoneIDs } - if opts.AssigneeID > 0 { - searchOpt.AssigneeID = &opts.AssigneeID - } - if opts.PosterID > 0 { - searchOpt.PosterID = &opts.PosterID - } - if opts.MentionedID > 0 { - searchOpt.MentionID = &opts.MentionedID - } - if opts.ReviewedID > 0 { - searchOpt.ReviewedID = &opts.ReviewedID - } - if opts.ReviewRequestedID > 0 { - searchOpt.ReviewRequestedID = &opts.ReviewRequestedID - } - if opts.SubscriberID > 0 { - searchOpt.SubscriberID = &opts.SubscriberID + // See the comment of issues_model.SearchOptions for the reason why we need to convert + convertID := func(id int64) *int64 { + if id > 0 { + return &id + } + if id == db.NoConditionID { + var zero int64 + return &zero + } + return nil } + searchOpt.ProjectID = convertID(opts.ProjectID) + searchOpt.ProjectBoardID = convertID(opts.ProjectBoardID) + searchOpt.PosterID = convertID(opts.PosterID) + searchOpt.AssigneeID = convertID(opts.AssigneeID) + searchOpt.MentionID = convertID(opts.MentionedID) + searchOpt.ReviewedID = convertID(opts.ReviewedID) + searchOpt.ReviewRequestedID = convertID(opts.ReviewRequestedID) + searchOpt.SubscriberID = convertID(opts.SubscriberID) + if opts.UpdatedAfterUnix > 0 { searchOpt.UpdatedAfterUnix = &opts.UpdatedAfterUnix } diff --git a/modules/indexer/issues/internal/model.go b/modules/indexer/issues/internal/model.go index 31acd16bd44e..2de1e0e2bf20 100644 --- a/modules/indexer/issues/internal/model.go +++ b/modules/indexer/issues/internal/model.go @@ -56,7 +56,21 @@ type SearchResult struct { Hits []Match } -// SearchOptions represents search options +// SearchOptions represents search options. +// +// It has a slightly different design from database query options. +// In database query options, a field is never a pointer, so it could be confusing when it's zero value: +// Do you want to find data with a field value of 0, or do you not specify the field in the options? +// To avoid this confusion, db introduced db.NoConditionID(-1). +// So zero value means the field is not specified in the search options, and db.NoConditionID means "== 0" or "id NOT IN (SELECT id FROM ...)" +// It's still not ideal, it trapped developers many times. +// And sometimes -1 could be a valid value, like issue ID, negative numbers indicate exclusion. +// Since db.NoConditionID is for "db" (the package name is db), it makes sense not to use it in the indexer: +// Why do bleve/elasticsearch/meilisearch indexers need to know about db.NoConditionID? +// So in SearchOptions, we use pointer for fields which could be not specified, +// and always use the value to filter if it's not nil, even if it's zero or negative. +// It can handle almost all cases, if there is an exception, we can add a new field, like NoLabelOnly. +// Unfortunately, we still use db for the indexer and have to convert between db.NoConditionID and nil for legacy reasons. type SearchOptions struct { Keyword string // keyword to search From 376c0e25f74c967242b860a740fb4d509bae7ee9 Mon Sep 17 00:00:00 2001 From: silverwind Date: Thu, 17 Aug 2023 00:12:40 +0200 Subject: [PATCH 02/75] Remove fomantic transition module (#26469) Removes all dropdown and dimmer animations. Works everywhere as far as I can tell, but need to give this thorough testing. Removes around 70kb JS/CSS. Note, I'm not 100% sure regarding the various callbacks, those will need more investigation, but it appears to work nonetheless. Fixes: https://github.com/go-gitea/gitea/issues/15709 --- web_src/css/base.css | 29 +- web_src/css/modules/animations.css | 6 + web_src/css/themes/theme-arc-green.css | 1 + web_src/fomantic/build/semantic.css | 2063 ------------------------ web_src/fomantic/build/semantic.js | 1110 ------------- web_src/fomantic/semantic.json | 3 +- web_src/js/modules/fomantic.js | 37 + 7 files changed, 72 insertions(+), 3177 deletions(-) diff --git a/web_src/css/base.css b/web_src/css/base.css index bdc1234bc9a8..0ea0c8186410 100644 --- a/web_src/css/base.css +++ b/web_src/css/base.css @@ -225,7 +225,7 @@ --color-button: #fafafa; --color-code-bg: #ffffff; --color-code-sidebar-bg: #f5f5f5; - --color-shadow: #00000030; + --color-shadow: #00000026; --color-secondary-bg: #f4f4f4; --color-expand-button: #d8efff; --color-placeholder-text: #aaa; @@ -248,6 +248,7 @@ --color-accent: var(--color-primary-light-1); --color-small-accent: var(--color-primary-light-6); --color-active-line: #fffbdd; + --color-overlay-backdrop: #080808c0; accent-color: var(--color-accent); color-scheme: light; } @@ -705,6 +706,16 @@ a.label, background: var(--color-active) !important; } +/* styles from removed fomantic transition module */ +.hidden.transition { + visibility: hidden; + display: none; +} +.visible.transition { + display: block !important; + visibility: visible !important; +} + .ui.message { background: var(--color-box-body); color: var(--color-text); @@ -796,7 +807,7 @@ a.label, .ui.selection.active.dropdown:hover, .ui.selection.active.dropdown .menu, .ui.selection.active.dropdown:hover .menu { - border-color: var(--color-primary-light-2); + border-color: var(--color-primary); } .ui.selection.dropdown .menu { @@ -1186,6 +1197,20 @@ img.ui.avatar, box-shadow: none; } +.ui.dropdown .menu, +.ui.upward.dropdown > .menu, +.ui.menu .dropdown.item .menu, +.ui.selection.active.dropdown .menu, +.ui.upward.selection.dropdown .menu, +.ui.selection.active.dropdown:hover .menu, +.ui.upward.active.selection.dropdown:hover .menu { + box-shadow: 0 6px 18px var(--color-shadow); +} + +.ui.dimmer { + 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 */ diff --git a/web_src/css/modules/animations.css b/web_src/css/modules/animations.css index 876758d8bfb3..2f69117928e8 100644 --- a/web_src/css/modules/animations.css +++ b/web_src/css/modules/animations.css @@ -105,3 +105,9 @@ code.language-math.is-loading::after { .pulse { animation: pulse 2s linear; } + +.ui.modal { + animation-name: fadein; + animation-duration: 300ms; + animation-timing-function: ease-in-out; +} diff --git a/web_src/css/themes/theme-arc-green.css b/web_src/css/themes/theme-arc-green.css index 31752ccad6ce..088e92d12caa 100644 --- a/web_src/css/themes/theme-arc-green.css +++ b/web_src/css/themes/theme-arc-green.css @@ -233,6 +233,7 @@ --color-accent: var(--color-primary-light-1); --color-small-accent: var(--color-primary-light-5); --color-active-line: #534d1b; + --color-overlay-backdrop: #080808c0; accent-color: var(--color-accent); color-scheme: dark; } diff --git a/web_src/fomantic/build/semantic.css b/web_src/fomantic/build/semantic.css index c96c33798878..4004415fae3c 100644 --- a/web_src/fomantic/build/semantic.css +++ b/web_src/fomantic/build/semantic.css @@ -20973,2067 +20973,4 @@ span.ui.massive.text { /******************************* Theme Overrides -*******************************/ -/*! - * # Fomantic-UI - Transition - * http://github.com/fomantic/Fomantic-UI/ - * - * - * Released under the MIT license - * http://opensource.org/licenses/MIT - * - */ - -/******************************* - Transitions -*******************************/ - -.transition { - -webkit-animation-iteration-count: 1; - animation-iteration-count: 1; - -webkit-animation-duration: 300ms; - animation-duration: 300ms; - -webkit-animation-timing-function: ease; - animation-timing-function: ease; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} - -/******************************* - States -*******************************/ - -/* Animating */ - -.animating.transition { - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - visibility: visible !important; -} - -/* Loading */ - -.loading.transition { - position: absolute; - top: -99999px; - left: -99999px; -} - -/* Hidden */ - -.hidden.transition { - display: none; - visibility: hidden; -} - -/* Visible */ - -.visible.transition { - display: block !important; - visibility: visible !important; - /* backface-visibility: @backfaceVisibility; - transform: @use3DAcceleration;*/ -} - -/* Disabled */ - -.disabled.transition { - -webkit-animation-play-state: paused; - animation-play-state: paused; -} - -/******************************* - Variations -*******************************/ - -.looping.transition { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -/******************************* - Transitions -*******************************/ - -/* - Some transitions adapted from Animate CSS - https://github.com/daneden/animate.css - - Additional transitions adapted from Glide - by Nick Pettit - https://github.com/nickpettit/glide -*/ - -/*-------------- - Browse - ---------------*/ - -.transition.browse { - -webkit-animation-duration: 500ms; - animation-duration: 500ms; -} - -.transition.browse.in { - -webkit-animation-name: browseIn; - animation-name: browseIn; -} - -.transition.browse.out, -.transition.browse.left.out { - -webkit-animation-name: browseOutLeft; - animation-name: browseOutLeft; -} - -.transition.browse.right.out { - -webkit-animation-name: browseOutRight; - animation-name: browseOutRight; -} - -/* In */ - -@-webkit-keyframes browseIn { - 0% { - transform: scale(0.8) translateZ(0px); - z-index: -1; - } - - 10% { - transform: scale(0.8) translateZ(0px); - z-index: -1; - opacity: 0.7; - } - - 80% { - transform: scale(1.05) translateZ(0px); - opacity: 1; - z-index: 999; - } - - 100% { - transform: scale(1) translateZ(0px); - z-index: 999; - } -} - -@keyframes browseIn { - 0% { - transform: scale(0.8) translateZ(0px); - z-index: -1; - } - - 10% { - transform: scale(0.8) translateZ(0px); - z-index: -1; - opacity: 0.7; - } - - 80% { - transform: scale(1.05) translateZ(0px); - opacity: 1; - z-index: 999; - } - - 100% { - transform: scale(1) translateZ(0px); - z-index: 999; - } -} - -/* Out */ - -@-webkit-keyframes browseOutLeft { - 0% { - z-index: 999; - transform: translateX(0%) rotateY(0deg) rotateX(0deg); - } - - 50% { - z-index: -1; - transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px); - } - - 80% { - opacity: 1; - } - - 100% { - z-index: -1; - transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px); - opacity: 0; - } -} - -@keyframes browseOutLeft { - 0% { - z-index: 999; - transform: translateX(0%) rotateY(0deg) rotateX(0deg); - } - - 50% { - z-index: -1; - transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px); - } - - 80% { - opacity: 1; - } - - 100% { - z-index: -1; - transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px); - opacity: 0; - } -} - -@-webkit-keyframes browseOutRight { - 0% { - z-index: 999; - transform: translateX(0%) rotateY(0deg) rotateX(0deg); - } - - 50% { - z-index: 1; - transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px); - } - - 80% { - opacity: 1; - } - - 100% { - z-index: 1; - transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px); - opacity: 0; - } -} - -@keyframes browseOutRight { - 0% { - z-index: 999; - transform: translateX(0%) rotateY(0deg) rotateX(0deg); - } - - 50% { - z-index: 1; - transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px); - } - - 80% { - opacity: 1; - } - - 100% { - z-index: 1; - transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px); - opacity: 0; - } -} - -/*-------------- - Drop - ---------------*/ - -.drop.transition { - transform-origin: top center; - -webkit-animation-duration: 400ms; - animation-duration: 400ms; - -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1); - animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1); -} - -.drop.transition.in { - -webkit-animation-name: dropIn; - animation-name: dropIn; -} - -.drop.transition.out { - -webkit-animation-name: dropOut; - animation-name: dropOut; -} - -/* Drop */ - -@-webkit-keyframes dropIn { - 0% { - opacity: 0; - transform: scale(0); - } - - 100% { - opacity: 1; - transform: scale(1); - } -} - -@keyframes dropIn { - 0% { - opacity: 0; - transform: scale(0); - } - - 100% { - opacity: 1; - transform: scale(1); - } -} - -@-webkit-keyframes dropOut { - 0% { - opacity: 1; - transform: scale(1); - } - - 100% { - opacity: 0; - transform: scale(0); - } -} - -@keyframes dropOut { - 0% { - opacity: 1; - transform: scale(1); - } - - 100% { - opacity: 0; - transform: scale(0); - } -} - -/*-------------- - Fade - ---------------*/ - -.transition.fade.in { - -webkit-animation-name: fadeIn; - animation-name: fadeIn; -} - -.transition[class*="fade up"].in { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp; -} - -.transition[class*="fade down"].in { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown; -} - -.transition[class*="fade left"].in { - -webkit-animation-name: fadeInLeft; - animation-name: fadeInLeft; -} - -.transition[class*="fade right"].in { - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; -} - -.transition.fade.out { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} - -.transition[class*="fade up"].out { - -webkit-animation-name: fadeOutUp; - animation-name: fadeOutUp; -} - -.transition[class*="fade down"].out { - -webkit-animation-name: fadeOutDown; - animation-name: fadeOutDown; -} - -.transition[class*="fade left"].out { - -webkit-animation-name: fadeOutLeft; - animation-name: fadeOutLeft; -} - -.transition[class*="fade right"].out { - -webkit-animation-name: fadeOutRight; - animation-name: fadeOutRight; -} - -/* In */ - -@-webkit-keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -@keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -@-webkit-keyframes fadeInUp { - 0% { - opacity: 0; - transform: translateY(10%); - } - - 100% { - opacity: 1; - transform: translateY(0%); - } -} - -@keyframes fadeInUp { - 0% { - opacity: 0; - transform: translateY(10%); - } - - 100% { - opacity: 1; - transform: translateY(0%); - } -} - -@-webkit-keyframes fadeInDown { - 0% { - opacity: 0; - transform: translateY(-10%); - } - - 100% { - opacity: 1; - transform: translateY(0%); - } -} - -@keyframes fadeInDown { - 0% { - opacity: 0; - transform: translateY(-10%); - } - - 100% { - opacity: 1; - transform: translateY(0%); - } -} - -@-webkit-keyframes fadeInLeft { - 0% { - opacity: 0; - transform: translateX(10%); - } - - 100% { - opacity: 1; - transform: translateX(0%); - } -} - -@keyframes fadeInLeft { - 0% { - opacity: 0; - transform: translateX(10%); - } - - 100% { - opacity: 1; - transform: translateX(0%); - } -} - -@-webkit-keyframes fadeInRight { - 0% { - opacity: 0; - transform: translateX(-10%); - } - - 100% { - opacity: 1; - transform: translateX(0%); - } -} - -@keyframes fadeInRight { - 0% { - opacity: 0; - transform: translateX(-10%); - } - - 100% { - opacity: 1; - transform: translateX(0%); - } -} - -/* Out */ - -@-webkit-keyframes fadeOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -@keyframes fadeOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -@-webkit-keyframes fadeOutUp { - 0% { - opacity: 1; - transform: translateY(0%); - } - - 100% { - opacity: 0; - transform: translateY(5%); - } -} - -@keyframes fadeOutUp { - 0% { - opacity: 1; - transform: translateY(0%); - } - - 100% { - opacity: 0; - transform: translateY(5%); - } -} - -@-webkit-keyframes fadeOutDown { - 0% { - opacity: 1; - transform: translateY(0%); - } - - 100% { - opacity: 0; - transform: translateY(-5%); - } -} - -@keyframes fadeOutDown { - 0% { - opacity: 1; - transform: translateY(0%); - } - - 100% { - opacity: 0; - transform: translateY(-5%); - } -} - -@-webkit-keyframes fadeOutLeft { - 0% { - opacity: 1; - transform: translateX(0%); - } - - 100% { - opacity: 0; - transform: translateX(5%); - } -} - -@keyframes fadeOutLeft { - 0% { - opacity: 1; - transform: translateX(0%); - } - - 100% { - opacity: 0; - transform: translateX(5%); - } -} - -@-webkit-keyframes fadeOutRight { - 0% { - opacity: 1; - transform: translateX(0%); - } - - 100% { - opacity: 0; - transform: translateX(-5%); - } -} - -@keyframes fadeOutRight { - 0% { - opacity: 1; - transform: translateX(0%); - } - - 100% { - opacity: 0; - transform: translateX(-5%); - } -} - -/*-------------- - Flips - ---------------*/ - -.flip.transition.in, -.flip.transition.out { - -webkit-animation-duration: 600ms; - animation-duration: 600ms; -} - -.horizontal.flip.transition.in { - -webkit-animation-name: horizontalFlipIn; - animation-name: horizontalFlipIn; -} - -.horizontal.flip.transition.out { - -webkit-animation-name: horizontalFlipOut; - animation-name: horizontalFlipOut; -} - -.vertical.flip.transition.in { - -webkit-animation-name: verticalFlipIn; - animation-name: verticalFlipIn; -} - -.vertical.flip.transition.out { - -webkit-animation-name: verticalFlipOut; - animation-name: verticalFlipOut; -} - -/* In */ - -@-webkit-keyframes horizontalFlipIn { - 0% { - transform: perspective(2000px) rotateY(-90deg); - opacity: 0; - } - - 100% { - transform: perspective(2000px) rotateY(0deg); - opacity: 1; - } -} - -@keyframes horizontalFlipIn { - 0% { - transform: perspective(2000px) rotateY(-90deg); - opacity: 0; - } - - 100% { - transform: perspective(2000px) rotateY(0deg); - opacity: 1; - } -} - -@-webkit-keyframes verticalFlipIn { - 0% { - transform: perspective(2000px) rotateX(-90deg); - opacity: 0; - } - - 100% { - transform: perspective(2000px) rotateX(0deg); - opacity: 1; - } -} - -@keyframes verticalFlipIn { - 0% { - transform: perspective(2000px) rotateX(-90deg); - opacity: 0; - } - - 100% { - transform: perspective(2000px) rotateX(0deg); - opacity: 1; - } -} - -/* Out */ - -@-webkit-keyframes horizontalFlipOut { - 0% { - transform: perspective(2000px) rotateY(0deg); - opacity: 1; - } - - 100% { - transform: perspective(2000px) rotateY(90deg); - opacity: 0; - } -} - -@keyframes horizontalFlipOut { - 0% { - transform: perspective(2000px) rotateY(0deg); - opacity: 1; - } - - 100% { - transform: perspective(2000px) rotateY(90deg); - opacity: 0; - } -} - -@-webkit-keyframes verticalFlipOut { - 0% { - transform: perspective(2000px) rotateX(0deg); - opacity: 1; - } - - 100% { - transform: perspective(2000px) rotateX(-90deg); - opacity: 0; - } -} - -@keyframes verticalFlipOut { - 0% { - transform: perspective(2000px) rotateX(0deg); - opacity: 1; - } - - 100% { - transform: perspective(2000px) rotateX(-90deg); - opacity: 0; - } -} - -/*-------------- - Scale - ---------------*/ - -.scale.transition.in { - -webkit-animation-name: scaleIn; - animation-name: scaleIn; -} - -.scale.transition.out { - -webkit-animation-name: scaleOut; - animation-name: scaleOut; -} - -@-webkit-keyframes scaleIn { - 0% { - opacity: 0; - transform: scale(0.8); - } - - 100% { - opacity: 1; - transform: scale(1); - } -} - -@keyframes scaleIn { - 0% { - opacity: 0; - transform: scale(0.8); - } - - 100% { - opacity: 1; - transform: scale(1); - } -} - -/* Out */ - -@-webkit-keyframes scaleOut { - 0% { - opacity: 1; - transform: scale(1); - } - - 100% { - opacity: 0; - transform: scale(0.9); - } -} - -@keyframes scaleOut { - 0% { - opacity: 1; - transform: scale(1); - } - - 100% { - opacity: 0; - transform: scale(0.9); - } -} - -/*-------------- - Fly - ---------------*/ - -/* Inward */ - -.transition.fly { - -webkit-animation-duration: 0.6s; - animation-duration: 0.6s; - transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); -} - -.transition.fly.in { - -webkit-animation-name: flyIn; - animation-name: flyIn; -} - -.transition[class*="fly up"].in { - -webkit-animation-name: flyInUp; - animation-name: flyInUp; -} - -.transition[class*="fly down"].in { - -webkit-animation-name: flyInDown; - animation-name: flyInDown; -} - -.transition[class*="fly left"].in { - -webkit-animation-name: flyInLeft; - animation-name: flyInLeft; -} - -.transition[class*="fly right"].in { - -webkit-animation-name: flyInRight; - animation-name: flyInRight; -} - -/* Outward */ - -.transition.fly.out { - -webkit-animation-name: flyOut; - animation-name: flyOut; -} - -.transition[class*="fly up"].out { - -webkit-animation-name: flyOutUp; - animation-name: flyOutUp; -} - -.transition[class*="fly down"].out { - -webkit-animation-name: flyOutDown; - animation-name: flyOutDown; -} - -.transition[class*="fly left"].out { - -webkit-animation-name: flyOutLeft; - animation-name: flyOutLeft; -} - -.transition[class*="fly right"].out { - -webkit-animation-name: flyOutRight; - animation-name: flyOutRight; -} - -/* In */ - -@-webkit-keyframes flyIn { - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); - } - - 20% { - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - transform: scale3d(0.9, 0.9, 0.9); - } - - 60% { - opacity: 1; - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - transform: scale3d(0.97, 0.97, 0.97); - } - - 100% { - opacity: 1; - transform: scale3d(1, 1, 1); - } -} - -@keyframes flyIn { - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); - } - - 20% { - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - transform: scale3d(0.9, 0.9, 0.9); - } - - 60% { - opacity: 1; - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - transform: scale3d(0.97, 0.97, 0.97); - } - - 100% { - opacity: 1; - transform: scale3d(1, 1, 1); - } -} - -@-webkit-keyframes flyInUp { - 0% { - opacity: 0; - transform: translate3d(0, 1500px, 0); - } - - 60% { - opacity: 1; - transform: translate3d(0, -20px, 0); - } - - 75% { - transform: translate3d(0, 10px, 0); - } - - 90% { - transform: translate3d(0, -5px, 0); - } - - 100% { - transform: translate3d(0, 0, 0); - } -} - -@keyframes flyInUp { - 0% { - opacity: 0; - transform: translate3d(0, 1500px, 0); - } - - 60% { - opacity: 1; - transform: translate3d(0, -20px, 0); - } - - 75% { - transform: translate3d(0, 10px, 0); - } - - 90% { - transform: translate3d(0, -5px, 0); - } - - 100% { - transform: translate3d(0, 0, 0); - } -} - -@-webkit-keyframes flyInDown { - 0% { - opacity: 0; - transform: translate3d(0, -1500px, 0); - } - - 60% { - opacity: 1; - transform: translate3d(0, 25px, 0); - } - - 75% { - transform: translate3d(0, -10px, 0); - } - - 90% { - transform: translate3d(0, 5px, 0); - } - - 100% { - transform: none; - } -} - -@keyframes flyInDown { - 0% { - opacity: 0; - transform: translate3d(0, -1500px, 0); - } - - 60% { - opacity: 1; - transform: translate3d(0, 25px, 0); - } - - 75% { - transform: translate3d(0, -10px, 0); - } - - 90% { - transform: translate3d(0, 5px, 0); - } - - 100% { - transform: none; - } -} - -@-webkit-keyframes flyInLeft { - 0% { - opacity: 0; - transform: translate3d(1500px, 0, 0); - } - - 60% { - opacity: 1; - transform: translate3d(-25px, 0, 0); - } - - 75% { - transform: translate3d(10px, 0, 0); - } - - 90% { - transform: translate3d(-5px, 0, 0); - } - - 100% { - transform: none; - } -} - -@keyframes flyInLeft { - 0% { - opacity: 0; - transform: translate3d(1500px, 0, 0); - } - - 60% { - opacity: 1; - transform: translate3d(-25px, 0, 0); - } - - 75% { - transform: translate3d(10px, 0, 0); - } - - 90% { - transform: translate3d(-5px, 0, 0); - } - - 100% { - transform: none; - } -} - -@-webkit-keyframes flyInRight { - 0% { - opacity: 0; - transform: translate3d(-1500px, 0, 0); - } - - 60% { - opacity: 1; - transform: translate3d(25px, 0, 0); - } - - 75% { - transform: translate3d(-10px, 0, 0); - } - - 90% { - transform: translate3d(5px, 0, 0); - } - - 100% { - transform: none; - } -} - -@keyframes flyInRight { - 0% { - opacity: 0; - transform: translate3d(-1500px, 0, 0); - } - - 60% { - opacity: 1; - transform: translate3d(25px, 0, 0); - } - - 75% { - transform: translate3d(-10px, 0, 0); - } - - 90% { - transform: translate3d(5px, 0, 0); - } - - 100% { - transform: none; - } -} - -/* Out */ - -@-webkit-keyframes flyOut { - 20% { - transform: scale3d(0.9, 0.9, 0.9); - } - - 50%, 55% { - opacity: 1; - transform: scale3d(1.1, 1.1, 1.1); - } - - 100% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); - } -} - -@keyframes flyOut { - 20% { - transform: scale3d(0.9, 0.9, 0.9); - } - - 50%, 55% { - opacity: 1; - transform: scale3d(1.1, 1.1, 1.1); - } - - 100% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); - } -} - -@-webkit-keyframes flyOutUp { - 20% { - transform: translate3d(0, 10px, 0); - } - - 40%, 45% { - opacity: 1; - transform: translate3d(0, -20px, 0); - } - - 100% { - opacity: 0; - transform: translate3d(0, 2000px, 0); - } -} - -@keyframes flyOutUp { - 20% { - transform: translate3d(0, 10px, 0); - } - - 40%, 45% { - opacity: 1; - transform: translate3d(0, -20px, 0); - } - - 100% { - opacity: 0; - transform: translate3d(0, 2000px, 0); - } -} - -@-webkit-keyframes flyOutDown { - 20% { - transform: translate3d(0, -10px, 0); - } - - 40%, 45% { - opacity: 1; - transform: translate3d(0, 20px, 0); - } - - 100% { - opacity: 0; - transform: translate3d(0, -2000px, 0); - } -} - -@keyframes flyOutDown { - 20% { - transform: translate3d(0, -10px, 0); - } - - 40%, 45% { - opacity: 1; - transform: translate3d(0, 20px, 0); - } - - 100% { - opacity: 0; - transform: translate3d(0, -2000px, 0); - } -} - -@-webkit-keyframes flyOutRight { - 20% { - opacity: 1; - transform: translate3d(20px, 0, 0); - } - - 100% { - opacity: 0; - transform: translate3d(-2000px, 0, 0); - } -} - -@keyframes flyOutRight { - 20% { - opacity: 1; - transform: translate3d(20px, 0, 0); - } - - 100% { - opacity: 0; - transform: translate3d(-2000px, 0, 0); - } -} - -@-webkit-keyframes flyOutLeft { - 20% { - opacity: 1; - transform: translate3d(-20px, 0, 0); - } - - 100% { - opacity: 0; - transform: translate3d(2000px, 0, 0); - } -} - -@keyframes flyOutLeft { - 20% { - opacity: 1; - transform: translate3d(-20px, 0, 0); - } - - 100% { - opacity: 0; - transform: translate3d(2000px, 0, 0); - } -} - -/*-------------- - Slide - ---------------*/ - -.transition.slide.in, -.transition[class*="slide down"].in { - -webkit-animation-name: slideInY; - animation-name: slideInY; - transform-origin: top center; -} - -.transition[class*="slide up"].in { - -webkit-animation-name: slideInY; - animation-name: slideInY; - transform-origin: bottom center; -} - -.transition[class*="slide left"].in { - -webkit-animation-name: slideInX; - animation-name: slideInX; - transform-origin: right center; -} - -.transition[class*="slide right"].in { - -webkit-animation-name: slideInX; - animation-name: slideInX; - transform-origin: left center; -} - -.transition.slide.out, -.transition[class*="slide down"].out { - -webkit-animation-name: slideOutY; - animation-name: slideOutY; - transform-origin: top center; -} - -.transition[class*="slide up"].out { - -webkit-animation-name: slideOutY; - animation-name: slideOutY; - transform-origin: bottom center; -} - -.transition[class*="slide left"].out { - -webkit-animation-name: slideOutX; - animation-name: slideOutX; - transform-origin: right center; -} - -.transition[class*="slide right"].out { - -webkit-animation-name: slideOutX; - animation-name: slideOutX; - transform-origin: left center; -} - -/* In */ - -@-webkit-keyframes slideInY { - 0% { - opacity: 0; - transform: scaleY(0); - } - - 100% { - opacity: 1; - transform: scaleY(1); - } -} - -@keyframes slideInY { - 0% { - opacity: 0; - transform: scaleY(0); - } - - 100% { - opacity: 1; - transform: scaleY(1); - } -} - -@-webkit-keyframes slideInX { - 0% { - opacity: 0; - transform: scaleX(0); - } - - 100% { - opacity: 1; - transform: scaleX(1); - } -} - -@keyframes slideInX { - 0% { - opacity: 0; - transform: scaleX(0); - } - - 100% { - opacity: 1; - transform: scaleX(1); - } -} - -/* Out */ - -@-webkit-keyframes slideOutY { - 0% { - opacity: 1; - transform: scaleY(1); - } - - 100% { - opacity: 0; - transform: scaleY(0); - } -} - -@keyframes slideOutY { - 0% { - opacity: 1; - transform: scaleY(1); - } - - 100% { - opacity: 0; - transform: scaleY(0); - } -} - -@-webkit-keyframes slideOutX { - 0% { - opacity: 1; - transform: scaleX(1); - } - - 100% { - opacity: 0; - transform: scaleX(0); - } -} - -@keyframes slideOutX { - 0% { - opacity: 1; - transform: scaleX(1); - } - - 100% { - opacity: 0; - transform: scaleX(0); - } -} - -/*-------------- - Swing - ---------------*/ - -.transition.swing { - -webkit-animation-duration: 800ms; - animation-duration: 800ms; -} - -.transition[class*="swing down"].in { - -webkit-animation-name: swingInX; - animation-name: swingInX; - transform-origin: top center; -} - -.transition[class*="swing up"].in { - -webkit-animation-name: swingInX; - animation-name: swingInX; - transform-origin: bottom center; -} - -.transition[class*="swing left"].in { - -webkit-animation-name: swingInY; - animation-name: swingInY; - transform-origin: right center; -} - -.transition[class*="swing right"].in { - -webkit-animation-name: swingInY; - animation-name: swingInY; - transform-origin: left center; -} - -.transition.swing.out, -.transition[class*="swing down"].out { - -webkit-animation-name: swingOutX; - animation-name: swingOutX; - transform-origin: top center; -} - -.transition[class*="swing up"].out { - -webkit-animation-name: swingOutX; - animation-name: swingOutX; - transform-origin: bottom center; -} - -.transition[class*="swing left"].out { - -webkit-animation-name: swingOutY; - animation-name: swingOutY; - transform-origin: right center; -} - -.transition[class*="swing right"].out { - -webkit-animation-name: swingOutY; - animation-name: swingOutY; - transform-origin: left center; -} - -/* In */ - -@-webkit-keyframes swingInX { - 0% { - transform: perspective(1000px) rotateX(90deg); - opacity: 0; - } - - 40% { - transform: perspective(1000px) rotateX(-30deg); - opacity: 1; - } - - 60% { - transform: perspective(1000px) rotateX(15deg); - } - - 80% { - transform: perspective(1000px) rotateX(-7.5deg); - } - - 100% { - transform: perspective(1000px) rotateX(0deg); - } -} - -@keyframes swingInX { - 0% { - transform: perspective(1000px) rotateX(90deg); - opacity: 0; - } - - 40% { - transform: perspective(1000px) rotateX(-30deg); - opacity: 1; - } - - 60% { - transform: perspective(1000px) rotateX(15deg); - } - - 80% { - transform: perspective(1000px) rotateX(-7.5deg); - } - - 100% { - transform: perspective(1000px) rotateX(0deg); - } -} - -@-webkit-keyframes swingInY { - 0% { - transform: perspective(1000px) rotateY(-90deg); - opacity: 0; - } - - 40% { - transform: perspective(1000px) rotateY(30deg); - opacity: 1; - } - - 60% { - transform: perspective(1000px) rotateY(-17.5deg); - } - - 80% { - transform: perspective(1000px) rotateY(7.5deg); - } - - 100% { - transform: perspective(1000px) rotateY(0deg); - } -} - -@keyframes swingInY { - 0% { - transform: perspective(1000px) rotateY(-90deg); - opacity: 0; - } - - 40% { - transform: perspective(1000px) rotateY(30deg); - opacity: 1; - } - - 60% { - transform: perspective(1000px) rotateY(-17.5deg); - } - - 80% { - transform: perspective(1000px) rotateY(7.5deg); - } - - 100% { - transform: perspective(1000px) rotateY(0deg); - } -} - -/* Out */ - -@-webkit-keyframes swingOutX { - 0% { - transform: perspective(1000px) rotateX(0deg); - } - - 40% { - transform: perspective(1000px) rotateX(-7.5deg); - } - - 60% { - transform: perspective(1000px) rotateX(17.5deg); - } - - 80% { - transform: perspective(1000px) rotateX(-30deg); - opacity: 1; - } - - 100% { - transform: perspective(1000px) rotateX(90deg); - opacity: 0; - } -} - -@keyframes swingOutX { - 0% { - transform: perspective(1000px) rotateX(0deg); - } - - 40% { - transform: perspective(1000px) rotateX(-7.5deg); - } - - 60% { - transform: perspective(1000px) rotateX(17.5deg); - } - - 80% { - transform: perspective(1000px) rotateX(-30deg); - opacity: 1; - } - - 100% { - transform: perspective(1000px) rotateX(90deg); - opacity: 0; - } -} - -@-webkit-keyframes swingOutY { - 0% { - transform: perspective(1000px) rotateY(0deg); - } - - 40% { - transform: perspective(1000px) rotateY(7.5deg); - } - - 60% { - transform: perspective(1000px) rotateY(-10deg); - } - - 80% { - transform: perspective(1000px) rotateY(30deg); - opacity: 1; - } - - 100% { - transform: perspective(1000px) rotateY(-90deg); - opacity: 0; - } -} - -@keyframes swingOutY { - 0% { - transform: perspective(1000px) rotateY(0deg); - } - - 40% { - transform: perspective(1000px) rotateY(7.5deg); - } - - 60% { - transform: perspective(1000px) rotateY(-10deg); - } - - 80% { - transform: perspective(1000px) rotateY(30deg); - opacity: 1; - } - - 100% { - transform: perspective(1000px) rotateY(-90deg); - opacity: 0; - } -} - -/*-------------- - Zoom - ---------------*/ - -.transition.zoom.in { - -webkit-animation-name: zoomIn; - animation-name: zoomIn; -} - -.transition.zoom.out { - -webkit-animation-name: zoomOut; - animation-name: zoomOut; -} - -@-webkit-keyframes zoomIn { - 0% { - opacity: 1; - transform: scale(0); - } - - 100% { - opacity: 1; - transform: scale(1); - } -} - -@keyframes zoomIn { - 0% { - opacity: 1; - transform: scale(0); - } - - 100% { - opacity: 1; - transform: scale(1); - } -} - -@-webkit-keyframes zoomOut { - 0% { - opacity: 1; - transform: scale(1); - } - - 100% { - opacity: 1; - transform: scale(0); - } -} - -@keyframes zoomOut { - 0% { - opacity: 1; - transform: scale(1); - } - - 100% { - opacity: 1; - transform: scale(0); - } -} - -/******************************* - Static Animations -*******************************/ - -/*-------------- - Emphasis ----------------*/ - -.flash.transition { - -webkit-animation-duration: 750ms; - animation-duration: 750ms; - -webkit-animation-name: flash; - animation-name: flash; -} - -.shake.transition { - -webkit-animation-duration: 750ms; - animation-duration: 750ms; - -webkit-animation-name: shake; - animation-name: shake; -} - -.bounce.transition { - -webkit-animation-duration: 750ms; - animation-duration: 750ms; - -webkit-animation-name: bounce; - animation-name: bounce; -} - -.tada.transition { - -webkit-animation-duration: 750ms; - animation-duration: 750ms; - -webkit-animation-name: tada; - animation-name: tada; -} - -.pulse.transition { - -webkit-animation-duration: 500ms; - animation-duration: 500ms; - -webkit-animation-name: pulse; - animation-name: pulse; -} - -.jiggle.transition { - -webkit-animation-duration: 750ms; - animation-duration: 750ms; - -webkit-animation-name: jiggle; - animation-name: jiggle; -} - -.transition.glow { - -webkit-animation-duration: 2000ms; - animation-duration: 2000ms; - -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); -} - -.transition.glow { - -webkit-animation-name: glow; - animation-name: glow; -} - -/* Flash */ - -@-webkit-keyframes flash { - 0%, 50%, 100% { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - -@keyframes flash { - 0%, 50%, 100% { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - -/* Shake */ - -@-webkit-keyframes shake { - 0%, 100% { - transform: translateX(0); - } - - 10%, 30%, 50%, 70%, 90% { - transform: translateX(-10px); - } - - 20%, 40%, 60%, 80% { - transform: translateX(10px); - } -} - -@keyframes shake { - 0%, 100% { - transform: translateX(0); - } - - 10%, 30%, 50%, 70%, 90% { - transform: translateX(-10px); - } - - 20%, 40%, 60%, 80% { - transform: translateX(10px); - } -} - -/* Bounce */ - -@-webkit-keyframes bounce { - 0%, 20%, 50%, 80%, 100% { - transform: translateY(0); - } - - 40% { - transform: translateY(-30px); - } - - 60% { - transform: translateY(-15px); - } -} - -@keyframes bounce { - 0%, 20%, 50%, 80%, 100% { - transform: translateY(0); - } - - 40% { - transform: translateY(-30px); - } - - 60% { - transform: translateY(-15px); - } -} - -/* Tada */ - -@-webkit-keyframes tada { - 0% { - transform: scale(1); - } - - 10%, 20% { - transform: scale(0.9) rotate(-3deg); - } - - 30%, 50%, 70%, 90% { - transform: scale(1.1) rotate(3deg); - } - - 40%, 60%, 80% { - transform: scale(1.1) rotate(-3deg); - } - - 100% { - transform: scale(1) rotate(0); - } -} - -@keyframes tada { - 0% { - transform: scale(1); - } - - 10%, 20% { - transform: scale(0.9) rotate(-3deg); - } - - 30%, 50%, 70%, 90% { - transform: scale(1.1) rotate(3deg); - } - - 40%, 60%, 80% { - transform: scale(1.1) rotate(-3deg); - } - - 100% { - transform: scale(1) rotate(0); - } -} - -/* Pulse */ - -@-webkit-keyframes pulse { - 0% { - transform: scale(1); - opacity: 1; - } - - 50% { - transform: scale(0.9); - opacity: 0.7; - } - - 100% { - transform: scale(1); - opacity: 1; - } -} - -@keyframes pulse { - 0% { - transform: scale(1); - opacity: 1; - } - - 50% { - transform: scale(0.9); - opacity: 0.7; - } - - 100% { - transform: scale(1); - opacity: 1; - } -} - -/* Jiggle */ - -@-webkit-keyframes jiggle { - 0% { - transform: scale3d(1, 1, 1); - } - - 30% { - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - transform: scale3d(0.95, 1.05, 1); - } - - 75% { - transform: scale3d(1.05, 0.95, 1); - } - - 100% { - transform: scale3d(1, 1, 1); - } -} - -@keyframes jiggle { - 0% { - transform: scale3d(1, 1, 1); - } - - 30% { - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - transform: scale3d(0.95, 1.05, 1); - } - - 75% { - transform: scale3d(1.05, 0.95, 1); - } - - 100% { - transform: scale3d(1, 1, 1); - } -} - -/* Glow */ - -@-webkit-keyframes glow { - 0% { - background-color: #FCFCFD; - } - - 30% { - background-color: #FFF6CD; - } - - 100% { - background-color: #FCFCFD; - } -} - -@keyframes glow { - 0% { - background-color: #FCFCFD; - } - - 30% { - background-color: #FFF6CD; - } - - 100% { - background-color: #FCFCFD; - } -} - -/******************************* - Site Overrides *******************************/ \ No newline at end of file diff --git a/web_src/fomantic/build/semantic.js b/web_src/fomantic/build/semantic.js index 6304c6faf49e..2a05d94d72a8 100644 --- a/web_src/fomantic/build/semantic.js +++ b/web_src/fomantic/build/semantic.js @@ -13360,1114 +13360,4 @@ $.fn.tab.settings = { }; -})( jQuery, window, document ); - -/*! - * # Fomantic-UI - Transition - * http://github.com/fomantic/Fomantic-UI/ - * - * - * Released under the MIT license - * http://opensource.org/licenses/MIT - * - */ - -;(function ($, window, document, undefined) { - -'use strict'; - -$.isFunction = $.isFunction || function(obj) { - return typeof obj === "function" && typeof obj.nodeType !== "number"; -}; - -window = (typeof window != 'undefined' && window.Math == Math) - ? window - : (typeof self != 'undefined' && self.Math == Math) - ? self - : Function('return this')() -; - -$.fn.transition = function() { - var - $allModules = $(this), - moduleSelector = $allModules.selector || '', - - time = new Date().getTime(), - performance = [], - - moduleArguments = arguments, - query = moduleArguments[0], - queryArguments = [].slice.call(arguments, 1), - methodInvoked = (typeof query === 'string'), - - returnedValue - ; - $allModules - .each(function(index) { - var - $module = $(this), - element = this, - - // set at run time - settings, - instance, - - error, - className, - metadata, - animationEnd, - - moduleNamespace, - eventNamespace, - module - ; - - module = { - - initialize: function() { - - // get full settings - settings = module.get.settings.apply(element, moduleArguments); - - // shorthand - className = settings.className; - error = settings.error; - metadata = settings.metadata; - - // define namespace - eventNamespace = '.' + settings.namespace; - moduleNamespace = 'module-' + settings.namespace; - instance = $module.data(moduleNamespace) || module; - - // get vendor specific events - animationEnd = module.get.animationEndEvent(); - - if(methodInvoked) { - methodInvoked = module.invoke(query); - } - - // method not invoked, lets run an animation - if(methodInvoked === false) { - module.verbose('Converted arguments into settings object', settings); - if(settings.interval) { - module.delay(settings.animate); - } - else { - module.animate(); - } - module.instantiate(); - } - }, - - instantiate: function() { - module.verbose('Storing instance of module', module); - instance = module; - $module - .data(moduleNamespace, instance) - ; - }, - - destroy: function() { - module.verbose('Destroying previous module for', element); - $module - .removeData(moduleNamespace) - ; - }, - - refresh: function() { - module.verbose('Refreshing display type on next animation'); - delete module.displayType; - }, - - forceRepaint: function() { - module.verbose('Forcing element repaint'); - var - $parentElement = $module.parent(), - $nextElement = $module.next() - ; - if($nextElement.length === 0) { - $module.detach().appendTo($parentElement); - } - else { - $module.detach().insertBefore($nextElement); - } - }, - - repaint: function() { - module.verbose('Repainting element'); - var - fakeAssignment = element.offsetWidth - ; - }, - - delay: function(interval) { - var - direction = module.get.animationDirection(), - shouldReverse, - delay - ; - if(!direction) { - direction = module.can.transition() - ? module.get.direction() - : 'static' - ; - } - interval = (interval !== undefined) - ? interval - : settings.interval - ; - shouldReverse = (settings.reverse == 'auto' && direction == className.outward); - delay = (shouldReverse || settings.reverse == true) - ? ($allModules.length - index) * settings.interval - : index * settings.interval - ; - module.debug('Delaying animation by', delay); - setTimeout(module.animate, delay); - }, - - animate: function(overrideSettings) { - settings = overrideSettings || settings; - if(!module.is.supported()) { - module.error(error.support); - return false; - } - module.debug('Preparing animation', settings.animation); - if(module.is.animating()) { - if(settings.queue) { - if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) { - module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation); - } - else { - module.queue(settings.animation); - } - return false; - } - else if(!settings.allowRepeats && module.is.occurring()) { - module.debug('Animation is already occurring, will not execute repeated animation', settings.animation); - return false; - } - else { - module.debug('New animation started, completing previous early', settings.animation); - instance.complete(); - } - } - if( module.can.animate() ) { - module.set.animating(settings.animation); - } - else { - module.error(error.noAnimation, settings.animation, element); - } - }, - - reset: function() { - module.debug('Resetting animation to beginning conditions'); - module.remove.animationCallbacks(); - module.restore.conditions(); - module.remove.animating(); - }, - - queue: function(animation) { - module.debug('Queueing animation of', animation); - module.queuing = true; - $module - .one(animationEnd + '.queue' + eventNamespace, function() { - module.queuing = false; - module.repaint(); - module.animate.apply(this, settings); - }) - ; - }, - - complete: function (event) { - if(event && event.target === element) { - event.stopPropagation(); - } - module.debug('Animation complete', settings.animation); - module.remove.completeCallback(); - module.remove.failSafe(); - if(!module.is.looping()) { - if( module.is.outward() ) { - module.verbose('Animation is outward, hiding element'); - module.restore.conditions(); - module.hide(); - } - else if( module.is.inward() ) { - module.verbose('Animation is outward, showing element'); - module.restore.conditions(); - module.show(); - } - else { - module.verbose('Static animation completed'); - module.restore.conditions(); - settings.onComplete.call(element); - } - } - }, - - force: { - visible: function() { - var - style = $module.attr('style'), - userStyle = module.get.userStyle(style), - displayType = module.get.displayType(), - overrideStyle = userStyle + 'display: ' + displayType + ' !important;', - inlineDisplay = $module[0].style.display, - mustStayHidden = !displayType || (inlineDisplay === 'none' && settings.skipInlineHidden) || $module[0].tagName.match(/(script|link|style)/i) - ; - if (mustStayHidden){ - module.remove.transition(); - return false; - } - module.verbose('Overriding default display to show element', displayType); - $module - .attr('style', overrideStyle) - ; - return true; - }, - hidden: function() { - var - style = $module.attr('style'), - currentDisplay = $module.css('display'), - emptyStyle = (style === undefined || style === '') - ; - if(currentDisplay !== 'none' && !module.is.hidden()) { - module.verbose('Overriding default display to hide element'); - $module - .css('display', 'none') - ; - } - else if(emptyStyle) { - $module - .removeAttr('style') - ; - } - } - }, - - has: { - direction: function(animation) { - var - hasDirection = false - ; - animation = animation || settings.animation; - if(typeof animation === 'string') { - animation = animation.split(' '); - $.each(animation, function(index, word){ - if(word === className.inward || word === className.outward) { - hasDirection = true; - } - }); - } - return hasDirection; - }, - inlineDisplay: function() { - var - style = $module.attr('style') || '' - ; - return Array.isArray(style.match(/display.*?;/, '')); - } - }, - - set: { - animating: function(animation) { - // remove previous callbacks - module.remove.completeCallback(); - - // determine exact animation - animation = animation || settings.animation; - var animationClass = module.get.animationClass(animation); - - // save animation class in cache to restore class names - module.save.animation(animationClass); - - if(module.force.visible()) { - module.remove.hidden(); - module.remove.direction(); - - module.start.animation(animationClass); - } - }, - duration: function(animationName, duration) { - duration = duration || settings.duration; - duration = (typeof duration == 'number') - ? duration + 'ms' - : duration - ; - if(duration || duration === 0) { - module.verbose('Setting animation duration', duration); - $module - .css({ - 'animation-duration': duration - }) - ; - } - }, - direction: function(direction) { - direction = direction || module.get.direction(); - if(direction == className.inward) { - module.set.inward(); - } - else { - module.set.outward(); - } - }, - looping: function() { - module.debug('Transition set to loop'); - $module - .addClass(className.looping) - ; - }, - hidden: function() { - $module - .addClass(className.transition) - .addClass(className.hidden) - ; - }, - inward: function() { - module.debug('Setting direction to inward'); - $module - .removeClass(className.outward) - .addClass(className.inward) - ; - }, - outward: function() { - module.debug('Setting direction to outward'); - $module - .removeClass(className.inward) - .addClass(className.outward) - ; - }, - visible: function() { - $module - .addClass(className.transition) - .addClass(className.visible) - ; - } - }, - - start: { - animation: function(animationClass) { - animationClass = animationClass || module.get.animationClass(); - module.debug('Starting tween', animationClass); - $module - .addClass(animationClass) - .one(animationEnd + '.complete' + eventNamespace, module.complete) - ; - if(settings.useFailSafe) { - module.add.failSafe(); - } - module.set.duration(settings.duration); - settings.onStart.call(element); - } - }, - - save: { - animation: function(animation) { - if(!module.cache) { - module.cache = {}; - } - module.cache.animation = animation; - }, - displayType: function(displayType) { - if(displayType !== 'none') { - $module.data(metadata.displayType, displayType); - } - }, - transitionExists: function(animation, exists) { - $.fn.transition.exists[animation] = exists; - module.verbose('Saving existence of transition', animation, exists); - } - }, - - restore: { - conditions: function() { - var - animation = module.get.currentAnimation() - ; - if(animation) { - $module - .removeClass(animation) - ; - module.verbose('Removing animation class', module.cache); - } - module.remove.duration(); - } - }, - - add: { - failSafe: function() { - var - duration = module.get.duration() - ; - module.timer = setTimeout(function() { - $module.triggerHandler(animationEnd); - }, duration + settings.failSafeDelay); - module.verbose('Adding fail safe timer', module.timer); - } - }, - - remove: { - animating: function() { - $module.removeClass(className.animating); - }, - animationCallbacks: function() { - module.remove.queueCallback(); - module.remove.completeCallback(); - }, - queueCallback: function() { - $module.off('.queue' + eventNamespace); - }, - completeCallback: function() { - $module.off('.complete' + eventNamespace); - }, - display: function() { - $module.css('display', ''); - }, - direction: function() { - $module - .removeClass(className.inward) - .removeClass(className.outward) - ; - }, - duration: function() { - $module - .css('animation-duration', '') - ; - }, - failSafe: function() { - module.verbose('Removing fail safe timer', module.timer); - if(module.timer) { - clearTimeout(module.timer); - } - }, - hidden: function() { - $module.removeClass(className.hidden); - }, - visible: function() { - $module.removeClass(className.visible); - }, - looping: function() { - module.debug('Transitions are no longer looping'); - if( module.is.looping() ) { - module.reset(); - $module - .removeClass(className.looping) - ; - } - }, - transition: function() { - $module - .removeClass(className.transition) - .removeClass(className.visible) - .removeClass(className.hidden) - ; - } - }, - get: { - settings: function(animation, duration, onComplete) { - // single settings object - if(typeof animation == 'object') { - return $.extend(true, {}, $.fn.transition.settings, animation); - } - // all arguments provided - else if(typeof onComplete == 'function') { - return $.extend({}, $.fn.transition.settings, { - animation : animation, - onComplete : onComplete, - duration : duration - }); - } - // only duration provided - else if(typeof duration == 'string' || typeof duration == 'number') { - return $.extend({}, $.fn.transition.settings, { - animation : animation, - duration : duration - }); - } - // duration is actually settings object - else if(typeof duration == 'object') { - return $.extend({}, $.fn.transition.settings, duration, { - animation : animation - }); - } - // duration is actually callback - else if(typeof duration == 'function') { - return $.extend({}, $.fn.transition.settings, { - animation : animation, - onComplete : duration - }); - } - // only animation provided - else { - return $.extend({}, $.fn.transition.settings, { - animation : animation - }); - } - }, - animationClass: function(animation) { - var - animationClass = animation || settings.animation, - directionClass = (module.can.transition() && !module.has.direction()) - ? module.get.direction() + ' ' - : '' - ; - return className.animating + ' ' - + className.transition + ' ' - + directionClass - + animationClass - ; - }, - currentAnimation: function() { - return (module.cache && module.cache.animation !== undefined) - ? module.cache.animation - : false - ; - }, - currentDirection: function() { - return module.is.inward() - ? className.inward - : className.outward - ; - }, - direction: function() { - return module.is.hidden() || !module.is.visible() - ? className.inward - : className.outward - ; - }, - animationDirection: function(animation) { - var - direction - ; - animation = animation || settings.animation; - if(typeof animation === 'string') { - animation = animation.split(' '); - // search animation name for out/in class - $.each(animation, function(index, word){ - if(word === className.inward) { - direction = className.inward; - } - else if(word === className.outward) { - direction = className.outward; - } - }); - } - // return found direction - if(direction) { - return direction; - } - return false; - }, - duration: function(duration) { - duration = duration || settings.duration; - if(duration === false) { - duration = $module.css('animation-duration') || 0; - } - return (typeof duration === 'string') - ? (duration.indexOf('ms') > -1) - ? parseFloat(duration) - : parseFloat(duration) * 1000 - : duration - ; - }, - displayType: function(shouldDetermine) { - shouldDetermine = (shouldDetermine !== undefined) - ? shouldDetermine - : true - ; - if(settings.displayType) { - return settings.displayType; - } - if(shouldDetermine && $module.data(metadata.displayType) === undefined) { - var currentDisplay = $module.css('display'); - if(currentDisplay === '' || currentDisplay === 'none'){ - // create fake element to determine display state - module.can.transition(true); - } else { - module.save.displayType(currentDisplay); - } - } - return $module.data(metadata.displayType); - }, - userStyle: function(style) { - style = style || $module.attr('style') || ''; - return style.replace(/display.*?;/, ''); - }, - transitionExists: function(animation) { - return $.fn.transition.exists[animation]; - }, - animationStartEvent: function() { - var - element = document.createElement('div'), - animations = { - 'animation' :'animationstart', - 'OAnimation' :'oAnimationStart', - 'MozAnimation' :'mozAnimationStart', - 'WebkitAnimation' :'webkitAnimationStart' - }, - animation - ; - for(animation in animations){ - if( element.style[animation] !== undefined ){ - return animations[animation]; - } - } - return false; - }, - animationEndEvent: function() { - var - element = document.createElement('div'), - animations = { - 'animation' :'animationend', - 'OAnimation' :'oAnimationEnd', - 'MozAnimation' :'mozAnimationEnd', - 'WebkitAnimation' :'webkitAnimationEnd' - }, - animation - ; - for(animation in animations){ - if( element.style[animation] !== undefined ){ - return animations[animation]; - } - } - return false; - } - - }, - - can: { - transition: function(forced) { - var - animation = settings.animation, - transitionExists = module.get.transitionExists(animation), - displayType = module.get.displayType(false), - elementClass, - tagName, - $clone, - currentAnimation, - inAnimation, - directionExists - ; - if( transitionExists === undefined || forced) { - module.verbose('Determining whether animation exists'); - elementClass = $module.attr('class'); - tagName = $module.prop('tagName'); - - $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module); - currentAnimation = $clone - .addClass(animation) - .removeClass(className.inward) - .removeClass(className.outward) - .addClass(className.animating) - .addClass(className.transition) - .css('animationName') - ; - inAnimation = $clone - .addClass(className.inward) - .css('animationName') - ; - if(!displayType) { - displayType = $clone - .attr('class', elementClass) - .removeAttr('style') - .removeClass(className.hidden) - .removeClass(className.visible) - .show() - .css('display') - ; - module.verbose('Determining final display state', displayType); - module.save.displayType(displayType); - } - - $clone.remove(); - if(currentAnimation != inAnimation) { - module.debug('Direction exists for animation', animation); - directionExists = true; - } - else if(currentAnimation == 'none' || !currentAnimation) { - module.debug('No animation defined in css', animation); - return; - } - else { - module.debug('Static animation found', animation, displayType); - directionExists = false; - } - module.save.transitionExists(animation, directionExists); - } - return (transitionExists !== undefined) - ? transitionExists - : directionExists - ; - }, - animate: function() { - // can transition does not return a value if animation does not exist - return (module.can.transition() !== undefined); - } - }, - - is: { - animating: function() { - return $module.hasClass(className.animating); - }, - inward: function() { - return $module.hasClass(className.inward); - }, - outward: function() { - return $module.hasClass(className.outward); - }, - looping: function() { - return $module.hasClass(className.looping); - }, - occurring: function(animation) { - animation = animation || settings.animation; - animation = '.' + animation.replace(' ', '.'); - return ( $module.filter(animation).length > 0 ); - }, - visible: function() { - return $module.is(':visible'); - }, - hidden: function() { - return $module.css('visibility') === 'hidden'; - }, - supported: function() { - return(animationEnd !== false); - } - }, - - hide: function() { - module.verbose('Hiding element'); - if( module.is.animating() ) { - module.reset(); - } - element.blur(); // IE will trigger focus change if element is not blurred before hiding - module.remove.display(); - module.remove.visible(); - if($.isFunction(settings.onBeforeHide)){ - settings.onBeforeHide.call(element,function(){ - module.hideNow(); - }); - } else { - module.hideNow(); - } - - }, - - hideNow: function() { - module.set.hidden(); - module.force.hidden(); - settings.onHide.call(element); - settings.onComplete.call(element); - // module.repaint(); - }, - - show: function(display) { - module.verbose('Showing element', display); - if(module.force.visible()) { - module.remove.hidden(); - module.set.visible(); - settings.onShow.call(element); - settings.onComplete.call(element); - // module.repaint(); - } - }, - - toggle: function() { - if( module.is.visible() ) { - module.hide(); - } - else { - module.show(); - } - }, - - stop: function() { - module.debug('Stopping current animation'); - $module.triggerHandler(animationEnd); - }, - - stopAll: function() { - module.debug('Stopping all animation'); - module.remove.queueCallback(); - $module.triggerHandler(animationEnd); - }, - - clear: { - queue: function() { - module.debug('Clearing animation queue'); - module.remove.queueCallback(); - } - }, - - enable: function() { - module.verbose('Starting animation'); - $module.removeClass(className.disabled); - }, - - disable: function() { - module.debug('Stopping animation'); - $module.addClass(className.disabled); - }, - - setting: function(name, value) { - module.debug('Changing setting', name, value); - if( $.isPlainObject(name) ) { - $.extend(true, settings, name); - } - else if(value !== undefined) { - if($.isPlainObject(settings[name])) { - $.extend(true, settings[name], value); - } - else { - settings[name] = value; - } - } - else { - return settings[name]; - } - }, - internal: function(name, value) { - if( $.isPlainObject(name) ) { - $.extend(true, module, name); - } - else if(value !== undefined) { - module[name] = value; - } - else { - return module[name]; - } - }, - debug: function() { - if(!settings.silent && settings.debug) { - if(settings.performance) { - module.performance.log(arguments); - } - else { - module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':'); - module.debug.apply(console, arguments); - } - } - }, - verbose: function() { - if(!settings.silent && settings.verbose && settings.debug) { - if(settings.performance) { - module.performance.log(arguments); - } - else { - module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':'); - module.verbose.apply(console, arguments); - } - } - }, - error: function() { - if(!settings.silent) { - module.error = Function.prototype.bind.call(console.error, console, settings.name + ':'); - module.error.apply(console, arguments); - } - }, - performance: { - log: function(message) { - var - currentTime, - executionTime, - previousTime - ; - if(settings.performance) { - currentTime = new Date().getTime(); - previousTime = time || currentTime; - executionTime = currentTime - previousTime; - time = currentTime; - performance.push({ - 'Name' : message[0], - 'Arguments' : [].slice.call(message, 1) || '', - 'Element' : element, - 'Execution Time' : executionTime - }); - } - clearTimeout(module.performance.timer); - module.performance.timer = setTimeout(module.performance.display, 500); - }, - display: function() { - var - title = settings.name + ':', - totalTime = 0 - ; - time = false; - clearTimeout(module.performance.timer); - $.each(performance, function(index, data) { - totalTime += data['Execution Time']; - }); - title += ' ' + totalTime + 'ms'; - if(moduleSelector) { - title += ' \'' + moduleSelector + '\''; - } - if($allModules.length > 1) { - title += ' ' + '(' + $allModules.length + ')'; - } - if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) { - console.groupCollapsed(title); - if(console.table) { - console.table(performance); - } - else { - $.each(performance, function(index, data) { - console.log(data['Name'] + ': ' + data['Execution Time']+'ms'); - }); - } - console.groupEnd(); - } - performance = []; - } - }, - // modified for transition to return invoke success - invoke: function(query, passedArguments, context) { - var - object = instance, - maxDepth, - found, - response - ; - passedArguments = passedArguments || queryArguments; - context = element || context; - if(typeof query == 'string' && object !== undefined) { - query = query.split(/[\. ]/); - maxDepth = query.length - 1; - $.each(query, function(depth, value) { - var camelCaseValue = (depth != maxDepth) - ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1) - : query - ; - if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) { - object = object[camelCaseValue]; - } - else if( object[camelCaseValue] !== undefined ) { - found = object[camelCaseValue]; - return false; - } - else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) { - object = object[value]; - } - else if( object[value] !== undefined ) { - found = object[value]; - return false; - } - else { - return false; - } - }); - } - if ( $.isFunction( found ) ) { - response = found.apply(context, passedArguments); - } - else if(found !== undefined) { - response = found; - } - - if(Array.isArray(returnedValue)) { - returnedValue.push(response); - } - else if(returnedValue !== undefined) { - returnedValue = [returnedValue, response]; - } - else if(response !== undefined) { - returnedValue = response; - } - return (found !== undefined) - ? found - : false - ; - } - }; - module.initialize(); - }) - ; - return (returnedValue !== undefined) - ? returnedValue - : this - ; -}; - -// Records if CSS transition is available -$.fn.transition.exists = {}; - -$.fn.transition.settings = { - - // module info - name : 'Transition', - - // hide all output from this component regardless of other settings - silent : false, - - // debug content outputted to console - debug : false, - - // verbose debug output - verbose : false, - - // performance data output - performance : true, - - // event namespace - namespace : 'transition', - - // delay between animations in group - interval : 0, - - // whether group animations should be reversed - reverse : 'auto', - - // animation callback event - onStart : function() {}, - onComplete : function() {}, - onShow : function() {}, - onHide : function() {}, - - // whether timeout should be used to ensure callback fires in cases animationend does not - useFailSafe : true, - - // delay in ms for fail safe - failSafeDelay : 100, - - // whether EXACT animation can occur twice in a row - allowRepeats : false, - - // Override final display type on visible - displayType : false, - - // animation duration - animation : 'fade', - duration : false, - - // new animations will occur after previous ones - queue : true, - -// whether initially inline hidden objects should be skipped for transition - skipInlineHidden: false, - - metadata : { - displayType: 'display' - }, - - className : { - animating : 'animating', - disabled : 'disabled', - hidden : 'hidden', - inward : 'in', - loading : 'loading', - looping : 'looping', - outward : 'out', - transition : 'transition', - visible : 'visible' - }, - - // possible errors - error: { - noAnimation : 'Element is no longer attached to DOM. Unable to animate. Use silent setting to surpress this warning in production.', - repeated : 'That animation is already occurring, cancelling repeated animation', - method : 'The method you called is not defined', - support : 'This browser does not support CSS animations' - } - -}; - - })( jQuery, window, document ); diff --git a/web_src/fomantic/semantic.json b/web_src/fomantic/semantic.json index d18ace5aa71b..2902dbf34ed7 100644 --- a/web_src/fomantic/semantic.json +++ b/web_src/fomantic/semantic.json @@ -43,7 +43,6 @@ "site", "tab", "table", - "text", - "transition" + "text" ] } diff --git a/web_src/js/modules/fomantic.js b/web_src/js/modules/fomantic.js index b78a5fbf9528..ab5f842bc6ca 100644 --- a/web_src/js/modules/fomantic.js +++ b/web_src/js/modules/fomantic.js @@ -22,6 +22,43 @@ export function initGiteaFomantic() { return escape(text, preserveHTML) + svg('octicon-x', 16, `${className.delete} icon`); }; + // stand-in for removed transition module + $.fn.transition = function (arg) { + if (arg === 'is supported') return true; + if (arg === 'is animating') return false; + if (arg === 'is inward') return false; + if (arg === 'is outward') return false; + if (arg === 'stop all') return; + + const isIn = arg?.animation?.endsWith(' in'); + const isOut = arg?.animation?.endsWith(' out'); + + let ret; + if (arg === 'show' || isIn) { + arg?.onStart?.(this); + ret = this.each((_, el) => { + el.classList.remove('hidden'); + el.classList.add('visible'); + if (isIn) el.classList.add('transition'); + if (arg?.displayType) el.style.setProperty('display', arg.displayType, 'important'); + arg?.onShow?.(this); + }); + arg?.onComplete?.(this); + } else if (arg === 'hide' || isOut) { + arg?.onStart?.(this); + ret = this.each((_, el) => { + el.classList.add('hidden'); + el.classList.remove('visible'); + // don't remove the transition class because fomantic didn't do it either + el.style.removeProperty('display'); + arg?.onHidden?.(this); + }); + arg?.onComplete?.(this); + } + + return ret; + }; + initFomanticApiPatch(); // Use the patches to improve accessibility, these patches are designed to be as independent as possible, make it easy to modify or remove in the future. From 16aee56e6a6a23d71465c703df796e6e8a274aad Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Thu, 17 Aug 2023 00:21:25 +0000 Subject: [PATCH 03/75] [skip ci] Updated translations via Crowdin --- options/locale/locale_zh-CN.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 155db3d32c0d..55b5f90357a4 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -113,6 +113,7 @@ unknown=未知 rss_feed=RSS è®¢é˜…æº +pin=固定 concept_code_repository=仓库 From c6b92c84fe5e4b1fad1711611d8a0d453fd7e311 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Thu, 17 Aug 2023 12:43:39 +0800 Subject: [PATCH 04/75] Sync repo's IsEmpty status correctly (#26517) Close #26509 --- modules/git/repo.go | 2 +- routers/web/repo/editor.go | 8 ++++++-- services/repository/files/update.go | 4 +++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/git/repo.go b/modules/git/repo.go index 61930ab31db9..5681d39c3b71 100644 --- a/modules/git/repo.go +++ b/modules/git/repo.go @@ -80,7 +80,7 @@ func InitRepository(ctx context.Context, repoPath string, bare bool) error { // IsEmpty Check if repository is empty. func (repo *Repository) IsEmpty() (bool, error) { var errbuf, output strings.Builder - if err := NewCommand(repo.Ctx).AddOptionFormat("--git-dir=%s", repo.Path).AddArguments("show-ref", "--head", "^HEAD$"). + if err := NewCommand(repo.Ctx).AddOptionFormat("--git-dir=%s", repo.Path).AddArguments("rev-list", "-n", "1", "--all"). Run(&RunOpts{ Dir: repo.Path, Stdout: &output, diff --git a/routers/web/repo/editor.go b/routers/web/repo/editor.go index b5129b730b67..b053e3c63f4a 100644 --- a/routers/web/repo/editor.go +++ b/routers/web/repo/editor.go @@ -370,7 +370,9 @@ func editFilePost(ctx *context.Context, form forms.EditRepoFileForm, isNewFile b } if ctx.Repo.Repository.IsEmpty { - _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") + if isEmpty, err := ctx.Repo.GitRepo.IsEmpty(); err == nil && !isEmpty { + _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") + } } redirectForCommitChoice(ctx, form.CommitChoice, branchName, form.TreePath) @@ -763,7 +765,9 @@ func UploadFilePost(ctx *context.Context) { } if ctx.Repo.Repository.IsEmpty { - _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") + if isEmpty, err := ctx.Repo.GitRepo.IsEmpty(); err == nil && !isEmpty { + _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") + } } redirectForCommitChoice(ctx, form.CommitChoice, branchName, form.TreePath) diff --git a/services/repository/files/update.go b/services/repository/files/update.go index cd7713341dce..f01092d360d6 100644 --- a/services/repository/files/update.go +++ b/services/repository/files/update.go @@ -263,7 +263,9 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use } if repo.IsEmpty { - _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: repo.ID, IsEmpty: false, DefaultBranch: opts.NewBranch}, "is_empty", "default_branch") + if isEmpty, err := gitRepo.IsEmpty(); err == nil && !isEmpty { + _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: repo.ID, IsEmpty: false, DefaultBranch: opts.NewBranch}, "is_empty", "default_branch") + } } return filesResponse, nil From c179ab423600b23f5b095a620e4d3b514353c0af Mon Sep 17 00:00:00 2001 From: Jason Song Date: Thu, 17 Aug 2023 20:38:02 +0800 Subject: [PATCH 05/75] Fix "issueReposQueryPattern does not match query" (#26556) Fix `https://github.com/go-gitea/gitea/pull/26545#discussion_r1295734340` --------- Co-authored-by: wxiaoguang Co-authored-by: Giteabot --- routers/web/user/home.go | 2 +- templates/user/dashboard/issues.tmpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/web/user/home.go b/routers/web/user/home.go index 8cc9cccc29f7..bf19cc513d38 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -746,7 +746,7 @@ func getRepoIDs(reposQuery string) []int64 { return []int64{} } if !issueReposQueryPattern.MatchString(reposQuery) { - log.Warn("issueReposQueryPattern does not match query") + log.Warn("issueReposQueryPattern does not match query: %q", reposQuery) return []int64{} } diff --git a/templates/user/dashboard/issues.tmpl b/templates/user/dashboard/issues.tmpl index 2897bb6dffc6..8d6cc67afe17 100644 --- a/templates/user/dashboard/issues.tmpl +++ b/templates/user/dashboard/issues.tmpl @@ -74,7 +74,7 @@