Skip to content

Commit

Permalink
Merge pull request #5 from ryanjagdfeld/dev
Browse files Browse the repository at this point in the history
Version 1.0.1
  • Loading branch information
ryanjagdfeld authored Oct 8, 2024
2 parents 42dc1d4 + 46a6aec commit b9a4192
Show file tree
Hide file tree
Showing 14 changed files with 197 additions and 201 deletions.
3 changes: 1 addition & 2 deletions Client/GitHubCardClientStartup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ public class GitHubCardClientStartup : IClientStartup
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IGitHubCardService, GitHubCardService>();
services.AddScoped(implementationFactory => new GitHubRepoService(new System.Net.Http.HttpClient()));
services.AddScoped(implementationFactory => new GitHubUserService(new System.Net.Http.HttpClient()));
services.AddScoped(implementationFactory => new GitHubService(new System.Net.Http.HttpClient()));
}
}
}
3 changes: 0 additions & 3 deletions Client/Modules/RyanJagdfeld.Module.GitHubCard/Edit.razor
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@
private string _entry;
private string _username;
private string _repo;
private string _theme = "default";
private string _createdby;
private int _height = 175;
private int _width = 350;

private DateTime _createdon;
private string _modifiedby;
Expand Down
79 changes: 34 additions & 45 deletions Client/Modules/RyanJagdfeld.Module.GitHubCard/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
@namespace RyanJagdfeld.Module.GitHubCard
@inherits ModuleBase
@inject IGitHubCardService GitHubCardService
@inject GitHubUserService GitHubUserService
@inject GitHubRepoService GitHubRepoService
@inject GitHubService GitHubService
@inject NavigationManager NavigationManager
@inject IStringLocalizer<Index> Localizer
@inject ISettingService SettingService
Expand All @@ -16,17 +15,21 @@
}
else
{
<ActionLink Action="Add" Security="SecurityAccessLevel.Edit" Text="Add GitHubCard" ResourceKey="Add" />
<br />
<br />
@if (@_GitHubCards.Count != 0)
@if (PageState.EditMode)
{
<ActionLink Action="Add" Security="SecurityAccessLevel.Edit" Text="Add GitHubCard" ResourceKey="Add" />
}
@if (_GitHubCards.Count != 0)
{
<Pager Items="@_GitHubCards" Format="Grid" ColumnClass="@_columnClasses">
<Row>
@OutputTemplate(context)
<div class="m-auto">
<ActionLink Action="Edit" Parameters="@($"id=" + context.GitHubCardId.ToString())" ResourceKey="Edit" />
<ActionDialog Header="Delete GitHubCard" Message="Are You Sure You Wish To Delete This GitHubCard?" Action="Delete" Security="SecurityAccessLevel.Edit" Class="btn btn-danger" OnClick="@(async () => await Delete(context))" ResourceKey="Delete" Id="@context.GitHubCardId.ToString()" />
@if (PageState.EditMode)
{
<ActionLink Action="Edit" Parameters="@($"id=" + context.GitHubCardId.ToString())" ResourceKey="Edit" Security="SecurityAccessLevel.Edit" />
<ActionDialog Header="Delete GitHubCard" Message="Are You Sure You Wish To Delete This GitHubCard?" Action="Delete" Security="SecurityAccessLevel.Edit" Class="btn btn-danger" OnClick="@(async () => await Delete(context))" ResourceKey="Delete" Id="@context.GitHubCardId.ToString()" />
}
</div>
</Row>
</Pager>
Expand All @@ -36,11 +39,8 @@ else
<p>@Localizer["Message.DisplayNone"]</p>
}
}

