Compare commits

..

No commits in common. "41193dfe370343c188546e73c7403cc14c5e9350" and "b5f44bd6c9b12d8eb89c12be00293c0ad49d4222" have entirely different histories.

4 changed files with 137 additions and 613 deletions

View File

@ -31,7 +31,7 @@ func (view *Help) Event(state *ui.State, event vaxis.Event) (processed bool) {
vaxis.Segment{Text: "town mail", Style: vaxis.Style{Foreground: vaxis.IndexColor(3)}},
vaxis.Segment{Text: ` to see who it's from :)
press Enter to quit to a shell!
press to quit to a shell!
`},
)
return

View File

@ -13,7 +13,7 @@ func (view *Introduction) Event(state *ui.State, event vaxis.Event) (processed b
case "Ctrl+c", "Ctrl+d":
close(ui.Quit)
case "Enter":
ui.ViewChange <- NewSettings()
ui.ViewChange <- &Settings{}
}
processed = true
}
@ -24,6 +24,6 @@ func (view *Introduction) Event(state *ui.State, event vaxis.Event) (processed b
this short tutorial will help you get accustomed to the terminal the text-based user interface that you will do most of your interacting with town on. if you're here, this means you've successfully connected to town over ssh good job! you can handle the rest. i believe in you <3
press Enter to continue to the next page. if you know what you're doing, you can press Ctrl+C or Ctrl+D at any point to exit to a shell.`})
press to continue to the next page. if you know what you're doing, you can press Ctrl+c or Ctrl+d at any point to exit to a shell.`})
return
}

View File

