Split settings into multiple files

This commit is contained in:
Eduard Urbach 2018-10-26 11:13:03 +09:00
parent 52f3579809
commit adaf9e4102
8 changed files with 279 additions and 285 deletions

View File

@ -0,0 +1,63 @@
component SettingsAccounts(user *arn.User)
SettingsTabs
h1.page-title Accounts settings
.settings
.widget.mountable(data-api="/api/user/" + user.ID)
h3.widget-title
Icon("cubes")
span Accounts
InputText("Accounts.AniList.Nick", user.Accounts.AniList.Nick, "AniList", "Your username on anilist.co")
InputText("Accounts.MyAnimeList.Nick", user.Accounts.MyAnimeList.Nick, "MyAnimeList", "Your username on myanimelist.net")
InputText("Accounts.Kitsu.Nick", user.Accounts.Kitsu.Nick, "Kitsu", "Your username on kitsu.io")
InputText("Accounts.Osu.Nick", user.Accounts.Osu.Nick, "Osu", "Your username on osu.ppy.sh")
InputText("Accounts.Overwatch.BattleTag", user.Accounts.Overwatch.BattleTag, "Overwatch", "Your battletag on Overwatch")
//- InputText("Accounts.AnimePlanet.Nick", user.Accounts.AnimePlanet.Nick, "AnimePlanet", "Your username on anime-planet.com")
.widget.mountable
h3.widget-title
Icon("user-plus")
span Connect
.widget-section.social-account
label(for="google") Google:
a#google.button.social-account-button(href="/auth/google", data-ajax="false")
if user.Accounts.Google.ID != ""
Icon("check")
span Connected
else
Icon("circle-o")
span Not connected
.widget-section.social-account
label(for="facebook") Facebook:
a#facebook.button.social-account-button(href="/auth/facebook", data-ajax="false")
if user.Accounts.Facebook.ID != ""
Icon("check")
span Connected
else
Icon("circle-o")
span Not connected
.widget.mountable
h3.widget-title
Icon("download")
span Import
ImportLists(user)
if len(user.AnimeList().Items) > 0
.widget.mountable
h3.widget-title
Icon("upload")
span Export
.widget-section
label JSON:
a.button(href="/api/animelist/" + user.ID, target="_blank")
Icon("upload")
span Export anime list as JSON

34
pages/settings/apps.pixy Normal file
View File

@ -0,0 +1,34 @@
component SettingsApps(user *arn.User)
SettingsTabs
h1.page-title App settings
.settings
.widget.mountable
h3.widget-title
Icon("puzzle-piece")
span Apps
.widget-section
label Chrome Extension:
button.action(data-action="installExtension", data-trigger="click")
Icon("chrome")
span Get the Chrome Extension
.widget-section
label Firefox Extension:
a.button(href="https://addons.mozilla.org/en-US/firefox/addon/anime-notifier/", target="_blank", rel="nofollow")
Icon("firefox")
span Get the Firefox Extension
.widget-section
label Android Web App:
a.button(href="https://www.youtube.com/watch?v=opyt4cw0ep8", target="_blank", rel="noopener")
Icon("android")
span Get the Android Web App
.widget-section
label Desktop Web App:
button.action(data-action="installApp", data-trigger="click")
Icon("desktop")
span Get the Desktop Web App

View File

@ -0,0 +1,26 @@
component SettingsFormatting(user *arn.User)
SettingsTabs
h1.page-title Formatting settings
.settings
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("font")
span Formatting
.widget-section
label(for="Theme")= "Theme:"
select.widget-ui-element.action(id="Theme", data-field="Theme", value=user.Settings().Theme, title="Language of anime titles", data-action="save", data-trigger="change")
option(value="light") Light
option(value="dark") Dark
.widget-section
label(for="TitleLanguage")= "Title language:"
select.widget-ui-element.action(id="TitleLanguage", data-field="TitleLanguage", value=user.Settings().TitleLanguage, title="Language of anime titles", data-action="save", data-trigger="change")
option(value="canonical") Canonical
option(value="english") English
option(value="romaji") Romaji
option(value="japanese") 日本語
InputNumber("Format.RatingsPrecision", float64(user.Settings().Format.RatingsPrecision), "Ratings precision", "How many decimals after the comma would you like to display in ratings on anime pages?", "0", "2", "1")