@code {
// uncomment the following line to use Static render mode for this component
//public override string RenderMode => RenderModes.Static;
public override List<Resource> Resources => new List<Resource>()
{
new Resource { ResourceType = ResourceType.Stylesheet, Url = ModulePath() + "Module.css" },
Expand All @@ -51,6 +51,7 @@ else
string _columnClasses;
string _userTemplate;
string _repoTemplate;
string _accessToken;

protected override async Task OnInitializedAsync()
{
Expand All @@ -60,23 +61,24 @@ else
_columnClasses = SettingService.GetSetting(ModuleState.Settings, "ColumnClasses", "col-xl-4 col-lg-6 col-12");
_userTemplate = SettingService.GetSetting(ModuleState.Settings, "UserTemplate", TemplateHelper.DefaultUserTemplate());
_repoTemplate = SettingService.GetSetting(ModuleState.Settings, "RepoTemplate", TemplateHelper.DefaultRepoTemplate());
_accessToken = SettingService.GetSetting(ModuleState.Settings, "AccessToken", string.Empty);

foreach (var gitHubCard in _GitHubCards)
{
var gitHubUser = await GitHubUserService.GetGitHubUserAsync(gitHubCard.Username);
if (gitHubUser != null)
{
gitHubCard.GitHubUser = gitHubUser;
}

if (!string.IsNullOrEmpty(gitHubCard.Repo))
{
var gitHubRepo = await GitHubRepoService.GetGitHubRepoAsync(gitHubCard.Username, gitHubCard.Repo);
var gitHubRepo = await GitHubService.GetGitHubRepoAsync(gitHubCard.Username, gitHubCard.Repo, _accessToken);
if (gitHubRepo != null)
{
gitHubCard.GitHubRepo = gitHubRepo;
};
}
}
}

var gitHubUser = await GitHubService.GetGitHubUserAsync(gitHubCard.Username, _accessToken);
if (gitHubUser != null)
{
gitHubCard.GitHubUser = gitHubUser;
}
}
}
catch (Exception ex)
Expand All @@ -86,52 +88,39 @@ else
}
}

private async Task Delete(GitHubCard GitHubCard)
private async Task Delete(GitHubCard gitHubCard)
{
try
{
await GitHubCardService.DeleteGitHubCardAsync(GitHubCard.GitHubCardId, ModuleState.ModuleId);
await logger.LogInformation("GitHubCard Deleted {GitHubCard}", GitHubCard);
await GitHubCardService.DeleteGitHubCardAsync(gitHubCard.GitHubCardId, ModuleState.ModuleId);
await logger.LogInformation("GitHubCard Deleted {GitHubCard}", gitHubCard);
_GitHubCards = await GitHubCardService.GetGitHubCardsAsync(ModuleState.ModuleId);
StateHasChanged();
}
catch (Exception ex)
{
await logger.LogError(ex, "Error Deleting GitHubCard {GitHubCard} {Error}", GitHubCard, ex.Message);
await logger.LogError(ex, "Error Deleting GitHubCard {GitHubCard} {Error}", gitHubCard, ex.Message);
AddModuleMessage(Localizer["Message.DeleteError"], MessageType.Error);
}
}

private string FullEntry(GitHubCard GitHubCard)
private string FullEntry(GitHubCard gitHubCard)
{
return GitHubCard.Repo != null ? $"{GitHubCard.Username}/{GitHubCard.Repo}" : GitHubCard.Username;
return gitHubCard.Repo != null ? $"{gitHubCard.Username}/{gitHubCard.Repo}" : gitHubCard.Username;
}

private MarkupString OutputTemplate(GitHubCard GitHubCard)
private MarkupString OutputTemplate(GitHubCard gitHubCard)
{
if (GitHubCard.GitHubRepo != null)
if (gitHubCard.GitHubRepo != null)
{
return new MarkupString(TemplateHelper.TokenizeTemplate(_repoTemplate, GitHubCard.GitHubRepo));
return new MarkupString(TemplateHelper.TokenizeTemplate(_repoTemplate, gitHubCard.GitHubRepo));
}

if (GitHubCard.GitHubUser != null)
if (gitHubCard.GitHubUser != null)
{
return new MarkupString(TemplateHelper.TokenizeTemplate(_userTemplate, GitHubCard.GitHubUser, HireableText(GitHubCard.GitHubUser.Hireable)));
return new MarkupString(TemplateHelper.TokenizeTemplate(_userTemplate, gitHubCard.GitHubUser));
}

return new MarkupString(Localizer.GetString("NotFound"));
}