@ -7,19 +7,13 @@ import (
"strings"
"git.sr.ht/~rockorager/vaxis"
"git.sr.ht/~rockorager/vaxis/widgets/textinput"
"git.tilde.town/nbsp/welcome/ui"
)
type Settings struct {
index int
inputs [3]ui.Input
}
func NewSettings() *Settings {
s := &Settings{}
s.inputs[2].Placeholder = "e.g. America/New_York"
s.inputs[2].AutoComplete = TIMEZONES
return s
inputs [3]textinput.Model
}
func (view *Settings) Event(state *ui.State, event vaxis.Event) (processed bool) {
@ -88,7 +82,19 @@ func (view *Settings) Event(state *ui.State, event vaxis.Event) (processed bool)
_, q3 := win.New(0, q1+q2, 80, state.Window().Height).Wrap(vaxis.Segment{Text: `
3. `}, vaxis.Segment{Text: "what's your timezone?", Style: vaxis.Style{Foreground: vaxis.IndexColor(1)}}, vaxis.Segment{Text: ` this will change all times you view in town to your local timezone, so you don't have to convert from utc in your head. just start typing your continent and a big city in your area.
3. `}, vaxis.Segment{Text: "what's your timezone?", Style: vaxis.Style{Foreground: vaxis.IndexColor(1)}}, vaxis.Segment{Text: ` this will change all times you view in town to your local timezone, so you don't have to convert from utc in your head. the format for timezones can be found here:
`},
vaxis.Segment{
Text: "https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List",
Style: vaxis.Style{
Foreground: vaxis.IndexColor(4),
UnderlineStyle: vaxis.UnderlineSingle,
},
},
vaxis.Segment{Text: `
it should look something like America/New_York.
>
@ -127,615 +133,28 @@ func (view *Settings) Event(state *ui.State, event vaxis.Event) (processed bool)
view.inputs[1].Draw(vaxis.Window{win.Vx, &win, 5, h, int(math.Min(73.0, float64(win.Width)-7)), 1})
win.SetStyle(3, h, vaxis.Style{Attribute: vaxis.AttrReverse})
case 3:
_, h := win.Wrap(vaxis.Segment{Text: `3. `}, vaxis.Segment{Text: "what's your timezone?", Style: vaxis.Style{Foreground: vaxis.IndexColor(1)}}, vaxis.Segment{Text: ` this will change all times you view in town to your local timezone, so you don't have to convert from utc in your head. just start typing your continent and a big city in your area.
_, h := win.Wrap(vaxis.Segment{Text: `3. `}, vaxis.Segment{Text: "what's your timezone?", Style: vaxis.Style{Foreground: vaxis.IndexColor(1)}}, vaxis.Segment{Text: ` this will change all times you view in town to your local timezone, so you don't have to convert from utc in your head. the format for timezones can be found here:
`},
vaxis.Segment{
Text: "https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List",
Style: vaxis.Style{
Foreground: vaxis.IndexColor(4),
UnderlineStyle: vaxis.UnderlineSingle,
},
},
vaxis.Segment{Text: `
it should look something like America/New_York.
>`})
view.inputs[2].Draw(vaxis.Window{win.Vx, &win, 5, h, int(math.Min(73.0, float64(win.Width)-7)), 1})
win.SetStyle(3, h, vaxis.Style{Attribute: vaxis.AttrReverse})
case 4:
win.Wrap(vaxis.Segment{Text: " press Enter to continue ", Style: vaxis.Style{Attribute: enterStyle}})
win.Wrap(vaxis.Segment{Text: " press to continue ", Style: vaxis.Style{Attribute: enterStyle}})
}
}
state.HideCursor()
return
}
var TIMEZONES = []string{
"Africa/Abidjan",
"Africa/Accra",
"Africa/Bamako",
"Africa/Banjul",
"Africa/Conakry",
"Africa/Dakar",
"Africa/Freetown",
"Africa/Lome",
"Africa/Nouakchott",
"Africa/Ouagadougou",
"Africa/Timbuktu",
"Atlantic/Reykjavik",
"Atlantic/St_Helena",
"Iceland",
"Africa/Algiers",
"Africa/Bissau",
"Africa/Cairo",
"Egypt",
"Africa/Casablanca",
"Africa/Ceuta",
"Africa/El_Aaiun",
"Africa/Johannesburg",
"Africa/Maseru",
"Africa/Mbabane",
"Africa/Juba",
"Africa/Khartoum",
"Africa/Lagos",
"Africa/Bangui",
"Africa/Brazzaville",
"Africa/Douala",
"Africa/Kinshasa",
"Africa/Libreville",
"Africa/Luanda",
"Africa/Malabo",
"Africa/Niamey",
"Africa/Porto-Novo",
"Africa/Maputo",
"Africa/Blantyre",
"Africa/Bujumbura",
"Africa/Gaborone",
"Africa/Harare",
"Africa/Kigali",
"Africa/Lubumbashi",
"Africa/Lusaka",
"Africa/Monrovia",
"Africa/Nairobi",
"Africa/Addis_Ababa",
"Africa/Asmara",
"Africa/Asmera",
"Africa/Dar_es_Salaam",
"Africa/Djibouti",
"Africa/Kampala",
"Africa/Mogadishu",
"Indian/Antananarivo",
"Indian/Comoro",
"Indian/Mayotte",
"Africa/Ndjamena",
"Africa/Sao_Tome",
"Africa/Tripoli",
"Libya",
"Africa/Tunis",
"Africa/Windhoek",
"America/Adak",
"America/Atka",
"US/Aleutian",
"America/Anchorage",
"US/Alaska",
"America/Araguaina",
"America/Argentina/Buenos_Aires",
"America/Buenos_Aires",
"America/Argentina/Catamarca",
"America/Argentina/ComodRivadavia",
"America/Catamarca",
"America/Argentina/Cordoba",
"America/Cordoba",
"America/Rosario",
"America/Argentina/Jujuy",
"America/Jujuy",
"America/Argentina/La_Rioja",
"America/Argentina/Mendoza",
"America/Mendoza",
"America/Argentina/Rio_Gallegos",
"America/Argentina/Salta",
"America/Argentina/San_Juan",
"America/Argentina/San_Luis",
"America/Argentina/Tucuman",
"America/Argentina/Ushuaia",
"America/Asuncion",
"America/Bahia",
"America/Bahia_Banderas",
"America/Barbados",
"America/Belem",
"America/Belize",
"America/Boa_Vista",
"America/Bogota",
"America/Boise",
"America/Cambridge_Bay",
"America/Campo_Grande",
"America/Cancun",
"America/Caracas",
"America/Cayenne",
"America/Chicago",
"CST6CDT",
"US/Central",
"America/Chihuahua",
"America/Ciudad_Juarez",
"America/Costa_Rica",
"America/Cuiaba",
"America/Danmarkshavn",
"America/Dawson",
"America/Dawson_Creek",
"America/Denver",
"America/Shiprock",
"MST7MDT",
"Navajo",
"US/Mountain",
"America/Detroit",
"US/Michigan",
"America/Edmonton",
"America/Yellowknife",
"Canada/Mountain",
"America/Eirunepe",
"America/El_Salvador",
"America/Fort_Nelson",
"America/Fortaleza",
"America/Glace_Bay",
"America/Goose_Bay",
"America/Grand_Turk",
"America/Guatemala",
"America/Guayaquil",
"America/Guyana",
"America/Halifax",
"Canada/Atlantic",
"America/Havana",
"Cuba",
"America/Hermosillo",
"America/Indiana/Indianapolis",
"America/Fort_Wayne",
"America/Indianapolis",
"US/East-Indiana",
"America/Indiana/Knox",
"America/Knox_IN",
"US/Indiana-Starke",
"America/Indiana/Marengo",
"America/Indiana/Petersburg",
"America/Indiana/Tell_City",
"America/Indiana/Vevay",
"America/Indiana/Vincennes",
"America/Indiana/Winamac",
"America/Inuvik",
"America/Iqaluit",
"America/Pangnirtung",
"America/Jamaica",
"Jamaica",
"America/Juneau",
"America/Kentucky/Louisville",
"America/Louisville",
"America/Kentucky/Monticello",
"America/La_Paz",
"America/Lima",
"America/Los_Angeles",
"PST8PDT",
"US/Pacific",
"America/Maceio",
"America/Managua",
"America/Manaus",
"Brazil/West",
"America/Martinique",
"America/Matamoros",
"America/Mazatlan",
"Mexico/BajaSur",
"America/Menominee",
"America/Merida",
"America/Metlakatla",
"America/Mexico_City",
"Mexico/General",
"America/Miquelon",
"America/Moncton",
"America/Monterrey",
"America/Montevideo",
"America/New_York",
"EST5EDT",
"US/Eastern",
"America/Nome",
"America/Noronha",
"Brazil/DeNoronha",
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Nuuk",
"America/Godthab",
"America/Ojinaga",
"America/Panama",
"America/Atikokan",
"America/Cayman",
"America/Coral_Harbour",
"EST",
"America/Paramaribo",
"America/Phoenix",
"America/Creston",
"MST",
"US/Arizona",
"America/Port-au-Prince",
"America/Porto_Velho",
"America/Puerto_Rico",
"America/Anguilla",
"America/Antigua",
"America/Aruba",
"America/Blanc-Sablon",
"America/Curacao",
"America/Dominica",
"America/Grenada",
"America/Guadeloupe",
"America/Kralendijk",
"America/Lower_Princes",
"America/Marigot",
"America/Montserrat",
"America/Port_of_Spain",
"America/St_Barthelemy",
"America/St_Kitts",
"America/St_Lucia",
"America/St_Thomas",
"America/St_Vincent",
"America/Tortola",
"America/Virgin",
"America/Punta_Arenas",
"America/Rankin_Inlet",
"America/Recife",
"America/Regina",
"Canada/Saskatchewan",
"America/Resolute",
"America/Rio_Branco",
"America/Porto_Acre",
"Brazil/Acre",
"America/Santarem",
"America/Santiago",
"Chile/Continental",
"America/Santo_Domingo",
"America/Sao_Paulo",
"Brazil/East",
"America/Scoresbysund",
"America/Sitka",
"America/St_Johns",
"Canada/Newfoundland",
"America/Swift_Current",
"America/Tegucigalpa",
"America/Thule",
"America/Tijuana",
"America/Ensenada",
"America/Santa_Isabel",
"Mexico/BajaNorte",
"America/Toronto",
"America/Montreal",
"America/Nassau",
"America/Nipigon",
"America/Thunder_Bay",
"Canada/Eastern",
"America/Vancouver",
"Canada/Pacific",
"America/Whitehorse",
"Canada/Yukon",
"America/Winnipeg",
"America/Rainy_River",
"Canada/Central",
"America/Yakutat",
"Antarctica/Casey",
"Antarctica/Davis",
"Antarctica/Macquarie",
"Antarctica/Mawson",
"Antarctica/Palmer",
"Antarctica/Rothera",
"Antarctica/Troll",
"Antarctica/Vostok",
"Asia/Almaty",
"Asia/Amman",
"Asia/Anadyr",
"Asia/Aqtau",
"Asia/Aqtobe",
"Asia/Ashgabat",
"Asia/Ashkhabad",
"Asia/Atyrau",
"Asia/Baghdad",
"Asia/Baku",
"Asia/Bangkok",
"Asia/Phnom_Penh",
"Asia/Vientiane",
"Indian/Christmas",
"Asia/Barnaul",
"Asia/Beirut",
"Asia/Bishkek",
"Asia/Chita",
"Asia/Colombo",
"Asia/Damascus",
"Asia/Dhaka",
"Asia/Dacca",
"Asia/Dili",
"Asia/Dubai",
"Asia/Muscat",
"Indian/Mahe",
"Indian/Reunion",
"Asia/Dushanbe",
"Asia/Famagusta",
"Asia/Gaza",
"Asia/Hebron",
"Asia/Ho_Chi_Minh",
"Asia/Saigon",
"Asia/Hong_Kong",
"Hongkong",
"Asia/Hovd",
"Asia/Irkutsk",
"Asia/Jakarta",
"Asia/Jayapura",
"Asia/Jerusalem",
"Asia/Tel_Aviv",
"Israel",
"Asia/Kabul",
"Asia/Kamchatka",
"Asia/Karachi",
"Asia/Kathmandu",
"Asia/Katmandu",
"Asia/Khandyga",
"Asia/Kolkata",
"Asia/Calcutta",
"Asia/Krasnoyarsk",
"Asia/Kuching",
"Asia/Brunei",
"Asia/Macau",
"Asia/Macao",
"Asia/Magadan",
"Asia/Makassar",
"Asia/Ujung_Pandang",
"Asia/Manila",
"Asia/Nicosia",
"Europe/Nicosia",
"Asia/Novokuznetsk",
"Asia/Novosibirsk",
"Asia/Omsk",
"Asia/Oral",
"Asia/Pontianak",
"Asia/Pyongyang",
"Asia/Qatar",
"Asia/Bahrain",
"Asia/Qostanay",
"Asia/Qyzylorda",
"Asia/Riyadh",
"Antarctica/Syowa",
"Asia/Aden",
"Asia/Kuwait",
"Asia/Sakhalin",
"Asia/Samarkand",
"Asia/Seoul",
"ROK",
"Asia/Shanghai",
"Asia/Chongqing",
"Asia/Chungking",
"Asia/Harbin",
"PRC",
"Asia/Singapore",
"Asia/Kuala_Lumpur",
"Singapore",
"Asia/Srednekolymsk",
"Asia/Taipei",
"ROC",
"Asia/Tashkent",
"Asia/Tbilisi",
"Asia/Tehran",
"Iran",
"Asia/Thimphu",
"Asia/Thimbu",
"Asia/Tokyo",
"Japan",
"Asia/Tomsk",
"Asia/Ulaanbaatar",
"Asia/Choibalsan",
"Asia/Ulan_Bator",
"Asia/Urumqi",
"Asia/Kashgar",
"Asia/Ust-Nera",
"Asia/Vladivostok",
"Asia/Yakutsk",
"Asia/Yangon",
"Asia/Rangoon",
"Indian/Cocos",
"Asia/Yekaterinburg",
"Asia/Yerevan",
"Atlantic/Azores",
"Atlantic/Bermuda",
"Atlantic/Canary",
"Atlantic/Cape_Verde",
"Atlantic/Faroe",
"Atlantic/Faeroe",
"Atlantic/Madeira",
"Atlantic/South_Georgia",
"Atlantic/Stanley",
"Australia/Adelaide",
"Australia/South",
"Australia/Brisbane",
"Australia/Queensland",
"Australia/Broken_Hill",
"Australia/Yancowinna",
"Australia/Darwin",
"Australia/North",
"Australia/Eucla",
"Australia/Hobart",
"Australia/Currie",
"Australia/Tasmania",
"Australia/Lindeman",
"Australia/Lord_Howe",
"Australia/LHI",
"Australia/Melbourne",
"Australia/Victoria",
"Australia/Perth",
"Australia/West",
"Australia/Sydney",
"Australia/ACT",
"Australia/Canberra",
"Australia/NSW",
"Etc/GMT",
"Etc/GMT+0",
"Etc/GMT-0",
"Etc/GMT0",
"Etc/Greenwich",
"GMT",
"GMT+0",
"GMT-0",
"GMT0",
"Greenwich",
"Etc/GMT-1",
"Etc/GMT-10",
"Etc/GMT-11",
"Etc/GMT-12",
"Etc/GMT-13",
"Etc/GMT-14",
"Etc/GMT-2",
"Etc/GMT-3",
"Etc/GMT-4",
"Etc/GMT-5",
"Etc/GMT-6",
"Etc/GMT-7",
"Etc/GMT-8",
"Etc/GMT-9",
"Etc/GMT+1",
"Etc/GMT+10",
"Etc/GMT+11",
"Etc/GMT+12",
"Etc/GMT+2",
"Etc/GMT+3",
"Etc/GMT+4",
"Etc/GMT+5",
"Etc/GMT+6",
"Etc/GMT+7",
"Etc/GMT+8",
"Etc/GMT+9",
"Etc/UTC",
"Etc/UCT",
"Etc/Universal",
"Etc/Zulu",
"UCT",
"UTC",
"Universal",
"Zulu",
"Europe/Andorra",
"Europe/Astrakhan",
"Europe/Athens",
"EET",
"Europe/Belgrade",
"Europe/Ljubljana",
"Europe/Podgorica",
"Europe/Sarajevo",
"Europe/Skopje",
"Europe/Zagreb",
"Europe/Berlin",
"Arctic/Longyearbyen",
"Atlantic/Jan_Mayen",
"Europe/Copenhagen",
"Europe/Oslo",
"Europe/Stockholm",
"Europe/Brussels",
"CET",
"Europe/Amsterdam",
"Europe/Luxembourg",
"MET",
"Europe/Bucharest",
"Europe/Budapest",
"Europe/Chisinau",
"Europe/Tiraspol",
"Europe/Dublin",
"Eire",
"Europe/Gibraltar",
"Europe/Helsinki",
"Europe/Mariehamn",
"Europe/Istanbul",
"Asia/Istanbul",
"Turkey",
"Europe/Kaliningrad",
"Europe/Kirov",
"Europe/Kyiv",
"Europe/Kiev",
"Europe/Uzhgorod",
"Europe/Zaporozhye",
"Europe/Lisbon",
"Portugal",
"WET",
"Europe/London",
"Europe/Belfast",
"Europe/Guernsey",
"Europe/Isle_of_Man",
"Europe/Jersey",
"GB",
"GB-Eire",
"Europe/Madrid",
"Europe/Malta",
"Europe/Minsk",
"Europe/Moscow",
"W-SU",
"Europe/Paris",
"Europe/Monaco",
"Europe/Prague",
"Europe/Bratislava",
"Europe/Riga",
"Europe/Rome",
"Europe/San_Marino",
"Europe/Vatican",
"Europe/Samara",
"Europe/Saratov",
"Europe/Simferopol",
"Europe/Sofia",
"Europe/Tallinn",
"Europe/Tirane",
"Europe/Ulyanovsk",
"Europe/Vienna",
"Europe/Vilnius",
"Europe/Volgograd",
"Europe/Warsaw",
"Poland",
"Europe/Zurich",
"Europe/Busingen",
"Europe/Vaduz",
"Indian/Chagos",
"Indian/Maldives",
"Indian/Kerguelen",
"Indian/Mauritius",
"Pacific/Apia",
"Pacific/Auckland",
"Antarctica/McMurdo",
"Antarctica/South_Pole",
"NZ",
"Pacific/Bougainville",
"Pacific/Chatham",
"NZ-CHAT",
"Pacific/Easter",
"Chile/EasterIsland",
"Pacific/Efate",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Galapagos",
"Pacific/Gambier",
"Pacific/Guadalcanal",
"Pacific/Pohnpei",
"Pacific/Ponape",
"Pacific/Guam",
"Pacific/Saipan",
"Pacific/Honolulu",
"HST",
"Pacific/Johnston",
"US/Hawaii",
"Pacific/Kanton",
"Pacific/Enderbury",
"Pacific/Kiritimati",
"Pacific/Kosrae",
"Pacific/Kwajalein",
"Kwajalein",
"Pacific/Marquesas",
"Pacific/Nauru",
"Pacific/Niue",
"Pacific/Norfolk",
"Pacific/Noumea",
"Pacific/Pago_Pago",
"Pacific/Midway",
"Pacific/Samoa",
"US/Samoa",
"Pacific/Palau",
"Pacific/Pitcairn",
"Pacific/Port_Moresby",
"Antarctica/DumontDUrville",
"Pacific/Chuuk",
"Pacific/Truk",
"Pacific/Yap",
"Pacific/Rarotonga",
"Pacific/Tahiti",
"Pacific/Tarawa",
"Pacific/Funafuti",
"Pacific/Majuro",
"Pacific/Wake",
"Pacific/Wallis",
"Pacific/Tongatapu",
}

105
ui/list.go Normal file
View File

@ -0,0 +1,105 @@
/**
* vaxis/widget/list, edited to support wraparounds and number seeking
* soon to support confirmations, once i get around to that
*/
package ui
import (
"fmt"
"strconv"
"git.sr.ht/~rockorager/vaxis"
)
type List struct {
index int
items []string
offset int
}
func NewList(items []string, index int) List {
return List{
items: items,
index: index,
}
}
func (m *List) Draw(win vaxis.Window) {
_, height := win.Size()
if m.index >= m.offset+height {
m.offset = m.index - height + 1
} else if m.index < m.offset {
m.offset = m.index
}
defaultStyle := vaxis.Style{}
selectedStyle := vaxis.Style{Attribute: vaxis.AttrReverse}
index := m.index - m.offset
for i, subject := range m.items[m.offset:] {
var style vaxis.Style
if i == index {
style = selectedStyle
} else {
style = defaultStyle
}
win.Println(i, vaxis.Segment{Text: fmt.Sprintf(" %-"+strconv.Itoa(win.Width-2)+"s", subject), Style: style})
}
}
func (m *List) Down() {
if m.index == len(m.items)-1 {
m.index = 0
} else {
m.index++
}
}
func (m *List) Up() {
if m.index == 0 {
m.index = len(m.items) - 1
} else {
m.index--
}
}
func (m *List) Home() {
m.index = 0
}
func (m *List) End() {
m.index = len(m.items) - 1
}
func (m *List) PageDown(win vaxis.Window) {
_, height := win.Size()
m.index = min(len(m.items)-1, m.index+height)
}
func (m *List) PageUp(win vaxis.Window) {
_, height := win.Size()
m.index = max(0, m.index-height)
}
func (m *List) Items() []string {
return m.items
}
func (m *List) SetItems(items []string) {
m.items = items
m.index = min(len(items)-1, m.index)
}
func (m *List) SetItem(index int, item string) {
m.items[index] = item
}
// Returns the index of the currently selected item.
func (m *List) Index() int {
return m.index
}
func (m *List) SetIndex(index int) {
m.index = index
}