1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-29 14:35:45 +00:00
This commit is contained in:
Yan Maniez 2018-04-22 21:49:32 +02:00
parent bbf8acc06d
commit 87438c69c4
13 changed files with 294 additions and 21 deletions

View file

@ -20,6 +20,9 @@
<Compile Update="Views\AboutPage.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="Views\SpellDetailPage.xaml.cs">
<DependentUpon>SpellDetailPage.xaml</DependentUpon>
</Compile>
<Compile Update="Views\ItemDetailPage.xaml.cs">
<SubType>Code</SubType>
</Compile>

View file

@ -23,6 +23,8 @@
<Color x:Key="titlered">#58180D</Color> <!--% titles-->
<Color x:Key="titlegold">#C9AD6A</Color> <!--% titlerules-->
<Color x:Key="rulered">#9C2B1B</Color> <!--% triangular rule in statsblock-->
<Color x:Key="contentblack">#000000</Color> <!--% ajout -->
<!--% Trim (affects tables and paperboxes)-->
<Color x:Key="PhbLightGreen">#E0E5C1</Color> <!--% PHB Part 1-->
@ -68,11 +70,17 @@
<Style TargetType="ContentPage">
<Setter Property="BackgroundColor" Value="{StaticResource bgtan}" />
</Style>
<Style TargetType="StackLayout">
<Setter Property="BackgroundColor" Value="{StaticResource bgtan}" />
</Style>
<Style TargetType="ScrollView">
<Setter Property="BackgroundColor" Value="{StaticResource bgtan}" />
</Style>
<OnPlatform x:Key="LinuxLibertineCapitals" x:TypeArguments="x:String">
<On Platform="iOS" Value="Linux Libertine Capitals" />
<On Platform="Android" Value="LinLibertine_aS.ttf#Linux Libertine Capitals" />
<On Platform="UWP, WinRT, WinPhone" Value="Assets/Fonts/LinLibertine_aS.ttf#Linux Libertine Capitals" />
<On Platform="UWP, WinRT, WinPhone" Value="Assets/Fonts/LinLibertine_R.ttf#Linux Libertine" />
</OnPlatform>
<OnPlatform x:Key="LinuxLibertine" x:TypeArguments="x:String">
@ -81,6 +89,18 @@
<On Platform="UWP, WinRT, WinPhone" Value="Assets/Fonts/LinLibertine_R.ttf#Linux Libertine" />
</OnPlatform>
<OnPlatform x:Key="LinuxLibertineBold" x:TypeArguments="x:String">
<On Platform="iOS" Value="Linux Libertine" />
<On Platform="Android" Value="LinLibertine_RB.ttf#Linux Libertine" />
<On Platform="UWP, WinRT, WinPhone" Value="Assets/Fonts/LinLibertine_RB.ttf#Linux Libertine" />
</OnPlatform>
<OnPlatform x:Key="LinuxLibertineItal" x:TypeArguments="x:String">
<On Platform="iOS" Value="Linux Libertine" />
<On Platform="Android" Value="LinLibertine_RI.ttf#Linux Libertine" />
<On Platform="UWP, WinRT, WinPhone" Value="Assets/Fonts/LinLibertine_RI.ttf#Linux Libertine" />
</OnPlatform>
<Style TargetType="Label">
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertine}" />
</Style>
@ -88,23 +108,43 @@
<Style TargetType="Label" x:Key="section">
<Setter Property="FontSize" Value="Large" />
<Setter Property="TextColor" Value="{StaticResource titlered}" />
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertineCapitals}" />
</Style>
<Style TargetType="Label" x:Key="subsection">
<Setter Property="FontSize" Value="Medium" />
<Setter Property="TextColor" Value="{StaticResource titlered}" />
</Style>
<Style TargetType="Label" x:Key="subsubsection">
<Setter Property="FontSize" Value="Small" />
<Setter Property="FontSize" Value="Large" />
<Setter Property="TextColor" Value="{StaticResource titlered}" />
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertineCapitals}" />
</Style>
<Style TargetType="Label" x:Key="subsubsection">
<Setter Property="FontSize" Value="Large" />
<Setter Property="TextColor" Value="{StaticResource titlered}" />
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertineCapitals}" />
</Style>
<Style TargetType="Label" x:Key="content">
<Setter Property="FontSize" Value="Medium" />
<Setter Property="TextColor" Value="{StaticResource contentblack}" />
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertine}" />
</Style>
<Style TargetType="Label" x:Key="contentbold">
<Setter Property="FontSize" Value="Medium" />
<Setter Property="TextColor" Value="{StaticResource contentblack}" />
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertineBold}" />
</Style>
<Style TargetType="Label" x:Key="contentital">
<Setter Property="FontSize" Value="Medium" />
<Setter Property="TextColor" Value="{StaticResource contentblack}" />
<Setter Property="FontFamily" Value="{DynamicResource LinuxLibertineItal}" />
</Style>
<Style TargetType="NavigationPage">
<Setter Property="BarBackgroundColor" Value="{StaticResource Primary}" />
<Setter Property="BarTextColor" Value="White" />
<Setter Property="BarBackgroundColor" Value="{StaticResource titlered}" />
<Setter Property="BarTextColor" Value="{StaticResource bgtan}" />
<Setter Property="BackgroundColor" Value="{StaticResource bgtan}" />
</Style>
</ResourceDictionary>
</Application.Resources>

View file

@ -65,7 +65,7 @@ namespace AideDeJeu.Services
{
var scrapper = new Scrappers();
var spells = await scrapper.GetSpells(await scrapper.GetSpellIds("c"));
items = spells.Select(spell => new Item() { Text = spell.Title, Description = spell.DescriptionText }).ToList();
items = spells.Select(spell => new Item() { Text = spell.Title, Description = spell.Description }).ToList();
return await Task.FromResult(items);
}
}

View file

@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AideDeJeu.Models;
using AideDeJeuLib;
[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Services.SpellDataStore))]
namespace AideDeJeu.Services
{
public class SpellDataStore : IDataStore<Spell>
{
List<Spell> items;
public SpellDataStore()
{
items = new List<Spell>();
var mockItems = new List<Spell>
{
};
foreach (var item in mockItems)
{
items.Add(item);
}
}
public async Task<bool> AddItemAsync(Spell item)
{
items.Add(item);
return await Task.FromResult(true);
}
public async Task<bool> UpdateItemAsync(Spell item)
{
var _item = items.Where((Spell arg) => arg.Id == item.Id).FirstOrDefault();
items.Remove(_item);
items.Add(item);
return await Task.FromResult(true);
}
public async Task<bool> DeleteItemAsync(Spell item)
{
var _item = items.Where((Spell arg) => arg.Id == item.Id).FirstOrDefault();
items.Remove(_item);
return await Task.FromResult(true);
}
public async Task<Spell> GetItemAsync(string id)
{
return await Task.FromResult(items.FirstOrDefault(s => s.Id == id));
}
public async Task<IEnumerable<Spell>> GetItemsAsync(bool forceRefresh = false)
{
var scrapper = new Scrappers();
items = (await scrapper.GetSpells(await scrapper.GetSpellIds(""))).ToList();
//items = spells.Select(spell => new Item() { Text = spell.Title, Description = spell.DescriptionText }).ToList();
return await Task.FromResult(items);
}
}
}

View file

@ -7,12 +7,14 @@ using Xamarin.Forms;
using AideDeJeu.Models;
using AideDeJeu.Services;
using AideDeJeuLib;
namespace AideDeJeu.ViewModels
{
public class BaseViewModel : INotifyPropertyChanged
{
public IDataStore<Item> DataStore => DependencyService.Get<IDataStore<Item>>() ?? new MockDataStore();
public IDataStore<Spell> SpellDataStore => DependencyService.Get<IDataStore<Spell>>() ?? new SpellDataStore();
bool isBusy = false;
public bool IsBusy

View file

@ -0,0 +1,17 @@
using System;
using AideDeJeu.Models;
using AideDeJeuLib;
namespace AideDeJeu.ViewModels
{
public class SpellDetailViewModel : BaseViewModel
{
public Spell Item { get; set; }
public SpellDetailViewModel(Spell item = null)
{
Title = item?.Title;
Item = item;
}
}
}

View file

@ -0,0 +1,59 @@
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Threading.Tasks;
using Xamarin.Forms;
using AideDeJeu.Models;
using AideDeJeu.Views;
using AideDeJeuLib;
namespace AideDeJeu.ViewModels
{
public class SpellsViewModel : BaseViewModel
{
public ObservableCollection<Spell> Items { get; set; }
public Command LoadItemsCommand { get; set; }
public SpellsViewModel()
{
Title = "Browse";
Items = new ObservableCollection<Spell>();
LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
//MessagingCenter.Subscribe<NewItemPage, Spell>(this, "AddItem", async (obj, item) =>
//{
// var _item = item as Item;
// Items.Add(_item);
// await DataStore.AddItemAsync(_item);
//});
}
async Task ExecuteLoadItemsCommand()
{
if (IsBusy)
return;
IsBusy = true;
try
{
Items.Clear();
var items = await SpellDataStore.GetItemsAsync(true);
foreach (var item in items)
{
Items.Add(item);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
finally
{
IsBusy = false;
}
}
}
}

View file

@ -104,9 +104,9 @@
<DataTemplate>
<ViewCell>
<StackLayout Padding="10">
<Label Text="{Binding Text}"
<Label Text="{Binding Title}"
LineBreakMode="NoWrap"
Style="{DynamicResource ListItemTextStyle}"
Style="{DynamicResource subsubsection}"
FontSize="16" />
<!--<Label Text="{Binding Description}"
LineBreakMode="NoWrap"

View file

@ -1,5 +1,6 @@
using AideDeJeu.Models;
using AideDeJeu.ViewModels;
using AideDeJeuLib;
using System;
using Xamarin.Forms;
@ -10,22 +11,22 @@ namespace AideDeJeu.Views
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : MasterDetailPage //TabbedPage
{
ItemsViewModel viewModel;
SpellsViewModel viewModel;
public MainPage ()
{
InitializeComponent ();
BindingContext = viewModel = new ItemsViewModel();
BindingContext = viewModel = new SpellsViewModel();
}
async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
{
var item = args.SelectedItem as Item;
var item = args.SelectedItem as Spell;
if (item == null)
return;
await Navigation.PushAsync(new ItemDetailPage(new ItemDetailViewModel(item)));
await Navigation.PushAsync(new SpellDetailPage(new SpellDetailViewModel(item)));
// Manually deselect item.
ItemsListView.SelectedItem = null;

View file

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="AideDeJeu.Views.SpellDetailPage"
Title="{Binding Title}">
<ScrollView>
<StackLayout Orientation="Vertical" Padding="15">
<Label Text="{Binding Item.Title}" Style="{StaticResource Key=subsubsection}" />
<Label Text=" " />
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Item.Type}" Style="{StaticResource Key=contentital}" />
<Label Text="{Binding Item.Level, StringFormat='de niveau {0}'}" Style="{StaticResource Key=contentital}" />
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Durée d'incantation :" Style="{StaticResource Key=contentbold}" />
<Label Text="{Binding Item.CastingTime}" Style="{StaticResource Key=content}" />
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Portée :" Style="{StaticResource Key=contentbold}" />
<Label Text="{Binding Item.Range}" Style="{StaticResource Key=content}" />
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Composantes :" Style="{StaticResource Key=contentbold}" />
<Label Text="{Binding Item.Components}" Style="{StaticResource Key=content}" />
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Durée :" Style="{StaticResource Key=contentbold}" />
<Label Text="{Binding Item.Duration}" Style="{StaticResource Key=content}" />
</StackLayout>
<Label Text=" " />
<Label Text="{Binding Item.Description}" Style="{StaticResource Key=content}" />
<Label Text="{Binding Item.Source}" Style="{StaticResource Key=content}" />
</StackLayout>
</ScrollView>
</ContentPage>

View file

@ -0,0 +1,38 @@
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using AideDeJeu.Models;
using AideDeJeu.ViewModels;
using AideDeJeuLib;
namespace AideDeJeu.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SpellDetailPage : ContentPage
{
SpellDetailViewModel viewModel;
public SpellDetailPage(SpellDetailViewModel viewModel)
{
InitializeComponent();
BindingContext = this.viewModel = viewModel;
}
public SpellDetailPage()
{
InitializeComponent();
var item = new Spell
{
Title = "",
//Description = "This is an item description."
};
viewModel = new SpellDetailViewModel(item);
BindingContext = viewModel;
}
}
}

View file

@ -72,8 +72,8 @@ namespace AideDeJeuLib
newSpell.Components = spell.SelectSingleNode("div[strong/text()='Composantes']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1];
newSpell.Duration = spell.SelectSingleNode("div[strong/text()='Durée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1];
newSpell.DescriptionDiv = spell.SelectSingleNode("div[contains(@class,'description')]");
newSpell.Description = newSpell.DescriptionDiv.InnerHtml;
newSpell.DescriptionText = newSpell.DescriptionDiv.InnerText;
//newSpell.DescriptionHtml = newSpell.DescriptionDiv.InnerHtml;
//newSpell.Description = newSpell.DescriptionDiv.InnerText;
newSpell.Overflow = spell.SelectSingleNode("div[@class='overflow']")?.InnerText;
newSpell.NoOverflow = spell.SelectSingleNode("div[@class='nooverflow']")?.InnerText;
newSpell.Source = spell.SelectSingleNode("div[@class='source']").InnerText;
@ -143,7 +143,7 @@ namespace AideDeJeuLib
newSpell.Components = spell.SelectSingleNode("div[strong/text()='Composantes']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1];
newSpell.Duration = spell.SelectSingleNode("div[strong/text()='Durée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1];
newSpell.DescriptionDiv = spell.SelectSingleNode("div[contains(@class,'description')]");
newSpell.Description = newSpell.DescriptionDiv.InnerHtml;
//newSpell.Description = newSpell.DescriptionDiv.InnerHtml;
newSpell.Overflow = spell.SelectSingleNode("div[@class='overflow']")?.InnerText;
newSpell.NoOverflow = spell.SelectSingleNode("div[@class='nooverflow']")?.InnerText;
newSpell.Source = spell.SelectSingleNode("div[@class='source']").InnerText;

View file

@ -7,6 +7,7 @@ namespace AideDeJeuLib
{
public class Spell
{
public string Id { get; set; }
public string Title { get; set; }
public string TitleUS { get; set; }
public string LevelType { get; set; }
@ -16,8 +17,8 @@ namespace AideDeJeuLib
public string Range { get; set; }
public string Components { get; set; }
public string Duration { get; set; }
public string Description { get; set; }
public string DescriptionText { get; set; }
public string DescriptionHtml { get { return DescriptionDiv.InnerHtml; } }
public string Description { get { return DescriptionDiv.InnerHtml.Replace("<br>", "\r\n").Replace("<strong>","").Replace("</strong>", "").Replace("<em>", "").Replace("</em>", ""); } }
public HtmlNode DescriptionDiv { get; set; }
public string Overflow { get; set; }
public string NoOverflow { get; set; }