mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 00:03:57 -04:00 
			
		
		
		
	Merge pull request #311 from nuss-justin/issue/281
Fix #281. Add mouse-over precise time and on-click switch listener.
This commit is contained in:
		
						commit
						568c9b353e
					
				| @ -186,6 +186,12 @@ MAX_SIZE = 32 | |||||||
| ; Max number of files per upload. Defaults to 10 | ; Max number of files per upload. Defaults to 10 | ||||||
| MAX_FILES = 10 | MAX_FILES = 10 | ||||||
| 
 | 
 | ||||||
|  | [time] | ||||||
|  | ; Specifies the format for fully outputed dates. Defaults to RFC1123 | ||||||
|  | ; Special supported values are ANSIC, UnixDate, RubyDate, RFC822, RFC822Z, RFC850, RFC1123, RFC1123Z, RFC3339, RFC3339Nano, Kitchen, Stamp, StampMilli, StampMicro and StampNano | ||||||
|  | ; For more information about the format see http://golang.org/pkg/time/#pkg-constants | ||||||
|  | FORMAT =  | ||||||
|  | 
 | ||||||
| [log] | [log] | ||||||
| ROOT_PATH = | ROOT_PATH = | ||||||
| ; Either "console", "file", "conn", "smtp" or "database", default is "console" | ; Either "console", "file", "conn", "smtp" or "database", default is "console" | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ import ( | |||||||
| 	"encoding/hex" | 	"encoding/hex" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"hash" | 	"hash" | ||||||
|  | 	"html/template" | ||||||
| 	"math" | 	"math" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| @ -241,8 +242,7 @@ func TimeSincePro(then time.Time) string { | |||||||
| 	return strings.TrimPrefix(timeStr, ", ") | 	return strings.TrimPrefix(timeStr, ", ") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // TimeSince calculates the time interval and generate user-friendly string. | func timeSince(then time.Time, lang string) string { | ||||||
| func TimeSince(then time.Time, lang string) string { |  | ||||||
| 	now := time.Now() | 	now := time.Now() | ||||||
| 
 | 
 | ||||||
| 	lbl := i18n.Tr(lang, "tool.ago") | 	lbl := i18n.Tr(lang, "tool.ago") | ||||||
| @ -292,6 +292,11 @@ func TimeSince(then time.Time, lang string) string { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // TimeSince calculates the time interval and generate user-friendly string. | ||||||
|  | func TimeSince(t time.Time, lang string) template.HTML { | ||||||
|  | 	return template.HTML(fmt.Sprintf(`<span class="time-since" title="%s">%s</span>`, t.Format(setting.TimeFormat), timeSince(t, lang))) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const ( | const ( | ||||||
| 	Byte  = 1 | 	Byte  = 1 | ||||||
| 	KByte = Byte * 1024 | 	KByte = Byte * 1024 | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ import ( | |||||||
| 	"path" | 	"path" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"strings" | 	"strings" | ||||||
|  | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/Unknwon/com" | 	"github.com/Unknwon/com" | ||||||
| 	"github.com/Unknwon/goconfig" | 	"github.com/Unknwon/goconfig" | ||||||
| @ -77,6 +78,9 @@ var ( | |||||||
| 	AttachmentMaxFiles     int | 	AttachmentMaxFiles     int | ||||||
| 	AttachmentEnabled      bool | 	AttachmentEnabled      bool | ||||||
| 
 | 
 | ||||||
|  | 	// Time settings. | ||||||
|  | 	TimeFormat string | ||||||
|  | 
 | ||||||
| 	// Cache settings. | 	// Cache settings. | ||||||
| 	CacheAdapter  string | 	CacheAdapter  string | ||||||
| 	CacheInternal int | 	CacheInternal int | ||||||
| @ -183,6 +187,55 @@ func NewConfigContext() { | |||||||
| 	AttachmentMaxFiles = Cfg.MustInt("attachment", "MAX_FILES", 10) | 	AttachmentMaxFiles = Cfg.MustInt("attachment", "MAX_FILES", 10) | ||||||
| 	AttachmentEnabled = Cfg.MustBool("attachment", "ENABLE", true) | 	AttachmentEnabled = Cfg.MustBool("attachment", "ENABLE", true) | ||||||
| 
 | 
 | ||||||
|  | 	TimeFormat = Cfg.MustValue("time", "FORMAT", time.RFC1123) | ||||||
|  | 
 | ||||||
|  | 	switch TimeFormat { | ||||||
|  | 	case "ANSIC": | ||||||
|  | 		TimeFormat = time.ANSIC | ||||||
|  | 
 | ||||||
|  | 	case "UnixDate": | ||||||
|  | 		TimeFormat = time.UnixDate | ||||||
|  | 
 | ||||||
|  | 	case "RubyDate": | ||||||
|  | 		TimeFormat = time.RubyDate | ||||||
|  | 
 | ||||||
|  | 	case "RFC822": | ||||||
|  | 		TimeFormat = time.RFC822 | ||||||
|  | 
 | ||||||
|  | 	case "RFC822Z": | ||||||
|  | 		TimeFormat = time.RFC822Z | ||||||
|  | 
 | ||||||
|  | 	case "RFC850": | ||||||
|  | 		TimeFormat = time.RFC850 | ||||||
|  | 
 | ||||||
|  | 	case "RFC1123": | ||||||
|  | 		TimeFormat = time.RFC1123 | ||||||
|  | 
 | ||||||
|  | 	case "RFC1123Z": | ||||||
|  | 		TimeFormat = time.RFC1123Z | ||||||
|  | 
 | ||||||
|  | 	case "RFC3339": | ||||||
|  | 		TimeFormat = time.RFC3339 | ||||||
|  | 
 | ||||||
|  | 	case "RFC3339Nano": | ||||||
|  | 		TimeFormat = time.RFC3339Nano | ||||||
|  | 
 | ||||||
|  | 	case "Kitchen": | ||||||
|  | 		TimeFormat = time.Kitchen | ||||||
|  | 
 | ||||||
|  | 	case "Stamp": | ||||||
|  | 		TimeFormat = time.Stamp | ||||||
|  | 
 | ||||||
|  | 	case "StampMilli": | ||||||
|  | 		TimeFormat = time.StampMilli | ||||||
|  | 
 | ||||||
|  | 	case "StampMicro": | ||||||
|  | 		TimeFormat = time.StampMicro | ||||||
|  | 
 | ||||||
|  | 	case "StampNano": | ||||||
|  | 		TimeFormat = time.StampNano | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if err = os.MkdirAll(AttachmentPath, os.ModePerm); err != nil { | 	if err = os.MkdirAll(AttachmentPath, os.ModePerm); err != nil { | ||||||
| 		log.Fatal(4, "Could not create directory %s: %s", AttachmentPath, err) | 		log.Fatal(4, "Could not create directory %s: %s", AttachmentPath, err) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -1120,6 +1120,18 @@ function initOrganization() { | |||||||
|     console.log("init script : organization done"); |     console.log("init script : organization done"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | function initTimeSwitch() { | ||||||
|  |     $(".time-since[title]").on("click", function() { | ||||||
|  |         var $this = $(this); | ||||||
|  | 
 | ||||||
|  |         var title = $this.attr("title"); | ||||||
|  |         var text = $this.text(); | ||||||
|  | 
 | ||||||
|  |         $this.text(title); | ||||||
|  |         $this.attr("title", text); | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| (function ($) { | (function ($) { | ||||||
|     $(function () { |     $(function () { | ||||||
|         initCore(); |         initCore(); | ||||||
| @ -1148,6 +1160,8 @@ function initOrganization() { | |||||||
|         if ($('#body-nav').hasClass("org-nav")) { |         if ($('#body-nav').hasClass("org-nav")) { | ||||||
|             initOrganization(); |             initOrganization(); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         initTimeSwitch(); | ||||||
|     }); |     }); | ||||||
| })(jQuery); | })(jQuery); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user