views

package
v1.0.0-develop.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 31, 2018 License: GPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var TemplateFuncs = map[string]interface{}{
	"ConfigBool": func(key string) bool {
		revel.Config.SetSection("ganggo")
		return revel.Config.BoolDefault(key, false)
	},
	"ConfigString": func(key string) string {
		revel.Config.SetSection("ganggo")
		return revel.Config.StringDefault(key, "")
	},
	"Version": func() string { return app.AppVersion },
	"SafeHTML": func(text string) template.HTML {
		p := bluemonday.UGCPolicy()
		return template.HTML(p.Sanitize(text))
	},
	"StripHTML": func(text string) template.HTML {
		p := bluemonday.StrictPolicy()
		return template.HTML(p.Sanitize(text))
	},
	"ApiVersion": func() string { return api.API_VERSION },

	"IsReshare": func(a string) bool {
		return (a == models.Reshare)
	},
	"IsStatusMessage": func(a string) bool {
		return (a == models.StatusMessage)
	},
	"IsShareablePost": func(a string) bool {
		return (a == models.ShareablePost)
	},
	"IsShareableComment": func(a string) bool {
		return (a == models.ShareableComment)
	},
	"IsShareableLike": func(a string) bool {
		return (a == models.ShareableLike)
	},
	"IsShareableContact": func(a string) bool {
		return (a == models.ShareableContact)
	},
	"LikesByTargetID": func(id uint) []models.Like {
		return likes(id, true)
	},
	"DislikesByTargetID": func(id uint) []models.Like {
		return likes(id, false)
	},
	"PostByGuid": func(guid string) (post models.Post) {
		db, err := models.OpenDatabase()
		if err != nil {
			revel.ERROR.Println(err)
			return
		}
		defer db.Close()

		err = db.Where("guid = ?", guid).First(&post).Error
		if err != nil {
			revel.ERROR.Println(err, guid)
			return
		}
		return
	},
	"PersonByID": func(id uint) (person models.Person) {
		db, err := models.OpenDatabase()
		if err != nil {
			revel.ERROR.Println(err)
			return
		}
		defer db.Close()

		err = db.First(&person, id).Error
		if err != nil {
			revel.ERROR.Println(err, id)
			return
		}

		err = db.Where("person_id = ?", person.ID).First(&person.Profile).Error
		if err != nil {
			revel.ERROR.Println(err, person)
			return
		}
		return
	},

	"HostFromHandle": func(handle string) (host string) {
		host, err := helpers.ParseHost(handle)
		if err != nil {
			revel.ERROR.Println(err)
			return
		}
		return
	},
	"FetchUserStreams": func(user models.User) (streams models.UserStreams) {
		db, err := models.OpenDatabase()
		if err != nil {
			revel.AppLog.Error(err.Error())
			return
		}
		defer db.Close()

		err = db.Where("user_id = ?", user.ID).Find(&streams).Error
		if err != nil {
			revel.AppLog.Error(err.Error())
		}
		return
	},

	"CaptchaNew": func() string { return captcha.New() },

	"UserSettings": func(user models.User, key string) string {
		skey := models.UserSettingKey(-1)
		switch key {
		case "email":
			skey = models.UserSettingMailAddress
		case "email.verified":
			skey = models.UserSettingMailVerified
		case "telegram.id":
			skey = models.UserSettingTelegramID
		case "telegram.verified":
			skey = models.UserSettingTelegramVerified
		case "lang":
			skey = models.UserSettingLanguage
		}
		return user.Settings.GetValue(skey)
	},

	"DefaultLocale": func() string {
		revel.Config.SetSection("DEFAULT")
		return revel.Config.StringDefault("i18n.default_language", "en")
	},
	"UserLocale": func(user models.User) string {
		locale := user.Settings.GetValue(models.UserSettingLanguage)
		if locale == "" {
			revel.Config.SetSection("DEFAULT")
			return revel.Config.StringDefault("i18n.default_language", "en")
		}
		return locale
	},
	"ParseLocalesToJson": func() (i18n I18nMessages) {
		i18n = make(I18nMessages)
		directory := filepath.Join(revel.BasePath, "messages")
		re := regexp.MustCompile(`\w\.([\w-_]{1,})$`)
		if err := filepath.Walk(directory, func(path string, f os.FileInfo, err error) error {
			result := re.FindAllStringSubmatch(path, 1)
			if len(result) > 0 && len(result[0]) > 0 {
				c, err := config.ReadDefault(path)
				if err != nil {
					revel.AppLog.Error("Cannot open config file", "err", err)
					return err
				}
				options, err := c.Options(config.DefaultSection)
				if err != nil {
					revel.AppLog.Error("Cannot open config file", "err", err)
					return err
				}
				i18n[result[0][1]] = make(map[string]string)
				for _, option := range options {
					value, _ := c.String(config.DefaultSection, option)
					i18n[result[0][1]][option] = value
				}
			}
			return nil
		}); err != nil {
			revel.AppLog.Error(err.Error())
			return nil
		}
		return i18n
	},
	"FindAvailableLocales": func() (list map[string]string) {
		list = make(map[string]string)
		directory := filepath.Join(revel.BasePath, "messages")
		re := regexp.MustCompile(`(\w+)\.([\w-_]{1,})$`)
		err := filepath.Walk(directory, func(path string, f os.FileInfo, err error) error {
			result := re.FindAllStringSubmatch(path, 1)
			if len(result) > 0 && len(result[0]) > 2 {
				list[result[0][2]] = strings.Title(result[0][1])
			}
			return nil
		})
		if err != nil {
			revel.AppLog.Error("FindAvailableLocales", err.Error(), err)
			return
		}
		return
	},
	"FindUnreadNotifications": func(user models.User) (notify models.Notifications) {
		err := notify.FindUnreadByUserID(user.ID)
		if err != nil {
			revel.ERROR.Println(err)
			return
		}
		return
	},
	"CommentGuid": func(comment models.Comment) string {
		post, _ := comment.ParentPost()
		return post.Guid + "#" + comment.Guid
	},
	"LikeGuid": func(like models.Like) string {
		post, _ := like.ParentPost()
		return post.Guid
	},
	"PtrToValue": func(a *string) string { return *a },

	"javascript_include_tag": func(name string) template.HTML {
		path := "/assets/javascripts/" + name + ".js"
		src := loadAndFetchManifestEntry(path)
		if src == "" {
			src = "/assets/vendor/js/" + name + ".js"
		}
		tmpl := `<script src="/public` + src + `"></script>`
		return template.HTML(tmpl)
	},
	"stylesheet_link_tag": func(name string) template.HTML {
		path := "/assets/stylesheets/" + name + ".css"
		src := loadAndFetchManifestEntry(path)
		if src == "" {
			src = "/assets/vendor/css/" + name + ".css"
		}
		tmpl := `<link type="text/css" rel="stylesheet" href="/public` + src + `">`
		return template.HTML(tmpl)
	},
	"ugt": func(a, b uint) bool {
		return a > b
	},
	"eq": func(a, b interface{}) bool {
		return a == b
	},
	"ne": func(a, b interface{}) bool {
		return a != b
	},
	"add": func(a, b int) int {
		return a + b
	},
	"uadd": func(a, b uint) uint {
		return a + b
	},
	"sub": func(a, b int) int {
		return a - b
	},
	"usub": func(a, b uint) uint {
		return a - b
	},
	"concat": func(a, b string) string {
		return a + b
	},
	"htmlToString": func(a template.HTML) string {
		return string(a)
	},
	"nilValue": func(a interface{}) bool {
		return a == nil
	},
}

Functions

This section is empty.

Types

type I18nMessages

type I18nMessages map[string]map[string]string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL