From 6ea19739fe1ff056be339bba269726610447a7ca Mon Sep 17 00:00:00 2001 From: Greg Edwards Date: Mon, 13 Apr 2015 19:48:56 -0400 Subject: [PATCH] Design work on GTS search --- web/css/form.css | 45 ++++++- web/css/main.css | 17 ++- web/css/pkmnstats.css | 31 +++-- web/css/types.css | 1 + web/gts/Default.aspx | 210 +++++++++++++++++++------------ web/gts/Default.aspx.cs | 186 +++++++++++++-------------- web/gts/Default.aspx.designer.cs | 72 +++++------ web/gts/Pokemon.aspx.cs | 48 +------ web/src/Common.cs | 15 +++ 9 files changed, 342 insertions(+), 283 deletions(-) diff --git a/web/css/form.css b/web/css/form.css index 04491589..9209ab18 100644 --- a/web/css/form.css +++ b/web/css/form.css @@ -98,7 +98,11 @@ input[type=submit].large, button.large { float: left; position: relative; - margin-right: 16px; +} + +.gtsBox .pfColumn +{ + margin: 16px; } .pfFormSubmit @@ -110,9 +114,14 @@ input[type=submit].large, button.large .pfFormGroup { - border-radius: 4px; overflow: hidden; border-spacing: 0; + height: 100%; +} + +.gtsBox .pfFormGroup +{ + border-radius: 4px; } .pfFormKey, .pfFormValue @@ -132,8 +141,6 @@ input[type=submit].large, button.large { color: white; text-align: left; - width: 64px; - padding-right: 2px; text-shadow: 0 1px 0 rgba(0,0,0,0.3); } @@ -142,11 +149,41 @@ input[type=submit].large, button.large background-color: #82d2e0; } +.home .pfFormKey {background-color: #ff8063;} +.gts .pfFormKey {background-color: #43c4ff;} +.bv .pfFormKey {background-color: #9761e9;} +.dw .pfFormKey {background-color: #fa79d4;} +.dex .pfFormKey {background-color: #2dd350;} +.stat .pfFormKey {background-color: #ffc321;} +.test .pfFormKey {background-color: #82d2e0;} +.admin .pfFormKey {background-color: #555555;} + .pfFormValue { background-color: #f2f2f2; } +.pfRadListItem +{ + display: block; + margin: 4px 0; +} + +.pfRadListItem * +{ + vertical-align: middle; +} + +.pfRadListItem:first-child +{ + margin-top: 0; +} + +.pfRadListItem:last-child +{ + margin-bottom: 0; +} + .ui-spinner { display: inline-block; diff --git a/web/css/main.css b/web/css/main.css index b59626ae..f3d356f8 100644 --- a/web/css/main.css +++ b/web/css/main.css @@ -108,9 +108,24 @@ li background-image: -ms-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* IE10+ */ background-image: linear-gradient(to bottom, #fcfcfc 0%,#f8f8f8 100%); /* W3C */ background-size: 100%; - padding: 16px; border-radius: 12px; border: 1px solid #cccccc; + margin: 8px; +} + +.pfBoxThin +{ + box-shadow: 0 3px 8px 0 rgba(0,0,0,0.05); + background-color: #f8f8f8; + background-image: -moz-linear-gradient(top, #fcfcfc 0%, #f8f8f8 100%); /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fcfcfc), color-stop(100%,#f8f8f8)); /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Chrome10+,Safari5.1+ */ + background-image: -o-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Opera 11.10+ */ + background-image: -ms-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* IE10+ */ + background-image: linear-gradient(to bottom, #fcfcfc 0%,#f8f8f8 100%); /* W3C */ + background-size: 100%; + border-radius: 4px; + overflow: hidden; } .gtsNav, .gtsNav ul, .gtsNav li diff --git a/web/css/pkmnstats.css b/web/css/pkmnstats.css index 55cebf0c..8de1dc6b 100644 --- a/web/css/pkmnstats.css +++ b/web/css/pkmnstats.css @@ -33,24 +33,24 @@ font-family: 'Meiryo UI',sans-serif; } -.gtsPokemonSummary .marks .m +.marks .m { color: #808080; } -.gtsPokemonSummary .specialFlags, .gtsPokemonSummary li.specialFlags +.specialFlags, li.specialFlags { width: 104px; } -.gtsPokemonSummary .specialFlags .shiny +.specialFlags .shiny { font-weight: bold; vertical-align: middle; color: #ee0000; } -.gtsPokemonSummary .specialFlags .pkrs, .specialFlags .pkrs_cure +.specialFlags .pkrs, .specialFlags .pkrs_cure { font-weight: bold; vertical-align: middle; @@ -79,16 +79,6 @@ top: -2px; } -.pfGroupBasic2 .pfFormKey -{ - background-color: #43c4ff; -} - -.pfGroupStats .pfFormKey -{ - background-color: #9761e9; -} - .pfFormGroup.pfGroupMoves { margin-top: 16px; @@ -108,8 +98,7 @@ .gtsPokemonSummary .pfColumn.colBasic1 { - width: 160px; - margin-right: 16px; + width: 104px; } .gtsPokemonSummary .nextIn @@ -123,7 +112,6 @@ .pfFormGroup .type { - background-color: #f2f2f2; } .pfFormGroup .move .type @@ -160,3 +148,12 @@ background-color: #43c4ff; } +.gtsOffer +{ + margin: 8px 0; +} + +.gtsOffer .pfColumn +{ + margin: 0 8px; +} diff --git a/web/css/types.css b/web/css/types.css index 9ee14b8c..ccbcec54 100644 --- a/web/css/types.css +++ b/web/css/types.css @@ -34,6 +34,7 @@ text-shadow: 0 1px 0 rgba(0,0,0,0.3); box-shadow: 0 -1px 0 0 rgba(0,0,0,0.3) inset; border-radius: 7px; + background-color: #f2f2f2; background-image: -moz-linear-gradient(top, transparent 0%, rgba(0,0,0,0.1) 100%); /* FF3.6+ */ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,transparent), color-stop(100%,rgba(0,0,0,0.1))); /* Chrome,Safari4+ */ background-image: -webkit-linear-gradient(top, transparent 0%,rgba(0,0,0,0.1) 100%); /* Chrome10+,Safari5.1+ */ diff --git a/web/gts/Default.aspx b/web/gts/Default.aspx index a1e5de64..51bd400a 100644 --- a/web/gts/Default.aspx +++ b/web/gts/Default.aspx @@ -7,12 +7,12 @@ + + -

Available Pokémon

-
-
-
- - - - - - - - - - - - - -
Species - -
Level - - to - -
Gender - - -
-
-
- - - - + + + + + + + + + + + + +
Version - - - - - - - - -
+ + + + - - - - - - - - - -
Species + +
- -
- -
- +
Version +
+ + + + + + + + +
+
+ + + + + + + +
+
+ +
Level + + to + +
Gender + + +
- +
- - - - - - - - + - - - - - + +
+
+
    +
  • + <%# CreateOfferImage(Container.DataItem) %> +
  • +
  • + <%# CreatePokeball(Container.DataItem) %> + Lv. + <%# CreateLevel(Container.DataItem) %> + <%# CreateGender(Container.DataItem) %> + <%# CreatePokerus(Container.DataItem) %> +
  • +
+
+
+
OfferWantedTrainer
<%# CreateOffer4(Container.DataItem) %><%# CreateWanted4(Container.DataItem) %><%# CreateTrainer4(Container.DataItem) %>
+ + + + + + + + + + + + + + + + + + + + +
+ Name + + <%# CreateNickname(Container.DataItem) %> +
Species<%# CreateSpecies(Container.DataItem) %> + (#<%# CreatePokedex(Container.DataItem) %>) +
Held item<%# CreateHeldItem(Container.DataItem) %>
Nature<%# CreateNature(Container.DataItem) %>
Ability<%# CreateAbility(Container.DataItem) %>
+
+
+ + + + + + + + + + + + +
Offered by<%# CreateTrainer(Container.DataItem) %>
Wanted<%# CreateWantedSpecies(Container.DataItem) %> + <%# CreateWantedGender(Container.DataItem) %> +
<%# CreateWantedLevel(Container.DataItem) %>
+
+ +
+
- + diff --git a/web/gts/Default.aspx.cs b/web/gts/Default.aspx.cs index d6f1504d..04cdb535 100644 --- a/web/gts/Default.aspx.cs +++ b/web/gts/Default.aspx.cs @@ -49,125 +49,118 @@ namespace PkmnFoundations.GTS { if (min == 0 && max == 0) { - return "Any"; + return "Any level"; } else if (min == 0) { - return String.Format("{0} and under", max); + return String.Format("Lv. {0} and under", max); } else if (max == 0) { - return String.Format("{0} and up", min); + return String.Format("Lv. {0} and up", min); } else { - return String.Format("{0} to {1}", min, max); + return String.Format("Lv. {0} to {1}", min, max); } } - protected String CreateOffer4(object DataItem) + protected String CreateOfferImage(object DataItem) + { + return "\"todo\""; + } + + protected String CreatePokeball(object DataItem) + { + return "\"todo\""; + } + + protected String CreatePokerus(object DataItem) + { + return ""; + } + + + // fixme: I can remove the need for separate 4/5 functions by making + // the GtsRecords inherit from IGtsRecord and make the the Pokemon field + // return PokemonPartyBase. + + protected String CreateLevel(object DataItem) { GtsRecord4 record = (GtsRecord4)DataItem; - Pokemon4 pokemon = null; - StringBuilder builder = new StringBuilder(); - - try - { - pokemon = new Pokemon4(m_pokedex, record.Data); - } - catch - { - builder.Append("Failure to parse pokemon data.
"); - } - - try - { - try - { - builder.Append(String.Format("{0} (#{1})", pokemon.Species.Name, pokemon.SpeciesID)); - } - catch (KeyNotFoundException) - { - builder.Append(String.Format("??? (#{0})", record.Species)); - } - catch (NullReferenceException) - { - builder.Append(String.Format("??? (#{0})", record.Species)); - } - builder.Append("
"); - try - { - if (pokemon.FormID != 0) - { - try - { - builder.Append(pokemon.Form.Name); - } - catch (KeyNotFoundException) - { - builder.Append("Unknown form"); - } - catch (NullReferenceException) - { - builder.Append("Unknown form"); - } - builder.Append("
"); - } - } - catch (NullReferenceException) - { - builder.Append("Unknown form"); - } - builder.Append(String.Format("Lv {0}", record.Level)); - builder.Append(String.Format(", {0}", record.Gender)); - builder.Append("
"); - try - { - builder.Append(String.Format("Nature: {0}", pokemon.Nature.ToString())); - } - catch (NullReferenceException) - { - builder.Append("Nature: ???"); - } - builder.Append("
"); - try - { - builder.Append(String.Format("Ability: {0}", pokemon.Ability.Name)); - } - catch (KeyNotFoundException) - { - builder.Append("Ability: ???"); - } - catch (NullReferenceException) - { - builder.Append("Ability: ???"); - } - builder.Append("
"); - - return builder.ToString(); - } - catch - { - return "Encountered an error trying to display this offer."; - } + return record.Level.ToString(); } - protected String CreateWanted4(object DataItem) + protected String CreateGender(object DataItem) { GtsRecord4 record = (GtsRecord4)DataItem; - return String.Format("{3} (#{0})
{1}
Lv {2}", - record.RequestedSpecies, - record.RequestedGender, - FormatLevels(record.RequestedMinLevel, record.RequestedMaxLevel), - m_pokedex.Species(record.RequestedSpecies).Name); + return Format.GenderSymbol(record.Gender); } - protected String CreateTrainer4(object DataItem) + protected String CreateNickname(object DataItem) + { + return "todo"; + } + + protected String CreateSpecies(object DataItem) + { + GtsRecord4 record = (GtsRecord4)DataItem; + return m_pokedex.Species(record.Species).Name.ToString(); + } + + protected String CreatePokedex(object DataItem) + { + GtsRecord4 record = (GtsRecord4)DataItem; + return record.Species.ToString(); + } + + protected String CreateHeldItem(object DataItem) + { + return "todo"; + } + + protected String CreateNature(object DataItem) + { + return "todo"; + } + + protected String CreateAbility(object DataItem) + { + return "todo"; + } + + protected String CreateTrainer(object DataItem) { GtsRecord4 record = (GtsRecord4)DataItem; return Common.HtmlEncode(record.TrainerName.Text); } + protected String CreateWantedSpecies(object DataItem) + { + GtsRecord4 record = (GtsRecord4)DataItem; + return String.Format("{0} (#{1})", + m_pokedex.Species(record.RequestedSpecies).Name, + record.RequestedSpecies); + } + + protected String CreateWantedGender(object DataItem) + { + GtsRecord4 record = (GtsRecord4)DataItem; + return Format.GenderSymbol(record.RequestedGender); + } + + protected String CreateWantedLevel(object DataItem) + { + GtsRecord4 record = (GtsRecord4)DataItem; + return FormatLevels(record.RequestedMinLevel, record.RequestedMaxLevel); + } + + + + + protected String CreateOffer5(object DataItem) { GtsRecord5 record = (GtsRecord5)DataItem; @@ -181,7 +174,7 @@ namespace PkmnFoundations.GTS protected String CreateWanted5(object DataItem) { GtsRecord5 record = (GtsRecord5)DataItem; - return String.Format("{3} (#{0})
{1}
Lv {2}", + return String.Format("{3} (#{0})
{1}
{2}", record.RequestedSpecies, record.RequestedGender, FormatLevels(record.RequestedMinLevel, record.RequestedMaxLevel), @@ -193,8 +186,5 @@ namespace PkmnFoundations.GTS GtsRecord5 record = (GtsRecord5)DataItem; return Common.HtmlEncode(record.TrainerName.Text); } - - - } } \ No newline at end of file diff --git a/web/gts/Default.aspx.designer.cs b/web/gts/Default.aspx.designer.cs index 3d998e25..16959aec 100644 --- a/web/gts/Default.aspx.designer.cs +++ b/web/gts/Default.aspx.designer.cs @@ -39,42 +39,6 @@ namespace PkmnFoundations.GTS { /// protected global::PkmnFoundations.Web.controls.PokemonPicker ppSpecies; - /// - /// txtLevelMin control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox txtLevelMin; - - /// - /// txtLevelMax control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox txtLevelMax; - - /// - /// chkMale control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.CheckBox chkMale; - - /// - /// chkFemale control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.CheckBox chkFemale; - /// /// rbGen4 control. /// @@ -120,6 +84,42 @@ namespace PkmnFoundations.GTS { /// protected global::System.Web.UI.WebControls.Button btnSearch; + /// + /// txtLevelMin control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtLevelMin; + + /// + /// txtLevelMax control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtLevelMax; + + /// + /// chkMale control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkMale; + + /// + /// chkFemale control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkFemale; + /// /// rptPokemon4 control. /// diff --git a/web/gts/Pokemon.aspx.cs b/web/gts/Pokemon.aspx.cs index fb6d7306..6add6371 100644 --- a/web/gts/Pokemon.aspx.cs +++ b/web/gts/Pokemon.aspx.cs @@ -85,14 +85,13 @@ namespace PkmnFoundations.Web.gts { litNickname.Text = pkmn.Nickname; bool shiny = pkmn.IsShiny; - imgPokemon.ImageUrl = (shiny ? "~/images/pkmn-lg-s/" : "~/images/pkmn-lg/") + - SpeciesFilename(pkmn) + ".png"; + imgPokemon.ImageUrl = WebFormat.PokemonImage(pkmn); imgPokemon.AlternateText = pkmn.Species.Name.ToString(); phShiny.Visible = shiny; // todo: pokerus phPkrs.Visible = false; phPkrsCured.Visible = false; - litMarks.Text = CreateMarks(pkmn.Markings); + litMarks.Text = WebFormat.Markings(pkmn.Markings); imgPokeball.ImageUrl = ItemFilename(pkmn.Pokeball); imgPokeball.AlternateText = pkmn.Pokeball.Name.ToString(); imgPokeball.ToolTip = pkmn.Pokeball.Name.ToString(); @@ -157,49 +156,6 @@ namespace PkmnFoundations.Web.gts rptUnknownRibbons.DataBind(); } - private String[] m_marks = new String[] { "●", "▲", "■", "♥", "★", "♦" }; - - private String CreateMarks(Markings markings) - { - StringBuilder result = new StringBuilder(); - int marking = 1; - for (int value = 0; value < 6; value++) - { - if (((int)markings & marking) != 0) - { - result.Append(""); - result.Append(m_marks[value]); - result.Append(""); - } - else - { - result.Append(""); - result.Append(m_marks[value]); - result.Append(""); - } - - marking <<= 1; - } - - return result.ToString(); - } - - private String SpeciesFilename(Pokemon4 pkmn) - { - // todo: move to a more central location - StringBuilder builder = new StringBuilder(); - builder.Append(pkmn.SpeciesID); - if (pkmn.Form.Suffix.Length > 0) - { - builder.Append('-'); - builder.Append(pkmn.Form.Suffix); - } - if (pkmn.Species.GenderVariations && pkmn.Gender == Genders.Female) - builder.Append("-f"); - - return builder.ToString(); - } - private String ItemFilename(Item item) { return "~/images/item-sm/" + item.ID.ToString() + ".png"; diff --git a/web/src/Common.cs b/web/src/Common.cs index 8f9652d2..7e8ff84d 100644 --- a/web/src/Common.cs +++ b/web/src/Common.cs @@ -39,6 +39,21 @@ namespace PkmnFoundations.Web message[x] ^= m_pad[(x + padOffset) & 0xff]; } + public static String ResolveUrl(String url) + { + url = url.Trim(); + if (!(url[0] == '~')) return url; + try + { + if (VirtualPathUtility.IsAppRelative(url)) return VirtualPathUtility.ToAbsolute(url); + return url; + } + catch (HttpException) + { + return url; + } + } + #region File extensions public static String GetExtension(String filename) {