View File

@ -0,0 +1,50 @@
component SettingsNotifications(user *arn.User)
SettingsTabs
h1.page-title Notification settings
.settings
.widget.mountable
h3.widget-title
Icon("bell")
span Instant notifications
#enable-notifications.widget-section
label Instant notifications:
button.action(data-action="enableNotifications", data-trigger="click")
Icon("toggle-off")
span OFF
#disable-notifications.widget-section.hidden
label Instant notifications:
button.action(data-action="disableNotifications", data-trigger="click")
Icon("toggle-on")
span ON
#test-notification.widget-section
label Test:
button.action(data-action="testNotification", data-trigger="click")
Icon("paper-plane")
span Send test notification
.footer
p(title="This setting is not account bound, instead it is bound to your browser.") You can customize this setting on every device you own.
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("filter")
span Filter
InputBool("Notification.AnimeEpisodeReleases", user.Settings().Notification.AnimeEpisodeReleases, "New episodes", "Notifications about new episodes")
InputBool("Notification.AnimeFinished", user.Settings().Notification.AnimeFinished, "Finished anime series", "Notifications about finished anime series")
//- InputBool("Notification.NewFollowers", user.Settings().Notification.NewFollowers, "New followers", "Notifications about new followers")
//- .widget.mountable(data-api="/api/settings/" + user.ID)
//- h3.widget-title
//- Icon("heart")
//- span Likes
//- InputBool("Notification.ForumLikes", user.Settings().Notification.ForumLikes, "Forum post likes", "Notifications about forum post likes")
//- InputBool("Notification.SoundTrackLikes", user.Settings().Notification.SoundTrackLikes, "Soundtrack likes", "Notifications about soundtrack likes")
//- //- InputBool("Notification.GroupPostLikes", user.Settings().Notification.GroupPostLikes, "Group post likes", "Notifications about group post likes")
//- InputBool("Notification.QuoteLikes", user.Settings().Notification.QuoteLikes, "Quote likes", "Notifications about quote likes")

View File

@ -0,0 +1,72 @@
component SettingsPersonal(user *arn.User)
SettingsTabs
h1.page-title Personal settings
.settings
.widget.mountable(data-api="/api/user/" + user.ID)
h3.widget-title
Icon("user")
span Personal
InputText("Nick", user.Nick, "Username", "Your username on notify.moe")
InputText("Tagline", user.Tagline, "Tagline", "Text that appears below your username")
InputText("Website", user.Website, "Website", "Your homepage")
if arn.IsDevelopment()
InputTextArea("Introduction", user.Introduction, "Introduction", "Tell us about yourself (Markdown is allowed)")
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("camera")
span Avatar
//- .widget-section
//- label(for="Avatar.Source") Source:
//- select.widget-ui-element.action(id="Avatar.Source", data-field="Avatar.Source", value=user.Settings().Avatar.Source, data-action="save", data-trigger="change")
//- option(value="") Automatic
//- option(value="Gravatar") Gravatar
//- option(value="URL") Link
//- option(value="FileSystem") Upload
//- //- URL input
//- if user.Settings().Avatar.Source == "URL"
//- InputText("Avatar.SourceURL", user.Settings().Avatar.SourceURL, "Link", "Post the link to the image here")
//- //- Gravatar preview image
//- if user.Settings().Avatar.Source == "Gravatar" || (user.Settings().Avatar.Source == "" && user.Avatar.Source == "Gravatar")
//- .profile-image-container.avatar-preview
//- img.profile-image.mountable(src=user.Gravatar(), alt="Gravatar (" + user.Email + ")", title="Gravatar (" + user.Email + ")")
//- //- URL preview image
//- if user.Settings().Avatar.Source == "URL" && user.Settings().Avatar.SourceURL != ""
//- .profile-image-container.avatar-preview
//- img.profile-image.mountable(src=strings.Replace(user.Settings().Avatar.SourceURL, "http://", "https://", 1), alt="Avatar preview")
//- //- File upload
//- if user.Settings().Avatar.Source == "FileSystem"
InputFileUpload("avatar-input", "File", "image", "/api/upload/avatar")
.profile-image-container.avatar-preview
if user.HasAvatar()
img.avatar-input-preview.profile-image.lazy(data-src=user.AvatarLink("large"), data-webp="true", alt="Profile image", title="Recommended: 560 x 560 | PNG or JPG")
else
img.avatar-input-preview.profile-image.hidden(src=user.AvatarLink("large"), alt="Profile image", title="Recommended: 560 x 560 | PNG or JPG")
#avatar-input-preview-svg
SVGProfileImage(user)
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("picture-o")
span Cover
InputFileUpload("cover-input", "File", "image", "/api/upload/cover")
.cover-preview(title="Recommended: 1920 x 450 | PNG or JPG")
img.profile-cover.cover-input-preview.lazy(data-src=user.CoverLink("small"), data-webp="true", alt="Cover image")
if !user.IsPro()
.footer
p PRO account required.