public string HireableText(bool? Hireable)
{
if (Hireable != null)
{
if ((bool)Hireable)
{
return Localizer.GetString("Hireable");
}
return Localizer.GetString("NotHireable");
}
return string.Empty;
}
}
4 changes: 2 additions & 2 deletions Client/Modules/RyanJagdfeld.Module.GitHubCard/ModuleInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ public class ModuleInfo : IModule
{
Name = "GitHubCard",
Description = "A module for displaying GitHub cards by lepture.",
Version = "1.0.0",
Version = "1.0.1",
ServerManagerType = "RyanJagdfeld.Module.GitHubCard.Manager.GitHubCardManager, RyanJagdfeld.Module.GitHubCard.Server.Oqtane",
ReleaseVersions = "1.0.0",
ReleaseVersions = "1.0.0,1.0.1",
Dependencies = "RyanJagdfeld.Module.GitHubCard.Shared.Oqtane",
PackageName = "RyanJagdfeld.Module.GitHubCard"
};
Expand Down
14 changes: 11 additions & 3 deletions Client/Modules/RyanJagdfeld.Module.GitHubCard/Settings.razor
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,17 @@
<Label Class="col-sm-3" For="userTemplate" HelpText="The template for displaying a GitHub User" ResourceKey="UserTemplate" ResourceType="@resourceType">User Template: </Label>
<div class="col-sm-9">
<textarea id="userTemplate" rows="8" cols="75" class="form-control" @bind="@_userTemplate" />
<button id="reloadUserDefault" class="btn btn-secondary" @onclick="ReloadUserDefaultTemplate">@Localizer.GetString("ReloadDefault")</button>
<button id="reloadUserDefault" class="btn btn-secondary" @onclick:preventDefault @onclick="ReloadUserDefaultTemplate">@Localizer.GetString("ReloadDefault")</button>
</div>
<Label Class="col-sm-3" For="repoTemplate" HelpText="The template for displaying a GitHub Repo" ResourceKey="RepoTemplate" ResourceType="@resourceType">Repo Template: </Label>
<div class="col-sm-9">
<textarea id="repoTemplate" rows="8" cols="75" class="form-control" @bind="@_repoTemplate" />
<button id="reloadRepoDefault" class="btn btn-secondary" @onclick="ReloadRepoDefaultTemplate">@Localizer.GetString("ReloadDefault")</button>
<button id="reloadRepoDefault" class="btn btn-secondary" @onclick:preventDefault @onclick="ReloadRepoDefaultTemplate">@Localizer.GetString("ReloadDefault")</button>
</div>
<div class="alert alert-warning">@Localizer.GetString("TokenCaution")</div>
<Label Class="col-sm-3" For="accessToken" HelpText="A GitHub personal access token. Without authentication, GitHub allows 60 requests per hour from the same IP address. Authenticated requests increase the limit to 5,000 requests per hour." ResourceKey="AccessToken" ResourceType="@resourceType">GitHub Access Token: </Label>
<div class="col-sm-9">
<input id="accessToken" type="text" class="form-control" @bind="@_accessToken" />
</div>
</div>
</div>
Expand All @@ -26,6 +31,7 @@
private string resourceType = "RyanJagdfeld.Module.GitHubCard.Settings, RyanJagdfeld.Module.GitHubCard.Client.Oqtane"; // for localization
public override string Title => "GitHubCard Settings";

string _accessToken;
string _columnClasses;
string _userTemplate;
string _repoTemplate;
Expand All @@ -35,9 +41,10 @@
try
{
Dictionary<string, string> settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId);
_columnClasses = SettingService.GetSetting(settings, "ColumnClasses", "col-xl-4 col-lg-6 col-12");
_columnClasses = SettingService.GetSetting(settings, "ColumnClasses", "col-lg-6 col-12");
_userTemplate = SettingService.GetSetting(settings, "UserTemplate", TemplateHelper.DefaultUserTemplate());
_repoTemplate = SettingService.GetSetting(settings, "RepoTemplate", TemplateHelper.DefaultRepoTemplate());
_accessToken = SettingService.GetSetting(settings, "AccessToken", string.Empty);
}
catch (Exception ex)
{
Expand All @@ -53,6 +60,7 @@
SettingService.SetSetting(settings, "ColumnClasses", _columnClasses);
SettingService.SetSetting(settings, "UserTemplate", _userTemplate);
SettingService.SetSetting(settings, "RepoTemplate", _repoTemplate);
SettingService.SetSetting(settings, "AccessToken", _accessToken);
await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId);
}
catch (Exception ex)
Expand Down
108 changes: 55 additions & 53 deletions Client/Modules/RyanJagdfeld.Module.GitHubCard/TemplateHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ namespace RyanJagdfeld.Module.GitHubCard
{
public static class TemplateHelper
{
public static string TokenizeTemplate(string template, GitHubUser user, string hireableText)
public static string TokenizeTemplate(string template, GitHubUser user)
{
return template
.Replace("{AvatarUrl}", user.AvatarUrl)
.Replace("{Name}", user.Name)
.Replace("{HireableText}", hireableText)
.Replace("{PublicRepos}", user.PublicRepos.ToString())
.Replace("{PublicGists}", user.PublicGists.ToString())
.Replace("{Followers}", user.Followers.ToString())
Expand Down Expand Up @@ -43,64 +42,67 @@ public static string TokenizeTemplate(string template, GitHubRepo repo)
public static string DefaultUserTemplate()
{
return @"
<div class='card p-3'>
<div class='d-flex align-items-center'>
<div class='image'>
<img src='{AvatarUrl}' class='rounded' width='155'>
</div>
<div class='ms-3 w-100'>
<h4 class='mb-0 mt-0'>{Name}</h4>
<span>{HireableText}</span>
<div class='p-2 mt-2 bg-primary d-flex justify-content-between rounded text-white stats'>
<div class='d-flex flex-column'>
<span >Repos</span>
<span class='text-center'>{PublicRepos}</span>
</div>
<div class='d-flex flex-column'>
<span>Gists</span>
<span class='text-center'>{PublicGists}</span>
</div>
<div class='d-flex flex-column'>
<span>Followers</span>
<span class='text-center'>{Followers}</span>
</div>
</div>
<div class='button mt-2 d-flex flex-row align-items-center'>
<a href='{HtmlUrl}' class='btn btn-sm btn-primary w-100 ml-2' target='_blank'>Follow</a>
</div>
</div>
<div class='card p-3'>
<div class='d-flex align-items-start'>
<div class='image'>
<img src='{AvatarUrl}' class='img-fluid rounded'>
</div>
<div class='ms-3 w-100'>
<h4 class='mb-0 mt-0 card-title'>{Name}</h4>
<div class='p-2 mt-2 card-text'>
{Bio}
</div>
<div class='p-2 mt-2 bg-primary d-flex justify-content-between rounded text-white'>
<div class='d-flex flex-column'>
<span>Repos</span>
<span class='text-center'>{PublicRepos}</span>
</div>
</div>";
<div class='d-flex flex-column'>
<span>Gists</span>
<span class='text-center'>{PublicGists}</span>
</div>
<div class='d-flex flex-column'>
<span>Followers</span>
<span class='text-center'>{Followers}</span>
</div>
</div>
<div class='button mt-2 d-flex flex-row align-items-center'>
<a href='{HtmlUrl}' class='btn btn-primary w-100 ml-2' target='_blank'>Follow</a>
</div>
</div>
</div>
</div>";
}

public static string DefaultRepoTemplate()
{
return @"
<div class='card p-3'>
<div class='d-flex align-items-center'>
<div class='image'>
<img src='{AvatarUrl}' class='rounded' width='155'>
</div>
<div class='ms-3 w-100 card-body'>
<h4 class='mb-0 mt-0 card-title'>{Name}<sup>{Language}</sup></h4>
<div class='p-2 mt-2 card-text'>
{Description} - <a href='{HomePage}' target='_blank'>{HomePageText}</a>
<div class='button mt-2 d-flex flex-row justify-content-between w-100'>
<div class='d-flex flex-column'>
<span>Forks</span>
<span class='text-center'>{Forks}</span>
</div>
<div class='d-flex flex-column'>
<span>Stars</span>
<span class='text-center'>{Stars}</span>
</div>
<div class='d-flex flex-column'>
<a href='{HtmlUrl}' class='btn btn-primary' target='_blank'>Star</a>
</div>
</div>
</div>
<div class='card p-3'>
<div class='d-flex align-items-start'>
<div class='image'>
<img src='{AvatarUrl}' class='img-fluid rounded'>
</div>
<div class='ms-3 w-100 card-body'>
<h4 class='mb-0 mt-0 card-title'>{Name}<sup>{Language}</sup></h4>
<div class='p-2 mt-2 card-text'>
{Description} - <a href='{HomePage}' target='_blank'>{HomePageText}</a>
</div>
<div class='button mt-2 d-flex flex-row justify-content-between w-100'>
<div class='d-flex flex-column'>
<span>Forks</span>
<span class='text-center'>{Forks}</span>
</div>
<div class='d-flex flex-column'>
<span>Stars</span>
<span class='text-center'>{Stars}</span>
</div>
<div class='d-flex flex-column'>
<a href='{HtmlUrl}' class='btn btn-primary' target='_blank'>Star</a>
</div>
</div>";
</div>
</div>
</div>
</div>";
}
}
}
13 changes: 11 additions & 2 deletions Client/Resources/RyanJagdfeld.Module.GitHubCard/Settings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,21 @@
<value>User Template:</value>
</data>
<data name="UserTemplate.HelpText" xml:space="preserve">
<value>The User Template for creating the output HTML. You can use any of the following tokens: {AvatarUrl}, {Name}, {HireableText}, {PublicRepos}, {PublicGists}, {Followers}, {Username}, {HtmlUrl}, {Bio}, {Location}.</value>
<value>The User Template for creating the output HTML. You can use any of the following tokens: {AvatarUrl}, {Name}, {PublicRepos}, {PublicGists}, {Followers}, {Username}, {HtmlUrl}, {Bio}, {Location}.</value>
</data>
<data name="RepoTemplate.Text" xml:space="preserve">
<value>Repo Templage:</value>
<value>Repo Template:</value>
</data>
<data name="RepoTemplate.HelpText" xml:space="preserve">
<value>The Repo Template for creating the output HTML. You can use any of the following tokens: {AvatarUrl}, {Name}, {HomePage}, {HomePageText}, {Description}, {Language}, {Forks}, {Stars}, {HtmlUrl}.</value>
</data>
<data name="AccessToken.Text" xml:space="preserve">
<value>Access Token:</value>
</data>
<data name="AccessToken.HelpText" xml:space="preserve">
<value>A GitHub personal access token. Without authentication, GitHub allows 60 requests per hour from the same IP address. Authenticated requests increase the limit to 5,000 requests per hour.</value>
</data>
<data name="TokenCaution" xml:space="preserve">
<value>Please only use the token for server hosted applications or development purposes. It will be exposed to clients if used in WebAssembly (client). </value>
</data>
</root>
Loading

0 comments on commit b9a4192

Please sign in to comment.