26
pages/settings/pro.pixy Normal file
View File

@ -0,0 +1,26 @@
component SettingsPro(user *arn.User)
SettingsTabs
h1.page-title PRO settings
.settings
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("star")
span PRO
if user.IsPro()
.widget-section
label
span Your PRO account expires in
span.utc-date(data-date=user.ProExpires)
span .
a.button(href="/shop")
Icon("star")
span Extend PRO account duration
else
.widget-section
label Would you like to make this website more awesome?
a.button(href="/support")
Icon("star")
span Go PRO

View File

@ -1,285 +0,0 @@
component SettingsTabs
.tabs
Tab("Personal", "user", "/settings")
Tab("Accounts", "cubes", "/settings/accounts")
Tab("Notifications", "bell", "/settings/notifications")
Tab("Apps", "puzzle-piece", "/settings/apps")
Tab("Formatting", "font", "/settings/formatting")
Tab("PRO", "star", "/settings/pro")
component SettingsPersonal(user *arn.User)
SettingsTabs
h1.page-title Personal settings
.settings
.widget.mountable(data-api="/api/user/" + user.ID)
h3.widget-title
Icon("user")
span Personal
InputText("Nick", user.Nick, "Username", "Your username on notify.moe")
InputText("Tagline", user.Tagline, "Tagline", "Text that appears below your username")
InputText("Website", user.Website, "Website", "Your homepage")
if arn.IsDevelopment()
InputTextArea("Introduction", user.Introduction, "Introduction", "Tell us about yourself (Markdown is allowed)")
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("camera")
span Avatar
//- .widget-section
//- label(for="Avatar.Source") Source:
//- select.widget-ui-element.action(id="Avatar.Source", data-field="Avatar.Source", value=user.Settings().Avatar.Source, data-action="save", data-trigger="change")
//- option(value="") Automatic
//- option(value="Gravatar") Gravatar
//- option(value="URL") Link
//- option(value="FileSystem") Upload
//- //- URL input
//- if user.Settings().Avatar.Source == "URL"
//- InputText("Avatar.SourceURL", user.Settings().Avatar.SourceURL, "Link", "Post the link to the image here")
//- //- Gravatar preview image
//- if user.Settings().Avatar.Source == "Gravatar" || (user.Settings().Avatar.Source == "" && user.Avatar.Source == "Gravatar")
//- .profile-image-container.avatar-preview
//- img.profile-image.mountable(src=user.Gravatar(), alt="Gravatar (" + user.Email + ")", title="Gravatar (" + user.Email + ")")
//- //- URL preview image
//- if user.Settings().Avatar.Source == "URL" && user.Settings().Avatar.SourceURL != ""
//- .profile-image-container.avatar-preview
//- img.profile-image.mountable(src=strings.Replace(user.Settings().Avatar.SourceURL, "http://", "https://", 1), alt="Avatar preview")
//- //- File upload
//- if user.Settings().Avatar.Source == "FileSystem"
InputFileUpload("avatar-input", "File", "image", "/api/upload/avatar")
.profile-image-container.avatar-preview
if user.HasAvatar()
img.avatar-input-preview.profile-image.lazy(data-src=user.AvatarLink("large"), data-webp="true", alt="Profile image", title="Recommended: 560 x 560 | PNG or JPG")
else
img.avatar-input-preview.profile-image.hidden(src=user.AvatarLink("large"), alt="Profile image", title="Recommended: 560 x 560 | PNG or JPG")
#avatar-input-preview-svg
SVGProfileImage(user)
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("picture-o")
span Cover
InputFileUpload("cover-input", "File", "image", "/api/upload/cover")
.cover-preview(title="Recommended: 1920 x 450 | PNG or JPG")
img.profile-cover.cover-input-preview.lazy(data-src=user.CoverLink("small"), data-webp="true", alt="Cover image")
if !user.IsPro()
.footer
p PRO account required.
component SettingsNotifications(user *arn.User)
SettingsTabs
h1.page-title Notification settings
.settings
.widget.mountable
h3.widget-title
Icon("bell")
span Instant notifications
#enable-notifications.widget-section
label Instant notifications:
button.action(data-action="enableNotifications", data-trigger="click")
Icon("toggle-off")
span OFF
#disable-notifications.widget-section.hidden
label Instant notifications:
button.action(data-action="disableNotifications", data-trigger="click")
Icon("toggle-on")
span ON
#test-notification.widget-section
label Test:
button.action(data-action="testNotification", data-trigger="click")
Icon("paper-plane")
span Send test notification
.footer
p(title="This setting is not account bound, instead it is bound to your browser.") You can customize this setting on every device you own.
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("filter")
span Filter
InputBool("Notification.AnimeEpisodeReleases", user.Settings().Notification.AnimeEpisodeReleases, "New episodes", "Notifications about new episodes")
InputBool("Notification.AnimeFinished", user.Settings().Notification.AnimeFinished, "Finished anime series", "Notifications about finished anime series")
//- InputBool("Notification.NewFollowers", user.Settings().Notification.NewFollowers, "New followers", "Notifications about new followers")
//- .widget.mountable(data-api="/api/settings/" + user.ID)
//- h3.widget-title
//- Icon("heart")
//- span Likes
//- InputBool("Notification.ForumLikes", user.Settings().Notification.ForumLikes, "Forum post likes", "Notifications about forum post likes")
//- InputBool("Notification.SoundTrackLikes", user.Settings().Notification.SoundTrackLikes, "Soundtrack likes", "Notifications about soundtrack likes")
//- //- InputBool("Notification.GroupPostLikes", user.Settings().Notification.GroupPostLikes, "Group post likes", "Notifications about group post likes")
//- InputBool("Notification.QuoteLikes", user.Settings().Notification.QuoteLikes, "Quote likes", "Notifications about quote likes")
component SettingsApps(user *arn.User)
SettingsTabs
h1.page-title App settings
.settings
.widget.mountable
h3.widget-title
Icon("puzzle-piece")
span Apps
.widget-section
label Chrome Extension:
button.action(data-action="installExtension", data-trigger="click")
Icon("chrome")
span Get the Chrome Extension
.widget-section
label Firefox Extension:
a.button(href="https://addons.mozilla.org/en-US/firefox/addon/anime-notifier/", target="_blank", rel="nofollow")
Icon("firefox")
span Get the Firefox Extension
.widget-section
label Android Web App:
a.button(href="https://www.youtube.com/watch?v=opyt4cw0ep8", target="_blank", rel="noopener")
Icon("android")
span Get the Android Web App
.widget-section
label Desktop Web App:
button.action(data-action="installApp", data-trigger="click")
Icon("desktop")
span Get the Desktop Web App
component SettingsFormatting(user *arn.User)
SettingsTabs
h1.page-title Formatting settings
.settings
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("font")
span Formatting
.widget-section
label(for="Theme")= "Theme:"
select.widget-ui-element.action(id="Theme", data-field="Theme", value=user.Settings().Theme, title="Language of anime titles", data-action="save", data-trigger="change")
option(value="light") Light
option(value="dark") Dark
.widget-section
label(for="TitleLanguage")= "Title language:"
select.widget-ui-element.action(id="TitleLanguage", data-field="TitleLanguage", value=user.Settings().TitleLanguage, title="Language of anime titles", data-action="save", data-trigger="change")
option(value="canonical") Canonical
option(value="english") English
option(value="romaji") Romaji
option(value="japanese") 日本語
InputNumber("Format.RatingsPrecision", float64(user.Settings().Format.RatingsPrecision), "Ratings precision", "How many decimals after the comma would you like to display in ratings on anime pages?", "0", "2", "1")
component SettingsPro(user *arn.User)
SettingsTabs
h1.page-title PRO settings
.settings
.widget.mountable(data-api="/api/settings/" + user.ID)
h3.widget-title
Icon("star")
span PRO
if user.IsPro()
.widget-section
label
span Your PRO account expires in
span.utc-date(data-date=user.ProExpires)
span .
a.button(href="/shop")
Icon("star")
span Extend PRO account duration
else
.widget-section
label Would you like to make this website more awesome?
a.button(href="/support")
Icon("star")
span Go PRO
component SettingsAccounts(user *arn.User)
SettingsTabs
h1.page-title Accounts settings
.settings
.widget.mountable(data-api="/api/user/" + user.ID)
h3.widget-title
Icon("cubes")
span Accounts
InputText("Accounts.AniList.Nick", user.Accounts.AniList.Nick, "AniList", "Your username on anilist.co")
InputText("Accounts.MyAnimeList.Nick", user.Accounts.MyAnimeList.Nick, "MyAnimeList", "Your username on myanimelist.net")
InputText("Accounts.Kitsu.Nick", user.Accounts.Kitsu.Nick, "Kitsu", "Your username on kitsu.io")
InputText("Accounts.Osu.Nick", user.Accounts.Osu.Nick, "Osu", "Your username on osu.ppy.sh")
InputText("Accounts.Overwatch.BattleTag", user.Accounts.Overwatch.BattleTag, "Overwatch", "Your battletag on Overwatch")
//- InputText("Accounts.AnimePlanet.Nick", user.Accounts.AnimePlanet.Nick, "AnimePlanet", "Your username on anime-planet.com")
.widget.mountable
h3.widget-title
Icon("user-plus")
span Connect
.widget-section.social-account
label(for="google") Google:
a#google.button.social-account-button(href="/auth/google", data-ajax="false")
if user.Accounts.Google.ID != ""
Icon("check")
span Connected
else
Icon("circle-o")
span Not connected
.widget-section.social-account
label(for="facebook") Facebook:
a#facebook.button.social-account-button(href="/auth/facebook", data-ajax="false")
if user.Accounts.Facebook.ID != ""
Icon("check")
span Connected
else
Icon("circle-o")
span Not connected
.widget.mountable
h3.widget-title
Icon("download")
span Import
ImportLists(user)
if len(user.AnimeList().Items) > 0
.widget.mountable
h3.widget-title
Icon("upload")
span Export
.widget-section
label JSON:
a.button(href="/api/animelist/" + user.ID, target="_blank")
Icon("upload")
span Export anime list as JSON

8
pages/settings/tabs.pixy Normal file
View File

@ -0,0 +1,8 @@
component SettingsTabs
.tabs
Tab("Personal", "user", "/settings")
Tab("Accounts", "cubes", "/settings/accounts")
Tab("Notifications", "bell", "/settings/notifications")
Tab("Apps", "puzzle-piece", "/settings/apps")
Tab("Formatting", "font", "/settings/formatting")
Tab("PRO", "star", "/settings/pro")